Я пытаюсь разработать приложение, которое получает данные с камеры и кодирует 30 кадров в виде фрагмента видео, а затем отправляет эти фрагменты видео на сервер. Сервер получает эти видео и отправляет их в браузер. С помощью метода Opencv VideoWriter мне нужно записать каждый видеоблок на диск как mp4 и отправить на сервер, это очень дорого. Есть ли эффективный способ добиться этого с помощью opencv или любой другой библиотеки? Это то, что я сделал до сих пор
public class HelloCV {
public static void main(String[] args){
int type = BufferedImage.TYPE_BYTE_GRAY;
VideoCapture capture = new VideoCapture(0);
capture.set(Videoio.CAP_PROP_FRAME_WIDTH, 320);
capture.set(Videoio.CAP_PROP_FRAME_HEIGHT, 240);
byte[] last=new byte[0xFFFF];
int a=0;
Mat oneFrame = new Mat();
//while (true) {
for(int i=0;i<30;i++) {
capture.read(oneFrame);
byte[] return_buff = new byte[(int) (mat.total() *
mat.channels())];
mat.get(0, 0, return_buff);
BufferedImage image = new BufferedImage(mat.cols(), mat.rows(), type);
final byte[] targetPixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();
System.arraycopy(return_buff, 0, targetPixels, 0, return_buff.length);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
ImageIO.write(image, "jpg", baos);
baos.flush();
byte[] imageInByte = baos.toByteArray();
baos.close();
//arrays.add(Arrays.asList(imageInByte));
for(byte k:imageInByte) {
last[a]=k;
a++;
}
} catch (IOException e) {
e.printStackTrace();
}
// }
}
FileOutputStream out;
try {
out = new FileOutputStream("videox.mp4");
out.write(last);
out.close();
} catch ( IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}