年前装了OmniBox,真是好东西,就是电视直播这里没有好的源。
想到家里原本就用udpxy把电信的组播转了单播,信号稳定,心想可否直接上这个电信的m3u。
结果播放不了。查询了发现单播流是ts流,视频是h264,音频是mpeg2 ,OmniBox的网页播放器只支持hls流。否则可以实现在任何有浏览器的设备上看家里的IPTV了。
找了一圈现成项目,都没有解决我的需求。正好最近在玩智能体,用自然语言对话写了一个项目(ai真牛,编程平权了,门外汉也能写程序了)。
项目地址:
https://github.com/kronus09/TsToHls
主要实现了把我的电信m3u文件转换成代理m3u文件,项目调用ffmpeg,把原始的ts流视频用copy方式流切片成hls流,音频转为acc,实现了网页播放。
转换的时候我把其他格式都过滤掉了,只保留了视频是h264,音频是mpeg2的ts流。这样我的飞牛就不会卡了。
还弄了简易直播预览界面,不用OminBox也能直接播放。
项目简陋,但够我在家里用,有相同需求的同学可以试试,提提意见。

TsToHls - 直播流转码工具
将 TS 协议直播流转换为 HLS 格式的工具,让家里的iptv可在浏览器内播放,支持输出 M3U 频道订阅,使用OmniBox等项目播放更顺畅。
特性
- 📺 实时转码 TS 协议为 HLS(配合组播转单播软使用,仅保留h264的ts流切片为hls流,音频转码为acc)
- 🗂 M3U/M3U8 文件管理
- 🚀 轻量高效(只转音频,系统负载低),支持容器化部署
- 🎨 简易Web管理界面,可用页面直接播放预览
推荐安装方式
Docker Compose 部署
- 创建
docker-compose.yml 文件:
services:
tstohls:
image: ghcr.io/kronus09/tstohls:latest
container_name: tstohls
restart: unless-stopped
ports:
- "15140:15140"
volumes:
- ./m3u:/app/m3u
# 如果你需要手动上传原始 iptv.m3u 到容器,也可以映射整个根目录或特定文件
# - ./iptv.m3u:/app/iptv.m3u
tmpfs:
# 将切片目录 hls_temp 挂载到内存中
# size=512M 足以支撑 10-20 个频道同时点播(每个频道切片约占用 20-30MB)
- /app/hls_temp:size=512M,mode=1777,exec
environment:
- GIN_MODE=release
- TZ=Asia/Shanghai
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
- 启动服务:
docker-compose up -d
- 访问管理界面:
http://服务器IP:15140
配置说明
- 数据持久化:
./data/m3u 目录存储上传的 M3U 文件
- 临时存储:HLS 切片使用内存盘提高性能
- 时区:默认
Asia/Shanghai,可按需修改