具体代码请看:NDKPractice项目的ffmpeg83
先来看下流程图:

1.获取音频 Meta 信息
1  | extern "C" JNIEXPORT void JNICALL  | 
2.解码音频数据
关于解码函数 avcodec_decode_audio4 已经过时了,取而代之的是 avcodec_send_packet 和 avcodec_receive_frame 。
1  | // 6.查找解码  | 
3.播放音频
播放 pcm 数据目前比较流行的有两种方式,一种是通过 Android 的 AudioTrack 来播放,另一种是采用跨平台的 OpenSLES(直接用的底层操作驱动播放) 来播放,
个人比较倾向于用更加高效的 OpenSLES 来播放音频,大家可以先看看 Google 官方的 native-audio 事例,这里我们先采用 AudioTrack 来播放
AudioTrack 来播:
- 创建 AudioTack 对象
 - 启动循环,设置为播放状态 (play)
 - 把数据推到指定数组中 (write)
 
1  | jobject createAudioTrack(JNIEnv *env){  | 
这块播放还是有杂音,而且内存持续上涨,下节我们通过多线程播放来解决