本文主要介紹使用LiveChannel過程中遇到的常見問題及解決方案。
OSS livechannel推流過程
下圖為OSS livechannel推流過程圖解,瞭解推流過程後,有助於排查livechannel推流過程中遇到的問題。
更多詳情請參見PutLiveChannel、PutLiveChannelStatus。
案例:錄製M3u8缺失
問題分析:預設錄製成品的M3u8隻有最後3片,遵循了HLS協議的預設規則。
解決方案:使用PostVodPlaylist介面將指定時間範圍內的ts檔案匯聚到M3u8索引。
EndTime
必須大於StartTime
,且時間跨度不能大於1天。OSS會查詢指定時間範圍內的所有指定LiveChannel推流產生的ts檔案,並將其拼裝為一個播放清單。
案例:錄製的M3u8檔案失敗
問題分析:錄製的M3u8檔案成功推流到OSS才算錄製成功。
解決方案:建議到用戶端抓包查看是否有publish succees的標誌,此標誌表示與OSS音頻包互動成功。所以出現用戶端有推流記錄,但是沒有錄製視頻的情況,可以嘗試抓包分析。
案例:用戶端無法推流到OSS
使用ffmpeg推流不成功:
ffmpeg -re -i 0_20180525105430445.aac -acodec aac -strict -2 -f flv rtmp://xxx.oss-cn-beijing.aliyuncs.com/live/test_1000?Expires=1540458859&OSSAccessKeyId=LTAlujianb****&Signature=qwh31xQsanmao6ygCFJgo****%3D&playlistName=playlist.m3u8
解決方案:
使用ffmpeg推流不成功時,建議用最原始的命令推流,不添加複雜的參數。
推流URL中包含and符號(&)時,請使用雙引號(" ")將整個URL括起來。例如,
ffmpeg -re -i 0_20180525105430445.aac -acodec aac -strict -2 -f flv "rtmp://xxx.oss-cn-beijing.aliyuncs.com/live/test_1000?Expires=1540458859&OSSAccessKeyId=LTAlujianb****&Signature=qwh31xQsanmao6ygCFJgo****%3D&playlistName=playlist.m3u8"
。嘗試更換為OBS進行推流測試,否則無法確認是否因ffmpeg問題導致的推流失敗。
如果推流後延時較長,可以在PutLiveChannel介面中調整FragDuration和FragCount參數。
案例:錄製M3u8檔案卡頓
當轉儲類型為HLS時,寫入當前ts檔案的音視頻資料時間長度達到FragDuration
指定的時間長度後,OSS會在收到下一個主要畫面格時切換到下一個ts檔案。如果指定max(2*FragDuration, 60s)
後仍未收到下一個主要畫面格,OSS將強制切換檔案,此時可能引起播放卡頓。
案例:錄製M3u8檔案沒有音頻或視頻
以下幾種情況會出現音頻或者視頻沒有錄製的情況:
沒有發送
AVC header
或者AAC header
,請通過抓包查看。RTMP message
長度小於2或者sequence header
過小。音頻
Message
超過緩衝區大小。codec_ ctx
是解碼內容相關的關鍵資訊,如果攜帶的音視頻資料異常,也會導致錄製失敗。
案例:ffmpeg推流到OSS錄製沒有音頻
解決方案:
直接查看ffmpeg記錄的日誌,確定用戶端是否已發送
aac_header
。在用戶端進行RTMP抓包,查看用戶端是否已發送
aac_header
。