说明
我的性能提升大多都是取巧,也就是在业务或者逻辑上提高性能。
FFmpegFrameGrabber里是有同步代码块的,我没有试过去掉后会产生什么后果。主要是懒。
如果有人尝试请把结果回馈下,谢谢。
一、直播截图
因为同步代码块的问题,线程池线程不宜过多。
如果一直接受流信息并截图,消耗资源非常多8核的cpu支撑16-50路就不错了,看分辨率。
解决方案:看需求是否是多少秒一张图(这个可以配置管理)
加任务队列,
url连接后获取第一个关键帧,
保存图片后关闭,
更新下次执行时间,
任务重新加入队列。
2核的cpu支撑200-250路左右
二、视频录制
视频录制是没办法这么取巧的
但是视频录制主要资源消耗在录制时的解码编码
解决方案:不用默认或者设置的编解码
使用recordPacket方法
AVPacket pkt = null;
while (isStart) {
pkt = grabber.grabPacket();
recorder.recordPacket(pkt);
org.bytedeco.ffmpeg.global.avcodec.av_packet_unref(pkt);
}