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 ~
大佬救命按照 Clash Meta 内核 的设置完成后在 iOS 的 aptv 上播所有内容都能播放,但在 android TV 的 tivimate 和 ott 软件中播放失败。。。加 ua 403 错误 不加 530 错误。顺带提一下 tptv 这个没问题哦
请教大佬,部署了 nginx,配置好 2 个文件 itv.conf 和 tptv.conf,如何共用同一个容器呢? 分别运行不行 docker run -d --name=pixman-nginx -p 8000:8000 -v /opt/pixman/nginx:/etc/nginx/conf.d --restart=always nginx docker run -d --name=pixman-nginx -p 9000:9000 -v /opt/pixman/nginx:/etc/nginx/conf.d --restart=always nginx
docker run -d --name=pixman-nginx -p 8000:8000 -v /opt/pixman/pixman.conf:/etc/nginx/conf.d/pixman.conf --restart=always nginx 这个命令更新怎么办?
使用 itv_proxy,除了 hnbblive 能正常跳转到 cache.ott.hnbblive.itv.cmvideo.cn,其它的都会跳转到 39.135.74.185 这个 ip 上面
http://ip:port/itv_proxy.m3u 订阅,无需 nginx 或者 dns 配置,流量全部经过 pixman 代理,这种方式建议运行在家中内网设备上。 这个要在哪里设置
辽宁沈阳,联通,已更新到最新镜像。 群晖 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...
感谢 Coding 大佬!修改 hosts 的确非常方便!iOS 端的代理软件非常容易操作,但 Windows 11 稍微复杂了些(v2rayN 设置没有效果),最后是直接修改系统 hosts 解决问题了,最后让 ChatGPT 写了个脚本,每天自动 ping 一次,获取结果。如何哪天播放不了了(希望 IP 不要更换太频繁,哈~),再次修改一次 hosts。 再次感谢大佬造福大众的项目!
我在 server 2022 的 wsl2 里部署的 docker,因为宿主机平时要挂 PT,没有开代理,拉取镜像时用的这个:docker stop pixman && docker rm pixman && docker rmi dockerproxy.cn/pixman/pixman && docker pull dockerproxy.cn/pixman/pixman && docker run -d --name=pixman --restart=always -p 5050:5000 -e http_proxy=http://10.0.1.1:7890 -e https_proxy=http://10.0.1.1:7890 dockerproxy.cn/pixman/pixman 10.0.1.1 上有 shellcrash 代理软件,我现在在 mac 电脑上能看,但是在 iphone 上就看不了,这是怎么回事? 还有就是,要正常收看 itv 的话,是 docker 所在宿主机还有播放终端都得同时开代理么,还是只要镜像运行起来,在播放设备里有代理环境即可?
播放设备上第二种不行呢,是不是下次拉取镜像时去掉 -e http_proxy=http://10.0.1.1:7890 -e https_proxy=http://10.0.1.1:7890这两行也没影响?
update:去掉之后重新拉取镜像,几个设备上用方案二都可以了。
大佬 镜像拉取失败 Error response from daemon: Get "https://registry-1.docker.io/v2/:" read tcp 198.18.0.1:46294->198.18.0.6:443: read: connection reset by peer
itv 支持 24 小时回放,希望能补上啦。 回放参数是
index.m3u8?channel-id=bestzb&Contentid=5000000004000002226&livemode=4&stbId=4&starttime=20241011T184900.00Z&endtime=20241011T190000.00Z
一般播放器检测到 TVOD 字段的话,就会请求类似于 playseek=20241011184900-20241011190000 的回放 URL。
我的环境是主路由没开梯子。局域网建立 AdGuard Home 服务器,用 DNS 重写功能。看 itv 的设备 dns 设成 AdGuard Home 服务器的 ip。即可观看 itv。 感谢大佬的项目。