webrtc编译
webrtc编译
最近研究 libmediasoupclient,而 libmediasoupclient 又依赖 libwebrtc,所以首先就想着先在windows上编译一个webrtc的库,先是在网上找了一大堆,发现都不全面,导致各种问题,这里做个归纳总结。
由于 webrtc 是google的产物,而且很多东西都是自成一家,所以前提是需要FQ的。准备一个本地的代理,例如127.0.0.1:10080
windows
挂代理
代理需要挂在git和cmd下,后面通过git拉取depot_tools和webrtc都要借助git的代理,而挂在cmd下是为了在depot_tools下载好之后安装一系列工具链时下载用。
git
通过git拉取代码有http、https、ssh三种方式,对于这三种方式要分两种方式挂代理。详细可参考Git设置代理。本文后续使用的是https方式,所以只需要配置http和https即可。
- http和https
- git命令方式
这里只针对后续可能使用的url地址使用代理,如果不带特定的url的话,会作用于全局。git config --global http.https://*.googlesource.com.proxy http://127.0.0.1:10080
git config --global https.https://*.googlesource.com.proxy http://127.0.0.1:10080
git config --global http.https://*.appspot.com.proxy http://127.0.0.1:10080
git config --global https.https://*.appspot.com.proxy http://127.0.0.1:10080
- 修改git配置文件
修改git的配置文件.gitconfig[http "https://*.googlesource.com"]
proxy = http://127.0.0.1:10080
[https "https://*.googlesource.com"]
proxy = http://127.0.0.1:10080
[http "https://*.appspot.com"]
proxy = http://127.0.0.1:10080
[https "https://*.appspot.com"]
proxy = http://127.0.0.1:10080
- git命令方式
- ssh
修改.ssh文件夹下的config文件Host googlesource.com
User git
ProxyCommand connect -H 127.0.0.1:10080 %h %p
如果是socks5代理的话,最后的选项
-H改成-S
cmd
在cmd中直接设置环境变量,这两条命令只在当前窗口有效!
set http_proxy=127.0.0.1:10080
set https_proxy=127.0.0.1:10080
安装depot_tools
按照webrtc源码编译要求的,编译webrtc之前的准备工作需要安装google自家的depot_tools工具链。这个工具链的安装部署直接关系到后面是否能顺利下载webrtc的源码。
按照depot_tools安装描述的过程,大致分为以下几步:
获取
depot_tools使用
git工具直接从google源码库中拉取git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
直接下载depot_tools包并解压(解压时要以防某些解压工具不将压缩包中的隐藏文件一并解压!) https://storage.googleapis.com/chrome-infra/depot_tools.zip
设置环境变量
将depot_tools文件夹所在路径设置在系统环境变量PATH的最前面!执行
gclient
通过cmd运行gclient,注意在此之前设置了cmd的代理!这条命令执行完成后,depot_tools目录下会多出很多东西,像python、git等工具都会被下载并安装在depot_tools的子目录下,被用于后续的过程,所以即使本地没有安装这些工具也不要紧。
这条指令执行完后,大致会下载700-800左右的内容,最后会提示错误,因为后续只需要用来同步webrtc源码以及构建编译脚本等,所以忽略这个报错即可。
WARNING: Your metrics.cfg file was invalid or nonexistent. A new one will be created.
Error: client not configured; see 'gclient config'创建chrome/4147d的分支
git checkout -b m84 origin/chrome/4147
并再次执行
gclient sync
编译webrtc
下载源码
按照以下命令一步一步执行,第三步的fetch最花费时间,大概需要下载10G的内容,所以留意你代理的流量套餐!
mkdir webrtc
cd webrtc
fetch --nohooks webrtc
gclient sync
编译
我这里按照mediasoap要求的m84版本的webrtc编译为例
先创建m84版本(branch-heads/4147)的分支m84,然后执行
gclient syncgit checkout -b m84 refs/remotes/branch-heads/4147
在环境变量中先设置
DEPOT_TOOLS_WIN_TOOLCHAIN为0,否则在生成ninja工程时会报错set DEPOT_TOOLS_WIN_TOOLCHAIN=0
生成ninja工程
gn gen out/m84 --args='is_debug=false is_component_build=false is_clang=false rtc_include_tests=false rtc_use_h264=true use_rtti=true use_custom_libcxx=false treat_warnings_as_errors=false'
编译
ninja -C out/m84 >> compile.log
编译过程中出现错误终端,打开compile.log文件查看失败的地方:
[1466/3605] CC obj/third_party/ffmpeg/ffmpeg_internal/pcm.obj
FAILED: obj/third_party/ffmpeg/ffmpeg_internal/pcm.obj
...
...
...
../../third_party/ffmpeg/libavcodec/pcm.c(623): error C2059: 语法错误:“字符串”
这里我将源文件中对应报错的行注释掉。
继续执行第4步,然后又出现下列错误
[1834/2133] CXX obj/modules/video_coding/webrtc_h264/h264.obj
FAILED: obj/modules/video_coding/webrtc_h264/h264.obj
...
...
...
E:\google\webrtc\src\modules/video_coding/codecs/h264/h264_decoder_impl.h(21): fatal error C1189: #error: "See: bugs.webrtc.org/9213#c13."
仍然注释掉报错行之后继续第4步,发现后续还会出现类似的报错,所以这里一次性注释掉另外三个文件中的行:
See: bugs.webrtc.org/9213#c13.。三个文件分别是:- webrtc\src\modules/video_coding/codecs/h264/h264_decoder_impl.h(21)
- webrtc\src\modules/video_coding/codecs/h264/h264_encoder_impl.h(21)
- webrtc\src\modules/video_coding/codecs/h264/h264_color_space.h(20)
最终生成结果显示一大堆链接错误
[286/289] LINK peerconnection_client.exe peerconnection_client.exe.pdb
FAILED: peerconnection_client.exe peerconnection_client.exe.pdb
...
error LNK2001: 无法解析的外部符号 avpriv_emms_asm
...
./peerconnection_client.exe : fatal error LNK1120: 1 个无法解析的外部命令
[287/289] LINK(DLL) webrtc_unity_plugin.dll webrtc_unity_plugin.dll.lib webrtc_unity_plugin.dll.pdb
FAILED: webrtc_unity_plugin.dll webrtc_unity_plugin.dll.lib webrtc_unity_plugin.dll.pdb
...
error LNK2001: 无法解析的外部符号 avpriv_emms_as
...
./webrtc_unity_plugin.dll : fatal error LNK1120: 1 个无法解析的外部命令
忽略,反正在out/m84/obj目录下已经生成我要的webrtc.lib文件了。
Linux
安装depot_tools
拉取depot_tools
先设置git的代理,然后拉取depot_tools的代码,之后设置depot_tools的路径到
PATH环变量。gclient sync在depot_tools目录下执行
gclient sync之前,先做两件事:- 修改
update_depot_tools文件
将depot_tools目录下的update_depot_tools文件中关于使用root用户时就退出的地方去掉,否则运行这条指令的时候会提示Running depot tools as root is sad.,然后就没了反应。 - 设置
curl或者整个linux环境代理
这里直接设置整个linux环境的代理,否则执行这条指令之后会提示curl https://chrome-infra-packages.appspot.com/ 失败之类的提示。
可以在~/.bashrc文件中最后加入下列两条,之后每次进入终端后,输入命令setproxy就可以了。alias setproxy="export http_proxy=http://10.18.0.60:10080;export https_proxy=http://10.18.0.60:10080;echo 'HTTP Proxy on';"
alias unsetproxy="unset http_proxy; unset https_proxy; echo 'HTTP Proxy off';"
- 修改
编译webrtc
参考windows上编译webrtc的步骤。
ubuntu上gcc版本最好在6.3之上,并且pkg-config和python已经安装,若pkg-config未安装,则会在生成ninja工程时报错,若gcc版本过低,则在编译时会报错!
参考
WebRTC development
WebRTC Development
depot_tools_tutorial
Git设置代理
curl 设置代理
Windows配置代理下载depot_tools
在win10上编译webRTC(问题篇)
Windows上WebRTC的源码下载和编译
Windows下webrtc.lib 的编译及vs工程中使用
webrtc编译的更多相关文章
- WebRTC编译具体介绍
WebRTC编译具体介绍--记录+转载 原文地址:http://blog.csdn.net/temotemo/article/details/7056581 WebRTC编译 本人环境: 操作系统:X ...
- WebRTC编译详细介绍 (转)
WebRTC技术交流群:234795279 原文地址:http://blog.csdn.net/temotemo/article/details/7056581 WebRTC编译 本人环境: 操作 ...
- webrtc编译之libcommonaudio
[170/1600] CXX obj/webrtc/common_audio/common_audio.audio_util.o[171/1600] CXX obj/webrtc/common_aud ...
- WebRtc编译好的vs2015源码
一直想看webrtc的源码,苦于FQ能力有限且整个编译过程耗时巨大,故求助于互联网.在互联网寻找许久编译好的Webrtc源码,好多版本下载下来总是报各种错误,很是失落. 皇天不负有心人,终于寻得一版可 ...
- 单独编译使用WebRTC的音频处理模块
块,每块个点,(12*64=768采样)即AEC-PC仅能处理48ms的单声道16kHz延迟的数据,而 - 加载编译好的NS模块动态库 接下来只需要按照 此文 的描述在 android 的JAVA代码 ...
- 实时语音视频技术webrtc的编译总结
webrtc编译教程 一.安装depot_tools工具 首先你的电脑上安装了git 1) 下载depot_tools cd到下载的目录下 git clone https://chromium. ...
- 编译最新版webrtc源码和编译好的整个项目10多个G【分享】
编译最新版webrtc源码和编译好的整个项目10多个G[分享] 参考https://webrtc.org/native-code/development/编译最新版webrtc源码: Git clon ...
- Android IOS WebRTC 音视频开发总结(七)-- 基于浏览器的开发
前面写的一系列总结都是讲webrtc如何下载,编译,开发的,有些人可能有点云里雾里了,WEBRTC不是用来搞跨浏览器开发的吗,怎么我讲的这些跟浏览器扯不上任何关系,其实看看下面这个架构图,你就明白了, ...
- Android IOS WebRTC 音视频开发总结(六)-- iOS开发之含泪经验
前段时间在搞webrtc iOS开发,所以将标题改为了Android IOS WebRTC 音视频开发总结, 下面都是开发过程中的经验总结,转载请说明出处(博客园RTC.Blacker): 1. IO ...
随机推荐
- 你知道这高效的12个Java精品库嘛?
01. JUnit 第一个要说的当然是JUnit了,JUnit毕竟是Java圈目前最知名及常用的测试框架.JUnit之所以能够成为Java圈中最热门的测试库,是因为对于很多项目而言,单元测试是非常重要 ...
- 【模拟8.03】斐波那契(fibonacci) (规律题)
就是找规律,发现每个父亲和孩子的差值都是距儿子最大的fibonacc 也是可证的 f[i]表示当前月的兔子总数 f[i]=f[i-1]+f[i-2](f[i-2]是新生的,f[i-1]是旧有的) 然后 ...
- MediaStore 与Media.EXTERNAL_CONTENT_URI
MediaStore这个类是Android系统提供的一个多媒体数据库,android中多媒体信息都可以从这里提取. 这个MediaStore包括了多媒体数据库的所有信息,包括音频,视频和图像,andr ...
- 注解式项目开发!详细解析Java中各个注解的作用和使用方式
@Target 作用: 指明了修饰的这个注解的使用范围, 即被描述的注解可以用在哪里 @Target(ElementType.Type) ElementType取值的类型: TYPE: 类,接口或者枚 ...
- 在vs中调试关闭之后不关闭页面
在vs中调试api时会自动打开一个新的浏览器窗口,在关闭这个浏览器窗口时,会关闭调试.关闭调试时也会关闭浏览器窗口. 设置成调试时在已有的浏览器中打开调试页面,关闭调试也不会关掉浏览器窗口,反之亦然 ...
- Java实现单例模式的几种方式
单例模式(Singleton),保证在程序运行期间,内存中只有一个实例对象. 饿汉式,最常用的方式.JVM加载类到内存中时,创建实例,线程安全. public class Boss { private ...
- 高性能的Redis之对象底层实现原理详解
对象 在前面的数个章节里, 我们陆续介绍了 Redis 用到的所有主要数据结构, 比如简单动态字符串(SDS).双端链表.字典.压缩列表.整数集合, 等等. Redis 并没有直接使用这些数据结构来实 ...
- MySQL基本sql语句总结
目录 约束 表操作 查看表结构与修改表名 修改字段名与字段数据类型 添加与删除字段 修改字段的排列位置 删除表的外键约束 增删改 插入数据 更新数据 删除数据 查询 单表查询 连接查询 子查询 视图 ...
- Ant Design Blazor 组件库的路由复用多标签页介绍
最近,在 Ant Design Blazor 组件库中实现多标签页组件的呼声日益高涨.于是,我利用周末时间,结合 Blazor 内置路由组件实现了基于 Tabs 组件的 ReuseTabs 组件. 前 ...
- Linux系统下安装NodeJS
下载NodeJS二进制压缩包 去NodeJS官网https://nodejs.org/zh-cn/,下载二进制压缩包,进入下载页面之后你将看到很多下载选项: 源码不包含bin目录,不是可运行的应用程序 ...