/// <summary> /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. /// </summary> /// <param name="disposing">Indicates if Dispose is being called from the Dispose method.</param> protected virtual void Dispose(bool disposing) { if (disposing && !this.disposed) { this.mediaPlugin.CurrentStateChanged -= this.MediaPluginCurrentStateChanged; this.mediaPlugin.SeekCompleted -= this.MediaPluginSeekCompleted; this.mediaPlugin.Unload(); this.mediaPlugin.Dispose(); this.mediaPlugin = null; this.disposed = true; } }
public ManifestPlayableMediaData(bool videoMedia) { this.videoMedia = videoMedia; this.mediaPlugin = new RCESmoothStreamingMediaPlugin { AutoPlay = false }; this.mediaPlugin.VisualElement.Opacity = 0; this.mediaPlugin.VisualElement.Visibility = Visibility.Collapsed; this.mediaPlugin.CurrentStateChanged += this.MediaPluginCurrentStateChanged; this.mediaPlugin.SeekCompleted += this.MediaPluginSeekCompleted; this.mediaPlugin.MediaOpened += this.OnMediaOpened; this.mediaPlugin.MediaFailed += this.MediaPlugin_MediaFailed; }
public static TimeSpan GetVideoStreamStartOffset(this IRCESmoothStreamingMediaPlugin mediaPlugin) { var currentSegment = mediaPlugin.CurrentSegment; if (currentSegment != null) { var firstVideoStream = currentSegment.SelectedStreams.Where(s => s.Type == StreamType.Video).FirstOrDefault(); if (firstVideoStream != null) { return(firstVideoStream.GetStartOffset()); } } return(mediaPlugin.StartPosition); }
public override void SetLogEntriesSource(object source) { var plugin = source as IRCESmoothStreamingMediaPlugin; if (plugin != null) { if (this.rceMediaPlugin != null) { this.rceMediaPlugin.ManifestReady -= this.OnManifestReady; this.rceMediaPlugin.StreamSelected -= this.OnStreamSelected; this.rceMediaPlugin.DownloadStreamDataCompleted -= this.OnDownloadStreamDataCompleted; } this.rceMediaPlugin = plugin; this.rceMediaPlugin.ChunkDownloadStrategy = ChunkDownloadStrategy.AggressiveFromStart; this.rceMediaPlugin.ManifestReady += this.OnManifestReady; this.rceMediaPlugin.StreamSelected += this.OnStreamSelected; this.rceMediaPlugin.DownloadStreamDataCompleted += this.OnDownloadStreamDataCompleted; } }
/// <summary> /// Picks a thumbnail of the current media element. /// </summary> /// <param name="mediaData">The media data o the current element.</param> public void PickThumbnail(MediaData mediaData, ThumbnailType thumbnailType) { if (mediaData != null) { IRCESmoothStreamingMediaPlugin mediaElement = mediaData.MediaPlugin as IRCESmoothStreamingMediaPlugin; if (mediaElement != null) { this.StartThumbnailBuffer(); bool thumbnailSeekCompleted = false; TimeSpan currentPosition = mediaElement.Position; IRCESmoothStreamingMediaPlugin plugin = new RCESmoothStreamingMediaPlugin(); DispatcherTimer thubmnailTimer = new DispatcherTimer { Interval = new TimeSpan(0, 0, 0, 5) }; thubmnailTimer.Tick += (sender, e) => { if (thumbnailSeekCompleted) { thumbnailSeekCompleted = false; thubmnailTimer.Stop(); WriteableBitmap writeableBitmap = new WriteableBitmap(plugin.VisualElement, null); // writeableBitmap.Render(mediaElement, null); writeableBitmap.Invalidate(); this.Model.SetThumbnail(writeableBitmap, thumbnailType); this.PlayerContainerGrid.Children.Remove(plugin.VisualElement); plugin.Unload(); plugin = null; thubmnailTimer = null; this.EndThumbnailBuffer(); } }; thubmnailTimer.Start(); plugin.ManifestReady += e => plugin.SelectMaxAvailableBitrateTracks("cameraAngle", "camera1"); plugin.MediaOpened += e => { e.Position = currentPosition; e.VisualElement.Visibility = Visibility.Collapsed; }; plugin.SeekCompleted += (e, success) => thumbnailSeekCompleted = true; plugin.Load(); plugin.AutoPlay = false; plugin.Volume = 0; plugin.IsMuted = true; plugin.VisualElement.Width = mediaElement.VisualElement.ActualWidth; plugin.VisualElement.Height = mediaElement.VisualElement.ActualHeight; this.PlayerContainerGrid.Children.Add(plugin.VisualElement); plugin.AdaptiveSource = mediaElement.AdaptiveSource; } } }
/// <summary> /// Handles the ManifestMerge event of the MediaElement. /// </summary> /// <param name="ssme">The sender media element.</param> private void MediaElement_ManifestMerge(IRCESmoothStreamingMediaPlugin plugin) { this.MergeExternalManifestFiles(); }