Estou utilizando jmf para capturar e exibir vídeo de webcam. Ainda não consegui fazer a captura e exibição de duas ou mais webcams simultaneamente. Parece que o jmf reconheçe somente um dispositivo por vez, e utiliza o location vfw:0
Para realizar a listagem e utilização dos dispositivos de vídeo que estão conectados ao pc, já tentei variações do código abaixo:
Vector deviceList = CaptureDeviceManager.getDeviceList(new VideoFormat(VideoFormat.YUV));
CaptureDeviceInfo device = (CaptureDeviceInfo) deviceList.get(0);
CaptureDeviceInfo device = (CaptureDeviceInfo) deviceList.get(1);
Se eu tentar executar outra camera com uma já em execução ocorre o erro de “device in use”, porque o jmf está alocando o media locator somente vfw:0 para webcams. Não consigo instanciar outro processor…
Se eu forçar para 1, ele nem encontra.
Eu não me lembro muito bem onde, mas li uma publicação de um cara falando que pra ambiente windows, o jmf irá operar webcams sempre em 0, não sendo possível executar mais de uma.
Alguém já passou por isso?
O método que estou usando especificamente é este:
private MediaLocator findMedia(String requireDeviceName, Format format)
// retorna um media locator para o dispositivo especificado
{
Vector devices = CaptureDeviceManager.getDeviceList(null);
if (devices == null) {
System.out.println("Lista de dispositivos nula");
System.exit(0);
}
if (devices.size() == 0) {
System.out.println("Nenhum dispositivo encontrado");
System.exit(0);
}
for (int i = 0; i < devices.size(); i++) {
CaptureDeviceInfo devInfo =
(CaptureDeviceInfo) devices.elementAt(i);
String devName = devInfo.getName();
JOptionPane.showMessageDialog(null, devName);
if (devName.equals(requireDeviceName)) { // dispositivo encontrado
System.out.println("Found device: " + requireDeviceName);
return devInfo.getLocator(); // aqui exatamanete que está o erro, ele nao encontra o locator!!!
}
}
System.out.println("Dispositivo " + requireDeviceName + " não encontrado");
System.out.println("Usando media locator padrao: " + CAP_LOCATOR);
return new MediaLocator(CAP_LOCATOR);
}
O CAP_LOCATOR é uma constante que defini para caso nao fosse encontrado nenhum media locator:
private static final String CAP_LOCATOR = "vfw://0";
A única coisa que ele me retorna sobre dispositivo de video é:
“vfw:Microsoft WDM Image Capture (Win32):0”
Cara… eu preciso exibir uma só…
dá pra mandar o código de como fazer isso?