首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 視訊監控系列(十三):H.264 播放器——播放控制與截圖(二)

     編輯:關於C語言

1.1 暫停/播放/停止

C# 完整實作

// 是否處於暫停狀態
private bool isPause = false;

/// 
/// 播放按鈕:從暫停繼續 或 開啟新檔播放
/// 
private void btnPlay_Click(object sender, EventArgs e)
{
    if (!string.IsNullOrEmpty(m_strPlayFileName))
    {
        if (isPause)
        {
            // 從暫停恢復播放
            HikPlayer.Hik_PlayM4_Pause(PORT, false);
            isPause = false;
        }
        else
        {
            // 開啟新檔播放
            OpenFile();
        }
    }
}

/// 
/// 暫停按鈕
/// 
private void btnPause_Click(object sender, EventArgs e)
{
    HikPlayer.Hik_PlayM4_Pause(PORT, true);
    isPause = true;
}

/// 
/// 停止按鈕:完整釋放資源
/// 
private void btnStop_Click(object sender, EventArgs e)
{
    HikPlayer.Hik_PlayM4_Stop(PORT);
    HikPlayer.Hik_PlayM4_CloseFile(PORT);
    HikPlayer.Hik_PlayM4_RealeseDDraw(); // 釋放 DirectDraw 資源
    
    // 重繪畫面區域清除殘影
    pVideo.Invalidate(true);
}

對應 VC++ 邏輯重點差異

VC++ 邏輯C# 簡化處理說明
m_bPlaying/m_bPause 雙旗標單一 isPause狀態機簡化,實際專案建議完整狀態機
Hik_PlayM4_Pause(PORT, bPause) 第二參數 BOOLHik_PlayM4_Pause(PORT, true/false)C# bool 直接對應
停止時處理轉檔資源 (outFile, yuvBuf)略過非核心播放功能,專案若需轉檔再補充
KillTimer(PLAY_TIMER) 統計計時器略過WinForms 可用 Timer 元件替代

Hik_PlayM4_Pause 參數細節

  • 第二參數:true = 暫停,false = 恢復播放
  • 暫停狀態下畫面定格在當前幀,音訊靜音
  • 恢復播放時從暫停位置繼續,不會跳幀

停止播放的資源釋放順序

  1. Stop(PORT) — 停止解碼播放執行緒
  2. CloseFile(PORT) — 關閉檔案控制碼、釋放檔案緩衝區
  3. RealeseDDraw() — 釋放 DirectDraw 繪圖表面與裝置
  4. Invalidate(true) — 觸發 UI 重繪清除殘留畫面

順序不可顛倒,否則可能導致記憶體洩漏或下次開啟檔案失敗。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved