2011-02-15 58 views
1

我初始化一个MPMoviePlayerViewController到支持范围请求和所有的服务器上的源.mp4和事实上的代码我使用的优秀作品在iPhone 4,iPhone 3GS和iPad上运行iOS 4为什么MPMoviePlayerViewController在技术上应该能够播放的电影上失败?

我有一台运行iOS 4的iPhone 3G。此设备上的电影播放器​​类开始流式处理,然后立即完成播放。但它并没有错误,只是通过打印MPMoviePlaybackDidFinishNotification来完成播放;它回来了MPMoviePlayerPlaybackDidFinishReasonUserInfoKey = 0,我认为这意味着MPMovieFinishReasonPlaybackEnded考虑这是枚举的第一个值。我甚至尝试设置播放提示,MPMovieSourceType = MPMovieSourceTypeStreaming

问题是,如果我在iPhone 3G上的Safari中导航到非常相同的URL,它将流式传输并播放电影而不会出错。我完全陷入困境,谷歌迄今为止没有涉及3G的任何具体问题。可能的解决方案包括在3G设备上创建自定义AVFoundation实现(完全不理想)或使用MPMoviePlayerController。如果有人根据iPhone的型号进行切换指导,而不是运行iOS的版本,那就太好了。

使用CFNotificationObserver回调注册,我收到的利息如下通知:

Name: AVFileValidatorNotification_NotPlayable <-- likely the source of the issue 
Info: Error = "Error 
       Domain=NSOSStatusErrorDomain 
       Code=-12621 
       \"This movie could not be played.\" " 

Name: FailedToBecomeReadyForInspection 
Info: Properties = (InitialSamples); 
     Result = "-12621"; 

Name: AVController_ItemFailedToPlay 
Info: "AVController_Error" = (the above Error object); 
     "AVController_Item" = "<MPAVItem: 0x1b65d0>"; 

Name: MPAvControllerPlaybackStateChangedNotification 
// Got several of these, the playback state changed as follows: 0 -> 2 -> 7 -> 0 
+0

添加了后续问题。 – 2011-02-15 02:08:32

回答

1

分辨率的这是怎么回事:它现在“正常工作”。什么改变了?我改变了应用程序的Bundle ID,我在其他地方做了一些界面调整,但没有改变电影播放器​​对象的实际演示或设置。我没有重新启动电话;尽管我已经删除了旧的Bundle ID的应用程序。

我不是特别开心它随机固定自己,特别是如果重新安装应用程序只是它花了。这意味着如果安装过程与我的方式一样“损坏”,那么一些最终用户可能会遇到同样的问题。

3

调试视频播放是棘手的。如果添加了一个普遍的通知观察者,你可以看到发生了什么幕后的很多:

CFNotificationCenterAddObserver(CFNotificationCenterGetLocalCenter(), NULL, &someCallback, NULL, NULL, CFNotificationSuspensionBehaviorDeliverImmediately); 

随着someCallback()

void someCallBack(
    CFNotificationCenterRef center, 
    void *observer, 
    CFStringRef name, 
    const void *object, 
    CFDictionaryRef userInfo 
); 

通知我用CFNotificationCenter在这里,而不是NSNotificationCenter。一些通知使用的指针参数不能强制为id,所以当通过Cocoa添加全局观察器时会导致崩溃。这在核心基础层面上并不是问题,因为使用垃圾指针是合法的。

编辑:基于您遇到的错误 - 视频对于3G上的解码器芯片而言可能质量过高(Safari可能使用不同的解码路径,以便在其播放支持方面提供更大的灵活性。)较新的设备支持更高质量的H.264视频,而较老的设备的格式有限。视频的分辨率和H.264配置文件是什么?

此外,如果视频直接安装到设备上,它播放?

+0

好的,我已经从iPhone的后端转储了编码器选项。 http://pastie.org/1564993显示设置的基本文本表格。 – darvids0n 2011-02-15 02:30:07

相关问题