android AAC的音频硬解码

上一篇写了AAC音频的硬编码,今天补充硬解码,其实就是硬编码反过来,非常简单

初始化AAC硬解码资源:

public int Start() {

int iRet = 0;

_miVersion = android.os.Build.VERSION.SDK_INT;

if(_miVersion < 16) {

iRet = ErrorInfo.ERR_ANDROID_VER_NOT_SUPPORT;

return iRet;

}

if(mMediaDecode != null) {

return ErrorInfo.ERR_MEDIACODEC_EXIST_ALREADY;

}

if(_audioTrack != null) {

return ErrorInfo.ERR_AUDIOTRACK_EXIST_ALREADY;

}

mMediaDecode = MediaCodec.createDecoderByType("audio/mp4a-latm");

MediaFormat format = new MediaFormat();

format.setString(MediaFormat.KEY_MIME, "audio/mp4a-latm");

format.setInteger(MediaFormat.KEY_CHANNEL_COUNT, 1);

format.setInteger(MediaFormat.KEY_SAMPLE_RATE, _miSamplingRate);

format.setInteger(MediaFormat.KEY_BIT_RATE, _miBitRate);

format.setInteger(MediaFormat.KEY_AAC_PROFILE, MediaCodecInfo.CodecProfileLevel.AACObjectLC);

mMediaDecode.configure(format, null, null, 0);

mMediaDecode.start();

_audioTrack = new MyAudioTrack(8000, AudioFormat.CHANNEL_OUT_MONO,

AudioFormat.ENCODING_PCM_16BIT);

_audioTrack.init();

inputBuffers = mMediaDecode.getInputBuffers();

outputBuffers = mMediaDecode.getOutputBuffers();

try {

Thread.sleep(200);

} catch (InterruptedException e) {

e.printStackTrace();

}

_mbStartFlag = true;

_mbInitFlag  = false;

return iRet;

}

对收到的AAC数据进行解码,并用_audioTrack进行播放:

需要注意的是, AAC音频第一个报文开始是一个两个字节的数据(0x15,0xF8),需要自己手动填写以下:

public void DecodeAudio(byte[] audioData) {

int iRet = 0;     _miVersion = android.os.Build.VERSION.SDK_INT;     if(_miVersion < 16) {     return;     }     if(audioData == null) { return; }     if(!_mbStartFlag) {     return;     } int iAudioDataLen = audioData.length; try {        inputBufferIndex = mMediaDecode.dequeueInputBuffer(WAIT_TIME);        if (inputBufferIndex >= 0)        {            inputBuffer = inputBuffers[inputBufferIndex];            inputBuffer.clear();         if(_mbInitFlag == false) {         _mbInitFlag = true;         byte[] fisrtData = new byte[2];         fisrtData[0] = 21;         fisrtData[1] = -120;         inputBuffer.put(fisrtData);         }else {         inputBuffer.put(audioData);         }                    mMediaDecode.queueInputBuffer(inputBufferIndex, 0, iAudioDataLen, System.nanoTime()/1000, 0);        }        outputBufferIndex = mMediaDecode.dequeueOutputBuffer(bufferInfo, WAIT_TIME);        while (outputBufferIndex >= 0)        {            outputBuffer = outputBuffers[outputBufferIndex];            outputBuffer.position(0);            outData = new byte[bufferInfo.size];            outputBuffer.get(outData);            Log.d(TAG, outData.length + " bytes decoded"); if (_audioTrack != null) { _audioTrack.playAudioTrack(outData, 0, outData.length); }            mMediaDecode.releaseOutputBuffer(outputBufferIndex, false);            outputBufferIndex = mMediaDecode.dequeueOutputBuffer(bufferInfo, WAIT_TIME);        } } catch (Exception e) { Log.e(TAG, "Exception: "+Log.getStackTraceString(e)); }              return;     }

android aac硬解码,android AAC的音频硬解码相关推荐

  1. 基于 CoreAudio 的音频编解码(二):音频编码

    系列文章目录 基于 CoreAudio 的音频编解码(一):音频解码 基于 CoreAudio 的音频编解码(二):音频编码 前言 在 基于 CoreAudio 的音频编解码(一):音频解码 中,我们 ...

  2. 基于 CoreAudio 的音频编解码(一):音频解码

    系列文章目录 基于 CoreAudio 的音频编解码(一):音频解码 基于 CoreAudio 的音频编解码(二):音频编码 前言 Core Audio 是iOS和MAC系统中的关于数字音频处理的基础 ...

  3. 基于 FFMPEG 的音频编解码(三):音频编码

    音频编码 基于 FFMPEG 的音频编解码(一):Hello FFMPEG,安装与编译 基于 FFMPEG 的音频编解码(二):音频解码 基于 FFMPEG 的音频编解码(三):音频编码 在前面文章中 ...

  4. 基于 FFMPEG 的音频编解码(二):音频解码

    音频解码 基于 FFMPEG 的音频编解码(一):Hello FFMPEG,安装与编译 基于 FFMPEG 的音频编解码(二):音频解码 基于 FFMPEG 的音频编解码(三):音频编码 在 Hell ...

  5. 基于 FFMPEG 的音频编解码(一):Hello FFMPEG,安装与编译

    Hello FFMPEG 基于 FFMPEG 的音频编解码(一):Hello FFMPEG,安装与编译 基于 FFMPEG 的音频编解码(二):音频解码 基于 FFMPEG 的音频编解码(三):音频编 ...

  6. android 使用MediaCodec(根据设备状况硬编解码)来转码音频(MP3 to aac),并同时裁剪音频

    第一次写这样的博文,写得不好,望大家及时指出博文中的错误,以便于相互学习. 本来主要介绍如何使用mediacodec来转码音频,同时实现音频的裁剪.对于mediacodec相信大家都不陌生,没做过也听 ...

  7. 【Android RTMP】音频数据采集编码 ( FAAC 编码器编码 AAC 音频解码信息 | 封装 RTMP 音频数据头 | 设置 AAC 音频数据类型 | 封装 RTMP 数据包 )

    文章目录 安卓直播推流专栏博客总结 一. FAAC 编码器编码 AAC 音频解码信息 二. 封装 RTMP 音频数据头 三. 封装 RTMP 音频数据类型 四. 拷贝 AAC 音频数据到 RTMPPa ...

  8. Android音频开发(七)音频编解码之MediaCodec编解码AAC下

    在上一篇初识MediaCodec中,我们认识了MediaCodec,知道了MediaCodec的基本工作流程和开发注意事项,这一篇我将讲述如何利用MediaCodec编解码AAC. 1:MediaCo ...

  9. android录制avi视频时aac音频的正确配置方法

    在android上面,用avilib.c开源库录制过avi视频加aac音频的同学们,应该都有一段为了aac音频无法正确录制和播放而抓狂的经历.我本人也经历了这样的折磨,现在将踩过的坑记录下来,让后来者 ...

最新文章

  1. 安顺计算机二级考试,安顺市2020年3月计算机二级报名时间|网上报名入口【12月18日9:00开通】...
  2. python源码精要(6)-CPython编译标志
  3. python 编程语言排行榜_2019年6月编程语言排行榜:Python 排名飙升,三年内有望超越Java...
  4. python中的面向对象
  5. 基于 MaxCompute + Hologres 的人群圈选和数据服务实践
  6. 20190826:(leetcode习题)反转链表
  7. 让别人查看云服务器的文件夹,让别人查看云服务器的文件夹
  8. linux 卡在grub_关于linux开机进入grub问题的解决方法
  9. php实现成语小游戏,成语小秀才微信小程序源码-PHP代码类资_aqa7qj 源码采用php实现 - 下载 - 搜珍网...
  10. 2021-2026年中国畜牧业发展环境分析及投资前景预测报告
  11. 「GoTeam 招聘时间」滴滴出行系统研发工程师(北京)
  12. SOA和Web Service
  13. Android系统介绍与框架
  14. 构建基于词典的Lucene分析器
  15. Python综合评价模型(二)灰色关联度法
  16. 一款可编程的的串口调试工具 报文分类 脚本编程
  17. 机器学习翻译任务中的constrain decoding 实现流程方法详解
  18. 计算有固定收入的党员每月所交纳的党费。月工资收入400元及以下者,交纳月工资总额的0.5%;月工资收入401~600元者,交纳月工资总额的1%;月工资收入601~800元者,交纳月工资总额的1.5%;
  19. uniapp nvue使用live-pusher组件以及腾讯云实现直播推拉流
  20. 三种技术实现PC1、PC2与PC3都通,而PC1与PC2不通

热门文章

  1. PTA: 7-2 银行业务队列简单模拟 (25 分)
  2. Hive电商数仓实战
  3. 大数据安全分析有哪些常见问题
  4. 大数据产业目前面临哪些问题
  5. 影响大数据和分析的5大趋势
  6. busybox制作根文件系统
  7. L2-001 紧急救援(最短路)
  8. linux 命令快捷,Linux常见命令快捷方式(示例代码)
  9. oracle基础入门(四)
  10. 0712 - 坚守,加强老本