当前位置:   article > 正文

Linux/Ubuntu编译WebRTC & libmediasoupclient_linux g++编译webrtc

linux g++编译webrtc

目录

一、前言

二、相关文章

三、环境配置

四、编译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、设置环境变量

  1. vim ~/.bashrc
  2. #添加行 路径是你下载depot_tools的位置
  3. export PATH=/home/user/depot_tools:$PATH
  4. #保存退出,source生效
  5. source ~/.bashrc

 3、下载WebRTC源码

  1. #选一个工作路径
  2. mkdir webrtc
  3. fetch --nohooks webrtc
  4. gclient sync
  5. #经过一段时间后,该路径下会生成一个src文件夹,那么恭喜,源码下载成功了

注意,这里拉取的源码是最新版本的,不一定是稳定版!!所以我们还是按照mediasoup的官方文档的建议,使用m94版本。当然,官网在论坛上提过其实已经做了新版(m112)的适配,后面我会说明。

4、切换m94分支

  1. cd src
  2. #这里官方文档有坑,v3版本估计已经好几年没更新了
  3. #这段时间WebRTC源码已经换了一次仓库,不能用旧方法切换分支。
  4. vim .git/config
  5. #[remote "origin"]部分,增加内容:
  6. #fetch = +refs/branch-heads/*:refs/remotes/branch-heads/*
  7. [remote "origin"]
  8. url = https://webrtc.googlesource.com/src
  9. fetch = +refs/heads/*:refs/remotes/origin/*
  10. fetch = +refs/branch-heads/*:refs/remotes/branch-heads/*
  11. #保存文件
  1. #返回src目录
  2. cd ..
  3. #其实这个还能拉取其他版本,4606是指代m94版本,具体编号查阅下面表格:
  4. #https://chromiumdash.appspot.com/branches
  5. git checkout -b m94 branch-heads/4606
  6. cd ..
  7. gclient sync

5、编译libwebrtc.a

  1. 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'
  2. ninja -C out/m94

至此,看到out/m94/obj文件下有libwebrtc.a静态库,恭喜你已经编译成功了!接下来把这些文件的头文件整理出来,拷贝到系统目录下,方便调用

6、检出头文件

  1. #在src同级目录下创建脚本
  2. vim getHeader.sh
  3. #!/bin/bash
  4. src=`find ./ -name "*.h"`
  5. echo $src
  6. for obj in $src
  7. do
  8. echo "cp header file $obj"
  9. cp --parents $obj include/
  10. done
  11. #保存退出
  12. mkdir include
  13. ./getHeader.sh

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

  1. mkdir /usr/local/include/webrtc
  2. #下面的路径具体看你的WebRTC源码放在哪了
  3. cp -r /home/user/webrtc/include/src/* /usr/local/include/webrtc/
  4. cp /home/user/webrtc/src/out/m94/obj/libwebrtc.a /usr/local/lib

五、编译libmediasoupclient

1、 下载libmediasoupclient源码

  1. git clone https://github.com/versatica/libmediasoupclient.git
  2. cd libmediasoupclient
  3. git checkout v3

2、 编译libmediasoupclient.a

  1. cmake . -Bbuild \
  2. -DLIBWEBRTC_INCLUDE_PATH:PATH=/usr/local/include/webrtc \
  3. -DLIBWEBRTC_BINARY_PATH:PATH=/usr/local/lib
  4. make -C build/

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

  1. make install -C build/
  2. #头文件:/usr/local/include/mediasoupclient/mediasoupclient.hpp
  3. #库文件:/usr/local/lib/libmediasoupclient.a

六、 使用最新版的WebRTC编译libmediasoupclient

我在找如何拉取m94代码的方法时,看到mediasoup的论坛有人讨论这个问题,可以明确跟大家说,当前libmediasoupclient的v3版本是只适配m94的,打开源码目录看CMakeList,用的是C++14,而新版的WebRTC代码有很多C++17的新特性(所以我在开头提起建议下载最新的g++),而且代码结构也不一样,综上你是不可能用最新版来编译v3的。

但是作者也在论坛里提到,他有计划做适配新版WebRTC,其实在libmediasoupclient分支那能看到一个m112的分支,用这个编译就好了,一切顺利!

下面我将简单的展示一下整个流程,具体参考上面的步骤:

  1. #1.下载depot_tools
  2. git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
  3. #2.把depot_tools路径添加到环境变量PATH中
  4. #3.下载WebRTC源码
  5. mkdir webrtc
  6. cd webrtc
  7. fetch --nohooks webrtc
  8. gclient sync
  9. #4.编译libwebrtc.a
  10. 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'
  11. ninja -C out/release
  12. #5.查看src/out/release/obj文件夹,存在libwebrtc.a即成功
  13. #6.检出头文件,并把头文件和库拷贝到系统目录
  14. #7.下载libmediasoupclient源码
  15. git clone https://github.com/versatica/libmediasoupclient.git
  16. cd libmediasoupclient
  17. git checkout -b m112 m112
  18. #8.编译
  19. cmake . -Bbuild \
  20. -DLIBWEBRTC_INCLUDE_PATH:PATH=/usr/local/include/webrtc \
  21. -DLIBWEBRTC_BINARY_PATH:PATH=/usr/local/lib
  22. make -C build/
  23. #9.下载
  24. 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/

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/797586
推荐阅读
相关标签
  

闽ICP备14008679号