立即调用MPMoviePlayerPlaybackDidFinishNotification

时间:2014-03-07 12:40:15

标签: ios mpmovieplayercontroller

我正在尝试使用以下代码播放视频:

UIGraphicsBeginImageContext(CGSizeMake(1,1));

self.player = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:@"http://www.blablabla.org/app/video/v5_seq8_v2_360p.mp4"]];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didFinishPlayback:) name:MPMoviePlayerPlaybackDidFinishNotification object:self.player.moviePlayer];

[self presentMoviePlayerViewControllerAnimated:self.player];

UIGraphicsEndImageContext();

[self.player.moviePlayer prepareToPlay];
[self.player.moviePlayer play];

sel.player关闭并立即调用didFinishPlayback:方法。我从通知中检索错误,如下所示:

NSLog(@"Error %@", notification.userInfo[@"error"]);

它看起来如下:

Domain=MediaPlayerErrorDomain Code=-11850 "Operation Stopped"

但是当我在浏览器中打开网址时,视频开始播放没有任何问题。导致此错误的原因是什么?谢谢

3 个答案:

答案 0 :(得分:0)

我不知道为什么,但是对于远程网址我在过去的项目中意识到你需要添加没有对象的观察者作为参考....如果你问我为什么,我不确定。 尝试添加nil作为对象的观察者...

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil];

答案 1 :(得分:0)

如果视频在桌面计算机上播放,而在iOS(在应用内或在Safari中)播放,则很可能是因为HTTP服务器不支持byte-range requests。如果HTTP服务器不支持字节范围请求,则iOS将不播放视频。这与OS X上的Safari不同,后者无论如何都会播放视频。

来自Safari Web Content Documentation

  

托管iOS媒体文件的HTTP服务器必须支持字节范围   请求,iOS用于在媒体播放中执行随机访问。   (字节范围支持也称为内容范围或部分范围   支持。)大多数(但不是全部)HTTP 1.1服务器已经支持   字节范围请求。

此外,HTTP服务器必须提供有效的Content-Type标头(上面的URL也列举了有效的MIME类型)。如果MIME类型无效或缺失,iOS将无法播放视频。

答案 2 :(得分:-1)

尝试插入此内容:

[[NSNotificationCenter defaultCenter] removeObserver: self.player
                                                name: MPMoviePlayerPlaybackDidFinishNotification
                                              object: self.player.moviePlayer];

之前

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didFinishPlayback:) name:MPMoviePlayerPlaybackDidFinishNotification object:self.player.moviePlayer];