目前在Web浏览器中流式传输实时视频的最佳做法?

Joh*_*n U 10 browser video html5 video-streaming html5-video

我们开发了一种IP摄像机产品,可通过RTSP/UDP传输H.264/MPEG4/MJPEG视频.它有一个Web界面,目前我们使用VLC Firefox插件允许在浏览器中查看实时RTSP流,但Firefox正在放弃对NPAPI插件的支持,因此目前是死路一条.

相机本身是一个相对低功耗的ARM SoC(想想Raspberry Pi级别),因此我们没有大量的备用资源来执行诸如在板上即时转码流的操作.

主要目的是从Web界面检查视频流是否正常工作,因此在某些其他格式/传输/流媒体引擎中流式传输新流(或对其进行转码)比以某种方式直接播放原始RTSP流更不可取. .在常规使用中,视频通过RTSP流式传输到VMS服务器,因此无法进行更改.

在理想的世界中,解决方案将是开源跨浏览器并发生在HTML5标签内,但如果它在一个或多个最流行的浏览器中工作,我们将采用它.

我一直在网上和网络上阅读关于HTML5视频标签,WebRTC,HLS等勇敢新世界的各种内容,并且还没有看到任何看起来像一个不合理且完整的解决方案的东西一些额外的转换/转码/重新流,通常由一些半支持的框架或中间的额外服务器,这是不可行的解决方案.

我还没有找到一个正确的描述,可能需要或不需要将我们的流"转换"为什么-html5-video-like,无论它只是围绕同一基本视频流的稍微不同的包装器,或者是否有很多开销和一切都不同.同样,不清楚是否可以使用JS在板上或甚至在浏览器中实现转换.

标题的原因是,如果我们必须改变一切运作的方式,我们也可以尽可能地做任何被认为是"最佳实践"和合理的未来证据,而不是一些可能没有的权宜之计.超越下一轮浏览器更新/下一个W3C新闻稿......

我觉得有点令人失望(但也许并不奇怪),2017年似乎没有明智的方法来实现这一目标.

也许"最差的做法"可能是更合适的术语......

Bra*_*rad 10

您可以使用许多不需要转码的方法.

的WebRTC

如果您正在使用RTSP,那么您通过WebRTC发送流的方式就很多了.

WebRTC使用SDP来声明流,使用RTP来传输这些流.设置WebRTC调用需要一些其他层,但这些层都不需要特别昂贵的计算.大多数(所有?)WebRTC客户端都支持H.264解码,其中很多都是在浏览器中进行硬件加速.

开始使用WebRTC的最简单方法是首先实现浏览器到浏览器的客户端.然后,您可以使用自己的实现更深层次.

WebRTC是我向您推荐的路线.NAT遍历(在大多数情况下)和P2P连接是内置的,因此您的客户将不必记住IP地址.只需提供信号服务,您的客户就可以从任何地方直接连接到家中的摄像头.提供TURN服务器,即使两端都是防火墙,它们也能够连接.如果您不希望提供此类服务,它们很轻巧,可以像您今天一样直接在相机上运行.

通过HTTP分段的MP4与<video>标签一起渐进式

这种方法比WebRTC简单得多,但与你现在所做的完全不同.您可以使用H.264流,并将其直接包装在MP4中而无需转码.然后,它可以在<video>页面上的标签中播放.您必须在代码中实现适当的库,但这是一个输出到STDOUT的FFmpeg示例,您将管道输出到客户端:

ffmpeg \
  -i YOUR_CAMERA_HERE \
  -vcodec copy \
  -acodec copy \
  -f mp4 \
  -movflags frag_keyframe+empty_moov \
  -
Run Code Online (Sandbox Code Playgroud)

其他...

在您的情况下,DASH没有额外的好处.DASH旨在利用基于文件的CDN进行流式传输.您可以控制服务器,因此以类似文件的方式写出文件或处理HTTP请求是没有意义的.虽然你可以在没有转码的情况下使用DASH和H.264流,但我认为这是浪费你的时间.

HLS大致相同.您的流与HLS兼容,但由于编解码器缺乏灵活性,HLS正在迅速失宠.DASH和HLS本质上是相同的机制...将一堆媒体段写入CDN并创建指示它们所在位置的播放列表或清单.

  • @JohnU WebRTC是疯狂的复杂,​​文档,有点少,通常是可怕的.从这里开始:https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API#Guides https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Protocols (6认同)
  • 谢谢,您至少已经弄清了各种TLA的状态。是我还是WebRTC主页完全无法真正解释任何有用的信息或提供“流式传输某些视频”的基本实际示例? (2认同)