2013-03-20 3 views
5

У меня трудное время отображает текущий трек, воспроизводимый из источника потоковой передачи. Использование класса MediaMetaDataRetriever возвращает значение NULL, что означает, что он не прошел. Я написал простой метод, но теперь я наклоняя думать, что это работает только на медиа-файлы, такие как MP3, WMA, AVI и т.д.MediaMetadataRetriever в потоковом источнике

public void metaData(){ 
     mmr.setDataSource(urlStation); 
     String metaD = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUMARTIST); 
     Toast.makeText(MainActivity.this, "Artist = " + metaD, Toast.LENGTH_LONG).show(); 

Любой хороший и легкий recommandations будет высоко оценен. Спасибо за ваше время!

ответ

11

MediaMetadataRetriever не работает с URL-адресами определенных версий Android, см. this. Я создал FFmpegMediaMetadataRetriever как обходной путь, я предлагаю попробовать его.

+0

Спасибо, Уильям за ваш ответ. Это должно помочь решить мою проблему. – Marquis

+0

Это только для медиафайлов, а не для потокового источника. – jul

+0

William Seemann Он работает над видео youtube .. Я пробовал, но у меня метаданные не смогли получить ошибку ... – arul

2

Согласно тому же issue перечисленных в другой ответ, вам просто нужно использовать метод setDataSource с этими аргументами:

setDataSource(String uri, Map<String, String> headers) 

Так, например,

public void getStreamMetaData(String url){ 
    MediaMetadataRetriever mmr = new MediaMetadataRetriever(); 
    mmr.setDataSource(url, new HashMap<String, String>()); 
    //now do whatever you want 

} 

Я тестировал его с потоковое mp4, и это сработало для меня. Также просто заметьте, вы захотите использовать метод setDataSource в AsyncTask или в другом потоке, так как в соответствии с документами может потребоваться некоторое время.

+1

Для меня в этом случае все возвращенные строки равны null ... но vlc получает информацию в порядке. –

Смежные вопросы