【问题标题】:Replace QCameraViewfinder with QVideoWidget in Qt 6在 Qt 6 中用 QVideoWidget 替换 QCameraViewfinder
【发布时间】:2021-12-11 16:42:32
【问题描述】:

我正在尝试将一些代码移植到 Qt 6 的重新设计的 QtMultimedia 框架中,并遇到了很多 API 消失的问题。

其中之一是 QCameraViewfinder,据我了解,它是当前 QCamera 图像馈送的简单查看器。 它曾经是 QVideoWidget 的子类,现在仍然存在,它的文档说明了以下内容:

将 QVideoWidget 附加到 QMediaPlayer 或 QCamera 允许它显示该对象的视频或图像输出。

player = new QMediaPlayer;
player->setSource(QUrl("http://example.com/myclip1.mp4"));

videoWidget = new QVideoWidget;
player->setVideoOutput(videoWidget);

videoWidget->show();
player->play();

注意:一次只能将一个显示输出附加到媒体对象。

问题是,没有办法做 QCamera::setVideoOutput(QVideoWidget*) 因为那个函数不存在。 我也找不到连接两者的替代 API。 这是他们忘记提供的东西还是我错过了什么? 我查看了相关类的源代码和文档,但终其一生都找不到能够让我简单了解 QCamera 的当前视频源的魔法咒语。

【问题讨论】:

    标签: qt qtmultimedia qt6 qcamera


    【解决方案1】:

    你必须使用QMediaCaptureSession:

    #include <QApplication>
    #include <QCamera>
    #include <QMediaDevices>
    #include <QMediaCaptureSession>
    #include <QVideoWidget>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
    
        QVideoWidget videoWidget;
        videoWidget.resize(640, 480);
        videoWidget.show();
    
        QCamera camera(QMediaDevices::defaultVideoInput());
        camera.start();
    
        QMediaCaptureSession mediaCaptureSession;
        mediaCaptureSession.setCamera(&camera);
        mediaCaptureSession.setVideoOutput(&videoWidget);
    
        return a.exec();
    }
    

    【讨论】:

      猜你喜欢
      • 2018-04-25
      • 2016-04-26
      • 2012-09-09
      • 1970-01-01
      • 2021-10-16
      • 2021-08-02
      • 1970-01-01
      相关资源
      最近更新 更多