2017-10-17 302 views
2

我们开发的IP摄像机产品通过RTSP/UDP传输H.264/MPEG4/MJPEG视频。它有一个Web界面,目前我们使用VLC Firefox插件来浏览浏览器中的实时RTSP流,但是Firefox不再支持NPAPI插件,因此目前已经是死路一条。当前在Web浏览器中传输实况视频的最佳实践?

相机本身是一个相对低功率ARM的SoC(认为树莓派级别),所以我们没有广阔的备用资源,做这样的事情转码流在董事会上的动态。

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

在一个理想世界的解决办法是开源的跨浏览器和发生的HTML5标签内,但如果它工作在一个或多个最流行的浏览器,我们会接受它。

我一直在阅读各种有关HTML5视频标签,WebRTC,HLS等勇敢新世界的各种各样的东西,还没有看到任何看起来像一个明智的和完整的解决方案,不涉及一些额外的转换/代码转换/重新流式处理,通常是由一些半支持的框架或中间的额外服务器,这不是一个可行的解决方案。

我还没有找到一个适当的描述,可以或不需要将我们的流“转换”为任何html5视频喜欢的内容,无论它是相同的基本视频流中的稍微不同的包装还是如果有很多开销,一切都不一样。同样,目前还不清楚这种转换是可以通过板载或甚至是使用JS的浏览器来实现的。

标题的原因是,如果我们必须改变这一切的方式,我们可能会尽可能地采取一切被认为是“最佳实践”和合理的面向未来的做法,而不是一些权宜之计软糖,可能无法超越下一轮浏览器更新/下一个W3C新闻稿...

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

也许“至少最坏的做法”会更合适术语...

+0

不幸的是,如果您不想添加转码,并且希望定位浏览器,那么您将需要重新考虑您的来源。 WebRTC或MPEG Dash(通过https)可能会是最好的长期平台独立解决方案,但为了支持您将需要更新相机以提供......至多VLC是一个适合当时的kludge ,但不再支持 – Offbeatmammal

回答

2

有很多,你可以使用不需要转码的方法。

的WebRTC

如果您使用RTSP,你多的通过的WebRTC发送您的视频流的方式出现。

的WebRTC使用SDP宣告流,RTP为这些流的运输。还有一些您需要设置WebRTC调用的其他层,但这些层都不需要特别昂贵的计算。大多数(所有?)WebRTC客户端都将支持H.264解码,其中很多都具有浏览器中的硬件加速功能。

上手的WebRTC最简单的方法是先实现一个浏览器到浏览器客户端。然后,您可以更深层次地进行自己的实现。

的WebRTC是我向你推荐的路线。 NAT穿越(在大多数情况下)和P2P连接都是内置的,因此您的客户不必记住IP地址。只需提供信号服务,您的客户就可以从任何地方直接连接到家中的相机。提供TURN服务器,即使两端都被防火墙也能够连接。如果你不希望提供这样的服务,它们是轻量级的,并且可以像现在一样在模式中直接运行。

零碎的MP4通过HTTP进行渐进与<video>标签

这种方法比的WebRTC简单得多,但比你现在正在做的事情完全不同。你可以把你的H.264流,并直接包装在一个MP4无需转码。然后,它可以在页面上的<video>标签中播放。你必须实现在代码中适当的库,但这里有一个FFmpeg的例子会管输出到标准输出,你给客户:

ffmpeg \ 
    -i YOUR_CAMERA_HERE \ 
    -vcodec copy \ 
    -acodec copy \ 
    -f mp4 \ 
    -movflags frag_keyframe+empty_moov \ 
    - 

其他...

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

HLS大致相同。您的数据流与HLS兼容,但HLS由于缺乏编解码器的灵活性而快速退出。 DASH和HLS基本上是相同的机制......将一堆媒体片段写入CDN并创建播放列表或清单,指明它们的位置。

+0

谢谢,您至少已澄清了各种TLA的状态。这仅仅是我还是WebRTC主页完全无法真正解释任何有用的东西,或者提供了“流式传输视频”的基本实例? –

+2

@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 – Brad

+0

再次感谢!这可能不是拯救我的理智,但至少你会延长它的死亡时间。 –