ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

my-tv 电视直播应用上手:遥控器换台、数字选台到 EPG,5 分钟装好就能看

my-tv 电视直播应用上手:遥控器换台、数字选台到 EPG,5 分钟装好就能看 my-tv 电视直播应用上手遥控器换台、数字选台到 EPG5 分钟装好就能看【免费下载链接】my-tv我的电视 电视直播软件安装即可使用项目地址: https://gitcode.com/GitHub_Trending/my/my-tv家里的智能电视装了十几个视频 App想直接看个直播却总被会员页和广告拦住。my-tv 是一个 Android 电视直播应用定位就一句话安装即可使用——装上 APK遥控器上下键换台、数字键直选频道央视和地方卫视的直播流和节目单全部内置在应用里不需要注册、不需要登录。这篇文章从你按下遥控器第一个键开始讲清楚它是怎么工作的频道表怎么组织、播放地址怎么拿到、按键怎么映射以及遇到黑屏、看不了某台时该怎么排查。从一次换台开始应用启动后发生了什么打开 App 后你会看到直播画面同时左上角有频道信息条、右上角有时间。按一次上/下就换台按数字键直接跳到对应频道这个体验背后是一条固定的启动链路MainActivity把 6 个 Fragment 全部add进同一个容器初始只显示播放器其余隐藏见 MainActivity.kt 的onCreateMainFragment基于 Leanback 的BrowseSupportFragment加载频道列表Leanback 是 Android TV 官方的大屏交互库提供焦点管理和卡片列表每个频道对应一个TVViewModel负责该频道的播放地址、EPG电子节目单和重试计数ready 6时判定启动就绪界面才允许换台这个播放器常开、其余界面浮层的结构是换台不黑屏的关键切台只是换 URL播放器实例不销毁。频道表怎么组织一条数据决定一台台所有频道定义在 TVList.kt 里按央视 / 地方 / 港澳台 / 国际四组懒加载。每个频道是一条TV数据字段不多但各管一摊TV( 0, CCTV1 综合, CCTV1, listOf(), 央视, ...webp, // logo 600001859, // pid换播放地址用 2022576801, // sid拉节目单用 ProgramType.Y_PROTO, false, // needToken mustToken false )三个字段值得记住pid / sid上游接口的节目身份证播放和 EPG 都靠它们programTypeY_PROTO/Y_JCE/F决定走哪套取流协议不同频道的接口结构不一样needToken / mustToken该频道是否需要先换令牌再取地址、令牌失效时能否降级重试构建列表时会给每个频道分配全局连续id从 0 开始——这就是你按1能选到第 1 台的依据。改频道顺序或增删台只动这一个文件即可。关键实现逐条拆1. 遥控器按键全映射兼容各家遥控器不同电视厂商遥控器上菜单键的 keyCode 不一样。项目在 MainActivity.kt 的onKeyDown里把 6 个可能值全部指向同一个动作保证任何盒子都能打开设置when (keyCode) { KeyEvent.KEYCODE_0 - showChannel(0) // 数字键直选台 KeyEvent.KEYCODE_DPAD_UP - channelUp() // 上键换上一台 KeyEvent.KEYCODE_DPAD_DOWN - channelDown() // 下键换下一台 KeyEvent.KEYCODE_DPAD_LEFT - switchMainFragment() // 左键频道列表 KeyEvent.KEYCODE_DPAD_RIGHT - showSetting() // 右键设置 KeyEvent.KEYCODE_BACK - back() // 连按两次退出 }BOOKMARK、HELP、SETTINGS、MENU、UNKNOWN也都映射到showSetting()——这是很多菜单键无效投诉的通用解法。返回值用你电视原装遥控器实测左、右、上、下四键应该分别对应列表、设置、上下换台。2. 播放地址是先换令牌再取流失败自动重试直播地址不能硬编码每次都要向服务端换取。Request.kt 里的流程是fetchAuth换 token →fetchVideo取 playurl再从中解析出加密参数拼出最终 URL。每个环节失败都会累加retryTimes上限 8 次retryMaxTimes 8定义在 TVViewModel.kt令牌类失败走独立的tokenYSPRetryTimes计数耗尽后对mustTokenfalse的频道降级为无令牌请求。拿到地址后还有一个容易被忽略的细节BtraceRunnable每60 秒发一次心跳上报handler.postDelayed(btraceRunnable, 60 * 1000)用于维持地址有效性。你长时间看同一个台不卡靠的就是这个后台循环。3. 播放器强制 16:9盒子机型有降级方案PlayerFragment.kt 里写死了aspectRatio 16f / 9f视频尺寸回调时如果屏幕宽高比与 16:9 不符就按短边收缩播放器尺寸避免在 16:10 面板的电视上画面被拉变形v1.2.8 就是专门兼容这类分辨率的。另外它做了双播放器默认用 media3 的ExoPlayer检测到天猫魔盒Utils.isTmallDevice()则切换到SurfaceView SimpleExoPlayer老方案——这是针对个别盒子硬解异常的兜底。播放出错时回调tvViewModel.changed()会触发重新取地址而不是让你盯着黑屏。4. 界面 10 秒自动隐藏频道记忆存本地换台时弹出的信息条、频道列表10 秒不操作就自动收起delayHideMain 10000见MainActivity设置页同理。退出前你在哪一台下次启动回到哪一台靠的是 SP.kt 里的itemPositionSharedPreferences 存取无需网络。设置页还提供换台方向反转channelReversal上键下一台的习惯也能适应。5. 频道列表是 Leanback 的行列结构MainFragment把四组频道装进ArrayObjectAdapter的ListRow支持网格 / 行两种样式切换SP.grid重启后生效见 TVListViewModel.kt 的数据供给。列表样式只影响浏览体验不影响换台链路。常见坑与对策打开黑屏或提示状态错误现象启动后画面一直黑着或弹出状态错误原因这类取流接口对时间敏感设备系统时间不准很多盒子常年不走 NTP会直接让鉴权失败。v1.5.6 更新日志里就专门修了系统时间不对导致播放失败处理进设置页右键点恢复默认它会同步系统时间或在电视系统设置里先校准时间再打开 App某些台提示应版权方要求暂停提供直播信号现象个别频道不重试直接弹错误文案原因服务端返回了明确的errinfoRequest.kt 里对该文案做了特判走setErrInfo而不是重试——这是上游信号停了不是你的网络问题处理换台即可这类提示别反复刷等待上游恢复换台后频道号 / 列表一直挡在屏幕上现象切完台信息条不消失原因自动隐藏任务被某些按键路径打断v1.5.2 / v1.5.5 修过同类问题处理按一次返回键back()会优先执行隐藏当前浮层而不是退出或升级最新版电视装不了或重启后不自动打开现象应用商店里找不到U 盘安装失败部分盒子重启后需手动点开原因电视没有开放应用商店安装源自动开机依赖系统对BootReceiver的放行README 里记录了斐讯 N1Android 7.1.2无法自启处理优先 U 盘安装小米电视可用小米电视助手装电视开了 ADB 的话执行adb install my-tv.apk自启失败就设电视开机自启应用上手清单按顺序做一遍每步 1 分钟下载最新版 APK从项目发布页获取U 盘拷入电视存储用文件管理器安装或adb install my-tv.apk打开 App确认画面出流、左上角有频道信息按上 / 下键换台按数字键 1~9 验证直选按左键出频道列表右键进设置在设置里按需打开频道号显示、时间显示、开机自启、换台方向反转看不了某台时先右键进设置点恢复默认同步时间再试一次验证退出连按两次返回键第二次才会真正退出全部通过后这台电视就多了一个 5 个键就能看完所有直播的入口。延伸资源与小结安装方式和已知设备问题README.mdTODO 里列了音量调节、软解等计划中功能每个版本的修复记录HISTORY.md排障前先查这里往往能对上号频道数据TVList.kt取流与重试Request.kt界面骨架MainFragment.kt、PlayerFragment.kt小结my-tv 把看电视压缩成了一条很短的链路——本地频道表定台、令牌换流带 8 次重试、播放器强制 16:9 常开、按键全映射。它解决的不是功能多少而是把打开就能看做到位。想继续深入建议顺着TVViewModel的 LiveDatavideoUrl/ready/change三个信号读完一次完整换台的数据流向那是这个应用最核心的一段代码。【免费下载链接】my-tv我的电视 电视直播软件安装即可使用项目地址: https://gitcode.com/GitHub_Trending/my/my-tv创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表