2012-10-12 33 views
6

我想在UIWebView中加載視頻。視頻存儲在本地文件系統中。這裏是我用來加載視頻的代碼片段。UIWebView加載本地視頻數據

{ 
    NSString* filePAth = [[NSBundle mainBundle] pathForResource:@"sample_iPod" ofType:@"m4v"]; 
    NSLog(@"%@",filePAth); 
    NSData* data = [NSData dataWithContentsOfFile:filePAth]; 
    [_webView loadData:data MIMEType:@"video/x-m4v" textEncodingName:@"UTF-8" baseURL:nil]; 
} 

這是我在控制檯得到的錯誤:

在網頁視圖加載錯誤:錯誤域= WebKitErrorDomain代碼= 204 「插件所處理的負載」 的UserInfo = 0x1f8b3c70 {NSErrorFailingURLStringKey = applewebdata :// 3F0047AD-E6CF-4EAD-A4C3-DA6E1C0BD603, WebKitErrorMIMETypeKey =視頻/ X-M4V, NSErrorFailingURLKey = applewebdata:// 3F0047AD-E6CF-4EAD-A4C3-DA6E1C0BD603, NSLocalizedDescription =插件處理負荷}

但是,相同的代碼適用於加載所有其他文件類型,例如:PNG,DOC et.c.

請幫忙... !!!

+1

爲什麼要使用WebView播放位於設備上的視頻文件? MPMoviePlayerViewController更加簡單,使用更少的內存並且可以實現這一點。請記住,WebView不是Safari。 –

+3

感謝您的回覆,但我需要在UIWebview中加載視頻,因爲我在該視圖中加載了不同的文件格式。 –

回答

5

您應該儘可能地使用MPMoviePlayerController加載本地視頻和其他視頻 - (Documentation) - 如果播放視頻是您所需要的全部內容,並且您正在開發原生應用。

+0

感謝您的回覆,但我需要在UIWebview中加載視頻,因爲我在該視圖中加載了不同的文件格式。 –

+1

您可以擁有一個大小相同的隱藏MPMoviePlayerController,如果用戶選擇一個視頻,則顯示播放器並播放,如果用戶選擇圖像,則停止視頻並隱藏它。我在WGSN應用程序中執行了此操作 - https://itunes.apple.com/gb/app/wgsn-365/id550174392?mt=8 - 查看屏幕截圖#3,它是一個帶有pdf /圖像的內容查看器,可通過webview和視頻通過MPMoviePlayerController放在頂部 – Daniel

+1

MPMoviePlayerController爲我完美解決...... !!! –

1

您需要將數據轉換爲base64字符串,並使用Safari的HTML功能與video標籤

NSString *base64String = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; 

NSString *str = [NSString stringWithFormat:@" \ 
        <div style=\"height:100%%;\"> \ 
        <p style=\"position: absolute; top: 50%%; left: 50%%; transform: translate(-50%%, -50%%)\"> \ 
        <video controls> \ 
        <source type=\"%@\" src=\"data:%@;base64,%@\"> \ 
        </video></p></div>", contentType, contentType, base64String]; 

[webView loadHTMLString:str baseURL:nil]; 

這裏data是您的原始視頻數據,contentType是內容類型字符串。

+0

它不適用於我 – jose920405

+0

我有這種方式的內存問題 –

+0

@BryanPosas,它是不可避免的非常大的視頻,因爲我加載到內存中的所有文件數據。但它似乎是在webView中處理視頻數據的唯一方法。 – malex