立即调用MPMoviePlayerPlaybackDidFinishNotification
我正在尝试使用以下代码播放video:
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"
但是当我在浏览器中打开url时,video开始播放没有任何问题。 导致此错误的原因是什么? 谢谢
我不知道为什么,但是在远程url中我意识到在过去的项目中你需要添加没有对象的观察者作为参考….如果你问我为什么,我不确定。 尝试添加nil作为对象的观察者…
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil];
如果video在桌面计算机上播放,而不是iOS(在应用程序内或在Safari中),则很可能是因为HTTP服务器不支持字节范围请求 。 如果HTTP服务器不支持字节范围请求,则iOS将不播放video。 这与OS X上的Safari不同,后者无论如何都会播放video。
从Safari Web内容文档 :
托管iOS媒体文件的HTTP服务器必须支持字节范围请求,iOS用于在媒体播放中执行随机访问。 (字节范围支持也称为内容范围或部分范围支持。)大多数(但不是全部)HTTP 1.1服务器已经支持字节范围请求。
此外,HTTP服务器必须提供有效的Content-Type
标头(上面的URL也枚举有效的MIME类型)。 如果MIME类型无效或缺失,iOS将无法播放video。
尝试插入此:
[[NSNotificationCenter defaultCenter] removeObserver: self.player name: MPMoviePlayerPlaybackDidFinishNotification object: self.player.moviePlayer];
之前
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didFinishPlayback:) name:MPMoviePlayerPlaybackDidFinishNotification object:self.player.moviePlayer];