壁画获得嵌入式封面艺术

Posted

技术标签:

【中文标题】壁画获得嵌入式封面艺术【英文标题】:Fresco obtaining embedded cover art 【发布时间】:2017-06-11 16:33:38 【问题描述】:

android fresco 图片加载库提供了多种组件来自定义来自多个来源的图片加载。在我的情况下,我想检索音频/mp3 文件的嵌入式封面(不是可以使用 uri 访问的专辑封面)。这可以使用Android MediaMetadataRetriever 或一些自定义库(如FFmpegMediaMetadataRetriever)来实现。

问题是,API 总是需要一个PATH 并返回一个字节数组。这使得它很难集成到基于流的 fresco 管道中。

理想情况下,我想实现这个类似于Glide allows it。也就是一些非常低级的函数,它获取字节并将它们简单地包装在一个流中。 Afaik,我们可以使用自定义 Decoders,但不能使用 Producers。数据已经在解码器阶段加载。我不知道这应该发生在哪一层以及是否可能。

滑动代码供参考:

@Override public InputStream loadData(Priority priority) throws Exception 
    MediaMetadataRetriever retriever = new MediaMetadataRetriever();
    try 
        retriever.setDataSource(model.path);
        byte[] picture = retriever.getEmbeddedPicture();
        if (picture != null) 
            return new ByteArrayInputStream(picture);
         else 
            return fallback(model.path);
        
     finally 
        retriever.release();
    

结果将被加载到 SimpleDraweeView 中。或者,我愿意接受任何允许我使用 fresco 将嵌入式封面艺术异步加载到 SimpleDraweeView 中的解决方案。

【问题讨论】:

【参考方案1】:

我有forked fresco and added my own Producer,它能够提取音频文件的嵌入图片,类似于提供的 sn-p 中的 Glide 解决方案。此 LocalAudioThumbnailProducer 适用于具有audio/ MimeType 的内容。我还写了一个小sample app来展示用法。

请注意,这会将当前的最低 SDK 版本从 9 提高到 10。

【讨论】:

以上是关于壁画获得嵌入式封面艺术的主要内容,如果未能解决你的问题,请参考以下文章

将一首歌曲的封面艺术批量复制到另一首(相同的文件名)

仿大理石硬化地坪费用是多少

使用 Mutagen 在 MP4 文件中嵌入专辑封面

熟悉的元器件,不熟悉的艺术!

一起涂墙吧,没有艺术细胞我们还有工程思想

通过 Spotify API 获取封面艺术