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

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

  •  
  •   jsq2627 · 22 天前 · 5148 次点击

    经常折腾 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

    95 条回复    2025-10-26 12:15:47 +08:00
    freebsdjlu
        1
    freebsdjlu  
       21 天前
    组播必须开通 iptv 服务才可以么
    v1
        2
    v1  
       21 天前   ❤️ 1
    @freebsdjlu 看运营商和省份,比如上海移动的,你只要是移动宽带,用别人抓包出来的组播地址也可以用
    Damn
        3
    Damn  
       21 天前 via iPhone
    澄迈的道友
    Ccf
        4
    Ccf  
       21 天前
    济南联通有懒人版么
    datou
        5
    datou  
       21 天前
    我电信的机顶盒还要 pppoe 一下
    Kale
        6
    Kale  
       21 天前
    @Ccf #4 蹲一个
    Kale
        7
    Kale  
       21 天前
    谢谢 OP ,请问之前开通过 IPTV ,但是一直用不了,因为电视机那里没留网线口,用这个可以吗?路由器是软路由 openwrt
    jsq2627
        8
    jsq2627  
    OP
       21 天前 via iPhone
    @Kale 可以,这也是大多数人折腾 iptv 内网融合的原因。重点是搞清楚本地运营商认证方式,在 openwrt 上接通 iptv 网络,设置好路由策略,具体搜索 iptv 内网融合
    ajyz
        9
    ajyz  
       21 天前
    看着很强大,先支持一下
    zli
        10
    zli  
       21 天前
    请问一下 OP ,

    25 条 1080p 组播流同时播放演示视频里

    用的是哪款播放器?
    jsq2627
        11
    jsq2627  
    OP
       21 天前
    @zli mac 端的 APTV https://aptv.wegic.app
    zli
        12
    zli  
       21 天前
    @jsq2627 多谢~
    piero66
        13
    piero66  
       21 天前
    star 了
    109653VIP
        14
    109653VIP  
       21 天前
    有没有单文件的编译
    Archeb
        15
    Archeb  
       21 天前
    感谢开源!虽然广东电信这边支持 RTSP 单播,但是有这么一个现代化的项目肯定能造福很多 IPTV 用户
    Rinndy
        16
    Rinndy  
       21 天前 via iPhone
    不知道为什么播放 1 分钟左右就断开重连,正常吗
    iloveyou1985
        17
    iloveyou1985  
       21 天前 via iPhone
    我是 x86 的 ikuai 软路由,可以用吗?
    foxk
        18
    foxk  
       20 天前
    Nice ,必须 Star
    lvxudong
        19
    lvxudong  
       20 天前
    好东西
    jsq2627
        20
    jsq2627  
    OP
       20 天前
    ikuai 我了解比较少。可以尝试自己编译,图省事的话可以尝试 docker 方案
    x86 openwrt 肯定是可以的,我自己就是 x86 openwrt 软路由
    jsq2627
        21
    jsq2627  
    OP
       20 天前
    jsq2627
        22
    jsq2627  
    OP
       20 天前
    @Rinndy 不正常,可以开启 debug log ,把日志发到 github issues 我来看看。
    jsq2627
        23
    jsq2627  
    OP
       20 天前
    @109653VIP 这个是传统 c 项目,编译好的单文件没什么可移植性,所以不提供
    heiher
        24
    heiher  
       20 天前 via Android
    scegg
        25
    scegg  
       19 天前
    开始播放一分钟左右,会重新缓冲一次,后续观察了 3 分钟不会再有缓冲问题。
    再换个频道还是一样一分钟后重新缓冲一次。
    qiankunyu
        26
    qiankunyu  
       19 天前 via Android
    弄完了电视和手机都没问题,电脑 potplayer 报错
    jsq2627
        27
    jsq2627  
    OP
       19 天前
    @Rinndy @scegg 今天更新了 v2.2.0 版本,试一试问题是否存在。还有问题的话可以发一下 log (改成 debug 级别) 到 github issues
    scegg
        28
    scegg  
       19 天前
    @jsq2627 测试 V2.2.0 ,并在同一个环境( openwrt )下测试了 udpxy 。深圳电信 IPTV 。
    延迟低的频道:会在打开几秒后重新缓冲一次,之后一切正常。
    延迟高( 1000ms+)的频道:播放中会明显出现解码错误导致色块,帧内容前后重叠等(对于字幕区域特别明显)。
    udpxy 测试同样的频道没有类似的问题,可能实现的机制有所不同?
    yutian12345
        29
    yutian12345  
       19 天前 via Android
    直接转就可以快速换台吗
    YGBlvcAK
        30
    YGBlvcAK  
       18 天前
    非常感谢大佬的分享,不会编译,求个 x86 的二进制包,同时求个北京联通和移动的 FCC 地址?
    yutian12345
        31
    yutian12345  
       18 天前
    同样沒有 luci 显示,而且修改完配置用命令重启也没用
    能弄个旧版本兼容不
    yutian12345
        32
    yutian12345  
       18 天前
    搜了一下提示 MSG_ZEROCOPY support is required
    应该是内核太老,没法搞了
    FakerLeung
        33
    FakerLeung  
       18 天前
    家里有 IPtv ,怎么抓包出来?因为我爸希望在外出旅游时也想看?能说下怎么用吗
    qiankunyu
        34
    qiankunyu  
       18 天前 via Android
    有大佬抓一下江苏电信最新的 fcc 地址吗
    jsq2627
        35
    jsq2627  
    OP
       18 天前
    @yutian12345 最低内核要求 4.14 ,应该是太老了。项目强依赖内核的 MSG_ZEROCOPY 特性,没法继续向下兼容了
    y1y1
        36
    y1y1  
       18 天前
    原来 FCC 是这个意思,挺不错的工具
    y1y1
        37
    y1y1  
       18 天前
    @Ccf
    @Kale

    山东联通直接看单播,自己 github 搜一下吧
    jsq2627
        38
    jsq2627  
    OP
       18 天前
    @heiher 谢谢建议,已经集成,现在在最新 release 提供了静态编译版本
    jsq2627
        39
    jsq2627  
    OP
       18 天前
    @109653VIP 单文件现在已在 release 页面提供
    CHNTDCS
        41
    CHNTDCS  
       17 天前
    真不错,晚上有空了替换了 udpxy 试试看效果。
    YGBlvcAK
        42
    YGBlvcAK  
       17 天前
    @jsq2627 非常感谢,可以用,没问题👍,现在就差个 FCC 了😂
    wolonggl
        43
    wolonggl  
       17 天前
    建议增加一个播放日志记录功能
    siriussilen
        44
    siriussilen  
       17 天前
    Nice Work
    m1s4k1
        45
    m1s4k1  
       17 天前
    对比 udpxy 有哪些优势呢, 有替换的意愿
    jsq2627
        46
    jsq2627  
    OP
       17 天前
    @m1s4k1 性能改进,FCC/RTSP 支持,现代化 Web UI
    wolonggl
        47
    wolonggl  
       17 天前
    我这边测试播放电信 iptv 组播,出现频繁锻炼,udpxy 和 msd_lite 正常
    日志:
    18:39:28[ERROR]Multicast: No data received for 1 seconds, closing connection
    18:41:34[ERROR]Multicast: No data received for 1 seconds, closing connection
    18:41:53[ERROR]Multicast: No data received for 1 seconds, closing connection
    18:42:13[ERROR]Multicast: No data received for 1 seconds, closing connection
    18:42:37[ERROR]Multicast: No data received for 1 seconds, closing connection
    q197
        48
    q197  
       16 天前 via Android
    太强了。我不太懂这类软件的技术,想请教一下:我以前用树莓派部署 udpxy 转发 iptv 为 http ,发现其实性能消耗很大,同时开 4 个台树莓派 CPU 就跑满了。不知道是为什么?这个组播转 http 需要视频编码或者封装吗?不知道楼主开发的软件性能上和 udpxy 相比提升怎样,树莓派能不能多带几路甚至开几十几百个不卡
    jsq2627
        49
    jsq2627  
    OP
       16 天前
    @q197 udpxy 使用的是 fork + select + 阻塞 IO 这一套古典网络编程模式,多几路连接对 CPU / 内存的开销都比较高。
    我开发的这个程序使用 multi worker + epoll + 非阻塞 IO 这套现代网络编程模式,理论上性能和占用会比 udpxy 好很多。

    组播转 http 不涉及视频解码,只涉及解 RTP 封装,但是需要的计算量很少,本身不应该占用太多 CPU 。

    树莓派的性能应该是优于许多 ARM 路由器的,我觉得带十几路应该没问题(我自己没有树莓派,纯推测)
    jsq2627
        50
    jsq2627  
    OP
       15 天前
    @scegg 尝试一下最新版,应该解决了花屏问题
    yeh
        51
    yeh  
       15 天前
    MSG_ZEROCOPY support is required

    群晖内核太老了,已经搞不上去了
    scegg
        52
    scegg  
       15 天前
    @jsq2627 2.6.0 版本花屏已经无法复现。
    hjj0529
        53
    hjj0529  
       15 天前
    支持,广西电信测试,好用。
    dantesv2
        54
    dantesv2  
       14 天前
    加了 fcc 服务器换台也比 msd_lite 慢很多,不知道什么问题.
    sp670
        55
    sp670  
       13 天前
    @hjj0529 能分享一下广西电信的 fcc 吗?机顶盒拆了好久了,懒得拿出来抓包了
    wakaba94
        56
    wakaba94  
       13 天前
    遇到了一个奇怪问题,PotPlayer 播放时会只有音频流没有视频流,查看 debug 和 info 日志都和正常频道没区别,然后切换频道再切回去就正常了。
    hjj0529
        57
    hjj0529  
       13 天前
    @sp670 测试了一下,广西电信用这个插件,效果不是很明显,跟直接播放组播或者单播差距不大,不知道是我播放器问题还是什么问题,看日志是能成功的。 fcc:113.15.79.82:8027
    hjj0529
        58
    hjj0529  
       13 天前
    @wakaba94 potplayer 我也遇到类似问题,但是应该不是这个插件导致,我用 msd-lite 插件也是如此,特别是北京卫视 4K ,我遇到这种问题比较多,似乎是没识别出视频格式和分辨率。
    Withal
        59
    Withal  
       13 天前
    @wakaba94 一样,只有 4K 频道碰到过,重载几次才有画面
    Withal
        60
    Withal  
       13 天前
    看到支持 docker 了,回去试一下
    sun82kg
        61
    sun82kg  
       13 天前
    有没有道友搞一个, 一键抓取 iptv 盒子里节目地址的列表的工具。
    steveny5997
        62
    steveny5997  
       13 天前
    北京联通好用,谢谢楼主
    hanguofu
        63
    hanguofu  
       12 天前 via Android
    谢谢分享~~~
    wakaba94
        64
    wakaba94  
       12 天前
    @hjj0529 很奇怪,我 udpxy 没问题,昨天重新升级一下这个插件和 PotPlayer 之后又不再复现,所以没搞懂到底哪个有问题。
    Qazxcv123
        65
    Qazxcv123  
       12 天前
    @sun82kg #61 同求,现在 IPTV 盒子抓包解析还是麻烦
    matoung
        66
    matoung  
       12 天前
    点赞 一直在用 udpxy ,抽空试下
    tvirus
        67
    tvirus  
       11 天前
    貌似不支持这样的格式 http://192.168.1.1:5140/rtsp/admin:[email protected]:554/live/stream1 ,
    会报错
    8:20:07 AM[ERROR]RTSP: Cannot resolve hostname admin: Unknown host
    8:20:07 AM[ERROR]RTSP: Failed to initiate connection
    jsq2627
        68
    jsq2627  
    OP
       11 天前
    @tvirus 谢谢反馈,我修复一下
    zhughe
        69
    zhughe  
       11 天前
    先插个眼🤓
    zhujaylon
        70
    zhujaylon  
       10 天前
    @steveny5997 可以分享一下北京联通的 fcc 地址吗 感谢
    matoung
        71
    matoung  
       10 天前
    陕西电信 FCC 亲测好用,体验提升明显,已经从 udpxy 切换到 rtp2http 了 感谢
    jsq2627
        72
    jsq2627  
    OP
       9 天前
    @tvirus 现已支持
    FeranyDev
        73
    FeranyDev  
       8 天前
    有考虑过把不同客户端对同一个服务合并到一起吗,现在还是会有两个 udp 链路
    [https://image-uploader.feranydev.com/api/users/daf6b544-b684-4d77-b381-ed9ecb2152d0/images/2025/10/18/20251018084504.png]
    jsq2627
        74
    jsq2627  
    OP
       8 天前
    @FeranyDev 虽然是两个连接,但底层组播在 linux 内核是只订阅一份并由内核复制的,并不会花掉两倍带宽,复制开销很小。
    FeranyDev
        75
    FeranyDev  
       8 天前
    @jsq2627 是这样呀,也行,就怕出现多个请求。因为两个客户端的播放进度不一样,这样看起来是缓存的原因了
    cbigame0205
        76
    cbigame0205  
       7 天前 via iPhone
    安装成功后服务这里找不到应用,软件包这里已安装显示是有的,固件版本 24.10 ,内核 6.6.93 的硬路由
    cbigame0205
        77
    cbigame0205  
       7 天前 via iPhone
    而且他不是一直不显示,我最早安装好是有的,后来版本更新了一下,我又一键安装了一下就消失了
    xxgzzzzzz
        78
    xxgzzzzzz  
       7 天前
    大哥 这个 webui 能打包进 Linux 二进制文件吗? 非 openwrt 想用来转发多路监控
    xxgzzzzzz
        80
    xxgzzzzzz  
       7 天前
    @jsq2627 这个二进制本身就带 webui 还是单独 npm 运行?
    liton
        81
    liton  
       5 天前
    webui 有可能加入一键抓取 iptv 盒子里节目地址的列表的工具吗
    ihipop
        82
    ihipop  
       5 天前
    不错 udpxy 确实稳定简单 但是 实在是太老了
    jsq2627
        83
    jsq2627  
    OP
       5 天前
    @xxgzzzzzz 前端项目是 npm 构建出来,gzip 打包进二进制里面的。前端项目能独立运行 https://github.com/stackia/rtp2httpd/tree/main/web-ui
    jessechoi
        84
    jessechoi  
       5 天前
    @cbigame0205 "而且他不是一直不显示,我最早安装好是有的,后来版本更新了一下,我又一键安装了一下就消失了"跟我遇到的一模一样,请问你解决了吗?
    dream7758522
        85
    dream7758522  
       4 天前 via Android
    想问一下升级的话咋升级?系统是 openwrt x86
    cbigame0205
        86
    cbigame0205  
       4 天前 via iPhone
    @jessechoi 没解决,刷新缓存,重启路由器,启动项里重启,手动安装都试过了,都不显示
    cbigame0205
        87
    cbigame0205  
       4 天前
    作者是不是能帮忙看看服务不显示的问题,我看 github 的 Issues 里也有人提过这个问题,本帖里也有其他人,应该是某个共性的问题。
    我的
    固件版本 ImmortalWrt 24.10-SNAPSHOT r33226+3-0dfdb7b25f / LuCI openwrt-24.10 branch 25.170.50544~8fa3810
    内核版本 6.6.93
    jsq2627
        88
    jsq2627  
    OP
       4 天前
    @cbigame0205 建议不要太纠结于没有 luci ui ,可以直接编辑 /etc/config/rtp2httpd ,用 /etc/init.d/rtp2httpd restart 来启动

    因为我手上没有 openwrt 24.10 的测试环境,所以暂时不好 debug
    cbigame0205
        89
    cbigame0205  
       4 天前
    @jsq2627 因为更新比较频繁的,编辑/etc/config/rtp2httpd 会让设置每次都重置吗
    另外一个主要是有 UI 我可以远程访问我父母家的路由器改设置,通过改文件就比较麻烦了
    还是感谢楼主
    jsq2627
        90
    jsq2627  
    OP
       4 天前
    @cbigame0205 不会被覆盖,opkg 在升级时会保留 /etc/config 下被修改的文件不被覆盖
    jsq2627
        91
    jsq2627  
    OP
       4 天前
    @cbigame0205 我后面有时间会去测试和适配 24.10 的,作为主流版本肯定不会不管
    cbigame0205
        92
    cbigame0205  
       4 天前
    好的,反正 star 项目了,后面再关注,感谢
    jessechoi
        93
    jessechoi  
       4 天前
    @jsq2627 我的是 istoreOS ,istore 里有 udpxy 、msd_lite 一键安装运行后很适合小白用户,希望以后 rtp2httpd 也能上架!
    jsq2627
        94
    jsq2627  
    OP
       12 小时 2 分钟前
    @dream7758522 现在重新运行遍一键安装脚本就可以升级
    jsq2627
        95
    jsq2627  
    OP
       12 小时 1 分钟前
    @yutian12345
    @yeh

    最新版已经去掉对 MSG_ZEROCOPY 的依赖,现在可以在老内核上运行了
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   1530 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 16:17 · PVG 00:17 · LAX 09:17 · JFK 12:17
    ♥ Do have faith in what you're doing.