ปูนเปียกได้รับการฝังภาพหน้าปก

ไลบรารีการโหลดรูปภาพ 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 โดยใช้ปูนเปียก


person Community    schedule 11.06.2017    source แหล่งที่มา


คำตอบ (1)


ฉันได้ แยกปูนเปียกและเพิ่ม Producer ของฉันเอง ซึ่งสามารถแยกรูปภาพที่ฝังไว้ได้ ของไฟล์เสียงที่คล้ายกับโซลูชัน Glide ในตัวอย่างที่ให้มา LocalAudioThumbnailProducer นี้ใช้กับเนื้อหาที่มี audio/ MimeType ฉันยังได้เขียนแอปตัวอย่างเล็กๆ เพื่อแสดงการใช้งานด้วย

โปรดทราบว่าการดำเนินการนี้จะเพิ่มเวอร์ชัน SDK ขั้นต่ำในปัจจุบันจาก 9 เป็น 10

person Community    schedule 23.05.2018