音視頻開發(Anychat如何改善音視頻通話過程中的用戶體驗)

 
下載後,首先將其解壓到一個臨時文件夾中,然後開始後續工作。

 

一、選擇播放模式


視頻通話過程中出現馬賽克或是視頻短暫卡住不動等,通常是由於網絡不穩定,如丟包、抖動等造成的。

 

AnyChat內核加入了丟包重傳、抖動優化等措施,可以避免由於網絡偶爾變差而對音視頻通話效果的影響,但是當網絡帶寬不足,或是網絡狀態持續惡化時,AnyChat內核的優化措施不足以應對惡劣的客觀條件時將會出現馬賽克現象。

 

AnyChat內核提供了一個API接口,可以讓上層根據自身的應用來決定選擇何種處理方案:

方案一:打開平滑播放模式,該模式下,出現丟包時,繼續播放,保持播放的流暢性,但是界面會出現馬賽克,當收到下一個視頻關鍵幀時馬賽克消失;

方案二【默認】:關閉平滑播放模式,該模式下,出現丟包時,暫停播放,等下一個視頻關鍵幀到來時再繼續播放,界面不會出現馬賽克,但是會“卡”一下,“卡”的程度與網絡狀況相關;

 

處理視頻馬賽克API接口定義:

///< 平滑播放模式(參數爲int型,0 關閉[默認], 1 打開)

#define BRAC_SO_STREAM_SMOOTHPLAYMODE61

 

C++調用示例代碼(初始化SDK完成之後調用)

// 關閉平滑播放模式,可防止馬賽克出現
DWORD bSmoothPlayMode = 0;
BRAC_SetSDKOption(BRAC_SO_STREAM_SMOOTHPLAYMODE,(const char*)&bSmoothPlayMode, sizeof(DWORD));

// 打開平滑播放模式,可防止視頻被卡住,但是會馬賽克

DWORD bSmoothPlayMode = 1;

BRAC_SetSDKOption(BRAC_SO_STREAM_SMOOTHPLAYMODE,(const char*)&bSmoothPlayMode, sizeof(DWORD));

 

二、設置音視頻流的緩衝時間

 

音視頻通話過程中,接收到對方的音視頻流數據之後,流數據會進入緩衝區,緩衝到一定的時間纔開始播放,這樣可以消除網絡抖動對通話的影響,緩衝時間越大,應對網絡抖動的能力越強,但延遲也越大,不同的應用,不同的網絡環境,可設置不同的緩衝時間。

 

AnyChat內核在通話的過程中,會自動評估網絡狀態,根據不同的網絡狀態來動態調整緩衝時間:當網絡狀態好時,會盡量減少緩衝時間,保障通話過程的實時性;當網絡狀態差時,會適當增大緩衝時間,保持通話過程的流暢性。

 

設置流緩衝時間API接口定義:

///< 最大流緩衝時間(參數爲int型,單位:毫秒,取值範圍:500 ~ 5000,默認:800)

#define BRAC_SO_STREAM_MAXBUFFERTIME60

 

C++調用示例代碼(初始化SDK完成之後調用)

// 設置音視頻流最大緩衝時間

DWORD dwMaxBufferTime = 2000;

BRAC_SetSDKOption(BRAC_SO_STREAM_MAXBUFFERTIME,(const char*)&dwMaxBufferTime, sizeof(DWORD));

 

設置的最大流緩衝時間爲允許內核調節緩衝時間的上限,只有當網絡條件非常惡劣時纔會達到設置的緩衝時間,在網絡條件允許的情況下,內核會盡最大的能力保障交互的實時性,減少緩衝時間。簡而言之,增大緩衝時間,應對網絡抖動、丟包的能力增強,但是在網絡變差時,會帶來一些延遲。

 

經驗總結:普通的應用保持AnyChat內核的默認設置即可,當應用環境網絡不穩定時,且對實時性要求不高的場合(如3G、衛星通訊等)可適當增加流的緩衝時間,至於是採用默認的流暢播放模式,還是關閉流暢播放模式,則需根據實際的應用來決定,通常來說:網絡較穩定的場合,可開啓平滑播放模式,網絡較差的場合,需要關閉平滑播放模式

 

對於本博有任何問題的朋友都可加QQ:992139738

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