SIP测试入门指南

语音质量测试

语音质量的测试主要有两种方式进行,一种是通过听取会话的音频流,进行人为主观的一个打分,还有一种就是通过系统数据来进行打分,系统数据包括RTP的丢包率、抖动率、最大时延、平均时延等。不过也需要具体情况具体分析,并不是说必须使用这两种方式,有可能还有别的维度需要考虑,本文档主要说一下这两种方式。

人为打分

人为打分,要做的一个事情就是从pcap文件中还原出音频流文件,这里我们除了使用tshark还需要一个强大的音频处理软件sox

有了上述两个软件,使用下面的shell脚本即可从pcap文件中提取出wav音频文件,其原理是用tshark读取出双向的rtp.ssrc,分别处理,并取出rtp.payload的HEX值,生成raw文件,然后用sox转成wav文件

if [ -z $1 ] ; then
    echo "`basename $0` {pcap-file}"
    exit
fi

for SSRC in `tshark -n -r $1 -Y rtp -T fields -e rtp.ssrc -Eseparator=,|sort -u`
do
    tshark -n -r $1 -Y rtp -Y "rtp.ssrc == $SSRC" -T fields -e rtp.payload | tr : '\n' > $SSRC.payloads
    > $SSRC.raw
    for HEX in `cat $SSRC.payloads`
    do
        printf "\\x$HEX" >> $SSRC.raw
    done
    [ -f $SSRC.wav ] && rm $SSRC.wav
    sox -t raw -r 8000 -c 1 -e mu-law $SSRC.raw $SSRC.wav
    if [ -z $A ] ; then
        A=$SSRC
    else
        B=$SSRC
    fi
done
rm *.payloads *.raw
sox -mM $A.wav $B.wav $A-$B.wav

不要忘记上一节中提到的获取呼叫号码的方法,使用号码来归类存放音频文件,方便后续人为打分

系统打分

使用tshark可以对pcap文件中RTP报文进行统计,分析得出丢包率、抖动率、最大时延、平均时延等数据

tshark -q -z rtp,streams -r pcapFile
# output
# ========================= RTP Streams ========================
#     Src IP addr  Port    Dest IP addr  Port       SSRC          Payload  Pkts         Lost   Max Delta(ms)  Max Jitter(ms) Mean Jitter(ms) Problems?
#  202.xxx.xxx.xxx 28106  198.xxx.xxx.xxx 29728 0x1F62A4A1 ITU-T G.711 PCMU  1055     0 (0.0%)           20.75            0.17            0.05 X
#  198.xxx.xxx.xxx 29728  202.xxx.xxx.xxx 28106 0x99E37E4A ITU-T G.711 PCMU   975     0 (0.0%)           21.05            0.31            0.03 X
# ==============================================================

我们只需要取出其中的Src IP addr、Dest IP addr、Payload、Pkts、Lost、Max Delta(ms)、Max Jitter(ms)、Mean Jitter(ms)字段即可。

tshark -q -z rtp,streams -r pcapFile|sed -n '3,4p'|awk '{print $1,$3,$8,$9,$10$11,$12,$13,$14}'
# output
# 202.xxx.xxx.xxx 198.xxx.xxx.xxx PCMU 1055 0(0.0%) 20.75 0.17 0.05
# 198.xxx.xxx.xxx 202.xxx.xxx.xxx PCMU 975 0(0.0%) 21.05 0.31 0.03

依然不要忘记上一节中提到的获取呼叫号码的方法,将号码与其对应的RTP数据包的丢包率、抖动率、最大时延、平均时延关联起来分析

有了这些数据,然后根据业务方要求或者自定要求,定义一个语音质量的计算公式,写个小程序来对每个国家或者每个省市的通话语言质量进行打分,自然不是什么难事。