情境
ApsaraVideo for Live是需要您在推流端,通過推流工具或者推流SDK將RTMP視頻流推向視頻中心(即ApsaraVideo for Live提供的推流地址video-center.alivecdn.com)。推流方法參考推流設定與操作,但是您可能遇到按照上述文檔操作無法成功推流的問題。本文檔中羅列了視頻推流過程中的常見問題,建議您按照下述的排查思路依次分析。
排查
用戶端推流方式錯誤
請檢查您的流設定中的URL和流名稱是否填寫錯誤。
說明此處以OBS工具的設定為例,現場以實際情況為準。
其中的URL是包括視頻中心以及AppName;而流名稱包括StreamName和QueryString參數(主要包括vhost參數,如果開啟鑒權則需要添加鑒權auth_key參數)。
將流類型設為自訂流媒體伺服器,URL 中填寫推流地址,例如
rtmp://push.aliyunlive.com/app/;流名稱中填寫帶鑒權密鑰的流名稱,例如stream?auth_key=xxx。請檢查用戶端推流工具的設定問題,常見的推流工具包括OBS、ffmpeg以及Adobe Flash Media Live Encoder軟體。建議您使用上述工具測試推流是否正常,如果正常請您查看原有推流方式的問題。
說明OBS的推流設定建議參見OBS推流工具。
如果其他推流工具正常,則說明是推流用戶端設定問題,請對比檢查不一致的設定項並嘗試調整。
音視頻編碼不合規
ApsaraVideo for Live要求H.264的視頻流和ACC的音頻流編碼格式,您需自行保證編碼格式滿足上述要求,否則會在直播過程中不同的播流協議可能產生問題。
您可以參考以下命令,通過ffmpeg工具查看流編碼格式。
ffmpeg -i rtmp://[$Your_Domain]/[$App_Name]/[$Stream_Name][$Your_Domain]:推流網域名稱。
[$App_Name]:推流地址中的AppName。
[$Stream_Name]:推流地址中的StreamName。
確認您的流編碼格式符合上述要求。
D:\常用工具\ffmpeg\bin>ffmpeg -i rtmp://xxx/AppName/StreamName ffmpeg version N-79143-g8ff0f6a Copyright (c) 2000-2016 the FFmpeg developers built with gcc 5.3.0 (GCC) configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libdcadec --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmfx --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzing --enable-lzma --enable-decklink --enable-zlib libavutil 55. 19.100 / 55. 19.100 libavcodec 57. 30.100 / 57. 30.100 libavformat 57. 29.101 / 57. 29.101 libavdevice 57. 0.101 / 57. 0.101 libavfilter 6. 40.102 / 6. 40.102 libswscale 4. 0.100 / 4. 0.100 libswresample 2. 0.101 / 2. 0.101 libpostproc 54. 0.100 / 54. 0.100 Metadata: Server Tengine width 720.00 height 540.00 displayWidth 720.00 displayHeight 540.00 duration 0.00 framerate 24.00 videodatarate 300.00 videocodecid 7.00 audiodatarate 62.00 audiocodecid 10.00 via liveproxy010182174197.eu6,livesource010182170179.eu6,livesource010182170179.eu6,liveproxy010182169150.eu6,cache13.l2nu17-1[328,75,444,MISS],cache19.l2nu17-1[444,-1,655,MISS],cache7.cn396[713,52,805,MISS],cache6.cn396[805,2,1006,MISS] begints 23258.00 alilive_streamid dc xxx.cn/AppName/StreamName videocodecreal 0.00 key_ts: Input #0, flv, from 'rtmp://dc xxx.cn/AppName/StreamName': Metadata: Server : Tengine displayWidth : 720 displayHeight : 540 fps : 24 profile : level : via : liveproxy010182174197.eu6,livesource010182170179.eu6,livesource010182170179.eu6,liveproxy010182169150.eu6,cache13.l2nu17-1[328,75,444,MISS],cache19.l2nu17-1[444,-1,655,MISS],cache7.cn396[713,52,805,MISS],cache6.cn396[805,2,1006,MISS] begints : 23258 alilive_streamid: dc xxx.cn/AppName/StreamName videocodecreal : 0 Duration: 00:00:00.00, start: 20.843000, bitrate: N/A Stream #0:0: Video: h264 (High), yuv420p, 720x540 [SAR 1:1 DAR 4:3], 307 kb/s, 24.42 fps, 24 tbr, 1k tbn, 48 tbc Stream #0:1: Audio: aac (LC), 22050 Hz, stereo, fltp, 63 kb/s達到推流路數限制
ApsaraVideo for Live服務對每個使用者的直播網域名稱和單個網域名稱的並發推流路數均有限制。單個帳號限制建立20個直播網域名稱,直播中心為北京、上海、深圳時,預設每個直播加速網域名稱可並發推送300個原始(未轉碼)直播流。每個直播網域名稱限制300路並發推流。其他直播中心預設每個直播加速網域名稱可並發推送50個原始(未轉碼)直播流。如果您推流並發路數超過該限制,就會導致推流失敗。
另外,如果對應的AppName配置了即時轉碼的話,直播中心為北京、上海、深圳時,每個網域名稱下最多支援300路轉碼並發流,也就是一個網域名稱下最多同時輸出300路轉碼流。其他直播中心每個網域名稱下最多支援50路轉碼並發流。如果您推流並發路數超過該限制,就會導致推流失敗。
如果您需要查看當前並發的推流路數,請參見直播流管理。
說明具體推流路數限制以及釋放保留方式,可參考使用限制。
此直播流名被禁推
ApsaraVideo for Live提供了禁止推送某個AppName和StreamName對應直播流的功能。如果推流地址被加入黑名單,將導致無法推流成功。請檢查無法推流的推流地址是否在黑名單中。
您可以通過調用DescribeLiveStreamsBlockList介面,擷取指定網域名稱下被禁推的直播流資訊。
若要恢複直播流,您可以:
在控制台的流管理頁面,單擊對應直播流右側復原。
調用ResumeLiveStream介面,恢複直播流。
鑒權失敗
當您開啟鑒權功能後,該網域名稱的推流和播流都將需要加上鑒權auth_key參數。如果該鑒權參數到期或者簽名參數不正確將導致推流失敗,詳情請參見推/播流地址鑒權。
網路異常
推流端是需要將直播流通過RTMP協議推送到直播中心,因此如果該段網路出現問題是有可能出現推流異常,建議您先通過如下兩種方式自查:
在推流端
ping推流地址,測試是否有丟包。如果存在丟包,請聯絡網路電訊廠商進行排查。在推流端通過
telnet命令測試推流網域名稱的1935連接埠是否可以正常串連。如果無法串連,請嘗試使用不同網路環境測試,確認是否本網存在異常。
推流時間戳記使用了擴充欄位
用戶端推流對於視訊框架和音訊框架都會帶有兩個時間戳記,分別是pkt_pts和pkt_dts,分別表示幀顯示時間戳記和幀解碼時間戳記,您可以通過
ffprobe命令查看(具體命令ffprobe -show_frames rtmp://live.zhibotest.com/AppName/StreamName),部分結果如下。其中
pkt_pts和pkt_dts時間戳記(毫秒)轉換成二進位後如果超過 31 位,可能出現用戶端不相容的情況。width和height表示視頻解析度,pict_type表示框架類型(視訊框架分為 B、P、I 幀,僅視訊框架具有此屬性)。[/FRAME] [FRAME] media_type=video stream_index=1 key_frame=0 pkt_pts=100766 pkt_pts_time=100.766000 pkt_dts=100766 pkt_dts_time=100.766000 best_effort_timestamp=100766 best_effort_timestamp_time=100.766000 pkt_duration=33 pkt_duration_time=0.033000 pkt_pos=255797 pkt_size=10406 width=1280 height=720 pix_fmt=yuv420p sample_aspect_ratio=N/A pict_type=B coded_picture_number=23 display_picture_number=0 interlaced_frame=0 top_field_first=0 repeat_pict=0 color_range=unknown color_space=unknown color_primaries=unknown color_transfer=unknown chroma_location=left [/FRAME] [FRAME] media_type=audio其中的時間戳記是可以轉換為二進位,若時間戳記大於24位,讓推流用戶端確認下是否視訊框架大於max size,存在一幀包含多個chunk的情況。若是,修改推流用戶端,修改為將時間戳記加到每個chunk上,或者強制將pts值改小可解。
其他
如果上述方法均無法解決該問題,請您提交工單。關於如何提交工單,請參見聯絡我們。並提供下述資訊,以便對應的支援人員工程師協助解決問題:
推流地址與播流地址。
推流方式(使用什麼工具推流/如何推流)。
推流異常時,推流端出現怎樣的異常提示。
ping推流網域名稱的IP截圖。
telnet推流網域名稱1935連接埠的結果截圖。