How to get the frame from video file in android

末鹿安然 提交于 2019-12-30 03:09:46

问题


The MediaMetadataRetriever.getFrameAtTime() always returns same frames when ever call. Have a look my code

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;

    }
}

This method always return same frames


回答1:


You are going to have to use something like FFMPEG to fetch the frames.

You will have to use the NDK, and compile FFMPEG for Android; unfortunately it's not going to be very easy.

A couple of starting points:

http://ffmpeg.org/

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

Good luck!




回答2:


I don't know how long is your video, but the time to use in the long var as the time for getTimeAtFrame must be expressed in MICRO seconds

ex: a video of 1 second have 1000000 USeconds, if use a very short period (like you) you must very lucky for retrieve the first frame only that you video have!!!




回答3:


Léon Pelletier is right. The problem is that MediaMetadataRetriever.getFrameAtTime() could only extract key frames from video at second level. For example, if a video has about 4 seconds, you can get only 4 or 5 different frames. To get all video frames, please refer to MediaCodec.



来源:https://stackoverflow.com/questions/10188938/how-to-get-the-frame-from-video-file-in-android

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!