FreeSWITCH rtp 统计

文章讨论了如何使用cdr和RTP音频统计指标,如字节、包计数和Jitter,以及通过JSONAPI获取和解析电话会议数据的方法,如`jsonify_stats`函数,以评估双向音频通信的质量

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在能想到的是几个办法:

1. cdr

增加下面元素:

rtp_audio_in_raw_bytes
rtp_audio_in_media_bytes
rtp_audio_in_packet_count
rtp_audio_in_media_packet_count
rtp_audio_in_skip_packet_count
rtp_audio_in_jb_packet_count
rtp_audio_in_dtmf_packet_count
rtp_audio_in_cng_packet_count
rtp_audio_in_flush_packet_count
rtp_audio_in_largest_jb_size
rtp_audio_out_raw_bytes
rtp_audio_out_media_bytes
rtp_audio_out_packet_count
rtp_audio_out_media_packet_count
rtp_audio_out_skip_packet_count
rtp_audio_out_dtmf_packet_count
rtp_audio_out_cng_packet_count

2. json api

下面是一个例子:

fs_cli -x 'json {"command":"channelData", "data": {"uuid": "9374d6c4-e242-4842-abd8-918515cc97aa"}}'

得到的结果如下(这里仅显示部分):

"callStats": {
            "audio": {
                "inbound": {
                    "raw_bytes": 1059348,
                    "media_bytes": 1059348,
                    "packet_count": 6159,
                    "media_packet_count": 6159,
                    "skip_packet_count": 7,
                    "jitter_packet_count": 0,
                    "dtmf_packet_count": 0,
                    "cng_packet_count": 0,
                    "flush_packet_count": 0,
                    "largest_jb_size": 0,
                    "jitter_min_variance": 0.464572680788897,
                    "jitter_max_variance": 180.5,
                    "jitter_loss_rate": 0,
                    "jitter_burst_rate": 0,
                    "mean_interval": 20.003252032520326,
                    "flaw_total": 0,
                    "quality_percentage": 100,
                    "mos": 4.5
                },
                "outbound": {
                    "raw_bytes": 1059176,
                    "media_bytes": 1059176,
                    "packet_count": 6158,
                    "media_packet_count": 6158,
                    "skip_packet_count": 0,
                    "dtmf_packet_count": 0,
                    "cng_packet_count": 0,
                    "rtcp_packet_count": 0,
                    "rtcp_octet_count": 0
                }
            }

mod_commands.c 里面有个函数可供参考:

void jsonify_stats(cJSON *json, const char *name, switch_rtp_stats_t *stats)


贴一个事件出来:

RECV EVENT
Event-Name: CHANNEL_HANGUP_COMPLETE
Core-UUID: 837ea141-7692-4ea6-adbe-387639c9b83e
FreeSWITCH-Hostname: my-debian12
FreeSWITCH-Switchname: my-debian12
FreeSWITCH-IPv4: 192.168.99.206
FreeSWITCH-IPv6: fdb1:49a:3084:4:20c:29ff:feb0:be85
Event-Date-Local: 2024-12-23 10:58:09
Event-Date-GMT: Mon, 23 Dec 2024 02:58:09 GMT
Event-Date-Timestamp: 1734922689213511
Event-Calling-File: switch_core_state_machine.c
Event-Calling-Function: switch_core_session_reporting_state
Event-Calling-Line-Number: 948
Event-Sequence: 1070
Hangup-Cause: NORMAL_CLEARING
Channel-State: CS_REPORTING
Channel-Call-State: HANGUP
Channel-State-Number: 11
Channel-Name: sofia/internal/1001@192.168.99.206
Unique-ID: 58f500a8-4e37-43bc-a688-e2598faa9cd8
Call-Direction: inbound
Presence-Call-Direction: inbound
Channel-HIT-Dialplan: true
Channel-Presence-ID: 1001@192.168.99.206
Channel-Call-UUID: 58f500a8-4e37-43bc-a688-e2598faa9cd8
Answer-State: hangup
Hangup-Cause: NORMAL_CLEARING
Channel-Read-Codec-Name: PCMU
Channel-Read-Codec-Rate: 8000
Channel-Read-Codec-Bit-Rate: 64000
Channel-Write-Codec-Name: PCMU
Channel-Write-Codec-Rate: 8000
Channel-Write-Codec-Bit-Rate: 64000
Caller-Direction: inbound
Caller-Logical-Direction: inbound
Caller-Username: 1001
Caller-Dialplan: XML
Caller-Caller-ID-Name: 1001
Caller-Caller-ID-Number: 1001
Caller-Orig-Caller-ID-Name: 1001
Caller-Orig-Caller-ID-Number: 1001
Caller-Network-Addr: 192.168.1.120
Caller-ANI: 1001
Caller-Destination-Number: 9196
Caller-Unique-ID: 58f500a8-4e37-43bc-a688-e2598faa9cd8
Caller-Source: mod_sofia
Caller-Context: default
Caller-Channel-Name: sofia/internal/1001@192.168.99.206
Caller-Profile-Index: 1
Caller-Profile-Created-Time: 1734922686233494
Caller-Channel-Created-Time: 1734922686233494
Caller-Channel-Answered-Time: 1734922686253488
Caller-Channel-Progress-Time: 0
Caller-Channel-Progress-Media-Time: 1734922686253488
Caller-Channel-Hangup-Time: 1734922689213511
Caller-Channel-Transfer-Time: 0
Caller-Channel-Resurrect-Time: 0
Caller-Channel-Bridged-Time: 0
Caller-Channel-Last-Hold: 0
Caller-Channel-Hold-Accum: 0
Caller-Screen-Bit: true
Caller-Privacy-Hide-Name: false
Caller-Privacy-Hide-Number: false
variable_direction: inbound
variable_uuid: 58f500a8-4e37-43bc-a688-e2598faa9cd8
variable_session_id: 3
variable_sip_from_user: 1001
variable_sip_from_uri: 1001@192.168.99.206
variable_sip_from_host: 192.168.99.206
variable_video_media_flow: disabled
variable_text_media_flow: disabled
variable_channel_name: sofia/internal/1001@192.168.99.206
variable_sip_local_network_addr: 192.168.99.206
variable_sip_network_ip: 192.168.1.120
variable_sip_network_port: 60094
variable_sip_invite_stamp: 1734922686233494
variable_sip_received_ip: 192.168.1.120
variable_sip_received_port: 60094
variable_sip_via_protocol: udp
variable_sip_authorized: true
variable_Event-Name: REQUEST_PARAMS
variable_Core-UUID: 837ea141-7692-4ea6-adbe-387639c9b83e
variable_FreeSWITCH-Hostname: my-debian12
variable_FreeSWITCH-Switchname: my-debian12
variable_FreeSWITCH-IPv4: 192.168.99.206
variable_FreeSWITCH-IPv6: fdb1:49a:3084:4:20c:29ff:feb0:be85
variable_Event-Date-Local: 2024-12-23 10:58:06
variable_Event-Date-GMT: Mon, 23 Dec 2024 02:58:06 GMT
variable_Event-Date-Timestamp: 1734922686233494
variable_Event-Calling-File: sofia.c
variable_Event-Calling-Function: sofia_handle_sip_i_invite
variable_Event-Calling-Line-Number: 11241
variable_Event-Sequence: 1044
variable_sip_number_alias: 1001
variable_sip_auth_username: 1001
variable_sip_auth_realm: 192.168.99.206
variable_number_alias: 1001
variable_requested_user_name: 1001
variable_requested_domain_name: 192.168.99.206
variable_record_stereo: true
variable_default_gateway: example.com
variable_default_areacode: 918
variable_transfer_fallback_extension: operator
variable_toll_allow: domestic,international,local
variable_accountcode: 1001
variable_user_context: default
variable_effective_caller_id_name: Extension 1001
variable_effective_caller_id_number: 1001
variable_outbound_caller_id_name: FreeSWITCH
variable_outbound_caller_id_number: 0000000000
variable_callgroup: techsupport
variable_user_name: 1001
variable_domain_name: 192.168.99.206
variable_sip_from_user_stripped: 1001
variable_sofia_profile_name: internal
variable_sofia_profile_url: sip:mod_sofia@192.168.99.206:5060
variable_recovery_profile_name: internal
variable_sip_allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
variable_sip_req_params: transport=udp
variable_sip_req_user: 9196
variable_sip_req_uri: 9196@192.168.99.206
variable_sip_req_host: 192.168.99.206
variable_sip_to_user: 9196
variable_sip_to_uri: 9196@192.168.99.206
variable_sip_to_host: 192.168.99.206
variable_sip_contact_params: transport=udp
variable_sip_contact_user: 1001
variable_sip_contact_port: 60094
variable_sip_contact_uri: 1001@192.168.1.120:60094
variable_sip_contact_host: 192.168.1.120
variable_sip_via_host: 192.168.1.120
variable_sip_via_port: 60094
variable_sip_via_rport: 60094
variable_max_forwards: 70
variable_presence_id: 1001@192.168.99.206
variable_switch_r_sdp: v=0
o=- 7 2 IN IP4 192.168.1.120
s=CounterPath eyeBeam 1.5
c=IN IP4 192.168.1.120
t=0 0
m=audio 63142 RTP/AVP 0 8 18 101
a=rtpmap:18 G729/8000
a=fmtp:18 annexb=no
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=sendrecv
a=alt:1 4 : WzNzW9Ws mSmic4Qg 169.254.194.238 63142
a=alt:2 3 : lVgBu5xD PC0DrK8P 10.76.97.100 63142
a=alt:3 2 : Q1E4bGh5 fqW7wqgO 192.168.56.1 63142
a=alt:4 1 : 7ebSsXXi SSvHoRQy 192.168.1.120 63142
a=x-rtp-session-id:0E4227221EB344A9BE369ED4F5FBD509

variable_ep_codec_string: CORE_PCM_MODULE.PCMU@8000h@20i@64000b,CORE_PCM_MODULE.PCMA@8000h@20i@64000b
variable_first_dialplan_context: default
variable_first_dest_number: 9196
variable_call_uuid: 58f500a8-4e37-43bc-a688-e2598faa9cd8
variable_rtp_use_codec_string: OPUS,G722,PCMU,PCMA,H264,VP8
variable_remote_audio_media_flow: sendrecv
variable_audio_media_flow: sendrecv
variable_rtp_audio_recv_pt: 0
variable_rtp_use_codec_name: PCMU
variable_rtp_use_codec_rate: 8000
variable_rtp_use_codec_ptime: 20
variable_rtp_use_codec_channels: 1
variable_rtp_last_audio_codec_string: PCMU@8000h@20i@1c
variable_read_codec: PCMU
variable_original_read_codec: PCMU
variable_read_rate: 8000
variable_original_read_rate: 8000
variable_write_codec: PCMU
variable_write_rate: 8000
variable_dtmf_type: rfc2833
variable_local_media_ip: 192.168.99.206
variable_local_media_port: 19134
variable_advertised_media_ip: 192.168.99.206
variable_rtp_use_timer_name: soft
variable_rtp_use_pt: 0
variable_rtp_use_ssrc: 2139824646
variable_rtp_2833_send_payload: 101
variable_rtp_2833_recv_payload: 101
variable_remote_media_ip: 192.168.1.120
variable_remote_media_port: 63142
variable_rtp_local_sdp_str: v=0
o=XSwitch 1734903552 1734903553 IN IP4 192.168.99.206
s=XSwitch
c=IN IP4 192.168.99.206
t=0 0
m=audio 19134 RTP/AVP 0 101
a=rtpmap:0 PCMU/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=ptime:20
a=sendrecv

variable_endpoint_disposition: ANSWER
variable_current_application: echo
variable_sip_to_tag: ray27mXHFD9Dr
variable_sip_from_tag: 1d7c902d
variable_sip_cseq: 2
variable_sip_call_id: NDZmZTA4MmE2ZGQ3NjIxYTNhMzc3ODlhNTI2N2ViODY.
variable_sip_full_via: SIP/2.0/UDP 192.168.1.120:60094;branch=z9hG4bK-d87543-9a2be45d640dd949-1--d87543-;rport=60094
variable_sip_full_from: <sip:1001@192.168.99.206>;tag=1d7c902d
variable_sip_to_display: 9196
variable_sip_full_to: "9196" <sip:9196@192.168.99.206>;tag=ray27mXHFD9Dr
variable_sip_reason: SIP;description="User Hung Up"
variable_sip_term_status: 200
variable_proto_specific_hangup_cause: sip:200
variable_sip_term_cause: 16
variable_sip_user_agent: eyeBeam release 1011d stamp 40820
variable_sip_hangup_disposition: recv_bye
variable_hangup_cause: NORMAL_CLEARING
variable_hangup_cause_q850: 16
variable_digits_dialed: none
variable_start_stamp: 2024-12-23 10:58:06
variable_profile_start_stamp: 2024-12-23 10:58:06
variable_answer_stamp: 2024-12-23 10:58:06
variable_progress_media_stamp: 2024-12-23 10:58:06
variable_end_stamp: 2024-12-23 10:58:09
variable_start_epoch: 1734922686
variable_start_uepoch: 1734922686233494
variable_profile_start_epoch: 1734922686
variable_profile_start_uepoch: 1734922686233494
variable_answer_epoch: 1734922686
variable_answer_uepoch: 1734922686253488
variable_bridge_epoch: 0
variable_bridge_uepoch: 0
variable_last_hold_epoch: 0
variable_last_hold_uepoch: 0
variable_hold_accum_seconds: 0
variable_hold_accum_usec: 0
variable_hold_accum_ms: 0
variable_resurrect_epoch: 0
variable_resurrect_uepoch: 0
variable_progress_epoch: 0
variable_progress_uepoch: 0
variable_progress_media_epoch: 1734922686
variable_progress_media_uepoch: 1734922686253488
variable_end_epoch: 1734922689
variable_end_uepoch: 1734922689213511
variable_last_app: echo
variable_caller_id: "1001" <1001>
variable_duration: 3
variable_billsec: 3
variable_progresssec: 0
variable_answersec: 0
variable_waitsec: 0
variable_progress_mediasec: 0
variable_flow_billsec: 3
variable_mduration: 2980
variable_billmsec: 2960
variable_progressmsec: 0
variable_answermsec: 20
variable_waitmsec: 0
variable_progress_mediamsec: 20
variable_flow_billmsec: 2980
variable_uduration: 2980017
variable_billusec: 2960023
variable_progressusec: 0
variable_answerusec: 19994
variable_waitusec: 0
variable_progress_mediausec: 19994
variable_flow_billusec: 2980017
variable_rtp_audio_in_raw_bytes: 23564
variable_rtp_audio_in_media_bytes: 23392
variable_rtp_audio_in_packet_count: 137
variable_rtp_audio_in_media_packet_count: 136
variable_rtp_audio_in_skip_packet_count: 13
variable_rtp_audio_in_jitter_packet_count: 0
variable_rtp_audio_in_dtmf_packet_count: 0
variable_rtp_audio_in_cng_packet_count: 0
variable_rtp_audio_in_flush_packet_count: 1
variable_rtp_audio_in_largest_jb_size: 0
variable_rtp_audio_in_jitter_min_variance: 5.73
variable_rtp_audio_in_jitter_max_variance: 44.44
variable_rtp_audio_in_jitter_loss_rate: 0.00
variable_rtp_audio_in_jitter_burst_rate: 0.00
variable_rtp_audio_in_mean_interval: 20.16
variable_rtp_audio_in_flaw_total: 0
variable_rtp_audio_in_quality_percentage: 100.00
variable_rtp_audio_in_mos: 4.50
variable_rtp_audio_out_raw_bytes: 23220
variable_rtp_audio_out_media_bytes: 23220
variable_rtp_audio_out_packet_count: 135
variable_rtp_audio_out_media_packet_count: 135
variable_rtp_audio_out_skip_packet_count: 0
variable_rtp_audio_out_dtmf_packet_count: 0
variable_rtp_audio_out_cng_packet_count: 0
variable_rtp_audio_rtcp_packet_count: 0
variable_rtp_audio_rtcp_octet_count: 0
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值