2026年探索家庭网络组播电视分发:解锁内容分发新可能,提升网络性能

📅 2026/7/27 1:16:36 👁️ 阅读次数 📝 编程学习
2026年探索家庭网络组播电视分发:解锁内容分发新可能,提升网络性能

视频

博主提供了相关视频的缩略图,点击可跳转至视频页面([缩略图](/posts/2026/isp_mcast/1.png),视频链接:https://youtu.be/nHzU-sspN54 )。

参考资料

以下这些视频等资料对博主很有帮助,也推荐给读者:
- [Tall Paul Tech关于搭建IPTV系统的播放列表](https://www.youtube.com/playlist?list=PLGvkW0sr-RWZHi-5XtnWxIjMLhjG8UffL)
- [Tall Paul Tech关于该主题的原始视频](https://www.youtube.com/watch?v=KI0LuIcFM98)

本地链路示例

以下示例在本地网络中都能正常工作,但如果没有进行MLD / IGMP侦听,可能会带来糟糕的体验(尤其是对无线客户端)。

基本文件(无转码)

若客户端能够解码视频和音频,直接发送原始文件,不进行转码,可节省大量CPU资源。以下是操作代码:

# -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电视台

博主住在芬兰,可访问国家广播电视台YLE。以下是实现组播的示例:

# 运行 yle-dl,加载电视频道 tv1,然后将输出通过管道传递给 ffmpeg
# yle-dl 最终会向 YLE 基础设施查询 HLS 播放列表,然后使用 ffmpeg 将其下载到 Matroska 容器中
# ffmpeg 实时处理,输入为标准输入,映射流和元数据,复制(不转码),输出为 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的大型网络,可使用路由组播。博主使用的是源特定组播(Source - Specific Multicast),它比任意源组播(Any - Source Multicast)更容易处理,且可忽略会合点(Rendezvous Points)。

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"

阅读其他文章

* * *

[ 开启我的内容分发网络 →](https://www.apalrd.net/posts/2026/asn_cdn/)