目录
六、 使用最新版的WebRTC编译libmediasoupclient
一、前言
这里简单说一下为什么会有这篇文章。其实就是公司需要搞点音视频方面的开发,这方面的知识嘛。。。只能说有点核心大家藏的挺深的,已有的知识也太旧,国内网上的文章大部分都是相互“借鉴”,像我这样的小白肯定是看不懂滴,也不能正常编译。
本篇文章只分为两个部分:编译WebRTC生成libwebrtc.a静态库与编译libmediasoupclient。没有其他知识点了,因为我还在琢磨,反正这条音视频的路充满未知,我也不知道最后能不能做出来,先尽力而为吧。但并不影响本篇主题:编译这两个核心的静态库。
二、相关文章
这里我先给出libmediasoupclient的官方说明文档:mediasoup :: Installation
本篇文章其实就是针对这个官方文档作一些补充。
三、环境配置
结合我现在的环境,和官方给出的建议,总结如下:
系统:Ubuntu-22.04.3
cmake >= 3.5
gcc 和 g++ >= 4.9 或 clang
但C/C++开发,我建议可以直接安装最新版的cmake和gcc、g++,毕竟你是可以在配置文件改你需要用哪个版本的C++(说明:指C++11 C++14 C++17等等,这里后面会有点坑)。
四、编译WebRTC
1、下载depot_tools
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
2、设置环境变量
vim ~/.bashrc
#添加行 路径是你下载depot_tools的位置
export PATH=/home/user/depot_tools:$PATH
#保存退出,source生效
source ~/.bashrc
3、下载WebRTC源码
#选一个工作路径
mkdir webrtc
fetch --nohooks webrtc
gclient sync
#经过一段时间后,该路径下会生成一个src文件夹,那么恭喜,源码下载成功了
注意,这里拉取的源码是最新版本的,不一定是稳定版!!所以我们还是按照mediasoup的官方文档的建议,使用m94版本。当然,官网在论坛上提过其实已经做了新版(m112)的适配,后面我会说明。
4、切换m94分支
cd src
#这里官方文档有坑,v3版本估计已经好几年没更新了
#这段时间WebRTC源码已经换了一次仓库,不能用旧方法切换分支。
vim .git/config
#[remote "origin"]部分,增加内容:
#fetch = +refs/branch-heads/*:refs/remotes/branch-heads/*
[remote "origin"]
url = https://webrtc.googlesource.com/src
fetch = +refs/heads/*:refs/remotes/origin/*
fetch = +refs/branch-heads/*:refs/remotes/branch-heads/*
#保存文件
#返回src目录
cd ..
#其实这个还能拉取其他版本,4606是指代m94版本,具体编号查阅下面表格:
#https://chromiumdash.appspot.com/branches
git checkout -b m94 branch-heads/4606
cd ..
gclient sync
5、编译libwebrtc.a
gn gen out/m94 --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 use_ozone=true'
ninja -C out/m94
至此,看到out/m94/obj文件下有libwebrtc.a静态库,恭喜你已经编译成功了!接下来把这些文件的头文件整理出来,拷贝到系统目录下,方便调用
6、检出头文件
#在src同级目录下创建脚本
vim getHeader.sh
#!/bin/bash
src=`find ./ -name "*.h"`
echo $src
for obj in $src
do
echo "cp header file $obj"
cp --parents $obj include/
done
#保存退出
mkdir include
./getHeader.sh
7、 拷贝头文件和静态库到系统目录
mkdir /usr/local/include/webrtc
#下面的路径具体看你的WebRTC源码放在哪了
cp -r /home/user/webrtc/include/src/* /usr/local/include/webrtc/
cp /home/user/webrtc/src/out/m94/obj/libwebrtc.a /usr/local/lib
五、编译libmediasoupclient
1、 下载libmediasoupclient源码
git clone https://github.com/versatica/libmediasoupclient.git
cd libmediasoupclient
git checkout v3
2、 编译libmediasoupclient.a
cmake . -Bbuild \
-DLIBWEBRTC_INCLUDE_PATH:PATH=/usr/local/include/webrtc \
-DLIBWEBRTC_BINARY_PATH:PATH=/usr/local/lib
make -C build/
3、 安装(把头文件和静态库拷贝到系统目录)
make install -C build/
#头文件:/usr/local/include/mediasoupclient/mediasoupclient.hpp
#库文件:/usr/local/lib/libmediasoupclient.a
六、 使用最新版的WebRTC编译libmediasoupclient
我在找如何拉取m94代码的方法时,看到mediasoup的论坛有人讨论这个问题,可以明确跟大家说,当前libmediasoupclient的v3版本是只适配m94的,打开源码目录看CMakeList,用的是C++14,而新版的WebRTC代码有很多C++17的新特性(所以我在开头提起建议下载最新的g++),而且代码结构也不一样,综上你是不可能用最新版来编译v3的。
但是作者也在论坛里提到,他有计划做适配新版WebRTC,其实在libmediasoupclient分支那能看到一个m112的分支,用这个编译就好了,一切顺利!
下面我将简单的展示一下整个流程,具体参考上面的步骤:
#1.下载depot_tools
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
#2.把depot_tools路径添加到环境变量PATH中
#3.下载WebRTC源码
mkdir webrtc
cd webrtc
fetch --nohooks webrtc
gclient sync
#4.编译libwebrtc.a
gn gen out/m94 --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 use_ozone=true'
ninja -C out/release
#5.查看src/out/release/obj文件夹,存在libwebrtc.a即成功
#6.检出头文件,并把头文件和库拷贝到系统目录
#7.下载libmediasoupclient源码
git clone https://github.com/versatica/libmediasoupclient.git
cd libmediasoupclient
git checkout -b m112 m112
#8.编译
cmake . -Bbuild \
-DLIBWEBRTC_INCLUDE_PATH:PATH=/usr/local/include/webrtc \
-DLIBWEBRTC_BINARY_PATH:PATH=/usr/local/lib
make -C build/
#9.下载
make install -C build/
至此,这两个核心的静态库已经编译完成了,但这只是WebRTC音视频开发的一小步而已,后面还要研究原理,有缘更新!
七、 参考文章
Linux平台Mediasoup客户端开发指南_linux客户端开发_熊彬彬的博客-CSDN博客
https://webrtc.googlesource.com/src.git/+log/refs/branch-heads/4606
2230

被折叠的 条评论
为什么被折叠?



