【问题标题】:Video Streaming Protocols Comparison视频流协议比较
【发布时间】:2015-11-21 20:06:36
【问题描述】:
我正在尝试找出流式传输视频的最佳方式,但我一直在选择我的技术堆栈。最终我想要的是尽可能高效地流式传输视频(现在它是严格的 h264 流式传输)。我是流媒体视频的新手,在选择传输协议时很困惑。我想实现一个流服务,其中丢包比延迟更受青睐,我可以使用的最佳传输协议是什么?
我一直在使用 RTMP,但仍然无法通过 50mbit wifi 连接获得低于 30 秒的 720p 延迟。我找不到传输协议之间的任何性能比较,因此要么我没有找到正确的位置,要么在不指定有关正在传输的数据的信息的情况下无法进行此类比较。无论如何,有人能解释一下这个问题吗?
我不知道这是否有任何区别,但我正在使用基于 NGINX 的媒体流服务器,我愿意接受有关媒体服务器的任何其他建议。
谢谢
【问题讨论】:
标签:
nginx
streaming
video-streaming
rtmp
【解决方案1】:
对于低延迟,您可以选择诸如 RTP/RTSP 之类的实时协议。现在,如果您想进一步减少延迟,请关闭 H.264 编码器上的 B 帧。
WebRTC 可能是另一种选择。
【解决方案2】:
A) RTMP
缺点:
1) 对于 CDN,它会很昂贵,因为它在没有缓存的情况下工作。
2) 从安全的角度来看,RTMP Encrypted 存在一些缺陷,因为它容易受到中间人攻击。 RTMP 工具包 - RTMPDump 可以轻松用于下载 RTMP 流。
3) RTMP 以块的形式流式传输您的视频,它永远不会提前加载,使用慢速连接的观看者在等待文件的其余部分流式传输时可能会遇到一些缓冲。
4) rtmp 只能与 Flash 插件一起使用。
5) RTMP 仅在端口 1935 上工作(被大多数公司阻止)。
B)HLS(来自 Apple)自适应流媒体
可与实时 + 存储的视频流一起使用
缺点:
这取决于平台(仅适用于 IOS)
C) 渐进式/伪流式处理
在请求之前分块下载视频。
独立于平台。
支持所有视频格式并通过 http 协议提供服务。
使用预转码视频与自适应流式处理相匹配。
**Nginx 支持以上所有方法,ngx_http_mp4_module