在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程序的语言”)设置成“英语(美国)”,重启电脑。
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)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)