阅读基础
原因
为什么要讨论flv封包?因为rtmp基于flv进行传输数据,我们需要将data -> flv.data ->rtmp.data
在上述文章中,我们是对音视频flv格式解复用探讨,但是对于封包的操作细节并没有探讨,且没有对aac和h264的sequence header详细描述。sequence header在flv封包中起到开篇点题的作用,所以我们要搞清楚sequence header基本结构。
aac sequence header
sequence header解析
flv格式数据音频第一帧是配置信息数据包,所以我们对aac seq进行详细解析。
AudioSpecificConfig 4B
字段名称 字节数 描述
audioObjectType 5 bits AAC 音频编码类型
samplingFrequencyIndex 4 bits 采样率索引
channelConfiguration 4 bits 声道数
//可选字段
frameLengthFlag 1 bit 帧长度标志
dependsOnCoreCoder 1 bit 是否依赖核心编码器
extensionFlag 1 bit 扩展标志
AudioSpecificConfig() {
audioObjectType; // 5 bits
samplingFrequencyIndex; // 4 bits
if (samplingFrequencyIndex == 0xF)
samplingFrequency; // 24 bits
channelConfiguration; // 4 bits
if (audioObjectType == 29)
extensionAudioObjectType; // 5 bits
// 可能还有其他可选字段
}
AudioSpecificConfig包含着一些更加详细的音频信息,它的定义在ISO14496-3中1.6.2.1。
ps:下列字节是从1开始(以数组索引需-1)
字段 | 占位 | 含义 |
---|---|---|
AAC Profile编码级别 | 5 bits | 编码级别: AAC Main 0x01 AAC LC 0x02 AAC SSR 0x03 |
AAC Sample Frequence采样率 |
4bit |
}; |
AAC Channel config通道数 | 4bit |
|
frameLengthFlag | 1 bit | 帧长度标志 |
dependsOnCoreCoder |