iOS:修改服务器对AVPlayer的响应或如何提供MIME类型

时间:2013-12-16 18:18:15

标签: ios mpmovieplayercontroller avplayer

我正在尝试从服务器播放视频文件,该文件在模拟器中播放,但它不在实际设备中播放。当项目的状态更改(失败)时,错误消息为:

  

错误域= AVFoundationErrorDomain代码= -11828“无法打开”   UserInfo = 0x15542db0 {NSLocalizedDescription =无法打开,   NSUnderlyingError = 0x156f49f0“操作无法完成。   (OSStatus错误-12847。)“,NSLocalizedFailureReason =此媒体格式   不受支持。}

我在this question中读到该文件应该有扩展名,或者服务器应该使用正确的mime类型进行回复,但是在这种情况下也不可能。

我想知道是否有办法修改服务器响应或以编程方式提供mime类型,使用AVPlayer或MPMoviePlayerController。提前谢谢。

3 个答案:

答案 0 :(得分:1)

答案 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))