【发布时间】:2020-04-16 00:03:53
【问题描述】:
我并不是指哪种传输技术(例如 WebRTC、Web Socket、标准 HTTP 等)最适合网络摄像头等的实时直播流媒体,而是一般策略(in编程本身的条款)。
在我的测试中,我发现最好的方法是:
- 至少以 30 毫秒/帧的速度逐帧流式传输(直接流式传输 JPEG 图像),但是这非常占用带宽。 (假设每帧平均为 50kb,对于 1 秒的视频,即 500kb,即每分钟大约 30MB,因此在一小时内将有 1.8GB 的大小),解决方案可能不是使用 JPEG,而是使用类似 AVIF image compression 的东西当我测试时,尺寸和质量非常理想。它可能会降低逐帧实时流传输的带宽问题。 这种方法的总结是它确实实时、快速且流畅,但会占用带宽。
- 我还使用 MJPEG 进行了测试(先编码帧然后以块的形式发送)——容器是 AVI,但里面的图像是压缩的 JPEG 图像。帧率是平滑的,但本地回送已经有 1 秒的延迟,所以如果这要通过网络发送(通过 UDP、TCP/HTTP/Websocket 等),还没有测试,但我认为它会增加额外的延迟,比如说1秒。我研究了现有的流媒体,发现总延迟为 3 秒,这就是我现在所拥有的。 MJPEG的总结,我认为它根本不会节省带宽,因为毕竟在AVI容器内它仍然是JPEG图像,保存的是网络请求的数量(不确定这是否是一个加号)强>
- 最后,类似于 MJPEG 方法,但使用 MPEG1、MPEG4、WEBM 等编码器/解码器肯定会由于更好的压缩算法而节省带宽,但肯定会增加延迟,因为 MJPEG 只是 JPEG 的原始打包在容器内,这种方法会增加额外的 CPU 工作负载来处理进一步的压缩。 因此,这种方法的总结是它节省了带宽,但增加了更多的延迟。
鉴于上述 3 种情况,我认为实时流式传输的最佳策略是根本不压缩,至少是以 JPEG 压缩并将 JPEG 打包到一个容器中(例如每包 3-4 帧) 在 100 毫秒,并将该字节流式传输到网络中。 但是对于实时流媒体专家来说,实时直播流媒体的最佳策略是什么?
【问题讨论】: