2013-07-15 3 views
4

Я пытаюсь записать видео, полученное с веб-камеры, для подключения к USB-устройству. Я работаю с Qt5.1.0 в Linux 64 бит.Запись видео с USB-камеры с Qt5

У меня есть следующий код:

camera = new QCamera(this); 
viewFinder = new QCameraViewfinder(this); 
camera->setViewfinder(viewFinder); 
recorder = new QMediaRecorder(camera,this); 

QVideoEncoderSettings settings = recorder->videoSettings(); 
settings.setResolution(1280,720); 
settings.setQuality(QMultimedia::VeryHighQuality); 
settings.setFrameRate(30.0); 

recorder->setVideoSettings(settings); 
camera->setCaptureMode(QCamera::CaptureVideo); 
camera->start(); 

QString name = filename + QDateTime::currentDateTime().toString("dd.MM.yy-h-m-s"); 
recorder->setOutputLocation(QUrl::fromLocalFile(outputpath + "/" + name + ".mp4")); 
recorder->record(); 

Когда я запускаю этот код я получаю следующее предупреждение и ошибку

CameraBin error: "Internal data flow error." 

CameraBin error: "Could not negotiate format" 

И в самом деле ничего не записывается.

Если изменить линию

camera->setCaptureMode(QCamera::CaptureVideo); 

для

camera->setCaptureMode(QCamera::CaptureViewFinder); 

об ошибке не выводится, файл создается, но он содержит только один кадр (фиксированное изображение)

Если я удалить эту кусочек кода:

QVideoEncoderSettings settings = recorder->videoSettings(); 
settings.setResolution(1280,720); 
settings.setQuality(QMultimedia::VeryHighQuality); 
settings.setFrameRate(30.0); 

я получаю две разные ошибки:

CameraBin warning: "A lot of buffers are being dropped." 
CameraBin error: "Could not encode stream." 

Но видео на самом деле записано.

+0

Похоже, проблема связана с точной моделью камеры? –

+0

@MatsPetersson, похоже, это не так. Я пробовал с тремя различными камерами, и я все еще получаю ту же ошибку. – user2582879

+0

Сообщение «Не удалось согласовать формат», похоже, указывает на то, что камера не поддерживает формат, который вы запрашиваете, так что либо это камера, либо формат, который вы спрашивают, что это неправильно. –

ответ

3

У меня почти такая же проблема с захватом изображения. Я обнаружил, что он работает только с разрешением по умолчанию 640 x 480. Если вы установите разрешение на большее значение, это не сработает. Я также пробовал с 2 различными камерами без успеха, поэтому, похоже, это проблема qt5. Вы можете попытаться не устанавливать разрешение, тогда вы должны иметь возможность записывать видео, но только с разрешением по умолчанию 640 x 480.

+0

Спасибо !, Снятие setResolution() работает! хотя я продолжаю получать ошибку CameraBin: ** «Невозможно закодировать поток». ** хотя на самом деле он записывает видео – user2582879

Смежные вопросы