音視頻底層、即時通訊技術、音視頻交互、跨平臺基礎

在很多即時通訊應用中,會根據應用場景的不同,需要對音頻輸入源進行選擇,不同的應用場景對應不同的音頻工作模式。需要支持多種音頻工作(採集)模式,包括:
    1、發言模式(默認):自動選擇麥克風爲音頻輸入源設備,用戶說話的聲音被麥克風採集,啓動音頻特效處理(包括:迴音消除、靜音檢測、噪音抑制、自動增溢),該模式通常應用於互動交流,用戶發言討論等場合;
    2、放歌模式:自動選擇立體聲混音輸入源設備,本地計算機所播放的聲音被採集,同時SDK內部會自動屏蔽其它用戶的聲音(如果不屏蔽,則用戶的聲音會被採集下來,並回傳給用戶,用戶那邊將會聽到迴音),SDK內部會自動關閉音頻特效處理,該模式通常應用於向其他用戶放歌,而不用關心其他用戶發言的場合;
    3、卡拉OK模式:自動選擇立體聲混音和麥克風兩個輸入源設備(該特性與硬件相關,有些聲卡不支持同時採集麥克風和立體聲混音),本地計算機所播放的聲音和用戶說話的聲音將會被採集,同時SDK內部會自動屏蔽其它用戶的聲音,SDK內部會自動關閉音頻特效處理,該模式通常應用於向其他用戶放歌,同時自己用麥克風伴唱,而不用關心其它用戶發言的場合;
    4、線路輸入模式:自動選擇線路輸入源設備,通過線路輸入的聲音將被採集(通常是指將外部的DVDVDTV等設備的音頻輸出端子接入聲卡的LineIn口的應用),SDK內部會自動關閉音頻特效處理,該模式通常應用於向其他用戶播放外部設備的聲音,而不需要自己講話的場合,如向房間的所有用戶直播電視信號時,可將電視的視頻輸出接入專用的視頻採集卡,而將電視的聲音輸出接入聲卡的LineIn接口,並選擇線路輸入模式,那麼當前房間內的其它用戶就可以收看到實時的電視畫面與聲音了。

    
典型修改音頻工作模式的代碼如下:

1.DWORD dwAudioMode = 1;    // 修改爲放歌模式

2.BRAC_SetSDKOption(BRAC_SO_AUDIO_CPATUREMODE,(PCHAR)&dwAudioMode,sizeof(dwAudioMode));
    初始化自動啓動發言模式,如需要切換到其它的工作模式,需要通過相應的接口設置,在 初始化成功後,可動態切換,由於切換過程中,內部會自動選擇對應的源設備,故切換後,上層應用需要更新當前的音頻採集設備,以及對應的音頻特效狀態等標誌。
    
根據模式的不同和網絡狀態的不同,動態調節播放緩衝區的大小,從而來控制播放延遲,如發言模式下,當網絡條件好的情況下,平均延遲<300ms,當網絡條件不好的情況下,平均延遲<800ms;而放歌模式等其它非發言模式,延遲將會隨網絡狀態的變化而變化。總的來說,發言模式延遲小,保障實時性,非發言模式,如放歌模式,則延遲會稍大,保障流產性。
    
自動記錄最後一次上層應用所選擇的工作模式,下次重新運行後,會自動啓用前次記錄的工作模式,如果不期望SDK記錄前次工作模式,則可通過關閉的配置文件來實現。

    
視頻質量主要是通過服務器的配置文件來控制,該配置是整個系統所有房間的默認配置,早期的版本無法實現由上層應用來控制不同的用戶採用不同的視頻質量參數,本地視頻質量控制接口,可以由上層應用控制本地視頻的編碼質量,爲某些特定的應用提供了基礎,例如:可以實現主持人發言時採用高質量的視頻參數,而普通用戶採集一般的視頻參數,從而達到發言者的視頻效果優於普通用戶的特定效果。(如果採集的視頻信號有橫條干擾)
    
本地視頻質量控制接口可以調節的參數包括視頻幀率視頻碼率視頻質量關鍵幀間隔以及預設參數的控制,參數定義如下:
    01.
///< 本地視頻編碼碼率設置(參數爲int型,同服務器配置:VideoBitrate

02.#define BRAC_SO_LOCALVIDEO_BITRATECTRL      30

03.///< 本地視頻編碼質量因子控制(參數爲int型,同服務器配置:VideoQuality

04.#define BRAC_SO_LOCALVIDEO_QUALITYCTRL      31

05.///< 本地視頻編碼關鍵幀間隔控制(參數爲int型,同服務器配置:VideoGOPSize

06.#define BRAC_SO_LOCALVIDEO_GOPCTRL          32

07.///< 本地視頻編碼幀率控制(參數爲int型,同服務器配置:VideoFps 

08.#define BRAC_SO_LOCALVIDEO_FPSCTRL          33

09.///< 本地視頻編碼預設參數控制(參數爲int型,1-5

10.#define BRAC_SO_LOCALVIDEO_PRESETCTRL       34

    其中視頻質量控制有兩種模式平均碼率模式(默認設置)和質量因子模式,當設置的碼率大於0時,啓動平均碼率模式,當設置的碼率爲0時,啓動質量因子模式
典型的設置平均碼率模式參數代碼如下:
01.
DWORD dwValue = 0;

02.// 設置本地視頻編碼的碼率

03.dwValue = 60 * 1000;    // 60 kbps

04.BRAC_SetSDKOption(BRAC_SO_LOCALVIDEO_BITRATECTRL,(const char*)&dwValue,sizeof(DWORD));

05.// 設置本地視頻編碼的關鍵幀間隔

06.dwValue = 20;

07.BRAC_SetSDKOption(BRAC_SO_LOCALVIDEO_GOPCTRL,(const char*)&dwValue,sizeof(DWORD));

08.// 設置本地視頻編碼的幀率

09.dwValue = 8;

10.BRAC_SetSDKOption(BRAC_SO_LOCALVIDEO_FPSCTRL,(const char*)&dwValue,sizeof(DWORD));

11.// 設置本地視頻編碼的預設參數

12.dwValue = 3;

13.BRAC_SetSDKOption(BRAC_SO_LOCALVIDEO_PRESETCTRL,(const char*)&dwValue,sizeof(DWORD));

14.// 使參數設置生效

15.BOOL bUseAppParam = TRUE;

16.BRAC_SetSDKOption(BRAC_SO_LOCALVIDEO_APPLYPARAM,(const char*)&bUseAppParam,sizeof(DWORD));

    典型的設置質量因子模式參數代碼如下:

01.
DWORD dwValue = 0;

02.// 設置本地視頻編碼的碼率

03.dwValue = 0;

04.BRAC_SetSDKOption(BRAC_SO_LOCALVIDEO_BITRATECTRL,(const char*)&dwValue,sizeof(DWORD));

05.// 設置本地視頻編碼的質量因子

06.dwValue = 4;

07.BRAC_SetSDKOption(BRAC_SO_LOCALVIDEO_QUALITYCTRL,(const char*)&dwValue,sizeof(DWORD));

08.// 設置本地視頻編碼的關鍵幀間隔

09.dwValue = 20;

10.BRAC_SetSDKOption(BRAC_SO_LOCALVIDEO_GOPCTRL,(const char*)&dwValue,sizeof(DWORD));

11.// 設置本地視頻編碼的幀率

12.dwValue = 8;

13.BRAC_SetSDKOption(BRAC_SO_LOCALVIDEO_FPSCTRL,(const char*)&dwValue,sizeof(DWORD));

14.// 設置本地視頻編碼的預設參數

15.dwValue = 3;

16.BRAC_SetSDKOption(BRAC_SO_LOCALVIDEO_PRESETCTRL,(const char*)&dwValue,sizeof(DWORD));

17.// 使參數設置生效

18.BOOL bUseAppParam = TRUE;

19.BRAC_SetSDKOption(BRAC_SO_LOCALVIDEO_APPLYPARAM,(const char*)&bUseAppParam,sizeof(DWORD));

    當啓動平均碼率模式時,質量因子的參數設置仍然有效,只是系統會限制輸出的最高碼率。另外要使設置的參數生效,需要調用“BRAC_SetSDKOption”接口並使用BRAC_SO_LOCALVIDEO_APPLYPARAM”標誌啓用所設置的參數,同時也可利用該標誌恢復服務器配置的默認視頻質量參數。
更多的關於視頻質量參數可以到www.anychat.cn
關於視頻幀率關鍵幀間隔的參數設置可參考如下原則:

1
、幀率越高,視頻越流暢(最大值爲25fps),同時幀率也會對碼率和CPU資源佔用產生一定的影響,通常的建議是互聯網應用(8-12fps),局域網應用(18-25fps);

2
、關鍵幀間隔是指在編碼的過程中,兩個關鍵幀之間非關鍵幀的數量,值越大,碼率越小,但會降低視頻的質量,值越小,碼率越大,視頻質量較好,但不宜過小,通常的建議是互聯網應用(幀率的34倍),局域網應用(等於幀率),不要小於幀率;

關於本地視頻編碼的預設參數BRAC_SO_LOCALVIDEO_PRESETCTRL,其取值範圍爲1-5,主要用來控制CPU資源佔用率和畫面細節,值越小,編碼時的CPU佔用率越低,但會損失對畫面細節的處理;值越大,編碼時的CPU佔用率越高,但對畫面細節的處理會更細膩,該參數主要針對高碼率有效,低碼率時由於碼率的限制,視頻畫面細節無法表現出來,所以低碼率模式下,可以將該參數調節低一些,以降低CPU的利用率。

關於本地視頻編碼的碼率參數BRAC_SO_LOCALVIDEO_BITRATECTRL,單位爲bps,碼率越小,視頻質量越差;碼率越高,視頻質量越好,同時該參數還與視頻畫面的分辯率有關,不同的分辨率有不同的取值範圍,如在互聯網應用狀態下,分辯率是176x144典型的取值範圍是(10kbps ~ 60kbps),分辨率是320x240典型的取值範圍是50kbps ~ 120kbps,如果是局域網應用,則碼率可適當提高。

關於本地視頻編碼的質量因子參數BRAC_SO_LOCALVIDEO_QUALITYCTRL,取值範圍爲1-6,值越小,畫面質量越低,輸出碼率也越低,值越大,畫面質量越高,輸出碼率也越高。

關於平均碼率模式”和質量因子模式”兩種視頻質量控制模式的區別和應用,可參考如下原則:

1
平均碼率模式:視頻編碼時以輸出碼率爲優先考慮條件,當畫面靜止時,輸出的碼率較低,動態畫面碼率會較高,瞬時碼率可能會超過設置的參數(最高不會超過10%),但是其輸出的視頻數據平均碼率將會維持在設置的參數附近,當畫面運動量過大時,編碼器爲了維持平均碼率,將會損失畫面的質量,通常互聯網應用可採用該模式;

2
質量因子模式:當碼率參數設置爲0時,該模式生效,視頻編碼時以視頻質量爲優先考慮條件,靜止的畫面和動態畫面將會用不同的量化因子進行編碼,維持在一個固定的畫面質量下,當畫面靜止時,碼率較低,當畫面運動時,碼率較高,通常局域網應用可採用該模式。由於該模式下沒有限制碼率,所以大運動量畫面時,爲了保持固定的畫面質量,碼率的變化將會比較大,所以該模式不適合於互聯網應用。

3
、如果希望在互聯網的環境下獲得較高質量的視頻效果(在網絡帶寬許可的情況下),建議採用平均碼率模式,只是可以適當提高視頻質量參數(VideoQuality)的值,視頻碼率參數根據需要進行設置。低碼率,配置較低的視頻質量,高碼率就需要配置較高的視頻質量。


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