我无法使用MediaMetaDataRetActivity
显示MP4视频文件。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
filepath = Environment.getExternalStorageDirectory().getPath()+"/adhavan.mp4";
System.out.println("imagepath"+filepath);
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource(filepath);
bitmap = retriever.getFrameAtTime(10000 ,MediaMetadataRetriever.OPTION_CLOSEST);
System.out.println("BITMAP"+bitmap);
Log.d(TAG, "METADATA_KEY_ALBUM: " + retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM));
Log.d(TAG, "METADATA_KEY_ALBUMARTIST: " + retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUMARTIST));
Log.d(TAG, "METADATA_KEY_ARTIST: " + retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST));
Log.d(TAG, "METADATA_KEY_AUTHOR: " + retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_AUTHOR));
Log.d(TAG, "METADATA_KEY_COMPILATION: " + retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_CD_TRACK_NUMBER));
Log.d(TAG, "METADATA_KEY_COMPILATION: " + retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_COMPILATION));
Log.d(TAG, "METADATA_KEY_DATE: " + retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DATE));
Log.d(TAG, "METADATA_KEY_DISC_NUMBER: " + retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DISC_NUMBER));
Log.d(TAG, "METADATA_KEY_DURATION: " + retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION));
Log.d(TAG, "METADATA_KEY_GENRE: " + retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_GENRE));
Log.d(TAG, "METADATA_KEY_MIMETYPE: " + retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_MIMETYPE));
Log.d(TAG, "METADATA_KEY_NUM_TRACKS: " + retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_NUM_TRACKS));
Log.d(TAG, "METADATA_KEY_TITLE: " + retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE));
Log.d(TAG, "METADATA_KEY_WRITER: " + retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_WRITER));
Log.d(TAG, "METADATA_KEY_YEAR: " + retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_YEAR));
imageView = (ImageView)findViewById(R.id.imageview);
imageView.setImageBitmap(bitmap);
我得到的错误是getFrameAtTime: videoFrame is NULL pointer
。这是我在运行时进入 Logcat 并且屏幕是空白的。
答案 0 :(得分:4)
尝试使用OPTIONS_CLOSEST_SYNC而不是OPTIONS_CLOSEST。
但是,这将为您提供关键帧而不是确切的帧。
答案 1 :(得分:0)
adhavan.mp4
可能正在使用非listed as supported的编解码器。如果是这种情况,请尝试使用更好的视频和/或convert您拥有的视频。
答案 2 :(得分:0)
我遇到了同样的错误。
检查您是否可以通过ExtractMetadata
从视频中提取元数据信息。如果没有,则setDataSource()
通话可能出现问题,或者视频格式/编解码器格式错误。
此代码适用于我。
AssetFileDescriptor afd=getAssets().openFd("t.mp4");
mediaMetadataRetriever.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
我必须提供afd.getStartOffset()
和afd.getLength()
也许它可以帮助你走上正确的轨道。