Библиотека загрузки изображений Android fresco предоставляет множество компонентов для настройки загрузки изображений из нескольких источников. В моей ситуации я хочу получить встроенную обложку аудио/mp3-файла (не обложку альбома, доступ к которой можно получить с помощью uri). Этого можно добиться с помощью Android MediaMetadataRetriever или некоторой пользовательской библиотеки, например FFmpegMediaMetadataRetriever.
Проблема в том, что API всегда требует PATH и возвращает массив байтов. Это затрудняет интеграцию в потоковый конвейер fresco.
В идеале я хотел бы реализовать это аналогично тому, как это позволяет 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 с помощью fresco.