/// <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);
        }
Ejemplo n.º 4
0
        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();
 }