您的位置:首页 > 教育 > 锐评 > flv复合流

flv复合流

2025/1/15 12:26:29 来源:https://blog.csdn.net/weixin_45993872/article/details/142185760  浏览:    关键词:flv复合流

一、什么是flv

        flv流媒体协议是Adobe公司推出的一种流媒体协议。其特点就是封装后的音视频数据量很小,并且协议规范相对简单,所以FLV流媒体协议适合网络传输,但是他是一个私有协议,所支持的网络传输比较有限:如RTMP、HTTP-FLV。

 二、FLV流媒体格式讲解

flv有两部分,一个是flv header另外一个是flv body。

flv header长度固定9个字节

flv body由一组组的previous tags size + tag组成

tag由 flv tag header + tag data组成

Previous Tag Size一般在整个Tag的前面,它一般记录前一个Tag的大小。Tag的类型一般分为三种、第一种脚本数据帧类型、视频数据类型、音频数据类型。

 2.1FLV Header

FLV 头部的前三个字节是固定的,表明了是FLV格式,Version是版本号固定为1,其他根据项目自己配置

 2.2 FLV BODY

FLV BODY由FLV Tag Header 和Tag Data组成。

音频FLV BODY = FLV Tag Header + Audio Tag Data。

视频FLV BODY = FLV Tag Header + Video Tag Data

脚本FLV BODY = FLV Tag Header + Script Tag Data

但无论是视频的Tag Data还是音频的Tag Data它们的FLV Tag Header都是相同的,下面我们来看看公共部分的FLV Tag Header

 2.3.1FLV Script Tag

FLV Script Tag也是由FLV Tag Header + Script Data Tag组成。Script Tag的类型一般被称为MedtaData Tag,它一般会存储一些关于FLV音视频的参数信息,比方说:分辨率(width、height)、duration,通常来说Script Tag Data是第一个出现的Tag,并且有且只有一个

Script Tag是由两个AMF包组合起来(AMF 包 = 数据类型(看下图) + 数据长度 + 数据)。

AMF数据类型:

AMF1的第一个字节表示包类型、默认0x02。第2-3个字节代表的是字符串的长度,默认0X00A。 而后面的字节是具体的字符串(“onMetaData”)用十六进制表示:(6f、6e、4d、65、74、61、44、61、74、61)

AMF2包封装一个数组类型,这个数组中包含了音视频信息项的名称和值。第一个字节是0x08表示数组类型。第2-5个字节表示的是数组元素的个数、而后面的数组则是每个数组的键值对。

AMF2数组对应的键值对:

AMF1的分析:

AMF2的分析:

2.3.2FLV VIDEO TAG

FLV VIDEO TAG是由两部分组成,FLV Tag HEADER + VIDEO DATA TAG。

从这张图可以看出,VIDEO DATA TAG是视频的具体信息,这其中包括:STREAMID视频流ID、FrameType视频帧类型(1: avc keyframe指的是关键帧、2: avc inter frame指的是普通帧)、CODECID编码ID(默认7:AVC编码)、AVCPacketType编码包类型(0: avc sequence hdr、1: NALU类型)、CompositionTime构造时间、Data具体的视频数据

2.3.3FLV AUDIO TAG

FLV AUDIO TAG是由两部分组成,FLV Tag HEADER + VIDEO DATA TAG。

从这张图可以看出,AUDIO DATA TAG是视频的具体信息,这其中包括SoundFormat音频类型(10: aac)、SoundRate音频采样率、SoundSize音频采样深度、SoundType音频编码类型、AACPacketType AAC包的类型、Data就是具体的音频数据。下面这个是每一个Audio Data Tag的具体定义:

三、总结

FLV = FLV Header + FLV Body

FLV Body = FLV TAG

FLV TAG = FLV TAG Header + TAG DATA(FLV TAG有三种类型)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com