最近由于项目的需求,开始接触了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. word20161207

    DHCPRELEASE, DHCP release message / DHCP 释放消息 DHCPREQUEST, DHCP request message / DHCP 请求消息 dial 拨号位 ...

  2. 将csv文件读入数据库

      USE LHJTest create table #temp6//创建临时表 ( A nvarchar(max) NOT NULL, B nvarchar(max), C nvarchar(max ...

  3. .NET LINQ 数据分组

    数据分组      分组指将数据放入组中以便每个组中的元素共享公共特性的操作.   方法 方法名 说明 C# 查询表达式语法 Visual Basic 查询表达式语法 更多信息 GroupBy 对共享 ...

  4. node的安装

    1.打开node官网  https://nodejs.org/en/  下载最新版node安装包 v6.2.2 版本自带npm包,比较方便使用.下载之后就正常的常规安装即可. 2.查看是否安装成功   ...

  5. HTTP协议GET和POST请求的区别

    浏览器中输入网址访问资源一般都是通过GET方式:在FORM提交中,可以通过Method指定提交方式为GET或者POST,默认为GET提交.Http协议定义了与服务器交互的不同方法,最基本的方法有4种, ...

  6. 【MongoDB】 基于C#官方驱动2.2版的封装类

    一.前言 最近项目中要用到MongoDB,因此实现做了不少的调研.发现网上很多现有关于MongoDB C#官方驱动的调用方法都是基于1.8版本的,已经不是用了最新的2.2版本.因此我在基于C#官方驱动 ...

  7. MyBatis学习(二)

    mybatis开发dao的方法 作用范围 SqlSessionFactoryBuilder是以工具类方式来使用,需要创建sqlSessionFactory就new一个SqlSessionFactory ...

  8. ASP.NET4.5Web API及非同步程序开发系列(1)

    认识非同步程序开发设计模型 从VS2012开始引入的新的非同步程序设计的支持-------async/await设计模型 之前的当我们支持非同步作业的时候,往往使用多线程开解决,我们比较熟悉的就是 执 ...

  9. LeetCode——Best Time to Buy and Sell Stock I (股票买卖时机问题1)

    问题: Say you have an array for which the ith element is the price of a given stock on day i. If you w ...

  10. Linux 第04天

    Linux 第04天 1.系统设置工具(网络和打印机)和硬件检测 1.1 setup工具 1.1.1 用户身份验证设置 1.1.2 网络配置 1.1.3 防火墙设置 1.1.4 键盘形式设置 1.1. ...