低延迟(< 2s)的实时视频流HTML5解决方案?

13 浏览
0 Comments

低延迟(< 2s)的实时视频流HTML5解决方案?

随着Chrome很快默认禁用Flash,我需要开始寻找替代的Flash/RTMP HTML5解决方案。

目前,使用Flash + RTMP,我可以实现少于1-2秒的实时视频流。我尝试了MPEG-DASH,它似乎是流媒体的新行业标准,但是最佳延迟只能达到5秒,这仍然不够。

为了背景,我想让用户通过视频流来控制他们所看到的物体,所以超过几秒的延迟会导致令人沮丧的体验。

是否还有其他技术可用,或者目前真的没有用于实时流媒体的低延迟HTML5解决方案?

0
0 Comments

低延迟(<2秒)实时视频流HTML5解决方案的出现原因是为了满足用户对实时性的需求。然而,并不是所有用户都需要低延迟的视频流。根据需求,只有控制机器人的用户需要低延迟视频,而其他用户可以选择更可靠的高质量视频。

解决方法是使用WebRTC技术来实现低延迟的视频流。WebRTC是专为视频会议而设计的,其编解码器被调整为低延迟而不是高质量。通过选择稳定的连接而不是高质量,可以实现可变的比特率。

设置方法如下:

1. 控制机器人的用户加载使用WebRTC组件连接到相机和控制服务器的页面。为了实现WebRTC连接,需要一些STUN服务器。为了解决NAT和防火墙限制,可能需要一个TURN服务器。

2. cam/control服务器也需要通过WebRTC连接。可以选择使用基于Node.js的WebRTC框架,使控制应用程序在某种程度上基于Web。通过使用Node.js,可以同时利用已经内置在WebKit中的WebRTC功能,并灵活地使用Node.js进行其他操作。

3. 控制机器人的用户和cam/control服务器将通过WebRTC(或如果需要的话,TURN服务器)建立点对点连接。然后,需要打开一个媒体通道和一个数据通道。数据通道可用于发送机器人命令,媒体通道当然用于发送低延迟视频流给控制机器人的用户。

4. 需要注意的是,返回的视频将经过优化以实现低延迟,而不是高质量。这种连接方式还可以确保对命令的快速响应。

对于仅查看视频流的用户,可以使用常规的视频分发方法。由于有10k-15k人观看视频流,因此使用现有的CDN和转码服务非常重要。对于这么多用户,您可能需要几种不同的编解码器和一系列比特率。使用DASH或HLS进行分发最容易处理,同时也无需使用Flash。

关于元数据(聊天、控制信号等),可以使用WebSocket库(如Socket.IO)进行处理。对于规模较大的实例,可以使用发布/订阅(pub/sub)模式(如Redis)在服务器之间进行消息传递。

为了将元数据与视频同步,可以使用响应头中的时间戳信息。服务器可以确定客户端相对于视频开始播放的偏移量,并将其通知给客户端。客户端可以利用DASH或HLS中的MCE和AJAX来获取数据,并使用段响应中的响应头来指示段的开始时间戳。客户端可以根据视频播放开始时的状态变化来同步。

在选择低延迟技术时,需要权衡一些因素。选择低延迟会损失视频质量,而质量取决于可用带宽。如果需要完美的质量,需要大量带宽。因此,优化质量而不是延迟对大多数用户来说更好。对于那些需要低延迟的用户,可以为他们优化低延迟,但视频质量会降低。

总之,使用WebRTC技术可以满足低延迟实时视频流的需求。根据具体情况,可以选择将视频流分发给不同的用户,并使用现有的CDN和转码服务来实现高质量的视频分发。同时,使用WebSocket库处理元数据,并利用响应头中的时间戳信息将元数据与视频同步。

0