此库由于效率不高,已弃用。VoAACEncoder提供更好的性能,点此查看。
AacEncoder 是Android平台上实现AAC编码的jni库。
基于FAAC 1.28 ,源码:http://downloads.sourceforge.net/faac/faac-1.28.zip
主要应用在需要将语音编码为ADTS流进行实时流发布
使用方法:
将libAacEncoder.so 放入libsarmeabi 目录
将AacEncoder.java 放入com.sinaapp.bashell包下
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
public class MainActivity extends Activity { private int hAac; private AacEncoder aacEncoder; private int bufferSize; private byte[] tempBuffer; private AudioRecord recordInstance; private boolean isStart; private FileOutputStream fos; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); try { fos = new FileOutputStream("/sdcard/testAAC.aac"); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } new Thread(new Runnable() { @Override public void run() { aacEncoder = new AacEncoder(); hAac = aacEncoder.AACEncoderOpen(16000, 1); int min = AudioRecord.getMinBufferSize(16000, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT); bufferSize = aacEncoder.inputSamples * 16 / 8; tempBuffer = new byte[bufferSize]; recordInstance = new AudioRecord(MediaRecorder.AudioSource.MIC, 16000, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize); recordInstance.startRecording(); isStart = true; while (isStart) { int bufferRead = recordInstance.read(tempBuffer, 0, bufferSize); if (bufferRead > 0) { byte[] ret = aacEncoder.AACEncoderEncode(hAac, tempBuffer, tempBuffer.length); System.out.println("ret:" + ret.length); try { fos.write(ret); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } recordInstance.stop(); recordInstance.release(); recordInstance = null; aacEncoder.AACEncoderClose(hAac); try { fos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }).start(); } @Override protected void onDestroy() { isStart = false; super.onDestroy(); } } |
请不要忘记开启权限
1 2 |
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.RECORD_AUDIO"/> |
参数设置:AacEncoder.java文件
1 2 3 4 5 6 7 |
public int bitRate = 32000; public int quantqual = 100; public int bandWidth = 7200; public int aacObjectType = LOW; public int outputFormat = ADTS; public int mpegVersion = MPEG4; public int inputFormat = FAAC_INPUT_16BIT; |
文件下载:AacEncoder.zip
原创文章,转载请注明: 转载自贝壳博客
本文链接地址: AacEncoder
请问有没有aac解码部分的?
解码可以参看这个开源项目
http://code.google.com/p/aacdecoder-android/
用opencore解码 效率非常高
你这个不能用,AacEncoderOpen函数没有实现
捉急啊,不改包名会死星人么
谢了,搞定了
请问 改包名是指哪里
libAacEncoder.so ,能公开此库的编译方式吗?
你的DEMO在某些手机上不能运行,recordInstance = new AudioRecord(MediaRecorder.AudioSource.MIC, 16000, AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT, bufferSize);不能用bufferSize, int min = AudioRecord.getMinBufferSize(16000, AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT);将bufferSize改成min,可以运行,但音频录像文件杂音很大?您知道是什么原因吗?