VLC 流 URI 中的“at”(@)符号 + 端口号是什么意思?

VLC 流 URI 中的“at”(@)符号 + 端口号是什么意思?

我发现了一个关于此的问题,但没有完全解释我在超级用户上的问题(并且它的参考链接已失效...) 所以我提出了这个问题。

我需要通过 UDP 在 MPEG-TS 容器中传输视频 + 音频(目前忽略 RTSP)。

现在假设有两台计算机A192.168.1.1)&192.168.1.2)。根据几天的实验,我知道我可以使用:

Affmpeg -re -i ./bunny.mp4 -codec copy -tune zerolatency -f mpegts udp://192.168.1.2:9999

vlc -v udp://@:9999

这确实很有效。但是,我就是无法理解这是什么@意思。我无法在 duckduckgo/google 上找到这样一个该死的符号;尽管 VLC 的 UI 中有一个示例,但没有任何描述或解释:在此处输入图片描述

经过更多实验后,我vlc -v udp://@:9999发现不等同于:

  • vlc -v udp://:9999
  • vlc -v udp://127.0.0.1:9999
  • vlc -v udp://127.0.0.1@:9999

以上三种方法都不起作用。那么“@”到底是什么呢?

答案1

代表@“我自己”——任何 UDP 地址。就你的情况而言,vlc -v udp://@192.168.1.2:9999也可以。使用快捷方式的好处@是,你不需要将你的 IP 地址硬编码到任何脚本等中。

这种@捷径并非来自事物的“严格” IT 方面,而是来自广播世界,当然,网络在广播世界中被广泛使用,但与真正的 IT 世界相比,对它的理解却少得多。

编辑

让我进一步详细说明一下此快捷方式的使用:

  • 224.225.226.227@:9999意味着“任意接口上的多播 IP 224.225.226.227,我可以在端口 9999 上接收它”
  • @192.168.169.170:9999意味着“我的IP 192.168.169.170,端口 9999”
  • [email protected]:9999意味着“接口上的多播 IP 224.225.226.227我的IP 为 192.168.169.170,端口为 9999”
  • @:9999当然意味着“任何我的端口 9999 上的 IP”

重要的是,符号@清楚地表明,我们谈论的是自己的接口,而不是发送者的接口。

答案2

VLC 现在有关于此主题的文档这里

完整语法是:(
vlc -v udp://source_address@dest_address:port 你可以用 rtp 替换 udp)

如果目标地址是多播地址,则:
source_address是您要加入的多播组的特定源主机地址。如果您的本地计算机具有 IGMPv3,则将发出源特定多播 (SSM) 加入。如果主机正在运行较低的 IGMP,则将加入该组,但如果流来自不同的源地址,VLC 将拒绝播放该流。
dest_address是您要加入的多播组。如果您有多个网络接口(包括虚拟接口),则操作系统的接口指标将用于确定要侦听哪个接口。
port是您要侦听的多播组的端口。

如果目标地址是单播地址,则:
source_address是要播放的流的特定源主机地址。
dest_address是要监听的本地接口的地址。如果有 2 个或更多单播流通过不同的目标 IP 地址进入本地计算机,但目标端口号相同,则此功能非常有用。这是让 vlc 知道您要播放哪个流的唯一方法。
port是要播放的流的端口。

如果省略 3 个参数中的任何一个或全部,则:
source_address默认为“任何地址”。
dest_address默认为本地计算机网络接口地址。如果您有多个接口,它将根据端口号查找流,除非多个流使用相同的端口。
port默认为 1234。

在您的示例中,vlc -v udp://@:9999计算机 B 可以播放来自计算机 A 的流,因为 A 正在向 B 单播。省略源地址意味着 vlc 将接受任何源,而省略目标默认为您的本地接口(与环回 127.0.0.1 不同)。

注意:我在 Win10 上的 VLC 3.0.17.4 上测试了上述所有场景。

相关内容