對於即時和視頻點播(VOD)媒體,TVSDK通過下載與中解析度比特率相關聯的播放清單開始播放並下載由該播放清單定義的媒體段。 它快速選擇高解析度比特率播放清單及其相關媒體並繼續下載過程。
當缺少整個播放清單時,例如,當在頂級清單檔案中指定的M3U8檔案未下載時,TVSDK會嘗試恢復。 如果無法恢復,則應用程式將確定下一步。
如果缺少與中解析度位速率關聯的播放清單,TVSDK將搜索相同解析度的變型播放清單。 如果找到相同的解析度,TVSDK將開始從匹配位置下載變型播放清單和段。 如果播放器找不到相同的解析度播放清單,它將嘗試循環播放其他比特率播放清單及其變體。 立即降低比特率是首選,然後是其變數,等等。 如果在嘗試查找有效播放清單時已用盡所有低比特率播放清單及其變體,則TVSDK將轉到最高比特率並從那裡計算下來。 如果找不到有效的播放清單,則進程將失敗,並且播放器將移到ERROR狀態。
您的應用程式可以確定如何處理此情況。 例如,您可能希望關閉播放器活動並將用戶引導到目錄活動。 感興趣的事件是 STATUS_CHANGED
事件,相應的回調是 onStatusChanged
的雙曲餘切值。 此代碼監視玩家是否將其內部狀態更改為 ERROR
:
...
case ERROR:
getActivity().finish(); // this is where we close the current activity (the Player activity)
break;
...
當缺少段時,例如,當特定段無法下載時,TVSDK會嘗試通過各種故障轉移嘗試進行恢復。 如果無法恢復,則會發出錯誤。
如果伺服器上缺少段,因為(例如)清單檔案不存在、無法下載段等,TVSDK會嘗試通過以下選項進行故障轉移:
當TVSDK無法獲取替代段時,它將觸發 CONTENT_ERROR
錯誤通知。 此通知包含一個內部通知, DOWNLOAD_ERROR
代碼。 如果出現問題的流是備用音頻軌道,TVSDK將生成 AUDIO_TRACK_ERROR
錯誤通知。
如果視頻引擎連續無法獲取段,它將連續段跳轉限制為5,然後停止播放,TVSDK發出 NATIVE_ERROR
5號密碼。
限制
以下是您應注意的一些限制:
在發生故障切換時,不考慮自適應比特率(ABR)控制參數。
這是因為故障切換機制設計為將當前可用的任何播放清單用作備份流,而不管其比特率配置檔案如何。
在故障轉移操作期間,可以有一個配置式交換機。
如果在下載其中一個播放清單段期間發生錯誤,則忽略ABR控制參數,如允許的最小/最大比特率。