Question

J'ai cherché partout pour trouver une solution à cela et j'ai vu quelques discussions ici à propos de ce problème, mais sans trouver de solution.

Je suis en train d'enregistrer une vidéo à partir de deux webcams que j'ai sur mon ordinateur.Je suis en mesure de montrer la vidéo pour les deux, mais le problème est en cours d'enregistrement.Quand je l'ai essayer rien ne se passe.Aucun fichier n'est enregistré, et les etats ont également ne jamais changer.Soufflet, j'ai joint le code de chargement de la photo et le code de chargement de la QMediaRecorders.J'ai aussi essayé avec juste une caméra et il ne fonctionne toujours pas.L'intervalle QT exemple "caméra" ne fonctionne pas ainsi, l'option pour l'enregistrement est toujours désactivé.

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();
}

Lorsque j'appuie sur le bouton d'enregistrement:

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();
}

L'état, d'état et d'erreur sont les suivantes (à chaque fois que je les appelle)

Appareil photo: État: QCamera::UnavailableStatus; Statut: QCamera::ActiveState; Erreur: QCamera::NoError.

Enregistreur: État: QMediaRecorder::UnavailableStatus; Statut: QMediaRecorder::StoppedState; Erreur: QMediaRecorder::NoError.

Merci d'avance pour votre temps.

Était-ce utile?

La solution

Il semble que le problème est que l'enregistrement ne fonctionne toujours pas pour windows, comme expliqué ici

Je l'ai testé sur un mac un il a bien fonctionné.Pour résoudre ce problème sur windows, j'ai utilisé la QtMEL bibliothèque.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top