2014-10-15 4 views
3

Я использую MediaMetadataRetriever для извлечения метаданных из m4a-файлов на Android-устройстве. Вот код, который я выполняю.Чтение мета и начало воспроизведения m4a-файлов очень медленное на Android

final MediaMetadataRetriever mmr = new MediaMetadataRetriever(); 
mmr.setDataSource(new File(root, audioFile).getAbsolutePath()); 

String title = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE); 
String album = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM); 
String artist = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST); 

mmr.release(); 

Проблема в том, что когда я называю этот код для mp3-файлов, это очень быстро. Например, 25 mp3-файлы проанализированы на под 900ms раз.

Но если я называю это для одного m4a-файл, то тот же код требует 6 секунд казнить. И это очень медленно.

Другое наблюдение, когда я использую Android MediaPlayer, тогда любой mp3-файл начинает играть сразу, в то время как между стартовым m4a-файлом и первым звуком есть такая же 6-секундная задержка.

Я пробовал с различными версиями Android и различными устройствами. Та же проблема.

Есть ли способ избавиться от этой задержки?

ответ

0

Вы пробовали FFmpegMediaMetadataRetriever:

final FFmpegMediaMetadataRetriever mmr = new FFmpegMediaMetadataRetriever(); 
mmr.setDataSource(new File(root, audioFile).getAbsolutePath()); 

String title = mmr.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_TITLE); 
String album = mmr.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_ALBUM); 
String artist = mmr.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_ARTIST); 

mmr.release(); 
+0

Я посмотрел на него, но не хотел иметь в нем еще одну родную библиотеку. Если нет лучшего решения, я могу вернуться к этому варианту. –

0

Вы пробовали MediaStore?

Просьба проверить скорость файла MP4, находящегося в беспокойстве, используя MediaStore. Образец можно найти over here