关于WebRTC初接触

来源:互联网 发布:福州seo顾问培训 编辑:程序博客网 时间:2024/06/06 08:57

因工作项目需要,需要应用WebRTC做项目,在此之前从未接触过,所以在此将笔记记下来,对该项目的理解和认知定存在不足甚或偏差,文中有描述不当之处还望各位悉心指出,感激不尽。

首先上一下WebRTC android端的demo地址

https://github.com/EricssonResearch/openwebrtc-examples

稍后也会把这个项目放到自己的github上,大家需要也可以去本人的github中搜,谢谢。

https://github.com/beibeiMary

下面开始谈谈学习WebRTC的过程和收获

上一下比较好的帖子

http://blog.csdn.net/freewebsys/article/details/46649667    openwebrtc(1) 服务端和android客户端demo安装

http://blog.csdn.net/yangyayuan/article/details/12069293  WebRTC学习笔记_Demo收集

http://www.cnblogs.com/lingyunhu/p/3578218.html      Android WebRTC 音视频开发总结

WebRTC,名称源自网页实时通信(Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的技术,是谷歌2010年以6820万美元收购Global IP Solutions公司而获得的一项技术。2011年5月开放了工程的源代码,在行业内得到了广泛的支持和应用,成为下一代视频通话的标准。

QQ就用到了他的核心技术,不过那时候这些东西还不叫WebRTC,他也还掌握在GIPS手里(他们家的语音技术可谓独步天下)

 其实在Google将WebRTC开源之前,微软和苹果各自的通讯产品已占用很大市场份额(如Skype),Google也是为了快速扩大市场,所以将他给开源。经常接触开源的人应该很容易理解Google这种策略,只不过在国内大家都喜欢弄成SDK,然后按年按月按用户数给你收费

WebRTC主要目标是为互联网提供高质量的富媒体即时通信,但其源码为C/C++所写,且其开发版中也包含对android 和 iOS 等移动设备的支持

WebRTC提供一套音频处理引擎VOE(本文不涉及视频处理引擎VIE),但VOE在 android 和 iOS 上的整体编译一直是一个比较繁琐且恼火的问题,VOE中的NS(Noise Suppression 噪声抑制)、VADVoice Activity Detection 静音检测)、AECMAcoustic Echo Canceller for Mobile 声学回声消除)以及 AGCAuto Gain Control 自动增益控制)等模块可以稍微简单一些,可以单独拿出来研究使用。

一些需要知道的关于WebRTC的概念:WebRTC, ICE, STUN, TURN, P2P, NAT, Jingle, TALK, VOIP, FFMPEG, H264, VP8, NACK, RTP, RTCP, RTSP, RTMP, SIP, XMPP, ISAC, ILBC, OPUS, G711, G722.

 如果想简单测试效果,可以试试大神搞的东东:

   1.  http://www.cnblogs.com/lingyunhu/p/rtc23.html

   2.  http://www.cnblogs.com/lingyunhu/p/3722029.html

   如果想快速了解开发过程,可以看看大神整理和翻译的东东:

   1.  http://www.cnblogs.com/lingyunhu/p/4129425.html

   2.  http://www.cnblogs.com/lingyunhu/p/4058182.html

     

二、WEBRTC代码如何获取和编译。

1、下载编译:做这个动作前您最好先确认您是否需要做这个动作,如果仅仅做基于浏览器的开发您可以略过这个步骤,因为您要的东西浏览器都帮您做好了。

2、环境准备:对刚入门的人来说编译WEBRTC很头疼,特别是对没接触过linux的人来说,虽然网上有很多资料,但是实际编译过程中总会出现这样或那样的错误,很多错误都不知所措。其实编译不过的主要原因就是有些文件下载不下来(因为国家防火墙限制),所以这里给出一个编译WebRTC的最简单的解决方案:

2.1、买一个付费的VPN账号,其实买VPS是最好的,不过成本比较高。

2.2、参考:http://www.webrtc.org/reference/getting-started,很详细,看仔细。

这个方案屡试不爽,我已经成功编译过好几次了,如果还有问题可以联系我(andorid开发者来说最好使用ubuntu 64位环境,不要在windows下面搞。

2.3、最近这个代码越来越难下了,所以我也不会去轻易更新,或者我就直接去香港下载,强吧!

2.4、网上很多这方面的资料,建议您参考喔上面的做法,不然后面会走很多弯路,因为有些资料都过时了,作者也没有去更新。


看一下我运行的SimpleDemo


再看看google下载之后的demo

 


很适合用在社交,智能家居,安防监控,在线教育等行业

 因为WebRTC是跨平台的,支持mac,windows,linux,但不同平台下用的工程文件格式不一样,如VisualStudio下是.vcproj,是每个开发平台下手动创建自己的工程文件吗?答案是否定的,他是通过.gyp文件来管理的,说白了.gyp文件相当于是他的工程描述文件,类似JSON格式,不同平台下编译的时候根据.gyp文件产生对应格式的工程文件,如.vcproj。

说到这里就得谈谈它的编译方式ninja,搞chrome的那些程序员估计是受不了make的编译速度,所以开发了ninja。所以如果运行gclient runhooks的时候会生成很多*.ninja文件(这些文件在out目录下),ninja就是根据这些文件进行编译的,这些文件语法都比较简单,基本上都是rule和build,这样就产生了ninja的优势----快速编译,他很多条件都是预先决定的,比make快好多好多!(这段是大神说的, 虽然现在我还看不懂……但我相信记下来翻看的时候我会慢慢看懂的……)

1、先看WebRTCDemo的代码结构,如下图:

2WebRTCDemo中音视频管理接口--MediaEngine,包括操作音频和视频的接口,详见MediaEngine的实现。

 

3、jni实现:细心的读者会发现WebRTCDemo下面有一个jni目录,这是android提供的调用本地代码的方式,即Java Native Call(读者如想详细了解JNI是怎么回事,可以买本书或找些相关资料来看看,这里面涉及到NDK编译,JNI语法)。

MediaEnginenative方法最终都是通过Jni下面的video_engine_jni.cc和video_engine_jni.cc来实现的,这些Jni方法最终就转到WebRTC提供的接口类中去了,即VoiceEngineVideoEngine,顺着这个思路再看源代码就比较容易理解了。 

 

4、如何调试WebRTCDemo中的c++代码?

根据JNI要求,需要用NDK编译WebRTCDemo,不过目前WebRTCDemo是直接调用现成的libwebrtcdemo-jni.so,如果要调试得自己写一个Andorid.mk文件将相关源代码加进来,几乎涉及大部分WebRTC代码,这样工作量有点大,所以放弃了。

 

WebRTCDemo过滤和查看日志的具体方法如下(TraceLevel选项很多,可根据自己需求选择):

复制代码
1 public void setTrace(boolean enable, VideoEngine.TraceLevel traceLevel) {2         if (enable) {3             vie.setTraceFile("/sdcard/trace.txt", false);4             vie.setTraceFilter(traceLevel);// huly5             return;6         }7         vie.setTraceFilter(VideoEngine.TraceLevel.TRACE_NONE);8     }
复制代码

关于架构的组成部分,包括:

Web API——第三方开发人员用来开发基于Web的应用,如视频聊天。
WebRTC Native C++ API——浏览器厂商用于实现Web API的函数集。
Session Management——抽象session层,支持调用构建和管理层,由应用开发者来决定如何实现协议。
VoiceEngine——音频媒体链的框架,从声卡到网络。
iSAC——一种用于VoIP和流音频的宽带和超宽带音频编解码器,iSAC采用16 kHz或32 kHz的采样频率和12—52 kbps的可变比特率。
iLBC——用于VoIP和流音频的窄带语音编解码器,使用8 kHZ的采样频率,20毫秒帧比特率为15.2 kbps,30毫米帧的比特率为13.33 kbps,标准由IETF RFC 3951和3952定义。
NetEQ for Voice——动态抖动缓存和错误隐藏算法,用于缓解网络抖动和丢包引起的负面影响。在保持高音频质量的同时尽可能降低延迟。
VideoEngine——视频媒体链的框架,从相机像头到网络,从网络到屏幕。
VP8——来自于WebM项目的视频编解码器,非常适合RTC,因为它是为低延迟而设计开发的。
Image enhancements——消除通过摄像头获取的图片的视频噪声等。


原创粉丝点击