赞
踩
目录
六、 使用最新版的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等等,这里后面会有点坑)。
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
- vim ~/.bashrc
- #添加行 路径是你下载depot_tools的位置
- export PATH=/home/user/depot_tools:$PATH
- #保存退出,source生效
- source ~/.bashrc
- #选一个工作路径
- mkdir webrtc
- fetch --nohooks webrtc
- gclient sync
- #经过一段时间后,该路径下会生成一个src文件夹,那么恭喜,源码下载成功了
注意,这里拉取的源码是最新版本的,不一定是稳定版!!所以我们还是按照mediasoup的官方文档的建议,使用m94版本。当然,官网在论坛上提过其实已经做了新版(m112)的适配,后面我会说明。
- 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
- 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静态库,恭喜你已经编译成功了!接下来把这些文件的头文件整理出来,拷贝到系统目录下,方便调用
- #在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

- 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
- git clone https://github.com/versatica/libmediasoupclient.git
- cd libmediasoupclient
- git checkout v3
- cmake . -Bbuild \
- -DLIBWEBRTC_INCLUDE_PATH:PATH=/usr/local/include/webrtc \
- -DLIBWEBRTC_BINARY_PATH:PATH=/usr/local/lib
-
- make -C build/
- make install -C build/
-
- #头文件:/usr/local/include/mediasoupclient/mediasoupclient.hpp
- #库文件:/usr/local/lib/libmediasoupclient.a
我在找如何拉取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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。