在我真正为它编写代码之前,我一直在尝试制作视频流服务器的原型。所以我使用 VLC 使用以下命令在我的服务器上进行流式传输:
cvlc video.mpg --loop --sout '#transcode{vb=0,vcodec=mpgv,fps=20,ab=0,acodec=mpga,channels=2,venc=ffmpeg}:rtp{mux=ts,ttl=10,dst=127.0.0.1,port=9554}'
流服务开始在localhost的 9554 端口上运行。经过一番研究,我未能将 VLC 流绑定到公共 IP,这是另一个值得在另一个页面上分享的问题。
问题是,为了让外部世界可以看到流媒体,我使用了 NginX 反向代理,并在 VLC over RTP上使用了HTTP流媒体。
cvlc video.mpg --loop --sout '#transcode{vb=0,vcodec=mpgv,fps=20,ab=0,acodec=mpga,channels=2,venc=ffmpeg}:http{mux=ts,ttl=10,dst=0.0.0.0:9554/live}'
好吧,除了我没有使用RTP协议之外,在我的手机上观看流媒体视频是成功的。
当我不知道如何反向代理UDP Stream时,问题就出现了。当然,NginX 不会工作,因为它只代理 HTTP 和新版本的 TCP,当然。
那么,知道如何反向代理UDP 流吗?
也欢迎任何其他相关答案,以防您知道如何将 VLC 绑定到公共地址而不是 localhost。
RTP 与 RTP 控制协议 (RTCP) 结合使用。
RTP 承载媒体流(例如,音频和视频),而 RTCP 用于监视传输统计和服务质量 (QoS) 并帮助多个流同步。
通常,RTP 将在偶数 UDP 端口上发送,而 RTCP 消息将通过下一个更高的奇数端口发送。
我认为这就是您未能将 RTP 绑定到您忘记 RTCP 的公共 IP 地址的原因。
我再次认为您需要的是 DNAT 而不是反向代理。
如果你想在互联网上流式传输视频和音频,我的建议是使用 HLS 而不是 RTP,它比 RTP 和其他类似协议更灵活,你可以使用 Nginx 来服务 HLS。
http://nginx.org/en/docs/http/ngx_http_hls_module.html
RTP 通常也可以通过 TCP 工作。通常,
?transport=tcp
在链接末尾添加是可行的,但我不确定你的情况。