
从刚开始做云视频监控系统的时候,我们就遇到了一个问题,没有解决方案,我们就放弃了Ivideon——这就是我们的珠穆朗玛峰,攀登需要耗费大量的精力,但现在我们终于有了将冰镐插入跨平台拼图的顶部。
通过互联网传输音频和视频的系统不应依赖于设备、Web 客户端及其支持的标准,并且在存在网络地址转换器和防火墙的情况下也能正常工作。 云视频监控用户希望访问该服务,即使他使用模拟摄像机,并且更喜欢在最现代的设备上观看实时视频广播。
用户想要以最小的延迟观看视频是非常重要的。 在浏览器中以低延迟显示视频的几乎唯一方法是使用 WebRTC(网络实时通信)。 WebRTC是一套在浏览器中点对点传输视频和音频的技术,最初是为了低延迟的视频流传输和播放而设计的。 为此,除其他外,还使用了 UDP 协议。
在我们告诉您新引擎为用户带来什么之前,我们将提醒您我们支持 HLS 技术的原因和原因,以及我们决定继续前进的原因。
HLS 引擎:优点和缺点

()
HLS(HTTP Live Streaming)技术由苹果公司开发,因此它首先在苹果设备上得到支持也就不足为奇了。如今,几乎所有机顶盒和许多运行该操作系统的设备也都支持HLS视频。 Android.
HLS 引擎使用众所周知的 H264 视频编解码器与 AAC 或 MP3 音频流相结合来传输视频数据。 整个音频和视频数据流被打包到 MPEG-TS 传输容器中。 对于通过 HTTP 协议进行传输,流中包含的信息被分为 m3u8 播放列表中描述的片段。 然后这些片段与播放列表一起通过 HTTP 进行传输。 自动分块意味着以秒为单位的延迟。 这是 MPEG-TS 容器的一个功能。
HLS 引擎还支持多比特率流、Live/VOD。
HLS的主要优点:
- 所有主要浏览器的内置支持;
- 易于实施(与 WebRTC 相比);
- 由于片段可以一次性上传到CDN,因此可以非常方便和高效地向大量观众组织各种广播。
尽管引擎很简单,但并非一切都像看起来那么顺利。 主要问题是第三方播放器开发人员已经放弃了苹果的建议,例如在支持的音频格式方面。 特别是,许多开发人员开始添加处理流行音频流的功能:mpeg2 视频、mpeg2 音频等。因此,他们必须为不同的播放器创建不同的播放列表格式。
但 HLS 引擎的最大问题之一是数据传输的高延迟。
“刹车”的由来
HLS高延迟的主要原因在于程序员创建引擎是为了获得最高质量的图像。 因此,所使用的帧间隔参数和播放缓冲区大小根本不适合视频直播。 因此,视频传输的延迟相当高,可达5-7秒。
一方面,对于那些从视频托管服务器观看电影的人来说,这并不算多。 但对于视频监控系统来说,传输视频片段的延迟可能非常重要。
如果您观察的办公室里,员工每小时从显示器上抬起头一次,那么 5 秒的延迟根本不重要。 但人们开始抱怨,例如,在转播足球比赛时,他们已经在聊天中写了 GOOOOL,但这还没有出现在视频上:)。 我们已经有许多用户案例,其中 Ivideon 实际上应该取代 Skype。
是否有可能克服 HLS 中的延迟? 这个问题的答案听起来就像一位经验丰富的灭鼠专家在给新手害虫防治专家讲座时的演讲:“老鼠无法被消灭,但它们的数量可以减少到合理的最低限度。” 与 HLS 中的延迟一样,不可能将其降低到零,但市场上有一些解决方案可以显着降低延迟。
精细切割
该引擎的另一个缺点是使用小文件进行数据传输。 这么看来,这有什么问题吗?
任何尝试过将大量小文件从一种介质复制到另一种介质的人可能都会注意到,这样一组文件的写入速度比相同大小的一个大文件低得多。 而且对硬盘的访问强度显着增加,这通常会对整个计算机的性能产生负面影响。 因此,以 10 秒的小块传输视频数据也会导致引擎延迟增加。
让我们简要总结一下 HLS 技术的所有优点和缺点。
HLS的优点:
- 能够与任何设备一起工作。 您可以在任何现代设备上观看视频,无论是智能手机、平板电脑、笔记本电脑还是台式电脑。 最主要的是网络浏览器是最新的并且与 HTML5 和媒体源扩展兼容。
- 出色的图像质量。 使用的自适应数据传输功能允许您根据互联网连接的带宽动态改变传输视频的质量,同时算法努力保持最高质量。
- 无需对用户设备进行复杂的配置。
缺点:
- 在某些设备上使用引擎的支持有限。
- 图像传输延迟高。
- 由于使用小文件,优化的开销和复杂性显着增加。 由于容器的性质,我们永远无法获得低于段大小的延迟。
HLS 的缺点超过了它对我们的优点,迫使我们寻找替代选择。
什么是 WebRTC

()
WebRTC 平台由 Google 于 2011 年开发,旨在以最小的延迟在浏览器和移动应用程序之间传输流媒体视频和音频数据。 为此,使用标准 UDP 协议和特殊的流量控制算法。 如今它是一个开源项目,由 Google 积极维护并正在开发中。
WebRTC 是一组用于点对点视频和音频传输的技术。 也就是说,例如,使用WebRTC的用户浏览器可以直接相互传输数据,而不需要使用远程服务器来存储和处理数据。 所有信息也由最终用户的浏览器和移动应用程序处理。
这项技术的便捷性和强大功能受到了所有主流浏览器开发者的青睐。目前,Mozilla Firefox、Opera、Google Chrome(以及所有基于 Chromium 内核的浏览器)和运行 WebRTC 协议的移动应用均已支持 WebRTC。 Android 以及 iOS。
尽管 WebRTC 具有无可置疑的优势,但它也有几个明显的缺点。
选择困难
WebRTC 技术由于是 P2P 技术,因此在网络交互方面要复杂得多。 它很难调试、测试,并且行为可能不可预测。 同时,我们需要克服NAT和防火墙,我们需要确保在UDP被阻止的网络中运行。
Google 的 WebRTC 实现非常难用。 甚至有一整家公司提供SDK组装服务。 另外,如果不重新编码整个视频,谷歌的实现很难与我们的系统集成。
然而,我们长期以来一直希望为用户提供使用成熟的“实时”视频的机会,并最大限度地减少屏幕上的图像与事件本身之间的延迟。 另外,我们希望让延迟严重的 PTZ 摄像机的使用变得更加舒适。
考虑到其他抗延迟实现仍然功能有限并且工作效果明显较差,我们决定使用 WebRTC。
我们做了什么

正确实现WebRTC平台并不是一件容易的事。 任何误算或不准确都可能导致视频传输的延迟与其他平台相比不仅不会减少,甚至还会增加。
为了使WebRTC正常工作,首先需要对网络视频的堆栈进行技术升级。 这就是我们所做的。
首先,我们通过Websocket实现了WebRTC信令协议服务器,并基于webrtc.org SDK在云端部署了WebRTC对等服务器。 其任务是将 H.264 + Opus/G.711 格式的视频流分发到客户端 WebRTC 对等点,无需视频转码。
我们选择 Websocket 作为信令协议,因为它已经在所有流行的 Web 浏览器中获得了高质量的支持。 因此,与 AJAX 相比,您不仅可以显着减少开发开销,还可以避免在重复的 TCP 和 TLS 握手上浪费时间和资源。
事实上,默认情况下,WebRTC 不提供正确配置、维护和终止源应用程序与客户端应用程序之间的实时视频通信所需的信令协议。
为了独立实现信令技术,我们需要开发自己的支持多种Web协议(Websocet、WebRTC)的信令服务器。 并且能够安全地实时管理会话和通知、视频管理等等。
我们克服了P2P的局限性,不是通过P2P来减少延迟,而是通过UDP和流量控制来减少延迟。 这也内置于 WebRTC 中,因为主要用例是通过浏览器进行 p2p 对话。
在移动客户端中,我们使用webrtc.org SDK实现了播放器,因为只有它正确实现了流量控制,具有所有已知的前向纠错(FEC)方案,并正确实现了为所有浏览器重新发送数据包的机制。 同样重要的是,Google 正在积极开发 webrtc.org SDK。
实施WebRTC的结果是什么?
为了查看来自摄像机的实时视频,我们在您的个人帐户中添加了基于 WebRTC 的新优化播放器。 它提供快速的视频加载速度,并完全消除随着观看时间增加而累积的延迟问题。
在 Ivideon 云服务中引入 WebRTC 支持后,我们可以完全自信地说,我们的客户现在可以观看成熟的实时视频。 现在播放视频序列的延迟不超过一秒! 相比之下,之前的 HLS 引擎提供的视频传输延迟为 5-7 秒。 视频演示速度的差异非常显着,用户在开始使用我们的视频服务后会立即注意到这一点。
正如我们预期的那样,新播放器的实施提高了 PTZ 和与摄像机的语音通信的响应能力。

我们只想提请注意一个微妙的点。 新的WebRTC播放器目前正在测试模式下工作。 这就是为什么我们默认不为所有客户启用它。 但您可以通过启用相机设置中的相应项目来自行激活它(要执行此操作,请转到 ).
Ivideon服务中WebRTC实现的特点

WebRTC 目前仍是一项实验性技术。 尚未在所有浏览器和用户设备以及所有相机中正确实现其支持。
这正是我们尚未将 WebRTC 播放器设为所有用户默认播放器的原因。
目前,我们建议仅在 Google Chrome 浏览器中使用 WebRTC。 最新版本的 Firefox 和 Safari 也支持该技术,但不幸的是,它仍然不稳定。
我们尚未为移动设备上的浏览器实现 WebRTC 支持。 目前,如果您从移动设备登录并激活WebRTC,此模式将不起作用。 但是,WebRTC 可在我们的移动应用程序中使用 и .
在结束有关我们服务中的 WebRTC 实现的功能的故事时,让我们注意两个更微妙的点。
首先,该技术专注于实时直播视频。 因此,如果您的频道没有足够的带宽来传输视频,您会注意到丢帧(使用 HLS 您会注意到视频褪色和延迟增加,但不会出现丢帧),但视频仍会实时播放时间。
其次,由于该技术专为实时实时视频而设计,因此我们不会使用它来处理存档视频数据。
服务的其他变更
此时,Flash不再参与自动引擎选择机制。 您仍然可以使用此类播放器,但要执行此操作,您需要在帐户或相机设置中手动选择它。 这并不是对时尚的致敬,只是根据我们服务的统计,几乎没有用户使用 Flash。 而在尝试确定用户的浏览器是否支持时,我们损失了大约 2 秒的宝贵时间。
以下是我们的云视频监控系统和个人帐户中等待您的变化的简要概述。 留在我们身边并关注新闻!
来源: habr.com
