一、前言
使用qmediaplayer来打开视频并播放,默认首选会采用QVideoWidget控件来展示,优点是不用自己来绘制,一切交给了QVideoWidget控件,这样可以做到极低的CPU占用,缺点也明显,就是无法拿到每一帧的图片,很多时候我们还需要主动拿到每一帧的图片来运算做人工智能,通过不断的截图虽然也能拿到图片,但是看起来就是很幼稚的做法,从源头拿到图片数据才是王道,所以必须用到AbstractVideoSurface,QVideoWidget本身也是继承自AbstractVideoSurface,在里面的函数会收到每一张解码后的图片数据,自行取出来即可。这个类在Qt6中取消了,因为提供了videoFrameChanged信号,直接关联信号处理即可,connect(videoWidget->videoSink(), SIGNAL(videoFrameChanged(QVideoFrame)), this, SLOT(videoFrameChanged(QVideoFrame)));QVideoFrame带了toImage方法。
二、效果图
三、体验地址
- 国内站点:https://gitee.com/feiyangqingyun
- 国际站点:https://github.com/feiyangq