Установка разрешения веб-камеры с помощью Java (JMF) - PullRequest
0 голосов
/ 14 декабря 2011

Я использую JMF для подключения к веб-камере, подключенной через USB (Logitech Quickcam Pro 9000).Эта камера способна передавать видео с максимальным разрешением 2 Мп, однако у меня возникают проблемы при настройке формата видео на более высокое значение, чем 320x240.Печать доступных форматов дает мне такой результат:

MJPG, 320x240, Length=230400 0 extra bytes
YUV Video Format: Size = java.awt.Dimension[width=160,height=120] MaxDataLength = 38400 DataType = class [B yuvType = 32 StrideY = 320 StrideUV = 320 OffsetY = 0 OffsetU = 1 OffsetV = 3
YUV Video Format: Size = java.awt.Dimension[width=176,height=144] MaxDataLength = 50688 DataType = class [B yuvType = 32 StrideY = 352 StrideUV = 352 OffsetY = 0 OffsetU = 1 OffsetV = 3
YUV Video Format: Size = java.awt.Dimension[width=320,height=240] MaxDataLength = 153600 DataType = class [B yuvType = 32 StrideY = 640 StrideUV = 640 OffsetY = 0 OffsetU = 1 OffsetV = 3
YUV Video Format: Size = java.awt.Dimension[width=352,height=288] MaxDataLength = 202752 DataType = class [B yuvType = 32 StrideY = 704 StrideUV = 704 OffsetY = 0 OffsetU = 1 OffsetV = 3
YUV Video Format: Size = java.awt.Dimension[width=640,height=480] MaxDataLength = 614400 DataType = class [B yuvType = 32 StrideY = 1280 StrideUV = 1280 OffsetY = 0 OffsetU = 1 OffsetV = 3

MJPG, 160x120, Length=57600 0 extra bytes
MJPG, 176x144, Length=76032 0 extra bytes
MJPG, 352x288, Length=304128 0 extra bytes
MJPG, 640x480, Length=921600 0 extra bytes

Это говорит мне о том, что я должен по крайней мере иметь возможность получить захват 640x480, но я даже не могу заставить это работать.Как мне сообщить JMF, какое разрешение я хочу использовать?

Это отрывок из моего кода, как сейчас:

captureDeviceInfo = CaptureDeviceManager.getDevice(DEVICE_NAME);
Format[] formats = captureDeviceInfo.getFormats();
Format selectedFormat = null;
for(Format f : formats) {
    if(f.toString().contains("width=640,height=480")) {
        selectedFormat = f;
        break;
    }
}

try {
    mediaLocator = captureDeviceInfo.getLocator();
    DataSource videoDataSource = Manager.createDataSource(mediaLocator);
    player = Manager.createRealizedPlayer(videoDataSource);

    FormatControl fc = (FormatControl)player.getControl("javax.media.control.FormatControl");
    fc.setFormat(selectedFormat);

    player.start();

1 Ответ

1 голос
/ 05 января 2012

Дважды проверьте строку формата, который вы хотите.По крайней мере, на моей машине ни одна из строк формата не содержит "width = 640, height = 480".Когда я перебираю поддерживаемые форматы, все они начинаются с «RGB, 640x480, Length = ...» или «YUV Video Format: Size = ...»

...