- 浏览: 1476475 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (691)
- linux (207)
- shell (33)
- java (42)
- 其他 (22)
- javascript (33)
- cloud (16)
- python (33)
- c (48)
- sql (12)
- 工具 (6)
- 缓存 (16)
- ubuntu (7)
- perl (3)
- lua (2)
- 超级有用 (2)
- 服务器 (2)
- mac (22)
- nginx (34)
- php (2)
- 内核 (2)
- gdb (13)
- ICTCLAS (2)
- mac android (0)
- unix (1)
- android (1)
- vim (1)
- epoll (1)
- ios (21)
- mysql (3)
- systemtap (1)
- 算法 (2)
- 汇编 (2)
- arm (3)
- 我的数据结构 (8)
- websocket (12)
- hadoop (5)
- thrift (2)
- hbase (1)
- graphviz (1)
- redis (1)
- raspberry (2)
- qemu (31)
- opencv (4)
- socket (1)
- opengl (1)
- ibeacons (1)
- emacs (6)
- openstack (24)
- docker (1)
- webrtc (11)
- angularjs (2)
- neutron (23)
- jslinux (18)
- 网络 (13)
- tap (9)
- tensorflow (8)
- nlu (4)
- asm.js (5)
- sip (3)
- xl2tp (5)
- conda (1)
- emscripten (6)
- ffmpeg (10)
- srt (1)
- wasm (5)
- bert (3)
- kaldi (4)
- 知识图谱 (1)
最新评论
-
wahahachuang8:
我喜欢代码简洁易读,服务稳定的推送服务,前段时间研究了一下go ...
websocket的helloworld -
q114687576:
http://www.blue-zero.com/WebSoc ...
websocket的helloworld -
zhaoyanzimm:
感谢您的分享,给我提供了很大的帮助,在使用过程中发现了一个问题 ...
nginx的helloworld模块的helloworld -
haoningabc:
leebyte 写道太NB了,期待早日用上Killinux!么 ...
qemu+emacs+gdb调试内核 -
leebyte:
太NB了,期待早日用上Killinux!
qemu+emacs+gdb调试内核
转自
http://blog.csdn.net/yangyayuan/article/details/12069293
http://blog.csdn.net/yangyayuan/article/details/12069293
1. WebRTC学习 1.1 WebRTC现状 本人最早接触WebRTC是在2011年底,那时Google已经在Android源码中加入了webrtc源码,放在/external/webrtc/,但是Android并没有用到它,更没有被浏览器使用。当时试图在Android 2.3(Gingerbread)高通平台的手机上用H.264 硬件codec替换掉WebRTC缺省使用的VP8软codec,费了不少劲勉强换掉后效果很差只得放弃。 最近得知Google最新版的Chrome for Android已经支持WebRTC,应老板的要求搭一个手机浏览器上视频通信的demo,为此在网上搜集各种资料,发现经过一年多的发展,国内外研究和使用WebRTC的人明显多起来,可用的demo也很多。在此做一个笔记,留作日后参考。 目前基于WebRTC的开发其实有两个方向,一个是基于浏览器的WebRTC应用开发,编程语言主要是JavaScript、HTML等,这也是WebRTC作为HTML5标准的组成部分原本的目的;另一个是C层面的移植和开发,作为一款非常强大的开源软件,很多领域的软件项目都可以利用到WebRTC的音视频通信和处理能力,这些场合的应用程序可能是C语言写的,也不一定与浏览器有关。本文是属于前一种方向。 1.2 WebRTC基本概念学习 WebRTC的官方资料可以从其官网http://www.webrtc.org/和W 3C网站http://www.w3.org/TR/webrtc/上看到。 学习WebRTC基础知识比较好的网站是《Getting Started with WebRTC》,网址是http://www.html5rocks.com/en/tutorials/webrtc/basics/,这个也是官网上推荐的。 对浏览器来说,WebRTC其实就是提供了3个API: MediaStream (即getUserMedia),用于获取媒体数据,例如来自摄像头和麦克风的视频流和音频流; RTCPeerConnection,用于peer跟peer之间呼叫和建立连接以便传输音视频数据流; RTCDataChannel,用于peer跟peer之间传输音视频之外的一般数据。 需要注意的是这几个API的名称在不同浏览器及同一浏览器的不同版本之间略有差异,比如PeerConnection在FireFox上叫做mozRTCPeerConnection,而在当前版本的Chrome上叫做webkitRTCPeerConnection,将来WebRTC标准化完成后会把这些前缀去掉使用统一的名称。 目前网上找到的WebRTC demo都只用到了getUserMedia和RTCPeerConnection这两个API,另一个API即RTCDataChannel似乎目前还不太成熟。 WebRTC是实现peer to peer的实时通信(可以两个或多个peer之间),在能够通信前peer跟peer之间必须建立连接,这是RTCPeerConnection的任务,为此需要借助一个信令服务器(signaling server)来进行,信令包括3种类型的信息: Session control messages: 初始化和关闭通信,及报告错误; Network configuration: 双方的IP地址和端口号(局域网内部IP地址需转换为外部的IP地址); Media capabilities: 双方的浏览器支持使用何种codecs以及多高的视频分辨率。 WebRTC并未规定使用何种信令机制和消息协议,象SIP、XMPP、XHR、WebSocket这些技术都可以用作WebRTC的信令通信。 除了信令服务器,peer跟peer建立连接还需要借助另一种服务器(称为STUN server)实现NAT/Firewall穿越,因为很多peer是处于私有局域网中,使用私有IP地址,必须转换为公有IP地址才能相互之间传输数据。这其中涉及到一些专业术语包括STUN、TURN、ICE等,具体的本人还有待学习。网上找到的WebRTC demo好象都用的是Google提供的STUN server。 peer跟peer之间一旦建立连接就可以直接传输音视频数据流,并不需要借助第三方服务器中转。 2. WebRTC封装库 WebRTC的目的是为了简化基于浏览器的实时数据通信的开发工作量,但实际应用编程还是有点复杂,尤其调用RTCPeerConnection必须对如何建立连接、交换信令的流程和细节有较深入的理解。因此有高人为我们开发了WebRTC封装库,将WebRTC的调用细节封装起来,包装成更简单的API,使开发应用程序更简单。封装库的另一个目的是为了屏蔽不同浏览器之间的差异,例如上面说的API名称的差异。当然,这些库都是开源的,可以根据自己的需要重新修改。 目前网上找到的有两种WebRTC封装库,一个是webrtc.io,网址是https://github.com/webRTC/webRTC.io,上面有详细说明和使用方法,有很多demo使用它;另一个是SimpleWebRTC,网址是https://github.com/HenrikJoreteg/SimpleWebRTC,貌似比webrtc.io用起来更简单。 3. WebRTC demo试用 网上可以找到一堆WebRTC demo,在code.google.com上也能找到不少WebRTC应用项目的源码。有些demo是直接调用WebRTC API开发的,但大多数是调用上述两种WebRTC封装库开发的。由于WebRTC API的名称在不同浏览器及同一浏览器的不同版本之间存在差异,所以不是所有demo都能运行在所有浏览器上。 为了找到一个可在公司局域网环境中跑在手机上的WebRTC demo,本人试用了不少demo,下面选几个有代表性的介绍,其中有两个经修改后已在本人公司的局域网环境中运行成功。 先说一下本人的测试环境:手机上的浏览器是Chrome for Android 26.0.1410.49,运行在Android 4.1.2上,这个Chrome版本本身是beta版,支持WebRTC但缺省是关闭WebRTC功能的,需要在chrome://flags中使能WebRTC并重启Chrome,或者在启动Chrome时增加命令行选项--enable-webrtc。本人在PC上运行WebRTC的浏览器是Chrome 26.0.1410.43,操作系统是Windows 7。 3.1 http://www.webrtc.org/demo(https://apprtc.appspot.com/) 这是官方的demo,功能很全,可惜不知为何https://apprtc.appspot.com/这个网址已经连不上了,不过其源码还是可以下载到的,在https://code.google.com/p/webrtc-samples/。此demo没有用任何封装库。 这个demo所使用的信令机制使用了XHR和Google App Engine Channel API ,具体我不懂。 在我的公司局域网环境里无法运行该demo。 3.2 爱立信实验室开发的WebRTC demo 据说是第一个基于浏览器的WebRTC视频通信demo,爱立信为此还开发了一个浏览器用于支持WebRTC,好象也是基于WebKit的,叫做Bowser browser(当时市场上可能还没有支持WebRTC的浏览器),该项目网址是https://labs.ericsson.com/apps/bowser。这个Bowser browser好象只支持Ubuntu 11.04 and 11.10(见https://labs.ericsson.com/apis/web-real-time-communication/downloads)。 该demo的网址是http://webrtc.labs.ericsson.net:8082。 在我的公司局域网环境里无法运行该demo。 3.3 人脸检测识别 利用WebRTC的getUserMedia从摄像头获取图像进行人脸识别的demo,例如这两个: http://neave.com/webcam/html5/face/ http://www.raymondcamden.com/demos/2012/mar/29/test1.html 这两个demo在PC和手机上的Chrome上都可运行。 3.4 http://www.simpl.info 这个demo演示HTML, CSS and JavaScript的各种feature和使用方法,包括WebRTC的3个API:getUserMedia、RTCPeerConnection、RTCDataChannel的演示,但遗憾的是RTCPeerConnection的演示只是本地camera的画面传回给本地,并没有实现真正的设备之间音视频通信。 该项目的源码在https://github.com/samdutton/simpl。 3.5 Framegrabber 这是一个基于WebRTC实现屏幕共享(screensharing)的Chrome扩展,源码在https://github.com/samdutton/rtcshare,有关介绍可参考这篇文章:http://blog.sina.com.cn/s/blog_51396f890102es7k.html。 本人没有试用过。 3.6 http://webrtc.dennis.is 这个demo是基于库webrtc.io实现的,是webrtc.io官方的demo,使用WebSocket作为信令手段。 在我的公司局域网环境里无法运行该demo;在家里无线路由器环境下可成功运行,但只能单向传输视频。 3.7 http://v.kainy.cn 国内牛人做的,相当于是汉化版的http://webrtc.dennis.is,自然也是基于webrtc.io实现的,但使用的webrtc.io版本较老,不支持新版本Chrome所使用的API名称webkitRTCPeerConnection,所以无法在新版本Chrome上运行。具体介绍在http://blog.kainy.cn/2013/01/webrtc实现的视频聊天室应用/。 3.8 http://conversat.io 这个demo是基于库SimpleWebRTC实现的,是SimpleWebRTC官方的demo,使用WebSocket作为信令手段。 在我的公司局域网环境里无法运行该demo;在家里无线路由器环境下可成功运行,且可双向传视频,支持多个peer同时视频通信。 经修改后在本人公司局域网成功运行,试过两个手机和一个笔记本电脑同时视频通信OK。修改和运行步骤: 1. 从http://www.nodejs.org/download/下载nodejs最新版并安装,我是在Windows7 64位上安装的; 2. 在命令行下依次运行如下命令(安装运行signaling server所需的模块): npm install express npm install yetify npm install getconfig npm install node-uuid npm install socket.io 3. 从https://github.com/andyet/signalmaster下载信令服务器源码,该信令服务器是SimpleWebRTC缺省使用的,解开该源码后运行node server.js,该服务器监听8888端口,通过WebSocket与浏览器通信。 4. 在同一台PC上运行apache server,将从http://conversat.io网站扒下来的文件放到该server上(可在Chrome浏览器中打开http://conversat.io然后鼠标右键单击在菜单中选“另存为”、“网页,全部”即可),修改其中的 index.html 和 simplewebrtc.js,将其中 url 改为'http://10.100.156.83:8888'(其中IP地址是我的PC在公司局域网中的IP地址)。 5. 在同一局域网中的其他设备上打开Chrome浏览器,地址栏输入http://10.100.156.83,输入相同的room名称(随便起)即可开始多方视频通信,也可修改上述index.html中的“var room”一行,设定为固定的room名称,就不需要每次在每个设备上手工输入room名称了。 3.9 国内牛人开发的视频聊天室应用 这个demo是国内牛人赵书剑开发的视频聊天室,基于webrtc.io实现。 该项目源码和文档下载地址是http://ishare.iask.sina.com.cn/f/35083616.html,源码在https://github.com/zsj2145676。 经修改后在本人公司局域网成功运行,试过两个手机和一个笔记本电脑同时视频通信OK。修改和运行步骤: 1. 从http://ishare.iask.sina.com.cn/f/35083616.html下载webrtc.chatdemo.zip,解压缩,修改其中public\javascripts\client.js中的rtc.connect一行,将实际的服务器地址写进去,例如改为:rtc.connect("ws://10.100.156.83:8001", room); 2. 同上文3.8节步骤1、2安装nodejs 3. 运行node app.js,注意该demo本身已包含http server,不需要其他的比如apache server 4. 在同一局域网中的其他设备上打开Chrome浏览器,地址栏输入http://10.100.156.83:8000,输入相同的room名称(随便起)即可开始多方视频通信。 转自:http://blog.sina.com.cn/s/blog_69a04cf401016gz4.html 本人使用3.8在本地调试运行成功。
评论
1 楼
ykbj117
2015-10-28
位大神有木有WebRTC的视频资料网站么?文字的有时候不太看得懂,我前两天逛论坛发现了一个公开课,有兴趣的可以去看看:http://www.lookybang.cc/forum.php?mod=viewthread&tid=409&extra=page%3D1。是刘绍华教授主讲的,我已经看过了,质量很不错,而且还有后续视频会更新。希望以后多有这种视频类的课程网站
发表评论
-
xl2tp 备份
2019-09-24 16:25 6892019年9月24日更新: 注意,需要开启firewall ... -
sdl笔记
2019-01-31 17:19 732sdl教程教程 https://github.com/Twin ... -
tinyemu
2019-01-24 17:59 1432参考https://bellard.org/jslinux/t ... -
aws搭建xl2tp给iphone使用
2018-12-26 21:37 18902019年12月26日 可以参考原来的配置 https:// ... -
consul的基本使用
2017-06-27 11:13 1399### 安装 [centos7上consul的安装](ht ... -
lvs的helloworld
2017-06-13 20:36 596###################lvs######### ... -
系统调用的helloworld
2017-05-04 16:14 632《2.6内核标准教程》 p293 #include < ... -
bitcoin和cgminer的安装
2017-04-05 22:45 1958参考 http://blog.csdn.net/rion_ch ... -
ceph安装和常用命令
2017-03-21 21:55 953/etc/hosts ssh-keygen ssh-copy- ... -
mobile terminal 笔记
2016-12-02 15:35 624找出旧的iphone4 越狱之后可以变个小操作系统 mobi ... -
socket基础和select(python)
2016-06-14 17:21 1799上接 c语言的socket基础ht ... -
socket基础(c语言)
2016-06-14 16:45 994不使用select 普通的基础socket连接,对多个客户端的 ... -
ffmpeg+nginx 的直播(2,直播摄像头和麦克风)
2016-05-28 20:21 4357假设我的服务器是centos7 192.168.139.117 ... -
ffmpeg+nginx 的直播(1,直播播放的视频文件)
2016-05-26 17:11 659164位操作系统centos7 ############ 1.一 ... -
socat和netcat(nc)
2016-04-29 22:36 1742转 原文链接: http://www.wenquan.name ... -
neutron基础九(qemu nat网络)
2016-02-06 17:21 1621接上基础八,kvm透传nested忽略 1.在主机ce ... -
neutron基础八(qemu 桥接网络)
2016-02-06 13:13 1542qemu的桥接和nat的qemu启动命令是一样的,但是后续的脚 ... -
neutron基础七(qemu tap)
2016-02-02 17:02 1030使用qemu 建立个虚拟机 然后用tap设备, 根据基础六,t ... -
neutron基础六(bridge fdb)
2016-01-28 18:30 2263转发表 在三台机器上建立三个namespace 192.16 ... -
南北流量
2016-01-23 23:26 1822一、三层网络架构: 接入层:负责服务器的接入和隔离 汇聚层:汇 ...
相关推荐
在WebRTCDemo中,每台设备需要收集本地网络接口的信息(如IPv4、IPv6地址和端口),并将其作为ICE候选者,这些信息通过信令交换传递给对端,以便找到能够成功通信的路径。 3. **STUN(Session Traversal Utilities ...
### WebRTC学习笔记_Demo收集 #### 一、WebRTC现状与历史背景 WebRTC(Web Real-Time Communication)是一项开放的、免费的技术框架,旨在使Web浏览器能够在无需插件的情况下进行实时音视频通信。该技术最初由...
项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松copy复刻,拿到资料包后可轻松复现出一样的项目,本人...收取的费用仅用于整理和收集资料耗费时间的酬劳 3. 积分资源不提供使用问题指导/解答
项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松copy复刻,拿到资料包后可轻松复现出一样的项目,本人...收取的费用仅用于整理和收集资料耗费时间的酬劳 3. 积分资源不提供使用问题指导/解答
在JavaScript中,这可以通过WebRTC API来实现,它允许访问用户的摄像头流。 9. **性能优化**:由于浏览器的JavaScript执行环境有限,处理大型图像和复杂的深度学习模型时可能面临性能挑战。可以通过优化代码、利用...
这个案例Demo是针对C#开发者设计的,它还利用了CefSharp库,一个将Chrome浏览器引擎集成到.NET应用中的开源项目。 首先,让我们了解WPF。WPF是.NET Framework的一部分,它为创建具有丰富视觉效果和交互性的桌面应用...
大数据分析通常涉及数据的收集、存储、处理和可视化。在这些demo中,可能使用了各种数据处理框架,如Apache Hadoop、Spark等,将海量数据进行预处理和分析,然后通过前端展示结果。前端开发者可能需要了解如何与后端...
监控组件是监控系统性能和健康状况的关键,例如Prometheus是一款流行的开源监控和警报工具,能够收集和存储时间序列数据,提供灵活的查询语句,以及丰富的可视化工具,帮助开发者及时发现并解决问题。 最后,分布式...
2. P2P技术:利用WebRTC或Flash P2P技术,实现用户间的点对点传输,减轻服务器压力,提高视频加载速度。特别是在大型活动直播时,P2P技术可以显著提升用户体验。 3. 自适应流媒体:根据用户的网络环境,动态调整...