視頻開發之外部音視頻輸入

視頻開發之外部音視頻輸入

外部音視頻數據輸入功能主要滿足一些特殊應用場合下的需求,通常普通用戶不會使用到,使用該功能,可以由上層應用程序輸入視頻數據、音頻數據到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目錄下。

 


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