记录一次编译chromium支持HEVC编码格式过程中踩到的坑

因为某些原因,需要编译一次chromium浏览器使其支持HEVC格式的视频播放,这里记录一下编译过程中踩到的坑。
编译过程参考 https://github.com/chromium/chromium/blob/master/docs/windows_build_instructions.md,我这里是在windows下编译,编译的版本为85.0.4162.0。

系统环境

win7操作系统,vs2017,windows 10 SDK,这些是必须要求的,我刚开始没有安装windows 10 SDK,导致后面编译出错,安装后就正常了。

安装depot_tools

  1. 直接从github上的文档链接中可以下载到depot_tool的压缩包,解压可用。
  2. 将解压后的depot_tool的路径设置到PATH环境变量中。且位置要求在Python和git相关环境变量之前。
  3. 打开一个命令行(win+r键,输入cmd,回车即可),直接输入gclient,这一步会安装Python和git等相关工具。

这里有坑
不做设置时,直接执行gclient会因为网络问题报错,需要设置代理,在命令行输入以下命令设置http代理(1080为我的上网工具的默认代理端口),https_proxy也要设置成http而不是https,我被这个设置坑了很长时间

set http_proxy=http://localhost:1080
set https_proxy=http://localhost:1080
  1. gclient执行完毕后就Python和git就会自动安装完成了,输入where python可验证是否安装成功。

下载源码

  1. 配置git及代理
git config --global https.proxy  socks5://localhost:1080
git config --global http.proxy  socks5://localhost:1080
git config --global user.name "My Name"
git config --global user.email "my-name@chromium.org"
git config --global core.autocrlf false
git config --global core.filemode false
git config --global branch.autosetuprebase always
  1. 新建一个文件夹,命名为chromium(可以任意名称),命令行cd到该文件夹下,执行fetch chromium即可下载源码,该步骤可以加上--no-history参数只下载最新代码,不下载git的历史提交记录
    此处有坑
    执行时Python会报类似cannot use a string pattern on a bytes-like object的错误,搜索了一下是某些代码的写法Python2会正常执行,Python3会报错,这里应该是调用网络Python3,导致的报错,可以追踪到具体报错代码。但简单操作就是不调用Python3。
    需要修改depot_tools目录中的fetch.bat文件,文件最下面内容如下
:: Defer control.
IF "%GCLIENT_PY3%" == "1" (
  :: Explicitly run on Python 3
  call vpython3 "%~dp0\fetch.py" %*
) ELSE IF "%GCLIENT_PY3%" == "0" (
  :: Explicitly run on Python 2
  call vpython "%~dp0\fetch.py" %*
) ELSE (
  :: Run on Python 3, allows default to be flipped.
  call vpython3 "%~dp0\fetch.py" %*
)

因为不知道这里的几个变量是怎么判断的,所以直接把里面的call vpython3统统改成了call vpython,再执行fetch操作,就开始正常下载了(gclient.bat中有相同内容,也需要改一下,不记得是哪一步操作会需要用到gclient也有相同的问题)。

编译

  1. 下载完成后,会有代码会在src目录中,命令行cd到src目录,执行gn gen out/Default用于生成编译目录
    如果需要生成vs可打开的工程文件的话,使用gn gen --ide=vs2017 out\Default命令,会在out/Default目录中生成一个all.sln文件,可以用vs直接打开,然后使用vs编译
    vs编译时我这里出现了编译出问题后重新编译时又把所有文件重新编译了,耗费时间太长,所以不建议使用vs编译
  2. 使用ninja编译
    在src目录中,执行autoninja -C out\Default chrome命令进行编译
    我这里实际上的命令参考了https://www.infoq.cn/article/s65bFDPWzdfP9CQ6Wbw6这里,使用的是一下命令
gn gen out/release --args="is_component_build = false enable_nacl = false is_debug = false symbol_level = 0 blink_symbol_level = 0"
autoninja -C out/release chrome
  1. 编译时遇到的坑
  • 先是直接使用vs进行编译的,跑了很久以后编译不动了,取消后重新编译,会把所有文件又从头开始编译,耗费了大量时间
  • 编译过程中出现了transport_security_state_generator相关的错误导致编译失败,然后换用的autoninja使用命令行进行编译
  • 使用命令行编译过程中,同样遇到了错误,但是此时弹出了错误对话框,提示是transport_security_state_generator运行缺少了api-ms-win-downlevel-kernel32-l2-1-0.dll。
  • 在out/release目录中找到了transport_security_state_generator.exe,直接运行也是同样提示缺少dll。网上找到了这个dll,放到了windows/system32目录中,再次执行,不再出错了(别用百度搜索到的那个太平洋下载中心上的dll,应该是版本不对,运行时会报其他内存访问的错误)
  • 编译过程比较耗时,我的电脑只有4个逻辑处理器,编译一共有4万多个任务,挂机跑一晚上,第二天查看只编译了2万多个,运行已经卡住不动了,关掉命令行重新打开,再次运行autoninja -C out\Default chrome才能继续。
  • 从下载源码,到编译成功,我一共用了4天的时间(艰难苦恨~~~~)

添加HEVC的支持

此处参考了https://www.infoq.cn/article/s65bFDPWzdfP9CQ6Wbw6这里的处理。
应该是使用的版本不同,导致我这里编译ffmpeg时出现undefine symbol的错误,直接根据错误提示,在ffmepg代码中查找未定义的函数在哪个文件中,然后将其添加到ffmpeg_generated.gni文件中的ffmpeg_c_sources文件列表中。再次编译,直到没有报错为止。

打包

编译完成以后,执行下面的命令,就会将编译好的文件打包为一个chrome.7z命名的压缩包和一个mini_installer.exe命名的安装包。可以使用压缩包分发,解压可用。也可以使用exe格式的安装包分发。

autoninja -C out/release mini_installer

因为chromium的代码在实时的更新,以上内容只能作为参考,可能换个时间换个配置再次操作就会有不同的问题,需要具体问题具体分析了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,874评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,102评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,676评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,911评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,937评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,935评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,860评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,660评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,113评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,363评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,506评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,238评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,861评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,486评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,674评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,513评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,426评论 2 352