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

这篇具有很好参考价值的文章主要介绍了【网络通信 -- 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文章来源地址https://www.toymoban.com/news/detail-689591.html

到了这里,关于【网络通信 -- WebRTC】项目实战记录 -- linux 环境下 libmediasoup 编译与测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux——socket网络通信

    Socket套接字 由远景研究规划局(Advanced Research Projects Agency, ARPA)资助加里福尼亚大学伯克利分校的一个研究组研发。其目的是将 TCP/IP 协议相关软件移植到UNIX类系统中。设计者开发了一个接口,以便应用程序能简单地调用该接口通信。这个接口不断完善,最终形成了 Socket套

    2024年02月11日
    浏览(35)
  • Linux对网络通信的实现

    1、OP_WRITE触发条件:当操作系统写缓冲区有空闲时就绪。一般情况下写缓冲区都有空闲空间,小块数据直接写入即可,没必要注册该操作类型,否则该条件不断就绪浪费cpu;但如果是写密集型的任务,比如文件下载等,缓冲很可能满,注册该操作类型很有必要,同时注意写完

    2024年02月08日
    浏览(23)
  • [linux--->应用层网络通信协议]

    协议本质是收发端双方约定好格式的数据,常见协议是用结构体或者类的方式来表达,结构化的数据是为了方便被应用层解读,这个结构体中可能包括发送者ip和端口号以及主机名,还有通信信息,应用层可以用结构体区分并使用信息;使用结构体直接传递,但是可能会因为系统的不同

    2024年02月15日
    浏览(27)
  • Linux——网络通信TCP通信常用的接口和tcp服务demo

    socket()函数主要作用是返回一个描述符,他的作用就是打开一个网络通讯端口,返回的这个描述符其实就可以理解为一个文件描述符,tcp在通讯的时候是会开辟一个缓存空间的,我们发送和读取消息可以理解为在这个缓存空间中进行的。因此这里我们可以知道我们可以直接用

    2024年02月21日
    浏览(44)
  • 《3.linux应用编程和网络编程-第8部分-3.8.网络基础》 3.8.1.网络通信概述 3.8.3.网络通信基础知识2

        进程间通信: 管道 、 信号量、 共享内存, 技术多,操作麻烦     线程就是解决 进程间 通信 麻烦的事情,这是线程的 优势 3.8.1.网络通信概述 3.8.1.1、从进程间通信说起: 网络域套接字socket , 网络通信其实就是位于网络中不同主机上面                   的 

    2024年02月15日
    浏览(42)
  • Linux网络编程(四)——UDP通信

    目录 0x01 UDP协议 一、UDP通信简介以及接口 二、UDP的接口 三、UDP收发例程 0x02 广播 一、设置广播数据函数接口 二、广播代码实现 0x03 组播(多播) 一、组播地址 二、设置组播函数接口 三、代码实现 UDP是一个面向无连接的,不可靠的服务,功能即为在IP的数据报服务之上增

    2024年02月12日
    浏览(32)
  • Linux下套接字TCP实现网络通信

    ​ 套接字(Socket) 是计算机网络中实现网络通信的一种 编程接口 。它提供了应用程序与网络通信之间的一座桥梁,因为它允许应用程序通过网络发送和接收相应的数据以实现不同主机之间的通信。 通常套接字由以下两部分组成: 1.网络IP和端口号 :IP用来标识主机,而端口号

    2024年02月10日
    浏览(33)
  • Linux之套接字UDP实现网络通信

    ​ 套接字(Socket)是计算机网络中实现网络通信的一种 编程接口 。它提供了应用程序与网络通信之间的一座桥梁,因为它允许应用程序通过网络发送和接收相应的数据以实现不同主机之间的通信。 ​ 通常套接字由以下两部分组成: 1.网络IP和端口号 :IP用来标识主机,而端口

    2024年02月11日
    浏览(30)
  • Linux常用命令 - 网络管理与通信命令

    ifconfig 功能:配置和显示Linux的网络接口和参数。 最前面是网卡名。 flags里面分别是: UP:表示接口已经启用 BROADCAST:表示主机支持广播 RUNNING:表示接口在工作中 MULTICAST:表示主机支持多播 mtu:最大传输单元,1500字节。 inet:网卡的IP地址 netmask:网络掩码 broadcast:广播地

    2024年02月07日
    浏览(35)
  • 【嵌入式学习】网络通信基础-项目篇:简单UDP聊天室

    源码已在GitHub开源:0clock/LearnEmbed-projects/chat 客户端功能: 上线发送登录的用户名[yes] 发送消息和接收消息[yes] quit退出 服务器端功能: 统计用户上线信息,放入链表中[yes] 接收用户信息并给其他用户发送消息[yes] 服务器也支持给所有用户群发消息[yes] 接收下线提醒

    2024年01月25日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包