解决方法
对于一个优雅的解决方案,好像您需要使用ffmpeg for android来实现这一点.有人试过这样:
How to get the frame from video file in android;并建议使用ffmpeg.
我检查了参考手册,但是只能找到一种使用MediaMetadataRetriever()在相对于给定位置获取关键帧本身(无时间戳)的方法,如下所述:http://developer.android.com/reference/android/media/MediaMetadataRetriever.html#extractMetadata%28int%29
如果您不想使用ffmpeg,您可以尝试以下操作:
private ArrayList<int> getKeyFrameTimestamps(String filename) { ArrayList<int> timeStamps = new ArrayList<int>(); try { MediaMetadataRetriever mRetriever = new MediaMetadataRetriever(); mRetriever.setDataSource(getDataSource(filename)); mRetriever.getFrameAtTime(i,MediaMetadataRetriever.OPTION_CLOSEST_SYNC); Bitmap lastFame = mRetriever.getFrameAtTime(0,MediaMetadataRetriever.OPTION_NEXT_SYNC); result.add(0); for(int time=1; frame ; ++time) { Bitmap frame = mRetriever.getFrameAtTime(time,MediaMetadataRetriever.OPTION_PREVIoUS_SYNC); if (frame && !frame.sameAs(lastFrame)) { result.add(time); lastFrame = frame; } } } catch (Exception e) { /* TODO: HANDLE THIS */ } return timeStamps; }
这当然不是很优雅,但是可能会没有麻烦安装ffmpeg …这可能也很慢(我不知道).但也许这只是你需要的.
PS:适合您的问题的ffmpeg教程可以在这里找到:http://dranger.com/ffmpeg/tutorial07.html