webcam-capture: EXCEPTION_ACCESS_VIOLATION (0xc0000005) Problematic frame: C [ntdll.dll+0x50901]

Hello! I have a problem with cyclic video recording. The code is taken from the example: Encoder. An error occurs when the loop passes more than 70 iterations. Start-up example:

package Recorder;

public class Start {
    public static void main(String[] args) {
        while(true) {
            try {
                Rec2 r = new Rec2();
                r.m();
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
package Recorder;

import java.awt.Dimension;
import java.awt.image.BufferedImage;
import java.io.File;

import com.github.sarxos.webcam.Webcam;
import com.github.sarxos.webcam.WebcamResolution;
import com.xuggle.mediatool.IMediaWriter;
import com.xuggle.mediatool.ToolFactory;
import com.xuggle.xuggler.ICodec;
import com.xuggle.xuggler.IPixelFormat;
import com.xuggle.xuggler.IVideoPicture;
import com.xuggle.xuggler.video.ConverterFactory;
import com.xuggle.xuggler.video.IConverter;

import java.util.Calendar;

public class Rec2 {

    public void m() {
        String filePath = new File("").getAbsolutePath() + "\\video\\";
        File file = new File(filePath + fileRenamed() + "mp4");

        IMediaWriter writer = ToolFactory.makeWriter(file.getName());
        Dimension size = WebcamResolution.QVGA.getSize();
        writer.addVideoStream(0, 0, ICodec.ID.CODEC_ID_H264, size.width, size.height);

        Webcam webcam = Webcam.getDefault();
        webcam.setViewSize(size);
        webcam.open(true);

        long start = System.currentTimeMillis();

        for (int i = 0; i < 50; i++) {

            System.out.println("Capture frame " + i);

            BufferedImage image = ConverterFactory.convertToType(webcam.getImage(), BufferedImage.TYPE_3BYTE_BGR);
            IConverter converter = ConverterFactory.createConverter(image, IPixelFormat.Type.YUV420P);

            IVideoPicture frame = converter.toPicture(image, (System.currentTimeMillis() - start) * 1000);
            frame.setKeyFrame(i == 0);
            frame.setQuality(0);

            writer.encodeVideo(0, frame);

            // 10 FPS
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        writer.close();
        webcam.close();

        System.out.println("Video recorded in file: " + file.getAbsolutePath());
    }

    private String fileRenamed() {
        Calendar calendar = Calendar.getInstance();
        String fileName = String.valueOf(calendar.getTimeInMillis() + ".");
        return fileName;
    }
}

About this issue

  • Original URL
  • State: open
  • Created 7 years ago
  • Comments: 18 (6 by maintainers)

Most upvoted comments

This problem has been preserved for windows 10. Can you tell me, is it possible to record many short video files (5 - 10 seconds) so that during the recording we connected to the camera 1 time, and while the camera was on, we wrote constantly short files?