Android

[오류처리]getEmbeddedPicture: Call to getEmbeddedPicture failed. MetadataRetrieverClient: failed to extract an album art

MP3 파일의 앨범 아트를 가져오려고 합니다. 그러나 어떤 이유로 getEmbeddedPicture 메서드 호출이 작동하지 않습니다. 이미지가 표시되지 않고 아래 이미지와 같이 LogCat에 오류가 표시됩니다.

모든 MP3파일에 앨범아트가 포함되어 있는 것은 아니기 때문에 발생하는 오류입니다. 일부 앨범의 경우 앨범 아트가 앨범 폴더 안에 있으므로 해당 폴더 내의 모든 파일에 대한 앨범 아트를 볼 수 있습니다.

로그를 찍어보니 앨범아트 경로는 존재하지만 실질적인 파일은 존재하지 않음을 확인하였습니다.

try {
    //이미지 경로는 존재하지만 이미지가 없다.
    Log.e("m.getImgUri(): ",m.getImgUri().toString());
    
    //inputStream에 담기전에 이미지존재여부를 체크해야한다.
	inputstream = cr.openInputStream(m.getImgUri());
} catch (Exception ee) {
inputstream = null;
}

Call to getEmbeddedPicture failed 해결방법

앨범 아트가 해당 파일에 포함되어 있으면 앨범 아트를 가져오므로 앨범 아트가 포함되지 않은 파일의 앨범 아트로 기본 이미지를 만들고 반환된 byte[]가 null인지 확인합니다.

byte[]가 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));
}

[REFERENCE]

Leave a Reply

error: Content is protected !!