使用Qt5从USB摄像头录制视频

4
我正在尝试录制一段通过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);

for

   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." 

但实际上,该视频已被录制。

听起来问题与相机的确切型号有关? - Mats Petersson
@MatsPetersson,看起来不是那个问题。我已经尝试了三个不同的相机,但仍然出现相同的错误。 - avalero
“无法协商格式”这个消息似乎表明相机不支持您所请求的格式,因此可能是相机或您所请求的格式有误。 - Mats Petersson
1个回答

3

我遇到了几乎相同的问题,无法捕获图像。我发现只有在默认分辨率640 x 480下才能正常工作。如果将分辨率设置为更高的值,则无法工作。我还尝试了两个不同的摄像头,但都没有成功,因此似乎是qt5的问题。你可以尝试不设置分辨率,然后就可以录制视频,但只能使用默认分辨率640 x 480。


谢谢!移除 setResolution() 后就可以了!虽然我一直收到 CameraBin 错误:“无法编码流”,但实际上它确实录制了视频。 - avalero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接