解码Android 系统蓝牙音频全流程
蓝牙音频编码解码流程
mp3和flac音频编码都是在PCM音频编码基础上二次编码得到的,其目的是减小文件体积。把mp3,flac等编码格式的数据还原为PCM编码格式的数据,这个过程叫做解码。然后经过数字-模拟转换(DAC)变成模拟信号,最后经过放大电路驱动喇叭,将声音播放出来。
蓝牙视频编码简介
视频格式:MP4(H.264编码) 压缩效率高:MP4使用H.264编码,能显著减小视频文件体积,适合蓝牙传输的低带宽场景。 兼容性好:几乎所有安卓设备原生支持解码MP4格式,无需额外依赖。 分包传输友好:文件结构支持分块读取和重组。 3GP:专为移动设备设计,体积更小,但画质较低。
视频压缩策略 降低分辨率:将视频分辨率压缩至160×120或者更低,减少文件体积。 降低帧率:5-10fps,平衡流畅度和体积。 调整码率:使用较低的比特率(64-128kbps),但需确保画面不明显卡顿。 分包传输实现:将压缩后的视频文件分割为100-200字节数据包,在每个包中添加序列号和校验码。
传输流程: 发送端:通过 FFmpeg读取摄像头或视频文件,使用 FFmpeg 进行H.264编码,压缩,将编码后的数据分块传输,将 AVPacket 分割为固定大小的数据包(1KB)每个包前添加头部信息(如包序号、总包数、校验码) ,通过BlueZ库发送分片数据,或者通过BluetoothSocket的输出流逐包发送。 接收端:接收数据包,解析头部信息。按序号重组数据,并校验完整性,合并为完整视频文件。
蓝牙音频编码简介
音频格式:M4A(AAC编码) 高效压缩:AAC编码在相同音质下文件体积比MP3小30%-40% 低码率优势:在96kbps码率下,AAC的音质已超过MP3的128kbps表现(据杜比实验室测试) 兼容性广泛:安卓设备兼容,适配性优。
音频压缩策略 采样率:8kHz(覆盖人声频段20Hz-4kHz) 调整码率:使用较低的比特率(32-64kbps)。 分包传输实现:100-200字节/包,通过蓝牙SPP协议发送。 格式设置:[包序号(2字节)][总包数(2字节)][CRC32校验码(4字节)][数据体]
传输流程: 发送端:将音频按 8kHz 采样率、32 - 64kbps 码率编码,完成压缩后进行分包,每包含序号、总包数、CRC32 校验码及数据体,使用 BluetoothSocket 建立 SPP 连接并发送。 接收端:接收蓝牙数据包,校验 CRC32 后按序号整合音频数据,解析还原出完整音频文件。
1. SBC全称Subband Coding,子带编码。SBC是专为蓝牙设计的音频编码,复杂度低,可在中等比特率下实现较高音频质量。其原理是:通过带通滤波器将音频信号分成不同频段的子带信号,然后将这些信号经过频率搬移转变成基带信号,再对它们分别取样,量化和编码,最后合成一个总的码流传送出去。
2. AAC全称Advanced Audio Coding,高级音频编码,基于MPEG-2技术,主要策略:舍去与感知上无关的信号成分,去除编码后信号的冗余部分。实际上,在128Kbps比特率以下,AAC编码的效果是最好的。作为mp3的后继者,AAC相较于MP3的改进有:更多的采样率选择(8 KHz至96 KHz,MP3为16 KHz至48 KHz);更高的声道数上限(48个,MP3在MPEG-1模式下为最多双声道,MPEG-2模式下5.1声道);任意的比特率和可变的帧长度。
3. aptX的设计基于自适应差分脉码调制(ADPCM)原理。aptX有四个版本:aptX是最基础的版本。aptX Low Latency简称aptX LL,特点在于低延迟。其实人耳可以感觉到的延迟极限是70ms,而达到40ms则意味着我们不会感觉到延迟。aptX HD主打高清音频,传输速率大幅增加,并且有着更高的信噪比和更少的失真。而aptX Adaptive,就如同它名字一样,可以按需自动调节传输比特率和延时。aptX Adaptive向下兼容aptX和aptX HD。
4. H.264是一种高度压缩的数字视频编解码器标准,通过高效的编码技术和强大的容错能力,提供了高质量的图像和低码率的压缩效果。 H.264具有以下优势: 低码率:在同等图像质量下,H.264的压缩比是MPEG-2的2倍以上,是MPEG-4的1.5~2倍。 高质量图像:H.264能提供连续、流畅的高质量图像。 容错能力强:提供了解决在不稳定网络环境下容易发生的丢包等错误的必要工具。
解码后续处理
AD转换后的信号经过采样、量化(量化策略)、编码,由 BLE协议传输,后进行解码还原。解码后的信号经过DA转换,此时模拟信号通常电压较低、功率较小,无法直接驱动扬声器,此时使用晶体管、运放来放大信号。当放大后的电信号通过音圈(线圈),会在永磁体的磁场中受力振动,音圈的振动带动振膜振动,压缩和稀疏周围空气,产生声音。
Android 系统从应用程序到硬件的多媒体处理流程
应用层 → 应用框架层 → 音频JNI层 → 音频框架层 → Binder IPC →音频服务层 → 音频硬件抽象层→多媒体框架层 → OpenMAX集成层 → OMX IL组件层