freeswitch pbx 소프트웨어에서 SIP 통화 버퍼링을 끄고 싶습니다.
Freeswitch는 클라이언트의 RTP 데이터를 버퍼에 저장하고 20밀리초마다 전송합니다.
통과하는 패킷을 유지하지 않고 자유롭게 전환하고 싶습니다.
어떻게 구성하나요?
----- 편집(추가 정보) -----
두 개의 SIP 클라이언트와 FreeSwitch PBX가 있습니다.
음성 8kHz 샘플 속도, A-Law 인코딩(샘플당 8바이트, 압축 없음)
한 클라이언트를 다른 클라이언트에서 직접 호출하면 한 클라이언트의 tcpdump 출력은 다음과 같습니다.
00:00:00.000475 IP 10.64.177.34.5440 > 10.64.0.42.5082: UDP, length 172
00:00:00.031599 IP 10.64.177.34.5440 > 10.64.0.42.5082: UDP, length 172
00:00:00.032012 IP 10.64.177.34.5440 > 10.64.0.42.5082: UDP, length 172
00:00:00.000315 IP 10.64.177.34.5440 > 10.64.0.42.5082: UDP, length 172
00:00:00.031775 IP 10.64.177.34.5440 > 10.64.0.42.5082: UDP, length 172
00:00:00.000384 IP 10.64.177.34.5440 > 10.64.0.42.5082: UDP, length 172
00:00:00.031499 IP 10.64.177.34.5440 > 10.64.0.42.5082: UDP, length 172
00:00:00.031986 IP 10.64.177.34.5440 > 10.64.0.42.5082: UDP, length 172
00:00:00.000475 IP 10.64.177.34.5440 > 10.64.0.42.5082: UDP, length 172
00:00:00.031578 IP 10.64.177.34.5440 > 10.64.0.42.5082: UDP, length 172
00:00:00.031936 IP 10.64.177.34.5440 > 10.64.0.42.5082: UDP, length 172
00:00:00.000419 IP 10.64.177.34.5440 > 10.64.0.42.5082: UDP, length 172
00:00:00.031573 IP 10.64.177.34.5440 > 10.64.0.42.5082: UDP, length 172
그러나 한 클라이언트에서 다른 클라이언트로 연결하기 위한 중간 지점으로 pbx를 사용하면 다음과 같은 결과가 나타납니다.
00:00:00.020013 IP 10.64.72.24.30230 > 10.64.0.42.5078: UDP, length 172
00:00:00.019969 IP 10.64.72.24.30230 > 10.64.0.42.5078: UDP, length 172
00:00:00.020017 IP 10.64.72.24.30230 > 10.64.0.42.5078: UDP, length 172
00:00:00.019984 IP 10.64.72.24.30230 > 10.64.0.42.5078: UDP, length 172
00:00:00.020078 IP 10.64.72.24.30230 > 10.64.0.42.5078: UDP, length 172
00:00:00.020016 IP 10.64.72.24.30230 > 10.64.0.42.5078: UDP, length 172
00:00:00.019850 IP 10.64.72.24.30230 > 10.64.0.42.5078: UDP, length 172
00:00:00.020045 IP 10.64.72.24.30230 > 10.64.0.42.5078: UDP, length 172
00:00:00.020012 IP 10.64.72.24.30230 > 10.64.0.42.5078: UDP, length 172
00:00:00.019974 IP 10.64.72.24.30230 > 10.64.0.42.5078: UDP, length 172
00:00:00.020054 IP 10.64.72.24.30230 > 10.64.0.42.5078: UDP, length 172
00:00:00.019996 IP 10.64.72.24.30230 > 10.64.0.42.5078: UDP, length 172
00:00:00.019972 IP 10.64.72.24.30230 > 10.64.0.42.5078: UDP, length 172
두 경우 모두 평균 시간은 약 20ms(직접적인 경우에는 약간 적음)이지만 (스피커나 헤드폰에서) 들리는 사운드에 간격이 없기 때문에 비정규 데이터 부분이 클라이언트에게 더 좋아 보입니다. 데이터의 규칙적인 주기 부분은 클럭 드리프트 문제로 인해 문제가 발생할 것이라고 생각합니다.
그래서 저는 FreeSwitch에서 이 기능을 꺼서 데이터가 원래 타임스탬프와 함께 표시되기를 원합니다.
답변1
내 문제에 대한 해결책을 찾았습니다.
라인을 추가해야합니다
<X-PRE-PROCESS cmd="set" data="rtp_notimer_during_bridge=true"/>
파일에
/etc/freeswitch/vars.xml
이로 인해 브리지 모드의 FreeSwitch가 원래 패킷 간격을 유지하게 됩니다.
답변2
SIP 통신은 UDP를 사용하여 음성 데이터를 보내기 때문에 각 프레임을 채우기 위해 필수 버퍼가 필요하며 SIP 통신에서 UDP 패킷이 일반적으로 보유하는 데이터 양은 20ms입니다.
이를 우회할 수는 없지만 구성하여 줄일 수는 있습니다.
저는 freepbx를 사용하지 않고 Asterisk를 pbx로 사용하기 때문에 이것이 기능인지 아니면 단지 계산 지연인지는 알 수 없습니다. sip 협상이 pbx를 통해 이루어지지만 rtp 페이로드는 피어 간에 직접 이루어지도록 별표에 direct_media 기능과 동등한 기능을 사용하는 것을 고려해야 할 수도 있습니다.