我想知道一个默认的媒体播放器是如何工作的 . 就像它扫描SD卡中的所有歌曲,它是如何显示它们一样,所以整个整个工作在默认媒体播放器上 .我想要这些信息,以便我可以将它与我的自定义媒体播放器进行比较,并检查我的媒体播放器与默认播放器相比有多快 . 我尝试过搜索互联网,但无法找到与此相关的一些相关信息 .
您的问题在视角上非常广泛,因此,我将向您推荐相应的路径,以了解整个系统 .
首先, media files 的整体处理从 Gallery 应用程序开始 . 虽然不是切入点,但ImageCacheRequest可能是开始研究的一个很好的参考点,它展示了如何在屏幕上读取和渲染缓存的图像 .
media files
Gallery
接下来,要了解如何生成此缩略图,您必须引用从 camera , mms 等调用的ThumbnailManager.java .
camera
mms
Thumbnail class内部使用MediaMetadataRetriever,这是检索缩略图数据的主要类 .
Thumbnail
MediaMetadataRetriever 具有相应的 JNI 实现,如here所示 . 感兴趣的主要功能是 getFrameAtTime .
MediaMetadataRetriever
JNI
getFrameAtTime
最常见的实现是StagefrightMetadataRetriever,它的工作原理很简单 . 首先,创建一个解析器,即解析媒体文件类型并创建相应的解析器实体,如图所示here . 接下来,解析器将调用编解码器以在请求的时间戳处解码相应的 key frame 并提供图像,如在extractVideoFramewithFlags中可以观察到的那样 .
在此函数内部,一个codec is created帧被解码,颜色转换并返回给调用者,调用者将相同的帧传输到更高的应用程序 .
简而言之,我觉得你的播放器不会出现,只要相应的解析器和编解码器在系统中注册,就会生成缩略图 .
我想知道默认媒体播放器的工作原理
有许多“默认媒体播放器”应用程序,因为不同的Android设备附带不同的“媒体播放器”应用程序,通常由其设备制造商编写 .
欢迎您查看the implementation of the AOSP Music app,也可以查看其他开源媒体播放器 .
2 回答
您的问题在视角上非常广泛,因此,我将向您推荐相应的路径,以了解整个系统 .
首先,
media files
的整体处理从Gallery
应用程序开始 . 虽然不是切入点,但ImageCacheRequest可能是开始研究的一个很好的参考点,它展示了如何在屏幕上读取和渲染缓存的图像 .接下来,要了解如何生成此缩略图,您必须引用从
camera
,mms
等调用的ThumbnailManager.java .Thumbnail
class内部使用MediaMetadataRetriever,这是检索缩略图数据的主要类 .MediaMetadataRetriever
具有相应的JNI
实现,如here所示 . 感兴趣的主要功能是getFrameAtTime
.最常见的实现是StagefrightMetadataRetriever,它的工作原理很简单 . 首先,创建一个解析器,即解析媒体文件类型并创建相应的解析器实体,如图所示here . 接下来,解析器将调用编解码器以在请求的时间戳处解码相应的 key frame 并提供图像,如在extractVideoFramewithFlags中可以观察到的那样 .
在此函数内部,一个codec is created帧被解码,颜色转换并返回给调用者,调用者将相同的帧传输到更高的应用程序 .
简而言之,我觉得你的播放器不会出现,只要相应的解析器和编解码器在系统中注册,就会生成缩略图 .
有许多“默认媒体播放器”应用程序,因为不同的Android设备附带不同的“媒体播放器”应用程序,通常由其设备制造商编写 .
欢迎您查看the implementation of the AOSP Music app,也可以查看其他开源媒体播放器 .