Astreisk와 SIP 클라이언트 (모든 softphone) 사이에있는 간단한 SIP 프록시 응용 프로그램을 작성하고 있습니다. 응용 프로그램의 목적은 통화 시간을 계산하는 것입니다. 이하SIP 호출이 시작될 때 알아내는 방법
일정한 흐름의 예이다
- 클라이언트 SIP-프록시 INVITE를 전송하고, SIP-프록시는 200 OK와
- 별표 답변 아스 테 리스크 INVITE 재전송, SIP-프록시 클라이언트 OK (200)을 다시 보낸다.
- 클라이언트가 ACK로 응답하면 SIP-Proxy는 별표로 ACK를 다시 보냅니다.
- 당사자 중 하나가 BYE를 보낼 때마다 대화가 완료되어야합니다.
2 단계에서 호출이 시작되었다고 가정합니다 (예 : rtp 미디어 플로우가 시작됨). 그런 다음 BYE 메시지가 호출 기간을 계산할 때까지 기다립니다. 그러나 일부 고객은 3 단계와 4 단계로 이동하지 않는다는 것을 알았습니다. 2 단계 이후에는 어떤 당사자로부터도 통화 종료 알림을받지 못했습니다. 이러한 통화의 기간은 무한합니다.
RTP 플로우를 스니핑하지 않고 SIP 통화의 시작/중지 시간을 찾는 가장 좋은 방법은 무엇입니까? 통화 시작을 표시하려면 3 단계를 기다려야합니까? 클라이언트가 ACK를 생략하거나 네트워크에서 ACK가있는 UDP 데이터 그램을 놓친 경우 어떻게됩니까?
지금은 SIP 통화가 시작되었음을 알 수있는 신뢰할만한 방법이 없다고 생각했습니다. 어쩌면 활성 통화를 추적하는 대신 Astrisk 채널 API를 사용해야합니다.
마지막으로 debugig 이후에 나는 BYE 패킷이 재전송으로 인해 손실되었을 때 발생한다는 것을 알아 냈습니다. 예를 들어 우리가 10 초 동안의 네트워크 스파이크를 가지면, 바이 패킷은 손실됩니다. 내가 1-2 분 동안 다시 초대하면 전화가 아직 살아 있는지 확인하는 데 도움이됩니까? – user12384512
예를 들어, Re-INvite를 주기적으로 ping하면 원격 서버에서 호출의 유무를 확인할 수 있습니다. 모두 응답하지 않거나 481/408로 회신 할 수 있습니다. 어느 경우이든 전화를 끊을 수 있습니다. – Rajesh