ไลบรารีการโหลดรูปภาพ fresco ของ Android มีองค์ประกอบที่หลากหลายเพื่อปรับแต่งการโหลดรูปภาพจากหลายแหล่ง ในสถานการณ์ของฉัน ฉันต้องการดึงภาพหน้าปกที่ฝังไว้ของไฟล์เสียง/mp3 (ไม่ใช่ ปกอัลบั้มซึ่งสามารถเข้าถึงได้โดยใช้ uri) ซึ่งสามารถทำได้โดยใช้ Android MediaMetadataRetriever หรือไลบรารีที่กำหนดเองบางรายการ เช่น FFmpegMediaMetadataRetriever
ปัญหาคือ API ต้องการ PATH เสมอและส่งคืน อาร์เรย์ไบต์ ซึ่งทำให้ยากต่อการรวมเข้ากับไปป์ไลน์ปูนเปียกแบบสตรีม
ตามหลักการแล้ว ฉันอยากจะใช้สิ่งนี้ในลักษณะเดียวกับที่ 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 โดยใช้ปูนเปียก