导航:首页 > 操作系统 > android音频编解码

android音频编解码

发布时间:2024-12-29 23:27:35

❶ 怎样用AACLib V1.0在android上音频编码解码

这几天在 android上的音频项目,顺便把用到的aac编解码库封装了一下,有需要的可以从上面下载。当然我是没有本事自己写编解码器的,还是用FFmpeg + FDK_aac来做。下面介绍一下其java接口的使用。java库见libaac.jar文件,把libaac.jar加到 libs目录下,把libaac.so加到 libs/armeabi目录即可使用。

AAC编码:
(1) 创建一个Encoder对象作为成员变量
aac.Encoder encoder;

(2) 初始化它

encoder = new aac.Encoder();
if(! encoder.open(11025, 1))
{
Log.d("mylog", "failed to open encoder !\n");
encoder = null;
}

这里要指定输入音频源(PCM格式)的sampe_rate和channel个数,如果为CHANNEL_OUT_MONO,则channel=1,否则为2。 sample_rate一般设置为11025,因为手机性能有限,设置太高的话也处理不过来,而且处理人声的话11025也是足够了。


(3) 编码

把接收到PCM数据交给encoder来处理即可,要求输入源为ENCODING_PCM_16BIT,即每个sample是16BIT的。这个encoder对象内有2个缓冲区:inbuf, outbuf。显然,在编码时,inbuf就是用于存储接收到的PCM数据,outbuf就是存编码后得到的数据。

int out_size = encoder.encode(in_size);
其返回值out_size,表示在outbuf里的有效数据长度。此时可以把outbuf里的aac数据通过网络发送或其他用途。

其中,用户需要知道encoder每次处理多长的数据,即一个frame的大小。对于单声道MONO来说,每次应该输入2048byte的数据。对于双声道STEREO来说,应该输入4096byte的数据。下面这一行可以根据声道数来计算输入的frame的大小:

int in_size = aac.Encoder.frameSize(1);

AAC解码:
(1) 创建一个Decoder对象作为成员变量

aac.Decoder decoder;

(2) 初始化

decoder = new aac.Decoder();
if( ! decoder.open())
{
Log.d("mylog", "failed to open decoder !\n");
decoder = null;
}

(3) 解码
Decoder对象也有inbuf和outbuf,把待解码的aac frame放到inbuf里

int pcm_size = decoder.decode(aac_size);

解得到数据在outbuf里,其有效长度为上述函数的返回值pcm_size,此时可以把outbuf里的PCM数据取出来播放或其他用途。

❷ 音频播放需要用到编解码技术吗 android

1、android提供的音视频编码只有 AMR-NB(nb是窄频)和H.263
2、android虽然支持gif的解码,只能用mediaplay来播放,但是效果不好
3、android不支持flv的解码
4、AudioTrack只能播放pcm编码的数据,MediaPlayer可以播放MP3,AAC,WAV,OGG,MIDI等
事实上,两种本质上是没啥区别的,MediaPlayer在播放音频时,在framework层还是会创建AudioTrack,
把解码后的PCM数据传递给AudioTrack,最后由AudioFlinger进行混音,传递音频给硬件播放出来。
利用AudioTrack播放只是跳过 Mediaplayer的解码部分而已。Mediaplayer的解码核心部分是基于OpenCORE 来实现的,
支持通用的音视频和图像格式,codec使用的是OpenMAX接口来进行扩展。因此使用audiotrack播放mp3文件的话,要自己加入 一个音频解码器,如libmad。
否则只能播放PCM数据,如大多数WAV格式的音频文件。

❸ 【Android 音视频开发-FFmpeg音视频编解码篇】1.FFmpeg so库编译

本文提供Android平台FFmpeg so库的编译指南,从交叉编译概念到实践操作,深入浅出地解析了FFmpeg的编译流程。首先,交叉编译定义为在一台机器上生成另一台平台的可执行代码,对于Android应用开发至关重要。接着,文章解释了为何需要交叉编译,强调资源限制与利用PC资源的优势。

为实现这一目标,文章推荐使用GCC或CLANG工具链进行编译,并说明了这两个工具的不同点,其中CLANG因其效率优势被Google推荐使用,且在NDK 17版本后取代了GCC。

文章进一步介绍了如何使用CLANG进行FFmpeg编译,包括选择合适的Android版本和CPU架构,配置编译工具路径,并下载FFmpeg源码。特别提及了配置脚本configure的修改,以适应Android平台,以及如何避免常见的编译失败原因。

文章详细分析了configure配置脚本的逻辑,解释了cross_prefix_clang、--target-os=android、--sysroot=$SYSROOT等关键选项的作用,并探讨了cc和cross_prefix的配置差异,为解决编译过程中的困惑提供了清晰的解释。

在配置GCC编译FFmpeg时,文章指出由于NDK r17c后移除了GCC,推荐使用较旧版本的NDK r17b。文章展示了如何根据编译平台选择对应的NDK版本,以及构建GCC编译环境。

文章最后总结了编译FFmpeg的基本步骤,并鼓励读者通过更多选项实现FFmpeg的定制化编译,以适应不同需求。通过本文,开发者将能更加深入地理解FFmpeg编译过程,轻松实现Android平台的音视频编解码库构建。

阅读全文

与android音频编解码相关的资料

热点内容
本田App怎么连接爱车 浏览:775
男士买衣服在哪个app实惠 浏览:690
安卓车机怎么颜色反转 浏览:901
手机uc下载的文件夹 浏览:962
程序员评论南京 浏览:88
冠道怎么连接安卓车载 浏览:317
手机怎么把两张图片做成文件夹 浏览:721
抖音导出表格发货加密 浏览:133
自己电脑怎么模拟成服务器 浏览:553
单片机的Vpp是 浏览:351
iua编译器下载官方 浏览:85
压缩机高低压快速平衡 浏览:875
phpai 浏览:708
怎么不被命令 浏览:87
大话缘定三生服务器什么便宜 浏览:968
idea编译内部类 浏览:467
pdf2word在线转换 浏览:588
tim储存在哪个文件夹 浏览:623
华硕电脑u盘加密最简单方法 浏览:854
编程过路马游戏 浏览:610