# Webcam und Java



## Developer_X (31. Mrz 2009)

Hi,
ich hab schon öfters danach gegoogled,
und auch hier in diesem Forum einen Artikel dazu gefunden
http://www.java-forum.org/allgemeine-java-themen/78607-kamera-bild-echtzeit-auswerten.html

Man braucht:
-eine Webcam
-eine JMF Library
- und natürlich java
ich habe auch schon einen Quellcode zum starten der VideoAufnahmen gefunden, doch allerdings
habe ich diese nicht für Windows Vista gefunden, kann mir einer mal mit einem Code der für Vista geeignet ist klar machen wie man mit der Webcam dinge aufnehmen kann


----------



## GilbertGrape (31. Mrz 2009)

Warum die Umfrage?


----------



## ARadauer (31. Mrz 2009)

warum sollte der für vista nicht gehen?


----------



## Developer_X (31. Mrz 2009)

also hier ist der Code
David Fischer's Java Programming Examples: Capture Video from Logitech QuickCam Pro 3000 USB Camera with JMF
und hier die Fehlerausgabe

```
get list of all media devices ...
>>> capture audio device = DirectSoundCapture
>>> capture audio format = linear, 16000.0 hz, 8-bit, mono, unsigned
... list completed.
Exception in thread "main" java.lang.NullPointerException
	at Webcam.TestQuickCamPro.main(TestQuickCamPro.java:142)
```
Was in meinem COde diese Zeile ist:

```
MediaLocator videoMediaLocator = captureVideoDevice.getLocator();
```


----------



## diggaa1984 (31. Mrz 2009)

[HIGHLIGHT="Java"]
// serach for default video device
				if (captureVideoDevice == null)
					if (deviceFormat[y] instanceof VideoFormat)
					if (deviceInfo.getName().indexOf(defaultVideoDeviceName) >= 0)
				{
					captureVideoDevice = deviceInfo;
					Stdout.log(">>> capture video device = " + deviceInfo.getName());
				}

				// search for default video format
				if (captureVideoDevice == deviceInfo)
					if (captureVideoFormat == null)
					if (DeviceInfo.formatToString(deviceFormat[y]).indexOf(defaultVideoFormatString) >= 0)
				{
					captureVideoFormat = (VideoFormat) deviceFormat[y];
					Stdout.log(">>> capture video format = " + DeviceInfo.formatToString(deviceFormat[y]));
				}[/HIGHLIGHT]

da diese ausgaben nicht erscheinen, wird wohl was passieren!?
man beachte die kommentare und klassendeklarationen

wie man das löst is ne andere Frage, aber fehler finden damit abgeschlossen, was keine minute gedauert hat !!



> with some small modifications, this program will work with any USB camera.


----------



## Developer_X (31. Mrz 2009)

ok, also der SOund ist vorhanden, aber das Bild kommt irgendwie net


----------



## diggaa1984 (31. Mrz 2009)

äußere doch mal ne vermutung nachdem du meinen (wenn auch spärtlichen) hinweisen nachgegangen bist, sonst seh ich bald ne analogie zum Applet-thread


----------



## Developer_X (31. Mrz 2009)

ja, der findet meine WEbcam höchstwahrscheinlich net
weil oben im String steht ja der Name der webcam
vielleicht findet er die net


----------



## diggaa1984 (31. Mrz 2009)

jut, dann lass dir doch einfach mal alle gefundenen devices ausgeben, wenn deine Webcam drin is, String kopieren oben als default einfügen und beten

*EDIT:* eventuell muss man hier auch noch anpassen, aber da dürfest vielleicht nur über spezifikation des Web-Cam-Herstellers rankommen (oder sind die angaben universal .. würde ich aber vorerst mal nich von ausgehen)
_defaultVideoFormatString = "size=176x144, encoding=yuv, maxdatalength=38016";_


----------



## Developer_X (31. Mrz 2009)

da haben wir ein Problem, ich verstehs irgendwie nicht wie
ich hab mal rot markiert wie ich mir vorstelle das ich das ausgeben soll

```
import java.io.*;
import javax.media.*;
import javax.media.format.*;
import javax.media.protocol.*;


public class TestQuickCamPro
{

	private static boolean				debugDeviceList = false;

	private static String				defaultVideoDeviceName = "Logitech USB Video Camera";
	private static String				defaultAudioDeviceName = "DirectSoundCapture";
	private static String				defaultVideoFormatString = "size=176x144, encoding=yuv, maxdatalength=38016";
	private static String				defaultAudioFormatString = "linear, 16000.0 hz, 8-bit, mono, unsigned";

	private static CaptureDeviceInfo	captureVideoDevice = null;
	private static CaptureDeviceInfo	captureAudioDevice = null;
	private static VideoFormat			captureVideoFormat = null;
	private static AudioFormat			captureAudioFormat = null;


	public static void main(String args[])
	{
		// get command line arguments
		for (int x = 0; x < args.length; x++)
		{
			// -dd = debug devices list -> display list of all media devices - and exit
			if (args[x].toLowerCase().compareTo("-dd") == 0)
				debugDeviceList = true;
		}
[highlight]
		// get a list of all media devices, search default devices and formats, and print it out if args[x] = "-dd"
		// --------------------------------------------------------------------------------------------------------
[/highlight]
		Stdout.log("get list of all media devices ...");
		[highlight] java.util.Vector deviceListVector = CaptureDeviceManager.getDeviceList(null);[/highlight]
		if (deviceListVector == null)
		{
			Stdout.log("... error: media device list vector is null, program aborted");
			System.exit(0);
		}
		if (deviceListVector.size() == 0)
		{
			Stdout.log("... error: media device list vector size is 0, program aborted");
			System.exit(0);
		}

		for (int x = 0; x < deviceListVector.size(); x++)
		{
			// display device name
			CaptureDeviceInfo deviceInfo = (CaptureDeviceInfo) deviceListVector.elementAt(x);
			String deviceInfoText = deviceInfo.getName();
			if (debugDeviceList)
				Stdout.log("device " + x + ": " + deviceInfoText);

			// display device formats
			Format deviceFormat[] = deviceInfo.getFormats();
			for (int y = 0; y < deviceFormat.length; y++)
			{
				// serach for default video device
				if (captureVideoDevice == null)
					if (deviceFormat[y] instanceof VideoFormat)
					if (deviceInfo.getName().indexOf(defaultVideoDeviceName) >= 0)
				{
					captureVideoDevice = deviceInfo;
					Stdout.log(">>> capture video device = " + deviceInfo.getName());
				}

				// search for default video format
				if (captureVideoDevice == deviceInfo)
					if (captureVideoFormat == null)
					if (DeviceInfo.formatToString(deviceFormat[y]).indexOf(defaultVideoFormatString) >= 0)
				{
					captureVideoFormat = (VideoFormat) deviceFormat[y];
					Stdout.log(">>> capture video format = " + DeviceInfo.formatToString(deviceFormat[y]));
				}

				// serach for default audio device
				if (captureAudioDevice == null)
					if (deviceFormat[y] instanceof AudioFormat)
					if (deviceInfo.getName().indexOf(defaultAudioDeviceName) >= 0)
				{
					captureAudioDevice = deviceInfo;
					Stdout.log(">>> capture audio device = " + deviceInfo.getName());
				}

				// search for default audio format
				if (captureAudioDevice == deviceInfo)
					if (captureAudioFormat == null)
					if (DeviceInfo.formatToString(deviceFormat[y]).indexOf(defaultAudioFormatString) >= 0)
				{
					captureAudioFormat = (AudioFormat) deviceFormat[y];
					Stdout.log(">>> capture audio format = " + DeviceInfo.formatToString(deviceFormat[y]));
				}

				if (debugDeviceList)
					Stdout.log(" - format: " +  DeviceInfo.formatToString(deviceFormat[y]));
			}
		}
		Stdout.log("... list completed.");
		[highlight]System.out.println(deviceListVector);[/highlight]

		// if args[x] = "-dd" terminate now
		// --------------------------------
		if (debugDeviceList)
			System.exit(0);


		// setup video data source
		// -----------------------
		MediaLocator videoMediaLocator = captureVideoDevice.getLocator();
		DataSource videoDataSource = null;
		try
		{
			videoDataSource = javax.media.Manager.createDataSource(videoMediaLocator);
		}
		catch (IOException ie) { Stdout.logAndAbortException(ie); }
		catch (NoDataSourceException nse) { Stdout.logAndAbortException(nse); }

		if (! DeviceInfo.setFormat(videoDataSource, captureVideoFormat))
		{
			Stdout.log("Error: unable to set video format - program aborted");
			System.exit(0);
		}


		// setup audio data source
		// -----------------------
		MediaLocator audioMediaLocator = captureAudioDevice.getLocator();
		DataSource audioDataSource = null;
		try
		{
			audioDataSource = javax.media.Manager.createDataSource(audioMediaLocator);
		}
		catch (IOException ie) { Stdout.logAndAbortException(ie); }
		catch (NoDataSourceException nse) { Stdout.logAndAbortException(nse); }

		if (! DeviceInfo.setFormat(audioDataSource, captureAudioFormat))
		{
			Stdout.log("Error: unable to set audio format - program aborted");
			System.exit(0);
		}


		// merge the two data sources
		// --------------------------
		DataSource mixedDataSource = null;
		try
		{
			DataSource dArray[] = new DataSource[2];
			dArray[0] = videoDataSource;
			dArray[1] = audioDataSource;
			mixedDataSource = javax.media.Manager.createMergingDataSource(dArray);
		}
		catch (IncompatibleSourceException ise) { Stdout.logAndAbortException(ise); }


		// create a new processor
		// ----------------------

		// setup output file format  ->> msvideo
		FileTypeDescriptor outputType = new FileTypeDescriptor(FileTypeDescriptor.MSVIDEO);

		// setup output video and audio data format
		Format outputFormat[] = new Format[2];
		outputFormat[0] = new VideoFormat(VideoFormat.INDEO50);
		outputFormat[1] = new AudioFormat(AudioFormat.GSM_MS /* LINEAR */);

		// create processor
		ProcessorModel processorModel = new ProcessorModel(mixedDataSource, outputFormat, outputType);
		Processor processor = null;
		try
		{
			processor = Manager.createRealizedProcessor(processorModel);
		}
		catch (IOException e) { Stdout.logAndAbortException(e); }
		catch (NoProcessorException e) { Stdout.logAndAbortException(e); }
		catch (CannotRealizeException e) { Stdout.logAndAbortException(e); }

		// get the output of the processor
		DataSource source = processor.getDataOutput();

		// create a File protocol MediaLocator with the location
		// of the file to which bits are to be written
		MediaLocator dest = new MediaLocator("file:testcam.avi");

		// create a datasink to do the file
		DataSink dataSink = null;
		MyDataSinkListener dataSinkListener = null;
		try
		{
			dataSink = Manager.createDataSink(source, dest);
			dataSinkListener = new MyDataSinkListener();
			dataSink.addDataSinkListener(dataSinkListener);
			dataSink.open();
		}
		catch (IOException e) { Stdout.logAndAbortException(e); }
		catch (NoDataSinkException e) { Stdout.logAndAbortException(e); }
		catch (SecurityException e) { Stdout.logAndAbortException(e); }

		// now start the datasink and processor
		try
		{
			dataSink.start();
		}
		catch (IOException e) { Stdout.logAndAbortException(e); }
		processor.start();

		Stdout.log("starting capturing ...");
		try { Thread.currentThread().sleep(10000); } catch (InterruptedException ie) {}	// capture for 10 seconds
		Stdout.log("... capturing done");

		// stop and close the processor when done capturing...
		// close the datasink when EndOfStream event is received...
		processor.stop();
		processor.close();

		dataSinkListener.waitEndOfStream(10);
		dataSink.close();

		Stdout.log("[all done]");
	}

}
```
@Edit
Ist es so richtig, hast du das gemeint?


----------



## Developer_X (31. Mrz 2009)

meine Ausgabe ist nun:

```
get list of all media devices ...
>>> capture audio device = DirectSoundCapture
>>> capture audio format = linear, 16000.0 hz, 8-bit, mono, unsigned
... list completed.
[DirectSoundCapture : dsound://
LINEAR, 48000.0 Hz, 16-bit, Stereo, LittleEndian, Signed
LINEAR, 48000.0 Hz, 16-bit, Mono, LittleEndian, Signed
LINEAR, 48000.0 Hz, 8-bit, Stereo, Unsigned
LINEAR, 48000.0 Hz, 8-bit, Mono, Unsigned
LINEAR, 44100.0 Hz, 16-bit, Stereo, LittleEndian, Signed
LINEAR, 44100.0 Hz, 16-bit, Mono, LittleEndian, Signed
LINEAR, 44100.0 Hz, 8-bit, Stereo, Unsigned
LINEAR, 44100.0 Hz, 8-bit, Mono, Unsigned
LINEAR, 32000.0 Hz, 16-bit, Stereo, LittleEndian, Signed
LINEAR, 32000.0 Hz, 16-bit, Mono, LittleEndian, Signed
LINEAR, 32000.0 Hz, 8-bit, Stereo, Unsigned
LINEAR, 32000.0 Hz, 8-bit, Mono, Unsigned
LINEAR, 22050.0 Hz, 16-bit, Stereo, LittleEndian, Signed
LINEAR, 22050.0 Hz, 16-bit, Mono, LittleEndian, Signed
LINEAR, 22050.0 Hz, 8-bit, Stereo, Unsigned
LINEAR, 22050.0 Hz, 8-bit, Mono, Unsigned
LINEAR, 16000.0 Hz, 16-bit, Stereo, LittleEndian, Signed
LINEAR, 16000.0 Hz, 16-bit, Mono, LittleEndian, Signed
LINEAR, 16000.0 Hz, 8-bit, Stereo, Unsigned
LINEAR, 16000.0 Hz, 8-bit, Mono, Unsigned
LINEAR, 11025.0 Hz, 16-bit, Stereo, LittleEndian, Signed
LINEAR, 11025.0 Hz, 16-bit, Mono, LittleEndian, Signed
LINEAR, 11025.0 Hz, 8-bit, Stereo, Unsigned
LINEAR, 11025.0 Hz, 8-bit, Mono, Unsigned
LINEAR, 8000.0 Hz, 16-bit, Stereo, LittleEndian, Signed
LINEAR, 8000.0 Hz, 16-bit, Mono, LittleEndian, Signed
LINEAR, 8000.0 Hz, 8-bit, Stereo, Unsigned
LINEAR, 8000.0 Hz, 8-bit, Mono, Unsigned
, JavaSound audio capture : javasound://44100
LINEAR, 44100.0 Hz, 16-bit, Stereo, LittleEndian, Signed
LINEAR, 44100.0 Hz, 16-bit, Mono, LittleEndian, Signed
LINEAR, 22050.0 Hz, 16-bit, Stereo, LittleEndian, Signed
LINEAR, 22050.0 Hz, 16-bit, Mono, LittleEndian, Signed
LINEAR, 11025.0 Hz, 16-bit, Stereo, LittleEndian, Signed
LINEAR, 11025.0 Hz, 16-bit, Mono, LittleEndian, Signed
LINEAR, 8000.0 Hz, 16-bit, Stereo, LittleEndian, Signed
LINEAR, 8000.0 Hz, 16-bit, Mono, LittleEndian, Signed
]
Exception in thread "main" java.lang.NullPointerException
	at Webcam.TestQuickCamPro.main(TestQuickCamPro.java:115)
```


----------



## diggaa1984 (31. Mrz 2009)

ohne zu wissen ob das n besseren nährwert hat  gib mal das deviceFormat-array aus:
[HIGHLIGHT="Java"]
// display device formats
Format deviceFormat[] = deviceInfo.getFormats();
for (int y = 0; y < deviceFormat.length; y++) {
 System.out.println("______"+deviceFormat[y]);
 < if abfragen >
}
Stdout.log("... list completed.");
[/HIGHLIGHT]

wobei ich ma vermute das in deiner liste schon etwas web-cam / video-device-mäßiges häte auftauchen müssen


----------



## ice-breaker (31. Mrz 2009)

gabs bei JMF nicht noch nen Extra Tool dabei "JMF Studio", "JMF Registry" oder sowas wo alle Grafikgeräte gelistet waren und man es da schon ausprobieren konnte ?

Aber irgendwie hat das JMF immer mehr Probleme bereitet, als es gelöst hat


----------



## Developer_X (31. Mrz 2009)

Fehlermeldung

```
get list of all media devices ...
>>> capture audio device = DirectSoundCapture
>>> capture audio format = linear, 16000.0 hz, 8-bit, mono, unsigned
[Ljavax.media.format.AudioFormat;@15eb0a9
[Ljavax.media.Format;@1a05308
... list completed.
Exception in thread "main" java.lang.NullPointerException
	at Webcam.TestQuickCamPro.main(TestQuickCamPro.java:115)
```
Code

```
import java.io.*;
import javax.media.*;
import javax.media.format.*;
import javax.media.protocol.*;


public class TestQuickCamPro
{

	private static boolean				debugDeviceList = false;

	private static String				defaultVideoDeviceName = "Logitech USB Video Camera";
	private static String				defaultAudioDeviceName = "DirectSoundCapture";
	private static String				defaultVideoFormatString = "size=176x144, encoding=yuv, maxdatalength=38016";
	private static String				defaultAudioFormatString = "linear, 16000.0 hz, 8-bit, mono, unsigned";

	private static CaptureDeviceInfo	captureVideoDevice = null;
	private static CaptureDeviceInfo	captureAudioDevice = null;
	private static VideoFormat			captureVideoFormat = null;
	private static AudioFormat			captureAudioFormat = null;


	public static void main(String args[])
	{
		// get command line arguments
		for (int x = 0; x < args.length; x++)
		{
			// -dd = debug devices list -> display list of all media devices - and exit
			if (args[x].toLowerCase().compareTo("-dd") == 0)
				debugDeviceList = true;
		}

		// get a list of all media devices, search default devices and formats, and print it out if args[x] = "-dd"
		// --------------------------------------------------------------------------------------------------------

		Stdout.log("get list of all media devices ...");
		java.util.Vector deviceListVector = CaptureDeviceManager.getDeviceList(null);
		if (deviceListVector == null)
		{
			Stdout.log("... error: media device list vector is null, program aborted");
			System.exit(0);
		}
		if (deviceListVector.size() == 0)
		{
			Stdout.log("... error: media device list vector size is 0, program aborted");
			System.exit(0);
		}

		for (int x = 0; x < deviceListVector.size(); x++)
		{
			// display device name
			CaptureDeviceInfo deviceInfo = (CaptureDeviceInfo) deviceListVector.elementAt(x);
			String deviceInfoText = deviceInfo.getName();
			if (debugDeviceList)
				Stdout.log("device " + x + ": " + deviceInfoText);

			// display device formats
			Format deviceFormat[] = deviceInfo.getFormats();
			for (int y = 0; y < deviceFormat.length; y++)
			{
				// serach for default video device
				if (captureVideoDevice == null)
					if (deviceFormat[y] instanceof VideoFormat)
					if (deviceInfo.getName().indexOf(defaultVideoDeviceName) >= 0)
				{
					captureVideoDevice = deviceInfo;
					Stdout.log(">>> capture video device = " + deviceInfo.getName());
				}

				// search for default video format
				if (captureVideoDevice == deviceInfo)
					if (captureVideoFormat == null)
					if (DeviceInfo.formatToString(deviceFormat[y]).indexOf(defaultVideoFormatString) >= 0)
				{
					captureVideoFormat = (VideoFormat) deviceFormat[y];
					Stdout.log(">>> capture video format = " + DeviceInfo.formatToString(deviceFormat[y]));
				}

				// serach for default audio device
				if (captureAudioDevice == null)
					if (deviceFormat[y] instanceof AudioFormat)
					if (deviceInfo.getName().indexOf(defaultAudioDeviceName) >= 0)
				{
					captureAudioDevice = deviceInfo;
					Stdout.log(">>> capture audio device = " + deviceInfo.getName());
				}

				// search for default audio format
				if (captureAudioDevice == deviceInfo)
					if (captureAudioFormat == null)
					if (DeviceInfo.formatToString(deviceFormat[y]).indexOf(defaultAudioFormatString) >= 0)
				{
					captureAudioFormat = (AudioFormat) deviceFormat[y];
					Stdout.log(">>> capture audio format = " + DeviceInfo.formatToString(deviceFormat[y]));
				}

				if (debugDeviceList)
					Stdout.log(" - format: " +  DeviceInfo.formatToString(deviceFormat[y]));
			}
			[highlight]System.out.println(deviceFormat);[/highlight]
		}
		Stdout.log("... list completed.");

		// if args[x] = "-dd" terminate now
		// --------------------------------

		if (debugDeviceList)
			System.exit(0);


		// setup video data source
		// -----------------------
		MediaLocator videoMediaLocator = captureVideoDevice.getLocator();
		DataSource videoDataSource = null;
		try
		{
			videoDataSource = javax.media.Manager.createDataSource(videoMediaLocator);
		}
		catch (IOException ie) { Stdout.logAndAbortException(ie); }
		catch (NoDataSourceException nse) { Stdout.logAndAbortException(nse); }

		if (! DeviceInfo.setFormat(videoDataSource, captureVideoFormat))
		{
			Stdout.log("Error: unable to set video format - program aborted");
			System.exit(0);
		}


		// setup audio data source
		// -----------------------
		MediaLocator audioMediaLocator = captureAudioDevice.getLocator();
		DataSource audioDataSource = null;
		try
		{
			audioDataSource = javax.media.Manager.createDataSource(audioMediaLocator);
		}
		catch (IOException ie) { Stdout.logAndAbortException(ie); }
		catch (NoDataSourceException nse) { Stdout.logAndAbortException(nse); }

		if (! DeviceInfo.setFormat(audioDataSource, captureAudioFormat))
		{
			Stdout.log("Error: unable to set audio format - program aborted");
			System.exit(0);
		}


		// merge the two data sources
		// --------------------------
		DataSource mixedDataSource = null;
		try
		{
			DataSource dArray[] = new DataSource[2];
			dArray[0] = videoDataSource;
			dArray[1] = audioDataSource;
			mixedDataSource = javax.media.Manager.createMergingDataSource(dArray);
		}
		catch (IncompatibleSourceException ise) { Stdout.logAndAbortException(ise); }


		// create a new processor
		// ----------------------

		// setup output file format  ->> msvideo
		FileTypeDescriptor outputType = new FileTypeDescriptor(FileTypeDescriptor.MSVIDEO);

		// setup output video and audio data format
		Format outputFormat[] = new Format[2];
		outputFormat[0] = new VideoFormat(VideoFormat.INDEO50);
		outputFormat[1] = new AudioFormat(AudioFormat.GSM_MS /* LINEAR */);

		// create processor
		ProcessorModel processorModel = new ProcessorModel(mixedDataSource, outputFormat, outputType);
		Processor processor = null;
		try
		{
			processor = Manager.createRealizedProcessor(processorModel);
		}
		catch (IOException e) { Stdout.logAndAbortException(e); }
		catch (NoProcessorException e) { Stdout.logAndAbortException(e); }
		catch (CannotRealizeException e) { Stdout.logAndAbortException(e); }

		// get the output of the processor
		DataSource source = processor.getDataOutput();

		// create a File protocol MediaLocator with the location
		// of the file to which bits are to be written
		MediaLocator dest = new MediaLocator("file:testcam.avi");

		// create a datasink to do the file
		DataSink dataSink = null;
		MyDataSinkListener dataSinkListener = null;
		try
		{
			dataSink = Manager.createDataSink(source, dest);
			dataSinkListener = new MyDataSinkListener();
			dataSink.addDataSinkListener(dataSinkListener);
			dataSink.open();
		}
		catch (IOException e) { Stdout.logAndAbortException(e); }
		catch (NoDataSinkException e) { Stdout.logAndAbortException(e); }
		catch (SecurityException e) { Stdout.logAndAbortException(e); }

		// now start the datasink and processor
		try
		{
			dataSink.start();
		}
		catch (IOException e) { Stdout.logAndAbortException(e); }
		processor.start();

		Stdout.log("starting capturing ...");
		try { Thread.currentThread().sleep(10000); } catch (InterruptedException ie) {}	// capture for 10 seconds
		Stdout.log("... capturing done");

		// stop and close the processor when done capturing...
		// close the datasink when EndOfStream event is received...
		processor.stop();
		processor.close();

		dataSinkListener.waitEndOfStream(10);
		dataSink.close();

		Stdout.log("[all done]");
	}

}
```

Wie wärs wenn mir einfach mal einer von euch einen ganz einfachen Quellcode gebt zum anzeigen der WEbcam?

muss man eigentlich angeben, wo sich die Webcam befindet?
oder sucht der die Festplatte allein durch bis er sie gefunden hat?


----------



## diggaa1984 (31. Mrz 2009)

hm war wohl n blöder vorschlag meinerseits 
start ma so, vielleicht siehst da mehr:
_java TestQuickCamPro -dd_

(stand auf der HP die du gelinkt hast, hättst auch finden können )


----------



## Noctarius (31. Mrz 2009)

Developer_X hat gesagt.:


> muss man eigentlich angeben, wo sich die Webcam befindet?
> oder sucht der die Festplatte allein durch bis er sie gefunden hat?



WTF? Oo

Edit - Noch ein Tipp: Bevor du mit nem Java Buch anfängst werd dir über Grundlagen der PC Technik im klaren. Auch dazu gibt es tolle Bücher. Besonders interessant sind Themen wie: "Wie steuert ein Computer seine Peripherie an" (hab ich gehört )


----------



## Ark (31. Mrz 2009)

Hey, Developer_X, hast du überhaupt schon einmal irgendein Stück Code von über 100 Zeilen selbst geschrieben?

Ark


----------



## Developer_X (31. Mrz 2009)

ja, natürlich,
und ohne fremde hilfe


----------



## Developer_X (31. Mrz 2009)

so wie ihr hier sehen könnt funktionierts eigentlich,
aber der zeigt das bild irgendwie nicht an?
Wenigstens gibts keine FehlerException

```
ECHO ist eingeschaltet (ON).

F:\Java.Examples\webcam>set PATH=C:\Programme\Java\jdk1.6.0_11\bin;

F:\Java.Examples\webcam>javac TestQuickCamPro.java

F:\Java.Examples\webcam>java TestQuickCamPro -dd
get list of all media devices ...
device 0: DirectSoundCapture
>>> capture audio device = DirectSoundCapture
 - format: linear, 48000.0 hz, 16-bit, stereo, littleendian, signed
 - format: linear, 48000.0 hz, 16-bit, mono, littleendian, signed
 - format: linear, 48000.0 hz, 8-bit, stereo, unsigned
 - format: linear, 48000.0 hz, 8-bit, mono, unsigned
 - format: linear, 44100.0 hz, 16-bit, stereo, littleendian, signed
 - format: linear, 44100.0 hz, 16-bit, mono, littleendian, signed
 - format: linear, 44100.0 hz, 8-bit, stereo, unsigned
 - format: linear, 44100.0 hz, 8-bit, mono, unsigned
 - format: linear, 32000.0 hz, 16-bit, stereo, littleendian, signed
 - format: linear, 32000.0 hz, 16-bit, mono, littleendian, signed
 - format: linear, 32000.0 hz, 8-bit, stereo, unsigned
 - format: linear, 32000.0 hz, 8-bit, mono, unsigned
 - format: linear, 22050.0 hz, 16-bit, stereo, littleendian, signed
 - format: linear, 22050.0 hz, 16-bit, mono, littleendian, signed
 - format: linear, 22050.0 hz, 8-bit, stereo, unsigned
 - format: linear, 22050.0 hz, 8-bit, mono, unsigned
 - format: linear, 16000.0 hz, 16-bit, stereo, littleendian, signed
 - format: linear, 16000.0 hz, 16-bit, mono, littleendian, signed
 - format: linear, 16000.0 hz, 8-bit, stereo, unsigned
>>> capture audio format = linear, 16000.0 hz, 8-bit, mono, unsigned
 - format: linear, 16000.0 hz, 8-bit, mono, unsigned
 - format: linear, 11025.0 hz, 16-bit, stereo, littleendian, signed
 - format: linear, 11025.0 hz, 16-bit, mono, littleendian, signed
 - format: linear, 11025.0 hz, 8-bit, stereo, unsigned
 - format: linear, 11025.0 hz, 8-bit, mono, unsigned
 - format: linear, 8000.0 hz, 16-bit, stereo, littleendian, signed
 - format: linear, 8000.0 hz, 16-bit, mono, littleendian, signed
 - format: linear, 8000.0 hz, 8-bit, stereo, unsigned
 - format: linear, 8000.0 hz, 8-bit, mono, unsigned
device 1: JavaSound audio capture
 - format: linear, 44100.0 hz, 16-bit, stereo, littleendian, signed
 - format: linear, 44100.0 hz, 16-bit, mono, littleendian, signed
 - format: linear, 22050.0 hz, 16-bit, stereo, littleendian, signed
 - format: linear, 22050.0 hz, 16-bit, mono, littleendian, signed
 - format: linear, 11025.0 hz, 16-bit, stereo, littleendian, signed
 - format: linear, 11025.0 hz, 16-bit, mono, littleendian, signed
 - format: linear, 8000.0 hz, 16-bit, stereo, littleendian, signed
 - format: linear, 8000.0 hz, 16-bit, mono, littleendian, signed
... list completed.

F:\Java.Examples\webcam>pause
Drücken Sie eine beliebige Taste . . .
```


----------



## Noctarius (31. Mrz 2009)

FehlerException?


----------



## Developer_X (31. Mrz 2009)

keine
nur das was oben steht ist die Ausgabe
in der Eingabeaufforderung


----------



## Developer_X (31. Mrz 2009)

ich hab die hier!
QuickCam® S 7500™


----------



## Noctarius (31. Mrz 2009)

Was ich eher meinte:

Definiere FehlerException!

Ich kenne Fehler => Error
und ich kenne Ausnahmen => Exception


----------



## diggaa1984 (31. Mrz 2009)

naja was ich sehe is haufen sound-kram, was fehlt is ne auflistung von Video-Devices .. solange da nix erscheint siehts dunkel aus, ganz dunkel 

aber woran das liegt keine ahnung, da musst dann wohl mal die homepage die du gelinkt hast durchforsten. (bin raus, kümmer mich wieder um meine kontextfreien Grammatiken)


----------



## Developer_X (31. Mrz 2009)

aso

```
keine "allfinished" nachricht system.out.printlned
keine video device dinge gefunden
nur audia device dinge gefunden
kein video nur audio gefunden
```
Ich glaub das liegt an meiner Webcam, aber das muss man doch mit jeder machen können oder?


----------



## Developer_X (31. Mrz 2009)

mal im Ernst, irgendjemand von euch wird doch wohl wissen, wie man mit Java einen Webcam Foto schuss macht oder?
Und das mit meiner Webcam oder?


----------



## Wildcard (31. Mrz 2009)

Noctarius hat gesagt.:


> WTF? Oo
> 
> Edit - Noch ein Tipp: Bevor du mit nem Java Buch anfängst werd dir über Grundlagen der PC Technik im klaren. Auch dazu gibt es tolle Bücher. Besonders interessant sind Themen wie: "Wie steuert ein Computer seine Peripherie an" (hab ich gehört )





> With few exceptions, all devices and some types of communications between processes are managed and visible as files or pseudo-files within the file system hierarchy. This is known as *everything's a file*.


Unix architecture - Wikipedia, the free encyclopedia


----------



## Noctarius (31. Mrz 2009)

Danke wildcard, geb ihm auch noch Recht 
Aber hey irgendwie glaube ich spontan (wie kommt das wohl) nicht, dass er mit Linux arbeitet - Ergo: Not everything's a file ^^


----------



## diggaa1984 (31. Mrz 2009)

> mal im Ernst, irgendjemand von euch wird doch wohl wissen, wie man mit Java einen Webcam Foto schuss macht oder?
> Und das mit meiner Webcam oder?



ich sags nich gern, aber das driftet schon wieder in die falsche richtung, und wir sind leider auch nicht allwissend .. ich hab damit zB noch nix gemacht!!

hast denn schonmal die komplette Homepage gelesen versucht was da erwähnt wird (*Configuration Hint*)?


----------



## Developer_X (31. Mrz 2009)

klar, aber es klappt net
egal


----------



## diggaa1984 (31. Mrz 2009)

und was sagt JMF Registry Editor bei dir?

edit: oder es is total vergebens, wenn man dem hier Glauben schenken mag


> Q: What platforms does JMF 2.1.1 run on?
> 
> JMF 2.1.1 will run on Windows 95/98/NT 4.0/2000, Solaris/SPARC, and any Java Compatible platforms. The pure Java version of JMF 2.1.1 will now run on Apple's MRJ 2.1.4; however there are a/v syncronization problems since Apple added a 6 second audio buffer to that MRJ.


oder is Vista nich java-kompatibel


----------



## hdi (31. Mrz 2009)

Hey Developer, ich glaub deine Webcam funzt doch.
Zumindest hab ich ein Bild von deinem Schreibtisch im Inet gefunden:


----------



## L-ectron-X (31. Mrz 2009)

Jetzt brauche ich dringend den hier: :lol:


----------



## Sempah (31. Mrz 2009)

hdi hat gesagt.:


> Hey Developer, ich glaub deine Webcam funzt doch.
> Zumindest hab ich ein Bild von deinem Schreibtisch im Inet gefunden:



made my day


----------



## Ark (31. Mrz 2009)

YMMD2 :lol::lol::lol:

Ark


----------



## Mofi (31. Mrz 2009)

klingt doof aber hast du auch die richtigen treiber für die cam installiert? 
*nur mal so als gedanken einwerf*


----------



## Spacerat (1. Apr 2009)

Mofi hat gesagt.:


> klingt doof aber hast du auch die richtigen treiber für die cam installiert?


Ist das der zweite Teil der Umfrage? Dann würd' ich gern' nochmal abstimmen. 
@Edit: Ach... wozu denn? Antwort bleibt eh' dieselbe...


----------



## diggaa1984 (1. Apr 2009)

würd ja gern ma wissen was der JMF Reg Editor sagt, aber das bleibt wohl ein geheimniss :d


----------



## Kerb_09 (12. Nov 2009)

Hi,

Also zu aller erst - deine Device List zeigt schon das deine WebCam nicht registriert wurde!
-> Denn die hier oftmals angefragte "JMF Registry"(-Einträge) muß die Devices ersteinmal "suchen"! 
Dann werden die auch aufgelistet! Und du kannst den String im Vektor ausfindig machen!

Des Weiteren, wie auch beim aufmerksamen lesen des Quellcodes oder im Vorfeld der Website hervorgeht, muß man die WebCam manuell anpassen! (Nicht nur den String, sondern auch die Werte!!!)

-> Das ganze ist zum einen von der Anpassung der Webcam und vom JMF abhängig!

Habe z.B. den Windows Treiber genutzt und bei mir sieht das dann wie folgt aus:




> ...
> device 2: vfw:Microsoft WDM Image Capture (Win32):0
> >>> capture video device = vfw:Microsoft WDM Image Capture (Win32):0
> - format: size=640x480, encoding=MJPG, maxdatalength=921600
> ...



Die Pünktchen geben die von dir schon angegebenen Devices und noch nen paar andere Video-optionen meines Rechners an, die nicht von belang sind!

Wie du hier siehst mußt deine CAM ersteinmal anpassen, dafür ist die Ausführung mit -dd zu nutzen, insofern du die WEBCAM den registriert hast!

Bei mir sieht das Codetechnisch dann wie folgt aus:


```
private static String				defaultVideoDeviceName = "vfw:Microsoft WDM Image Capture (Win32):0";//"Logitech USB Video Camera";
	private static String				defaultAudioDeviceName = "DirectSoundCapture";
	private static String				defaultVideoFormatString = "size=640x480, encoding=MJPG, maxdatalength=921600";
	private static String				defaultAudioFormatString = "linear, 16000.0 hz, 8-bit, mono, unsigned";
```

Nach der oben angegebenen Anpassung läuft der bei mir zumindest durch das "Auffinden" der Devices durch, was er nach deinem ersten LOG bei dir nicht tut!

Im Übrigen, auch auf der Autorwebsite zu finden:


> If all works successfull, you will see an output like this:
> 
> 
> get list of all media devices ...
> ...



Jedoch erhalte ich dann leider folgenden Fehler:


```
javax.media.CannotRealizeException: Unable to provide all requested tracks
```

Nun an die anderen Damen & Herren die sich hier beteiligt haben - kennt sich jemand mit der Erzeugung "Processors" aus ?
Im JFM steht folgendes beschrieben:

JMF 2.0 API (03/10/01): Class Manager


> Creating Processors
> Processors are created in the same way as Players as outlined above. Manager also provides an additional way to create a Processor via the createRealizedProcessor call. A ProcessorModel is used to fully identify the input and output requirements of a Processor. The createRealizedProcessor call takes a ProcessorModel as input and create a Processor that adheres to the given ProcessorModel. The returned Processor is in the Realized state. The method is a blocking call.
> 
> If the Manager fails to find a Processor that fits the ProcessorModel, a NoProcessorException is thrown. If there is a problem creating and realizing a Processor, it will throw an IOException or CannotRealizeException depending on the circumstances.



So, meiner Fehlermeldung zufolge kann er mir die Tracks nicht zur Verfügung stellen!
Kann damit leider nicht's Anfangen, auch googeln hat mir nicht weitergeholfen!

Wie oben aus der eng. Erläuterung hervorgeht, findet der Manager einen Processor, kann diesen aber scheinbar nicht erstellen bzw. verwirklicht!

Hat diesbezüglich einer von euch einen Tipp für mich ?

Arbeite auch das erste mal mit dem JMF - und mehr als mich durch deren API - Erläuterungen durchzubeißen und zu googeln kann ich leider nicht aufbieten 

PS @Developer_X:
Ach so... von dem was du hier präsentierst überzeugst du nicht gerade - was die Angabe über 100 Zeilen Code angeht 
-> Den im Prinzip ist das alles nachlesbar gewesen, sowohl im Code, als auch auf der Website und auf der Java Seite! :rtfm: <- :toll: :applaus: -> :autsch: 
:lol:


----------



## Kerb_09 (12. Nov 2009)

@Jangoo 

Ist nicht mal nen Jahr alt...
Da würde ich noch nicht von "Leichenschändung" reden!
Zudem kommt es dem Autor zu gute - ich denke er wird damit nicht weitergekommen sein!

Des Weiteren sehe ich zu viele Threads mehr als Spaming an!
-> Alle die sich hier beteiligt haben werden wohl drüberschauen!

Klar könnt ich nen neuen aufmachen!

:toll:

Nur so schlage ich gleich drei Fliegen mit einer Klappe:

1. Erreiche ich die, die sich zumindest annähernd damit schon einmal beschäftigt haben!
2. Kann der Autor dieses Threads mittels der Antwort sein "Projekt" zumindest beendigen wenn er nicht den selbigen Fehler erhalten sollte!
3. Sind genau die gefragt, die sich schon einmal beteiligt haben und z.T. Gedanken daran verlohren haben!

*Selbstredent würde ich auch von dir eine konstruktive Antwort, bezüglich meines Problemes, gerne annehmen!!!*
:toll:


----------

