Chromium,Cef,Webrtc在Windows 10下使用vs2019进行编译

Chromium,Cef,Webrtc在Windows 10下使用vs2019进行编译,第1张

在64位Windows 10下,使用Visual Studio 2019进行编译,支持h264。


全套代码以及编译结果,详见如下链接:

chrome & cefhttps://download.csdn.net/download/matrix_lyj/85110367?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164965979516780366590354%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fdownload.%2522%257D&request_id=164965979516780366590354&biz_id=1&utm_medium=distribute.pc_search_result.none-task-download-2~download~first_rank_ecpm_v1~rank_v31_ecpm-1-85110367.pc_v2_rank_dl_default&utm_term=Cef%E5%9C%A8Windows+10%E4%B8%8B%E4%BD%BF%E7%94%A8vs2019%E8%BF%9B%E8%A1%8C%E7%BC%96%E8%AF%91%E5%AE%8C%E6%95%B4%E4%BB%A3%E7%A0%81%E5%8F%8A%E7%BC%96%E8%AF%91%E7%BB%93%E6%9E%9C%E8%B5%84%E6%BA%90%E5%8C%85&spm=1018.2226.3001.4451.1

webrtchttps://download.csdn.net/download/matrix_lyj/85110403?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164966155116781685339752%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164966155116781685339752&biz_id=1&utm_medium=distribute.pc_search_result.none-task-download-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-85110403.142^v7^control,157^v4^control&utm_term=m95%284638%29%E7%89%88%E6%9C%ACwebrtc%E5%9C%A8Windows+10%E4%B8%8B%E4%BD%BF%E7%94%A8vs2019%E8%BF%9B%E8%A1%8C%E7%BC%96%E8%AF%91%E5%AE%8C%E6%95%B4%E4%BB%A3%E7%A0%81%E5%8F%8A%E7%BC%96%E8%AF%91%E7%BB%93%E6%9E%9C%E8%B5%84%E6%BA%90%E5%8C%85&spm=1018.2226.3001.4187.1

一,编译环境

1,64位Windows10 *** 作系统。


2,Visual Studio(至少要全装“使用c++的桌面开发”,注意观察支持MFC的组件是否勾选安装)。


3,Windows SDK(要跟 *** 作系统的Windows 10版本号对应)。


范例如下图中: *** 作系统19042版本, Windows SDK 19041版本,这就是对应的。


4,在“控制面板”-》“程序和功能”中,右键Windows SDK,选择“更改”,添加“Debugging Tools for Windows”组件。


5,将 *** 作系统区域(“控制面板”-》“区域”-》“非Unicode程序的语言”)设置成“英语(美国)”,重启电脑。


二,代码下载和Visual Studio相关参数环境。


1,准备好VPN工具(即翻墙梯子,例如Clash),选择稳定的节点,然后选择全局代理模式。


2,退出安全软件,尤其是360安全卫士这种流氓,不过 *** 作系统防火墙可以例外。


3,下载谷歌编译工具套件depot_tools。


(可以事先安装git,这样方便下载depot_tools,也可以百度下别人分享的depot_tools版本)。


地址:https://chromium.googlesource.com/chromium/tools/depot_tools.git。


注意,尽量所有相关目录都是全英文路径,包括depot_tools路径以及后面的代码下载/编译路径。


4,修改 *** 作系统环境变量。


说明(上图中红色框中的部分才是需要添加的):

DEPOT_TOOLS_WIN_TOOLCHAIN的值必须为0。


GYP_MSVS_OVERRIDE_PATH和vs2019_install为Visual Studio的主目录。


WINDOWSSDKDIR为Windows SDK的目录。


http_proxy和https_proxy地址可参考 *** 作系统设置中的“网络和Internet”。


Path中需要将前面下载的depot_tools的路径放在最前面(尤其是如果电脑上已安装了python的情况下),这一点非常重要!

三,开始下载代码

1,打开控制台,进入depot_tools目录,输入“gclient”,就会自动下载python和git。


可在控制台中输入“python -v”和“git”来检验是否python和git安装完毕。


例如:

2,创建代码目录并进入目录。


例如:

     

3,在创建好的代码目录中拉取需要的目标。


fetch --onhooks webrtc

可以拉取的目标很多,有chromium(包含cef的编译),也有webrtc,根据需要自取。


fetch --onhooks chromium     //拉取chromium代码

​​​​​​​4,根据需要,切换到特定的分支和提交版本。


(1), 不需要特定的版本,那么可以直接执行同步即可:

gclient sync

(2.1), 需要指定特定的版本,则先检出相关版本,再执行同步,

git checkout -b 分支号                  //范例:git checkout -b 4638

gclient sync

(2.2), 或者直接执行同步到特定的提交(commit)版本。


gclient sync -r 提交版本号

查询版本号并获取代码的过程。


对于想要获取指定版本号的代码,可以先进入下面地址,找到目标(chromium,webrtc)都有那些版本。


https://chromiumdash.appspot.com/branches

接着打开如下图这样根据自己需要的特定分支的地址,可以看到当前该分支的所有提交版本。


再点击某个提交的版本,新打开的页面可以看到该提交的版本号。


最后在执行:gclient sync -r 提交版本号

这上面就是获取m95的webrtc版本的方法

备注:

chromium还有另外一种方法用来下载代码,即使用automate-git.py工具。


工具地址:https://bitbucket.org/chromiumembedded/cef/raw/master/tools/automate/automate-git.py

执行下面命令行,就可以简单地下载指定的分支代码到指定得路径下。


python automate-git.py --download-dir=H:\cef\src\branch4638 --branch=4638 –-no-build

四,开始编译。


1,chromium & cef

1.1, 默认的chromium编译。


gn gen out/Default

ninja -C out/Default chrome  //或者autoninja -C out/Default chrome

上面两行命令行,可以生成chrome.exe,也就是整个谷歌浏览器。


1.2, 开启h264支持的cef编译。


首先,修改ffmpeg的编译配置:

创建一个mp4_config.txt文件,文件内容如下:

#define CONFIG_FLV_DECODER 1
#define CONFIG_H263_DECODER 1
#define CONFIG_H263I_DECODER 1
#define CONFIG_MPEG4_DECODER 1
#define CONFIG_MPEGVIDEO_DECODER 1
#define CONFIG_MSMPEG4V1_DECODER 1
#define CONFIG_MSMPEG4V2_DECODER 1
#define CONFIG_MSMPEG4V3_DECODER 1
#define CONFIG_RV10_DECODER 1
#define CONFIG_RV20_DECODER 1
#define CONFIG_RV30_DECODER 1
#define CONFIG_RV40_DECODER 1
#define CONFIG_AC3_DECODER 1
#define CONFIG_AMRNB_DECODER 1
#define CONFIG_AMRWB_DECODER 1
#define CONFIG_COOK_DECODER 1
#define CONFIG_SIPR_DECODER 1
#define CONFIG_FLV_ENCODER 1
#define CONFIG_H263_ENCODER 1
#define CONFIG_MPEG4_ENCODER 1
#define CONFIG_MSMPEG4V2_ENCODER 1
#define CONFIG_MSMPEG4V3_ENCODER 1
#define CONFIG_RV10_ENCODER 1
#define CONFIG_RV20_ENCODER 1
#define CONFIG_AAC_ENCODER 1
#define CONFIG_AC3_ENCODER 1
#define CONFIG_AC3_PARSER 1
#define CONFIG_COOK_PARSER 1
#define CONFIG_H263_PARSER 1
#define CONFIG_MPEG4VIDEO_PARSER 1
#define CONFIG_MPEGVIDEO_PARSER 1
#define CONFIG_RV30_PARSER 1
#define CONFIG_RV40_PARSER 1
#define CONFIG_SIPR_PARSER 1
#define CONFIG_AC3_DEMUXER 1
#define CONFIG_AMR_DEMUXER 1
#define CONFIG_AMRNB_DEMUXER 1
#define CONFIG_AMRWB_DEMUXER 1
#define CONFIG_AVI_DEMUXER 1
#define CONFIG_AVISYNTH_DEMUXER 1
#define CONFIG_FLV_DEMUXER 1
#define CONFIG_H263_DEMUXER 1
#define CONFIG_H264_DEMUXER 1
#define CONFIG_MPEGTS_DEMUXER 1
#define CONFIG_MPEGTSRAW_DEMUXER 1
#define CONFIG_MPEGVIDEO_DEMUXER 1
#define CONFIG_RM_DEMUXER 1
#define CONFIG_AC3_MUXER 1
#define CONFIG_AMR_MUXER 1
#define CONFIG_AVI_MUXER 1
#define CONFIG_FLV_MUXER 1
#define CONFIG_H263_MUXER 1
#define CONFIG_H264_MUXER 1
#define CONFIG_MPEGTS_MUXER 1
#define CONFIG_RM_MUXER 1

创建一个update_mp4.py文件,文件内容为:

import sys
import shutil
import re
import os

def Replace(change,content):
  str_array = re.findall("#define\s\w+\s",change)
  str_replace =str_array[0]
  str_replace+="0"
  str_dest =str_array[0]
  str_dest+="1"
  return content.replace(str_replace,str_dest)

if len(sys.argv) > 2 :
  src_file_name =sys.argv[1]
  dest_file_name=sys.argv[2]
else:
  src_file_name =raw_input("Please input src file path name:").replace("\r","")
  dest_file_name =raw_input("Please input dest file path name:").replace("\r","")

print(src_file_name)
print(dest_file_name)

file_src_handle = open(src_file_name,"r")
file_src_lines = file_src_handle.readlines()
file_src_handle.close()
file_dest_handle = open(dest_file_name,"r")
dest_file_content = file_dest_handle.read()
file_dest_handle.close()

for line in file_src_lines:
  dest_file_content = Replace(line,dest_file_content)

write_file_path = os.getcwd()+"\\"+ os.path.basename(dest_file_name)
ready_copy = open(write_file_path,"w")
ready_copy.write(dest_file_content)
ready_copy.close()

shutil.copy(write_file_path,dest_file_name)
os.remove(write_file_path)
print("Support mp4 Success!!!")

再创建第三个文件update_mp4.bat批处理,内容如下(所有文件的路径根据实际情况来):

python update_mp4.py H:/cef/src/mp4_config.txt H:/cef/src/branch4638/chromium/src/third_party/ffmpeg/chromium/config/Chrome/win/ia32/config.h
python update_mp4.py H:/cef/src/mp4_config.txt H:/cef/src/branch4638/chromium/src/third_party/ffmpeg/chromium/config/Chrome/win/x64/config.h

pause

执行这个update_mp4.bat文件,就可以自动修改chromium代码中ffmpeg的编译配置了。


接下来在src/cef目录下,新建一个批处理文件build.bat:

set GN_ARGUMENTS=--ide=vs2019 --sln=cef --filters=//cef/*
set GN_DEFINES=is_official_build=true proprietary_codecs=true ffmpeg_branding=Chrome
set GYP_DEFINES=buildtype=Official
set CEF_VCVARS=none

call cef_create_projects.bat

然后在控制台中,进入src/cef目录中,运行build.bat,生成全cef工程。


最后,根据需要的cef版本执行相应编译指令。


autoninja -C out/Release_GN_x86 cef   //或者autoninja -C out/Debug_GN_x64 cef,等等

​​​​​​​2,webrtc

先进入代码目录,执行gn命令生成vs工程,最后执行ninjia进行编译。


a,x64MT版本。



gn gen out/x64Release --args="is_debug=false is_clang=false is_component_build=false rtc_include_tests=false rtc_enable_protobuf=false use_rtti=true treat_warnings_as_errors=false  target_cpu=\"x64\"" --ide=vs2019

ninja -C out/x64Release

b,x64MTd版本。



gn gen out/x64Debug --args="is_debug=true enable_iterator_debugging=true is_clang=false is_component_build=false rtc_include_tests=false rtc_enable_protobuf=false use_rtti=true treat_warnings_as_errors=false  target_cpu=\"x64\"" --ide=vs2019

ninja -C out/x64Debug

c,x86MT版本。



gn gen out/x86Release  --args="is_debug=false  is_clang=false is_component_build=false rtc_include_tests=false rtc_enable_protobuf=false use_rtti=true treat_warnings_as_errors=false  target_cpu=\"x86\"" --ide=vs2019

ninja -C out/x86Release

d,x86MTd版本。



gn gen  out/x86Debug --args="is_debug=true enable_iterator_debugging=true is_clang=false is_component_build=false rtc_include_tests=false rtc_enable_protobuf=false use_rtti=true treat_warnings_as_errors=false  target_cpu=\"x86\"" --ide=vs2019

ninja -C out/x86Debug

如果要将h264编译进去,那么,就需要稍微修改一点gn命令行参数:修改is_clang=true,添加proprietary_codecs=true use_openh264=true ffmpeg_branding=\"Chrome\"


五,参考资料

​​​​​​​windows10下编译chromium 94.0浏览器 (bilibili.com)

windows下编译cef最新版本,让Chromium支持音频视频mp3mp4 | 蘑菇房-技术的菌种,思想的暖房 (moguf.com)

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/585300.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-12
下一篇 2022-04-12

发表评论

登录后才能评论

评论列表(0条)

保存