MediaMetadataRetriever获取帧时间:视频帧为空指针。

5

我正在尝试获取视频的一帧图像,因此我使用MediaMetadataRetriever.getFrameAtTime()方法,示例如下:

    Uri directorio = Uri.parse("android.resource://com.extremeye/" + R.raw.video);
    media = new MediaMetadataRetriever();
    media.setDataSource(this, directorio);

    frame = (ImageView)findViewById(R.id.frame);
    Bitmap bmFrame = media.getFrameAtTime();
    frame.setImageBitmap(bmFrame);

但问题是我得到了以下错误提示:

MediaMetadataRetriever getFrameAtTime: videoframe is a null pointer

我确定该视频与Android操作系统兼容,并且MediaMetadataRetriever已经将其加载,因为我可以在2.3.3版本的操作系统中轻松获取其元数据描述。
我不知道为什么我无法获取帧,但如果我使用4.2版本的操作系统,它就完美地工作。 我尝试更改视频的编解码器和格式,但它不起作用... 我想这可能是格式兼容性的问题,但我不知道我能做什么...
谢谢!

1
同样的烂事。我下载了一个视频转换器,并确保视频兼容H.246编解码器,但仍然遇到空指针异常。 - Xenione
1
这个类的表现真的很差,我认为故障取决于你想要提取帧的视频的确切点。除了这个问题之外,还有与格式兼容性的问题,它不适用于Api 10...最后,我找到了一个非常好的外部库:https://github.com/wseemann/FFmpegMediaMetadataRetriever。将其添加到我的项目中花费了一些时间,但我认为问题已经解决了。尝试一下,因为它拯救了我...告诉我你的使用感受吧! - Gonzalo Solera
谢谢你,Gonzalo!我会尝试添加这个库。 - Xenione
1个回答

2

实际上,我正在使用来自这个外部库的FFmpegMediaMetadataRetriever类,效果非常好!


2
这个库太大了!当我在我的捆绑包中编译它时,我的 APK 大小从 2 MB 跳到了 16 MB....有没有办法解决这个问题? - boudi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接