FFmpeg入门

背景

在做移动电视盒子的爬虫,视频播放的时候,视频的类型是.ts,报了SEI type 5 size 9920 truncated(被截取的) at 6136错误,其实到现在都没有真正搞清楚它的问题,下面只是一些借助别人文章的推测。


前言

在直播应用的开发过程中,如果把主播端消息事件传递到观众端,一般会以Instant Messaging(即时通讯)的方式传递过去,但因为消息分发通道和直播通道是分开的,因此消息与直播音视频数据的同步性就会出现很多问题。那么有没有在音视频内部传递消息的方法呢?答案是SEI。金山云目前推出的直播问答解决方案中,就用到了SE。今天给大家分享一下关于SEI的技术细节。

流媒体是采用流式传输方式在网络上播放的媒体格式,视频网站内容、短视频、在线直播这些视频形态,均属于流媒体的不同分支。流媒体大致包含三个层级:码流、封装和协议。从音视频编码器输出的码流,经过某种封装格式后,经过特定的协议传输、保存,构成了流媒体世界的基础功能。

SEI即补充增强信息(Supplemental Enhancement Information),属于码流范畴,它提供了向视频码流中加入额外信息的方法,是H.264/H.265这些视频压缩标准的特性之一。SEI的基本特征如下:

  1. 并非解码过程的必须选项

  2. 可能对解码过程(容错、纠错)有帮助

  3. 集成在视频码流中

也就是说,视频编码器在输出视频码流的时候,可以不提供SEI信息。虽然在视频的传输过程、解封装、解码这些环节,都可能因为某种原因丢弃SEI内容,但在视频内容的生成端和传输过程中,是可以插入SEI信息的。这些插入的信息,和其他视频内容一同经过传输链路到达消费端。举例来说,当前火爆的直播问答模式,就是通过SEI传递较多和答题业务相关的信息,通过SEI承载的信息,极大地优化了题目显示和观众音视频观看的同步性。

那么在SEI中可以添加哪些信息呢?以下是一些用户场景可任意扩展的例子:

  1. 传递编码器参数

  2. 传递视频版权信息

  3. 传递摄像头参数

  4. 传递内容生成过程中的剪辑事件(引发场景切换)

SEI类型

在H.264/AVC视频编码标准中,并没有规定SEI payload type的范围,所以表征payload type的字节数是浮动的。

语法分析如下所示,当开始解析类型为SEI的NAL时,持续读取8bit,直到非0xff为止,然后把读取的数值累加,累加值即为SEI payload type。

在这里插入图片描述
读取SEI payload size和payload type逻辑类似,仍然是读取到0xff为止,这样可以支持任意长度的SEI payload添加。
在这里插入图片描述
当获取了SEI payload类型和大小后,就进入了实际的SEI内容读取。

当前《ISO/IEC 14496-10:2014》Annex D.1.1提供了最大到181的payload类型处理规范,由于类型可以指定任意大小,给SEI的添加、处理创造了很大的自由空间。

其中SEI payload类型值为5时,指定的处理方法叫user_data_unregistered(),字面含义为未注册的用户数据,常用于存储编码器的编码参数信息,是比较常见的payload类型。

读取payload type为5时,具体的语法解析流程如下:

在这里插入图片描述
其中uuid_iso_iec_11578的详细定义在《ISO/IEC 11578:1996》 Annex A中,大致规定了使用128 bits(16个字节)来指定UUID。此处UUID可以表征写入SEI payload的角色ID,或者表征其他业务用途。剩下的payloadSize -16字节,即是业务层传递的具体内容了。

通过user_data_unregistered()语法解析可以看出,当使用SEI payload type为5时,注意事项如下:

  1. payload size应该大于16;

  2. uuid可能出现0x000000/0x000001/0x000002,需要插入0x03做防竞争处理;

转载自:https://blog.csdn.net/ajsliu1233/article/details/108569427

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值