それで、結局のところ、すべてがすでに私たちのために考えられていたので、私たちは自分の手で楽器を取り、それを自分自身に適応させる必要があります。 11より古いバージョンのAsteriskと、少しプログラミングする機能が必要です。 Wikiクイックリファレンス:
RTCP(リアルタイムトランスポートコントロールプロトコル)は、RTPとともに使用されるプロトコルです。 プロトコルは、RFC 3550 [1]で説明されています。 RTCPは、データパケットと同じ配信メカニズムを使用して、セッションのすべての参加者への制御パケットの定期的な送信に基づいています。
RTCPプロトコルは、メディアパケットの遅延と損失、ジッタバッファ、音声信号レベルに関する情報を送信するために使用されます。 コール品質メトリックとエコーリターンロスも送信されます。
バージョン11以降、AMIを介したアスタリスクは、イベントRTCPReceivedおよびRTCPSentを送信します。 私たちにとって最も興味深いのはRTCPReceivedです。なぜなら、それは私たちにとって重要な情報を運ぶからです。
次のようになります。
イベント:RTCPReceived
特権:レポート、すべて
シーケンス番号:23177
ファイル:manager.c
行:1696
func:manager_default_msg_cb
チャンネル:SIP / MainAsterisk-0000113f
チャンネル状態:6
channelstatedesc:アップ
calleridnum:79914099
calleridname:RC
connectedlinenum:不明
connectedlinename:不明
言語:ru
コンテキスト:TO_REGION
拡張:680000130
優先度:1
uniqueid:1481711487.11714
linkedid:1481711487.11714
宛先:アスタリスクアドレス:12611
from:ごちそうアドレス:14555
rtt:0.0272
ssrc:0x73f52b22
pt:200(SR)
レポート数:1
sentntp:1481712636.17532474232832
sentrtp:9159680
送信済みパケット:57246
セントオクテット:9159360
report0sourcessrc:0x3098e4b3
report0fractionlost:0
report0cumulativelost:0
report0highestsequence:7177
report0sequencenumbercycles:1
report0iajitter:3
report0lsr:2726085614
report0dlsr:0.0590
私たちにとって興味深いフィールド:
チャネル-関連するチャネルの名前
from-リモートピアIP
rtt-「遅延」、またはむしろ循環遅延
sentpackets-送信されたパケットの数
sentoctets-送信されたバイト数
report0cumulativelost-セッションの開始以降に失われたパケットの数
RTCPパケットの流通スキーム:
Rファクターライト
もちろん、チャンネルの最終的な品質を%として取得することは興味深いことです。 これには2つのオプションがあります。
RファクターとMOS。 ここをよく見てください 。
もちろん、それらを確実に計算することはできませんが、ライトバージョンを作成することはできます。
一般的な計算アルゴリズムは次のようになります。
-すべての肩の最大遅延(RTT)を考慮し、可聴性の問題が1000ミリ秒で始まるという公理と考えます。
-損失の割合(最大)を考慮し、40パーセントでは通信の品質が許容できないという公理と見なします。
合計すると、Rファクターの計算は次のようになります。
R = 100-(MaxRTT / 10 + 2 * MaxLostPackets)
評価:
80-100%-良い音質
60〜79%-満足
<60%-音質はひどい
適用先
現時点では、これで「遊んで」います。 視覚的評価プログラムが作成されました。
さらに、各コールについて自動的に計算し、CDRに追加フィールドを配置する計画があります。これにより、特定のコールの品質だけでなく、期間に関する一般的な方向も評価できます。
プログラムへのリンク
アスタリスク13が新しいバージョンで動作するかどうかがチェックされます-わかりません。
UPD:
計算値をCDRに入れる方法は?
実際、すべてが見た目よりも単純です。 スクリプトまたはプログラムをデータベースと統合し、更新する必要はありません。 Rファクターを計算するたびに、同じAMIインターフェイスを介してチャネル変数を設定するだけで十分です。
アクション:Setvar
チャンネル:Rファクターが計算されたチャンネルの名前。
変数:CDR(r-factor)
値:計算された値
また、CDRテーブルにr-factor列がある場合、この値が入力されます。 もちろん、この変数には、呼び出し全体の平均値を入れる方が良いです。