直播推流异常排查

更新时间:
复制 MD 格式

场景

视频直播是需要您在推流端,通过推流工具或者推流SDKRTMP视频流推向视频中心(即视频直播提供的推流地址video-center.alivecdn.com)。推流方法参考推流设置与操作,但是您可能遇到按照上述文档操作无法成功推流的问题。本文档中罗列了视频推流过程中的常见问题,建议您按照下述的排查思路依次分析。

排查

  • 客户端推流方式错误

    • 请检查您的流设置中的URL流名称是否填写错误。

      说明

      此处以OBS工具的设置为例,现场以实际情况为准。

      其中的URL是包括视频中心以及AppName;而流名称包括StreamNameQueryString参数(主要包括vhost参数,如果开启鉴权则需要添加鉴权auth_key参数)。

      流类型设为自定义流媒体服务器URL 中填写推流地址,例如 rtmp://push.aliyunlive.com/app/流名称中填写带鉴权密钥的流名称,例如 stream?auth_key=xxx

    • 请检查客户端推流工具的设置问题,常见的推流工具包括OBSffmpeg以及Adobe Flash Media Live Encoder软件。建议您使用上述工具测试推流是否正常,如果正常请您查看原有推流方式的问题。

      说明

      OBS的推流设置建议参见OBS推流工具

      如果其他推流工具正常,则说明是推流客户端设置问题,请对比检查不一致的设置项并尝试调整。

  • 音视频编码不合规

    视频直播要求H.264的视频流AAC的音频流编码格式,您需自行保证编码格式满足上述要求,否则会在直播过程中不同的播流协议可能产生问题。

    您可以参考以下命令,通过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
  • 达到推流路数限制

    视频直播服务对每个用户的直播域名和单个域名的并发推流路数均有限制。单个账号限制创建20个直播域名,直播中心为北京、上海、深圳时,默认每个直播加速域名可并发推送300个原始(未转码)直播流。每个直播域名限制300路并发推流。其他直播中心默认每个直播加速域名可并发推送50个原始(未转码)直播流。如果您推流并发路数超过该限制,就会导致推流失败。

    另外,如果对应的AppName配置了实时转码的话,直播中心为北京、上海、深圳时,每个域名下最多支持300路转码并发流,也就是一个域名下最多同时输出300路转码流。其他直播中心每个域名下最多支持50路转码并发流。如果您推流并发路数超过该限制,就会导致推流失败。

    如果您需要查看当前并发的推流路数,请参见直播流管理

    说明

    具体推流路数限制以及解除限制方式,可参考使用限制

  • 此直播流名被禁推

    视频直播提供了禁止推送某个AppNameStreamName对应直播流的功能。如果推流地址被加入黑名单,将导致无法推流成功。请检查无法推流的推流地址是否在黑名单中。

    若要恢复直播流,您可以:

  • 鉴权失败

    当您开启鉴权功能后,该域名的推流和播流都将需要加上鉴权auth_key参数。如果该鉴权参数过期或者签名参数不正确将导致推流失败,详情请参见推/播流地址鉴权

  • 网络异常

    推流端是需要将直播流通过RTMP协议推送到直播中心,因此如果该段网络出现问题是有可能出现推流异常,建议您先通过如下两种方式自查:

    • 在推流端ping推流地址,测试是否有丢包。如果存在丢包,请联系网络运营商进行排查。

    • 在推流端通过telnet命令测试推流域名的1935端口是否可以正常连接。如果无法连接,请尝试使用不同网络环境测试,确认是否本地网络存在异常。

  • 推流时间戳使用了扩展字段

    客户端推流对于视频帧和音频帧都会带有两个时间戳,分别是pkt_ptspkt_dts,分别表示帧显示时间戳和帧解码时间戳,您可以通过ffprobe命令查看(具体命令ffprobe -show_frames rtmp://live.zhibotest.com/AppName/StreamName),部分结果如下。

    其中 pkt_ptspkt_dts 时间戳(毫秒)转换成二进制后如果超过 31 位,可能出现客户端不兼容的情况。widthheight 表示视频分辨率,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端口的结果截图。