1、用Qlabel播放视频
从解码后的数据中提取单个视频帧,并转换为 RGB 格式以便在 QLabel
上显示。使用了 QTimer
来控制帧的播放;
在 VideoInfo
类中,QTimer
用于定时触发视频帧的解码和渲染。QTimer
的工作机制是通过设定一个时间间隔(以毫秒为单位),然后周期性地发出 timeout()
信号。在每次 timeout()
信号触发时,执行特定的槽函数来处理视频解码和帧显示。
开始和停止播放
void VideoInfo::startPlayback()
{
timer->start(1000 / 30); // 假设帧率为30帧每秒
}
void VideoInfo::stopPlayback()
{
timer->stop();
}
-
startPlayback()
: 这个函数启动计时器,并设置时间间隔为1000 / 30
毫秒(约 33.3 毫秒),对应每秒 30 帧的帧率。这种方式确保每秒调用decodeAndDisplayFrame()
函数 30 次,从而达到播放视频的效果。 -
stopPlayback()
: 这个函数停止计时器,从而停止调用decodeAndDisplayFrame()
。
解码和显示帧
void VideoInfo::decodeAndDisplayFrame()
{
QImage frameImage = getFrame();
if (