場景
視頻直播是需要您在推流端,通過推流工具或者推流SDK將RTMP視頻流推向視頻中心(即視頻直播提供的推流地址video-center.alivecdn.com
)。推流方法參考推流設置與操作,但是您可能遇到按照上述文檔操作無法成功推流的問題。本文檔中羅列了視頻推流過程中的常見問題,建議您按照下述的排查思路依次分析。
排查
客戶端推流方式錯誤
請檢查您的流設置中的URL和流名稱是否填寫錯誤。
說明此處以OBS工具的設置為例,現場以實際情況為準。
其中的URL是包括視頻中心以及AppName;而流名稱包括StreamName和QueryString參數(主要包括vhost參數,如果開啟鑒權則需要添加鑒權auth_key參數)。
請檢查客戶端推流工具的設置問題,常見的推流工具包括OBS、ffmpeg以及Adobe Flash Media Live Encoder軟件。建議您使用上述工具測試推流是否正常,如果正常請您查看原有推流方式的問題。
說明OBS的推流設置建議參見OBS推流工具。
如果其他推流工具正常,則說明是推流客戶端設置問題,請對比檢查不一致的設置項并嘗試調整。
音視頻編碼不合規
視頻直播要求H.264的視頻流和ACC的音頻流編碼格式,您需自行保證編碼格式滿足上述要求,否則會在直播過程中不同的播流協議可能產生問題。
您可以參考以下命令,通過ffmpeg工具查看流編碼格式。
ffmpeg -i rtmp://[$Your_Domain]/[$App_Name]/[$Stream_Name]
[$Your_Domain]:推流域名。
[$App_Name]:推流地址中的AppName。
[$Stream_Name]:推流地址中的StreamName。
確認您的流編碼格式符合上述要求。
達到推流路數限制
視頻直播服務對每個用戶的直播域名和單個域名的并發推流路數均有限制。單個賬號限制創建20個直播域名,直播中心為北京、上海、深圳時,默認每個直播加速域名可并發推送300個原始(未轉碼)直播流。每個直播域名限制300路并發推流。其他直播中心默認每個直播加速域名可并發推送50個原始(未轉碼)直播流。如果您推流并發路數超過該限制,就會導致推流失敗。
另外,如果對應的AppName配置了實時轉碼的話,直播中心為北京、上海、深圳時,每個域名下最多支持300路轉碼并發流,也就是一個域名下最多同時輸出300路轉碼流。其他直播中心每個域名下最多支持50路轉碼并發流。如果您推流并發路數超過該限制,就會導致推流失敗。
如果您需要查看當前并發的推流路數,請參見直播流管理。
說明具體推流路數限制以及解除限制方式,可參考使用限制。
此直播流名被禁推
視頻直播提供了禁止推送某個AppName和StreamName對應直播流的功能。如果推流地址被加入黑名單,將導致無法推流成功。請檢查無法推流的推流地址是否在黑名單中。
您可以通過調用DescribeLiveStreamsBlockList接口,獲取指定域名下被禁推的直播流信息。
若要恢復直播流,您可以:
在控制臺的流管理頁面,單擊對應直播流右側恢復。
調用ResumeLiveStream接口,恢復直播流。
鑒權失敗
當您開啟鑒權功能后,該域名的推流和播流都將需要加上鑒權auth_key參數。如果該鑒權參數過期或者簽名參數不正確將導致推流失敗,詳情請參見URL鑒權。
網絡異常
推流端是需要將直播流通過RTMP協議推送到直播中心,因此如果該段網絡出現問題是有可能出現推流異常,建議您先通過如下兩種方式自查:
在推流端
ping
推流地址,測試是否有丟包。如果存在丟包,請聯系網絡運營商進行排查。在推流端通過
telnet
命令測試推流域名的1935端口是否可以正常連接。如果無法連接,請嘗試使用不同網絡環境測試,確認是否本地網絡存在異常。
推流時間戳使用了擴展字段
客戶端推流對于視頻幀和音頻幀都會帶有兩個時間戳,分別是pkt_pts和pkt_dts,分別表示幀顯示時間戳和幀解碼時間戳,您可以通過
ffprobe
命令查看(具體命令ffprobe -show_frames rtmp://live.zhibotest.com/AppName/StreamName
),部分結果如下圖。其中的時間戳是可以轉換為二進制,若時間戳大于24位,讓推流客戶端確認下是否視頻幀大于max size,存在一幀包含多個chunk的情況。若是,修改推流客戶端,修改為將時間戳加到每個chunk上,或者強制將pts值改小可解。
其他
如果上述方法均無法解決該問題,請您提交工單。關于如何提交工單,請參見聯系我們。并提供下述信息,以便對應的技術支持工程師協助解決問題:
推流地址與播流地址。
推流方式(使用什么工具推流/如何推流)。
推流異常時,推流端出現怎樣的異常提示。
ping推流域名的IP截圖。
telnet推流域名1935端口的結果截圖。