webrtc初识
最近由于项目的需求,开始接触了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.2、初识WebRTC
文章导读:本节内容,如标题所讲,“初识webrtc”.读完之后,我需要你能清楚三个问题:第一.真正的搞明白实时音视频在生产环境中的真实应用以及前景分析:第二.开发一个符合商业标准的实时音视频应用需要解 ...
- WebRTC入门学习之初识WebRTC (转)
一.WebRTC基本架构 图一 WebRTC总体架构,摘自百度百科 先说说WebRTC大致的实现思路:我们创建的web app,然后在app中调用W3C提供的JS API,JS API 会调用浏览器 ...
- webRTC脱坑笔记(一)— 初识webRTC
webRTC概述 WebRTC--- `Web browsers with Real-Time Communications (RTC)` WebRTC是一个开源项目,可以在`Web`和本机应用程序中 ...
- 1.3、WebRTC架构
文章导读:本文的讲解的是webrtc系统架构,每个人都要Get到这些知识:第一.了解webrtc架构分层:第二.对每层技术有一个清晰的认知.学完本节内容可以为我们后面学习核心API起到至关重要的作用, ...
- 1.1、webrtc的历史和现状
1.1.webrtc的历史和现状 本书目录 温馨提示:本书的内容,将按照顺序一一展开,上篇文章阐述本书的诞生的原因,推荐阅读方式等. 如果你还没有阅读上一篇文章(必读前言—— 作者的独白),我建议返回 ...
- Android动画效果之初识Property Animation(属性动画)
前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...
- 初识Hadoop
第一部分: 初识Hadoop 一. 谁说大象不能跳舞 业务数据越来越多,用关系型数据库来存储和处理数据越来越感觉吃力,一个查询或者一个导出,要执行很长 ...
- python学习笔记(基础四:模块初识、pyc和PyCodeObject是什么)
一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sy ...
- 初识IOS,Label控件的应用。
初识IOS,Label控件的应用. // // ViewController.m // Gua.test // // Created by 郭美男 on 16/5/31. // Copyright © ...
随机推荐
- python基础三
多级菜单 多级菜单 可依次选择进入各子菜单 所需新知识点:列表.字典 #!/usr/bin/env python # -*- coding: utf-8 -*- menu = { '北京':{ '海淀 ...
- PHP PDO的setAttribute函数
数据库的连接: $dsn = 'mysql:host=127.0.0.1;port=3306;dbname=cardslg'; $username = 'root'; $password = ''; ...
- Xtrabackup 安装使用
一 简介: Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品.它能对Inno ...
- PHP面向对象讲解
面向对象 类<------>对象 面向对象例题 理解: 减少 变量的重新定义 比如 变量前的 var $ 思路更加明确 class Yuan ----后面不加() ...
- October 23rd Week 44th Sunday 2016
When ambition ends, happiness begins. 野心消亡之日,正是快乐破茧之时. No ambition, no annoyance. No ambition, no ac ...
- http协议和web应用有状态和无状态浅析
http协议和web应用有状态和无状态浅析 (2013-10-14 10:38:06) 转载▼ 标签: it 我们通常说的web应用程序的无状态性的含义是什么呢? 直观的说,“每次的请求都是独立的 ...
- 安天AVLTeam送福利喽~~
#福利来了# duang~duang~duang~ 安小天帮你辨别短信真伪!!! 是不是经常收到真假难辨的[疑似诈骗短信]是真的?是假的? 傻傻分不清楚 现在不用怕啦!!! 遇到这种情况,只需手机截 ...
- [Liferay6.2.2]AUI的小坑:input的type属性
<aui:input name="name" label="姓名" value="<%=student.getName() %>&q ...
- 转换一个矩阵(2维数组)为HTML Table
matrix[row][col],比如[ [ "Name", "Age" ], [ "Sam", 12 ] ] function (m) { ...
- PV操作
学习PV操作之前,我们首先来了解两个很基础的概念: 同步.互斥: 同步:其实说同步还不如说”协作“,就是我们的目标只有一个,我们奔着同一个目标去的,都是在大家的努力下共同完成这么一件事情.还是比较容易 ...