IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> webrtc 4577版本vs编译 -> 正文阅读

[开发工具]webrtc 4577版本vs编译

vs版本:2017
操作系统:win10
webrtc版本:4577

成果物要求: x64的可被vs引入的webrtc库

第一:找个vpn
公司有提供vpn客户端工具,工具启动的端口号是10080
第二:webrtc下载
1.首先打开cmd,输入如下内容

		set http_proxy=http://127.0.0.1:10080
		set https_proxy=http://127.0.0.1:10080
		set DEPOT_TOOLS_UPDATE=0
		set DEPOT_TOOLS_WIN_TOOLCHAIN=0
		set GYP_MSVS_OVERRIDE_PATH=D:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise
		set GYP_MSVS_VERSON=2017
		set GYP_GENERATORS=msvs-ninja,ninja

注意:代理是一定要设置的,否则webrtc无法下载。
2.下载depot_tools
cmd中输入下面内容:
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
下载成功后,设置环境变量PATH,因为这里面有不少的编译需要的工具,比如著名的ninja.exe
设置环境变量后,重启cmd,重新输入以下内容:

		set http_proxy=http://127.0.0.1:10080
		set https_proxy=http://127.0.0.1:10080
		set DEPOT_TOOLS_UPDATE=0
		set DEPOT_TOOLS_WIN_TOOLCHAIN=0
		set GYP_MSVS_OVERRIDE_PATH=D:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise
		set GYP_MSVS_VERSON=2017
		set GYP_GENERATORS=msvs-ninja,ninja

3.下载webrtc
在e盘下,新建一个git目录,git目录下建立webrtc目录,webrtc目录下再建立webrtc_wins目录。
cmd中执行cd E:\git\webrtc\webrtc_wins,切换到对应的目录。
然后在cmd中执行fetch --nohooks webrtc,这大概要等一段时间,中途会遇到很多Still working on的提示。
下载完成后,再执行gclient sync
说明下,gclient sync建议多执行几次,主要是内地翻墙的原因,一次可能下载的不够彻底,鄙人就遇到过这种情况。
然后cmd中执行下面的命令,定位到4577分支
git checkout -b m4577 refs/remotes/branch-heads/4577
接着继续gclient sync,gclient sync依然建议多执行几次
4.编译webrtc
下载webrtc后,E:\git\webrtc\webrtc_wins下面会多个src目录,cmd中执行cd src,切换到此目录。
然后执行下面命令
gn gen out/Release_h264 --args=“is_clang=false treat_warnings_as_errors=false rtc_include_tests=false is_component_build=false is_debug=false rtc_use_h264=true proprietary_codecs=true ffmpeg_branding=“Chrome”” --ide=vs2017
这个会自动生成ninja文件,然后执行下面的命令,进行ninja编译

ninja -C out/Release_h264
这个要等待一段时间,具体要看机器性能,我的台式机,16G的内容,大概要等30多分钟。

相关参数解析:
is_debug 是否是Debug版,默认true,false:表示编译Release版。
target_os: 平台类型,可以取值win、android、ios、linux等,这里取win,表示Windows平台。
target_cpu: cpu类型,Windows下可以取x86、x64
is_component_build :是否使用动态运行期库,这里取false,使用静态运行期库,Release版本将对应MT,Debug版将对应MTd。
proprietary_codecs: 是否使用版权编码,也就是H264,这里取true。
rtc_use_h264: 是否使用H264,这里取true,注意Windows平台编码使用OpenH264,解码使用ffmpeg。
ffmpeg_branding: ffmpeg的分支名,这里采用Chrome的分支。
is_clang: 是否采用clang编译器编译,默认设置为true
rtc_include_tests:自动编译单元测试test文件,默认是true,webrtc的单元测试文件很多,设置为false,可以节省不少编译时间。

5.编译中遇到的问题
编译中会遇到各种各样的问题,下面列举几条
5.1
…/…/modules/audio_processing/agc2/rnn_vad/features_extraction.cc(84): error C2398: 元素“2”: 从“const int”转换到“size_t”需要收缩转换
很明显,vs编译器检查是比较严格的,is_clang如果设置成true,就没这种问题。
我们进行下手动强制转换即可。
5.2
e:\git\webrtc\webrtc_wins\src\third_party\ffmpeg\libavcodec\error_resilience.h(23): fatal error C1083: 无法打开包括文件: “stdatomic.h”: No such file or directory
我们在webrtc目录下搜索stdatomic.h,发现third_party\ffmpeg下面存在几个stdatomic.h,将其中的一个放置于third_party\ffmpeg下即可。
5.3
…/…/third_party/ffmpeg/libavcodec/pcm.c(52): error C2065: “CONFIG_PCM_VIDC_ENCODER”: 未声明的标识符
…/…/third_party/ffmpeg/libavcodec/pcm.c(634): error C2059: 语法错误:“字符串”
直接将对应的行代码注释掉
5.4
E:\git\webrtc\webrtc_wins\src\modules/video_coding/codecs/h264/h264_decoder_impl.h(21): fatal error C1189: #error: “See: bugs.webrtc.org/9213#c13.”
直接注释掉
5.5
ffmpeg_internal.lib(pcm.obj) : error LNK2001: 无法解析的外部符号 avpriv_emms_asm(不影响最终webrtc库的生成)

这个问题是最难解决的,其他的问题跟这相比,有点毛毛雨的感觉,尽管此种情况下webrtc.lib可以生成,但是很多exe都无法生成,比如peerconnection_server.exe,并且将生成的webrtc.lib放置于其他vs工程,会报如下的链接错误:

1>webrtc.lib(pcm.obj) : error LNK2001: 无法解析的外部符号 avpriv_emms_asm
1>webrtc.lib(encode.obj) : error LNK2001: 无法解析的外部符号 avpriv_emms_asm
1>webrtc.lib(h264_picture.obj) : error LNK2001: 无法解析的外部符号 avpriv_emms_asm
1>webrtc.lib(avcodec.obj) : error LNK2001: 无法解析的外部符号 avpriv_emms_asm
1>webrtc.lib(decode.obj) : error LNK2001: 无法解析的外部符号 avpriv_emms_asm
1>webrtc.lib(h264dec.obj) : error LNK2001: 无法解析的外部符号 avpriv_emms_asm
1>webrtc.lib(vp3.obj) : error LNK2001: 无法解析的外部符号 avpriv_emms_asm

所以这个问题必须解决
解决方法:替换ffmpeg文件,x86版本无此问题,x64才会出现,原因是x64不支持大多数汇编指令,ffmpeg里面有汇编代码,用clang就没那个问题,但是clang编译的vc不能引用

现在来讲讲如何替换ffmpeg文件,这里说的ffmpeg指的是third_party\ffmpeg这个目录。

我是这样替换的,我们之前用的webrtc是72版本的,72版本的64位lib库很容易编译通过
编译通过后,我们将72版本的third_party\ffmpeg替换过来,然后接着生成ninja文件,在生成ninja文件的过程中,会出现两个错误。
第一:需要将72版本的third_party\yasm替换过来
第二:需要更改build\config\compiler目录下的BUILD.gn,里面需要在指定位置添加黄色区域的一段内容,这段内容其实是从72版本里面拷贝过来的。

在这里插入图片描述

除此外,编译的时候,注意用MD而不是MT,为此,我修改了文件
build\config\win下面的BUILD.gn,修改内容如下:
在这里插入图片描述
这里,我将原来的static_crt改成了dynamic_crt。

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-09-30 12:08:32  更:2021-09-30 12:09:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 3:47:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码