问题场景

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

排查思路

  • 客户端推流方式错误

    首先请检查客户端推流工具的设置问题,常见的推流工具包括 OBS、ffmpeg 以及 Adobe Flash Media Live Encoder 软件。建议您使用上述工具测试推流是否正常,如果正常请您查看原有推流方式的问题。OBS 的推流设置建议参考 OBS 推流设置,其中最需要注意的串流设置中的 URL 和流秘钥设置。其中的 URL 是包括视频中心以及 AppName;而流秘钥包括 StreamName 和 QueryString 参数(主要包括 vhost 参数,如果开启鉴权则需要添加鉴权 auth_key 参数)。

  • 音视频编码不合规

    视频直播要求 h264 的视频流和 aac 的音频流编码格式,您需自行保证编码格式满足上述要求,否则会在直播过程中不同的播流协议可能产生问题,查看编码可以参考下如下截图中的方式。

  • 达到推流路数限制

    视频直播服务对每个用户的直播域名和单个域名的并发推流路数均有限制。单个账号限制创建 20 个直播域名,每个直播域名限制 20 路并发推流。另外,如果对应的 AppName 配置了实时转码的话该 AppName 下仅能够并发推流 10 路直播流。而如果您推流并发路数超过该限制,就会导致推流失败。如果您需要查看当前并发的推流路数,可在 视频直播控制台 > 流管理 中选择对应的直播域名,选择 正在推流进行查看。

  • 流名被加入黑名单

    视频直播提供了禁止某个 AppName 和 StreamName 对应的名称的推送。对应的 API 接口包括 禁止直播流推送恢复直播流推送。如果对应的 AppName 和 StreamName 被加入了推流黑名单将导致无法推流成功。

  • 鉴权失败

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

  • 网络异常

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

    • 推流端 ping 视频中心地址(video-center.alivecdn.com)测试是否有丢包;

    • 推流端 telnet 视频中心地址的 1935 端口是否可以正常连接。

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

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

    其中的时间戳是可以转换为二进制,若时间戳大于 24 位,让推流客户端确认下是否视频帧大于 max size,存在一帧包含多个 chunk 的情况。若是,修改推流客户端,修改为 将时间戳加到每个 chunk 上,或者强制将 pts 值改小可解。

  • 其他

    如果上述方法均无法解决该问题,请您将下述信息提交工单,以便对应的技术支持工程师协助解决问题:

    • 推流 url 与播流 url。
    • 推流方式(使用什么工具推流/如何推流)。
    • 推流异常时,推流端出现怎样的异常提示。
    • ping 推流域名的 IP 截图。
    • telnet 客户端 ping 推流域名的 IP 1935,并截图。