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 函数的动态参数
#普通参数示例 def func(args): print(args) func(123456) #执行结果为123456 如果给多个参数,就会报错 #动态参数示例 def func(*args): ...
- Linux ftp访问控制配置,包括访问ftp权限和访问ftp目录权限
在Linux 上建立用户为website1 home目录是/data/home/website1 但是用ftp登录以后,路径可以随便切换,并且可以进入别的站点下 进行增.删.改 本篇的目的是:在lin ...
- php随机生成验证码代码
<?php session_start(); //产生一个随机的字符串验证码 $checkcode=""; for ($i=0;$i<4;$i++){ $checkco ...
- C#读取XML文件并取值
1.新建XML文件: <?xml version="1.0" encoding="utf-8" ?> <SystemInfo> < ...
- 安装学习nginx记录
通过查看nginx目录下的log文件,发现80端口没有权限使用 查找文章发现: netstat -aon|findstr ":80" 有的进程ID占用多了80端口,看监听的端口 启 ...
- Yii2 数据查询
转载来自: http://www.yiichina.com/tutorial/95 数据查询 User::find()->all(); 此方法返回所有数据: User::findOne($id) ...
- CozyRSS开发记录7-了解RSS
CozyRSS开发记录7-了解RSS 1.初窥RSS 多找几个RSS源就会发现,有的源是用Atom协议提供的,有的源是RSS协议提供的.RSS协议有过几个版本,0.9.1.0和2.0等,理论上支持2. ...
- 个人对Java中多态的一些简单理解
什么是多态 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消息做出响应.即同一 ...
- outerHTML
1,获取html结构:当前节点下的代码: jQuery.html() 是获取当前节点下的html代码,并不包含当前节点本身的代码: 2,jQuery.prop("outerHTML" ...
- [转载]config文件的一个很好的实现
以下是转载于网上的一个很好的config文件的实现,留存以备案 //Config.h #pragma once #include <string> #include <map> ...