anITer/utv
多媒体与设计面向北京联通 IPTV 的 Android 直播播放器,内置组播代理、MP2/杜比音频与频道巡检。
如果你有北京联通的 IPTV 宽带,又不想用运营商机顶盒,而是想在 Android TV 盒子或手机上直接看直播,这个项目就是冲这个场景做的。它的边界很窄:内置频道表是北京联通的组播服务,不是通用 IPTV 客户端。
解决什么问题
用户想在自己已有的设备上看运营商直播频道,包括 4K 央视和北京卫视等。常见路径是先在路由器上跑 udpxy,把组播 RTP 转成 HTTP,再用播放器打开;路由器没装 udpxy,或者光猫 IPTV 口直接接盒子时,播放就断掉。换台时播放器从 GOP 中间切入,还容易出现开头几秒不正常。uTV 的做法是把组播转 HTTP 的代理放进应用里,并重写流处理流程,于是同一个应用可以走路由器 udpxy、走自己的本地网关,或者直接加入组播。最终得到的是直播播放,以及一个能记录哪些频道真正可用的扫描界面。
有什么不同
核心机制是基于 ijkplayer 的下载器与解码器池化。换台时不是拆掉播放器重建,而是回收并复用解码器实例,同时把流对齐到 PAT、PMT、首个视频 IDR 帧和 PTS 相同的音频帧。这一点最有意思:README 把换台开头几秒的半速播放归因于切在关键帧之间,并称这种对齐能解决它。播放器内置本地代理、外部 udpxy 不可达时自动回退,这在播放器应用里也不常见,等于把通常放在路由器上的工作挪到了 Android 设备上。
音频是另一个差异点。打包的 ijkplayer 库在四种 ABI 上开启了 MP2 解码,另有独立路径把 AC-3/E-AC-3 音轨交给 Android 硬件 MediaCodec 和 AudioTrack,并带 HDMI 直通回退。代价是复杂度:三种传输模式、两个播放内核、硬解与软解开关、多种渲染视图,都意味着更多设置需要调对。README 的原生巡检模式还依赖 Shell 工具链,内置频道数据来自另一个项目,列表是否及时更新不是这个应用的职责。
谁值得试
比较合适的是北京联通 IPTV 用户,手上有 Android TV 盒子,能配置路由器或绕过它,并且愿意调 udpxy 或代理设置直到画面出来。内置扫描界面尤其适合想确认频道是否可达、实际编码和分辨率是什么的人。不合适的是不在该运营商覆盖范围内的用户,因为频道表和组播地址都是北京联通专用的。想要开箱即用通用播放器的人也不适合:README 的配置前提是熟悉 udpxy 地址、组播网段和侧载 APK。如果路由器上已经跑着 udpxy,走这条文档写明的路径就可以完全不用本地代理。
使用条件与边界
系统要求是 Android 5.0 以上(minSdk 21,compileSdk 34),构建需要 JDK 8+ 和 Android SDK;README 给出了 Gradle 命令,部署通过 adb install 完成。更实际的要求是网络拓扑:外部 udpxy 地址可达,或者应用能绑定 IPTV 专网网卡来跑本地代理,或者设备网络支持 IGMP 直接收组播。三者都不满足就没有可播的流。APK 内置 arm64-v8a、armeabi-v7a、x86、x86_64 四种 ABI 的 ijkplayer/FFmpeg 原生库,在老盒子上的体积和 ABI 覆盖需要考虑。
日常维护主要围绕频道表和代理地址。内置 M3U 来自上游 bj-unicom-iptv 项目的快照,频道会变,扫描导出流程存在的原因就是可用性会漂移。这里没有独立的内容服务或订阅管理,README 也没有描述托管的频道源,所以频道失效时需要重新扫描导出。构建和安装说明见项目 README。
HotRepo 点评
2026-10-25 的记录显示,仓库当时只有 6 天,总 star 79,在 Java 新项目榜(不是总榜)排 #20。这只是跨两天样本里的一个带日期快照,无法判断后续走势。真正该先确认的是你的网络路径(udpxy、本地代理网卡或直接组播)是否对得上文档中的某一种模式,而不是默认 udpxy 地址在你的路由器上就能用。
本文由 AI 根据项目 README 生成,更新于 2026年10月25日,以项目官方文档为准。