Sto provando a catturare il video utilizzando lo jxcapture. Riesco a farlo solo per una volta, ma quando sto cercando di catturare la seconda volta il video nello stesso programma ho avuto problemi. Il mio codice è il seguente:Risorse di sistema insufficienti, acquisizione di video da web camera java
public VideoCapture videoCapture = VideoCapture.create(VideoFormat.WMV);
public CaptureVideoFromWebCamera(){}
public void start(String filename){
List<VideoSource> availableVideoSources = VideoSource.getAvailable();
System.out.println("availableVideoSources = " + availableVideoSources);
if (availableVideoSources.isEmpty()) {
throw new IllegalStateException("No external video sources available");
}
VideoSource webCamera = availableVideoSources.get(0);
System.out.println("webCamera = " + webCamera);
videoCapture.setVideoSource(webCamera);
java.util.List<Codec> videoCodecs = videoCapture.getVideoCodecs();
System.out.println("videoCodecs = " + videoCodecs);
if (videoCodecs.isEmpty()) {
throw new IllegalStateException("No video codecs available");
}
Codec videoCodec = videoCodecs.get(2);
System.out.println("videoCodec = " + videoCodec);
EncodingParameters encodingParameters = new EncodingParameters(new File("WebCamera.wmv"));
encodingParameters.setBitrate(500000);
encodingParameters.setFramerate(10);
encodingParameters.setKeyFrameInterval(1);
encodingParameters.setCodec(videoCodec);
videoCapture.setEncodingParameters(encodingParameters);
videoCapture.start();
System.out.println("Recording started. Press 'Enter' to terminate.");
}
public void stop(String filename) throws IOException{
System.in.read();
videoCapture.stop();
}
public static void main(String[] args) throws Throwable {
CaptureVideoFromWebCamera obj = new CaptureVideoFromWebCamera();
obj.start("");
obj.stop("");
CaptureVideoFromWebCamera obj1 = new CaptureVideoFromWebCamera();
obj1.start("");
obj1.stop("");
}
}
Quando sto cercando di fare in modo da sto reveiving il seguente errore (risorse di sistema insufficienti per completare la webcam servizio richiesto):
Exception in thread "main" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException a com.teamdev.jxcapture.video.win.BaseDirectShowCapture.doStart (SourceFile: 103) a com.teamdev.jxcapture. VideoCapture.start (SourceFile: 146) a capturer.CaptureVideoFromWebCamera.start (CaptureVideoFromWebCamera.java:58) a capturer.CaptureVideoFromWebCamera.main (CaptureVideoFromWebCamera.java:76) causato da: java.lang.reflect.InvocationTargetException a com.teamdev.jxdesktop.win32.g .doInvokeAndWait (fonte sconosciuta) a com.teamdev.jxcapture.video.win.BaseDirectShowCapture.doStart (SourceFile: 97) ... 3 più causato da: com.teamdev.jxdesktop.win32.com.ComException: oggetto COM metodo restituisce il codice di errore: 0x800705AA; Esistono risorse di sistema insufficienti per completare il servizio richiesto.
EDIT2: ho provato a fare aggiungere un po 'di sonno thread per il codice al fine di attendere il secondo processo di cattura.
CaptureVideoFromWebCamera obj = new CaptureVideoFromWebCamera();
obj.start("1.wmv");
obj.stop("");
Thread.sleep(5000);
CaptureVideoFromWebCamera obj1 = new CaptureVideoFromWebCamera();
obj1.start("2.wmv");
obj1.stop("");
Ho ricevuto lo stesso errore.
Edit3: Quando io sto cercando di utilizzare lo stesso oggetto per la cattura ho ricevuto il seguente messaggio:
Exception in thread "main" java.lang.RuntimeException: java.lang.reflect. InvocationTargetException a com.teamdev.jxcapture.video.win.BaseDirectShowCapture.doStart (SourceFile: 103) a com.teamdev.jxcapture.VideoCapture.start (SourceFile: 146) a CaptureVideoFromWebCamera.start (CaptureVideoFromWebCamera.java:47)//videoCapture.start(); in CaptureVideoFromWebCamera.main (CaptureVideoFromWebCamera.java:64) /obj.start("2.wmv "); causati da: java.lang.reflect.InvocationTargetException a com.teamdev.jxdesktop.win32.g.doInvokeAndWait (fonte sconosciuta) a com.teamdev.jxcapture.video.win.BaseDirectShowCapture.doStart (SourceFile: 97) . .. 3 altro
Provare ad aggiungere un po 'di tempo prima di richiamare la videocamera. L'operazione di arresto potrebbe non essere stata completata quando si sta tentando di avviare la fotocamera la seconda volta. O meglio ancora, prova con una GUI dove devi premere un pulsante per avviare e fermare la telecamera. – Olantobi
Ho provato ad entrambi ho ancora lo stesso problema! –
Sembra che videoStop interrompa la cattura, tuttavia le risorse per la fotocamera rimangono ancora in uso da java, quindi non posso inizializzare di nuovo il catturatore. Il programma interrompe l'acquisizione, tuttavia la fotocamera è ancora aperta e devo chiudere il programma affinché il mio carmera si chiuda. –