【问题标题】:MPMoviePlayerPlaybackDidFinishNotification is called immediately立即调用 MPMoviePlayerPlaybackDidFinishNotification
【发布时间】:2014-11-04 08:55:15
【问题描述】:

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

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"

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

【问题讨论】:

    标签: ios mpmovieplayercontroller


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      来自Safari Web Content Documentation

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

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

      【讨论】:

        【解决方案3】:

        尝试插入:

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

        之前

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

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多