在Android 3.2.1中使用MediaMetadataRetriever从视频中获取帧

我试图使用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文件。 有什么建议么?


这可能有帮助
获取视频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);
}

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

希望它很有用


我有同样的错误。

检查您是否可以通过ExtractMetadata从视频中提取元数据信息。 如果不是, setDataSource()调用可能有问题,或者视频格式错误/编解码器错误。

此代码适用于我。

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

我不得不提供afd.getStartOffset()afd.getLength()

也许它可以帮助你走上正确的轨道。

链接地址: http://www.djcxy.com/p/84039.html

上一篇: Doesn't gets frame from video in android 3.2.1 using MediaMetadataRetriever

下一篇: How to get Video Encoding Parameters details of an Android device?