4

USB デバイスに接続された Web カメラから取得したビデオを録画しようとしています。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);

エラーは出力されず、ファイルは生成されますが、1 つのフレームしか含まれていません (固定画像)。

このコードを削除すると:

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

2 つの異なるエラーが発生します。

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

しかし、実際にはビデオが記録されています。

4

1 に答える 1