去除人脸识别内容
This commit is contained in:
@@ -5,7 +5,6 @@ import com.ruoyi.common.utils.spring.SpringUtils;
|
||||
import com.ruoyi.video.common.ClientType;
|
||||
import com.ruoyi.video.domain.dto.CameraDto;
|
||||
import com.ruoyi.video.service.MediaService;
|
||||
import com.ruoyi.video.utils.ArcFaceEngineUtil;
|
||||
import io.netty.buffer.Unpooled;
|
||||
import io.netty.channel.ChannelFuture;
|
||||
import io.netty.channel.ChannelHandlerContext;
|
||||
@@ -97,12 +96,10 @@ public class MediaTransferFlvByJavacv extends MediaTransfer implements Runnable
|
||||
*/
|
||||
private Thread listenThread;
|
||||
|
||||
private ArcFaceEngineUtil arcFaceEngineUtil;
|
||||
|
||||
public MediaTransferFlvByJavacv(CameraDto cameraDto) {
|
||||
super();
|
||||
this.cameraDto = cameraDto;
|
||||
this.arcFaceEngineUtil = SpringUtils.getBean(ArcFaceEngineUtil.class);
|
||||
}
|
||||
|
||||
public boolean isRunning() {
|
||||
@@ -129,45 +126,43 @@ public class MediaTransferFlvByJavacv extends MediaTransfer implements Runnable
|
||||
this.recorderStatus = recorderStatus;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建拉流器
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
protected boolean createGrabber() {
|
||||
// 拉流器
|
||||
grabber = new FFmpegFrameGrabber(cameraDto.getUrl());
|
||||
// 超时时间(15秒)
|
||||
grabber.setOption("stimeout", cameraDto.getNetTimeout());
|
||||
|
||||
// 这些参数很多是“微秒”单位;如果你的 getNetTimeout() / getReadOrWriteTimeout() 是毫秒,
|
||||
// 记得 *1000 转为微秒字符串。这里演示保守固定值,先跑通为先。
|
||||
String fiveSecUs = "5000000"; // 5s in microseconds
|
||||
String oneMb = "1048576"; // 1MB
|
||||
|
||||
// ---- 通用优化 ----
|
||||
grabber.setOption("threads", "1");
|
||||
// grabber.setPixelFormat(avutil.AV_PIX_FMT_YUV420P);
|
||||
// 设置缓存大小,提高画质、减少卡顿花屏
|
||||
grabber.setOption("buffer_size", "1024000");
|
||||
grabber.setOption("buffer_size", oneMb); // 输入缓冲
|
||||
grabber.setOption("rw_timeout", fiveSecUs); // 读写超时(微秒)
|
||||
grabber.setOption("stimeout", fiveSecUs); // 套接字超时(微秒)
|
||||
grabber.setOption("probesize", fiveSecUs); // 探测时长(微秒)
|
||||
grabber.setOption("analyzeduration", fiveSecUs);// 解析时长(微秒)
|
||||
grabber.setOption("fflags", "nobuffer"); // 低延迟
|
||||
grabber.setOption("flags", "low_delay");
|
||||
grabber.setOption("loglevel", "debug"); // 先开调试,稳定后可关
|
||||
|
||||
// 读写超时,适用于所有协议的通用读写超时
|
||||
grabber.setOption("rw_timeout", cameraDto.getReadOrWriteTimeout());
|
||||
// 探测视频流信息,为空默认5000000微秒
|
||||
grabber.setOption("probesize", cameraDto.getReadOrWriteTimeout());
|
||||
// 解析视频流信息,为空默认5000000微秒
|
||||
grabber.setOption("analyzeduration", cameraDto.getReadOrWriteTimeout());
|
||||
|
||||
// 如果为rtsp流,增加配置
|
||||
if ("rtsp".equals(cameraDto.getUrl().substring(0, 4))) {
|
||||
// 设置打开协议tcp / udp
|
||||
// ---- RTSP 关键修正 ----
|
||||
if (cameraDto.getUrl().toLowerCase().startsWith("rtsp://")) {
|
||||
// 统一走 TCP(RTP over RTSP/interleaved),避免 461 / NAT / 防火墙问题
|
||||
grabber.setOption("rtsp_transport", "tcp");
|
||||
// 首选TCP进行RTP传输
|
||||
grabber.setOption("rtsp_flags", "prefer_tcp");
|
||||
|
||||
} else if ("rtmp".equals(cameraDto.getUrl().substring(0, 4))) {
|
||||
// rtmp拉流缓冲区,默认3000毫秒
|
||||
// 不再设置 prefer_tcp(没意义了);确保不带 multicast 相关 flag
|
||||
// 只要视频轨,避免音频轨导致的协商失败(可按需移除)
|
||||
grabber.setOption("allowed_media_types", "video");
|
||||
// 避免较大的 RTP 乱序延迟
|
||||
grabber.setOption("max_delay", "500000"); // 0.5s (微秒)
|
||||
// 某些设备对 UA 比较挑,设置一个常见 UA(可选)
|
||||
grabber.setOption("user_agent", "Lavf/60");
|
||||
}
|
||||
else if (cameraDto.getUrl().toLowerCase().startsWith("rtmp://")) {
|
||||
grabber.setOption("rtmp_buffer", "1000");
|
||||
// 默认rtmp流为直播模式,不允许seek
|
||||
// grabber.setOption("rtmp_live", "live");
|
||||
|
||||
} else if ("desktop".equals(cameraDto.getUrl())) {
|
||||
// 支持本地屏幕采集,可以用于监控屏幕、局域网和wifi投屏等
|
||||
}
|
||||
else if ("desktop".equalsIgnoreCase(cameraDto.getUrl())) {
|
||||
grabber.setFormat("gdigrab");
|
||||
grabber.setOption("draw_mouse", "1");// 绘制鼠标
|
||||
grabber.setOption("draw_mouse", "1");
|
||||
grabber.setNumBuffers(0);
|
||||
grabber.setOption("fflags", "nobuffer");
|
||||
grabber.setOption("framerate", "25");
|
||||
@@ -176,16 +171,16 @@ public class MediaTransferFlvByJavacv extends MediaTransfer implements Runnable
|
||||
|
||||
try {
|
||||
grabber.start();
|
||||
log.info("\r\n{}\r\n启动拉流器成功", cameraDto.getUrl());
|
||||
return grabberStatus = true;
|
||||
log.info("\n{}\n启动拉流器成功", cameraDto.getUrl());
|
||||
return (grabberStatus = true);
|
||||
} catch (FrameGrabber.Exception e) {
|
||||
MediaService.cameras.remove(cameraDto.getMediaKey());
|
||||
log.error("\r\n{}\r\n启动拉流器失败,网络超时或视频源不可用", cameraDto.getUrl());
|
||||
// e.printStackTrace();
|
||||
log.error("\n{}\n启动拉流器失败,网络超时或视频源不可用({})", cameraDto.getUrl(), e.getMessage());
|
||||
return (grabberStatus = false);
|
||||
}
|
||||
return grabberStatus = false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 创建转码推流录制器
|
||||
*
|
||||
@@ -333,7 +328,7 @@ public class MediaTransferFlvByJavacv extends MediaTransfer implements Runnable
|
||||
|
||||
if (frame != null) {
|
||||
|
||||
processFaceDetection(frame);
|
||||
|
||||
|
||||
if (startTime == 0) {
|
||||
startTime = System.currentTimeMillis();
|
||||
@@ -383,16 +378,6 @@ public class MediaTransferFlvByJavacv extends MediaTransfer implements Runnable
|
||||
log.info("关闭媒体流-javacv,{} ", cameraDto.getUrl());
|
||||
}
|
||||
|
||||
@Async
|
||||
public void processFaceDetection(Frame frame) {
|
||||
if (arcFaceEngineUtil != null) {
|
||||
ImageInfo imageInfo = arcFaceEngineUtil.frameToImageInfo(frame);
|
||||
if (imageInfo != null) {
|
||||
arcFaceEngineUtil.getUserInfo(imageInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送帧数据
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user