具体代码请看:NDKPractice项目的ffmpeg83
1.添加准备完毕回调
1 | JNICall::JNICall(JavaVM *javaVM, JNIEnv *jniEnv, jobject jPlayerObj) { |
2.用队列边解码边播放
为什么要用队列边解码边播放?
原因:首先解码成pcm是耗时的,如果播放的网络音频,网络卡顿时读取也会耗时,这个时候读取本来就耗时的情况下每次读取成功还等待解码完成后再去读取就会有点卡顿。所以咱们读取和解码分开就会提升性能
av_read_frame:从流里面解析一个一个的 packet ,流可能是本地流也可以是网络流
1 | while (av_read_frame(pFormatContext, pPacket) >= 0) { // 读取 |
修改过后,具体请看文件Audio.cpp
1 | // 读取的线程 |