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:
- Formato de música Android recomendado - mp3, ogg u otro?
- El archivo Mp3 no se reproduce después de convertir desde byte android
- android forma más rápida de decodificar mp3 a los datos de pcm
- Los archivos mp3 de baja calidad no se reproducen correctamente como se esperaba
- Cómo reproducir archivos mp3 utilizando sonic NDK en Android?
@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?
- El lugar correcto para poner archivos mp3 en un proyecto android
- Wowza .mp3 RTSP stream en android
- Archivo de selección de archivos de Android
- Cómo codificar un WAV a un mp3 en un dispositivo Android
- Streaming de audio desde una URL en Android usando MediaPlayer?
- Android MediaPlayer no reproducir archivos mp3
- Audio Android demasiado rápido en algunos dispositivos con MediaCodec y AudioTrack
- Android - Reproducción de mp3 desde byte
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; }
- Notificación de notificación de Android O no publicada en el canal, pero es
- El método getFragmentManager () no está definido para el tipo MainActivity