首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MediaMetadataRetriever.getFrameAtTime()仅返回第一帧

MediaMetadataRetriever.getFrameAtTime()仅返回第一帧
EN

Stack Overflow用户
提问于 2012-10-08 04:22:01
回答 7查看 23.8K关注 0票数 29

我使用MetadataRetriever从视频中提取帧,并将所有图像存储在ArrayList<Bitmap>中。我想把它们全部存储在SD卡上(只是为了测试目的)。

但当我从模拟器中拉出一个文件夹并查看保存的图像时,所有图像都只是视频的第一帧。

这是我从视频中提取帧的方法:

代码语言:javascript
运行
复制
File videoFile=new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/videos","sample_mpeg4.mp4");

Uri videoFileUri=Uri.parse(videoFile.toString());

MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource(videoFile.getAbsolutePath());
ArrayList<Bitmap> rev=new ArrayList<Bitmap>();

//Create a new Media Player
MediaPlayer mp = MediaPlayer.create(getBaseContext(), videoFileUri);

int millis = mp.getDuration();
for(int i=0;i<millis;i+=100){
   Bitmap bitmap=retriever.getFrameAtTime(i,OPTION_CLOSEST_SYNC);
   rev.add(bitmap);
}

这就是我保存它们的方法(我调用这个方法并传递位图ArrayList):

代码语言:javascript
运行
复制
public void saveFrames(ArrayList<Bitmap> saveBitmapList) throws IOException{
    Random r = new Random();
    int folder_id = r.nextInt(1000) + 1;

    String folder = Environment.getExternalStorageDirectory()+"/videos/frames/"+folder_id+"/";
    File saveFolder=new File(folder);
    if(!saveFolder.exists()){
       saveFolder.mkdirs();
    }

    int i=1;
    for (Bitmap b : saveBitmapList){
       ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        b.compress(Bitmap.CompressFormat.JPEG, 40, bytes);

        File f = new File(saveFolder,("frame"+i+".jpg"));

        f.createNewFile();

        FileOutputStream fo = new FileOutputStream(f);
        fo.write(bytes.toByteArray());

           fo.flush();
           fo.close();

        i++;
    }
    Toast.makeText(getApplicationContext(),"Folder id : "+folder_id, Toast.LENGTH_LONG).show();

}

当我拿出一个文件夹查看所有帧时,所有的图像都是第一帧视频的图像。有人能给我解释一下发生了什么事吗?

更新:

我试过用另一个视频。我发现我没有得到空白图像,但它总是只返回第一帧。

MediaMetadataRetriever.getFrameAtTime(long timeUS)只返回第一帧,但我想检索所有帧。我应该做哪些更改?

我该如何解决这个问题呢?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12772547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档