Linux下Qt5: QMediaRecorder的问题,以及使用QCamera相关类进行摄像头视频采集

版本信息:

Qt 5.8.0 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 5.3.1 20160406 (Red Hat 5.3.1-6)) on "xcb"

OS: Ubuntu 16.04.5 LTS [linux version 4.15.0-55-generic]

花了两天时间,看了QT社区和国内的一些贴吧,得出一个悲伤的结论: QCamera相关类的初衷是好的,作为视频显示是真的好用,但是一旦想录制视频,就出现各种问题,至今不知道该怎么解决,请路过的大神指点一二.

1 使用QMediaRecorder类无法保存视频

代码很简单:

初始化:

camera = new QCamera(QCameraInfo::availableCameras()[1]);
    mediaRecorder = new QMediaRecorder(camera);


    mediaRecorder->setMetaData(QMediaMetaData::Title, QVariant(QLatin1String("vis_video")));
    bool ss = mediaRecorder->setOutputLocation(QDir::currentPath());
    mediaRecorder->setMuted(true);
    QVideoEncoderSettings settings = mediaRecorder->videoSettings();          

    settings.setCodec("video/x-wmv"); //这里是查看过支持的格式后设置的.
 

    mediaRecorder->setVideoSettings(settings);

    camera->setViewfinder(ui->viewfinder);
    camera->setCaptureMode(QCamera::CaptureVideo);
    camera->start();

录像:

void Widget::on_pushButton_clicked()
{

    mediaRecorder->record();
    qDebug()<<mediaRecorder->state();
}

停止:

void Widget::on_pushButton_2_clicked()
{
    mediaRecorder->stop();

    qDebug()<<mediaRecorder->outputLocation();
    qDebug()<<"结束";
}

在运行程序后,会先提示:

(untitled:12730): GLib-GObject-CRITICAL **: g_object_unref: assertion 'G_IS_OBJECT (object)' failed

然后点击录像,viewerfinder的画面会直接卡死,然后提示:

CameraBin error: "Device '/dev/video1' is busy"

CameraBin error: "Internal data flow error."

点停止后,保存的文件会在/videos文件夹里,但是只有3.9Kb.

不知道为什么,看来只能想想其他办法了.

2 使用QCameraImageCapture只适合拍照

这个是没问题的,如果想进行拍照并保存,使用这个就很方便.

将相机设置为拍摄静态图形模式:

camera->setCaptureMode(QCamera::CaptureStillImage);

imageCapture->capture(); 

这样就拍照好了,需要深入了解的看帮助文档即可.

他这个无法取消保存功能,及时是设置了imageCapture->setCaptureDestination(QCameraImageCapture::CaptureToBuffer);

图像仍然会保存在默认的路径~/Pictures文件夹下,而且速度极慢,使用20fps就会丢一半的帧,溜了溜了...

结论

就目前看的资料来讲,在linux平台上,使用Qt自带的类,无法进行视频录制,接下来会使用OpenCV实验一下.听说FFmpeg也可以,随后有时间了尝试尝试.

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值