网页前端

Chromium浏览器不能播放Amazon视频(MP4)

作者:admin 来源:web交流网 2022-04-07 17:56 浏览:0 我要评论(0)

一、问题发现:前面我们进行一番VS2019编译chrome的实践。编译出来的chome exe能正常的打开网页,欣喜之余,打开优酷,发现优酷网页能正常

一、问题发现:
前面我们进行一番VS2019编译chrome的实践。编译出来的chome.exe能正常的打开网页,欣喜之余,打开优酷,发现优酷网页能正常打开,点击视频播放一直黑屏,腾讯视频也是如此。
尝试本地播放一个MP4,也是黑屏。
本地播放MP4黑屏
尝试进入youtube,看看google自家的视频能否播放。果然,Google自家的视频网站播放是OK的,尝试播放一个VP9编码的webm视频,播放也是OK的。很显然,是编译的浏览器默认不支持MP4封装h264编码的视频,默认只支持google自家的webm封装的VP9编码视频。
youtube视频播放OK
VP9编码的webm播放OK
现在的目标是让编译的chrome.exe 支持MP4播放
 
二、分析过程:
网上找了一番,很多人说chromium编译默认不编译ffmpeg,所以播放不了MP4视频。这里整理网友几种解决方案:
1)有人建议将ffmpeg编译对应编码库(一堆的dll库)放到chrome.exe目录下
这里有难处:ffmpeg版本如何和chrome.exe对应起来,自己再Windows上编译个ffmpeg也是很费劲。
2)有人建议将官方发布的chrome对应的ffmpeg的dll拷贝过去,但实际上近段时间官方的chrome安装包里面根本没有ffmpeg相关的dll(商业版的chrome压根就有没有用过ffmpeg还是将ffmpeg静态编译进其他dll,我们无法确定)
 
三、新发现:
发现一个编译参数可以将chrome以组件形式编译(即is_component_build = true),默认编译第三方库,第三方库都是静态编译到其他dll中去,打开这个开关。发现编译后有一个叫ffmpeg.dll,但这个ffmpeg.dll才3M,不是我们常见的ffmpeg官方编译的一堆dll。这个dll到底是真正包含了ffmpeg的dll,还是只是对ffmpeg的一个接口适配层呢?我们查看ffmpeg.dll导出的符号表(windows上称为导出表),发现ffmpeg对外的接口,都在这个符号表中。很显然ffmpeg默认是已经编译好了。只是chrome可能某些开关没有打开,导致chrome无法真正将ffmpeg的API用起来。
ffmpeg.dll的符号表
 
四、问题解决:
Chromium不支持MP3、MP4格式,而Chrome却支持,根本原因是浏览器内核所依赖的FFmpeg编译开关不一样导致的的。
在Chromium生成gn工程的时候加上以下两个宏即可
proprietary_codecs = true
ffmpeg_branding = "Chrome"
再次编译生成chrome.exe,播放MP4,播放youku等视频网站都OK了。
chromium 播放MP4
PS:正式编译使用下面的参数
proprietary_codecs = true  指明支持H264编码,编译时,自动H264相关组件,打包PE文件中
ffmpeg_branding = "Chrome"
target_cpu = "x86" 指明生成的针对X86架构的CPU
is_debug = false 指明生成的是Release版本可执行程序
enable_nacl = false 指明关闭支持NACL,这是一种Chrome插件,因为安全性,稳定性存在问题,已经很少使用了
remove_webcore_debug_symbols = true 指明删除内核层支持调试的符号文件,这样,有助于减少文件体积,提高运行速度

转载请注明出处。

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源;3.作者投稿可能会经我们编辑修改或补充。

网友点评
评论(已有0条评论)
还没有评论,快来抢沙发吧!
新闻
  • 新闻
  • 软件
精彩导读