【问题标题】:How to determine a mediaplayer has stopped playing in ios如何确定媒体播放器已停止在 ios 中播放
【发布时间】:2013-12-29 10:49:54
【问题描述】:

我需要在应用程序中以幻灯片形式显示图像和视频。我将图像和视频链接保存在一个数组中,并确定哪个是视频,哪个是图像,并根据视频时间长度和每张图像 2 秒设置幻灯片放映时间,现在问题是当我开始幻灯片放映时视频来了就播放,我无法确定视频是否停止播放?

我正在使用 MPMediaplayer 并检查停靠点

      if (player.playbackState == MPMoviePlaybackStatePlaying)
      { //playing
      }
      if (player.playbackState == MPMoviePlaybackStateStopped)
      { //stopped
      }if (player.playbackState == MPMoviePlaybackStatePaused)
      { //paused
      }if (player.playbackState == MPMoviePlaybackStateInterrupted)
      { //interrupted
      }if (player.playbackState == MPMoviePlaybackStateSeekingForward)
      { //seeking forward
      }if (player.playbackState == MPMoviePlaybackStateSeekingBackward)
      { //seeking backward
      }

但当视频停止时,它一直会转到MPMoviePlaybackStatePaused 部分。谁能帮助我为什么在视频停止时它一直处于这种状态?或任何其他可以帮助我确定视频已停止播放的方法?

【问题讨论】:

    标签: ios iphone video slideshow mpmediapickercontroller


    【解决方案1】:

    添加这个观察者

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerPlaybackStateDidChange:) name:MPMoviePlayerPlaybackStateDidChangeNotification object:nil];
    

    查看 MPMoviePlaybackStatePlaying 的通知

    - (void) moviePlayerPlaybackStateDidChange: (NSNotification *) notification {
         if (moviePlayer.playbackState == MPMoviePlaybackStateStopped) {
         }
    }
    

    【讨论】:

      【解决方案2】:

      像这样注册MPMoviePlayerPlaybackStateDidChangeNotification

      [[NSNotificationCenter defaultCenter] addObserver:self
                                                   selector:@selector(MPMoviePlayerPlaybackStateDidChange:) 
                                                       name:MPMoviePlayerPlaybackStateDidChangeNotification 
                                                     object:nil];
      

      在通知处理程序方法中,检查实际状态 - 例如像这样:

      - (void)MPMoviePlayerPlaybackStateDidChange:(NSNotification *)notification
      {
      
        if (player.playbackState == MPMoviePlaybackStateStopped)
        { 
           //stopped playing
      
        } else if (player.playbackState == MPMoviePlaybackStatePlaying) {
      
          //is playing
      
        } else {
      
        }
      }
      

      要删除观察者,请使用此代码

      [[NSNotificationCenter defaultCenter] removeObserver:self 
                                                      name:MPMoviePlayerPlaybackDidFinishNotification
                                                    object:nil];
      

      请参阅MPMoviePlayerController_Class playback property 文档了解更多信息。

      【讨论】:

      • 我们不移除观察者会不会出现问题,就像我们在普通通知中心里练习移除观察者一样?
      • 我会在MPMoviePlayerPlaybackStateDidChange 方法中使用[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayer]; 之类的代码吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多