工作需要测试网络传输算法,逐学习WebRTC源码

工作环境

Mac OS 10.14

Xcode 10.2.1

源码下载

从google(需要【你懂的】)

  1. 首先【你懂的】
  2. 打开终端,输入curl www.google.com看能不能返回正确的html数据,有的【你懂的】手段只有浏览器能翻过去,但是终端不行,这样没法安装
  3. 按照官方教程,一步步输入命令:
    mkdir webrtc-checkout
    cd webrtc-checkout
    fetch --nohooks webrtc
    gclient sync
  4. 漫长的等待后源码下载完成,创建自己的brantch,用于git版本控制:
    cd src
    git checkout master
    git new-branch your-branch-name
  5. 如果需要更新源码:(还没试过)
    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+NinjaCMake+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的.oobj/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_target10.10.0改成10.11.0就可以了,保存之后clean,然后再用gn gen生成一次ninja文件,最后再用ninja编译,就没问题了!

运行Demo

out/Default下面有个AppRTCMobile.app打开来可以玩= =

WebRTC源码开发(一)MacOS下源码下载、编译及Demo运行的更多相关文章

  1. 【VS开发】win7下让程序默认以管理员身份运行

    在win7中用自己写的程序读取MBR时,突然提示无法对磁盘进行操作,而在xp下并没有这个问题:最后点右键以管理员身份运行才可以正常运行.于是想办法让程序在双击启动时默认以管理员身份运行.具体方法: 1 ...

  2. linux下源码安装软件

    在linux下的很多软件都是通过源码包方式发布的,这样做对于最终用户而言,虽然相对于二进制软件包,配置和编译起来繁琐点,但是它的可移植性却好得多,针对不同的体系结构,软件开发者往往仅需发布同一份源码包 ...

  3. macOS下appstore提示未能完成该操作的解决办法

    macOS下App Store下载软件,提示:未能完成该操作.(com.apple.commerce.client 错误 500.) 解决办法: 在终端输入 defaults write com.ap ...

  4. 【转载】MacOS下IntelliJ IDEA关联JDK1.8源码

    原文地址: MacOS下IntelliJ IDEA关联JDK1.8源码 1 打开jdk设置,找到具体添加的地方 2 找到自己jdk的源码位置替换掉 3 如果没有源码或者源码没有下载解压,自己下载解压, ...

  5. 【Android 系统开发】CyanogenMod 13.0 源码下载 编译 ROM 制作 ( 手机平台 : 小米4 | 编译平台 : Ubuntu 14.04 LTS 虚拟机)

                 分类: Android 系统开发(5)                                              作者同类文章X 版权声明:本文为博主原创文章 ...

  6. Java学习-039-源码 jar 包的二次开发扩展实例(源码修改)

    最近在使用已有的一些 jar 包时,发现有些 jar 包中的一些方法无法满足自己的一些需求,例如返回固定的格式,字符串处理等等,因而需要对原有 jar 文件中对应的 class 文件进行二次开发扩展, ...

  7. 【转】Win 7 下源码运行OpenERP7.0

    原文地址:Win 7 下源码运行OpenERP7.0 安装Python2.7 下载地址:http://www.python.org/getit/注:OpenERP7.0支持的Python版本最高为2. ...

  8. Windows下用Git下载android源码 转载

    http://my.oschina.net/jiadebin/blog/52631 1.首先你的电脑要安装好git,这个请参考git官网. 2.打开git命令窗口输入git clone http:// ...

  9. 【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)

    作者 : 韩曙亮  博客地址 : http://blog.csdn.net/shulianghan/article/details/42707293 转载请注明出处 : http://blog.csd ...

随机推荐

  1. Vue相关,vue.nextTick

    vue中有一个较为特殊的API,nextTick.根据官方文档的解释,它可以在DOM更新完毕之后执行一个回调,用法如下: // 修改数据 vm.msg = 'Hello' // DOM 还没有更新 V ...

  2. oracle 外部表查alter日志

    --创建文件夹,路径是alter日志的路径 create or replace directory data_dir as '/u01/app/oracle/diag/rdbms/orcl/orcl/ ...

  3. Linux学习 - 文件特殊权限

    一.SUID权限(只针对文件) 只有可执行的二进制程序才能设定SUID权限 命令执行者要对该程序拥有x(执行)权限 1 拥有SUID的文件 /usr/bin/passwd 2 功能: 命令执行者(其他 ...

  4. 分布式系统为什么不用自增id,要用雪花算法生成id???

    1.为什么数据库id自增和uuid不适合分布式id id自增:当数据量庞大时,在数据库分库分表后,数据库自增id不能满足唯一id来标识数据:因为每个表都按自己节奏自增,会造成id冲突,无法满足需求.  ...

  5. 实现nfs持久挂载+autofs自动挂载

    实验环境: 两台主机 node4:192.168.37.44 NFS服务器 node2:192.168.37.22 客户端 在nfs服务器,先安装nfs和rpcbind [root@node4 fen ...

  6. System.exit(-1)和return 的区别

    对于只有一个单一方法的类或者系统来说是一样的,但是对于含有多个类和方法,且调用关系比较复杂时就不一样了. System.exit(-1)是指所有程序(方法,类等)停止,系统停止运行. return只是 ...

  7. git 使用https方式进行 pull、push代码免密

    由于网络原因我用ssh方法拉取代码每次都提示远程服务连接失败,因此我用了https方式去拉去代码. 这种方式拉取代码每次操作都要输入密码,为了解决这个问题做了一下操作: 在命令行输入 git conf ...

  8. MyBatis通过注解实现映射中的嵌套语句和嵌套结果

    案例描述:查看订单或购物车订单信息的同时查询出该订单中所有书籍的信息. 一.嵌套语句 @Select("select* from shopcart where shopcartid = #{ ...

  9. 『学了就忘』Linux启动引导与修复 — 74、Linux系统的修复模式(光盘修复模式)

    目录 1.光盘修复模式概念 2.光盘修复模式修复系统问题 (1)准备系统光盘 (2)进入BIOS (3)修改BIOS的启动顺序 (4)进入光盘修复模式 (5)修复系统 (6)修复系统实操 (7)总结 ...

  10. 什么是API?

    一.简介 API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序,与开发人员基于某软件或硬件得以访问一组例程的能力,而又 ...