使用Qt5从USB Cam录制视频

时间:2013-07-15 09:19:59

标签: c++ qt5

我正在尝试录制从网络摄像头连接到USB设备的视频。我正在使用Linux 64位的Qt5.1.0。

我有以下代码:

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

QVideoEncoderSettings settings = recorder->videoSettings();
settings.setResolution(1280,720);
settings.setQuality(QMultimedia::VeryHighQuality);
settings.setFrameRate(30.0);

recorder->setVideoSettings(settings);
camera->setCaptureMode(QCamera::CaptureVideo);
camera->start();

QString name = filename + QDateTime::currentDateTime().toString("dd.MM.yy-h-m-s");
recorder->setOutputLocation(QUrl::fromLocalFile(outputpath + "/" + name + ".mp4"));
recorder->record();

当我运行此代码时,我收到以下警告和错误

CameraBin error: "Internal data flow error."

CameraBin error: "Could not negotiate format"

事实上没有任何记录。

如果我改变了行

   camera->setCaptureMode(QCamera::CaptureVideo);

   camera->setCaptureMode(QCamera::CaptureViewFinder);

不输出错误,生成文件,但只包含一帧(固定图像)

如果我删除这段代码:

QVideoEncoderSettings settings = recorder->videoSettings();
settings.setResolution(1280,720);
settings.setQuality(QMultimedia::VeryHighQuality);
settings.setFrameRate(30.0);

我得到两个不同的错误:

CameraBin warning: "A lot of buffers are being dropped." 
CameraBin error: "Could not encode stream." 

但视频实际上是录制的。

1 个答案:

答案 0 :(得分:3)

我遇到几乎相同的问题,捕获图像。我发现它只能使用默认分辨率640 x 480.如果将分辨率设置为更高的值,它将无效。我也试过2个不同的相机没有成功,所以它似乎是一个qt5问题。您可以尝试不设置分辨率,然后您应该能够录制视频,但只能使用640 x 480的默认分辨率。