Frage

Ich habe überall nach einer Lösung für dieses Problem gesucht und hier einige Threads zu diesem Problem gesehen, aber keine Lösung.

Ich versuche, ein Video von zwei verschiedenen Webcams aufzunehmen, die ich auf meinem Computer habe.Ich kann das Video für beide zeigen, aber das Problem liegt bei der Aufnahme.Wenn ich es versuche, passiert nichts.Es wird keine Datei gespeichert und die Zustände ändern sich auch nie.Unten habe ich den Code zum Laden der Kameras und den Code zum Laden der QMediaRecorder angehängt.Ich habe es auch nur mit einer der Kameras versucht und es funktioniert immer noch nicht.Das QT-Beispiel „Kamera“ funktioniert nicht so gut, die Option zur Aufnahme ist immer deaktiviert.

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

Wenn ich die Aufnahmetaste drücke:

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

Der Status, Status und Fehler lauten wie folgt (jedes Mal, wenn ich sie aufrufe)

Kamera:Zustand: QCamera::UnavailableStatus;Status: QCamera::ActiveState;Fehler: QCamera::NoError.

Recorder:Zustand: QMediaRecorder::UnavailableStatus;Status: QMediaRecorder::StoppedState;Fehler: QMediaRecorder::NoError.

Vielen Dank im Voraus für Ihre Zeit.

War es hilfreich?

Lösung

Das Problem scheint darin zu liegen, dass die Aufnahme unter Windows immer noch nicht funktioniert, wie erläutert Hier

Ich habe es auf einem Mac getestet und es hat gut funktioniert.Um dies unter Windows zu beheben, habe ich das verwendet QtMEL-Bibliothek.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top