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


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

    【1】编译配置 libwebrtc

    【1.1】下载并配置 depot_tools

    1. 下载 depot_tools
    2. git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
    3. 编辑 ~/.bashrc 将 depot_tools 添加到路径中
    4. vim ~/.bashrc
    5. export PATH=$PATH:/(path to depot_tools)/depot_tools
    6. source ~/.bashrc
    7. 检查 depot_tools 是否安装配置成功
    8. which gn
    9. which gclient

    【1.2】获取 WebRTC 源码

    1. 获取 WebRTC 代码
    2. fetch --nohooks webrtc
    3. 若其中发生中断则执行如下命令继续
    4. gclient sync
    5. 切换到 m94 分支并同步
    6. cd src
    7. git checkout -b m94 branch-heads/4606
    8. cd ..
    9. gclient sync --nohooks
    10. gclient runhooks
    11. 下载安装相关依赖
    12. cd src
    13. ./build/install-build-deps.sh

    【1.3】编译 WebRTC

    1. # 设置编译参数
    2. 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'
    3. # 清理原编译文件
    4. gn clean out/m94
    5. # 编译
    6. ninja -C out/m94

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

    1. mkdir /home/user/libwebrtc
    2. find webrtc -name "*.h" | xargs -I {} cp --parents {} /home/user/libwebrtc
    3. cp /home/user/webrtc/src/out/m94/obj/libwebrtc.a /home/user/libwebrtc

    【2】编译配置 libmediasoupclient

    1. 获取 libmediasoupclient
    2. git clone https://github.com/versatica/libmediasoupclient.git
    3. ---------------------------------------------------------------------------
    4. 编译 libmediasoupclient
    5. cd libmediasoupclient
    6. cmake . -Bbuild \
    7. -DLIBWEBRTC_INCLUDE_PATH:PATH=(webrtc 头文件路径) \
    8. -DLIBWEBRTC_BINARY_PATH:PATH=(webrtc 库文件路径)
    9. cmake . -Bbuild \
    10. -DLIBWEBRTC_INCLUDE_PATH:PATH=./deps/libwebrtc/lib_webrtc_linux/webrtc_linux/src \
    11. -DLIBWEBRTC_BINARY_PATH:PATH=./deps/libwebrtc/lib_webrtc_linux
    12. make -C build/
    13. ---------------------------------------------------------------------------
    14. 编译产物
    15. # 头文件:路径/mediasoupclient/mediasoupclient.hpp
    16. # 库文件:路径/libmediasoupclient.a

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

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

    【3.1】编译 mediasoup-broadcaster-demo

    1. 安装依赖
    2. apt install libssl-dev pkg-config
    3. apt install libcurl4-openssl-dev
    4. ---------------------------------------------
    5. 编译安装 cpr
    6. 注意 : 下载 tag 1.4.0
    7. $ git clone https://github.com/libcpr/cpr
    8. $ git clone https://github.com/whoshuu/cpr
    9. $ cd cpr && mkdir build && cd build
    10. $ cmake .. -DCPR_USE_SYSTEM_CURL=ON
    11. $ cmake --build .
    12. $ sudo cmake --install .
    13. ---------------------------------------------
    14. 下载及编译 mediasoup-broadcaster-demo
    15. git clone https://github.com/versatica/mediasoup-broadcaster-demo.git
    16. cmake . -Bbuild \
    17. -DLIBWEBRTC_INCLUDE_PATH:PATH=(libwebrtc 头文件路径) \
    18. -DLIBWEBRTC_BINARY_PATH:PATH=(libwebrtc 库文件路径) \
    19. -DOPENSSL_INCLUDE_DIR:PATH=(openssl 头文件路径) \
    20. -DCMAKE_USE_OPENSSL=ON
    21. make -C build
    22. ---------------------------------------------

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

    1. cd build
    2. # 指定 mediasoup 服务器的地址
    3. export SERVER_URL=https://192.168.0.127:4443
    4. # 指定房间号
    5. export ROOM_ID=llo3ybo1
    6. # 局域网中需要禁用 ssl,公网不用
    7. export VERIFY_SSL=false
    8. # 运行
    9. ./broadcaster

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

    【4.1】基于 FFMPEG 的广播方法

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

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

    1. 完成编译后执行如下命令即可实现向 MediaSoup 推流
    2. ./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

    1. 解决方案
    2. apt-get install ninja-build

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

    1. 解决方案
    2. 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

  • 相关阅读:
    小诺2.0开源版工程启动
    VirtualBox 进入虚拟机后,鼠标出不来了
    Spring Boot之请求方式与请求映射过程分析
    避免空指针
    迎战阿里诸神,庚顿喜提智能制造全球总决赛第三名
    2023ICPC济南站:B. Graph Partitioning 2
    期货的含义及交易特点
    内存取证系列5
    目标检测算法——工业缺陷数据集汇总2(附下载链接)
    力扣(LeetCode)1668. 最大重复子字符串(C++)
  • 原文地址:https://blog.csdn.net/qq_27788177/article/details/131553866