是否可以用一个 MediaPlayer 控制多个 VideoWidget?
Is it possible to control multiple VideoWidgets with one MediaPlayer?
我想知道是否可以同时在 3 个小部件中使用 Qt5 QtMultimedia 库播放视频。
我有一个视频,我想在 3 个小部件中显示:一个显示完整视频,另一个关注视频中移动的某个对象,最后一个再次关注其他对象。
我现在一直在努力,我开始怀疑我的努力是否值得...
有没有人试过类似的东西and/or可以给我一些解决这个问题的建议?
在多个小部件中显示视频的一种方法是使用自定义视频表面 class,并使用它们为您生成一系列 QImage
,以及 process/show 这些图像你喜欢的方式。
自定义视频界面示例:
/* 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);
};
这里有一个示例项目:
截图:
希望对您有所帮助!
我想知道是否可以同时在 3 个小部件中使用 Qt5 QtMultimedia 库播放视频。
我有一个视频,我想在 3 个小部件中显示:一个显示完整视频,另一个关注视频中移动的某个对象,最后一个再次关注其他对象。
我现在一直在努力,我开始怀疑我的努力是否值得...
有没有人试过类似的东西and/or可以给我一些解决这个问题的建议?
在多个小部件中显示视频的一种方法是使用自定义视频表面 class,并使用它们为您生成一系列 QImage
,以及 process/show 这些图像你喜欢的方式。
自定义视频界面示例:
/* 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);
};
这里有一个示例项目:
截图:
希望对您有所帮助!