前言
1,AudioTrack只能播放声音不能播放冷门的音频,支持的格式少,不能实现特效。
2,OpenSL Es,专门用来播放声音。
架构
1,架构分为Java层和native层,Java层用来控制,native层用来播放。
2,播放的功能,本身是一个服务,肯定在一个服务类里面。
3,播放控制(播放暂停快进等)肯定写在Actvity。
4,服务和控制之间的通信使用广播。
5,service持有MNPlayer引用。
6,MNffmpeg统一调用播放器的东西。
7,native-lib只负责JNI接口。
8,OpenSL ES开发流程,
创建:create 初始化:Realize得到接口:GetInterface
9,openSl ES 是系统支持的,需要导入系统包
10,MNFFmpeg负责读取数据(音频和视频等)和初始化FFmpeg各个模块
11,opensles 不能播放aac数据,只能播放解码后的数据。
12,AvFrame就是解码后的数据。
13,音频倍速:重新整理波形,需要使用soundtouch库。
14,视频倍速:丢帧
15,soundtouch
16,变音(萝莉音,大叔音)要通过fmod库实现。
17,整理波形,最好在喇叭前面整理,对压缩数据整理没意义
18,导入头文件
19,导入库文件
后面是变量名。
20,一个音量值两个字节,short也是两个字节。
21,每帧音频字节很小,而且恒定。
22,视频渲染使用OpenGL,音频渲染使用Opensl Es。
23,线程只能C开,C++用的也是C的线程。
24,做同步以音频为主,因为音频是线性的。
总架构图