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中。
答案 0 :(得分:0)
我forked fresco and added my own Producer能够提取类似于提供的代码段中的Glide解决方案的音频文件的嵌入图片。此LocalAudioThumbnailProducer适用于具有audio/
MimeType的内容。我还写了一个小sample app来展示其用法。
请注意,这会将当前最低SDK版本从9提升到10.