我刚刚开始进行android开发。
我一直在尝试从手机上的视频文件中提取帧,如下所示:
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource(getApplicationContext(),linkToVideo); // linkToVideo is Uri
ImageView frameView = (ImageView) findViewById(R.id.video_frame);
frameView.setImageBitmap(retriever.getFrameAtTime(frameTime,MediaMetadataRetriever.OPTION_CLOSEST)); // frameTime in microseconds
此功能适用于640x480 .mp4视频,但不适用于我的相机录制的1280x720 .3gp文件。这只花了很长时间,最终应用程序停止响应。当我使用OPTION_CLOSEST_SYNC时,一切都运行平稳,但是我对获得更多的同步帧感兴趣。
关于如何解决这个问题有什么想法吗?我试图避免视频编码,但是如果没有其他选择,我将采取这种方式。
预先感谢您拨冗协助我。
最佳答案
尝试FFmpegMediaMetadataRetriever:
import wseemann.media.FFmpegMediaMetadataRetriever;
...
FFmpegMediaMetadataRetriever retriever = new FFmpegMediaMetadataRetriever();
retriever.setDataSource(getApplicationContext(),linkToVideo); // linkToVideo is Uri
ImageView frameView = (ImageView) findViewById(R.id.video_frame);
frameView.setImageBitmap(retriever.getFrameAtTime(frameTime,MediaMetadataRetriever.OPTION_CLOSEST)); // frameTime in microseconds