FreeSWITCH中MOS的計算

主觀評定方法-MOS(Mean Opinion Score)


1.png

?

Freeswitch計算MOS值主要通過以下代碼實現(xiàn):

R = (int)((double)((double)(rtp_session->stats.inbound.recved - rtp_session->stats.inbound.flaws) / (double)rtp_session->stats.inbound.recved) * 100.0);

rtp_session->stats.inbound.mos = 1 + (0.035) * R + (.000007) * R * (R-60) * (100-R);

rtp_session->stats.inbound.recved

從字面意思很容易理解,意思是從統(tǒng)計開始到該時刻收到的rtp包數(shù)量,其中關(guān)鍵的一項rtp_session->stats.inbound.flaws由幾個部分組成,從代碼中可以分析得知有丟包、傳輸同步損傷和延時損傷的統(tǒng)計。

2.png

5 - 完美,如同面對面地交流
4 - 不錯,有不完美的地方,但還是很清晰的。手機(jī)的通話質(zhì)量通常被認(rèn)為是在這個范圍內(nèi)
3 - 很嘈雜
2 - 非常嘈雜,基本不可能通話
1 - 不可能通話

3.png

每收到一個RTP包都會進(jìn)行do MOS的計算,首先獲取sequence對比前一個sequence,從而得知是否丟包,并且每隔5秒會強(qiáng)制(force)執(zhí)行do MOS。

丟包

當(dāng)seq>0 && seq > last_processed_seq + 1(last_processed_seq上一步處理的包序號)。

lost = seq - last_processed_seq – 1

flaws += lost

傳輸同步損傷

是當(dāng)執(zhí)行同步刷新緩沖區(qū)的時候,緩沖區(qū)內(nèi)的包數(shù)。

flush :flaws += sync_packets

reset jitter : Last_flaws = 0

延遲損傷

由于延遲統(tǒng)計的延遲期間填充的靜音包數(shù)。

媒體在讀取A方rtp session的時候一個讀取周期內(nèi)讀到了不止一個packet(可能之前幾個讀取周期內(nèi)存在沒能讀取的情況)就會有syncing 1 audio packet(s) ,這時候A方的rtp state統(tǒng)計過程會跳過10個包再進(jìn)行統(tǒng)計。

媒體讀取A方丟掉一個包會產(chǎn)生lost,之前會有rtp session在好幾個讀周期里沒有讀到packet。

網(wǎng)絡(luò)正常的時候讀取跟寫回是同一時刻。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容