jxcaptureを使用してビデオをキャプチャしようとしています。私は一度だけそうすることができますが、同じ番組で2度目のビデオをキャプチャしようとしているときに、私はトラブルに陥りました。私のコードは以下の通りです:システムリソースが不足していて、Webカメラからビデオをキャプチャしています。
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("");
}
}
私は、私は次のエラー(システムリソース不足は、要求されたサービスのWebカメラを完成するために存在する)reveivingてるやろうとしている:
をスレッド "メイン" java.lang.RuntimeExceptionに例外:com.teamdev.jxcapture.video.win.BaseDirectShowCapture.doStartでにjava.lang.reflect.InvocationTargetException (SOURCEFILE:103)com.teamdev.jxcaptureで 。 VideoCapture.start(SourceFile:146)com.teamdev.jxdesktop.win32.g時にjava.lang.reflect.InvocationTargetException :によって引き起こさcapturer.CaptureVideoFromWebCamera.start(CaptureVideoFromWebCamera.java:58)capturer.CaptureVideoFromWebCamera.main(CaptureVideoFromWebCamera.java:76) で で.doInvokeAndWait(Unknown Source) at com.teamdev.jxcapture.video.win.BaseDirectShowCapture.doStart(SourceFile:97) ... 3もっと見る 原因:com.teamdev.jxdesktop.win32.com.ComException:COMオブジェクトエラーコード:0x800705AAを返します。要求されたサービスを完了するためのシステムリソースが不足しています。
EDIT2:私は二キャプチャ処理を待つために、コードにいくつかのスレッドのスリープを追加実行しようとしました。
CaptureVideoFromWebCamera obj = new CaptureVideoFromWebCamera();
obj.start("1.wmv");
obj.stop("");
Thread.sleep(5000);
CaptureVideoFromWebCamera obj1 = new CaptureVideoFromWebCamera();
obj1.start("2.wmv");
obj1.stop("");
同じエラーが発生しました。
EDIT3:java.lang.reflectは:スレッド「メイン」java.lang.RuntimeExceptionで
例外:私は、次のメッセージが表示されました捕捉するために同じオブジェクトを使用しようとしています。 CaptureVideoFromWebCamera.startで (CaptureVideoFromWebCamera.java:47)/:com.teamdev.jxcapture.VideoCapture.start(146 SOURCEFILE)で :com.teamdev.jxcapture.video.win.BaseDirectShowCapture.doStart(103 SOURCEFILE)でにInvocationTargetException /videoCapture.start(); CaptureVideoFromWebCamera.main(CaptureVideoFromWebCamera.java:64)の /obj.start('2.wmv "); によって引き起こさ: :com.teamdev.jxcapture.video.win.BaseDirectShowCapture.doStart(97 SOURCEFILE)でcom.teamdev.jxdesktop.win32.g.doInvokeAndWait(不明なソース) でにjava.lang.reflect.InvocationTargetException 。あなたのリソースがすでに別のスレッドによってロックされていて、あなたが別のスレッドから同じリソースを利用しようとしながら、ロックが解除されていないので... 3以上
カメラをもう一度呼び出す前に、スリープ時間を追加してみます。 2回目にカメラを起動しようとすると、停止操作が完了していない可能性があります。または、カメラを起動および停止するためにボタンを押す必要があるGUIを使用してテストしてください。 – Olantobi
私はそれらの両方を試しましたが、私は同じ問題を抱えています! –
これはビデオストップがキャプチャを停止したようですが、カメラのリコースはまだJavaからの使用に残っているので、キャプチャをやり直すことはできません。しかし、プログラムのキャプチャはまだカメラが開いているので、私は閉じるために私のcarmeraをプログラムを閉じる必要があります。 –