MediaPlayer:如何使用MediaMetadataRetriever检索元数据?

时间:2013-09-21 12:20:42

标签: java android

我的MediaPlayer正在运行,但我需要检索元数据,例如流标题。我正在使用此代码:

public String getMeta(){
        meta = new MediaMetadataRetriever();
        meta.setDataSource("http://111.1111.1111.1111:1111");
        return meta.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM);

但是我只是从这里得到一个空字符串。我也尝试了meta的所有常量。我不确定,但我认为问题出在与webstation的连接上。我的MediaPlayer有一个监听器,例如mPlayer.setOnPreparedListener(new OnPreparedListener(){...}。但是对于MediaMetadataRetriever不存在。

有人能帮助我吗?谢谢!

3 个答案:

答案 0 :(得分:2)

我对媒体播放器一无所知,但可以使用 Apache Tika 来提取有关文件的元数据:

以下是我提取文件元数据的代码:

InputStream is = new FileInputStream("/home/rahul/Music/03 - I Like Your Music.mp3");

Parser parser = new AutoDetectParser();
BodyContentHandler handler = new BodyContentHandler();

Metadata metadata = new Metadata();
parser.parse(is, handler, metadata, new ParseContext());

String handler = handler.toString();
System.out.println("Handler data: " + handler);
System.out.println(metadata.get(Metadata.CREATION_DATE));
System.out.println(metadata.get(Metadata.LAST_MODIFIED));

它将提取元数据,如我们所见:

Apache Tika Metadata

答案 1 :(得分:0)

Apacke Tika太大,仅限于在移动应用程序中使用。试试FFmpegMediaMetadataRetriever(免责声明:这是我的项目)。它具有与MediaMetadataRetriever相同的接口:

FFmpegMediaMetadataRetriever retriever = new FFmpegMediaMetadataRetriever();
retriever.setDataSource("http://someurl");
retriever.release();

答案 2 :(得分:0)

您没有从MediaMetadataRetriever.extractMetaData()获得任何结果的原因是您的示例调用setDataSource(String path),它只会加载本地文件。如果要传入远程URL,则需要调用setDataPath(String uri,Map headers)方法。