音频解码相关总结

最近1年一直在做音频播放器的相关工作。

关于音频播放器,主要是做以下2项工作:

1> demux,对文件进行解析,获取Packet数据

2> 对解码器进行性能优化(主要针对软解)

对于第一点, 常见的辅助工具是阅读FFMPEG相关代码。

个人一些工作效率上的体会:

第一步: 建议在PC上利用QT等GUI工具,做一个树形控件,显示所有的数据block,

点击该块, 上面显示2进制值,下面显示相应字段的Offset, 值, 相关解释。

第二步,移植到目标平台

这里关键点是注意 Big-Endian还是Little Endian

对于性能优化, 最近2周在做苹果的ALAC和AIFF格式支持,有以下体会

1> 充分利用Cache, 主要优化手段是将数据分块处理, 一般来说4K-32K是个合理边界。

音频解码方面主要有2个Buffer池子, 一个是未解码的Packet队列, 一个是解码后的Sample队列。

Packet队列输入来自USB,硬盘,局域网, 互联网, 各自的速度和缓存大小均不同,需要结合实际做统计分析。

Sample队列输入来自解码器, 输出则是DSP芯片。对这块数据的处理主要集中在Endian转化上。

如果CPU支持SIMD,建议用汇编来优化数据打包。

2> 对解码优化来说, 主要是利用CLZ指令来优化。

对于MIPS平台来说, 搜Linux内核代码可以找到汇编版本的实现。

如果硬件不支持,可以参考libFLAC的查表法。也就是将32位分割为4个8位,然后查256位表。

总的来说, 音频解码来说,技术上其实没啥核心, 现在大家比拼的更多是数据源上。

时间: 2024-08-06 16:00:28

音频解码相关总结的相关文章

【转帖】MATLAB 与 音频处理 相关内容摘记

MATLAB 与 音频处理 相关内容摘记 MATLAB 与 音频处理 相关内容摘记 MATLAB 与 音频处理 相关内容摘记 1 MATLAB 音频相关函数 1 MATLAB 处理音频信号的流程 2 音量标准化 2 声道分离合并与组合 3 数字滤波 3 数据转换 5 基于MATLAB 的数字滤波实验6 MATLAB 音频相关函数 声音数据输入输出函数: 可以方便地读写au和way文件,并可控制其中的位及频率. wavread()和wavwriteO. 声音播放: wavplay():播放wav声

FFmpeg - 音频解码过程

1. 注册所有解码器 av_register_all(); 2. Codec & CodecContext AVCodec* codec = avcodec_find_decoder(CODEC_ID_AAC);    if (!codec)    {        fprintf(stderr, "codec not found\n");        exit(1);    } AVCodecContext *codec_ctx= avcodec_alloc_context

Android音视频学习第7章:使用OpenSL ES进行音频解码

/* * *这里使用了transcode-1.1.7对wav文件进行解码,然后使用opensl es进行播放 * */ //用到的变量和结构体 WAV wav; //wav文件指针 SLObjectItf engineObject; //引擎对象 SLEngineItf engineInterface; //引擎接口 SLObjectItf outputMixObject; //混音器 SLObjectItf audioPlayerObject; //播放器对象 SLAndroidSimpleB

多媒体开发之--- rtsp 中的H264 编码+打包+解码相关知识es、pes、ts...

1)ES流(Elementary Stream): 也叫基本码流,包含视频.音频或数据的连续码流. 2)PES流(Packet Elementary Stream): 也叫打包的基本码流, 是将基本的码流ES流根据需要分成长度不等的数据包, 并加上包头就形成了打包的基本码流PES流. 3)TS流(Transport Stream): 也叫传输流, 是由固定长度为188字节的包组成, 含有独立时基的一个或多个program, 一个program又可以包含多个视频.音频.和文字信息的ES流; 每个E

C#关于编码、解码相关问题

编码.解码技术是我们在程序中开发中经常使用到的,对一些敏感信息的存储,比如密码之类的,我们一般是不会直接以明文直接存储到数据库的,而是会通过各种算法,可以是现成的MD5(一种散列算法).或者是Hash算法+Salt(混淆因子),甚至是自己定义的一套算法进行加解密.这里不想阐述加解密技术,在之前的一篇博客当中,简单列举了两种基本方法,见.NET加解密技术.这里重点讲解一下编码.解码以及乱码的相关问题. 我们先看一个简单的例子: string str = "abcd";//测试字符串 by

USB音频解码方案SSS1629设计方案

SSS1629USB音频解决方案,功能立体声16位ADC,16位DAC的音响,耳机驱动,五波段硬件均衡器,音频锁相环时钟振荡器,USB,USB控制器和PHY FS.外部EEPROM 24C02-24C16连接提供了对USB VID/PID /产品线的灵活性,默认增益设置,和其他定制需求. SSS1629DEMO测试版电路设计: SSS1629A5产品特点(SSS1629部分主要特点)SSS1629符合USB规范v2.0SSS1629符合USB音频设备类规范V1.1SSS1629内置晶振无需外部晶

python音频处理相关类库

一.eyeD3 以下是eyed3的官方介绍 eyeD3 is a Python tool for working with audio files, specifically mp3 files containing ID3 metadata (i.e. song info). It provides a command-line tool (eyeD3) and a Python library (import eyed3) that can be used to write your own

利用C#将PCM格式的Wav进行对文件裁剪截取、淡入淡出、保存为音频文件相关详细代码解释

/// <summary> /// 文件裁剪截取 /// </summary> 健康知识平台重庆保胆取石 重庆胆结石医院 public class WavScissorHelper { public static bool GetWavFileScissor(string OriginalAudioFilePath, string DestinedAudioFilePath, int beginCutTime, int endCutTime, ref string errorInf

图像编解码相关知识1

1.图片压缩分为有损压缩和无损压缩:无损压缩就是不破坏图像信息,或者所有图像信息都可通过一定算法恢复的压缩方式,无损压缩并不能减少图像的内存占用量,如果要减少图像占用内存的容量,就要用有损压缩.有损压缩 2.常用图片格式: 1) 2)GIF是图形交换格式(Graphics Interchange Format),特点是压缩比高,磁盘占用空间少,静态标准有GIF87a,和动态标准GIF89a. 3)JPEG是联合图像专家组的缩写(Joint Photo Graphic Experts  Group