本文介紹使用Android推流SDK可能出現的異常情況、特殊情況,及其處理辦法。
異常與錯誤處理
推流SDK主要包含以下回調:
回調類型 | 回調類名 |
推流回調 | AlivcLivePushInfoListener |
網路回調 | AlivcLivePushNetworkListener |
錯誤回調 | AlivcLivePushErrorListener |
背景音樂回調 | AlivcLivePushBGMListener |
推流回調
推流回調用於向App通知SDK相應狀態,包括預覽開始、渲染第一幀視頻、發送第一幀音視頻流、推流開始、推流停止等回調。
onPushStarted、onFirstFramePushed:表示SDK推流成功。
onPushStarted:表示串連服務端成功。
onFirstFramePushed:表示發送第一幀音視頻流成功。
網路相關回調
網路相關回調用於向App通知SDK相應網路狀態和連結狀態,其中有一些回調是App必須要對接的。
基礎模式:基礎直播情境
onConnectFail:表示推流失敗,建議檢查推流地址是否非法、是否存在非法字元、鑒權是否有問題、是否超過最大推流並發限制、是否在禁推黑名單中等,確定推流地址合法且可用後再嘗試推流。其中具體錯誤碼有0x30020901 ~ 0x30020905, 0x30010900 ~ 0x30010901。
onConnectionLost:連結斷開回調,連結斷開後SDK內部會自動重連,回拋onReconnectStart,如果超過最大重連次數(config.connectRetryCount)後推流連結還是沒有恢複,會回拋onReconnectError。
onNetworkPoor:網路慢回調,當收到此回調說明當前網路對於推流的支撐度不足,此時推流仍在繼續、沒有中斷。您可以在此處理自己的商務邏輯,比如UI提醒使用者。
onNetworkRecovery:網路恢複回調。
onReconnectError:重連失敗回調,表示重連失敗,建議檢查當前網路,待網路恢複時,重新推流。
onSendDataTimeout:送資料逾時回調,建議檢查當前網路,待網路恢複時,結束推流後重新開始推流。
onPushURLAuthenticationOverdue:推流地址鑒權即將到期會回調,如果您的推流開啟了推流鑒權功能(推流URL中帶有auth_key),我們會對推流URL做出校正。在推流URL到期前約1min,您會收到此回調,實現該回調後,您需要回傳一個新的推流URL,以此保證不會因為推流地址到期而導致推流中斷。
互動模式:直播連麥情境
onConnectFail:表示推流失敗,建議檢查連麥推流地址中token是否非法、網路是否異常等。確定推流地址合法且網路正常可用後再嘗試推流。
onConnectionStatusChange:串連狀態改變的回調,在該回調中會返回串連的相關狀態,例如網路連接斷開、建立網路連接中、網路已串連、網路連接失敗等。當回調AliLiveConnectionStatusFailed狀態時,表示連結無法恢複,建議檢查當前網路,待網路恢複後重新推流。建議在互動模式下接入該回調,以擷取串連相關狀態。
onPushURLTokenWillExpire:連麥推流地址中的token即將到期。在token到期前30秒,會觸發該回調。收到該回調後,應該及時向商務服務器請求帶有新token的連麥推流地址,並通過refreshPushURLToken介面將新的token傳入SDK。
onPushURLTokenExpired:連麥推流URL的token已經到期。該回調觸發代表token鑒權資訊已到期,需要在結束推流後使用新的token的URL重新推流。
onPusherNetworkQualityChanged:目前使用者上行網路品質回調,當上行網路品質發生變化時,會回調當前上行網路品質評級。
onConnectionLost:連結斷開回調,不同於基礎模式,在互動模式下,當觸發onConnectionLost回調時,表示串連無法恢複。建議檢查當前網路情況,並在網路恢複後重新進行推流。
錯誤回調
onSystemError:系統裝置異常回調,需要銷毀引擎重新嘗試。
onSDKError:SDK錯誤回調,需要根據錯誤碼做不同的處理:
如果錯誤碼是805438211,表示裝置效能差,編碼和渲染幀率過低,需要給主播提示,並在app層停掉處理耗時間長度的商務邏輯(比如進階美顏、動畫等)。
您需要特別處理App沒有麥克風許可權和沒有網路攝影機許可權的回調,App沒有麥克風許可權錯誤碼為268455940,App沒有網路攝影機許可權錯誤碼為268455939。
其他的暫時都只打日誌,不做其他額外操作。
背景音樂回調
onOpenFailed:背景音樂開啟失敗,檢查背景音樂開始播放介面所傳入的音樂路徑與該音樂檔案是否正確,可調用startBGMAsync重新播放。
onDownloadTimeout:背景音樂播放逾時,多出現於播放網路URL的背景音樂,提示主播檢查當前網路狀態,可調用startBGMAsync重新播放。
特殊情境處理
當網路中斷時
短時間斷網和網路切換:即短時間的網路波動或者網路切換。一般情況下,中途斷網時間長度在AlivcLivePushConfig設定的重連逾時時間長度和次數範圍之內,SDK會進行自動重連,重連成功之後將繼續推流。若您使用阿里雲播放器,建議播放器收到逾時通知之後短暫延時5s後再做重連操作。
長時間斷網:斷網時間長度超出AlivcLivePushConfig設定的重連逾時時間長度和次數範圍時,SDK自動重連失敗,此時會回調onReconnectError,在等到網路恢複之後調用reconnectAsync介面進行重連。同時播放器也要配合做重連操作。
建議您在SDK外部做網路監測。
主播端和播放端在用戶端無法進行直接通訊,需要配合服務端使用。比如主播端斷網,服務端會收到CDN的推流中斷回調,此時可以推送給播放端,主播推流中斷,播放端再做出相應處理。恢複推流同理。
阿里雲播放器重連需要先停止播放再開始播放。調用介面順序stop>prepareAndPlay。
mPlayer.stop(); mPlayer.prepareAndPlay(mUrl);
說明關於播放器請參見阿里雲播放器SDK使用說明。
後台運行和鎖屏
當App退至後台或鎖屏時,您可調用AlivcLivePusher的pause()或resume()介面,暫停或恢複推流。
對於非系統的音視訊通話,SDK會採集聲音並推送出去,您可以根據業務需求在退後台或鎖屏時調用靜音介面mAlivcLivePusher.setMute(true或false)來決定後台時是否採集音頻。
碼率設定
SDK內部有動態變化碼率策略,您可以在AlivcLivePushConfig中修改碼率預設值。根據產品需求對於視頻解析度、視頻流暢度、視頻清晰度的要求不同,對應設定的碼率範圍也不同,具體參考如下:
視頻清晰度:推流碼率越高,則視頻清晰度越高。所以推流解析度越大,所需要設定的碼率也就越大,以保證視頻清晰度。
視頻流暢度:推流碼率越高,所需要的網路頻寬越大。所以在較差的網路環境下,設定較高的碼率有可能影響視頻流暢度。