QMediaRecorder QT не работает - невозможно записать с веб-камеры

Я везде искал решение этой проблемы, и я видел здесь несколько тем, посвященных этой проблеме, но без решения.

Я пытаюсь записать видео с двух разных веб-камер, которые есть у меня на компьютере. Я могу показать видео для них обоих, но проблема с записью. Когда я пытаюсь это сделать, ничего не происходит. Файл не сохраняется, и состояния также никогда не меняются. Ниже я прикрепил код, загружающий камеры, и код, загружающий 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.

Рекордер: Состояние: QMediaRecorder::UnavailableStatus; Статус: QMediaRecorder::StoppedState; Ошибка: QMediaRecorder::NoError.

Спасибо заранее за ваше время.


person Solidus    schedule 31.07.2014    source источник


Ответы (1)


Кажется, проблема в том, что запись по-прежнему не работает для Windows, как объяснено здесь

Я проверил его на Mac, он работал нормально. Чтобы исправить это в Windows, я использовал библиотеку QtMEL.

person Solidus    schedule 01.08.2014