WebRTC源码开发(一)MacOS下源码下载、编译及Demo运行
工作需要测试网络传输算法,逐学习WebRTC源码
工作环境
Mac OS 10.14
Xcode 10.2.1

源码下载
从google(需要【你懂的】)
- 首先【你懂的】
- 打开终端,输入
curl www.google.com看能不能返回正确的html数据,有的【你懂的】手段只有浏览器能翻过去,但是终端不行,这样没法安装 - 按照官方教程,一步步输入命令:
mkdir webrtc-checkout
cd webrtc-checkout
fetch --nohooks webrtc
gclient sync
- 漫长的等待后源码下载完成,创建自己的brantch,用于git版本控制:
cd src
git checkout master
git new-branch your-branch-name
- 如果需要更新源码:(还没试过)
git checkout master
git pull origin master
gclient sync
git checkout my-branch
git merge master
从别人下载好的源码
这个可能可以从github、CSDN等地方找到吧,我没试
编译源码
生成Ninja文件
google的大项目的编译首先会通过gn工具来组织项目的编译,约等同于Cmake吧,BUILD.gn大概扮演了CMakeList.txt的角色
它会根据你的目标环境(比如不同操作系统之类的),生成相应的Ninja文件,约等于Makefile的作用。
gn+Ninja比CMake+makefile的优势是速度快,尤其是改动很小的时候
gn gen out/Default
就能生成Ninja文件了,GN的文档里还有很多参数的介绍,可以使用--ide选项来生成对应IDE的项目文件。
由于CLION用不了,所以用了Xcode,命令如下:
gn gen out/Default --ide="xcode" --workplace="audio_fec"
如果想清空某次生成的Ninja文件,使用:
gn clean out/Default
利用Ninja进行编译
ninja -C out/Default
这时候!!!!!有bug!!!!

吐槽一下找bug历程:
懵逼了几个月,后来突然看到有一句but the deployment target is 10.10.0,我就在想,这个deployment target是在哪设置的呢?往上一看,命令行里有一句-mmacosx-version-min=10.10.0
ok,这个命令是在哪出来的呢?还记得ninja文件有makefile的作用嘛,那估计是在ninja文件里。出bug的.o是obj/examples/apprtc_signaling/ARDSettingsModel.o,所以去out/Default/obj/examples下面看到了apprtc_signaling.ninja文件,命令行里的这句话果然是在这里定义的,但是找到了ninja文件并没有什么卵用
ninja文件是gn产生的,所以要看gn文件,找到出问题的src/examples/objc/下面的BUILD.gn,一打开就看到这个:
好吧,那macos版本信息估计在这个rules.gni里了,打开之后发现估计在base_rules.gni里,打开这个文件之后:
ok,那估计就在这个mac_sdk.gni里了
打开来之后终于看到了曙光!
找到src/build/config/mac/mac_sdk.gni文件,打开来长成这样:(截图是我改过之后的)

,把mac_deployment_target从10.10.0改成10.11.0就可以了,保存之后clean,然后再用gn gen生成一次ninja文件,最后再用ninja编译,就没问题了!

运行Demo
out/Default下面有个AppRTCMobile.app打开来可以玩= =
WebRTC源码开发(一)MacOS下源码下载、编译及Demo运行的更多相关文章
- 【VS开发】win7下让程序默认以管理员身份运行
在win7中用自己写的程序读取MBR时,突然提示无法对磁盘进行操作,而在xp下并没有这个问题:最后点右键以管理员身份运行才可以正常运行.于是想办法让程序在双击启动时默认以管理员身份运行.具体方法: 1 ...
- linux下源码安装软件
在linux下的很多软件都是通过源码包方式发布的,这样做对于最终用户而言,虽然相对于二进制软件包,配置和编译起来繁琐点,但是它的可移植性却好得多,针对不同的体系结构,软件开发者往往仅需发布同一份源码包 ...
- macOS下appstore提示未能完成该操作的解决办法
macOS下App Store下载软件,提示:未能完成该操作.(com.apple.commerce.client 错误 500.) 解决办法: 在终端输入 defaults write com.ap ...
- 【转载】MacOS下IntelliJ IDEA关联JDK1.8源码
原文地址: MacOS下IntelliJ IDEA关联JDK1.8源码 1 打开jdk设置,找到具体添加的地方 2 找到自己jdk的源码位置替换掉 3 如果没有源码或者源码没有下载解压,自己下载解压, ...
- 【Android 系统开发】CyanogenMod 13.0 源码下载 编译 ROM 制作 ( 手机平台 : 小米4 | 编译平台 : Ubuntu 14.04 LTS 虚拟机)
分类: Android 系统开发(5) 作者同类文章X 版权声明:本文为博主原创文章 ...
- Java学习-039-源码 jar 包的二次开发扩展实例(源码修改)
最近在使用已有的一些 jar 包时,发现有些 jar 包中的一些方法无法满足自己的一些需求,例如返回固定的格式,字符串处理等等,因而需要对原有 jar 文件中对应的 class 文件进行二次开发扩展, ...
- 【转】Win 7 下源码运行OpenERP7.0
原文地址:Win 7 下源码运行OpenERP7.0 安装Python2.7 下载地址:http://www.python.org/getit/注:OpenERP7.0支持的Python版本最高为2. ...
- Windows下用Git下载android源码 转载
http://my.oschina.net/jiadebin/blog/52631 1.首先你的电脑要安装好git,这个请参考git官网. 2.打开git命令窗口输入git clone http:// ...
- 【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)
作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42707293 转载请注明出处 : http://blog.csd ...
随机推荐
- day13 装饰器与语法糖
day13 装饰器与语法糖 一.装饰器 1.什么是装饰器 装饰器就是装饰别人的工具,具体是指为被装饰者添加新功能 装饰器->函数 被装饰者->函数 2.为何要用装饰器 装饰器的核心思想:( ...
- 大数据学习day33----spark13-----1.两种方式管理偏移量并将偏移量写入redis 2. MySQL事务的测试 3.利用MySQL事务实现数据统计的ExactlyOnce(sql语句中出现相同key时如何进行累加(此处时出现相同的单词))4 将数据写入kafka
1.两种方式管理偏移量并将偏移量写入redis (1)第一种:rdd的形式 一般是使用这种直连的方式,但其缺点是没法调用一些更加高级的api,如窗口操作.如果想更加精确的控制偏移量,就使用这种方式 代 ...
- 零基础学习java------day17------缓冲字节流,转换字节流,简化流,缓冲字符流,序列化和对象流
1. 缓冲字节流 缓冲区:缓冲区实质上是一个数组.通常它是一个字节数组,但是也可以使用其他种类的数组.但是一个缓冲区不 仅仅 是一个数组.缓冲区提供了对数据的结构化访问,而且还可以跟踪系统的读/写进程 ...
- 在 Apple Silicon Mac 上 DFU 模式恢复 macOS 固件
DFU 模式全新安装 macOS Big Sur 或 macOS Monterey 请访问原文链接:https://sysin.org/blog/apple-silicon-mac-dfu/,查看最新 ...
- C++11的auto自动推导类型
auto是C++11的类型推导关键字,很强大 例程看一下它的用法 #include<vector> #include<algorithm> #include<functi ...
- VIM中把^M替换为真正的换行符
:%s/\r/\r/g 或者:%s/^M/\r/g 红色的^M不是直接打出,而是按住ctrl再依次按下V和M
- Fragment放置后台很久(Home键退出很长时间),返回时出现Fragment重叠解决方案
后来在google查到相关资料,原因是:当Fragment长久不使用,系统进行回收,FragmentActivity调用onSaveInstanceState保存Fragment对象.很长时间后,再次 ...
- proguard 混淆工具的用法 (适用于初学者参考)
一. ProGuard简介 附:proGuard官网 因为Java代码是非常容易反编码的,况且Android开发的应用程序是用Java代码写的,为了很好的保护Java源代码,我们需要对编译好后的cla ...
- jenkins之授权和权限管理
#:创建角色,给角色授权,然后创建用户,将用户加入到角色(前提先安装插件) #:先将之前的卸载掉 #:然后重启服务,在可选插件搜索Role #:装完重启服务 root@ubuntu:~# system ...
- Linux学习 - 分区与文件系统
一.分区类型 1 主分区:总共最多只能分四个 2 扩展分区:只能有一个(主分区中的一个分区),不能存储数据和格式化,必须再划分成逻辑分区 才 ...

