Procházet zdrojové kódy

V0.6.1
1、修复了海康播放库关闭重新打开后获取播放通道好错误的问题

Apple před 1 týdnem
rodič
revize
0ab0b20a70
4 změnil soubory, kde provedl 67 přidání a 15 odebrání
  1. 24 2
      CPlayer/cameraplayer.cpp
  2. 31 13
      show1/widget.cpp
  3. 5 0
      show1/widget.h
  4. 7 0
      show1/widget.ui

+ 24 - 2
CPlayer/cameraplayer.cpp

@@ -31,6 +31,18 @@ CameraPlayer::~CameraPlayer()
     /* 释放SDK资源,重复清除资源会怎么样 */
     NET_DVR_Cleanup();
 
+    if(m_frameTimer.isActive())
+    {
+        m_frameTimer.stop();
+    }
+
+    /* 释放播放器资源 */
+    if(m_player != nullptr)
+    {
+        delete m_player;
+        m_player = nullptr;
+    }
+
     if(m_transCode != nullptr)
     {
         delete m_transCode;
@@ -142,6 +154,14 @@ void CameraPlayer::stopRealPlay()
 {
     //关闭预览
     NET_DVR_StopRealPlay(m_realPlayHandle);
+    /* 释放播放的通道号 */
+    if(m_playPort != -1)
+    {
+        PlayM4_Stop(m_playPort);
+        PlayM4_CloseStream(m_playPort);
+        PlayM4_FreePort(m_playPort);
+        m_playPort = -1;
+    }
     LH_WRITE_LOG("实时获取数据结束");
 }
 
@@ -163,6 +183,7 @@ void CameraPlayer::startPlay()
 void CameraPlayer::setPlayWndParent(QWidget* playWnd)
 {
     m_player->setParent(playWnd);
+    m_player->show();
 }
 
 /* 设置播放窗口大小 */
@@ -177,9 +198,10 @@ void CameraPlayer::do_updateFrame()
     /* 获取一帧 */
     if(m_imageQueue.isEmpty())
     {
-        // LH_WRITE_LOG("图像环形队列为空");
+        LH_WRITE_LOG("图像环形队列为空");
         return;
     }
+    // LH_WRITE_LOG("环形队列图片个数:" + QString::number(m_imageQueue.QueueSize()));
     /* 以非阻塞的方式先获取一帧数据,获取成功后再出队 */
     auto one = m_imageQueue.front_pop_NoBlock();
     if(one != nullptr)
@@ -246,7 +268,7 @@ void CameraPlayer::realDataCallBack(LONG realHandle, DWORD dataType, BYTE *pBuff
     auto cameraPlayer = static_cast<CameraPlayer*>(user);
     LONG playPort = cameraPlayer->m_playPort;
     
-    PlayM4_GetPort(&realHandle);
+    // PlayM4_GetPort(&realHandle);
     switch (dataType)
     {
         /* 系统头数据 */

+ 31 - 13
show1/widget.cpp

@@ -14,19 +14,7 @@ widget::widget(QWidget *parent) :
 {
     ui->setupUi(this);
 
-    /* 创建摄像机播放器 */
-    m_cameraPlayer = new CameraPlayer;
-
-    QString imagePath = QApplication::applicationDirPath() + "/0.jpg";
-    QImage image(imagePath);
-    m_cameraPlayer->setImage(image);
-
-    m_cameraPlayer->initCamera("192.1.2.73", 8000, "admin", "LH123456");
-    m_cameraPlayer->startRealPlay(1);
-
-    /* 设置播放窗口 */
-    m_cameraPlayer->setPlayWndParent(ui->widget_display);
-    m_cameraPlayer->setPlayWndSize(1280, 720);
+    initCameraPlayer();
 }
 
 widget::~widget()
@@ -40,6 +28,19 @@ widget::~widget()
 void widget::on_pBtn_startRealPlay_clicked()
 {
     m_cameraPlayer->startPlay();
+    
+}
+
+/* 重新创建窗口 */
+void widget::on_pBtn_reCreate_clicked()
+{
+    if(m_cameraPlayer != nullptr)
+    {
+        delete m_cameraPlayer;
+        m_cameraPlayer = nullptr;
+    }
+
+    initCameraPlayer();
 }
 
 /* 窗口缩放事件 */
@@ -52,3 +53,20 @@ void widget::resizeEvent(QResizeEvent *event)
     ui->widget_display->resize(size);
     m_cameraPlayer->setPlayWndSize(event->size());
 }
+
+void widget::initCameraPlayer()
+{
+    /* 创建摄像机播放器 */
+    m_cameraPlayer = new CameraPlayer;
+
+    QString imagePath = QApplication::applicationDirPath() + "/0.jpg";
+    QImage image(imagePath);
+    m_cameraPlayer->setImage(image);
+
+    m_cameraPlayer->initCamera("192.1.2.73", 8000, "admin", "LH123456");
+    m_cameraPlayer->startRealPlay(1);
+
+    /* 设置播放窗口 */
+    m_cameraPlayer->setPlayWndParent(ui->widget_display);
+    m_cameraPlayer->setPlayWndSize(ui->widget_display->size());
+}

+ 5 - 0
show1/widget.h

@@ -20,10 +20,15 @@ public:
 private slots:
     /* 开启预览按钮 */
     void on_pBtn_startRealPlay_clicked();
+    /* 重新创建窗口 */
+    void on_pBtn_reCreate_clicked();
 
 protected:
     /* 窗口缩放事件 */
     void resizeEvent(QResizeEvent *event) override;
+
+private:
+    void initCameraPlayer();
     
 private:
     Ui::widget *ui;

+ 7 - 0
show1/widget.ui

@@ -69,6 +69,13 @@
         </property>
        </widget>
       </item>
+      <item>
+       <widget class="QPushButton" name="pBtn_reCreate">
+        <property name="text">
+         <string>删除重新创建窗口</string>
+        </property>
+       </widget>
+      </item>
       <item>
        <spacer name="horizontalSpacer">
         <property name="orientation">