UIWebView播放视频问题

作者: 苹果防腐指南 | 来源:发表于2016-07-26 23:00 被阅读2320次

最近的项目需求在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]

相关文章

网友评论

  • 一枚霉:楼主好 我现在碰到这个链接http://app.grwth.hk/uploads/010d222b-9958-44a3-8ff7-e16f41c44dc0.mp4在电脑上的safari都没法打开 但是在chrome上可以打开 这是什么原因呢?
    HengLee:@一枚霉 你好,你的问题解决了吗?我最近遇到一个问题,UIwebview自动播放链接中的视频,4g网络下播放不了,WiFi下正常播放,有没有解决方案,感谢~
  • LZ_乌托邦:你好,请问一下你怎样处理webView的播放与停止的…… 也就是退出再进来的时候可以继续播放
  • 空转风:楼主你好,请问在UIwebView上点击一个视频播放按钮,系统总是会弹出自带的播放器,要怎么才能禁止系统弹出播放器调用自己的播放器呢?如何调用自己的播放器我知道可以通过js实现,但是要如何禁止系统自带播放器我却一直想不出来,求楼主大大教下
  • 井湾村夫:NSString * urlStr = [videoUrl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
    NSURL *url = [NSURL URLWithString: str];
    明明是urlStr 怎么就变成了str呢?糊里糊涂的,上面那个也是
    苹果防腐指南:@咚咚响 :blush: 谢谢提醒,已经修改了,写文章的时候为了让变量名直观点,所以改了部分变量名。。漏改了几个

本文标题:UIWebView播放视频问题

本文链接:https://www.haomeiwen.com/subject/vzwijttx.html