壁画获得嵌入式封面艺术
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。
【讨论】:
以上是关于壁画获得嵌入式封面艺术的主要内容,如果未能解决你的问题,请参考以下文章