Update:
小白或者不想折腾的用户可以直接使用 http://ip:port/itv_proxy.m3u 订阅,无需 nginx 或者 dns 配置,流量全部经过 pixman 代理,这种方式建议运行在家中内网设备上。
下面的方法需要一些动手能力,根据你的情况来选择。
中国移动 iTV 平台目前可用的直播系列有以下几种:
对应的 m3u8 域名为: gslbserv.itv.cmvideo.cn,访问后会 302 跳转到 cache.ott.{CHANNEL_ID}.itv.cmvideo.cn 这样的域名。
而 cache.ott 开头的这个域名在非移动网络下会被解析到 1.1.1.1 这个 cloudflare 的 dns 服务 ip,所以无法访问,但是我们可以手动将这个域名映射到移动网络下响应的 CDN 节点 ip,然而这样带来的一个新问题就是 ip 可能会变动,当很多人使用同一个 ip 可能会导致此 CDN 节点负载太高。
所以我这边购买了 dnsany.com 这个域名,定时同步中国移动 ott 域名在全国各个大区的 CDN 列表,按照大区分区域解析,用户只需要将域名映射到 dnsany.com 这个域名上,就可以一劳永逸地观看 iTV 平台直播,也不用担心 ip 失效。
声明: 禁止将 dnsany.com 域名使用在其他项目中,否则将停止解析。

目前 pixman/pixman 镜像已内置我整理过的 iTV 可用频道列表 (去掉了购物频道、低于 1080p、重复质量的频道),如果你有更高质量的 id 或者其他频道,可以在评论区回复,我将更新到镜像内置源里。
对于播放设备来说,需要将 iTV ott 的域名指向 dnsany.com 对应的域名,比较方便的方式是使用代理软件,因为系统默认的 hosts 格式必须是 ip 地址 {TAB} 域名 的形式,一般不会支持 域名 {TAB} 域名 这种别名的方式。除了使用代理软件,还有一些其他方式,我也列在帖子后面。
映射域名后,订阅链接就是 http://ip:port/itv.m3u,pixman 不会代理 ts 请求。
根据你实际情况来选择,如果下面没有列出某个软件,你可以在评论区回复我配置方式。
Ps: 不管任何代理软件,都需要将 dnsany.com 和 cmvideo.cn 这两个主域名列入直连分流,比如
DOMAIN-SUFFIX,cmvideo.cn,DIRECT
DOMAIN-SUFFIX,dnsany.com,DIRECT
文档: https://manual.nssurge.com/dns/local-dns-mapping.html
[Host]
cache.ott.ystenlive.itv.cmvideo.cn = pixman.io.ystenlive.dnsany.com
cache.ott.bestlive.itv.cmvideo.cn = pixman.io.bestlive.dnsany.com
cache.ott.wasulive.itv.cmvideo.cn = pixman.io.wasulive.dnsany.com
cache.ott.fifalive.itv.cmvideo.cn = pixman.io.fifalive.dnsany.com
cache.ott.hnbblive.itv.cmvideo.cn = pixman.io.hnbblive.dnsany.com
文档: https://wiki.metacubex.one/config/dns/hosts/
# 开启 TCP 并发连接可使用延迟最低的 CDN 节点
tcp-concurrent: true
use-hosts: true
hosts:
cache.ott.ystenlive.itv.cmvideo.cn: pixman.io.ystenlive.dnsany.com
cache.ott.bestlive.itv.cmvideo.cn: pixman.io.bestlive.dnsany.com
cache.ott.wasulive.itv.cmvideo.cn: pixman.io.wasulive.dnsany.com
cache.ott.fifalive.itv.cmvideo.cn: pixman.io.fifalive.dnsany.com
cache.ott.hnbblive.itv.cmvideo.cn: pixman.io.hnbblive.dnsany.com
APP 首页底部配置页面,Hosts,新增 Host 映射,类型选择 本地值,域名填写 cache.ott.ystenlive.itv.cmvideo.cn,本地值填写 pixman.io.ystenlive.dnsany.com,保存,然后再次新增映射,总共五个域名都要映射一下,对应关系参考上面 Clash Meta 的配置
[dns]
alias = /cache.ott.ystenlive.itv.cmvideo.cn/pixman.io.ystenlive.dnsany.com
alias = /cache.ott.bestlive.itv.cmvideo.cn/pixman.io.bestlive.dnsany.com
alias = /cache.ott.wasulive.itv.cmvideo.cn/pixman.io.wasulive.dnsany.com
alias = /cache.ott.fifalive.itv.cmvideo.cn/pixman.io.fifalive.dnsany.com
alias = /cache.ott.hnbblive.itv.cmvideo.cn/pixman.io.hnbblive.dnsany.com
如果以上代理软件的方法全部不能使用,那可以直接将 IP 写入 Hosts 文件,最好是每个域名都找一个 ip 映射,命令类似
$ ping pixman.io.ystenlive.dnsany.com
从响应的 ip 里随便选一个,然后修改 Hosts 文件类似:
1.1.1.1 cache.ott.ystenlive.itv.cmvideo.cn
2.2.2.2 cache.ott.bestlive.itv.cmvideo.cn
3.3.3.3 cache.ott.wasulive.itv.cmvideo.cn
4.4.4.4 cache.ott.fifalive.itv.cmvideo.cn
5.5.5.5 cache.ott.hnbblive.itv.cmvideo.cn
这个方法有个缺点,就是 ip 可能会变化,如果一个 CDN ip 失效了,那只能修改 Hosts 为新的 ip
同时此方法也可用于非 Clash Meta 内核的 Clash 代理软件,配置文件类似:
hosts:
cache.ott.ystenlive.itv.cmvideo.cn: 1.1.1.1
cache.ott.bestlive.itv.cmvideo.cn: 2.2.2.2
cache.ott.wasulive.itv.cmvideo.cn: 3.3.3.3
cache.ott.fifalive.itv.cmvideo.cn: 4.4.4.4
cache.ott.hnbblive.itv.cmvideo.cn: 5.5.5.5
以上就是三网通用的播放移动 iTV 平台的方法,Enjoy it ~

辽宁沈阳,联通,已更新到最新镜像。 群晖nas搭建的Docker容器,软路由关闭代理,各直播源都能正常播放;开启代理,除iTV源之外,其他直播源都正常。
订阅 http://ip:port/itv_proxy.m3u,播放,然后 docker logs pixman 看看日志显示什么
[2024-07-15 02:29:31,708] ERROR in app: Request failed: HTTPConnectionPool(host='gslbserv.itv.cmvideo.cn', port=80): Max retries exceeded with url: /1000000005000025222/1.m3u8?channel-id=ystenlive&Contentid=1000000005000025222&livemode=1&stbId=3 (Caused by ConnectTimeoutError(, 'Connection to gslbserv.itv.cmvideo.cn timed out. (connect timeout=5)')), retrying... [2024-07-15 02:29:27,284] ERROR in app: Request failed: HTTPConnectionPool(host='pixman.io.ystenlive.dnsany.com', port=80): Max retries exceeded with url: /000000001000/1000000005000025222/1.m3u8?channel-id=ystenlive&Contentid=1000000005000025222&livemode=1&stbId=3&version=1.0&owaccmark=1000000005000025222&owchid=ystenlive&owsid=9345551721010170194&AuthInfo=7W4vzMPHMH4yEQv566B4OXNzI7oRgoZMjzFoYcaMONfOuXMLDCwL9Tn%2Bfigar0ngLgD%2Bv22RkFh%2BAr5hjHGp3A%3D%3D (Caused by ConnectTimeoutError(, 'Connection to pixman.io.ystenlive.dnsany.com timed out. (connect timeout=5)')), retrying... [2024-07-15 02:29:25,990] ERROR in app: Request failed: HTTPConnectionPool(host='gslbserv.itv.cmvideo.cn', port=80): Max retries exceeded with url: /1000000005000025222/1.m3u8?channel-id=ystenlive&Contentid=1000000005000025222&livemode=1&stbId=3 (Caused by ConnectTimeoutError(, 'Connection to gslbserv.itv.cmvideo.cn timed out. (connect timeout=5)')), retrying...
看样子你连接这个 gslbserv.itv.cmvideo.cn 都连不上,你本地命令行测试 curl "http://gslbserv.itv.cmvideo.cn/1000000005000025222/1.m3u8?channel-id=ystenlive&Contentid=1000000005000025222&livemode=1&stbId=3" -I 试试看响应头是不是 302;
检查你的代理规则,确保下面两个域名走直连
- DOMAIN-SUFFIX,dnsany.com,DIRECT
- DOMAIN-SUFFIX,cmvideo.cn,DIRECT
几种方法都试过了,仍然播放不了,广州联通,docker日志显示Request failed: 530 Server Error: for url: http://pixman.io.wasulive.dnsany.com/000000001000/6000000001000029752/1.m3u8?channel-id=wasusyt&Contentid=6000000001000029752&livemode=1&stbId=3&version=1.0&owaccmark=6000000001000029752&owchid=wasusyt&owsid=6092411722517576861&AuthInfo=OatDdEPv1G11e5QFE1FEVIf0mgdCCBEBXjzqN5yeng9vpUO249gn3xDaSPgBZ%2FUmTJ1xmJaSayg2rSXrFCo0uTw8siJGLdNJr1Qdg3PcAuI%3D, retrying...
itv_proxy.m3u请求的地址是内网地址,在浏览器打开是如下地址,并没有经过您的dns。http://127.0.0.1:5000/proxy/http/cache.ott.wasulive.itv.cmvideo.cn:80/000000001000/6000000001000029752/1.m3u8?channel-id=wasusyt&Contentid=6000000001000029752&livemode=1&stbId=3&version=1.0&owaccmark=6000000001000029752&owchid=wasusyt&owsid=9411411722915533340&AuthInfo=pc1ljUm9sa%2B0%2FvKZxi6JxRBkwvA6bi%2BpX3UrIwl4xSV%2FbyPFLc1nvp34dBeDunpmLHOfU9qbbC0nfmZ3wWdWfQ%3D%3D 另,https://github.com/youshandefeiyang/LiveRedirect/blob/main/Golang/liveurls/itv.gohost放入服务端么?这样更方便一点,麻烦了。可以类似这样将重写 clash_meta只有开启TUN模式才会走host设置
好像dns失效了 Get "http://cache.ott.wasulive.itv.cmvideo.cn:80/000000001000/6000000001000029752/1.m3u8?channel-id=wasusyt&Contentid=6000000001000029752&livemode=1&stbId=3&version=1.0&owaccmark=6000000001000029752&owchid=wasusyt&owsid=3624751722929515099&AuthInfo=oQgPgGpsRJMfIYt7hrZl1f8NkoG0i9ho53qgXDWzLd2GvgE3ZXqdcAxqeh9QNnMt51%2F1Vpql0aWIFVtp0ijg2Q%3D%3D:" dial tcp 39.135.227.74:80: i/o timeout
用itv_proxy.m3u的地址请求出错,以前正常的。docker pixman错误日志 [2024-08-06 07:54:08,787] ERROR in app: Request failed: HTTPConnectionPool(host='pixman.io.wasulive.dnsany.com', port=80): Max retries exceeded with url: /000000001000/6000000001000029752/1.m3u8?channel-id=wasusyt&Contentid=6000000001000029752&livemode=1&stbId=3&version=1.0&owaccmark=6000000001000029752&owchid=wasusyt&owsid=9072121722930838176&AuthInfo=oQgPgGpsRJMfIYt7hrZl1f8NkoG0i9ho53qgXDWzLd0knAlFvMRQo7fU5DZoM4aquy6Z2hfMhj7nCkuDa12SYA%3D%3D (Caused by ConnectTimeoutError(, 'Connection to pixman.io.wasulive.dnsany.com timed out. (connect timeout=5)')), retrying... [2024-08-06 07:54:08,787] ERROR in app: Request failed after retrying
广州移动光纤,客户端是APTV(APPLE TV 4K),ITV十分稳定。就是有一个问题,很多频道重复,比如CCTV5有三个源,但是我只想用HEVC。不然使用遥控器上下换台时,一个频道要切3次才跳过,很不方便。我试过在APTV里将多余频道删除,但是一更新源就又全部刷新了。有没有办法可以自行配置或过滤源的频道呢,谢谢!!!
首先将 itv 的 m3u 下载下来,然后手动调整
导入外部的 m3u 文件,从而通过 http://ip:port/your.m3u 访问:
docker run -d --name=pixman -p 5000:5000 -v /path/to/yours:/app/app/data/m3u --restart=always pixman/pixman
# 挂载后,将 m3u 文件放到 /path/to/yours 目录下,然后通过 http://ip:port/your.m3u 访问
老哥请教一下使用了itv_proxy.m3u也影射了说明中的5个域名,但不是有问题logs报错: [2024-09-15 08:49:21,036] ERROR in app: Request failed: HTTPConnectionPool(host='gslbserv.itv.cmvideo.cn', port=80): Max retries exceeded with url: /6000000001000002116/1.m3u8?channel-id=wasusyt&Contentid=6000000001000002116&livemode=1&stbId=3 (Caused by NewConnectionError(': Failed to establish a new connection: [Errno -3] Try again')), retrying... [2024-09-15 08:49:22,178] ERROR in app: Request failed: HTTPConnectionPool(host='gslbserv.itv.cmvideo.cn', port=80): Max retries exceeded with url: /6000000001000002116/1.m3u8?channel-id=wasusyt&Contentid=6000000001000002116&livemode=1&stbId=3 (Caused by NewConnectionError(': Failed to establish a new connection: [Errno -3] Try again')), retrying... [2024-09-15 08:49:23,552] ERROR in app: Request failed: HTTPConnectionPool(host='gslbserv.itv.cmvideo.cn', port=80): Max retries exceeded with url: /6000000001000002116/1.m3u8?channel-id=wasusyt&Contentid=6000000001000002116&livemode=1&stbId=3 (Caused by NewConnectionError(': Failed to establish a new connection: [Errno -3] Try again')), retrying... [2024-09-15 08:49:26,553] ERROR in app: Request failed: HTTPConnectionPool(host='gslbserv.itv.cmvideo.cn', port=80): Max retries exceeded with url: /6000000001000002116/1.m3u8?channel-id=wasusyt&Contentid=6000000001000002116&livemode=1&stbId=3 (Caused by NewConnectionError(': Failed to establish a new connection: [Errno -3] Try again')), retrying...