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

C# 視頻監控系列(四):客戶端音頻與截圖(二)

     編輯:關於C語言

實現客戶端截圖功能:設置回調、回調中保存 BMP、立即取消回調防止重複觸發。

截圖實現


private const int T_UYVY = 1, T_YV12 = 3, T_RGB32 = 7;
private CapPicFun _capCallback; // 必須為成員變量防 GC

private void Form1_Load(object sender, EventArgs e) {
    _capCallback = new CapPicFun(OnCapPic);
}

private void btnSnapshot_Click(object sender, EventArgs e) {
    PcHikClient.MP4_ClientSetCapPicCallBack(cs, _capCallback);
}

public void OnCapPic(int handle, IntPtr pBuf, int size, int w, int h, int stamp, int type, int reserved) {
    string file = type switch {
        T_UYVY => @"c:\uyvy.bmp",
        T_YV12 => @"c:\yv12.bmp",
        T_RGB32 => @"c:\rgb32.bmp",
        _ => null
    };
    if (file != null) {
        PcHikClient.MP4_ClientSavePicFile(pBuf, size, w, h, type, file);
        // 立即取消回調
        PcHikClient.MP4_ClientSetCapPicCallBack(cs, null);
    }
}

關鍵說明

  • 委托 `_capCallback` 必須為成員變量,否則 GC 回收導致回調失效
  • SDK 文檔:回調設置後持續有效直到程序退出或設為 NULL
  • 需在已連接預覽狀態下調用,否則無效不報錯
  • 默認配置下生成 `yv12.bmp`(YV12 格式)

避坑經驗

早期用 `byte[]` 封送導致保存圖片全黑,修正為 `IntPtr` 後正常。同步更新了封裝層代碼。

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