是的,这个话题经常在SO上出现。
我已经阅读了很多关于这个话题的内容,并尝试了一些解决方案,但是我有一些限制:
- 独立于浏览器(大多数浏览器应该都可以使用)
- 独立于平台(应支持主要平台)
- 开箱即用(无需插件!)
- 低延迟(最好在1秒以下)
- 带宽受限(MJPEG不是选项)
- 不进行转码!
因此,向前看:对于约束1和2,H264流似乎是完美的选择。
此外,我的源会生成一个实时的H264(确切地说是MPEG-4 AVC,第10部分)到一个RTSP容器中。
但是,浏览器仍然不支持RTSP。
我已经检查过的内容:
- 如何将流媒体rtsp嵌入html5页面中
- 如何在网页上显示RTSP视频流?
- 将RTSP流传输到HTML网站上
- 在网站上显示RTSP
- 将RTSP流传输到HTML网站上
- 如何通过Web应用程序获取RTSP流
- JavaScript/HTML5的RTSP解决方案
- 在HTML5中通过RTSP或RTP进行流媒体传输
以上所有帖子都与此问题相关,其中有很多有价值的信息。
另外,我读了一篇很好的文章,来自2014年(!),详细而具有前瞻性。
所以,截至今天,最好的解决方案是:- 解析RTSP并提取h264流
- 重组流(将其转换为分段MP4)
- WebSocket(稍后再看)
- 如果浏览器具有MSE(另一种选择是使用broadway.js,但会占用CPU),则可以轻松播放fMP4
有些解决方案是在服务器端执行步骤1和2,然后将fMP4推送到WebSocket中。客户端从WebSocket中消费数据,并将其传递给MSE组件进行显示。
2014年的文章显示,步骤2也可以在客户端上执行。在这种情况下,只有步骤1在服务器上执行,然后将h264推送到WebSocket中,在客户端上进行重组和显示。
Streamedian 看起来是一个不错的解决方案,但他们没有发布他们的服务器端代码,而且他们的网站一天返回502错误。
我不想使用 GStreamer 或 ffmpeg,它们都太重了。
但是有一些不错的工具可以帮助:
回到我的列表,步骤2可以使用MP4Box完成 - 至少我相信/希望如此。
步骤3和步骤4很简单,有很多教程可以参考。
然而,我对步骤1有些困惑。它应该在服务器端完成,最好使用可以轻松与Websockets交互的语言(如Java)。
这就是我的问题所在:我需要在Java中从RTSP中提取h264流,如何简单地完成但不调用外部程序?