目录
一、概述
二、编解码器特定信息元素(Codec Specific Information Elements )
2.1 信息元素结构
2.2 对象类型(Object Type)
2.3 MPEG - D DRC
2.4 采样频率(Sampling Frequency)
2.5 通道(Channels)
2.6 比特率(Bit rate)
2.7 可变比特率(VBR)
三、媒体包头部和媒体有效负载格式
四、总结
五、参考资料
在蓝牙音频传输领域,MPEG-2和MPEG-4 AAC(Advanced Audio Coding,高级音频编码)编解码因其高效的压缩性能和良好的音质而广受欢迎。为了确保不同设备之间的互操作性,蓝牙技术联盟(Bluetooth SIG)制定了一系列详细的规范。本文基于SPEC,深入探讨MPEG-2,4 AAC编解码器的互操作性要求,特别是其在AVDTP(音频/视频分发传输协议)中的实现细节,包括编解码器特定信息元素、媒体包头要求和媒体有效载荷格式等方面。
一、概述
MPEG-2 AAC和MPEG-4 AAC(包括HE-AAC、HE-AACv2、AAC-ELDv2等变体)是广泛应用于数字广播、在线流媒体和多媒体设备中的音频编码标准。为了确保不同设备之间的音频数据能够无缝传输和解码,需要明确的互操作性要求。
二、编解码器特定信息元素(Codec Specific Information Elements )
在AVDTP的信号传输过程中,MPEG-2,4 AAC使用了一组特定的信息元素来描述音频流的属性。这些信息元素包括对象类型、采样频率、通道配置、比特率和可变比特率(VBR)支持等。
2.1 信息元素结构
MPEG - 2/4 AAC 在信令过程中使用的编解码器特定信息元素(Codec Specific Information Elements)结构如下图 4.5 所示。共包含 6 个字节。
①不同 AVDTP 消息中的设置规则
-
AVDTP_GET_ALL_CAPABILITIES_RSP 消息:在该消息中,每个字段可以定义或设置一个或多个值。意味着设备在响应获取所有能力的请求时,可以列出其支持的多种选项。
-
AVDTP_SET_CONFIGURATION_CMD 消息和 AVDTP_RECONFIGURE_CMD 消息:在这两个消息中,每个字段只能从可选值和强制值中选择一个进行设置。这是因为这两个消息用于配置或重新配置编解码器,需要明确指定具体的参数。
②代码示例(模拟消息处理)
#include <stdio.h>// 模拟 AVDTP 消息类型
typedef enum {AVDTP_GET_ALL_CAPABILITIES_RSP,AVDTP_SET_CONFIGURATION_CMD,AVDTP_RECONFIGURE_CMD
} AVDTP_Message_Type;// 模拟编解码器特定信息元素结构体
typedef struct {unsigned char octet0;unsigned char octet1;unsigned char octet2;unsigned char octet3;unsigned char octet4;unsigned char octet5;
} Codec_Specific_Info;// 处理不同 AVDTP 消息的函数
void handle_avdtp_message(AVDTP_Message_Type type, Codec_Specific_Info *info) {switch (type) {case AVDTP_GET_ALL_CAPABILITIES_RSP:// 可以设置多个值,这里简单打印信息printf("Handling AVDTP_GET_ALL_CAPABILITIES_RSP message:\n");printf("Octet0: 0x%02X\n", info->octet0);printf("Octet1: 0x%02X\n", info->octet1);printf("Octet2: 0x%02X\n", info->octet2);printf("Octet3: 0x%02X\n", info->octet3);printf("Octet4: 0x%02X\n", info->octet4);printf("Octet5: 0x%02X\n", info->octet5);break;case AVDTP_SET_CONFIGURATION_CMD:case AVDTP_RECONFIGURE_CMD:// 只能设置一个值,这里简单打印信息printf("Handling %s message:\n", type == AVDTP_SET_CONFIGURATION_CMD ? "AVDTP_SET_CONFIGURATION_CMD" : "AVDTP_RECONFIGURE_CMD");printf("Octet0: 0x%02X\n", info->octet0);printf("Octet1: 0x%02X\n", info->octet1);printf("Octet2: 0x%02X\n", info->octet2);printf("Octet3: 0x%02X\n", info->octet3);printf("Octet4: 0x%02X