最近做了一个功能,是对视频流持续抽帧保存起来,在其他业务中触发,然后将保存的帧生成视频储存, 于是做了一个抽帧线程, 一个recorder线程, 平时抽帧线程持续抽帧更新队列, 触发时,recorder线程处理视频生成 但是在测试中,生成视频出现问题,最后排查出这个问题,在这里记录一下
首先
FFmpegFrameGrabber的源码中可以看到 内部存在全局的frame, 每次grabFrame抽帧后,数据会处理到这个frame并返回 但是 当grabber再次执行 grabframe时,grabber的逻辑是,手动初始化frame,但是frame本身无变化 即:再次返回的frame地址不变,而上一次的frame已经被覆盖,如果使用队列等添加frame,则内部都是一个frame,属性为最后一次帧信息 我是使用 Java2DFrameConverter 对象,将frame转换为 bufferedImage对象储存到队列