RTMP音视频流的flv头

RTMP发送aac/h264数据, 需要添加flv的数据头. 官网说明

https://wwwimages2.adobe.com/content/dam/acom/en/devnet/flv/video_file_format_spec_v10_1.pdf

h264规范 https://www.itu.int/rec/T-REC-H.264 内容比较长, 这里只讲重点.

音频消息头(章节E.4.2 Audio Tags)

消息头格式

名称比特数说明
sound format4音频的格式, 10表示aac
sound rate2音频采样率, 0表示5.5K, 1表示11K, 2表示22K, 3表示44K
sound size1音频采样的大小, 0表示8bits, 1表示16bits
sound type1音频声道类型 , 0表示单声道, 1表双通道
aac packet type8只有aac才有这个字节, 0表示数本数据包为AAC配置信息AudioSpecificConfig,ISO/IEC 14496-3文档中定义它的格式. 1表示AAC原始音频数据.

AudioSpecificConfig的格式

字段比特数说明
audioObjectType5aac的profile, 和adts中的定义是一样的
samplingFrequencyIndex4aac的采样频率的索引, 和adts中的定义是一样的
channelConfiguration4aac的通道数, 和adts中的p定义是一样的
epConfig2不知道干什么用的, 写固定值"00"
directMapping;1不知道干什么用的, 写固定值"00"

正常情况下, 以上两个表总共4个字节.

ADTS的格式

名称比特数说明
syncword12must be 0xFFF
ID10 for mpeg-4, 1 for mpeg-2
layer2must be 00
protect1
profile20 for main profile, 1 for low complexity profile, 2 for scalable sampling rate profile, 3 reserved
frequency4采样频率, 0表示96000, 1: 88200, 2: 64000,3: 48000,4: 44100,5: 32000, 6: 24000,7:22050,8: 16000, 9: 12000, 10: 11025, 11: 8000, 12: 7350,
private1
channel30:Defined in AOT Specifc Config, 1-6 for channel count, 7 for 8 channel
copy1
home1
copyright1
copyright-start1
frame-len13
adts-fullness11
blocks2

举例: 略

视频头(E.4.3 Video Tags)

字段比特数说明
frame type4数据帧的类型, 1表示关键帧, 2表示非关键帧, 5表示视频信息
codec id4编码类型, 7表示AVC
packet type80表示配置信息(sps pps), 1表示NALU
composite time24如果packet type为0, 则填0; 其它, 填时间戳, 毫秒, 通常填0, 因为rtmp已经有时间戳了

对于AVC/H.264格式, 接下来是AVCVIDEOPACKET

当packet type为0时(sps, pps)

数据包格式为ISO 14496-15 5.2.4.1章节描述的AVCDecoderConfigurationRecord格式.

http://www.doc88.com/p-1823464610430.html

字段比特数说明
version8固定值1
profile indication8等同于sps的第2个字节
profile compatibily8等同于sps的第3个字节
level indication8等同于sps的第4个字节
reserved6固定值'111111'
length size2表示NALULength字段的长度, 0表示用1个字节, 2表示用两个字节, 3表示用4个字节. 通常为3
reserved3固定值'111'
num of sps5sps的个数, 通常为1
sps length16sps的字节数, 网络字节序
sps8x(sps length)sps的内容
num of pps8pps的个数, 通常为1
pps length16pps的字节数, 网络字节序
pps8x(pps length)pps的内容

当packet type为1时(NALU)

字段比特数说明
nalu length32它是由上表中length size决定的, 通常为4个字节. 现在的视频数据都很大.
nalu data8x(nalu length)H264的原始数据

转载于:https://my.oschina.net/u/2343729/blog/1841055

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值