UIWebView播放视频问题

最近的项目需求在cell中嵌套视频播放功能,视频类型主要分为用户上传到我们自己服务器的视频,和优酷,酷6等视频网站的视频。对于自己服务器上的视频链接我采用了AVFoundation框架进行播放,而一些视频网站的链接则采取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];

我发现只有个别视频可以直接播放,大多数的webview都显示白屏。总结的解决方法如下

1. 确认地址是否含有中文,或者特殊字符

方法1:使用stringByAddingPercentEscapesUsingEncoding:

NSString * urlStr = [videoUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString: urlStr];

该方法已在iOS9.0中被遗弃,并且在使用中有给依然会导致url为nil。于是使用了苹果推荐的新方法,该方法最早出现在iOS7.0:

NSString * urlStr = [videoUrl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSURL *url = [NSURL URLWithString: urlStr];
2. 确认Webview是否支持该视频格式

通过上面的格式转换后解决了大部分视频无法播放的问题。但是还使用有个别无法播放,webview显示“Not Found”,于是我怀疑是视频格式的问题,发现比较简便的方法便是:把原视频地址拷贝到手机浏览器里打开,浏览器的地址搜索栏通常具备转码功能,如果打开依然显示“Not Found”,并且视频地址在电脑上可以打开播放,则基本确定是视频格式问题。如下面这个视频地址:

NSString *videoUrl = @"http://player.ku6.com/refer/YV54qgeOOWsvKwwR2O_ADA../v.swf";

视频点击播放后自动全屏

像上面的方法那样获得url后通过Webview的loadRequest方法加载视频,默认情况下会自动全屏,缩小后又自动暂停。无法在webview的小窗口内播放视频,解决方法如下:

 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]

你可能感兴趣的:(UIWebView播放视频问题)