Есть ли способ разбить видео на куски и объединить их без использования диска? - PullRequest
0 голосов
/ 22 февраля 2020

Я пытаюсь разработать приложение, которое получает данные с камеры и кодирует 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();
        }


    }
}
...