我想知道是否可以同时在 3 个小部件中使用 Qt5 QtMultimedia 库播放视频。
我有一个视频,我想在 3 个小部件中显示:一个显示完整视频,另一个关注视频中移动的某个对象,最后一个再次关注其他对象。
我现在一直在挣扎,我开始怀疑我的努力是否值得......
有没有人尝试过类似的事情和/或可以给我一些关于如何解决这个问题的提示?
我想知道是否可以同时在 3 个小部件中使用 Qt5 QtMultimedia 库播放视频。
我有一个视频,我想在 3 个小部件中显示:一个显示完整视频,另一个关注视频中移动的某个对象,最后一个再次关注其他对象。
我现在一直在挣扎,我开始怀疑我的努力是否值得......
有没有人尝试过类似的事情和/或可以给我一些关于如何解决这个问题的提示?
在多个小部件中显示视频的一种方法是使用自定义 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);
};
这里有一个示例项目:
截屏:
希望有帮助!