一.效果
二.實現
爲了控制視頻的顯示路數,通常需要做通道切換,這裏提供了1通道+4通道+9通道+16通道,其他通道基本上不會用到,因爲一般來說,超過9個通道實時顯示視頻流,建議採用子碼流來顯示,如果都採用主碼流,解碼壓力大,CPU和內存都喫不消。不過隨着CPU、顯卡和內存的逐步升級,顯示16個通道的實時視頻已無壓力。
在Qt中,各種通道的切換可以用QGridLayout實現。每路視頻封裝成一個widget,初始化時,創建32個視頻widget,設置每個widget的visible爲false,並添加到列表中。然後把列表中index爲0的widget添加到QGridLayout,並設置該widget的visible爲true。這樣的話界面啓動後默認顯示一路視頻。
m_gridLayout=new QGridLayout();
m_gridLayout->setSpacing(2);
for(int i=0;i<MAX_CAMERA_COUNT;i++)
{
VideoWidget *videoWidget=new VideoWidget(this);
connect(videoWidget,&VideoWidget::signalStreamStarted,this,&QHMainWidget::slotStreamStarted);
connect(videoWidget,&VideoWidget::signalStreamClosed,this,&QH