SDw*_*rfs 10
对于一个优雅的解决方案,似乎你需要使用ffmpeg for android来实现这一目标.有人试过这样:如何从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;
}
Run Code Online (Sandbox Code Playgroud)
这当然不是很优雅,但可能没有麻烦安装ffmpeg ...它可能也很慢(我不知道).但也许这正是你所需要的.
PS:可以在这里找到适合您的问题的ffmpeg教程:http://dranger.com/ffmpeg/tutorial07.html
我相信正确答案是http://code.google.com/p/mp4parser/
isoparser API可以读写MP4文件结构.它是处理所谓的盒子的低级工具,但它也像处理轨道和电影这样的结构.
不错的API和方法比ffmpeg庞然大物快得多
| 归档时间: |
|
| 查看次数: |
4750 次 |
| 最近记录: |