2013-07-15 73 views
4

我想录制从网络摄像头获取的视频连接到USB设备。我在Linux 64位Qt5.1.0中工作。使用Qt5从USB摄像头录制视频

我有以下代码:

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::CaptureViewFinder); 

无错误是输出,生成文件,但它仅包含一个帧(固定图像)

如果我行

camera->setCaptureMode(QCamera::CaptureVideo); 

除去这一段代码:

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

但实际上录制的视频。

+0

默认分辨率听起来就像是问题是关系到相机的具体型号? –

+0

@MatsPetersson似乎并不是那样的。我尝试过使用三种不同的相机,但我仍然收到相同的错误 – user2582879

+0

消息“无法协商格式”似乎表示相机不支持您要求的格式,因此无论是相机还是格式是要求这是错误的。 –

回答

3

我有几乎相同的问题,捕捉图像。我发现它只能使用默认分辨率640 x 480.如果将分辨率设置为较高值,则不起作用。我也尝试过使用两种不同的相机,但没有成功,所以它似乎是一个qt5问题。你可以尝试不设置的分辨率,那么你应该能够录制视频,但只有640×480

+0

谢谢!,删除setResolution()的作品!虽然我不断收到CameraBin错误:**“无法编码流。” **虽然它实际上记录了视频 – user2582879