iPhone - MPMoviePlayerController在停止播放和启动时识别

时间:2011-08-14 03:52:50

标签: iphone mpmovieplayercontroller

在我的应用程序中,我正在使用MPMoviePlayerController从我的服务器播放流式视频。 我正在隐藏控件并有自己的按钮来指示玩家是在播放,暂停还是停止。 我想根据流媒体的状态启用/禁用按钮。

我正在使用以下代码来启动播放器:

self.avPlayer = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:audioURL]];
[self.avPlayer.moviePlayer setShouldAutoplay:YES];
[self.avPlayer.moviePlayer prepareToPlay];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerPlayStateChanged:) name:MPMoviePlayerPlaybackStateDidChangeNotification object:nil];       

当比赛开始时,我收到通知。但是如果由于某种原因,wifi很慢或者不可用,播放器可能正在流式传输而我没有收到任何通知。 为什么我在视频播放时没有收到通知?

此外,当视频在中间播放时,播放器停止并抛出“已完成”通知。如何防止它在流媒体中停止.....

1 个答案:

答案 0 :(得分:4)

除此之外,我认为你应该指定movieSourceType属性:

self.avPlayer.moviePlayer.movieSourceType = MPMovieSourceTypeStreaming;

现在,关于通知,

  • 首先,为什么不检查之前和之后的playbackState属性,看看调用通知的原因,何时以及是否被调用。
  • 也许更可靠的指标,因为这些似乎是连接问题,是处理MPMoviePlayerLoadStateDidChangeNotification并检查loadState属性(就像PlaybackStateChanged的通知那样没有userinfo字典所以你有通过loadState属性读取它。
  • 最后,对于在流式传输期间抛出的MPMoviePlayerPlaybackDidFinishNotification,我猜测有一些错误,因为其他选项将是电影到达终点或用户自己停止了电影。同样,您可以通过阅读作为通知的userinfo字典参数中的密钥传递的MPMovieFinishReason常量来检查通知的调用原因。