Fresco получает встроенную обложку

Библиотека загрузки изображений 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.


person Community    schedule 11.06.2017    source источник


Ответы (1)


Я разветвил fresco и добавил свой собственный Producer, который может извлекать встроенные изображения аудиофайлов, похожих на решение Glide в предоставленном фрагменте. Этот LocalAudioThumbnailProducer применяется к содержимому с audio/ MimeType. Я также написал небольшой пример приложения, чтобы продемонстрировать его использование.

Обратите внимание, что это повышает текущую минимальную версию SDK с 9 до 10.

person Community    schedule 23.05.2018