V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jsq2627
V2EX  ›  宽带症候群

介绍一下我写的 IPTV 组播转单播工具 rtp2httpd-modern

  •  
  •   jsq2627 · 52 天前 · 8927 次点击
    这是一个创建于 52 天前的主题,其中的信息可能已经有所发展或是发生改变。

    经常折腾 IPTV 的朋友应该知道,有本地 IPTV 组播源 + 组播转单播工具 + OpenWRT 路由器,在电脑、手机上搭配 APTV 等播放器,就可以看当地 IPTV 电视直播。而且因为走的是运营商 IPTV 网络,稳定性极高。互联网上公开能找到的直播源,平时勉强还算稳定,遇到春晚、阅兵这种大型活动基本都歇菜了。

    平时大家常用的组播转单播工具有 udpxy 、msd_lite 等,这次我要介绍一下我编写的这个工具 rtp2httpd-modern ,一定是目前功能最强的。

    项目地址 https://github.com/stackia/rtp2httpd (欢迎点进查看完整介绍)

    这个工具除了基本的组播转单播功能,还实现了:

    • FCC (快速频道切换):极快的换台速度,在我以前的一篇帖子 /t/971817 有介绍过
    • RTSP 转 HTTP:可以把抓到的 IPTV RTSP 时移源转换成 HTTP 提供,获得更好的播放器兼容性

    两个演示视频:

    快速换台 + 时移回看

    https://github.com/user-attachments/assets/a8c9c60f-ebc3-49a8-b374-f579f8e34d92

    25 条 1080p 组播流同时播放,CPU/内存占用很低

    https://github.com/user-attachments/assets/fedc0c28-f9ac-4675-9b19-a8efdd062506

    Web UI 实时状态监控

    Image

    顺便附上我本地(海南电信 IPTV )的抓源脚本和 m3u8: https://github.com/stackia/hainan-telecom-iptv-updater

    156 条回复    2025-11-24 11:03:24 +08:00
    1  2  
    jsq2627
        101
    jsq2627  
    OP
       27 天前
    @JoeSmith 你这条应该回复在 https://www.v2ex.com/t/971817

    组播转单播,是为了脱离运营商的垃圾 IPTV 盒子,用第三方播放器在手机、电脑、电视盒子上看直播,或者通过公网看直播。并不是(也不能)解决弱电箱到客厅单线复用问题。
    JoeSmith
        102
    JoeSmith  
       27 天前
    能收组播的盒子/播放器大把吧,还是我家里的配置,在另一间房电脑上用 vlc 看也毫无问题,并不需要转单播。当然也需要 vlan 配置。
    JoeSmith
        103
    JoeSmith  
       27 天前
    当然公网看直播这个没办法,就只能转单播了。
    cbigame0205
        104
    cbigame0205  
       27 天前
    @JoeSmith 说实话,这条有点自作聪明,且不说这个事情跟 LZ 这个软件没关系,而且只要有 OPENWRT 的路由,完全可以不用交换机,一台路由器实现 IPTV 和网络的单线复用。哪怕是最复杂需要 AB 面认证的上海电信 IPTV 都行。
    楼主这个软件的目的是抛弃机顶盒,看 IPTV ,通过 DDNS 和端口转发在外网看家里的 IPTV 也没问题
    cbigame0205
        105
    cbigame0205  
       27 天前
    @JoeSmith 很多电信套餐都只有一路 4KIPTV 等等,家里有两台甚至多台电视机,单播当然是必要的。且不说你多搞了台交换机,请问你家有三四个房间都有电视,都要看 IPTV ,不搞单播你去买很多机顶盒
    Damn
        106
    Damn  
       27 天前 via iPhone
    @JoeSmith 还有没有一种可能,某些地方的某些运营商机顶盒它不支持 hdmi cec ,你无论如何都得用两个遥控器?然后组播转单播可以只用电视装个壳播放器就能一个遥控器通吃?

    我以前就用 vlan ,因为原来运营商的机顶盒支持 hdmi cec ,电视和机顶盒开机都需要时间,只是机顶盒要多那么十几秒,也不是不能忍受,一个遥控器管所有。
    后来携转,机顶盒不支持 hdmi cec ,我必须得用两个遥控器,然后我电视开关机不是红外,没有办法用机顶盒遥控器学习,这种情况你还愿意用 vlan 么?
    y1y1
        107
    y1y1  
       27 天前
    @JoeSmith #100 非常幽默的回答,令人忍俊不禁
    MacTavish123
        108
    MacTavish123  
       27 天前
    @zjwww #97 合同里写了速率限制了。
    cjd6568358
        109
    cjd6568358  
       27 天前
    @zjwww 方便给个上海电信 fcc 吗?懒得抓包了
    cjd6568358
        110
    cjd6568358  
       27 天前
    @zjwww 或者方便给个联系方式请教下吗?
    jsq2627
        111
    jsq2627  
    OP
       27 天前
    jsq2627
        112
    jsq2627  
    OP
       27 天前
    @JoeSmith 有机会你可以试试 wifi 下接收组播流是什么体验
    li592677
        113
    li592677  
       27 天前
    软路由插上 iptv 网线的网口需要设置吗?
    apex8777
        114
    apex8777  
       27 天前
    好评如潮,我也要试下。有江苏电信的大哥吗?
    jsq2627
        115
    jsq2627  
    OP
       26 天前 via iPhone
    zjwww
        116
    zjwww  
       26 天前
    @MacTavish123 那也没到 200m 啊?另外请问下您这个电子版合同是怎么下载到的?谢谢。
    zjwww
        117
    zjwww  
       26 天前
    @jsq2627 请教下,看到有多个 FCC 地址,用任意一个就可以吗?
    MacTavish123
        118
    MacTavish123  
       26 天前 via Android
    @zjwww #116 套餐不一样,速率不一样。我这个电子合同是联通发到我电子邮箱的。因为从一开始用联通号码的时候就填写了邮箱,所以之后我名下办理任何业务都会发邮件。
    jsq2627
        119
    jsq2627  
    OP
       26 天前   ❤️ 1
    @zjwww 都试一遍,用能成功的
    zjwww
        120
    zjwww  
       26 天前
    @jsq2627 请问您这个软件现在可以实现上海电信 Iptv 的时移回看吗?貌似别的组转单软件都只能看实时的。
    cjd6568358
        121
    cjd6568358  
       26 天前
    @jsq2627 感谢
    m1s4k1
        122
    m1s4k1  
       26 天前
    @JoeSmith 转单播就是为了不用机顶盒呀, 和几根线没啥关系
    sentivcn
        123
    sentivcn  
       25 天前
    docker 运行配置 m3u 总是不成功,m3u 不存在
    yutian12345
        124
    yutian12345  
       25 天前
    装上以后还是没有 luci
    配置好了不能用
    只有在 ssh 下面输入一个命令比如-l 端口或者-i 上游端口这样的命令才能用
    ssh 是空白状态,只要关了 ssh 就不行了
    这个是怎么整
    zjwww
        125
    zjwww  
       25 天前
    @YGBlvcAK 项目 github 上有 x86 版本包的。
    zjwww
        126
    zjwww  
       25 天前
    @jsq2627 请教下,如果直接在家里二级旁路由上装这个的话,是不是就用旁路由自身的 ip 地址作为直播流访问地址了?谢谢。
    jsq2627
        127
    jsq2627  
    OP
       25 天前 via iPhone
    @zjwww 是的。用旁路由的话,建议光猫 itv 口直连旁路由,整个 iptv 流量不要经过主路由。
    如果非要用主路由接入 iptv 网的话,涉及组播转发、fcc 端口映射,会比较麻烦
    jsq2627
        128
    jsq2627  
    OP
       25 天前 via iPhone
    @yutian12345 用浏览器无痕模式访问后台看下有没有
    jsq2627
        129
    jsq2627  
    OP
       25 天前 via iPhone
    @sentivcn 需要贴一下具体配置和日志
    jsq2627
        130
    jsq2627  
    OP
       25 天前 via iPhone
    @zjwww 要看时移需要能抓出 rtsp 时移源来。时移源一般是带认证信息的,需要写脚本定时更新,需要一些技巧。可以在 github issue 区或者恩山上找当地朋友交流。
    yutian12345
        131
    yutian12345  
       25 天前
    @jsq2627 只有在 ssh 下面输入一个命令比如-l 端口或者-i 上游端口这样的命令才能用
    只有在这个时候才可以看电视,也可以看到后台页面
    但是关闭 ssh 界面或者暂停这个命令后就不行了
    jsq2627
        132
    jsq2627  
    OP
       25 天前 via iPhone
    @yutian12345 luci 会受到浏览器缓存影响,很多人清缓存或者无痕模式访问后台就好了。

    要是搞不定 luci 的话,可以手动编辑 /etc/config/rtp2httpd 文件,改好配之后运行 /etc/init.d/rtp2httpd restart 启动服务
    yutian12345
        133
    yutian12345  
       25 天前
    @jsq2627 可能我没说清楚
    1 、luci 界面及时用无痕模式登录路由器后也看不到。不过这个无所谓

    2 、通过 ssh 的 VI 命令编辑了配置文件,使用这个重启命令后,无法使用,插件的后台状态页面也无法打开
    必须通过 ssh 运行一个命令比如 rtp2httpd -i 上游端口或者 rtp2httpd -l 监听端口这样的命令后才可以看电视,也可以进入插件的后台状态页面,但是此时 ssh 界面是出于空白状态,只有当有错误是会输出错误信息
    使用 ctrl+C 停止这个命令或者直接关闭 ssh 程序后,就无法看电视,也无法进入插件后台状态页面了
    jsq2627
        134
    jsq2627  
    OP
       25 天前
    @yutian12345 ssh 上直接运行是前台运行,断开连接后程序就退出了。任何程序都是这样的。
    你需要后台运行 rtp2httpd ,方法就是我上面说的,编辑 /etc/config/rtp2httpd 配置(这是 openwrt 的 uci 配置),用 /etc/init.d/rtp2httpd restart 来后台启动服务
    yutian12345
        135
    yutian12345  
       25 天前
    @jsq2627 编辑 /etc/config/rtp2httpd 配置(这是 openwrt 的 uci 配置),用 /etc/init.d/rtp2httpd restart 来后台启动服务
    就是这个运行完后,进不了插件后台也不能看
    应该没运行成功?
    jsq2627
        136
    jsq2627  
    OP
       25 天前
    @yutian12345 可以开两个 ssh ,一个运行 logread -e rtp -f ,另一个运行 /etc/init.d/rtp2httpd restart ,看有没有日志输出
    jsq2627
        137
    jsq2627  
    OP
       25 天前
    @yutian12345 也贴一下你编辑后的 /etc/config/rtp2httpd 看一下
    yutian12345
        138
    yutian12345  
       25 天前
    @jsq2627 option disabled '1'
    option respawn '1'
    option port '7088'
    # option use_config_file '0'
    # option verbose '1'

    # Upstream Interface Configuration
    # Simple mode (default): Use one interface for all traffic
    option upstream_interface 'eth0'

    # Advanced mode: Configure separate interfaces for different traffic types
    # To enable advanced mode, set advanced_interface_settings to '1' in LuCI
    # or uncomment the specific interface options below instead of upstream_interface
    # option advanced_interface_settings '0'
    # option upstream_interface_multicast 'eth0'
    # option upstream_interface_fcc 'eth1'
    # option upstream_interface_rtsp 'eth2'

    # option maxclients '5'
    # option workers '1'
    # option buffer_pool_max_size '16384'
    # option hostname 'somehost.example.com'
    # option xff '0'
    # option status_page_path '/status'
    # option player_page_path '/player'
    # option r2h_token 'your-secret-token-here'
    # option external_m3u 'https://example.com/playlist.m3u'
    # option external_m3u_update_interval '86400'
    # option mcast_rejoin_interval '0'
    # option fcc_listen_port_range '40000-40100'
    # option video_snapshot '0'
    # option ffmpeg_path 'ffmpeg'
    # option ffmpeg_args '-hwaccel none'
    # option zerocopy_on_send '0'
    jsq2627
        139
    jsq2627  
    OP
       25 天前
    @yutian12345 把 option disabled '1' 改成 option disabled '0'
    yutian12345
        140
    yutian12345  
       24 天前
    @jsq2627
    root@YutianER2260T:~# /etc/init.d/rtp2httpd restart
    root@YutianER2260T:~# /etc/init.d/rtp2httpd status
    /etc/rc.common: line 1: _procd_status: not found

    好像还是不行,看起来是没启动成功
    jsq2627
        141
    jsq2627  
    OP
       24 天前
    @yutian12345 这样的话那你要考虑一下土方法后台运行了。例如 ssh 后手动运行
    nohup /usr/bin/rtp2httpd > /dev/null 2>&1 &
    可以后台运行

    把这行加入 /etc/rc.local 的 exit 0 之前,可以开机自动运行

    用 killall rtp2httpd 结束后台进程
    yutian12345
        142
    yutian12345  
       24 天前
    @jsq2627 用这个方法可以了,我加到启动项里试试看。谢谢,我看看 FCC 行不行,主要是为了这个
    yutian12345
        143
    yutian12345  
       24 天前
    @jsq2627 试了一下 fcc 似乎都不成功
    是路由器的 eth0 链接光猫的 iptv 口,在光猫上进行了 itv 拨号,也开启了 itv 口的 dhcp 功能
    现在设置 fcc 上游端口为 eth0 ,不能够使用
    显示掉落到组播
    不过 fcc 列表里广东电信只有深圳和东莞,没广州的,不太确定是什么原因
    jsq2627
        144
    jsq2627  
    OP
       24 天前 via iPhone
    @yutian12345 首先需要等有广州朋友分享本地 fcc 地址。其次 fcc 要工作,建议是在路由器上做 iptv 拨号,否则有复杂的 nat 穿透问题要解决。
    yutian12345
        145
    yutian12345  
       24 天前
    @jsq2627 好,我回头试试路由器拨号 itv
    fcc 的话,我看看自己能不能抓
    yutian12345
        146
    yutian12345  
       24 天前
    @jsq2627 擦,把光猫 itv 改了桥接,然后用路由器拨号以后直接看不了了
    后台界面一直显示 12:43:04 ERROR Multicast: No data received for 1 seconds, closing connection
    jsq2627
        147
    jsq2627  
    OP
       24 天前
    @yutian12345 是否把配置里的 upstream-interface 改过去了呢
    yutian12345
        148
    yutian12345  
       24 天前 via Android
    @jsq2627 光猫拨号的时候用的是 eth0 物理接口
    路由器拨号是不是得用 pppoe-iptv 的虚拟接口?
    改了以后似乎用 刚才的 ssh 直接执行配置部分台可以看,是不是 mac 地址没改成机顶盒的?
    yutian12345
        149
    yutian12345  
       24 天前 via Android
    @jsq2627 如果是用你给的启动命令启动,就看不了
    zjwww
        150
    zjwww  
       24 天前
    @jsq2627 明白了,感谢。
    wske
        151
    wske  
       23 天前
    希望可以添加进 openwrt 的源里面
    peterwillcn
        152
    peterwillcn  
       15 天前
    @JoeSmith 求指导 猫棒+vlan 网管交换机带 IGMP 功能和 OpenWrt 怎么配置呢?方便写个详细配置教程
    cbigame0205
        153
    cbigame0205  
       10 天前
    感谢楼主,某个新版本之后 24.10 的 OPENWRT 服务里已经可以正常显示了
    从 MSD 换到本软件,上海电信 FCC 组播用 233.18.204.xxx 那个网段,FCC 服务器用 124.75.26.151:15970 都可以顺利拉取,配合 HTTP 请求认证令牌外网 DDNS 用也没啥压力。
    文档里建议写一下同时用 FCC 和令牌当中要用&连接,单独的文档里都是用的?,研究了下才搞定
    感谢楼主
    mafuyu
        154
    mafuyu  
       9 天前 via Android
    梅林 ac68u 单文件跑起来了。-d 没有用只能用 141 楼的土办法后台运行。w1 情况下带 3 路 38m 的 4k 单核满了带不动了,比 udpxy 性能好,就是不知道为什么还是有小卡顿。不确定小卡顿后会不会跳转到同步 ovo ,还有就是有概率小卡顿后音画不同步不一确定播放器问题还是他的问题,udpxy 下没注意这个问题。谢谢楼主现在可以比较稳定的看 4k 频道了。
    muhahaha
        155
    muhahaha  
       9 天前
    请问有没有陕西联通的懒人直播源
    skeugrass
        156
    skeugrass  
       1 天前
    @JoeSmith 哥们, 这是给内网所有终端使用的... 不是单给一台电视用的, VLAN 解决不了组播的问题, 不整个内网都被 itv 流量泛洪至少得三层交换机做好 igmp snooping 才行
    1  2  
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   5817 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 02:28 · PVG 10:28 · LAX 18:28 · JFK 21:28
    ♥ Do have faith in what you're doing.