Android(安卓)MediaPlayer 分析 - service端文件结构
frameworks/base/media/libmediaplayerservice/ 目录是MediaPlayer 服务器端代码,实现了媒体播放,获取元数据,录像录音。
MediaPlayerService主要实现在MediaPlayerService.cpp中,是服务器端媒体操作的主接口,MediaPlayerService根据客户端请求的操作类型不同,创建不同的client代理,跟Client应用交互。
StagefrightPlayer.cpp是Android内置缺省播放器,真正的播放器AwesomePlayer在framework/base/media/libstagefright/下。
MidiFile.cpp 是Android内置的midi文件类型的播放器
Android把MediaPlayerService获取媒体文件元数据的代码移到MetadataRetrieverClient.cpp和MidiMetadataRetriever.cpp中(Midi文件的元数据获取和普通媒体文件方式有所区别,所以单独提出了MidiMetadataRetriever.cpp)
Android把Recorder相关的代码提取出来放入了MediaRecorderClient.cpp中,这个类实际只起到了中转作用,具体的recorder有Android内置的stagefright recorder,以及PVMediaRecorder
Mediaplayer Service工作流程相当简单
设置阶段:
- client应用发起申请,MediaPlayer服务器创建对应的client代理
- client调用setDataSource接口,MediaPlayer根据文件内容 后缀名或者url类型,选择相应的播放器
-
client发送播放命令,MediaPlayer Service端调用相应播放器的播放命令
- client发送metadata操作命令,MediaPlayer Service端的 MetadataRetrieverClient调用不同的metadata获取插件获取metadata
- client发送recorder命令,MediaPlayer Service端的MediaRecorderClient调用不同的recorder插件录音录像。
Midi格式
Midi是一类比较特殊的媒体文件,普通的声音文件(*.wav文件)是计算机直接把声音信号的模拟信号经过取样——量化处理,变成与声音波形对应的数字信号,存储在文件中,而mid文件只是记录了演奏乐器的各种信息和指令,如用哪一种乐器,什么时候按某个键,力度怎么样等等,至于播放时发出的声音,那是通过播放软件或者音源的转换而成的。
Metadata
我的理解是除去媒体内容外,描述媒体文件的数据,包括类型,大小,日期,Author,duration,width,height,甚至thumbnail都可算做元数据
更多相关文章
- React Native 项目运行在安卓模拟器Http请求报错
- Android(安卓)Vendor Test Suite (VTS) 的概念、作用及测试方法
- Android开发者指南(9) —— ProGuard
- Android(安卓)framework add service
- Android-配置文件中设置“android:clickable="false"无效的原因
- Android(安卓)jni初探
- Android调用系统分享功能总结
- 总结:Android之Gradle总结
- 利用FRIDA攻击Android应用程序(三)