java - 媒体元数据检索器 JNI : getEmbeddedPicture failed

标签 java android mediametadataretriever

我使用 android 并迭代数百个媒体文件以找到第一个嵌入图片,效果很好,但在我的 logcat 中发送了很多错误。

我正在使用这段代码:

for (String s : ArrayList <String> paths){
    MediaMetadataRetriever mmr = new MediaMetadataRetriever();
    mmr.setDataSource(path);
    byte[] data = mmr.getEmbeddedPicture();
    if (data != null) {
    ...
}

它记录的错误是:

E/MediaMetadataRetrieverJNI﹕ getEmbeddedPicture: Call to getEmbeddedPicture failed.
E/MediaMetadataRetrieverJNI﹕ getEmbeddedPicture: Call to getEmbeddedPicture failed.
E/MediaMetadataRetrieverJNI﹕ getEmbeddedPicture: Call to getEmbeddedPicture failed.
E/MediaMetadataRetrieverJNI﹕ getEmbeddedPicture: Call to getEmbeddedPicture failed.
E/MediaMetadataRetrieverJNI﹕ getEmbeddedPicture: Call to getEmbeddedPicture failed.
E/MediaMetadataRetrieverJNI﹕ getEmbeddedPicture: Call to getEmbeddedPicture failed.
.....

我用对了吗?如果可以,我可以抑制错误,这会使调试变得烦人。 根据MediaMetadataRetriever它应该简单地返回 null

最佳答案

使用 getEmbeddedPicture 是不够的,您需要为此添加一些代码。

试试这个

md.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.your_default_image));
}

再看看这个:

try {
        byte [] art = md.getEmbeddedPicture();
        Bitmap songImage = BitmapFactory
            .decodeByteArray(art, 0, art.length);
        md.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM));
        String artist =md.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST));
        String genre = md.extractMetadata(MediaMetadataRetriever.METADATA_KEY_GENRE));
    } catch (Exception e) {
         // TO-DO Exception
    }

引用docs

关于java - 媒体元数据检索器 JNI : getEmbeddedPicture failed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25367292/

相关文章:

java - 如何使用正则表达式模式在不解析的情况下获取 JSON 属性值

java - 使用 Selenium 在 Webtest 中模拟 'Enter' 按键

java - 资源 ID 和设备

android - 如何通过系统发送合成的MotionEvent?

android - 从视频中获取多个缩略图

android - MediaMetadataRetriever getFrameAtTime 仅返回第一帧

java - Swing/JFrame 与 AWT/Frame 在 EDT 之外的渲染

JUNIT 测试时出现 java.lang.StackOverflowError

Android:保持与应用程序相关的本地文件的最新记录

java.lang.RuntimeException : setDataSource failed: status = 0xFFFFFFED in android? 错误