如何改善音視頻通話過程中的用戶體驗?

如何改善音視頻通話過程中的用戶體驗?

一、選擇播放模式


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


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


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

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

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


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

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

#define BRAC_SO_STREAM_SMOOTHPLAYMODE 61


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

// 關閉平滑播放模式,可防止馬賽克出現

DWORD bSmoothPlayMode = 0;

BRAC_SetSDKOption(BRAC_SO_STREAM_SMOOTHPLAYMODE,(constchar*)&bSmoothPlayMode, sizeof(DWORD));

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

DWORD bSmoothPlayMode = 1;

BRAC_SetSDKOption(BRAC_SO_STREAM_SMOOTHPLAYMODE,(constchar*)&bSmoothPlayMode, sizeof(DWORD));


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


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


AnyChat內核在通話的過程中,會自動評估網絡狀態,根據不同的網絡狀態來動態調整緩衝時間:當網絡狀態好時,會盡量減少緩衝時間,保障通話過程的實時性;當網絡狀態差時,會適當增大緩衝時間,保持通話過程的流暢性(參考:241.AnyChat音視頻延遲有多大?)。


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

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

#define BRAC_SO_STREAM_MAXBUFFERTIME 60


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

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

DWORD dwMaxBufferTime = 2000;

BRAC_SetSDKOption(BRAC_SO_STREAM_MAXBUFFERTIME,(constchar*)&dwMaxBufferTime, sizeof(DWORD));


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


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


注:上述兩個API接口爲AnyChat Platform Core SDK V4.5版本新增。



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