JAVACV从摄像头中读取图片组装成视频时内存泄露问题。

leeking888 2017-08-27 03:02:58
流程:
从本机摄像头中一帧帧地读取视频,然后把读取到的帧组组装成视频。
关键代码:


FrameGrabber grabber = FrameGrabber.createDefault(0); // 本机摄像头
grabber.start();
int width = grabber.getImageWidth();
int height = grabber.getImageHeight();
// 流媒体输出地址,分辨率(长,高),是否录制音频(0:不录制/1:录制)
FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(rtmpPath, width, height, audioRecord);
recorder.setInterleaved(true);
recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264); // 28
recorder.setFormat("flv"); // rtmp的类型
recorder.setFrameRate(25);
recorder.setPixelFormat(0); // yuv420p
recorder.start();
for(int i=0 ; true; i++){
Frame frame = grabber.grab();
if(frame == null){
Thread.sleep(1000);
System.out.println("frame is null "+i);
continue ;
}
recorder.record(frame);
}


出现问题:任务管理器中的内存不断加大,最终程序崩溃。
经过测试,发现把recorder取消,就单纯地从摄像头中grab也能出现同样的问题,定位在于 frame = grabber.grab();这个代码中。怀疑是frame的内存没有释放,请教高手如何处理。
...全文
1037 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
leeking888 2020-05-06
  • 打赏
  • 举报
回复
引用 2 楼 qq_24558803 的回复:
我也遇到了这个问题,请教楼主,怎么解决呀,我是用的 AVPacket pkt =grabber.grabPacket()。也是内存不断加大
版本问题吧。后来我已经解决了,时间太长,不记得了。
qq_24558803 2020-05-05
  • 打赏
  • 举报
回复
我也遇到了这个问题,请教楼主,怎么解决呀,我是用的 AVPacket pkt =grabber.grabPacket()。也是内存不断加大
rightorwrong 2017-09-05
  • 打赏
  • 举报
回复
frame是不是要释放

2,543

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧