Я пытаюсь записать видео, полученное с веб-камеры, для подключения к 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."
Но видео на самом деле записано.
Похоже, проблема связана с точной моделью камеры? –
@MatsPetersson, похоже, это не так. Я пробовал с тремя различными камерами, и я все еще получаю ту же ошибку. – user2582879
Сообщение «Не удалось согласовать формат», похоже, указывает на то, что камера не поддерживает формат, который вы запрашиваете, так что либо это камера, либо формат, который вы спрашивают, что это неправильно. –