最近的項目需求在cell中嵌套視頻播放功能坡氯,視頻類型主要分為用戶上傳到我們自己服務器的視頻且叁,和優(yōu)酷,酷6等視頻網(wǎng)站的視頻掰盘。對于自己服務器上的視頻鏈接我采用了AVFoundation框架進行播放欠橘,而一些視頻網(wǎng)站的鏈接則采取UIWebView進行播放矩肩。在UIWebView的使用中遇到不少問題。
視頻無法播放問題
通常我們得到服務器傳來的視頻url時肃续,直接扔到webview中時黍檩,就像下面的代碼:
NSString *videoUrl = @"http://v.qq.com/iframe/player.html?vid=z1411odvy7m&tiny=0&auto=1&allowfullscreen=\"\"";
NSURL *url = [NSURL URLWithString:model.videoUrl];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:str]];
[webView loadRequest:request];
我發(fā)現(xiàn)只有個別視頻可以直接播放,大多數(shù)的webview都顯示白屏始锚」艚矗總結的解決方法如下
1. 確認地址是否含有中文,或者特殊字符
方法1:使用stringByAddingPercentEscapesUsingEncoding:
NSString * urlStr = [videoUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString: urlStr];
該方法已在iOS9.0中被遺棄疼蛾,并且在使用中有給依然會導致url為nil肛跌。于是使用了蘋果推薦的新方法,該方法最早出現(xiàn)在iOS7.0:
NSString * urlStr = [videoUrl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSURL *url = [NSURL URLWithString: urlStr];
2. 確認Webview是否支持該視頻格式
通過上面的格式轉換后解決了大部分視頻無法播放的問題察郁。但是還使用有個別無法播放衍慎,webview顯示“Not Found”,于是我懷疑是視頻格式的問題皮钠,發(fā)現(xiàn)比較簡便的方法便是:把原視頻地址拷貝到手機瀏覽器里打開,瀏覽器的地址搜索欄通常具備轉碼功能稳捆,如果打開依然顯示“Not Found”,并且視頻地址在電腦上可以打開播放麦轰,則基本確定是視頻格式問題乔夯。如下面這個視頻地址:
NSString *videoUrl = @"http://player.ku6.com/refer/YV54qgeOOWsvKwwR2O_ADA../v.swf";
視頻點擊播放后自動全屏
像上面的方法那樣獲得url后通過Webview的loadRequest方法加載視頻,默認情況下會自動全屏款侵,縮小后又自動暫停末荐。無法在webview的小窗口內(nèi)播放視頻,解決方法如下:
webView.allowsInlineMediaPlayback = YES;
Webview清除緩存和cookie
//清除cookies
NSHTTPCookie *cookie;
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [storage cookies]) {
[storage deleteCookie:cookie];
}
//清除UIWebView的緩存
NSURLCache * cache = [NSURLCache sharedURLCache];
[cache removeAllCachedResponses];
[cache setDiskCapacity:0];
[cache setMemoryCapacity:0];
//webview暫停加載
[webView stopLoading]