壁画获得嵌入式封面艺术

时间:2017-06-11 16:33:38

标签: java android image pipeline fresco

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

)来实现

问题是,API始终需要 PATH 并返回字节数组。这使得它很难融入基于流的壁画管道。

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

Glide代码供参考:

@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中。或者,我可以使用任何解决方案,这样我就可以使用壁画将嵌入式封面艺术异步加载到SimpleDraweeView中。

1 个答案:

答案 0 :(得分:0)

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

请注意,这会将当前最低SDK版本从9提升到10.