本篇承接前文,深入剖析伺服器端錄影功能的關鍵實作細節。主要圍繞回調函數 STREAM_DIRECT_READ_CALLBACK1、狀態控制變數 CaptureState 以及檔案寫入策略展開說明。
STREAM_DIRECT_READ_CALLBACK1 是在上一篇文章基礎上修改而來,核心邏輯參考了官方 VC++ 範例原始碼進行移植。這確保了資料流處理流程與原廠 SDK 設計保持一致。
CaptureState 變數作為錄影開關的核心控制標誌,在回調函數中決定是否將資料寫入檔案:
0:未啟用錄影1:正在錄影對應介面上的「開始錄影」(btnStart_Click)與「停止錄影」(btnStop_Click)兩個按鈕事件。
錄影檔案操作採用兩種不同的 FileMode:
FileMode.Create — 建立新檔案並寫入檔頭FileMode.Append — 追加模式寫入影格資料此設計避免了重複開啟檔案造成的效能損耗,確保錄影流暢。
實際部署時必須考慮:
注意 FileHeader 變數的資料型別。若採用分檔連續儲存,可能出現「第一個檔案可播放,後續檔案無法播放」的問題。嘗試將 byte[] 改為 IntPtr 保存檔頭指標,或許能解決型別封送導致的資料損壞。
SDK 附帶的範例播放器含原始碼,可直接將 .264 檔拖入播放驗證:
雖然完整程式碼已提供,但整個資料流處理流程仍需深入理解。強烈建議配合 VC++ 官方範例進行斷點除錯對照,掌握回調觸發時機、影格類型判斷、檔案寫入同步等核心環節,才能靈活應對實際專案中的各種異常情況。