为什么自己写内核
一直都很喜欢俄罗斯的 tivimate ,无奈国内很多协议支持度有限:
- 起播慢:按下去到画面动起来要 1 秒多
- 国内 IPTV 的源五花八门,组播、udpxy 、RTSP 、各种奇怪的 TS 流,ExoPlayer 有的能播有的不行
- 电视盒子性能差,播 4K 时 CPU 占用高
所以把播放链路自己重写了一遍,叫 RustMedia:
- 协议、解封装、音画同步全部自己写,核心用 Rust ,手机和电视共用一份
- 解码只用系统的硬件解码器( MediaCodec ),不软解。设备硬解不了就直接提示,不会偷偷退回软解让手机发烫、电视卡顿
- 音频 AAC 走系统,MP2 用 Rust 自己解,AC3 / E-AC3 支持 HDMI 直通,系统没有解码器时也有兜底
- ExoPlayer 留作备用内核,遇到奇葩源可以在播放菜单里切换
实测( release 版,同一个台,5 轮取中位数):
| RustMedia | ExoPlayer | |
|---|---|---|
| 按下到第一帧 | 165 ms | 151 ms |
| 按下到画面动起来 | 264 ms | 1128 ms |
电视盒子上播 4K H.265 Main10 、50 帧、36 Mbps 的直播,0.35 秒出画面。2 万个频道的列表十几毫秒就能解析完。
协议支持
这块是重点,国内 IPTV 常见的写法基本都覆盖了:
- UDP / RTP 组播:
rtp://、udp://直接播,不需要 udpxy ,支持 fcc - HTTP-TS(含各种 udpxy / msd_lite 转出来的地址)
- HLS:TS 和 fMP4 分片都支持
- HTTP-FLV、RTMP
- RTSP:运营商 IPTV 常见的那种
- 视频:H.264 、H.265 (含 10-bit 、4K ,取决于设备的硬件解码能力),隔行 1080i 也能正常处理
- 音频:AAC 、MP2 、MP3 、AC3 、E-AC3
- 回看:兼容主流的 catchup 写法( playseek 、PLTV/TVOD 等),节目内可以拖动,播完自动接下一个
- 列表:m3u / txt ,节目单 XMLTV (支持 gzip ),同名频道自动合并成多条线路
官网: https://tivimini.app 可以自己去下载适合自己的包。