首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

基於 DirectShowLib 的 C# 視頻片段截取實現思路:SampleGrabber 與文件寫入

     編輯:程式設計綜合問答

核心過濾器圖

Source Filter (File/Device) 
    → SampleGrabber (ISampleGrabberCB::BufferCB) 
    → Null Renderer / Video Renderer

關鍵接口與步驟

  1. 插入 SampleGrabber:graphBuilder.AddFilter(sampleGrabber, "Grabber")。
  2. 設置媒體類型:sampleGrabber.SetMediaType(&VideoMediaType)(如 RGB24)。
  3. 啟用回調:sampleGrabber.SetCallback(this, 1) (1=BufferCB)。
  4. 實現 BufferCB:
    public int BufferCB(double SampleTime, IntPtr pBuffer, int BufferLen) {
        if (isRecording) {
            lock (fileStream) {
                byte[] buffer = new byte[BufferLen];
                Marshal.Copy(pBuffer, buffer, 0, BufferLen);
                fileStream.Write(buffer, 0, BufferLen); // 寫入原始數據或封裝容器
            }
        }
        return 0;
    }
    
  5. 開始/停止錄製:控制 isRecording 標誌,配合 MediaSeeking 定位起止時間。

封裝建議

原始數據需封裝為 MP4/AVI,建議使用 Media Foundation 或 FFmpeg (P/Invoke) 實現 Muxer,DirectShowLib 僅負責採樣獲取。

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