场景
视频直播是需要您在推流端,通过推流工具或者推流SDK将RTMP视频流推向视频中心(即视频直播提供的推流地址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推流工具。
如果其他推流工具正常,则说明是推流客户端设置问题,请对比检查不一致的设置项并尝试调整。
音视频编码不合规
视频直播要求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路转码并发流。如果您推流并发路数超过该限制,就会导致推流失败。
如果您需要查看当前并发的推流路数,请参见直播流管理。
说明具体推流路数限制以及解除限制方式,可参考使用限制。
此直播流名被禁推
视频直播提供了禁止推送某个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端口的结果截图。