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)
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?