本文主要介绍使用LiveChannel过程中遇到的常见问题及解决方案。

OSS livechannel推流过程

下图为OSS livechannel推流过程图解,了解推流过程后,有助于排查livechannel推流过程中遇到的问题。

更多详情请参见PutLiveChannelPutLiveChannelStatus

案例:录制M3u8缺失

问题分析:默认录制成品的M3u8只有最后3片,遵循了HLS协议的默认规则。

解决方案:使用PostVodPlaylist接口将指定时间范围内的ts 文件汇聚到M3u8索引。

  • EndTime必须大于StartTime,且时间跨度不能大于1天。
  • OSS会查询指定时间范围内的所有指定LiveChannel推流生成的ts文件,并将其拼装为一个播放列表。

案例:录制的M3u8文件失败

问题分析:录制的M3u8文件成功推流到OSS才算录制成功。

解决方案:建议到客户端抓包查看是否有publish succees的标志,此标志表示与OSS音频包交互成功。所以出现客户端有推流记录,但是没有录制视频的情况,可以尝试抓包分析。

案例:客户端无法推流到OSS

使用ffmpeg推流不成功:
ffmpeg -re -i 0_20180525105430445.aac -acodec aac -strict -2 -f flv rtmp://xxx.oss-cn-beijing.aliyuncs.com/live/test_1000?Expires=1540458859&OSSAccessKeyId=LTAlujianb****&Signature=qwh31xQsanmao6ygCFJgo****%3D&playlistName=playlist.m3u8
解决方案:
  • 使用ffmpeg推流不成功时,建议用最原始的命令推流,不添加复杂的参数。
  • 推流URL中包含and符号(&)时,请使用双引号(" ")将整个URL括起来。例如,ffmpeg -re -i 0_20180525105430445.aac -acodec aac -strict -2 -f flv "rtmp://xxx.oss-cn-beijing.aliyuncs.com/live/test_1000?Expires=1540458859&OSSAccessKeyId=LTAlujianb****&Signature=qwh31xQsanmao6ygCFJgo****%3D&playlistName=playlist.m3u8"
  • 尝试更换为OBS进行推流测试,否则无法确认是否因ffmpeg问题导致的推流失败。

如果推流后延时较长,可以在PutLiveChannel接口中调整FragDurationFragCount参数。

案例:录制M3u8文件卡顿

当转储类型为HLS时,写入当前ts文件的音视频数据时长达到FragDuration指定的时长后,OSS会在收到下一个关键帧时切换到下一个ts文件。如果指定max(2*FragDuration, 60s)后仍未收到下一个关键帧,OSS将强制切换文件,此时可能引起播放卡顿。

案例:录制M3u8文件没有音频或视频

以下几种情况会出现音频或者视频没有录制的情况:

  • 没有发送AVC header或者AAC header,请通过抓包查看。
  • RTMP message长度小于2或者sequence header过小。
  • 音频Message超过缓冲区大小。
  • codec_ ctx是解码上下文的关键信息,如果携带的音视频数据异常,也会导致录制失败。

案例:ffmpeg推流到OSS录制没有音频

解决方案:

  • 直接查看ffmpeg记录的日志,确定客户端是否已发送aac_header
  • 在客户端进行RTMP抓包,查看客户端是否已发送aac_header