音视频入门基础:FLV专题(15)——Video Tag简介

server/2024/10/16 2:22:00/

一、引言

根据《video_file_format_spec_v10_1.pdf》第75页,如果某个Tag的Tag header中的TagType值为9,表示该Tag为Video Tag:

这时StreamID之后紧接着的就是VideoTagHeader,也就是说这时Tag header之后的就是VideoTagHeader:

然后这时如果Filter的值不为1,表示未加密,不需要预处理。则VideoTagHeader之后紧接着的就VIDEODATA:

所以,

1.当某个Tag的Tag header中的TagType属性的值为9时,该Tag为Video Tag;

2.未加密的情况下,一个Video Tag = Tag header + VideoTagHeader + VIDEODATA。

二、VideoTagHeader

根据《video_file_format_spec_v10_1.pdf》第78页,VideoTagHeader包含的属性如下:

其中:

Frame Type:占4位(8位等于1个字节),为该帧的类型。值为1表示是H.264的I帧,值为2表示是H.264的P帧、B帧。

CodecID:占4位,编解码器的标识符。值为7表示是H.264。

AVCPacketType:占1字节,H.264数据包的类型。仅当FLV文件中的视频为H.264格式时,才有该属性。

值为0表示该Video Tag包含AVC sequence header,即此时该Video Tag的VIDEODATA为AVCDecoderConfigurationRecord,关于AVCDecoderConfigurationRecord的概念可以参考:《音视频入门基础:H.264专题(18)——AVCDecoderConfigurationRecord简介》;

值为1表示该Video Tag包含H.264的一个或多个NALU,即此时该Video Tag的VIDEODATA为一个或多个NALU,这些NALU之间用NALUnitLength分隔。FLV等文件格式使用的是avcC包装的H.264,avcC包装的H.264码流中,每个NALU前面没有起始码。avcC通过在每个NALU前加上NALUnitLength,在读取某个NALU之前,先把该NALU前面的NALUnitLength读取出来,拿到该NALU的总长度,然后根据该长度读取相应的字节数,读取出整个NALU。

值为2表示是该Video Tag包含AVC end of sequence,表示这段H.264码流结束。

CompositionTime:占3字节。AVCPacketType属性的值为1时,该值为Composition time offset,即PTS相对于DTS的偏移值;AVCPacketType属性的值为其它时,该值为0。

三、VIDEODATA

根据《video_file_format_spec_v10_1.pdf》第79页,FLV文件未加密时,VIDEODATA为VideoTagBody:

四、VideoTagBody

根据《video_file_format_spec_v10_1.pdf》第79页,当FLV文件的视频压缩编码格式为H.264时,VideoTagBody为AVCVIDEOPACKET:

五、AVCVIDEOPACKET

根据《video_file_format_spec_v10_1.pdf》第79页,AVCPacketType的值为0时,AVCVIDEOPACKET为AVCDecoderConfigurationRecord;当AVCPacketType的值为1时,AVCVIDEOPACKET包含H.264的一个或多个NALU;文档中没有写AVCPacketType的值为2的情况,所以当AVCPacketType的值为2时,AVCVIDEOPACKET没有数据:

六、用flvAnalyser工具分析Video Tag

用flvAnalyser工具可以直接显示Video Tag的各个部分。

AVCPacketType的值为0时:

AVCPacketType的值为1时:

AVCPacketType的值为2时:

七、总结

1.当某个Tag的Tag header中的TagType属性的值为9时,该Tag为Video Tag;

2.未加密的情况下,一个Video Tag = Tag header + VideoTagHeader + VIDEODATA。

3.当FLV文件的视频压缩编码格式为H.264并且未加密时,如果VideoTagHeader中的AVCPacketType的值为0,VIDEODATAAVCDecoderConfigurationRecord;如果AVCPacketType的值为1,VIDEODATA包含一个或多个NALU;如果AVCPacketType的值为2,VIDEODATA没有数据。


http://www.ppmy.cn/server/132493.html

相关文章

2 机器学习之基本术语

要进行机器学习,先要有数据。假定我们收集了一批关于西瓜的数据,例如(色泽青绿;根蒂蜷缩;敲声浊响)​,​(色泽乌黑;根蒂稍蜷;敲声沉闷)​&#xf…

uniapp的相关知识(1)

1、hover-class:当有鼠标按下时,会切换对应的样式;也可以设置对应的变色时间。 2、selectable:设置text组件的文本是否可以进行复制。 3、with:当设置为80%时,表示宽占整个屏幕的80%。 4、border&#x…

【数据结构】:破译排序算法--数字世界的秩序密码(二)

文章目录 前言一.比较排序算法1.Bubble Sort冒泡排序1.1.冒泡排序原理1.2.冒泡排序过程1.3.代码实现1.4.复杂度和稳定性 2.Quick Sort快速排序2.1递归快速排序2.1.1.递归快速排序原理2.1.2.递归快速排序过程2.1.3.代码实现 2.2.非递归快速排序2.2.1.非递归快速排序原理2.2.2.非…

Apache DolphinScheduler-1.3.9源码分析(二)

引言 随着大数据的发展,任务调度系统成为了数据处理和管理中至关重要的部分。Apache DolphinScheduler 是一款优秀的开源分布式工作流调度平台,在大数据场景中得到广泛应用。 在本文中,我们将对 Apache DolphinScheduler 1.3.9 版本的源码进…

凡事预则立,不预则废

在交易的竞技场上,每位交易员都拥有自己的一套打法,这些独特的交易风格不仅塑造了他们的个人特点,更是他们成功的关键所在。今天采访的Eagle Trader交易员刘先生,就给我一种很稳妥的感觉,那么,刘先生的“稳…

AWS注册时常见错误处理

引言 创建AWS账号是使用AWS云服务的第一步,但在注册过程中可能会遇到一些常见的问题。本文中九河云将帮助您排查和解决在创建AWS账户时可能遇到的一些常见问题,包括未接到验证电话、最大失败尝试次数错误以及账户激活延迟等。 常见问题及解决方法 1. …

【开发工具】K8s经验: 在k8s中 服务1部署到了k8s,那服务2也在k8s中的某个dockers中,服务1和服务2能互相找到吗 ?

今天在开发中遇到了需要调用其他dubbo服务中的一个接口,首先通过注解DubboReference来引入另外一个dubbo服务,但是还需要设置url吗? 下面是思考经验:希望能帮到大家 服务1已经被部署到了Kubernetes(k8s)集…

7.跨学科应用

1. 跨学科应用 人工智能药物研发是指利用人工智能技术研发新药物的过程和方法,人工智能拔术可以用于药物研发的不同阶段,包括药物发现、分子设计、药效预测、毒性评估等可以加速药物研发的过程、提高药物的效力和安全性。下面介绍几种常见的与人…