QT ubuntu下 多画面视频监控播放器rtsp播放器
由于是在虚拟机里面跑的 4画面的话cpu已经达到了 60-70% 左右 并且画面会丢帧,有时候会出现花屏,可能是由于再虚拟机里面跑的缘故。窗口resize的时候由于是采用了保持视频比例的方式 所以 画面之间会出现黑框。可能得 开启ffmpeg硬件加速 ,同时渲染的时候用Qopengl的方式。这次实现了多画面播放 目前调试测试的是4画面播放。采用的是ffmpeg软解QImage渲染方式。play的时
·
继前一篇文章只有一个播放画面
这次实现了多画面播放 目前调试测试的是4画面播放
由于是在虚拟机里面跑的 4画面的话cpu已经达到了 60-70% 左右 并且画面会丢帧,有时候会出现花屏,可能是由于再虚拟机里面跑的缘故
采用的是ffmpeg软解 QImage渲染方式
网上搜了下 要想降低cpu占用率
可能得 开启ffmpeg硬件加速 ,同时渲染的时候用Qopengl的方式
窗口resize的时候由于是采用了保持视频比例的方式 所以 画面之间会出现黑框
核心代码:
定义的部分都变成数组
play的时候 :原来就一个现在是多个
void MainWindow::play()
{
for(auto i = 0;i<MAX_WINDOW;i++)
{
m_decodecThread[i] = std::thread([this](int index)
{
init(index,g_RTSP_URL[index]);
decodec(index);
},i);
m_decodecThread[i].detach();
}
}
渲染的时候调整对应的坐标
void MainWindow::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setBrush(Qt::black);
painter.drawRect(0, 0, this->width(), this->height());
int appWindowWidth = this->geometry().width();
int appWindowHeight = this->geometry().height();
int button_w = ui->buttonplay->geometry().width();
int button_h = ui->buttonplay->geometry().height();
int intpu_w = ui->groupInput->geometry().width();
int input_h = ui->groupInput->geometry().height();
auto center_x = (appWindowWidth-button_w)/2;
auto center_y = (appWindowHeight-button_h-50);
ui->buttonplay->setGeometry(center_x, center_y, button_w,button_h);
center_x = (appWindowWidth-intpu_w)/2;
center_y = (appWindowHeight-input_h-120);
ui->groupInput->setGeometry(center_x, center_y, intpu_w,input_h);
if(m_run_flag == false)
{
return ;
}
for(auto i = 0;i<MAX_WINDOW;i++)
{
if (m_image[i].size().width() <= 0)
{
continue;
}
//比例缩放
QImage img = m_image[i].scaled(this->size()/2,Qt::KeepAspectRatio);
int x = this->width() - img.width();
int y = this->height() - img.height();
if(i%2 == 0)
{
x = 0;
}
else
{
x = this->width()/2;
}
if(i<MAX_WINDOW/2)
{
y = 0;
}
else
{
y = this->height()/2;
}
//x /= 2;
//y /= 2;
//QPoint(x,y)为中心绘制图像
painter.drawImage(QPoint(x,y),img);
}
}
更多推荐
已为社区贡献5条内容
所有评论(0)