2013-12-16 62 views
0

我試圖從服務器播放視頻文件,該文件在模擬器中播放,但它不在實際設備中播放。當項目的狀態改變(失敗)的錯誤信息是:iOS:修改服務器對AVPlayer的響應或如何提供MIME類型

錯誤域= AVFoundationErrorDomain代碼= -11828 「無法打開」 的UserInfo = 0x15542db0 {NSLocalizedDescription =無法打開, NSUnderlyingError = 0x156f49f0「操作couldn」 T爲完成。 (OSStatus錯誤-12847)」,NSLocalizedFailureReason =該媒體格式 不支持。}

我在this question讀取該文件應該有一個分機或服務器應該回復與正確的mime類型,但在這種情況下n這是可能的。

我想知道是否有一種方法來修改服務器響應或以編程方式提供mime類型,無論是AVPlayer還是MPMoviePlayerController。先謝謝你。

+0

AFAIK下面'AVPlayer'網絡層(因此也低於'MPMoviePlayerController')是完全透明的用戶。因此,無法修改該層上的通信。我能看到的唯一解決方案就是由多個YouTube視頻播放應用程序使用的本地代理。 – Till

回答

0

的WebKit由私人 AVURLAsset選項處理這個問題:AVURLAssetOutOfBandMIMETypeKey,使用此選項時,您指定MIME類型的HTML的標籤video

您可以使用此選項,如:

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]]; 

由於它是一個私鑰,如果您計劃將其提交給AppStore,您可能需要對其進行混淆。

WebKit的源可以在這裏找到: https://opensource.apple.com/source/WebCore/WebCore-7604.1.38.1.6/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm.auto.html