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

C# 視訊監控系列(九):伺服器端資料捕獲——截圖與錄影實作(四)

     編輯:關於C語言

核心程式碼解析

本篇承接前文,深入剖析伺服器端錄影功能的關鍵實作細節。主要圍繞回調函數 STREAM_DIRECT_READ_CALLBACK1、狀態控制變數 CaptureState 以及檔案寫入策略展開說明。

1. 回調函數改寫來源

STREAM_DIRECT_READ_CALLBACK1 是在上一篇文章基礎上修改而來,核心邏輯參考了官方 VC++ 範例原始碼進行移植。這確保了資料流處理流程與原廠 SDK 設計保持一致。

2. 錄影狀態控制機制

CaptureState 變數作為錄影開關的核心控制標誌,在回調函數中決定是否將資料寫入檔案:

  • 0:未啟用錄影
  • 1:正在錄影

對應介面上的「開始錄影」(btnStart_Click)與「停止錄影」(btnStop_Click)兩個按鈕事件。

3. 檔案寫入模式的關鍵差異

錄影檔案操作採用兩種不同的 FileMode:

  • 開始錄影:FileMode.Create — 建立新檔案並寫入檔頭
  • 持續寫入:FileMode.Append — 追加模式寫入影格資料

此設計避免了重複開啟檔案造成的效能損耗,確保錄影流暢。

實務補充建議

單一檔案大小與磁碟空間管理

實際部署時必須考慮:

  • 單一錄影檔案大小上限(建議分段儲存,如每 1 小時或 1GB 分檔)
  • 磁碟剩餘空間監控與自動覆寫/清理策略
  • 分時段排程錄影需求(僅工作時間、偵測到動態才錄影等)

檔頭變數保存的潛在陷阱

注意 FileHeader 變數的資料型別。若採用分檔連續儲存,可能出現「第一個檔案可播放,後續檔案無法播放」的問題。嘗試將 byte[] 改為 IntPtr 保存檔頭指標,或許能解決型別封送導致的資料損壞。

官方播放器驗證錄影品質

SDK 附帶的範例播放器含原始碼,可直接將 .264 檔拖入播放驗證:

  • 正常播放 → 錄影邏輯正確
  • 報錯 → 錄影資料流有問題,需檢查檔頭、影格封裝邏輯

結語

雖然完整程式碼已提供,但整個資料流處理流程仍需深入理解。強烈建議配合 VC++ 官方範例進行斷點除錯對照,掌握回調觸發時機、影格類型判斷、檔案寫入同步等核心環節,才能靈活應對實際專案中的各種異常情況。

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