Linux/Ubuntu编译WebRTC & libmediasoupclient

目录

一、前言

二、相关文章

三、环境配置

四、编译WebRTC

1、下载depot_tools

2、设置环境变量

 3、下载WebRTC源码

4、切换m94分支

5、编译libwebrtc.a

6、检出头文件

7、 拷贝头文件和静态库到系统目录

五、编译libmediasoupclient

1、 下载libmediasoupclient源码

2、 编译libmediasoupclient.a

3、 安装(把头文件和静态库拷贝到系统目录)

六、 使用最新版的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博客

mediasoup :: Installation

https://webrtc.googlesource.com/src.git/+log/refs/branch-heads/4606

https://webrtc.googlesource.com/src.git/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值