0.闲来无事,想研究webrtc,看了一些网上的文章之后,觉得谬误较多,以讹传讹的比较多,自己试验了一把,记录一下。

官网的写的教程在实践中也觉得不用那么复杂,有种落伍与繁冗的感觉。

1.我想看的是webrtc在android平台的使用,所以就以android平台下载/编译为例子。由于周知的原因,webrtc的代码下载时会出现很多问题(不然也不会有这个文章的出现,运行几个命令谁不会)。

我的环境是ubuntu 14.04版本(没试验过mac/windows下)。

建议:找一个稳定的vpn下载,会省很多很多麻烦。修改hosts/lantern代理等均会出现奇怪的问题,我也是最终使用了vpn才搞定了下载的问题。

2.过程:

  mkdir webrtc;cd webrtc。以下过程都这个目录执行。

  1.

  先搞定下载源码的工具

     git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

  会下载depot_tools,为什么会需要这个工具?有几个原因。

  1.webrtc依赖于相当多的库/编译工作/perf工具/测试资源等,但是这些依赖并不属于webrtc本身,分别在很多不同的仓库里面(当然这些仓库都在google的服务器上)。这个depot_tools可以用一个命令搞定所有的事情,多方便。

  2.由于webrtc会有多个平台编译,所以下载源代码的工具也有多种格式,比如windows的exe,linux/mac的elf等。把不同平台的工具放到这个depot_tools里面,然后用python根据平台不同,驱动不同的工具。

  然后把这depot_tools导入到环境变量中(不要使用绝对路径访问命令,我就是自做聪明没导入环境变量,出了一些不能下载的问题,切记)

  类比一下aosp项目,depot_tools相当于repo(主要是webrtc是Chromium的一个子项目,Chromium使用了这个工具,webrtc自然也会用)。

  repo需要manifest.xml来描述项目文件,depot_tools也不例外,使用DEPS来描述相关文件。

  这个东西有71m,还比较快,十几分钟就能下载好。

  2.

下载webrtc,这步与官网不太一致。直接clone原始仓库即可,不必执行什么fetch之类的,太不直观了。

    git clone https://chromium.googlesource.com/external/webrtc.git

  会把代码clone到src目录。

  这个东西有215m,需要20分钟以上。  

  3.

  下载依赖,这个步骤太磨人了,出了诸多错误,花费了我三天时间才完全下载好。

  cd src目录,执行gclient sync即可。

  说说gclient sync遇到的问题。

  1.boringssl_git无法下载,原因当然是墙。这个仓库是google基于openssl的fork,既然源被墙了,那找一个不被强的镜像不就可以了嘛,修改src/DEPS第7行的https://boringssl.googlesource.com为https://github.com/google

     github我还是能访问的。

  2.编译android平台需要play商店相关的service,出现了

    Failure: Server presented certificate that does not match host www.googleapis.com

  这个问题的解决参考 https://bugs.chromium.org/p/chromium/issues/detail?id=465000 八楼同学的做法。是因为修改了hosts,注掉googleapis.com相关的即可,虽然这个错误只注掉www.googleapis.com即可,但是下面还会有

  其他域名会坑到你,所以建议googleapis.com相关的全部注掉。

  

磕磕绊绊,花了三天时间,终于把所有的依赖下载好了,大概16g,不过由于是android平台,sdk/ndk两个仓库就占用了8g,其他平台应该会小不少,官网说linux平台只需要6.4gb

  小节一下,下载依赖大概是三个过程。一是下载相关的源码包,比如ffmpeg/expat等等,第二步是下载编译相关的工具,因为webrtc需要同时支持win/linux/mac/android等平台,每个平台的工具均不同,webrtc是提前做好了相关的工具,放到仓库,

然后根据平台下载,典型的就是clang,第三步就是相关的测试资源,pcm/yuv/y4m等数据,这些资源大概1g左右。下载的依据是,需要下载的目录下,均有一个.sha1文本文件,下载回来的文件与这个.sha1比例,判断是否需要更新。

3.编译

  webrtc的编译框架采用了 Ninja ,这个东西类似于maven/ant/gradle/makeflie,也是根据配置文件来编译,配置文件就是.gn,所以遍布源码的.gn文件,就是类似android.mk的东西。

  先编译gn gen out/Debug --args='target_os="android" target_cpu="arm"'相关的编译工具。

  然后运行ninja -C out/Debug就会生成相关的bin文件了,大功即将告成。

4.test

  由于墙的存在,我的测试不是很成功。不过说说测试步骤,如果有多个vpn帐号,到是可以试一试。

  在src/out/Debug/apks目录下,会生成AppRTCMobile.apk文件,安装到手机上,(挂上vpn)

  然后在chrome里面访问,https://appr.tc,把房间号,输入到apk首页的edittext里面,呼叫。(我的貌似已经成功了,但是应该在浏览器里面看到手机输出的画面才对,不过没看到)。

挂一漏万,容我再研究下代码/sdk如何使用。

webrtc初探的更多相关文章

  1. 下周二推出“音视频技术WebRTC初探”公开课,欢迎捧场!

     下周二推出"音视频技术WebRTC初探"公开课,欢迎捧场! 公开课课程链接:http://edu.csdn.net/huiyiCourse/detail/90 课程的解说资料 ...

  2. webrtc初探之一对一的连接过程(一)

    说明,我研究的是muan-khan的一个github项目,针对的是chrome对chrome,也就是pc对pc的一对一,一对多通话,感兴趣的可以继续往下看. github地址:https://gith ...

  3. freeswitch编译安装,初探, 以及联合sipgateway, webrtc server的使用场景。

    本文主要记录freeswitch学习过程. 一 安装freeswitch NOTE 以下两种安装方式,再安装的过程中遇到了不少问题,印象比较深刻的就是lua库找到不到这个问题.这个问题发生在make ...

  4. WebRTC手记之初探

    转载请注明出处:http://www.cnblogs.com/fangkm/p/4364553.html WebRTC是HTML5支持的重要特性之一,有了它,不再需要借助音视频相关的客户端,直接通过浏 ...

  5. (一)WebRTC手记之初探

    转自:http://www.cnblogs.com/fangkm/p/4364553.html WebRTC是HTML5支持的重要特性之一,有了它,不再需要借助音视频相关的客户端,直接通过浏览器的We ...

  6. 初探Electron,从入门到实践

    本文由葡萄城技术团队于博客园原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者.   在开始之前,我想您一定会有这样的困惑:标题里的Electron ...

  7. 初探领域驱动设计(2)Repository在DDD中的应用

    概述 上一篇我们算是粗略的介绍了一下DDD,我们提到了实体.值类型和领域服务,也稍微讲到了DDD中的分层结构.但这只能算是一个很简单的介绍,并且我们在上篇的末尾还留下了一些问题,其中大家讨论比较多的, ...

  8. CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探

    CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码 ...

  9. 从273二手车的M站点初探js模块化编程

    前言 这几天在看273M站点时被他们的页面交互方式所吸引,他们的首页是采用三次加载+分页的方式.也就说分为大分页和小分页两种交互.大分页就是通过分页按钮来操作,小分页是通过下拉(向下滑动)时异步加载数 ...

随机推荐

  1. 【实验吧】guess next session&&FALSE&&NSCTF web200&&程序逻辑问题

      guess next session源码: <?php session_start(); if (isset ($_GET['password'])) { if ($_GET['passwo ...

  2. linux下如何编译运行c程序

    GCC是Linux操作系统下一个非常重要的源代码编译工具,有着许多重要的选项,支持许多不同语言的编译,如C.C++.Ada.Fortran.Objective.Perl.Python.Ruby以及Ja ...

  3. Developing

    To work with the Android code, you will need to use both Git and Repo. In most situations, you can u ...

  4. luogu2568 GCD

    先筛法求出 \([1,n]\) 间的素数,然后枚举每个素数.可以发现,对于每个素数 \(x\),它的贡献是 \([1,\lfloor n/x \rfloor]\) 间的有序互质对数. 我们钦定 \(( ...

  5. 二丶人生苦短,我用python【第二篇】

    1 编码 python解释器在加载 .py 文件中的代码时,对内容默认进行ascill编码,因此存在中文会报错,所以需要告诉python解释器,用什么编码来执行源代码.) ASCII码,主要用于显示现 ...

  6. Codeforces 547B. Mike and Feet[单调栈/队列]

    这道题用单调递增的单调栈维护每个数能够覆盖的最大区间即可. 对于   1 2 3 4 5 4 3 2 1 6 这组样例, 1能够覆盖的最大区间是10,2能够覆盖的最大区间是7,以此类推,我们可以使用单 ...

  7. BZOJ 1778 [Usaco2010 Hol]Dotp 驱逐猪猡 ——期望DP

    思路和BZOJ 博物馆很像. 同样是高斯消元 #include <map> #include <ctime> #include <cmath> #include & ...

  8. 刷题总结——table(ssoi)

    题目: 题目背景 SOURCE:NOIP2016-RZZ-2 T2 题目描述 给定一个 n×m 的矩阵,行列均从 1 开始标号. 一个矩阵被认为是稳定的,当且仅当对于任意的 2≤i≤n,第 i 行的数 ...

  9. java面试题之什么是ThreadLocal?底层如何实现的?

    ThreadLocal是一个解决线程并发问题的一个类,用于创建线程的本地变量,我们知道一个对象的所有线程会共享它的全局变量,所以这些变量不是线程安全的,我们可以使用同步技术.但是当我们不想使用同步的时 ...

  10. LA 并查集路径压缩

    题目大意:有n个节点,初始时每个节点的父亲节点都不存在.有两种操作 I u v:把点节点u的父亲节点设为v,距离为|u-v|除以1000的余数.输入保证执行指令前u没有父亲节点. E u:询问u到根节 ...