
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),僅供參考