Получаването на вградено изображение на mp3 файл не бе успешно

Опитвам се да получа обложката на албума на MP3 файл. Мислех, че най-добрият и чист начин да направите това е да използвате класа MediaMetadataRetriever. Но по някаква причина извикването на метода getEmbeddedPicture не работи. Изображението не се показва, LogCat показва грешка:

04-29 18:36:19.520: E/MediaMetadataRetrieverJNI(25661): getEmbeddedPicture: Call to getEmbeddedPicture failed.

Това е кодът, който изглежда не работи:

    @Override
    protected Void doInBackground(Void... params) {
        // TODO Auto-generated method stub
        MediaMetadataRetriever mmdr = new MediaMetadataRetriever();
        mmdr.setDataSource(path); //path of the MP3 file on SD Card
        bites = mmdr.getEmbeddedPicture();
        if(bites != null)
        artBM = BitmapFactory.decodeByteArray(bites, 0, bites.length);
        return null;
    }

Пускам го на устройство с Android 4.2, така че не би трябвало да има проблем с MediaMetadataRetriever (изисква api lvl 10). Файловете, които тествах, показват изображение в Windows Explorer, така че изглежда има вградено изкуство. Някой има ли някакви мисли по този въпрос?


person Raymond P    schedule 29.04.2013    source източник
comment
Локален, но изглежда, че зависи от файла. На други MP3 файлове той показва обложката на албума.   -  person Raymond P    schedule 01.05.2013


Отговори (2)


Не всички MP3 файлове имат вградена обложка на албума, за някои албуми обложката на албума се поставя в папката на албума, така че можете да видите обложката на албума за всички файлове в тази папка,

Но

MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(mp3_file_path); 

Това ще получи обложката на албума, ако обложката на албума е вградена в този файл, така че направете изображение по подразбиране като обложка на албум за файлове, които не са вградени с обложка на албума, и проверете дали върнатият байт [] е нулев или не,

Ако байтът [] не е null, тогава обложката на албума се извлича, ако е null, тогава задайте изображението на обложката на албума по подразбиране

В моя проект използвам това

    MediaMetadataRetriever mmr = new MediaMetadataRetriever();
    mmr.setDataSource(songsList.get(index).get("songPath"));
    byte[] artBytes =  mmr.getEmbeddedPicture();
    if(artBytes != null)
    {
        InputStream is = new ByteArrayInputStream(mmr.getEmbeddedPicture());
        Bitmap bm = BitmapFactory.decodeStream(is);
        imgArt.setImageBitmap(bm);
    }
    else
    {
        imgArt.setImageDrawable(getResources().getDrawable(R.drawable.adele));
    }

Надявам се това да ви помогне

person Mani    schedule 17.07.2013

Получавам същия проблем, изглежда, че не всички mp3 файлове имат обложка на албума. Това, което трябва да направим, е да зададем картина по подразбиране на изображението.

public Bitmap getAlbumBitmap(Context context, String url, int defaultRes) {
        Bitmap bitmap = null;
        //能够获取多媒体文件元数据的类
        MediaMetadataRetriever retriever = new MediaMetadataRetriever();
        try {
            retriever.setDataSource(url); //设置数据源
            byte[] embedPic = retriever.getEmbeddedPicture(); //得到字节型数据
            bitmap = BitmapFactory.decodeByteArray(embedPic, 0, embedPic.length); //转换为图片
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                retriever.release();
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        return bitmap == null ? BitmapFactory.decodeResource(context.getResources(), defaultRes) : bitmap;
    }
person jiechengWu    schedule 25.02.2017