【网络通信 -- WebRTC】项目实战记录 -- linux 环境下 libmediasoup 编译与测试

【网络通信 -- WebRTC】项目实战记录 -- linux 环境下 libmediasoup 编译与测试

【1】编译配置 libwebrtc

【1.1】下载并配置 depot_tools

复制代码
下载 depot_tools
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
 
编辑 ~/.bashrc 将 depot_tools 添加到路径中
vim ~/.bashrc
export PATH=$PATH:/(path to depot_tools)/depot_tools
source ~/.bashrc
 
检查 depot_tools 是否安装配置成功
which gn
which gclient

【1.2】获取 WebRTC 源码

复制代码
获取 WebRTC 代码
fetch --nohooks webrtc
 
若其中发生中断则执行如下命令继续
gclient sync
 
切换到 m94 分支并同步
cd src
git checkout -b m94 branch-heads/4606
cd ..
gclient sync --nohooks
gclient runhooks
 
下载安装相关依赖
cd src
./build/install-build-deps.sh

【1.3】编译 WebRTC

复制代码
# 设置编译参数
gn gen out/m94 --args='is_debug=true 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 ffmpeg_branding="Chrome" proprietary_codecs=true use_glib=false rtc_use_dummy_audio_file_devices=true rtc_build_examples=false use_partition_alloc=false rtc_enable_protobuf=false rtc_build_json=true'

# 清理原编译文件
gn clean out/m94
 
# 编译
ninja -C out/m94

【1.4】获取 WebRTC 相关头文件与库

复制代码
mkdir /home/user/libwebrtc
find webrtc -name "*.h" | xargs -I {} cp --parents {} /home/user/libwebrtc

cp /home/user/webrtc/src/out/m94/obj/libwebrtc.a  /home/user/libwebrtc

【2】编译配置 libmediasoupclient

复制代码
获取 libmediasoupclient

git clone https://github.com/versatica/libmediasoupclient.git

---------------------------------------------------------------------------

编译 libmediasoupclient

cd libmediasoupclient
 
cmake . -Bbuild \
  -DLIBWEBRTC_INCLUDE_PATH:PATH=(webrtc 头文件路径) \
  -DLIBWEBRTC_BINARY_PATH:PATH=(webrtc 库文件路径)

cmake . -Bbuild \
  -DLIBWEBRTC_INCLUDE_PATH:PATH=./deps/libwebrtc/lib_webrtc_linux/webrtc_linux/src \
  -DLIBWEBRTC_BINARY_PATH:PATH=./deps/libwebrtc/lib_webrtc_linux
 
make -C build/

---------------------------------------------------------------------------

编译产物

# 头文件:路径/mediasoupclient/mediasoupclient.hpp
# 库文件:路径/libmediasoupclient.a

【3】编译运行 mediasoup-broadcaster-demo

mediasoup-broadcaster-demo 使用 libmediasoupclient 库实现向 mediasoup 服务器发布一个预设的视频流的功能

【3.1】编译 mediasoup-broadcaster-demo

复制代码
安装依赖
apt install libssl-dev pkg-config
apt install libcurl4-openssl-dev

---------------------------------------------

编译安装 cpr

注意 : 下载 tag 1.4.0

$ git clone https://github.com/libcpr/cpr
$ git clone https://github.com/whoshuu/cpr
$ cd cpr && mkdir build && cd build
$ cmake .. -DCPR_USE_SYSTEM_CURL=ON
$ cmake --build .
$ sudo cmake --install .

---------------------------------------------

下载及编译 mediasoup-broadcaster-demo

git clone https://github.com/versatica/mediasoup-broadcaster-demo.git
 
cmake . -Bbuild                                              \
  -DLIBWEBRTC_INCLUDE_PATH:PATH=(libwebrtc 头文件路径) \
  -DLIBWEBRTC_BINARY_PATH:PATH=(libwebrtc 库文件路径)   \
  -DOPENSSL_INCLUDE_DIR:PATH=(openssl 头文件路径)      \
  -DCMAKE_USE_OPENSSL=ON
 
make -C build

---------------------------------------------

【3.2】运行测试 mediasoup-broadcaster-demo

复制代码
cd build
 
# 指定 mediasoup 服务器的地址
export SERVER_URL=https://192.168.0.127:4443
 
# 指定房间号
export ROOM_ID=llo3ybo1
 
# 局域网中需要禁用 ssl,公网不用
export VERIFY_SSL=false
 
# 运行
./broadcaster

【4】MediaSoup 流媒体服务器推流的其他方法

【4.1】基于 FFMPEG 的广播方法

参见 【网络通信 -- WebRTC】项目实战记录 -- 基于 MediaSoup 的 FFMPEG 接入

【4.2】基于 runner365/cpp_streamer 的广播方法

复制代码
完成编译后执行如下命令即可实现向 MediaSoup 推流

./mediasoup_push_bench -i (媒体文件) -o "https://(mediasoup 服务器地址):4443?roomId=(房间ID)&userId=(用户ID)" -n (推流数量)

问题与解决方案

【1】depot_tools/ninja.py: Could not find Ninja in the third_party of

复制代码
解决方案
apt-get install ninja-build

【2】depot_tools / fetch:第8行:exec:python:未找到

复制代码
解决方案
ln -s /usr/bin/python2.7 /usr/bin/python

参考致谢

本博客为博主的学习实践总结,并参考了众多博主的博文,在此表示感谢,博主若有不足之处,请批评指正。

【1】Linux平台Mediasoup客户端开发指南

【2】ERROR: Cannot find Ninja

【3】C++ Requests: Curl for People

【4】runner365/cpp_streamer

相关推荐
邪恶的贝利亚5 小时前
从webrtc到janus简介
后端·asp.net·webrtc
ShaYQ21 小时前
一个WebRTC 分辨率动态爬升问题记录与解决过程
webrtc·srs·动态分辨率·流媒体技术·分辨率爬升
Icoolkj21 小时前
WebRTC 与 WebSocket 的关联关系
websocket·网络协议·webrtc
红米饭配南瓜汤21 小时前
WebRTC中的几个Rtp*Sender
网络·网络协议·音视频·webrtc·媒体
唯独失去了从容1 天前
WebRTC源码线程-1
webrtc
eguid_14 天前
WebRTC中sdp多媒体会话协议报文详细解读
音视频·webrtc·实时音视频·sdp·sdp交换·ice协商
superconvert5 天前
最快的流媒体服务器搭建 smart_rtmpd
http·webrtc·rtmp·h264·hls·无人直播·dash·rtsp·gb28181·srt·m3u8·vlc·sfu·obs·flv
_可乐无糖6 天前
AWS WebRTC:获取ICE服务地址(part 2): ICE Agent的作用
服务器·网络·webrtc
lqj_本人6 天前
鸿蒙OS&基于UniApp的WebRTC视频会议系统实践:从0到1的HarmonyOS适配之路#三方框架 #Uniapp
uni-app·webrtc·harmonyos
邪恶的贝利亚6 天前
webrtc初了解
webrtc