为啥 MPMoviePlayerViewController 对相同的 URL 有不同的行为?

Posted

技术标签:

【中文标题】为啥 MPMoviePlayerViewController 对相同的 URL 有不同的行为?【英文标题】:why MPMoviePlayerViewController having different behavior with the same URL?为什么 MPMoviePlayerViewController 对相同的 URL 有不同的行为? 【发布时间】:2015-07-29 07:27:17 【问题描述】:

我在我的应用程序中实现了 MPMovieViewController,但它有一个问题,即当我在播放器中播放视频时,第一次播放失败,但下一次它将使用相同的 URL 成功播放。我无法使用相同的 URL 理解这种不同的行为。我在这里复制了我在我的应用程序中使用的代码。

NSURL *fileURL = [NSURL URLWithString:@"http://nordenmovil.com/urrea/InstalaciondelavaboURREAbaja.mp4"];
MPMoviePlayerViewController * controller = [[MPMoviePlayerViewController alloc]initWithContentURL:fileURL];
controller.moviePlayer.movieSourceType= MPMovieSourceTypeFile;
[controller.moviePlayer setControlStyle:MPMovieControlStyleDefault];
[controller.moviePlayer prepareToPlay];
[controller.moviePlayer play];
[self presentMoviePlayerViewControllerAnimated:controller];

【问题讨论】:

【参考方案1】:

我建议处理错误以查看您的 URL 视频会发生什么(这是我很久以前创建的提示 in this answer)

添加此以捕获播放结束:

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

看看会发生什么:

- (void)handleMPMoviePlayerPlaybackDidFinish:(NSNotification *)notification

    NSDictionary *notificationUserInfo = [notification userInfo];
    NSNumber *resultValue = [notificationUserInfo objectForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey];
    MPMovieFinishReason reason = [resultValue intValue];
    if (reason == MPMovieFinishReasonPlaybackError)
    
        NSError *mediaPlayerError = [notificationUserInfo objectForKey:@"error"];
        if (mediaPlayerError) 
        
            NSLog(@"playback failed with error description: %@", [mediaPlayerError localizedDescription]);
        
        else
        
            NSLog(@"playback failed without any given reason");
        
    

不要忘记删除通知处理程序:

[[NSNotificationCenter defaultCenter] removeObserver:self
                                                name:MPMoviePlayerPlaybackDidFinishNotification
                                              object:nil];

通过此解决方法,您应该知道流中的错误,我希望这会有所帮助!

【讨论】:

谢谢,当我从 URL 播放视频时出现错误 error = "Error Domain=MediaPlayerErrorDomain Code=-11800 \"The operation could not be completed\" 并且 error = "Error Domain=MediaPlayerErrorDomain Code=-11819 播放本地存储中的视频时“无法完成操作” 你是在模拟器还是真机上试用? 我正在尝试在 iPhone 和 iPad 上运行 ios 8.1、iOS 8.2、iOS 8.3 和 8.4 有什么解决办法吗?

以上是关于为啥 MPMoviePlayerViewController 对相同的 URL 有不同的行为?的主要内容,如果未能解决你的问题,请参考以下文章

为啥使用 glTranslatef?为啥不直接更改渲染坐标?

为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?

为啥需要softmax函数?为啥不简单归一化?

为啥 g++ 需要 libstdc++.a?为啥不是默认值?

为啥或为啥不在 C++ 中使用 memset? [关闭]

为啥临时变量需要更改数组元素以及为啥需要在最后取消设置?