本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在【编风网

支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:blackerteam 或 webrtcorgcn)。

从技术上来讲,使用网络摄像头进行在线广播并不需要WebRTC。摄像头本身就是一台服务器,它能够连接到路由器并在线传输视频内容。那么,为什么我们还需要WebRTC呢?

这至少有两方面原因:

1.随着观看网络广播的观众越来越多,网络带宽会逐渐不足。如果观众人数继续增长,网络摄像头也会成为瓶颈。

2.如上文所提,网络摄像头本身就是服务器。但是它使用什么协议传输视频内容到浏览器或移动设备呢?最有可能的情况是,网络摄像头使用HTTP协议流式传输视频帧和JPEG图像。然而,HTTP流未必适合实时视频流。在交互和实时性不重要的按需视频应用场景下,HTTP协议的确表现很好。如果你正在观看一部电影,那么延迟5~10秒并不影响观影体验,除非你正在和其他人同时观看这部电影。比如Alice和Bob同时观看一部电影,Alice在Bob看到关键剧情之前就和他聊天说:“天哪,是杰克谋杀了她!”这就是剧透了。

另外一个选择是使用RTSP/RTP传输协议加上H.264视频编解码器。但是这种情况下浏览器需要事先安装视频播放器插件,比如VLC或者QuickTime。这些插件能够像视频播放器那样接收并播放视频。但是我们需要真正的基于浏览器的视频流,而不借助于任何插件。

首先,让我们认识要用到的网络摄像头,了解它发送给浏览器的确切内容。作为测试主体,我们使用D-Link DCS 7010L网络摄像头:

你可以在后续章节阅读更多关于该摄像头的安装和配置细节,在此我们仅仅核查它如何操作视频流。当我们登陆摄像头的Web管理界面时,我们可以看到如下图片:

图片在所有浏览器中都能打开,显示出相同的帧率。假如所有摄像头和电脑连接到同一台路由器,那么视频播放结果应当平滑流畅,但事实上并非如此。HTTP协议似乎是原因之所在,让我们运行Wireshark来确认这一推测:

这里我们看到一个长1514字节的TCP序列:

最终一个HTTP 200 OK响应报文包含接收JPEG图片的长度:

然后我们打开Chrome浏览器菜单Chrome/Developer Tools/Network,查看实时HTTP GET请求和通过HTTP传输的图片:

我们并不期望这样的HTTP流,它并不流畅,并且抖动HTTP请求。摄像头能够并发处理多少个这样的HTTP请求?我们猜测有超过10个HTTP请求时,摄像头就会罢工,或者错误不断、延迟明显。

我们来查看一下摄像头Web管理界面的HTML源代码,可以发现如下代码:

我们需要RTSP/RTP协议来流畅播放视频。但是这在浏览器中有效吗?否!或许安装QuickTime插件后有效,但是我们想要纯粹的浏览器视频流。

另一个值得注意的选择是Flash Player,它可以接收通过Wowza转换RTSP/RTP/H.264得到的RTMP流。但是Flash Player也是一个浏览器插件,尽管它比VLC和QuickTime更流行。

在我们的场景下,我们测试同样的RTSP/RTP流,但是使用WebRTC兼容浏览器作为播放器播放视频,而不需要任何附加插件。我们设置一个转换服务器,该服务器从网络摄像头获取视频流,通过互联网广播到用WebRTC浏览器观看的用户,同时观看人数无限制。

下一篇:Android IOS WebRTC 音视频开发总结(八十五)-- 使用WebRTC广播网络摄像头视频(下)

译者:weizhenwei,具体详见:【编风网

Android IOS WebRTC 音视频开发总结(八十三)-- 使用WebRTC广播网络摄像头视频(上)的更多相关文章

  1. Android IOS WebRTC 音视频开发总结(八十五)-- 使用WebRTC广播网络摄像头视频(下)

    本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...

  2. Android IOS WebRTC 音视频开发总结(五四)-- WebRTC标准之父谈WebRTC

    本文主要是整理自国内首届WebRTC大会上对Daniel的一些专访,转载必须说明出处,欢迎关注微信公众号blacker,更多说明详见www.rtc.help 说明:以下内容主要整理自InfoQ的专访, ...

  3. Android IOS WebRTC 音视频开发总结(九)-- webrtc入门001

    下面这篇介绍webrtc的文章不错,我花了大半天翻译了一下. 翻译的时候不是逐字逐句的,而是按照自己的理解翻译的,同时为了便于理解,也加入一些自己组织的语言. 本文主要介绍webrtc的信令,stun ...

  4. Android WebRTC 音视频开发总结(五)-- webrtc开发原型

    这些天基于WebRTC做了个 手机视频监控 的程序,分享出来,供想了解这方面内容的朋友参考. 这个程序最早是广州一家智能穿戴设备公司请我们做的(他们不需要底层源码,也不需要ios版本),之后我们在这个 ...

  5. Android WebRTC 音视频开发总结(四)-- webrtc传输模块

    在介绍WebRTC通讯之前我们先来看一个P2P视频聊天包括的主要过程,转载请说明出处(博客园RTC.Blacker): 音视频数据采集->编码->发送->接收->解码-> ...

  6. Android/iOS内嵌Unity开发示例

    Unity 与 Android/iOS 交叉开发主要有两种方式,以 Android 为例,一是 Android 生成 jar 或者 aar 包,导入到 unity3d plugin/bin/ 目录下: ...

  7. 【译】如何使用Vue捕获网络摄像头视频

    几个月前,我一直关注着比特币的爆发并且在GDAX网站上注册账号.在注册验证的过程中,网站提示要通过计算机的网络摄像头提交我自己的一张照片作为照片ID.这是一个很酷的做法,让我思考一个问题:在网络浏览器 ...

  8. Android IOS WebRTC 音视频开发总结(十)-- webrtc入门002

    继续上一篇中未翻译完成的部分,主要包括下面三个部分: 1,扩展:WebRTC多方通话. 2,MCU Multipoint Control Unit. 2, 扩展:VOIP,电话,消息通讯. 注意:翻译 ...

  9. Android IOS WebRTC 音视频开发总结(七七)-- WebRTC的架构和协议栈

    本文主要介绍WebRTC的架构和协议栈(我们翻译和整理的,译者:litie),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:blackerteam ...

随机推荐

  1. Android学习十一:高德地图使用

    写这篇文章主要有三个目的: 1.使用高德地图api定位 2.获取天气数据 3.编程练手 文件结构 清单文件信息说明: <?xml version="1.0" encoding ...

  2. 安装恢复Windows10各种坑

    1.安装Windows10最好用微软原装ISO,其它的第三方坑比较多,要么不支持UEFI,要么不支持MBR,要么不支持GPT. 2.恢复系统可以使用WIM备份,或Window原生备份,或者Ghost备 ...

  3. LINQ 客户端生成自增列

    var testQuery = (from item in TestInfo.GroupBy(t=>t.TestName) select new { TestCode = item.Min(g= ...

  4. js判断浏览器,包括Edge浏览器

    /* * 描述:判断浏览器信息 * 编写:LittleQiang_w * 日期:2016.1.5 * 版本:V1.1 */ //判断当前浏览类型 function BrowserType() { va ...

  5. 支付宝接入文档中TRADE_SUCCESS和TRADE_FINISHED的本质区别

    之前一直不知道这2种状态到底有什么不同.支付宝中担保交易和即时到账交易对其的描述为: TRADE_SUCCESS  交易成功(或支付成功) TRADE_FINISHED    交易完成 一头雾水... ...

  6. vlc 在ie11 中的addEventListener事件不触发

    在vlc控件中触发一事件,在IE11之前的版本使用attachEvent注册一个回调函数后IE11可以捕获到事件,但IE11中提示attachEvent不支持.经查询发现IE11已经去掉了attach ...

  7. MyBatis原理分析之四:一次SQL查询的源码分析

    上回我们讲到Mybatis加载相关的配置文件进行初始化,这回我们讲一下一次SQL查询怎么进行的. 准备工作 Mybatis完成一次SQL查询需要使用的代码如下: ) { ); ) { throw ne ...

  8. Oauth2.0认证---授权码模式

    目录: 1.功能描述 2.客户端的授权模式 3.授权模式认证流程 4.代码实现 1.功能描述 OAuth在"客户端"与"服务提供商"之间,设置了一个授权层(au ...

  9. SQL分页查询

    假如tb_customer表中的数据量非常大,在显示时要分页显示而且每页只显示10条信息.为了效果我们取第三页的数据. 方法一:遍历两次表,取不同的数据. select top 10 * from t ...

  10. 清除系统日志及数据库(sql server)日志最佳实践

    在一个项目中遇到的问题:系统日志过大,后来用delete语句删除了(相当的慢),结果数据库日志又变成很大了(差不多10G),所以又得把数据库日志删除. 方法: --备份系统中的部份日志--SELECT ...