本文简单介绍在Ubuntu下libwebrtc的编译过程。

  由于网速限制,实际编译过程是在远程vps上编译滴。

系统环境

  Ubuntu 18.04系统的虚拟主机。

  1. root@vultr:~# pwd
  2. /root
  3. root@vultr:~# cat /etc/issue
  4. Ubuntu 18.04. LTS \n \l

编译webrtc

安装依赖工具

  获取webrtc源代码需要使用Chromium depot tools。

  1. root@vultr:~# git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git # 下载工具
  2. export PATH=$PATH:/path-to/depot_tools                                 # 添加到环境变量
    # 临时添加,如
    root@vultr:~# export PATH=$PATH:/root/depot_tools 
    # 添加到/etc/profile中,
    root@vultr:~# vim /etc/profile
    ...  
    export PATH=$PATH:/root/depot_tools  # 在文件最后一行添加,wq!退出
  1. root@vultr:~# source /etc/profile    # 使配置生效  

  这样便可使用相关命令了。

下载源代码

  创建一个保存webrtc源代码的目录webrtc-checkout。

  1. root@vultr:~# mkdir webrtc-checkout
  2. root@vultr:~# cd webrtc-checkout
  3. root@vultr:~/webrtc-checkout# apt install python -y        # 需要python 支持
  4. root@vultr:~/webrtc-checkout# fetch --nohooks webrtc # 获取和同步代码,下载量很大,约12G
  5. root@vultr:~/webrtc-checkout# gclient sync &

  Linux (Ubuntu/Debian)系统,在执行完gclient sync命令之后,还需执行如下命令:

  1. root@vultr:~/webrtc-checkout# cd src
  2. root@vultr:~/webrtc-checkout/src# ./build/install-build-deps.sh

Building

  两种编译方式,具体解释可查看Building

Debug模式:(本文采用这种模式)

  1. root@vultr:~/webrtc-checkout/src# gn gen out/Default
  2. Done. Made targets from files in 644ms

Release模式

  1. gn gen out/Default --args='is_debug=false'

清理目录

  1. gn clean out/Default

编译

  大致需要编译一个小时左右。

  1. root@vultr:~/webrtc-checkout/src# ninja -C out/Default

  这样就编译出libwebrtc.a文件,编译结束。

  1. root@vultr:~# du -sh *
  2. 170M depot_tools
  3. 17G webrtc-checkout

编译mediasoupclient

Requirements

  1. POSIX or Windows based operating system
  2. cmake >= 3.5
  3. gcc and g++ >= 4.9 or clang (with C++ support)

  如果是CentOS7系统的话,上面两项都不满足,版本较老,需要先升级,因此不太推荐在CentOS7系统上编译,比较繁琐,Ubuntu较方便。

编译

  mediasoupclient依赖libwebrtc,具体编译过程可参考libmediasoupclient v3 Installation

  仅一点关于编译需稍微指出:

  1. cmake . -Bbuild \
  2. -DLIBWEBRTC_INCLUDE_PATH:PATH=PATH_TO_LIBWEBRTC_SOURCES \ # src源代码目录
  3. -DLIBWEBRTC_BINARY_PATH:PATH=PATH_TO_LIBWEBRTC_BINARY # 编译出libwebrtc.a目录

  此处的环境设置如下:

  1. cmake . -Bbuild \
  2. -DLIBWEBRTC_INCLUDE_PATH:PATH=root/webrtc-checkout/src \
  3. -DLIBWEBRTC_BINARY_PATH:PATH=/root/webrtc-checkout/src/out/Default/obj

  其它地方应该没什么大问题。

参考

  https://webrtc.org/native-code/development/

  https://mediasoup.org/documentation/v3/libmediasoupclient/installation/

libwebrtc & libmediasoupclient编译的更多相关文章

  1. 2015GitWebRTC编译实录12

    2015.07.20 libjingle_peerconnection 编译通过[1382/1600 ] CXX obj/talk/app /webrtc/libjingle_peerconnecti ...

  2. webrtc编译

    webrtc编译 最近研究 libmediasoupclient,而 libmediasoupclient 又依赖 libwebrtc,所以首先就想着先在windows上编译一个webrtc的库,先是 ...

  3. WebRTC音频预处理单元APM的整体编译及使用

    正文 行的gnu静态库链接路径是针对NDK版本 r8d 的,如读者版本不匹配,请自行找到 libgnustl_static.a 静态库的路径进行替换. 3)本示例并不打算编译 WebRTC 的测试工程 ...

  4. Ubuntu18.04 从头开始编译 Android Native WebRTC

    本文详细记录Mac下使用PD虚拟机安装ubuntu18.4桌面版,编译Android Native WebRTC的过程. 注意如果仅仅是使用WebRTC没必要手动编译源码,直接用官方提供的预编译包即可 ...

  5. TODO:macOS编译PHP7.1

    TODO:macOS编译PHP7.1 本文主要介绍在macOS上编译PHP7.1,有兴趣的朋友可以去尝试一下. 1.下载PHP7.1源码,建议到PHP官网下载纯净到源码包php-7.1.0.tar.g ...

  6. Centos6.5下编译安装mysql 5.6

    一:卸载旧版本 使用下面的命令检查是否安装有MySQL Server rpm -qa | grep mysql 有的话通过下面的命令来卸载掉 rpm -e mysql //普通删除模式 rpm -e ...

  7. CENTOS 6.5 平台离线编译安装 PHP5.6.6

    一.下载php源码包 http://cn2.php.net/get/php-5.6.6.tar.gz/from/this/mirror 二.编译 编译之前可能会缺少一些必要的依赖包,加载一个本地yum ...

  8. CENTOS 6.5 平台离线编译安装 Mysql5.6.22

    一.下载源码包 http://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.22.tar.gz 二.准备工作 卸载之前本机自带的MYSQL 安装 cmake,编 ...

  9. Android注解使用之注解编译android-apt如何切换到annotationProcessor

    前言: 自从EventBus 3.x发布之后其通过注解预编译的方式解决了之前通过反射机制所引起的性能效率问题,其中注解预编译所采用的的就是android-apt的方式,不过最近Apt工具的作者宣布了不 ...

随机推荐

  1. 利用用阿里云API实现DDNS

    前言 之前动态域名解析是用的是腾达路由器上集成的第三方动态解析服务花生壳,解析费用一年40元.后来觉得域名前缀不好,想换掉,花生壳需要重新购买新的域名解析费用,增加1条或者2条动态解析无所谓,万一以后 ...

  2. EFK的搭建(未完成)

    EFK 是ELK 日志分析的一个变种,能够更好的来实现日志分析. 首先我们先准备3台 centos7的服务器,在给他们调成2核2G的状态打开. 软件 版本号 zookeeper 3.4.14 Kafk ...

  3. 人生苦短,我用Python(3)

    1.对列表进行排序: (1)使用列表对象的sort()方法: 列表对象提供了sort()方法用于对原列表中的元素进行排序.排序后原列表中的元素顺序将发生改变.改变对象的sort()方法的语法格式如下: ...

  4. centos7 redis 6379端口telnet不通

    1.查看redis服务是否启动,如图所示,redis已经启动 2.查看是否监听正确的ip和端口 发现问题:端口号6379没错,但是ip是127.0.0.1,表示只能本地访问,问题就出在这. 3.修改r ...

  5. 聊一聊 Vue 中 watch 对象中的回调函数为什么不能是箭头函数?

    聊一聊 Vue 中 watch 对象中的回调函数为什么不能是箭头函数 本文重点知识点速览: Vue 中的 watch 对象中的回调函数不能是箭头函数. 箭头函数中的 this 指向的是函数定义时所在的 ...

  6. 深入理解Kafka必知必会(3)

    Kafka中的事务是怎么实现的? Kafka中的事务可以使应用程序将消费消息.生产消息.提交消费位移当作原子操作来处理,同时成功或失败,即使该生产或消费会跨多个分区. 生产者必须提供唯一的transa ...

  7. go 1.13编译遇到xxx/go.mod malformed record data 问题

    背景: 公司在做自己的发布平台,需要自动化编译go 工程,大部分开发使用的都是go 1.12 版本 由于go mod的机制,有很多包需要代理才能进行下载,而自动化编译频繁的进行代理切换就很麻烦. 所以 ...

  8. DevExpress的LookUpEdit怎样不显示列名

    场景 DevExpress的下拉框控件LookUpEdit的使用.添加item选项值.修改默认显示值: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/articl ...

  9. 我用 Python 破解了同事的加密压缩包!

    ​ 作者 | 朱小五 又是一杯奶茶. 事情的经过是这样的: ​ ​ 又是奶茶,行吧快点开工,争取李大伟回来之前搞定 李大伟说是6位数字密码 那么我们可以利用python生成全部的六位数字密码 #生成从 ...

  10. react-组件间的传值

    父组件向子组件传值 父组件通过属性进行传递,子组件通过props获取 //父组件 class CommentList extends Component{ render(){ return( < ...