No se pudo incrustar el archivo MP3 incorporado

Estoy tratando de obtener el álbum de arte de un archivo MP3. Pensé que la manera mejor y más limpia de hacer esto es usar la clase MediaMetadataRetriever. Pero por alguna razón llamar al método getEmbeddedPicture no funciona. La imagen no se muestra, LogCat muestra un error:

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

Este es el código que no parece funcionar:

  @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; } 

Lo estoy ejecutando en un dispositivo con Android 4.2, por lo que no debería haber ningún problema con el MediaMetadataRetriever (requiere api lvl 10). Los archivos que probé mostrar una imagen en el explorador de Windows, por lo que parece que hay arte incrustado. ¿Alguno tiene alguna idea sobre esto?

No todos los archivos MP3 tienen incrustaciones de álbum, para algunos álbumes se coloca el álbum en la carpeta del álbum, por lo que puede ver la carátula de todos los archivos dentro de esa carpeta,

Pero

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

Esto obtendrá el arte del álbum si el arte del álbum se incrusta en ese archivo, así que haga una imagen del defecto como arte del álbum para los archivos que no se incorporan con arte del álbum, y compruebe si el byte devuelto es nulo o no,

Si el byte [] no es nulo, se recupera la imagen del álbum, si es nula, entonces se establece la imagen predeterminada del álbum

En mi proyecto estoy usando esto

  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)); } 

Espero que esto ayude

Tengo el mismo problema, parece que no todos los archivos mp3 tiene un arte del álbum. Lo que debemos hacer es establecer una imagen predeterminada en la imagen.

 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; } 
  • Transmisión de audio con Android MediaPlayer
  • Configurar el tono de llamada personalizado de contacto, ¿cómo?
  • Codificación pcm muestras a mp3 en tiempo real android, ¿posible?
  • Error de MediaPlayer de Android: Error de MediaPlayer (1, -2147483648) en Stream de Internet
  • Creación de una instancia sencilla de ExoPlayer
  • Decodificación de MP3 en Android
  • ExoPlayer y comandos start / pause / seekTo
  • Android protege la forma del archivo mp3 que es compartida, pero todavía jugable
  • Android MediaExtractor y la corriente mp3
  • Cómo registrar una nueva asociación de tipo de archivo con MP3
  • Reproducir archivos mp3 durante la descarga?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.