0

我想知道是否可以同时在 3 个小部件中使用 Qt5 QtMultimedia 库播放视频。

我有一个视频,我想在 3 个小部件中显示:一个显示完整视频,另一个关注视频中移动的某个对象,最后一个再次关注其他对象。

我现在一直在挣扎,我开始怀疑我的努力是否值得......

有没有人尝试过类似的事情和/或可以给我一些关于如何解决这个问题的提示?

4

1 回答 1

1

在多个小部件中显示视频的一种方法是使用自定义 Video Surface 类,并使用它们为您生成一系列QImage,并以您喜欢的方式处理/显示这些图像。

自定义视频表面示例:

/* Here is our custom video surface, */
class VideoSurface : public QAbstractVideoSurface
{
    Q_OBJECT
public:
    VideoSurface(QObject *parent = 0) : QAbstractVideoSurface(parent)
    {
    }

    QList<QVideoFrame::PixelFormat>
    supportedPixelFormats(QAbstractVideoBuffer::HandleType) const
    {
        return QList<QVideoFrame::PixelFormat>() << QVideoFrame::Format_RGB32;
    }

    /* this will get the QVideoFrame and convert to QImage. */
    bool present(const QVideoFrame& frame)
    {
        if (frame.isValid())
        {
            QVideoFrame cloneFrame(frame);
            cloneFrame.map(QAbstractVideoBuffer::ReadOnly);
            const QImage img = QImage(cloneFrame.bits(),
                                      cloneFrame.width(),
                                      cloneFrame.height(),
                                      QVideoFrame::imageFormatFromPixelFormat(cloneFrame.pixelFormat()));

            cloneFrame.unmap();

            emit readyRead(img);

            return true;
        }
        return false;
    }

signals:
    void readyRead(QImage);
};

这里有一个示例项目:

双景项目

截屏:

双人房

希望有帮助!

于 2015-02-14T08:41:27.687 回答