我正在尝试从源(电视盒在此源 rtp://@XXXX:Y 中以多播方式传输)到互联网(以我的手机为例或 LAN 内的其他设备)进行流式传输,但我无法实现它。我正在使用的命令是这样的
ffmpeg -i rtp://@X.X.X.X:Y -vcodec copy -f mpegts udp://127.0.0.1:1234
但它并没有像我预期的那样工作,我的意思是,我能够打开 vlc 并在运行 ffmpeg 的同一台机器上播放流媒体,但不能在同一 LAN 中的另一台机器上播放流媒体。有人可以帮助我吗?
谢谢你!
编辑:最后我解决了安装一个名为“udpxy”的软件,该软件将多播内容转发到客户端。我安装在覆盆子中,它非常适合此目的。
感谢您的所有解释。它帮助我了解我想要做什么以及使用转码器的局限性。我想我可以用 ffmpeg 对 udpxy 做同样的事情,但我可以直接发布电视盒 IP。
答案1
对于给定的命令,127.0.0.1
是localhost
,该命令运行的计算机。因此,您当然只能在同一台计算机上打开 vlc 并播放流。
要转发到同一 LAN 上的另一台计算机,您至少需要 LAN 上这台计算机的 IP 地址。
您无法“流式传输到互联网”,因为运行此命令的计算机和手机都没有固定的公共 IP。两者也都位于 NAT(网络地址转换)之后。所以你将无法做到这一点。
如果您在 LAN 中,是什么阻止您直接使用来自“其他计算机”的多播流(毕竟,它是多播,而这正是多播的用途......)?将良好的 RTP 多播流转换为容易出错的单地址 UDP 数据包对我来说似乎不是理想的解决方案......
答案2
我将使用这个答案点来帮助解决问题。
电视盒(多播)--> ffmpeg(多播到 MPEG 传输流)--> 客户端 VLC? (接收 mpegt)
认为:
视频流不会退出本地 LAN。
接收 MPEG 传输流的客户端无法加入或接收多播流。
电视盒无法传输 MPEG 传输流。
就像@dirkt 说的。 “将良好的 RTP 多播流转换为容易出错的单地址 UDP 数据包对我来说似乎不是理想的解决方案......”
将 UDP 更改为 TCP,以及从本地主机更改为客户端地址是否有效?
ffmpeg -i rtp://@X.X.X.X:Y -vcodec copy -f mpegts tcp://192.168.1.100:1234
tcp://192.168.1.100:1234
-- 客户端PC接收mpegts流
rtp://@X.X.X.X:Y
-- 电视盒传输的广播流(224.0.0.0 - 239.255.255.255)。
理想情况下,人们希望将电视盒传输更改为 mpegts,或者将客户端从 mpegts 接收更改为广播,从而删除中间的 ffmpeg 转换。
词汇:
mpegts-- MPEG 传输流。将音频、视频等封装在纠错和同步模式中......
IP组播-- 一台源 PC 和多台目标 PC。 IPv4 地址范围:224.0.0.0 - 239.255.255.255。其中一些被排除在路由、网关等之外。“客户端”将加入多播“流”。一对多。消息可能会丢失或无序传送...