RTMP发送aac/h264数据, 须要添加flv的数据头. 官网说明html
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 内容比较长, 这里只讲重点.app
消息头格式ide
名称 | 比特数 | 说明 |
---|---|---|
sound format | 4 | 音频的格式, 10表示aac |
sound rate | 2 | 音频采样率, 0表示5.5K, 1表示11K, 2表示22K, 3表示44K |
sound size | 1 | 音频采样的大小, 0表示8bits, 1表示16bits |
sound type | 1 | 音频声道类型 , 0表示单声道, 1表双通道 |
aac packet type | 8 | 只有aac才有这个字节, 0表示数本数据包为AAC配置信息AudioSpecificConfig,ISO/IEC 14496-3文档中定义它的格式. 1表示AAC原始音频数据. |
AudioSpecificConfig的格式编码
字段 | 比特数 | 说明 |
---|---|---|
audioObjectType | 5 | aac的profile, 和adts中的定义是同样的 |
samplingFrequencyIndex | 4 | aac的采样频率的索引, 和adts中的定义是同样的 |
channelConfiguration | 4 | aac的通道数, 和adts中的p定义是同样的 |
epConfig | 2 | 不知道干什么用的, 写固定值"00" |
directMapping; | 1 | 不知道干什么用的, 写固定值"00" |
正常状况下, 以上两个表总共4个字节.scala
ADTS的格式code
名称 | 比特数 | 说明 |
---|---|---|
syncword | 12 | must be 0xFFF |
ID | 1 | 0 for mpeg-4, 1 for mpeg-2 |
layer | 2 | must be 00 |
protect | 1 | |
profile | 2 | 0 for main profile, 1 for low complexity profile, 2 for scalable sampling rate profile, 3 reserved |
frequency | 4 | 采样频率, 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, |
private | 1 | |
channel | 3 | 0:Defined in AOT Specifc Config, 1-6 for channel count, 7 for 8 channel |
copy | 1 | |
home | 1 | |
copyright | 1 | |
copyright-start | 1 | |
frame-len | 13 | |
adts-fullness | 11 | |
blocks | 2 | 无 |
举例: 略orm
字段 | 比特数 | 说明 |
---|---|---|
frame type | 4 | 数据帧的类型, 1表示关键帧, 2表示非关键帧, 5表示视频信息 |
codec id | 4 | 编码类型, 7表示AVC |
packet type | 8 | 0表示配置信息(sps pps), 1表示NALU |
composite time | 24 | 若是packet type为0, 则填0; 其它, 填时间戳, 毫秒, 一般填0, 由于rtmp已经有时间戳了 |
对于AVC/H.264格式, 接下来是AVCVIDEOPACKET视频
数据包格式为ISO 14496-15 5.2.4.1章节描述的AVCDecoderConfigurationRecord格式.htm
http://www.doc88.com/p-1823464610430.html
字段 | 比特数 | 说明 |
---|---|---|
version | 8 | 固定值1 |
profile indication | 8 | 等同于sps的第2个字节 |
profile compatibily | 8 | 等同于sps的第3个字节 |
level indication | 8 | 等同于sps的第4个字节 |
reserved | 6 | 固定值'111111' |
length size | 2 | 表示NALULength字段的长度, 0表示用1个字节, 2表示用两个字节, 3表示用4个字节. 一般为3 |
reserved | 3 | 固定值'111' |
num of sps | 5 | sps的个数, 一般为1 |
sps length | 16 | sps的字节数, 网络字节序 |
sps | 8x(sps length) | sps的内容 |
num of pps | 8 | pps的个数, 一般为1 |
pps length | 16 | pps的字节数, 网络字节序 |
pps | 8x(pps length) | pps的内容 |
字段 | 比特数 | 说明 |
---|---|---|
nalu length | 32 | 它是由上表中length size决定的, 一般为4个字节. 如今的视频数据都很大. |
nalu data | 8x(nalu length) | H264的原始数据 |