最近一直在调试在WebRTC中添加对H.264的支持,过程涉及代码下载、翻墙、服务器连接、Linux系统操作以及故障方案解决等,我会一一记录下来,方便以后查阅!首先,介绍一些预备知识:
-
首先对应的codec的形式:
VP8编码用VP8解码
VP9编码用VP9解码
H264编码用H264解码
另外,以上三种均可用FFMPEG解码 -
这篇文字有介绍windows下webRTC代码的下载
代码量巨大(20G左右),主要是依赖库的代码多,需要耐心等待。(可以在官网获取,需要翻墙!) -
https://github.com/pristineio/webrtc-build-scripts
WebRTC可以在android、ios、linux下的编译脚本
android的编译必须在linux中进行
ios 的编译必须在xcode中进行 -
http://www.zhuli8.com/2015/07/19/构建支持armv7和arm64的webRTC静态库/
将webRTC编译,作用不大,仅做参考。
以下为本人在windows平台编译WebRTC的步骤,
环境:windows10 x64 + VMvare + Ubuntu 16.04.2
获取代码
获取代码的步骤参考我上面提供的文章可以获取到最新的2018年的代码,注意时间,不同时间的操作可能会有不同!因为google的代码所有必须要做好能翻墙的准备,否则从国内下载别人已经做好了vs工程的代码。
- 注意
最新的M70版本,2018年10月10日发布的WebRTC——M70,有一个大的变化,就是android上软编码默认给去了,如果一直用的是硬编码,可以忽略。 - 安装最新的python(建议2.7版本), git工具
- 官方下载depot_tools,安装或者解压,并将路径加入系统环境变量中,在一个适当得目录下clone depot_tools包,后面会用到此工具。
$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
然后修改.bashrc文件,将depot_tools的路径加进环境变量PATH中:
export PATH=“$PATH:‘pwd’/depot_tools”
# ‘pwd’代表depot_tools的路径,直接替换即可
- 在上述过程中,我遇到了权限问题和环境变量问题
我是这么解决的
sudo su
# 输入你的密码即可进入root用户操作界面
参考链接:su和sudo的区别
- 具体操作
# Create a working directory, enter it, and run fetch webrtc
mkdir webrtc-checkout
cd webrtc-checkout
fetch --nohooks webrtc
# 进入src目录,获取WebRTC版本信息
cd src
git branch -r
# 选取版本信息中的‘branch-heads/xx’,直接复制到下面的代码块中
# 其中xx是最新的分支,git branch -r查看
# my_branch是文件夹名,可以任意替换
# Choose the stable release 57 rather than the most recent release by entering
git checkout branch-heads/xx
# 更新代码(很好的一个命令)
gclient sync
- 以下是WebRTC官网提供的方法:
编译
编译时每个人遇到问题可能不尽相同,只能遇到问题解决问题。
- 按照Vinton.Liu给的方法,我修改了关于修改h264的代码
- 直接执行以下指令,可以跑通:
# git代码
git checkout -b branches_63 refs/remotes/branch-heads/63
gclient sync
# 解压(第一次tar时,遇到了无法mkdir的问题,尚未解决!)
cat branches_630* | tar -zx
#添加路径
export PATH=“$PATH:‘pwd’/depot_tools”
# 编译
gn gen out/文件名 --args=参数设置
ninja -C out/文件名
# 可以顺利完成编译
- 现在开始修改代码(使用Vim编辑 Link)
然后无法跑通,出现以下差错
分析原因:没安装依赖吧,webrtc有个android脚本安装依赖
# webrtc/src目录中执行这个
./build/install-build-deps-android.sh
- 如何查看文件修改(如何撤销修改,请查询git命令)
git的使用:git show; git log; git diff(链接戳下)
Link
# ‘pwd’是文件的具体路径
git diff 'pwd'
- 2018年10月13日,失败若干次后,再次创建新的虚拟机。导入63版本的代码,进行修改。
出现新的问题:ubuntu系统中的文件均被上锁
现象描述:文件夹上有一把小锁
解决方案:
# *代表所有,将当前目录下所有文件都给予777权限
chmod -R 777 *
# 4代表读,2代表写,1代表执行
链接:留坑