我正在尝试从服务器播放视频文件,该文件在模拟器中播放,但它不在实际设备中 . 当项目的状态更改(失败)时,错误消息为:
错误域= AVFoundationErrorDomain代码= -11828“无法打开”UserInfo = 0x15542db0 {NSLocalizedDescription =无法打开,NSUnderlyingError = 0x156f49f0“操作无法完成 . (OSStatus error -12847 . )”,NSLocalizedFailureReason =此媒体格式不是支持的 . }
我在this question中读到该文件应该有一个扩展名,或者服务器应该使用正确的mime类型进行回复,但是在这种情况下两者都不可能 .
我想知道是否有办法修改服务器响应或以编程方式提供mime类型,使用AVPlayer或MPMoviePlayerController . 先感谢您 .
2 回答
我实现了一个带有自定义方案的NSURLProtocol来拦截调用并修改响应:
https://developer.apple.com/library/mac/documentation/cocoa/reference/foundation/classes/NSURLProtocol_Class/Reference/Reference.html
WebKit通过 Private AVURLAsset选项处理此问题:
AVURLAssetOutOfBandMIMETypeKey
,在HTML的video
标记中指定MIME类型时使用此选项,您可以使用此选项,如:
Since it is a private key, you may want to obfuscate it if you plan to submit it to AppStore.
可以在此处找到WebKit源:https://opensource.apple.com/source/WebCore/WebCore-7604.1.38.1.6/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm.auto.html