也算是折腾各种壳子和源的老玩家了,初中那会就天天村里转大锅卫星接收器的,工作后闲暇之余折腾各种壳子和各种源,因为自己也是程序员,一直有一个自己写个自研内核壳子的念头。手头也有 Android tv 和 apple Tv 的盒子。
为什么自己写内核
一直都很喜欢俄罗斯的 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 ),同名频道自动合并成多条线路
遇到播不了的源,App 里有「问题反馈」,开启后会把播放日志传上来(地址、IP 都在本地哈希掉,不会上传原文),方便我定位问题。
全 Apple 平台
- iPhone 、ipad 、carplay 、apple tv 、mac (晚点上架)
其他
- 因为纯自研,没有集成各种杂包,目前安装包只有 3-4M 左右,但使用过的朋友反馈起播非常快
官网: https://tivimini.app/ ,app 名字叫:TiviMini 对这方面有兴趣的 V 友可以安装了玩一下,在 ios 和 apple tv 商店都可以搜索到。