zhongwuzw / WebBrowser

iOS浏览器 Web Browser for iOS
https://github.com/zhongwuzw/WebBrowser
MIT License
375 stars 92 forks source link

某些界面视频播放不了 #21

Closed bk97531 closed 5 years ago

bk97531 commented 5 years ago

https://www.baidu.com/#iact=wiseindex%2Ftabs%2Fnews%2Factivity%2Fnewsdetail%3D%257B%2522linkData%2522%253A%257B%2522name%2522%253A%2522iframe%252Fmib-iframe%2522%252C%2522id%2522%253A%2522feed%2522%252C%2522index%2522%253A0%252C%2522url%2522%253A%2522https%253A%252F%252Fm.baidu.com%252Ffeed%252Fdata%252Fvideoland%253Fpd%253Dwise%2526vid%253D12560848273722842416%2526srchid%253D155c83082ee1f600%2526src%253Dcommom%2526is_invoke%253D1%2526innerIframe%253D1%2522%252C%2522title%2522%253Anull%257D%257D

例如百度的这种视频,第一次进去都是播不了的,视频文件加载失败,不知道作者有没有什么方法解决?在电脑盒手机的safari都可以,但是这个项目的不行。

zhongwuzw commented 5 years ago

@790587047 我提交了PR, 我验证了一下,默认的UIWebViewWKWebView都无法播放视频,mobile safari可以,所以我模拟了safari的User-Agent. 原因应该是百度判断User-Agent的时候出现了误判,不修改的话会通过iframe出发调用百度盒子,导致播放不了。

bk97531 commented 5 years ago

@zhongwuzw 好的,谢谢作者,我这边改了下确实是可以了,想问下这个排查思路是什么呢?确实是只有百度的有问题,其他平台的视频的都是没问题的,但是safari又可以的,所以比较尴尬。

zhongwuzw commented 5 years ago

@790587047 排查思路是首先最小化复现步骤,如去掉所有逻辑操作,单独测试UIWebViewWKWebView, 原生空间是否存在问题,如果存在问题,判断Mobile Safari是否存在问题,不存在,基本定位为User-Agent的问题,因为识别Client只能通过User-Agent,接下来就是使用UIWeiView来调试百度网页,可以看到点击播放视频时,js会使用iframe来触发百度全家桶。

bk97531 commented 5 years ago

@zhongwuzw 好的,谢谢。还有个问题想请教下,也是测试视频的时候发现的,https://videojs.com (需要翻墙) 这个网站顶部的视频,点开后拉到结束,然后结束后再点开,重复几次就会闪退,目前测试到的就是这种使用系统自带的播放的就会,还在测别的网站,报的堆栈信息是这个,是系统的内部的错误,有什么排查思路可以解决这种情况的

zhongwuzw commented 5 years ago

从回溯栈来看,是WebKit的bug,而且我理解EXC_BAD_ACCESS 这种基本是无解的。你这边可以提交Radar,我建议维持现状。

bk97531 commented 5 years ago

@zhongwuzw safari应该也是用的webkit内核的吧,safari试了好多次,都是不会的,自己重新开个项目写一个最简单的webview还是会,UA的safari版本也是改的最新的,所以比较尴尬。

zhongwuzw commented 5 years ago

@790587047 我这边在iOS12模拟器上试了一下没有复现,点击播放视频之后会进入全屏模式,然后来回播放?

bk97531 commented 5 years ago

@zhongwuzw 点击视频之后进入全屏,然后手动拉到结束或者自动结束,然后关闭全屏,关闭之后再点重新播放,次数不定,就会复现,不止那个网站了,今天试了腾讯的也会

zhongwuzw commented 5 years ago

@790587047 WKWebView有问题么?WKWebView使用了多进程模式,渲染进程并不和UIWebView一样,UIWebView是单进程的,和用户进程一起,所以WebCore Crash没有什么办法。

bk97531 commented 5 years ago

@zhongwuzw WKWebView还真没问题~那这个只能换wk才能解决或者说这个如果要扣视频链接出来原生播放怎么阻止原先的web的视频播放,用urlprotocol没办法阻止事件、好僵硬,基本上播视频的都可能存在这个问题。

bk97531 commented 5 years ago

还有个,就是基本上是12系统的,之前的系统基本没测出来