返回

文章详情

我家网络上的多播电视分发

Hacker News2026年7月25日 20:55

今天我将探讨多播的奇妙世界,这里数据包被多次交付,并且我们使用反向路由表进行路由。但是,一旦你明白它是如何工作的,整个内容分发的可能性就会向你开放!受到 @TallPaulTech 的旧视频的启发,我将使用直播电视分发作为多播如何工作的示例,以及它在一些奇特的利基用例中如何可能对你的网络进行重大升级。视频 ↓ 相关资料 ↓ 以下视频/等对于我非常有帮助,或者我认为你可能会对以下内容感兴趣:Tall Paul Tech 的 IPTV 设置构建播放列表,Tall Paul Tech 的相关主题原始视频。链路局部示例 ↓ 所有这些都将在本地网络上工作,但如果你没有进行 MLD / IGMP 监听,它们可能会导致整体体验不佳(尤其是对于无线客户端)。基本文件(无转码) ↓ 如果你的客户端能解码视频/音频,你可以通过直接发送而不用转码来节省大量 CPU 能力。因此,这里我们将媒体进行处理,复制音频和视频轨道,将其复用成 MPEG-TS 传输流,并发送它。-re 表示实时 -i bbb.mov 是输入文件(大嘴巴兔) -c:v 和 -c:a 表示复制视频和音频 -f mpegts "udp://[ff02::69@eth0]:5002?pkt_size=1200" 是复用和 UDP 输出。ffmpeg -re -i bbb.mov -c:v copy -c:a copy -f mpegts "udp://[ff02::69@eth0]:5001?pkt_size=1200" 基本文件(有转码) ↓ 如果你的媒体格式不常见(虽然如果你在 VLC 播放器中播放,你应该能够播放任何发明的格式),你可能需要进行转码。这个示例使用非常基础的 x264 + aac,再次将其打包到 MPEG-TS 传输流中。-re 表示实时 -i bbb.mov 是输入文件(大嘴巴兔) -c:v libx264 -preset veryfast -profile:v high -level 4.1 -pix_fmt yuv420p 是视频转码 -c:a aac -b:a 128k 是音频转码 -f mpegts "udp://[ff02::69@eth0]:5002?pkt_size=1200" 是复用和 UDP 输出。ffmpeg -re -i bbb.mov -c:v libx264 -preset veryfast -profile:v high -level 4.1 -pix_fmt yuv420p -c:a aac -b:a 128k -f mpegts "udp://[ff02::69@eth0]:5002?pkt_size=1200" YLE TV ↓ 我住在芬兰,所以我可以访问国家广播公司 YLE。你在自己国家可能无法访问。但这是我如何做到的一个例子。# 运行 yle-dl,加载频道 tv1,管道到 ffmpeg # yle-dl 最终查询 YLE 基础设施以获取 HLS 播放列表,并通过 ffmpeg 下载到 Matroska 容器 # ffmpeg 实时,输入 stdin,映射流和元数据,复制(无转码),输出 MPEG-TS 到 UDP。yle-dl tv1 --pipe | ffmpeg -re -i - -map 0 -map_metadata 0 -c copy -f mpegts "udp://[ff02::69%eth0]:5003?pkt_size=1200" 路由多播 ↓ 对于需要跨越子网/VLAN 的大型网络,你可以使用路由多播。我正在使用特定源的多播,这比任何源的多播更容易处理,我们可以忽略会合点。FRR 配置 ↓ 这是我用于 FRR 的配置(我承认这不是优化过的) log syslog informational interface eth0 description upstream ipv6 pim ipv6 pim hello 10 40 ! interface eth1 description downstream ipv6 pim ipv6 mld ipv6 mld version 2 ipv6 mld query-interval 60 ipv6 mld query-max-response-time 15 ipv6 mld last-member-query-interval 10 # 如果进行下面的访问列表 # ipv6 mld access-list mld-groups ! router pim6 ssm prefix-list ssm6 ! ipv6 prefix-list ssm6 seq 5 permit ff3e::/16 ge 16 ! # 在 MLD 侧的替代过滤器 # ipv6 access-list mld-groups seq 5 permit ipv6 any ff3e::1/128 # ipv6 access-list mld-groups seq 10 permit ipv6 any ff3e::2/128 # ipv6 access-list mld-groups seq 100 deny ipv6 any ff3e::/16 # 同时过滤组和源 # ipv6 access-list mld-groups seq 5 permit ipv6 2001:db8:1::10/128 ff3e::1/128 # ipv6 access-list mld-groups seq 10 deny ipv6 any ff3e::/16 基本文件路由 ↓ 该示例在多播中流式传输文件,但使用额外选项进行特定源的多播并设置正确的跳数限制。你可以修改之前的链路局部示例,以这些选项在路由多播上工作。 -re 表示实时 -i bbb.mov 是输入文件(大嘴巴兔) -c:v 和 -c:a 表示复制视频和音频 -f mpegts 现在还需要跳数限制,类似于 IPv4 中的 TTL。ffmpeg -re -i bbb.mov -c:v copy -c:a copy -f mpegts "udp://[ff35::69]:5004?hops=32&pkt_size=1200"

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡