关于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 噪声抑制)、VAD(Voice Activity Detection 静音检测)、AECM(Acoustic Echo Canceller for Mobile 声学回声消除)以及 AGC(Auto 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的代码结构,如下图:
2、WebRTCDemo中音视频管理接口--MediaEngine,包括操作音频和视频的接口,详见MediaEngine的实现。
3、jni实现:细心的读者会发现WebRTCDemo下面有一个jni目录,这是android提供的调用本地代码的方式,即Java Native Call(读者如想详细了解JNI是怎么回事,可以买本书或找些相关资料来看看,这里面涉及到NDK编译,JNI语法)。
MediaEngine中native方法最终都是通过Jni下面的video_engine_jni.cc和video_engine_jni.cc来实现的,这些Jni方法最终就转到WebRTC提供的接口类中去了,即VoiceEngine和VideoEngine,顺着这个思路再看源代码就比较容易理解了。
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——消除通过摄像头获取的图片的视频噪声等。
- 关于WebRTC初接触
- 关于WebRTC初接触2
- 关于对webrtc的初次亲密接触的一点感想!
- 关于c++的初接触
- ansys关于接触分析
- 关于c++异常的初接触try{}catch{}
- 关于刚刚接触的 wordxml
- WebRTC 初体验
- webrtc 初认识
- WebRTC
- WebRTC
- WEBRTC
- webrtc
- WebRTC
- WebRTC
- WebRTC
- WebRTC
- webrtc
- UE4 World Setting---Level的“World Setting” 重点设置 (随记系列3_World Setting)
- 项目运行报错,service注解无效
- HttpURLConnection的GET和POST解析
- 浅谈设计模式及其适用情景
- HDU 1754-I Hate It(线段树单节点更新)
- 关于WebRTC初接触
- uva 1149 Bin Packing(贪心)
- mybatis学习之路(三)
- HttpUrlConnection使用方法封装工具类
- ADO.NET 快速入门(二):执行命令
- 欢迎使用CSDN-markdown编辑器
- Octave 介绍
- PhotoZoomPro图片处理工具使用
- 消灭兔子