我的演示代码是从笔记本电脑的集成摄像头和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屏幕上测试了我的视频输入,效果很好。
答案 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 更多应添加功能并修复错误。
我希望这会有所帮助,即使它没有直接解决你的问题(这可能是因为很少有人拥有你所拥有的确切经验)。