【发布时间】:2020-01-09 09:00:15
【问题描述】:
是的,这个话题不时出现在 SO 上。
我已经阅读了很多关于这个主题的内容,也尝试了一些解决方案,但我有一些限制:
- 独立于浏览器(大多数浏览器都可以工作)
- 平台无关(应支持主流平台)
- 开箱即用(无插件!)
- 低延迟(最好在 1 秒以下)
- 带宽有限(MJPEG 不是一个选项)
- 没有转码!
所以向前看:H264 流似乎非常适合约束 1 和 2。
另外,我的源将实时 H264(确切地说:MPEG-4 AVC,第 10 部分)生成到 RTSP 容器中。
但是浏览器仍然不支持RTSP。
我检查过的内容:
- How to embed streaming rtsp media into an html5 page
- How can I display an RTSP video stream in a web page?
- stream RTSP to HTML website
- Displaying RTSP on website
- stream RTSP to HTML website
- How to get RTSP stream over web application
- RTSP solution for JavaScript/HTML5
- Streaming via RTSP or RTP in HTML5
上面所有的帖子都与这个问题有关,并且那里有很多有价值的信息。
我还阅读了 2014 年的 good article(!),内容详细且颇具前瞻性。
因此,截至今天,最好的解决方案是:
- 解析 RTSP 并提取 h264 流
- 重组流(将其转换为分段 MP4)
- websocket(见后文)
- 如果浏览器有MSE,fMP4 可以很容易地通过 HTML5 视频播放(替代方法是使用很酷但 CPU 密集型的 broadway.js)
有些解决方案是在服务器端执行第 1 步和第 2 步,然后将 fMP4 推送到 websocket。客户端消费来自websocket的数据,并将其传递给MSE组件进行展示。
2014 年的文章表明 step2 也可以发生在客户端。在这种情况下,只有第 1 步发生在服务器上,然后 h264 被推入 websocket,在客户端当然有重组和显示。
Streamedian 乍一看似乎是一个很好的解决方案,但他们没有发布他们的服务器端代码,而且他们的网站一天返回 502 错误。
但是有一些不错的项目可以提供帮助:
回到我的清单,step2 可以用 MP4Box 完成 - 至少我相信/希望。
Step3 和 step4 很简单,上面有大量的操作指南。
但是我对 step1 有点困惑。它应该在服务器端完成,最好使用可以轻松与 websocket 交互的语言(如 java)。
这就是我的问题的重点:我需要从 java 中的 RTSP 中提取 h264 流,我怎样才能简单但不调用外部程序?
【问题讨论】:
-
没有一个浏览器支持 RTSP 流,他们也没有任何计划这样做。有多种网关解决方案可以从 RTSP/RTP 转换为其他协议 MPEG-DASH/HLS/WEBRTC。
-
您知道任何完全开源(没有FFMPEG等)的网关解决方案吗?
-
大部分开源网关解决方案使用 ffmpeg - 比如 MP4Box ,Shaka Player。
-
好的,谢谢。 ffmpeg从rtsp中提取h264帧时,居然不转码只解析流?
-
是的,它只是流式传输。 rtsp流分片成mp4段时不进行转码