標籤:http 使用 io 資料 for art ar cti
視頻開發之外部音視頻輸入
外部音視頻資料輸入功能主要滿足一些特殊應用場合下的需求,通常普通使用者不會使用到,使用該功能,可以由上層應用程式輸入視頻資料、音頻資料到AnyChat,然後AnyChat再對這些資料進行編碼、傳輸,即使用上層應用的資料做為資料來源,而不使用AnyChat從本地音效卡、網路攝影機採集的音視頻資料。
通過外部音視頻資料輸入功能,可以讓AnyChat用戶端的音視頻資料來源更加廣泛,預設情況下,AnyChat都是對本地的音效卡、網路攝影機進行採集,把採集後的音頻、視頻資料再進行編碼、傳輸,而如果視頻資料並不是從標準的音視頻硬體裝置採集,則預設的採集功能將不能滿足要求。
如果上層應用希望對音視頻資料進行一系列的處理,然後將處理後的資料在遠程顯示出來,則就必須使用外部音視頻資料輸入功能。
使用外部音視頻資料輸入功能通常需要徵詢如下的流程:
1、啟動外部音頻、視頻輸入模式,SDK初始化成功之後、進入房間之前調用:
1.// 設定外部音頻、視頻輸入模式
2.BOOL bExtVideoInput = 1;
3.BRAC_SetSDKOption(BRAC_SO_CORESDK_EXTVIDEOINPUT, (CHAR*)&bExtVideoInput, sizeof(DWORD));
4.BOOL bExtAudioInput = 1;
5.BRAC_SetSDKOption(BRAC_SO_CORESDK_EXTAUDIOINPUT, (CHAR*)&bExtAudioInput, sizeof(DWORD));
2、在進入房間成功之後,設定外部輸入的音頻、視頻資料格式,只需要調用一次即可:
1.// 設定輸入視頻格式
2.BRAC_SetInputVideoFormat(BRAC_PIX_FMT_RGB24, 320, 240, 25, 0);
3.// 設定輸入音頻格式
4.BRAC_SetInputAudioFormat(1, 16000, 16, 0);
3、在進入房間,且設定了外部輸入資料的格式之後,上層應用準備好音頻、視頻資料時,將資料輸入
1.// 輸入視訊框架資料,每次為1幀
2.BRAC_InputVideoData(m_lpVideoBuf, dwImageSize, 0);
3.
4.// 輸入音頻採樣資料,每次為100ms
5.BRAC_InputAudioData(lpSamples, dwSize, 0);
備忘:
a)音頻、視頻可分開,即只開啟外部視頻資料輸入功能,而音頻資料還是採用AnyChat預設從音效卡採集,這樣也是可以的;
b)設定的視訊框架率僅為核心編碼參考,傳輸時的幀率以實際輸入的幀率為準,如設定為25fps,而實際每秒只調用了1次BRAC_InputVideoData,則核心編碼和網路傳輸也只會每秒處理1次;
c)如果開啟了外部音視頻資料輸入功能,則進入房間成功之後,不需要開啟本地的音頻、視頻裝置。
d)AnyChat採用時間戳記進行音視頻的同步,上層應用可以指定時間戳記,也可以不指定時間戳記,AnyChat核心會自動採用目前時間戳,時間戳記為毫秒間隔,可以使用視頻資料擴充回呼函數、音頻資料擴充回呼函數將音視頻資料對應的時間戳記回調給上層應用,當由上層應用自己處理音視頻同步時非常必要。
e)可參考範例程式碼,位於SDK包的:src\client\c++\AnyChatInputVideo目錄下。