private void _mediaLoad(IMedia media, bool reloadSegments) { if (reloadSegments) { _playWholeClip = false; SelectedSegment = null; } TimeSpan duration = Duration; TimeSpan tcIn = StartTc; decimal audioVolume = _event != null && _event.AudioVolume != null ? (decimal)_event.AudioVolume : media != null ? media.AudioVolume : 0M; if (media != null && duration.Ticks >= _formatDescription.FrameTicks) { TcIn = tcIn; TcOut = tcIn + duration - TimeSpan.FromTicks(_formatDescription.FrameTicks); if (reloadSegments && media is IPersistentMedia) { MediaSegments.Clear(); foreach (IMediaSegment ms in ((IPersistentMedia)media).MediaSegments.Segments) { MediaSegments.Add(new MediaSegmentViewmodel((IPersistentMedia)media, ms)); } } _loadedSeek = (tcIn.Ticks - media.TcStart.Ticks) / _formatDescription.FrameTicks; long newPosition = _preview.PreviewLoaded ? _preview.PreviewSeek + _preview.PreviewPosition - _loadedSeek : 0; if (newPosition < 0) { newPosition = 0; } _loadedDuration = duration.Ticks / _formatDescription.FrameTicks; _loadedMedia = media; _preview.PreviewLoad(media, _loadedSeek, _loadedDuration, newPosition, audioVolume); } NotifyPropertyChanged(null); }
public void ReadM3U8File() { try { DateTime createdTime = new FileInfo(outputPath).CreationTime; List <MediaSegments> segments = new List <MediaSegments>(); M3U8Info m3U8Info = new M3U8Info(); using (StreamReader sr = new StreamReader(outputPath)) { string line; MediaSegments segment = new MediaSegments(); segment.StartTime = createdTime; while ((line = sr.ReadLine()) != null) { var val = line.Split(":"); if (val.Length > 1) { var key = val[0]; var value = val[1]; switch (key) { case "#EXT-X-VERSION": m3U8Info.Version = int.Parse(value); break; case "#EXT-X-TARGETDURATION": m3U8Info.Version = int.Parse(value); break; case "#EXT-X-MEDIA-SEQUENCE": m3U8Info.MediaSequence = int.Parse(value); break; case "#EXT-X-PLAYLIST-TYPE": m3U8Info.PlaylistType = value; break; case "#EXTINF": { value = value.Remove(value.Length - 1, 1); var duration = Convert.ToDouble(value); segment.Duration = duration; segment.EndTime = segment.StartTime.AddSeconds(duration); createdTime = segment.EndTime; }; break; case "#EXT-X-BYTERANGE": { var byterange = value.Split("@"); segment.Size = int.Parse(byterange[0]); segment.ByteIndex = int.Parse(byterange[1]); }; break; case "#EXT-X-DISCONTINUITY": break; default: break; } } if (val.Length == 1) { if (line.Contains(".ts")) { segment.FileName = line.Split(".")[0]; segment.StreamId = "stream"; segments.Add(segment); // _db.MediaSegments.Add(segment); segment = new MediaSegments(); segment.StartTime = createdTime; } } // Use a tab to indent each line of the file. Debug.WriteLine("\t" + line); } } _db.M3U8Info.Add(m3U8Info); _db.MediaSegments.AddRange(segments); _db.SaveChanges(); } catch (Exception ex) { Debug.WriteLine(ex); } }