在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?