2014-03-07 19 views
0

我想用下面的代码,以播放视频:MPMoviePlayerPlaybackDidFinishNotification被称为立即

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,然后在视频开始播放,没有任何问题。可能是这个错误的原因是什么?由于

回答

-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]; 
+0

这是做什么的? –

+0

http://josebolanos.wordpress.com/2011/09/28/dismissing-mpmovieplayerviewcontroller-the-right-way/ – stosha

+0

我只想帮助你。我为你找到了这个例子。 – stosha

0

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

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil]; 
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将不会播放视频。