对于一个优雅的解决方案,好像您需要使用ffmpeg for android来实现这一点.有人试过这样:
How to get the frame from video file in android;并建议使用ffmpeg.
如果您不想使用ffmpeg,您可以尝试以下操作:
private ArrayList getKeyFrameTimestamps(String filename) {
ArrayList timeStamps = new ArrayList();
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 …这可能也很慢(我不知道).但也许这只是你需要的.