Я всюду искал решение этой проблемы, и я видел здесь несколько тем об этой проблеме, но без решения.
Я пытаюсь записать видео с двух разных веб-камер, которые есть на моем компьютере. Я могу показать видео для них обоих, но проблема заключается в записи. Когда я пытаюсь, ничего не происходит. Файл не сохраняется и состояния также никогда не меняются. Ниже я прикрепил код, который загружает камеры и код, который загружает QMediaRecorders. Я также попробовал только с одной из камер, и она все еще не работает. Пример QT «камера» тоже не работает, опция записи всегда отключена.
void MainWindow::setCamera() {
foreach (const QCameraInfo &cameraInfo, QCameraInfo::availableCameras()) {
qDebug() << "Device Name: " + cameraInfo.deviceName();
qDebug() << "Device Description: " + cameraInfo.description();
if (cameraInfo.description() == "Integrated Camera")
camera1 = new QCamera(cameraInfo);
else if(cameraInfo.description() == "QuickCam for Notebooks Pro")
camera2 = new QCamera(cameraInfo);
}
camera1->setViewfinder(ui->camScreen1);
camera2->setViewfinder(ui->camScreen2);
camera1->setCaptureMode(QCamera::CaptureVideo);
camera2->setCaptureMode(QCamera::CaptureVideo);
camera1->start();
camera2->start();
qDebug() << camera1->status();
qDebug() << camera1->state();
qDebug() << camera1->error();
}
void MainWindow::setVideoEncoding() {
recorder1 = new QMediaRecorder(camera1);
recorder2 = new QMediaRecorder(camera2);
QVideoEncoderSettings settings = recorder1->videoSettings();
settings.setCodec("video/mpeg2");
settings.setQuality(QMultimedia::LowQuality);
settings.setResolution(640,480);
settings.setFrameRate(30.0);
recorder1->setVideoSettings(settings);
recorder2->setVideoSettings(settings);
recorder1->setMetaData(QMediaMetaData::Title, QVariant(QLatin1String("Record1")));
recorder2->setMetaData(QMediaMetaData::Title, QVariant(QLatin1String("Record2")));
recorder1->setOutputLocation(QUrl::fromLocalFile(QCoreApplication::applicationDirPath() + "/" + "testvide1o.mp4"));
recorder2->setOutputLocation(QUrl::fromLocalFile(QCoreApplication::applicationDirPath() + "/" + "testvideo2.mp4"));
qDebug() << recorder1->status();
qDebug() << recorder1->state();
qDebug() << recorder1->error();
}
Когда я нажимаю кнопку записи:
void MainWindow::toggleRecord(bool startRecord) {
if(startRecord) {
recorder1->record();
recorder2->record();
}
else {
recorder1->stop();
recorder2->stop();
}
qDebug() << recorder1->state();
qDebug() << recorder1->status();
qDebug() << recorder1->error();
qDebug() << recorder2->state();
qDebug() << recorder2->status();
qDebug() << recorder2->error();
}
Состояние, статус и ошибка следующие (каждый раз, когда я звоню им)
камера:
Государственный: QCamera::UnavailableStatus;
Статус: QCamera::ActiveState;
Ошибка: QCamera::NoError.
Recorder:
Государственный: QMediaRecorder::UnavailableStatus;
Статус: QMediaRecorder::StoppedState;
Ошибка: QMediaRecorder::NoError.
Спасибо заранее за ваше время.
Кажется, проблема в том, что запись все еще не работает для окон, как объяснено Вот
Я проверил его на Mac, он работал нормально. Чтобы исправить это на окнах, я использовал Библиотека QtMEL.