我正在尝试从服务器播放视频文件,该文件在模拟器中播放,但它不在实际设备中播放。当项目的状态更改(失败)时,错误消息为:
错误域= AVFoundationErrorDomain代码= -11828“无法打开” UserInfo = 0x15542db0 {NSLocalizedDescription =无法打开, NSUnderlyingError = 0x156f49f0“操作无法完成。 (OSStatus错误-12847。)“,NSLocalizedFailureReason =此媒体格式 不受支持。}
我在this question中读到该文件应该有扩展名,或者服务器应该使用正确的mime类型进行回复,但是在这种情况下也不可能。
我想知道是否有办法修改服务器响应或以编程方式提供mime类型,使用AVPlayer或MPMoviePlayerController。提前谢谢。
答案 0 :(得分:1)
我使用自定义方案实现了NSURLProtocol来拦截调用并修改响应:
答案 1 :(得分:0)
WebKit通过私有 AVURLAsset选项处理此问题:video
,当您在HTML NSString * mimeType = @"video/mp4";
// or even with codecs
mimeType = @"video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"";
// create asset
AVURLAsset * asset = [[AVURLAsset alloc] initWithURL:url options:@{@"AVURLAssetOutOfBandMIMETypeKey": mimeType}];
// create AVPlayer with AVURLAsset
AVPlayer * player = [AVPlayer playerWithPlayerItem:[AVPlayerItem playerItemWithAsset:asset]];
标记中指定MIME类型时使用此选项,< / p>
您可以使用以下选项:
get_class($this);
由于它是私钥,如果您打算将其提交到AppStore,可能需要对其进行模糊处理。
可以在此处找到WebKit源代码: https://opensource.apple.com/source/WebCore/WebCore-7604.1.38.1.6/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm.auto.html
答案 2 :(得分:0)
这是Swift 4.2代码:
let mimeType = "video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\""
let asset: AVURLAsset = AVURLAsset(url: videoURL, options: ["AVURLAssetOutOfBandMIMETypeKey" : mimeType])
let player = AVPlayer(playerItem: AVPlayerItem(asset: asset))