【问题标题】:QT's QMediaRecorder not working - Unable to record from webcamQT 的 QMediaRecorder 不工作 - 无法从网络摄像头录制
【发布时间】:2014-07-31 14:10:39
【问题描述】:

我一直在到处寻找解决方案,我在这里看到了一些关于这个问题的线程,但没有解决方案。

我正在尝试从我计算机上的两个不同网络摄像头录制视频。我可以显示他们两个的视频,但问题是录制。当我尝试它时,没有任何反应。没有文件被保存,状态也永远不会改变。下面我附上了加载相机的代码和加载 QMediaRecorder 的代码。我也尝试了只使用其中一个相机,但它仍然无法正常工作。 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.

提前感谢您的宝贵时间。

【问题讨论】:

    标签: c++ qt video webcam video-recording


    【解决方案1】:

    似乎问题在于录制仍然无法在 Windows 上工作,正如 here 所解释的那样

    我在 mac 上测试过,效果很好。为了在 Windows 上解决这个问题,我使用了QtMEL library

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      • 2015-07-08
      • 1970-01-01
      • 2013-09-25
      • 1970-01-01
      相关资源
      最近更新 更多