0

我有一个从网络摄像头录制视频的程序。它在表单中显示相机视图。单击开始按钮时,它应该开始录制视频,并在按下停止按钮后停止。程序编译正常,但没有录制视频。谁能说它有什么问题?这是我的代码。

 {      
            camera = new QCamera(this);
            viewFinder = new QCameraViewfinder(this);
            camera->setViewfinder(viewFinder);
            recorder = new QMediaRecorder(camera,this);

            QBoxLayout *layout = new QVBoxLayout;
            layout->addWidget(viewFinder);
            ui->widget->setLayout(layout);

            QVideoEncoderSettings settings = recorder->videoSettings();

            settings.setResolution(640,480);
            settings.setQuality(QMultimedia::VeryHighQuality);
            settings.setFrameRate(30.0);
            //settings.setCodec("video/mp4");

            recorder->setVideoSettings(settings);
            recorder->setContainerFormat("mp4");
            camera->setCaptureMode(QCamera::CaptureVideo);
            camera->start();
       }

        void usbrecorder::on_btn_Record_clicked()
        {                
            usbrecorder::startRecording();
        }

        void usbrecorder::on_btn_Stop_clicked()
        {
            usbrecorder::stopRecording();
        }


        void usbrecorder::startRecording()
        {              

            recorder->setOutputLocation(QUrl::fromLocalFile("C:\\Users\\Stranger\\Downloads\\Video\\vidoe_001.mp4"));
            recorder->record();
        }

        void usbrecorder::stopRecording()
        {
            recorder->stop();
        }
4

3 回答 3

1

这是由于 Windows 的限制。

正如这里的 Qt 文档中所述:https ://doc.qt.io/qt-5/qtmultimedia-windows.html#limitations

目前不支持视频录制。此外,DirectShow 插件不支持任何低级视频功能,例如监视使用 QVideoProbe 或相关类播放或录制的视频帧。

于 2020-12-16T10:57:34.143 回答
0

您需要指定输出位置:

QMediaRecorder::setOutputLocation(const QUrl& location)

例如

setOutputLocation(QUrl("file:///home/user/vid.mp4"));

于 2013-11-12T10:51:55.530 回答
0

尝试打印状态、状态和错误信息:

qDebug()<<record.state();
qDebug()<<record.status();
qDebug()<<record.error();

看看它打印了什么。通过这些消息,您可以清楚地了解您的问题。也许 QMediaRecorder 无法访问您的相机。

于 2014-03-17T12:24:44.723 回答