【OSS 排查方案-12 livechannel 直播推流】-阿里云开发者社区

开发者社区> 张医博> 正文

【OSS 排查方案-12 livechannel 直播推流】

简介: OSS livechannel 推流过程 生成推流 URL设置推流状态 录制 M3u8 缺失 默认录制成品的 m3u8 所以只有最后 3 片,遵循的是 hls 协议的默认规则,是正常想象,可以通过调用 PostVodPlaylist 接口将指定时间范围内的 ts 文件汇聚到一个 m3u8 索引内来解决; tips EndTime 必须大于 StartTime,且时间跨度不能大于 1 天。
+关注继续查看

OSS livechannel 推流过程

1

生成推流 URL
设置推流状态

案例:录制 M3u8 缺失

2

默认录制成品的 m3u8 所以只有最后 3 片,遵循的是 hls 协议的默认规则,是正常想象,可以通过调用 PostVodPlaylist 接口将指定时间范围内的 ts 文件汇聚到一个 m3u8 索引内来解决;

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

案例:录制 m3u8 文件 失败

  • 先看下是否已经成功推流到来 OSS 才算成功,客户端抓包必须能看到有 publish succees 的标志后,和 OSS 有正常的音频包交互才算成功,所以发现客户端推流有记录,但是就是没有录制视频的情况,就需要自己抓包分析下;

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

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=LTAlujianb6C9z&Signature=qwh31xQsanmao6ygCFJgovNIg%3D&playlistName=playlist.m3u8

  • 使用 ffmpeg 推不上去的时候建议用最原始的命令推流,不要加一些复杂的参数,而且推流 URL 在有 & 符号时请用 "" 囊括起来;
  • 尝试更换成 obs 推流测试下,看是否是 ffmpeg 问题导致的推流失败;

案例:录制 M3u8 文件卡顿

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

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

在此之前没有 hls 协议基础,或者对音视频不懂的同学很难理解,我们先恶补一些关键名词和包结构
3

RTMP 的音视频流的封装形式和 FLV 格式相似, 流媒体服务器向客户端发送包含 H264 和 AAC 的 RTMP 直播流,需要首先发送这两个 header,没有这些信息播放端是无法解码音视频流的,其中音频 tag 格式如下

  • AVC sequence header
  • AAC sequence header
    5

从上面推论出 AAC sequence header 内容的前 2 个字节是 0xAF 0x00,我们来看一个示例:

6

ADIF:Audio Data Interchange Format 音频数据交换格式。这种格式的特征是可以确定的找到这个音频数据的开始,不需进行在音频数据流中间开始的解码,即它的解码必须在明确定义的开始处进行。故这种格式常用在磁盘文件中。

ADTS:Audio Data Transport Stream 音频数据传输流。这种格式的特征是它是一个有同步字的比特流,解码可以在这个流中任何位置开始。它的特征类似于 mp3 数据流格式。

4

援引

解码流程

1

经过知识补充后我们说下以下几种情况会出现音频或者视频没有录制的情况:

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

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

背景:

想问下,我们使用类似于这样的命令录制直播转推到阿里云OSS,录制下来的视频没有声音
ffmpeg -re -v -1 -loglevel debug -timeout 60000 -reconnect_at_eof 1 -reconnect_streamed 1 -reconnect_delay_max 60 -i http://laochouzhibo.com/live/10456_33832518963510801728548610115630440343599.flv -acodec copy -vcodec copy -f flv rtmp://laochou.oss-cn-beijing-internal.aliyuncs.com/live/6db24fe6307e4cbcbf4f1764f5a1fb86?OSSAccessKeyId=LTAHSFdouboolevJG&Expires=1541002834&Signature=yRPuvIsIe90ipETg%3D

1

分析:

  • 出现这种问题,可以直接看下 ffmpeg 记录的 log ,可以发现客户端是没有发送 aac_header 。
  • 或者客户端抓个 RTMP 的包也可以看到是否发送了 aac_header

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
OSS Java SDK夯住(Hang)问题排查
分析了调用OSS Java SDK程序夯住(Hang)的可能情况及原因。
9658 0
关于搭建直播平台中的推流和传输你懂多少?
关于搭建直播平台中的推流和传输你懂多少?
324 0
OSS异常流量排查及防护
OSS适用于存储各类型的静态资源,较多的用户将静态资源存储在OSS上。当OSS产生大流量的异常流量要如何进行定位分析,OSS恶意访问可能是恶意referer盗链使用或者恶意IP恶意请求访问OSS资源导致的,本文对上述内容进行了介绍;
5446 0
【视频直播】推流以及播放地址的鉴权地址生成实践
针对阿里云的视频直播产品,生成推流以及播放域名的鉴权地址的流程实践方式
517 0
视频直播生成推流地址和播放地址的程序示例(PHP)
直播推流地址和播放地址本身没有API接口,需要在客户端自行拼接地址,然后使用推流工具或者播放器对其推流或播放。本文主要介绍如何生成直播的推流以及播放地址(PHP示例代码)。
697 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4479 0
JAVA实现RTMP推流上传阿里云OSS的签名URL
由于目前官方帮助文档提供的示例是Python的,本文介绍如何使用JAVA实现生成LiveChannel的签名URL,包括推流地址和播放地址。
1257 0
+关注
张医博
喜欢钻研新的语言,动手实践自己想要学会的知识。
115
文章
0
问答
来源圈子
更多
作为全球云计算的领先者,阿里云为全球230万企业提供着云计算服务,服务范围覆盖200多个国家和地区。我们致力于为企业、政府等组织机构提供安全可靠的云计算服务,给用户带来极速愉悦的服务体验。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载