场景
视频直播是需要您在推流端,通过推流工具或者推流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端口的结果截图。