開放視頻編碼(H.264)編解碼數據輸入、輸出接口

AnyChat是一套開放的音視頻即時通信解決方案,早期的版本已經開放了原始數據的輸入、輸出接口:
1、通過客戶端回調函數可以輸出用戶原始的視頻採樣幀數據(YUV、RGB):視頻數據回調函數
2、通過外部數據輸入接口可以支持將外部的視頻幀傳給AnyChat進行編碼:如何使用外部音視頻數據輸入功能?

對於某些特定的場合,上層應用希望獲取AnyChat內核原始的H.264編碼數據,或是希望將H.264編碼之後的數據傳輸給AnyChat,自AnyChat r4268版本開始提供了支持,該特性將給AnyChat帶來更大的靈活性、可擴展性,包括:
1、有助於AnyChat與其它平臺互聯互通時進行數據交換,實現與其它平臺的對接,如SIP通信終端;
2、通過編寫接入網頁,可以實現監控攝像頭、視頻點播平臺等數據的接入;

新版本增加常量定義:BRAC_PIX_FMT_H264,API接口沒有改變。
1、當需要通過回調函數獲取用戶的H.264編碼數據時,可以在設置回調函數時傳入常量,如:
  1. // 設置回調函數

  2. BRAC_SetVideoDataExCallBack(BRAC_PIX_FMT_H264, OnVideoDataExCallBack, this);


  3. // 回調函數實現

  4. void CALLBACK OnVideoDataExCallBack(DWORD dwUserid, LPVOID lpBuf, DWORD dwLen, BITMAPINFOHEADER bmiHeader, DWORD dwTimeStamp, LPVOID lpUserValue)

  5. {


  6. }


複製代碼


2、當希望將編碼後的H.264數據傳入AnyChat時,可以通過外部數據輸入接口來實現,如:
  1. // 初始化

  2. BRAC_SetInputVideoFormat(BRAC_PIX_FMT_H264, 320, 240, 25, 0);

  3. // 傳入數據

  4. BRAC_InputVideoData(lpH264Frame, dwSize, dwTimeStamp);

複製代碼


相關說明:
1、輸入、輸出的H.264編碼幀數據均爲NAL單元,包含幀起始標誌:00 00 00 01 ,且每次輸入、輸出爲一個NAL單元;
2、關鍵幀需要包含序列參數集(SPS:Sequence parameter set)和圖像參數集(PPS:Picture parameter set);
3、時間戳爲毫秒值,兩個時間戳之差表示兩個幀的時間間隔(單位:毫秒)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章