最近由于项目的需求,开始接触了webrtc这个东西。没想到这东西的门槛还是蛮高的,接下来分享一下我所踩过的坑,希望对以后初次接触这个东西的人有所帮助。

webrtc官网

  第一步当然是看官方主页了(www.webrtc.org), 先把主页的内容大致扫了一遍,大概对这个东西的有了一点点认识,接下来就是按照development页面的步骤开始了。按照官方的说法安装依赖的tools,Java环境 etc...这中间当然包括了FQ的必要步骤

代码下载:

  当你配置完环境后,要运行命令gclient sync的时候,发现等了好久,依然是keep working的状态,有点着急了。随后翻看中文bbs(http://chinawebrtc.org/),发现我错了,原来代码有十几个G,代码大小取决于你下载的对应平台代码。事实上我在下载了24个小时之后就放弃了在官网下载的想法。 在中文论坛中发现有好心人已经在网盘上面分享不同平台的代码了,用迅雷不到3个小时就搞定了代码的下载。

代码编译:

  接下来就准备编译的工作了。然而我发现编译依然是那么的麻烦,因为我是下载的别人的源码,然而webrtc使用了自己的编译系统ninja,编译系统需要的.ninja 文件(其实对应于makefile文件)都是依赖于代码下载的本地环境进行了设定。后来终究逃不过gclient sync 这个步骤,不过还好, 不到1小时这个过程顺利结束,本地的编译脚本也正常了。按照官方的说明执行ninja -c out/Debug 几次都不是很顺利,找不到具体的原因,感觉还是代码的问题。后来在github上面发现别人写的编译脚本(https://github.com/pristineio/webrtc-build-scripts),抱着尝试的态度我先把脚本down下来,然后把自己的代码拷贝到了目录webrtc-build-scripts/android/ 下面,最终的代码目录是webrtc-build-scripts/android/webrtc/src ,接下来按照webrtc-build-scripts的readme步骤进行了,这个过程就很顺利了,编译结束之后,会在对面目标平台目录下面生成相应的libjingle_peerconnection.so 和libjingle_peerconnection.jar。

静态库:

  arm平台的动态库是编译好了,可是为了需求,需要想办法做一个静态库出来。查了许久没有发现编译静态库的方法。于是只能自己动手了,通过分析libjingle_peerconnection_so.ninjia 文件,发现其实这个动态库仅是对其它模块编出来的静态库的简单合并。我想采用同样的思路写一个脚本把编译出来的所有子模块的静态库抽取出来,然后合并成一个静态库(当然之前对静态库的理解仅限于简单的目标.o文件的合并)。当我试图用这个方法写的时候发现不行,当把静态库抽取出来的时候这个静态库就不能用了,感觉像是和目标文件的位置绑定了。后来经过各种尝试成功的编译出了安卓平台的静态库,思路大概如下,使用ar -M 这个指令对静态库进行合并。具体的mri脚本我已放在了github上面(https://github.com/xiaopeifeng/apprtc/tree/master/webrtc_static_library_build_script).

  首先将echomri.sh脚本放在webrtc/src/Debug目录并执行,结束之后会生成一个libjingle_peerconnection.mri脚本文件

  然后执行ar -M < libjingle_peerconnection.mri

  最终会在你的目录里看到生成的libjingle_peerconnection.a静态库文件

apprtc安卓工程:

  由于之前没有接触过安卓开发, 所以建立安卓工程还是花费了点时间, 其实过程蛮简单的, 将目录example/androidapp目录下的代码直接导入eclipse(公司主用), 将websocket的jar包, libjingle_peerconnection.jar和armebi的libjingle_peerconnection.so放在libs目录即可. 我已做成了可用的工程放在(https://github.com/xiaopeifeng/apprtc.git), 欢迎下载使用.

apprtc代码修改:

  虽然这份代码可用, 并且demo可以运行,但是信令服务器在墙之外, 所有有必要做出自己的服务器, 对这份官方提供的demo代码通读之后, 按照webrtc peerconnection层的运行流程, 做了自己的服务器, 并且现在简单可以运行了. 之后稳定了再公开吧.

  webrtc的路还有很长, 未知的坑还有很多, 慢慢踩, 慢慢分享.

webrtc初识的更多相关文章

  1. 1.2、初识WebRTC

    文章导读:本节内容,如标题所讲,“初识webrtc”.读完之后,我需要你能清楚三个问题:第一.真正的搞明白实时音视频在生产环境中的真实应用以及前景分析:第二.开发一个符合商业标准的实时音视频应用需要解 ...

  2. WebRTC入门学习之初识WebRTC (转)

    一.WebRTC基本架构 图一  WebRTC总体架构,摘自百度百科 先说说WebRTC大致的实现思路:我们创建的web app,然后在app中调用W3C提供的JS API,JS API 会调用浏览器 ...

  3. webRTC脱坑笔记(一)— 初识webRTC

    webRTC概述 WebRTC--- `Web browsers with Real-Time Communications (RTC)` WebRTC是一个开源项目,可以在`Web`和本机应用程序中 ...

  4. 1.3、WebRTC架构

    文章导读:本文的讲解的是webrtc系统架构,每个人都要Get到这些知识:第一.了解webrtc架构分层:第二.对每层技术有一个清晰的认知.学完本节内容可以为我们后面学习核心API起到至关重要的作用, ...

  5. 1.1、webrtc的历史和现状

    1.1.webrtc的历史和现状 本书目录 温馨提示:本书的内容,将按照顺序一一展开,上篇文章阐述本书的诞生的原因,推荐阅读方式等. 如果你还没有阅读上一篇文章(必读前言—— 作者的独白),我建议返回 ...

  6. Android动画效果之初识Property Animation(属性动画)

    前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...

  7. 初识Hadoop

    第一部分:              初识Hadoop 一.             谁说大象不能跳舞 业务数据越来越多,用关系型数据库来存储和处理数据越来越感觉吃力,一个查询或者一个导出,要执行很长 ...

  8. python学习笔记(基础四:模块初识、pyc和PyCodeObject是什么)

    一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sy ...

  9. 初识IOS,Label控件的应用。

    初识IOS,Label控件的应用. // // ViewController.m // Gua.test // // Created by 郭美男 on 16/5/31. // Copyright © ...

随机推荐

  1. BZOJ 4581: [Usaco2016 Open]Field Reduction

    Description 有 \(n\) 个点,删掉三个点后,求最小能围住的面积. Sol 搜索. 找出 左边/右边/上边/下边 的几个点枚举就可以了. 我找了 12 个点,统计一下坐标的个数,然后找到 ...

  2. java21

    1:字符流(掌握) (1)字节流操作中文数据不是特别的方便,所以就出现了转换流. 转换流的作用就是把字节流转换字符流来使用. (2)转换流其实是一个字符流 字符流 = 字节流 + 编码表 (3)编码表 ...

  3. yii 常用的多表查询

    return $this->model()->getDbConnection()->createCommand() ->select("t.type,t.title, ...

  4. AngularJS 表格

    ng-repeat 指令可以完美的显示表格. 使用 angular 显示表格是非常简单的: <!DOCTYPE html> <html> <head> <me ...

  5. 配置https

    引子: 最近在一篇文章中了解到EFF(电子前哨基金会)为了推广https协议,成立了一个let'sencrypt项目,可以发放免费的证书,此证书可以被大多数主流浏览器所信任,这个邪恶的念头一爆发,就让 ...

  6. Nginx 反代理其他搜索引擎

    反向代理 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客 ...

  7. html学习第一天笔记——第七章节

    第7章 CSS样式基本知识<span style="color:blue"> </span>嵌入式css样式,写在当前的文件中[**********]嵌入式 ...

  8. 解决Win8无法升级.NET Framework 3.5.1 提示错误0x800F0906

    搞了好久,发现了这篇文,很清晰,就引用了过来.http://www.xdowns.com/article/239/Article_3065.html 起因是windows8.1装oracle10g提示 ...

  9. to_string()的应用

    作用是将数字转化为字符串 #include<iostream> #include<cmath> #include<algorithm> #include<cs ...

  10. ARM大学计划全球经理到访华清远见,深入交流教育合作

    来源:华清远见嵌入式学院 10月20日,ARM大学计划全球经理Khaled Benkrid,高级内容主编洪川博士在ARM大学计划亚太经理陈炜博士的陪同下到访华清远见,就最新嵌入式技术.ARM处理器在教 ...