/// <summary>
        /// Handles the MediaCenterEnvironment.PropertyChanged event
        /// </summary>
        protected void MediaCenterEnvironment_PropertyChanged(IPropertyObject sender, string property)
        {
            Logger.ReportVerbose("MediaCenterEnvironment_PropertyChanged: " + property);

            MediaCenterEnvironment env = sender as MediaCenterEnvironment;

            MediaExperience exp = env.MediaExperience;

            if (exp != null)
            {
                MediaTransport transport = exp.Transport;

                if (transport != null)
                {
                    transport.PropertyChanged -= MediaTransport_PropertyChanged;
                    transport.PropertyChanged += MediaTransport_PropertyChanged;

                    HandlePropertyChange(env, exp, transport, property);
                }
                else
                {
                    Logger.ReportWarning("MediaCenterEnvironment_PropertyChanged: MediaTransport is null");
                }
            }
            else
            {
                Logger.ReportWarning("MediaCenterEnvironment_PropertyChanged: MediaExperience is null");
            }
        }
Пример #2
0
        /// <summary>
        /// Handles the MediaCenterEnvironment.PropertyChanged event
        /// </summary>
        protected void MediaCenterEnvironment_PropertyChanged(IPropertyObject sender, string property)
        {
            System.Diagnostics.Debug.Assert(Microsoft.MediaCenter.UI.Application.ApplicationThread == System.Threading.Thread.CurrentThread);

            Logger.ReportVerbose("MediaCenterEnvironment_PropertyChanged: " + property);

            MediaCenterEnvironment env = sender as MediaCenterEnvironment;

            MediaExperience exp = env.MediaExperience;

            if (exp != null)
            {
                MediaTransport transport = exp.Transport;

                if (transport != null)
                {
                    transport.PropertyChanged -= MediaTransport_PropertyChanged;
                    transport.PropertyChanged += MediaTransport_PropertyChanged;

                    HandlePropertyChange(env, exp, transport, property);
                }
                else
                {
                    Logger.ReportWarning("MediaCenterEnvironment_PropertyChanged: MediaTransport is null");
                }
            }
            else
            {
                Logger.ReportWarning("MediaCenterEnvironment_PropertyChanged: MediaExperience is null");
            }
        }
 public ImageMediaElementAdapter(QuartileAdPlayerBase MediaPlugin, MediaTransport MediaTransport, Image Image)
     : base(MediaTransport)
 {
     MediaPlugin.AdPaused += new EventHandler(MediaPlugin_AdPaused);
     MediaPlugin.AdResumed += new EventHandler(MediaPlugin_AdResumed);
     this.MediaPlugin = MediaPlugin;
     this.Image = Image;
 }
        /// <summary>
        /// Handles the MediaTransport.PropertyChanged event, which most of the time will be due to Position
        /// </summary>
        protected void MediaTransport_PropertyChanged(IPropertyObject sender, string property)
        {
            MediaTransport transport = sender as MediaTransport;

            MediaCenterEnvironment env = AddInHost.Current.MediaCenterEnvironment;

            MediaExperience exp = env.MediaExperience;

            HandlePropertyChange(env, exp, transport, property);
        }
        private static void WaitForStream(MediaTransport transport)
        {
            var i = 0;

            while ((i++ < 15) && (transport != null && transport.PlayState != PlayState.Playing))
            {
                // settng the position only works once it is playing and on fast multicore machines we can get here too quick!
                Thread.Sleep(100);
            }
        }
Пример #6
0
        /// <summary>
        /// Handles the MediaTransport.PropertyChanged event, which most of the time will be due to Position
        /// </summary>
        protected void MediaTransport_PropertyChanged(IPropertyObject sender, string property)
        {
            System.Diagnostics.Debug.Assert(Microsoft.MediaCenter.UI.Application.ApplicationThread == System.Threading.Thread.CurrentThread);
            MediaTransport transport = sender as MediaTransport;

            MediaCenterEnvironment env = Application.MediaCenterEnvironment;

            MediaExperience exp = env.MediaExperience;

            HandlePropertyChange(env, exp, transport, property);
        }
Пример #7
0
        protected override void Dispose(bool isDisposing)
        {
            MediaTransport transport = PlaybackControllerHelper.GetCurrentMediaTransport();

            if (transport != null)
            {
                transport.PropertyChanged -= MediaTransport_PropertyChanged;
            }

            base.Dispose(isDisposing);
        }
Пример #8
0
 void Transport_PropertyChanged(IPropertyObject sender, string property)
 {
     OMLApplication.ExecuteSafe(delegate
     {
         MediaTransport t = (MediaTransport)sender;
         Utilities.DebugLine("MoviePlayerTranscode.Transport_PropertyChanged: movie {0} property {1} playrate {2} state {3} pos {4}", OMLApplication.Current.NowPlayingMovieName, property, t.PlayRate, t.PlayState.ToString(), t.Position.ToString());
         if (property == "PlayState")
         {
             if (t.PlayState == PlayState.Finished || t.PlayState == PlayState.Stopped)
             {
                 transcoder.Stop(false);
                 Utilities.DebugLine("MoviePlayerTranscode.Transport_PropertyChanged: movie {0} Finished", OMLApplication.Current.NowPlayingMovieName);
                 OMLApplication.Current.NowPlayingStatus = PlayState.Finished;
             }
         }
     });
 }
Пример #9
0
        static public void Transport_PropertyChanged(IPropertyObject sender, string property)
        {
            OMLApplication.ExecuteSafe(delegate
            {
                MediaTransport t = (MediaTransport)sender;
                OMLApplication.DebugLine("[AppleTrailers] Transport_PropertyChanged: movie {0} property {1} playrate {2} state {3} pos {4}", OMLApplication.Current.NowPlayingMovieName, property, t.PlayRate, t.PlayState.ToString(), t.Position.ToString());
                if (property == "PlayState")
                {
                    OMLApplication.Current.NowPlayingStatus = t.PlayState;
                    OMLApplication.DebugLine("[AppleTrailers] MoviePlayerFactory.Transport_PropertyChanged: movie {0} state {1}", OMLApplication.Current.NowPlayingMovieName, t.PlayState.ToString());

                    if (t.PlayState == PlayState.Finished || t.PlayState == PlayState.Stopped)
                    {
                        OMLApplication.DebugLine("[AppleTrailers] Playstate is stopped, moving to previous page");
                        OMLApplication.Current.Session.BackPage();
                    }
                }
            });
        }
Пример #10
0
        static public void Transport_PropertyChanged(IPropertyObject sender, string property)
        {
            OMLApplication.ExecuteSafe(delegate
            {
                MediaTransport t = (MediaTransport)sender;
                Utilities.DebugLine("[MoviePlayerFactory] Transport_PropertyChanged: movie {0} property {1} playrate {2} state {3} pos {4}", OMLApplication.Current.NowPlayingMovieName, property, t.PlayRate, t.PlayState.ToString(), t.Position.ToString());
                if (property == "PlayState")
                {
                    OMLApplication.Current.NowPlayingStatus = t.PlayState;
                    Utilities.DebugLine("[MoviePlayerFactory] MoviePlayerFactory.Transport_PropertyChanged: movie {0} state {1}", OMLApplication.Current.NowPlayingMovieName, t.PlayState.ToString());

                    //if (t.PlayState == PlayState.Finished || t.PlayState == PlayState.Stopped)
                    //{
                    //    if (AddInHost.Current.ApplicationContext.IsForegroundApplication && AddInHost.Current.MediaCenterEnvironment.MediaExperience.IsFullScreen)
                    //    {
                    //        AddInHost.Current.ApplicationContext.ReturnToApplication();
                    //        OMLApplication.DebugLine("[MoviePlayer] Playstate is stopped, moving to previous page");
                    //        //OMLApplication.Current.Session.BackPage();
                    //    }
                    //}
                }
            });
        }
Пример #11
0
        void Transport_PropertyChanged(Microsoft.MediaCenter.UI.IPropertyObject sender, string property)
        {
            OMLApplication.ExecuteSafe(delegate
            {
                MediaTransport t = (MediaTransport)sender;
                Utilities.DebugLine("[MoviePlayerExtenderDVD] Transport_PropertyChanged: movie {0} property {1} playrate {2} state {3} pos {4}", OMLApplication.Current.NowPlayingMovieName, property, t.PlayRate, t.PlayState.ToString(), t.Position.ToString());
                if (property == "PlayState")
                {
                    switch (t.PlayState)
                    {
                    case PlayState.Finished:
                        Utilities.DebugLine("[MoviePlayerExtenderDVD] (Finished): clear resume time");
                        this._source.ClearResumeTime();
                        break;

                    case PlayState.Stopped:
                    case PlayState.Paused:
                        Utilities.DebugLine("[MoviePlayerExtenderDVD] ({0}): set resume time: {1}", t.PlayState, t.Position);
                        this._source.SetResumeTime(t.Position);
                        break;
                    }
                }
            });
        }
Пример #12
0
        public static PlayState GetCurrentPlayState()
        {
            MediaExperience mce = Application.MediaExperience;

            // Try to access MediaExperience.Transport and get PlayState from there
            if (mce != null)
            {
                try
                {
                    MediaTransport transport = mce.Transport;

                    if (transport != null)
                    {
                        return(transport.PlayState);
                    }
                }
                catch (InvalidOperationException ex)
                {
                    // We may not have access to the Transport if another application is playing media
                    Logger.ReportException("GetCurrentPlayState", ex);
                }

                // If we weren't able to access MediaExperience.Transport, it's likely due to another application playing media
                Microsoft.MediaCenter.Extensibility.MediaType mediaType = mce.MediaType;

                if (mediaType != Microsoft.MediaCenter.Extensibility.MediaType.Unknown)
                {
                    Logger.ReportVerbose("MediaExperience.MediaType is {0}. Assume content is playing.", mediaType);

                    return(Microsoft.MediaCenter.PlayState.Playing);
                }
            }

            // At this point nothing worked, so return Undefined
            return(PlayState.Undefined);
        }
 public AdaptiveMediaElementAdapter(SmoothStreamingMediaElement MediaPlugin, MediaTransport MediaTransport)
     : base(MediaTransport)
 {
     this.MediaPlugin = MediaPlugin;
 }
Пример #14
0
 public void PlayVideo(string path)
 {
     if (lastWasDVD) mediaTransport = null;
     PlayPath(path);
     lastWasDVD = false;
 }
 private static void WaitForStream(MediaTransport transport)
 {
     var i = 0;
     while ((i++ < 15) && (transport != null && transport.PlayState != PlayState.Playing))
     {
         // settng the position only works once it is playing and on fast multicore machines we can get here too quick!
         Thread.Sleep(100);
     }
 }
Пример #16
0
        private void HandlePropertyChange(MediaCenterEnvironment env, MediaExperience exp, MediaTransport transport, string property)
        {
            PlayState state;
            long      positionTicks = 0;

            // If another application is playing the content, such as the WMC autoplay handler, we will
            // not have permission to access Transport properties
            // But we can look at MediaExperience.MediaType to determine if something is playing
            try
            {
                state         = transport.PlayState;
                positionTicks = transport.Position.Ticks;
            }
            catch (InvalidOperationException)
            {
                Logger.ReportVerbose("HandlePropertyChange was not able to access MediaTransport. Defaulting values.");
                state = exp.MediaType == Microsoft.MediaCenter.Extensibility.MediaType.Unknown ? Microsoft.MediaCenter.PlayState.Undefined : Microsoft.MediaCenter.PlayState.Playing;
            }

            bool playstateChanged = state != _CurrentPlayState;

            _CurrentPlayState = state;

            // Determine if playback has stopped. Per MSDN documentation, Finished is no longer used with Windows 7
            bool isStopped = state == Microsoft.MediaCenter.PlayState.Finished || state == Microsoft.MediaCenter.PlayState.Stopped || state == Microsoft.MediaCenter.PlayState.Undefined;

            // Don't get tripped up at the initial state of Stopped with position 0
            if (!_HasStartedPlaying)
            {
                if (!isStopped)
                {
                    Logger.ReportVerbose("HandlePropertyChange has recognized that playback has started");
                    _HasStartedPlaying = true;
                    IsStreaming        = Playable.CurrentFile.StartsWith("http://", StringComparison.OrdinalIgnoreCase) ||
                                         Playable.CurrentFile.StartsWith("https://", StringComparison.OrdinalIgnoreCase);
                    if (Playable.HasMediaItems)
                    {
                        Application.CurrentInstance.CurrentlyPlayingItemId = lastItemId = Playable.CurrentMedia.Id;
                        Application.CurrentInstance.ReportPlaybackStart(Playable.CurrentMedia.ApiId, IsStreaming);
                    }
                }
                else
                {
                    return;
                }
            }

            // protect against really agressive calls
            if (property == "Position")
            {
                Application.CurrentInstance.CurrentlyPlayingItem.CurrentPlaybackPosition = positionTicks;
                var diff = (DateTime.Now - _LastTransportUpdateTime).TotalMilliseconds;

                // Only cancel out Position reports
                if (diff < 5000 && diff >= 0)
                {
                    return;
                }
            }

            _LastTransportUpdateTime = DateTime.Now;

            // Get metadata from player
            MediaMetadata metadata = exp.MediaMetadata;

            string metadataTitle    = PlaybackControllerHelper.GetTitleOfCurrentlyPlayingMedia(metadata);
            long   metadataDuration = PlaybackControllerHelper.GetDurationOfCurrentlyPlayingMedia(metadata);

            PlaybackStateEventArgs eventArgs = GetCurrentPlaybackState(metadataTitle, metadataDuration, positionTicks);

            // Only fire the progress handler while playback is still active, because once playback stops position will be reset to 0
            OnProgress(eventArgs);

            if (eventArgs.Item != null && eventArgs.Item.HasMediaItems && eventArgs.Item.CurrentMedia.Id != lastItemId)
            {
                // started playing a new item - update
                Application.CurrentInstance.CurrentlyPlayingItemId = lastItemId = eventArgs.Item.MediaItems.ElementAt(eventArgs.CurrentMediaIndex).Id;
            }


            Application.CurrentInstance.ShowNowPlaying = eventArgs.Item == null || eventArgs.Item.ShowNowPlayingView;

            if (playstateChanged)
            {
                FirePropertyChanged("IsPaused");

                if (state == Microsoft.MediaCenter.PlayState.Paused)
                {
                    // allow screensavers/sleep
                    Helper.AllowSleep();
                }
                else if (state == Microsoft.MediaCenter.PlayState.Playing || state == Microsoft.MediaCenter.PlayState.Buffering)
                {
                    // disallow again
                    Helper.PreventSleep();
                }

                // Get the title from the PlayableItem, if it's available. Otherwise use MediaMetadata
                string title = eventArgs.Item == null ? metadataTitle : (eventArgs.Item.HasMediaItems ? eventArgs.Item.MediaItems.ElementAt(eventArgs.CurrentMediaIndex).Name : eventArgs.Item.Files.ElementAt(eventArgs.CurrentFileIndex));

                Logger.ReportVerbose("Playstate changed to {0} for {1}, PositionTicks:{2}, Playlist Index:{3}", state, title, positionTicks, eventArgs.CurrentFileIndex);
                //Logger.ReportVerbose("Refresh rate is {0}", DisplayUtil.GetCurrentRefreshRate());

                PlayStateChanged();
                Logger.ReportVerbose("Back from PlayStateChanged");
            }

            if (isStopped)
            {
                Logger.ReportVerbose("Calling HandleStopedState");
                HandleStoppedState(env, exp, transport, eventArgs);
            }
        }
 public MediaElementAdapterBase(MediaTransport MediaTransport)
 {
     this.MediaTransport = MediaTransport;
 }
        private void HandlePropertyChange(MediaCenterEnvironment env, MediaExperience exp, MediaTransport transport, string property)
        {
            PlayState state;
            long positionTicks = 0;

            // If another application is playing the content, such as the WMC autoplay handler, we will
            // not have permission to access Transport properties
            // But we can look at MediaExperience.MediaType to determine if something is playing
            try
            {
                state = transport.PlayState;
                positionTicks = transport.Position.Ticks;
            }
            catch (InvalidOperationException)
            {
                Logger.ReportVerbose("HandlePropertyChange was not able to access MediaTransport. Defaulting values.");
                state = exp.MediaType == Microsoft.MediaCenter.Extensibility.MediaType.Unknown ? Microsoft.MediaCenter.PlayState.Undefined : Microsoft.MediaCenter.PlayState.Playing;
            }

            bool playstateChanged = state != _CurrentPlayState;

            _CurrentPlayState = state;

            // Determine if playback has stopped. Per MSDN documentation, Finished is no longer used with Windows 7
            bool isStopped = state == Microsoft.MediaCenter.PlayState.Finished || state == Microsoft.MediaCenter.PlayState.Stopped || state == Microsoft.MediaCenter.PlayState.Undefined;

            // Don't get tripped up at the initial state of Stopped with position 0
            if (!_HasStartedPlaying)
            {
                if (!isStopped)
                {
                    Logger.ReportVerbose("HandlePropertyChange has recognized that playback has started");
                    _HasStartedPlaying = true;
                    if (Playable.HasMediaItems) Application.CurrentInstance.ReportPlaybackStart(Playable.CurrentMedia.ApiId);
                }
                else
                {
                    return;
                }
            }

            // protect against really agressive calls
            if (property == "Position")
            {
                var diff = (DateTime.Now - _LastTransportUpdateTime).TotalMilliseconds;

                // Only cancel out Position reports
                if (diff < 5000 && diff >= 0)
                {
                    return;
                }
            }

            _LastTransportUpdateTime = DateTime.Now;

            // Get metadata from player
            MediaMetadata metadata = exp.MediaMetadata;

            string metadataTitle = PlaybackControllerHelper.GetTitleOfCurrentlyPlayingMedia(metadata);
            long metadataDuration = PlaybackControllerHelper.GetDurationOfCurrentlyPlayingMedia(metadata);

            PlaybackStateEventArgs eventArgs = GetCurrentPlaybackState(metadataTitle, metadataDuration, positionTicks);

            // Only fire the progress handler while playback is still active, because once playback stops position will be reset to 0
            OnProgress(eventArgs);

            Application.CurrentInstance.ShowNowPlaying = eventArgs.Item == null || eventArgs.Item.ShowNowPlayingView;

            if (playstateChanged)
            {
                // Get the title from the PlayableItem, if it's available. Otherwise use MediaMetadata
                string title = eventArgs.Item == null ? metadataTitle : (eventArgs.Item.HasMediaItems ? eventArgs.Item.MediaItems.ElementAt(eventArgs.CurrentMediaIndex).Name : eventArgs.Item.Files.ElementAt(eventArgs.CurrentFileIndex));

                Logger.ReportVerbose("Playstate changed to {0} for {1}, PositionTicks:{2}, Playlist Index:{3}", state, title, positionTicks, eventArgs.CurrentFileIndex);

                PlayStateChanged();
                Logger.ReportVerbose("Back from PlayStateChanged");
            }

            if (isStopped)
            {
                Logger.ReportVerbose("Calling HandleStopedState");
                HandleStoppedState(env, exp, transport, eventArgs);
            }
        }
Пример #19
0
        /// <summary>
        /// Plays or queues Media
        /// </summary>
        protected virtual void PlayPlayableItem(PlayableItem playable)
        {
            System.Diagnostics.Debug.Assert(Microsoft.MediaCenter.UI.Application.ApplicationThread == System.Threading.Thread.CurrentThread);
            // Prevent sleep/screen saver
            Helper.PreventSleep();

            this.Playable      = playable;
            _HasStartedPlaying = false;

            // Get this now since we'll be using it frequently
            MediaCenterEnvironment mediaCenterEnvironment = Application.MediaCenterEnvironment;

            try
            {
                // Attach event handler to MediaCenterEnvironment
                // We need this because if you press stop on a dvd menu without ever playing, Transport.PropertyChanged will never fire
                mediaCenterEnvironment.PropertyChanged -= MediaCenterEnvironment_PropertyChanged;
                mediaCenterEnvironment.PropertyChanged += MediaCenterEnvironment_PropertyChanged;

                if (!CallPlayMediaForPlayableItem(mediaCenterEnvironment, playable))
                {
                    mediaCenterEnvironment.PropertyChanged -= MediaCenterEnvironment_PropertyChanged;

                    OnErrorPlayingItem(playable, "PlayMedia returned false");
                    return;
                }

                MediaExperience exp = Application.MediaExperience;

                if (exp != null)
                {
                    MediaTransport transport = exp.Transport;

                    if (transport != null)
                    {
                        transport.PropertyChanged -= MediaTransport_PropertyChanged;
                        transport.PropertyChanged += MediaTransport_PropertyChanged;

                        // If using the legacy api we have to resume manually
                        if (CurrentMediaCollection == null)
                        {
                            long startPosition = playable.StartPositionTicks;

                            if (startPosition > 0)
                            {
                                TimeSpan startPos = TimeSpan.FromTicks(startPosition);

                                Logger.ReportVerbose("Seeking to " + startPos.ToString());

                                transport.Position = startPos;
                            }
                        }
                    }
                    else
                    {
                        Logger.ReportWarning("PlayPlayableItem: MediaTransport is null");
                    }

                    if (playable.GoFullScreen || (!playable.HasMediaItems && !playable.PlayInBackground) ||
                        (Config.Instance.DisableCustomPlayerForDvd && playable.CurrentMedia.MediaType == Library.MediaType.DVD))
                    {
                        Logger.ReportVerbose("Going fullscreen");
                        exp.GoToFullScreen();
                    }
                    else if (playable.UseCustomPlayer)
                    {
                        Logger.ReportVerbose("Using custom player interface");
                        Application.CurrentInstance.OpenCustomPlayerUi();
                    }
                }
                else
                {
                    Logger.ReportWarning("PlayPlayableItem: MediaExperience is null");
                }
            }
            catch (Exception ex)
            {
                OnErrorPlayingItem(playable, ex);
            }
        }
        /// <summary>
        /// Plays or queues Media
        /// </summary>
        protected virtual void PlayPlayableItem(PlayableItem playable)
        {
            this.Playable      = playable;
            _HasStartedPlaying = false;

            // Get this now since we'll be using it frequently
            MediaCenterEnvironment mediaCenterEnvironment = AddInHost.Current.MediaCenterEnvironment;

            try
            {
                // Attach event handler to MediaCenterEnvironment
                // We need this because if you press stop on a dvd menu without ever playing, Transport.PropertyChanged will never fire
                mediaCenterEnvironment.PropertyChanged -= MediaCenterEnvironment_PropertyChanged;
                mediaCenterEnvironment.PropertyChanged += MediaCenterEnvironment_PropertyChanged;

                if (!CallPlayMediaForPlayableItem(mediaCenterEnvironment, playable))
                {
                    mediaCenterEnvironment.PropertyChanged -= MediaCenterEnvironment_PropertyChanged;

                    OnErrorPlayingItem(playable, "PlayMedia returned false");
                    return;
                }

                MediaExperience exp = mediaCenterEnvironment.MediaExperience ?? PlaybackControllerHelper.GetMediaExperienceUsingReflection();

                if (exp != null)
                {
                    MediaTransport transport = exp.Transport;

                    if (transport != null)
                    {
                        transport.PropertyChanged -= MediaTransport_PropertyChanged;
                        transport.PropertyChanged += MediaTransport_PropertyChanged;

                        // If using the legacy api we have to resume manually
                        if (_CurrentMediaCollection == null)
                        {
                            long startPosition = playable.StartPositionTicks;

                            if (startPosition > 0)
                            {
                                TimeSpan startPos = TimeSpan.FromTicks(startPosition);

                                Logger.ReportVerbose("Seeking to " + startPos.ToString());

                                transport.Position = startPos;
                            }
                        }
                    }
                    else
                    {
                        Logger.ReportWarning("PlayPlayableItem: MediaTransport is null");
                    }

                    if (playable.GoFullScreen)
                    {
                        Logger.ReportVerbose("Going fullscreen");
                        exp.GoToFullScreen();
                    }
                }
                else
                {
                    Logger.ReportWarning("PlayPlayableItem: MediaExperience is null");
                }
            }
            catch (Exception ex)
            {
                OnErrorPlayingItem(playable, ex);
            }
        }
Пример #21
0
        public virtual void PlayMedia(string path)
        {
            if (lastWasDVD) mediaTransport = null;
            PlayPath(path, MediaType.Video, false);
            lastWasDVD = false;

            // vista bug - stop play stop required so we automate it ...
            var version = System.Environment.OSVersion.Version;
            if (version.Major == 6 && version.Minor == 0 && MediaBrowser.Library.Kernel.Instance.ConfigData.EnableVistaStopPlayStopHack)
            {
                var mce = AddInHost.Current.MediaCenterEnvironment;
                WaitForStream(mce);
                //pause

                Async.Queue("Playback Pauser", () =>
                {
                    Microsoft.MediaCenter.UI.Application.DeferredInvoke(_ =>
                    {
                        mce.MediaExperience.Transport.PlayRate = 1;
                        mce.MediaExperience.Transport.PlayRate = 2;

                    });
                }, 2000);

            }
        }
Пример #22
0
        /// <summary>
        /// Handles a change of Playstate by firing various events and post play processes
        /// </summary>
        private void HandleStoppedState(MediaCenterEnvironment env, MediaExperience exp, MediaTransport transport, PlaybackStateEventArgs e)
        {
            Logger.ReportVerbose("In HandleStoppedState");
            // Stop listening to the events
            env.PropertyChanged       -= MediaCenterEnvironment_PropertyChanged;
            transport.PropertyChanged -= MediaTransport_PropertyChanged;

            Logger.ReportVerbose("Events unhooked");

            // This will prevent us from getting in here twice after playback stops and calling post-play processes more than once.
            _HasStartedPlaying = false;

            CurrentMediaCollection = null;

            var mediaType = exp.MediaType;


            // Check if internal wmc player is still playing, which could happen if the user launches live tv while playing something
            if (mediaType != Microsoft.MediaCenter.Extensibility.MediaType.TV)
            {
                Logger.ReportVerbose("Turning off NPV");
                Application.CurrentInstance.ShowNowPlaying = false;

                if (mediaType == Microsoft.MediaCenter.Extensibility.MediaType.Audio || mediaType == Microsoft.MediaCenter.Extensibility.MediaType.DVD)
                {
                    PlaybackControllerHelper.ReturnToApplication(true);
                }
            }
            else
            {
                Logger.ReportVerbose("Not turning off NPV because Live TV is playing.");
            }

            Helper.AllowSleep();

            // Fire the OnFinished event for each item
            Async.Queue(Async.ThreadPoolName.PlaybackFinished, () => OnPlaybackFinished(e));
        }
Пример #23
0
 private void AttachAndUpdateStatus()
 {
     try
     {
         var transport = MediaTransport;
         if (transport != null)
         {
             if (transport.PlayState != PlayState)
             {
                 ReAttach();
             }
             UpdateStatus();
         }
     }
     catch (Exception e)
     {
         // dont crash the background thread
         Logger.ReportException("FAIL: something is wrong with media experience!", e);
         mediaTransport = null;
     }
 }
Пример #24
0
        /// <summary>
        /// Handles a change of Playstate by firing various events and post play processes
        /// </summary>
        private void HandleStoppedState(MediaCenterEnvironment env, MediaExperience exp, MediaTransport transport, PlaybackStateEventArgs e)
        {
            // Stop listening to the events
            env.PropertyChanged       -= MediaCenterEnvironment_PropertyChanged;
            transport.PropertyChanged -= MediaTransport_PropertyChanged;

            // This will prevent us from getting in here twice after playback stops and calling post-play processes more than once.
            _HasStartedPlaying = false;

            _CurrentMediaCollection = null;

            var mediaType = exp.MediaType;

            // Check if internal wmc player is still playing, which could happen if the user launches live tv while playing something
            if (mediaType != Microsoft.MediaCenter.Extensibility.MediaType.TV)
            {
                Application.CurrentInstance.ShowNowPlaying = false;

                if (mediaType == Microsoft.MediaCenter.Extensibility.MediaType.Audio || mediaType == Microsoft.MediaCenter.Extensibility.MediaType.DVD)
                {
                    PlaybackControllerHelper.ReturnToApplication(true);
                }
            }

            // Fire the OnFinished event for each item
            OnPlaybackFinished(e);
        }
        /// <summary>
        /// Handles a change of Playstate by firing various events and post play processes
        /// </summary>
        private void HandleStoppedState(MediaCenterEnvironment env, MediaExperience exp, MediaTransport transport, PlaybackStateEventArgs e)
        {
            Logger.ReportVerbose("In HandleStoppedState");
            // Stop listening to the events
            env.PropertyChanged -= MediaCenterEnvironment_PropertyChanged;
            transport.PropertyChanged -= MediaTransport_PropertyChanged;

            Logger.ReportVerbose("Events unhooked");

            // This will prevent us from getting in here twice after playback stops and calling post-play processes more than once.
            _HasStartedPlaying = false;

            _CurrentMediaCollection = null;

            var mediaType = exp.MediaType;


            // Check if internal wmc player is still playing, which could happen if the user launches live tv while playing something
            if (mediaType != Microsoft.MediaCenter.Extensibility.MediaType.TV)
            {
                Logger.ReportVerbose("Turning off NPV");
                Application.CurrentInstance.ShowNowPlaying = false;

                if (mediaType == Microsoft.MediaCenter.Extensibility.MediaType.Audio || mediaType == Microsoft.MediaCenter.Extensibility.MediaType.DVD)
                {
                    PlaybackControllerHelper.ReturnToApplication(true);
                }
            }
            else
            {
                Logger.ReportVerbose("Not turning off NPV because Live TV is playing.");
            }

            // Fire the OnFinished event for each item
            Async.Queue("Playback Finished", () => OnPlaybackFinished(e));
        }
 public ProgressiveMediaElementAdapter(MediaElement MediaPlugin, MediaTransport MediaTransport)
     : base(MediaTransport)
 {
     this.MediaPlugin = MediaPlugin;
 }