在我为它编写代码之前,我一直在尝试制作一个视频流服务器的原型。因此,我使用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}'流媒体服务开始在端口9554的本地主机上运行。经过一些研究,我没有将VLC流绑定到一个公共IP上,这是另一个值得在另一个页面上共享的问题。
问题是,为了使流从外部世界可见,我使用了NginX反向代理,并在RTP上的VLC上使用了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流时,问题就出现了。当然,NginX不能工作,因为它只在较新版本上代理HTTP和TCP。
那么,您知道如何反向代理UDP流吗?
如果您知道如何将VLC绑定到公共地址而不是本地主机,任何其他相关的答案也是受欢迎的。
发布于 2019-07-29 17:54:46
RTP与RTP控制协议(RTCP)一起使用。
当RTP承载媒体流(例如音频和视频)时,RTP用于监视传输统计和服务质量(QoS),并辅助多个流的同步。
通常,RTP将在偶数UDP端口上发送,RTCP消息将通过下一个较高的奇数端口发送。
我认为这就是为什么您未能将RTP绑定到一个您忘记了RTCP的公共ip地址。
再说一次,我认为你需要的是一个DNAT,而不是反向代理。
我的建议是使用HLS而不是RTP,如果您想在互联网上传输视频和音频,它比RTP和其他类似的协议更灵活,而且您可以使用Nginx为HLS服务。
http://nginx.org/en/docs/http/ngx_http_hls_module.html
发布于 2021-06-09 10:35:25
RTP通常也可以在TCP上工作。通常,在链接末尾添加?transport=tcp是可行的,但我不确定您的情况。
https://unix.stackexchange.com/questions/532778
复制相似问题