twain-service/src/main/java/org/aohe/webcam/WebcamShowTask.java

80 lines
2.7 KiB
Java

package org.aohe.webcam;
import lombok.extern.slf4j.Slf4j;
import org.aohe.constant.Control;
import org.aohe.constant.SocketEnum;
import org.aohe.web.SocketUtils;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
@Slf4j
public class WebcamShowTask extends Thread {
private final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
private String lastLog = "";
@Override
public void run() {
scheduler.scheduleAtFixedRate(() -> {
try {
while (Control.SHOW_CAMERA) {
WebCamUtils.open();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
BufferedImage bi = WebCamUtils.getImage();
try {
ImageIO.write(bi, "JPG", baos);
} catch (IOException e) {
//log.error(e.getMessage(), e);
}finally {
if (bi != null){
bi.flush();
bi = null;
}
}
// String base64 = null;
// try {
// base64 = new String(Base64.getEncoder().encode(baos.toByteArray()), "UTF8");
// } catch (UnsupportedEncodingException e) {
// log.error(e.getMessage(), e);
// }finally {
// baos.close();
// }
SocketUtils.get(SocketEnum.CAM_SOCKET.getName()).broadcastNew(baos.toByteArray());
baos.close();
}
} catch (Exception e) {
if(!lastLog.equals(e.getMessage())){
//相同的错误只打印一次
log.error(e.getMessage());
lastLog = e.getMessage();
}
}
}, 0, 100, TimeUnit.MILLISECONDS);
try {
Thread.currentThread().join();
} catch (InterruptedException e) {
log.error("Main thread interrupted", e);
}
}
// public static void main(String[] args) {
// SocketUtils.start(SocketEnum.CAM_SOCKET);
// WebCamUtils.setWebcam(0);
// WebCamUtils.open();
// //File file = new File("\"C:\\Users\\xxx\\Pictures\\Screenshots\\abc.png");
// while (true){
// SocketUtils.get(SocketEnum.CAM_SOCKET.getName()).broadcastNew(WebCamUtils.getImageByteBuffer());
// }
// }
}