2013-07-15 127 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