Qt 5带USB视频采集卡

时间:2015-10-24 02:40:49

标签: qt camera usb

我的演示代码是从笔记本电脑的集成摄像头和USB视频采集卡(STK1160)中选择摄像头。我的代码已附上。

main.cpp中:

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

mainwindow.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QCamera>
#include <QCameraInfo>
#include <QCameraImageCapture>

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow {

    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    QList <QCameraInfo> camList;
    QCamera *camera;

private slots:
    void onCameraChanged(int);
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent), ui(new Ui::MainWindow) {
    ui->setupUi(this);

    camera = NULL;
    connect(ui->cameraComboBox,static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),this,
            &MainWindow::onCameraChanged);

    // find all available cameras and put them in the combo box
    camList = QCameraInfo::availableCameras();
    for(QList <QCameraInfo>::iterator it = camList.begin();it!=camList.end();++it) {
        ui->cameraComboBox->addItem(it->description());
    }
}

MainWindow::~MainWindow() {
    delete ui;
}

void MainWindow::onCameraChanged(int idx) {
    if(camera != NULL) {
        camera->stop();
    }
    camera = new QCamera(camList.at(idx),this);
    camera->setViewfinder(ui->viewfinder);
    camera->setCaptureMode(QCamera::CaptureStillImage);
    camera->start();
}

我的问题是,当我从组合框中选择USB抓取器时,我收到以下错误消息:

libv4l2: error turning on stream: Message too long
CameraBin error: "Error starting streaming on device '/dev/video1'."
CameraBin error: "Could not negotiate format"

,相机视图全黑。任何人有任何想法?我已经在AV屏幕上测试了我的视频输入,效果很好。

1 个答案:

答案 0 :(得分:0)

我没有一个非常具体的答案,但更普遍的一个关于相机&amp; Qt5 中的媒体API。根据我的经验,某些功能仅适用于某些平台,而其他功能适用于其他平台。例如,即使在 Android 上工作正常,我目前也在努力让QVideoProbe使用 Ubuntu

最近,Qt开发人员的开发重点似乎是移动平台的80%。同样在Linux平台上,视频的“后端”为gstreamer,这意味着大多数错误都来自那里。我最好的建议是升级到Qt 5.6,它依赖于gstreamer1.0而不是古老的gstreamer0.1。另外,请确保为您的平台安装所有gstreamer插件等,因为这可能会对媒体的工作效果产生重大影响。

此外,如果您可以直接在gstreamer中重现错误,您可以在那里找到它的修复程序,然后此修复程序也可以从Qt获得。例如,如果您缺少编解码器或驱动程序,使用gstreamer tools添加所需的支持可能会解决问题

我发现Qt中的媒体API是可靠的,我知道正在不断努力填补每个平台媒体后端的批量功能,因此每次更新 Qt 更多应添加功能并修复错误。

我希望这会有所帮助,即使它没有直接解决你的问题(这可能是因为很少有人拥有你所拥有的确切经验)。