美文网首页
音频 | MediaPlayerService服务

音频 | MediaPlayerService服务

作者: 力卉编程 | 来源:发表于2019-12-28 10:58 被阅读0次

代码目录:frameworks/av/media/libmediaplayerservice

# 目录中代码是 MediaPlayer 服务器端代码,实现了媒体播放,获取元数据,录像录音。
# 在 mediaserver 的 main_mediaserver.cpp 文件中添加了 MediaPlayerService服务:
AudioPlayerService::instantiate();

MediaPlayerService服务主要实现在MediaPlayerService.cpp中,是服务器端媒体操作的主接口,MediaPlayerService根据客户端请求的操作类型不同,创建不同的client代理,跟Client应用交互。

StagefrightPlayer.cpp是Android内置播放器,真正的播放器AwesomePlayer在framework/av/media/libstagefright/下。
MidiFile.cpp 是Android内置的midi文件类型的播放器

Android把MediaPlayerService获取媒体文件元数据的代码移到MetadataRetrieverClient.cpp和MidiMetadataRetriever.cpp中(Midi文件的元数据获取和普通媒体文件方式有所区别,所以单独提出了MidiMetadataRetriever.cpp)

Android把Recorder相关的代码提取出来放入了MediaRecorderClient.cpp中,这个类实际只起到了中转作用,具体的recorder有Android内置的StagefrightRecorder。

MediaplayerService工作流程相当简单

  • 设置阶段:

client应用发起申请,MediaPlayerService创建对应的client代理
client调用setDataSource接口,MediaPlayerService根据文件内容后缀名或者url类型,选择相应的播放器

  • 操作阶段:

client发送play命令,MediaPlayerService端调用相应播放器的播放命令
client发送metadata操作命令,MediaPlayerService端的 MetadataRetrieverClient调用不同的metadata获取插件来获取metadata
client发送recorder命令,MediaPlayerService端的MediaRecorderClient调用不同的recorder插件录音录像。

Midi格式介绍

Midi是一类比较特殊的媒体文件,普通的声音文件(*.wav文件)是计算机直接把声音信号的模拟信号经过取样——量化处理,变成与声音波形对应的数字信号,存储在文件中,而mid文件只是记录了演奏乐器的各种信息和指令,如用哪一种乐器,什么时候按某个键,力度怎么样等等,至于播放时发出的声音,那是通过播放软件或者音源的转换而成的。

Metadata

我的理解是除去媒体内容外,描述媒体文件的数据,包括类型,大小,日期,Author,duration,width,height,甚至thumbnail等都可算做元数据

文 | 力卉编程

相关文章

网友评论

      本文标题:音频 | MediaPlayerService服务

      本文链接:https://www.haomeiwen.com/subject/agxsoctx.html