2

我尝试使用 MediaMetadataRetriever 类从视频中获取缩略图:

  MediaMetadataRetriever retriever = new MediaMetadataRetriever();
        try {
            retriever.setDataSource("/mnt/sdcard/test.ts");

            Bitmap thumbnail = retriever.getFrameAtTime();
            ivThumbnail.setImageBitmap(thumbnail);

        } catch (Exception ex) {
            ex.printStackTrace();
        }

但是我在日志中得到的所有信息:

E/MediaMetadataRetrieverJNI﹕ getFrameAtTime: videoFrame is a NULL pointer

但是文档(http://developer.android.com/guide/appendix/media-formats.html)说android 3.0+支持这种格式

目前,此代码适用于 .mp4 文件。有什么建议么?

4

3 回答 3

2

尝试使用这个外部库提取视频的帧。它适用于 API 7,并且不会比 MediaMetadataRetriever 类失败多次。它应该很容易添加到您的项目中......

希望有用

于 2013-10-15T15:29:24.503 回答
2

这可能有助于
获取视频 uri,并调用此方法..

public void setVideoThumbnail(Uri uri) {
    String[] projection = { BaseColumns._ID, MediaColumns.DATA };
    Cursor cursor = managedQuery(uri, projection, null, null, null);
    cursor.moveToFirst();
    int columnIndex = cursor.getColumnIndexOrThrow(BaseColumns._ID);
    int id = cursor.getInt(columnIndex);

    ContentResolver crThumb = getContentResolver();
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inSampleSize = 1;
    Bitmap thumbnail= MediaStore.Video.Thumbnails.getThumbnail(crThumb, id,
            MediaStore.Video.Thumbnails.MICRO_KIND, options);
    ivThumbnail.setScaleType(ScaleType.CENTER_CROP);
    ivThumbnail.setImageBitmap(thumbnail);
}
于 2013-10-14T10:38:54.073 回答
0

我有同样的错误。

检查您是否可以通过ExtractMetadata. 如果不是,则呼叫可能有问题setDataSource()或视频格式/编解码器错误。

这段代码对我有用。

AssetFileDescriptor afd=getAssets().openFd("t.mp4");
mediaMetadataRetriever.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());

我必须提供afd.getStartOffset()afd.getLength()

也许它可以帮助您走上正轨。

于 2014-12-11T15:24:12.457 回答