如何从android中的视频文件中获取帧

时间:2012-04-17 09:50:53

标签: android android-mediaplayer

MediaMetadataRetriever.getFrameAtTime()始终在呼叫时返回相同的帧。 看看我的代码

private ArrayList<Bitmap> getFrames(String path){
    try {
        ArrayList<Bitmap> bArray = new ArrayList<Bitmap>();
        bArray.clear();
        MediaMetadataRetriever mRetriever = new MediaMetadataRetriever();
        mRetriever.setDataSource(getDataSource(path));

        for (int i = 3000; i <60000; i=i+5000) {
            bArray.add(mRetriever.getFrameAtTime(i, MediaMetadataRetriever.OPTION_CLOSEST_SYNC));

        }

        return bArray;
    } catch (Exception e) {
        // TODO: handle exception

        return null;

    }
}

此方法始终返回相同的帧

3 个答案:

答案 0 :(得分:10)

我不知道您的视频有多长时间,但是getTimeAtFrame的时间必须用 MICRO 秒来表示在long var中使用的时间

ex:1秒的视频有1000000 USeconds,如果使用的时间很短(像你一样),你必须非常幸运地检索出你视频的第一帧!!!

答案 1 :(得分:3)

你将不得不使用像FFMPEG这样的东西来获取帧。

您必须使用NDK,并为Android编译FFMPEG;不幸的是,这不会很容易。

有两个起点:

http://ffmpeg.org/

ffmpeg for a android (using tutorial: "ffmpeg and Android.mk")

祝你好运!

答案 2 :(得分:0)

莱昂佩尔蒂埃是对的。问题是MediaMetadataRetriever.getFrameAtTime()只能从第二级的视频中提取关键帧。例如,如果视频大约有4秒钟,则只能获得4秒  或5个不同的帧。要获取所有视频帧,请参阅MediaCodec