跨平台编译
win版http://blog.csdn.net/free_syj/article/details/39178601
mac版http://chriszeng87.iteye.com/blog/2077119
android版http://blog.csdn.net/chenyafei617/article/details/38085409
结构分析http://blog.sina.com.cn/s/blog_6d8df7d001014lqh.html
视频
WebRTC的视频部分,包含采集、编解码(I420/VP8)、加密、媒体文件、图像处理、显示、网络传输与流控(RTP/RTCP)等功 能。
视频采集---video_capture
源代码在webrtc\modules\video_capture\main目录下,包含接口和各个平台的源代码。
在windows平台上,WebRTC采用的是dshow技术,来实现枚举视频的设备信息和视频数据的采集,这意味着可以支持大多数的视频采 集设备;对那些需要单独驱动程序的视频采集卡(比如海康高清卡)就无能为力了。
视频采集支持多种媒体类型,比如I420、YUY2、RGB、UYUY等,并可以进行帧大小和帧率控制。
视频编解码---video_coding
源代码在webrtc\modules\video_coding目录下。
WebRTC采用I420/VP8编解码技术。VP8是google收购ON2后的开源实现,并且也用在WebM项目中。VP8能以更少的数 据提供更高质量的视频,特别适合视频会议这样的需求。
视频加密--video_engine_encryption
视频加密是WebRTC的video_engine一部分,相当于视频应用层面的功能,给点对点的视频双方提供了数据上的安全保证,可以防止在Web上视 频数据的泄漏。
视频加密在发送端和接收端进行加解密视频数据,密钥由视频双方协商,代价是会影响视频数据处理的性能;也可以不使用视频加密功能,这样在性能 上会好些。
视频加密的数据源可能是原始的数据流,也可能是编码后的数据流。估计是编码后的数据流,这样加密代价会小一些,需要进一步研究。
视频媒体文件--media_file
源代码在webrtc\modules\media_file目录下。
该功能是可以用本地文件作为视频源,有点类似虚拟摄像头的功能;支持的格式有Avi。
另外,WebRTC还可以录制音视频到本地文件,比较实用的功能。
视频图像处理--video_processing
源代码在webrtc\modules\video_processing目录下。
视频图像处理针对每一帧的图像进行处理,包括明暗度检测、颜色增强、降噪处理等功能,用来提升视频质量。
视频显示--video_render
源代码在webrtc\modules\video_render目录下。
在windows平台,WebRTC采用direct3d9和directdraw的方式来显示视频,只能这样,必须这样。
网络传输与流控
对于网络视频来讲,数据的传输与控制是核心价值。WebRTC采用的是成熟的RTP/RTCP技术。
音频
WebRTC的音频部分,包含设备、编解码(iLIBC/iSAC/G722/PCM16/RED/AVT、NetEQ)、加密、声音文件、 声音处理、声音输出、音量控制、音视频同步、网络传输与流控(RTP/RTCP)等功能。
音频设备---audio_device
源代码在webrtc\modules\audio_device\main目录下,包含接口和各个平台的源代码。
在windows平台上,WebRTC采用的是Windows Core Audio和Windows Wave技术来管理音频设备,还提供了一个混音管理器。
利用音频设备,可以实现声音输出,音量控制等功能。
音频编解码---audio_coding
源代码在webrtc\modules\audio_coding目录下。
WebRTC采用iLIBC/iSAC/G722/PCM16/RED/AVT编解码技术。
WebRTC还提供NetEQ功能---抖动缓冲器及丢包补偿模块,能够提高音质,并把延迟减至最小。
另外一个核心功能是基于语音会议的混音处理。
声音加密--voice_engine_encryption
和视频一样,WebRTC也提供声音加密功能。
声音文件
该功能是可以用本地文件作为音频源,支持的格式有Pcm和Wav。
同样,WebRTC也可以录制音频到本地文件。
声音处理--audio_processing
源代码在webrtc\modules\audio_processing目录下。
声音处理针对音频数据进行处理,包括回声消除(AEC)、AECM、自动增益(AGC)、降噪处理等功能,用来提升声音质量。
网络传输与流控
和视频一样,WebRTC采用的是成熟的RTP/RTCP技术。
RTPPeerConnection
peer to peer http://www.iwebrtc.com/blog/webrtc-1-0-real-time-communication-between-browsers-5/
应用例子
http://www.webrtc.org/reference/getting-started
WebRTC 包含几个样例应用,可以在 trunk/webrtc/examples 和 trunk/talk/examples找到.排在前面的是高水准的代码.
AppRTCDemo (使用 WebRTC Native APIs via JNI的Android应用 )目标名为AppRTCDemo. The JNI 包装说明在这里here. AppRTCDemo代码在here.
Peerconnection (使用 WebRTC Native APIs的应用)
Peerconnection 由两个应用组成. 一个服务端程序, 叫做 peerconnection_server , 还有一个叫 peerconnection_client的应用 . 注意我们现在还不支持Android和Mac版的peerconnection_client 应用。
客户端有简单的音视频处理能力. 服务端允许客户端间管理信令信息去 初始化一个通话。
在 peerconnection_clients客户端间设置 P2P通话
启动 peerconnection_server . 你会看到下面的信息,表面已经成功启动
Server listening on port 8888
启动任何数量的 peerconnection_client ,让他们去连接服务器.
客户端的界面由几个部件组成:
连接服务器:当应用启动后,你必须制定服务器地址 (IP-address). 设置完后你可以点击 "Connect" 按钮或者返回.
选择一个用户: 成功连接上服务器后,你可以双击或者点击用户的名字去连接用户。
视频聊天: 成功连上一个用户后,会全屏显示一个视频通话。
挂断通话: 按 Esc键. 你会退回选择用户的界面.
断开连接: 按 Esc 键,你可以重新选择要链接的服务器.
测试peerconnection_server
启动 peerconnection_server 应用
在浏览器打开trunk/talk/examples/peerconnection/server /server_test.html .
点击 connect.
观察peerconnection_server 的信息.
再打开一个相同的页面.用不同的名字点连接. 现在两端间会开始交换信息.
Call应用( 用 libjingle建立通话的应用)应用名叫call (已经弃用了). Call 使用 xmpp ( WebRTC用来区别SDP的协议 ) 让你用gmail账号登陆,之后和你的gmail好友建立音视频通话 . 它是建立在 libjingle上实现这个功能
同时,你可以指定音频和视频的输入和输出 RTP dump.这里提供两个 RTP dump输入的采样:
voice.rtpdump 单通道, 16Khz 音频G722编码,
video.rtpdump 320x240 视频编码H264 AVC ,30 frames per second.
Google Talk Video内置了上面的采样.
如果你使用其他RTP dump, 你需要在 call_main.cc (lines 215 - 222)改变代码.
WebRTCDemo (使用 media engines的Android应用)
WebRTCDemo.没有使用 WebRTC 的原生APIs.
手动去连接其他 WebRTCDemo ,它可以发送和接收媒体流
(e.g. 防火墙可能会阻止你建立连接). 未来它会允许设置,打开和关闭音频和视频处理功能(e.g.回声消除, NACK, 视频编码和解码).(已经实现)
中继服务器(通话用到的专业 服务器)
Stun 服务器
Turn 服务器
NAT穿透,开源穿透服务器https://code.google.com/p/rfc5766-turn- server/
AppRTCDemo测试用例
http://samdutton-nodertc.jit.su/
http://apprtc.appspot.com/
代码预演http://www.html5rocks.com/en/tutorials /webrtc/basics/#toc-simple
Jingle 是一种支持视频和语音的XMPP扩展,WebRTC从libjingle库(Jingle的C++实现库)里使用了网络和传输组件
/home/senrsl/test/WebRTC/trunk/third_party/android_tools/sdk/sources/android-19/org/w3c/domts/level1
部署
https://code.google.com/p/rfc5766-turn-server/
http://blog.csdn.net/kl222/article/details/40154857
部署了rfc的turnserver,死活启动不了。。。。
- senrsl@senrsl-ubuntu:~/test/libevent-2.0.21-stable$ turnserver -L 124.65.116.130 -a -b turnuserdb.conf -f -r 124.65.116.130
- turnserver: invalid option -- 'L'
- turnserver: invalid option -- 'a'
- turnserver: invalid option -- 'b'
- turnserver: invalid option -- 'f'
- turnserver: invalid option -- 'r'
- /etc/turnserver.conf:31: no such option 'listening-port'
- Parse error in configuration file /etc/turnserver.conf
- Parse configuration error, exiting...
真无语了。。。。
------------------------------
make安装程序
sudo make
sudo make install
卸载
在编译安装的目录下运行
sudo make uninstall
------------------------------
gdebi安装后由GUI的gdebi-gtk,可以执行安装卸载
------------------------------
turnserver -o -X 124.65.116.130 --no-tls --no-dtls -a -b turnuserdb.conf -f -r null
sudo turnserver -L 124.65.116.130 -c /usr/local/etc/turnserver.conf -o -a -b turnuserdb.conf -f -r null
./turnserver -L 124.65.116.130 -a -b /user/local/etc/turnserverdb.conf -f -r 124.65.116.130
E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)
E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?
1。终端输入 ps -aux ,列出进程。找到含有apt'-get的进程,直接sudo kill PID。解决。
sudo turnserver -L 124.65.116.130 -c /etc/turnserver.conf -o -a -b /etc/turnuserdb.conf -f -r null
以上暂停
看原理,看思路,大规模cp
什么是WebRTC
http://segmentfault.com/blog/skyinlayer/1190000000436544
众所周知,浏览器本身不支持相互之间直接建立信道进行通信,都是通过服务器进行中转。比如现在有两个客户端,甲和乙,他们俩想要通信,首先需 要甲和服务器、乙和服务器之间建立信道。甲给乙发送消息时,甲先将消息发送到服务器上,服务器对甲的消息进行中转,发送到乙处,反过来也是一 样。这样甲与乙之间的一次消息要通过两段信道,通信的效率同时受制于这两段信道的带宽。同时这样的信道并不适合数据流的传输,如何建立浏览器 之间的点对点传输,一直困扰着开发者。WebRTC应运而生
WebRTC是一个开源项目,旨在使得浏览器能为实时通信 (RTC)提供简单的JavaScript接口。说的简单明了一点就是让浏览器提供JS的即时通信接口。这个接口所创立的信道并不是像 WebSocket一样,打通一个浏览器与WebSocket服务器之间的通信,而是通过一系列的信令,建立一个浏览器与浏览器之间 (peer-to-peer)的信道,这个信道可以发送任何数据,而不需要经过服务器。并且WebRTC通过实现MediaStream,通 过浏览器调用设备的摄像头、话筒,使得浏览器之间可以传递音频和视频
三个接口WebRTC实现了三个API,分别是:
* MediaStream:通过MediaStream的API能够通过设备的摄像头及话筒获得视频、音频的同步流
* RTCPeerConnection:RTCPeerConnection是WebRTC用于构建点对点之间稳定、高效的流传输的组件
* RTCDataChannel:RTCDataChannel使得浏览器之间(点对点)建立一个高吞吐量、低延时的信道,用于传输任意数据
webRTC是跨平台的,可以下载那7.1G的源码编译win,linux,mac,android,ios,wp等等。。。。
他的网页版有很多成熟的示例,
如果要用的话,需要搭建信令服务器跟NAT防火墙穿透。
信令服务器其实就是用来握手,通过socket或者xml协议之类的交换对方的ip端口等信息,然后通过穿透防火墙建立p2p管道,从而视频通 话。
本打算让他跟tox合作,整成一套,tox是通过节点来实现握手,不走服务器。
好吧,该计划暂时搁浅,研究另一套方案,jitsi + openfire。
2014年10月22日11:17:30
没有评论 :
发表评论