Protocolo SIP - Mensagens 180 x 183 x Early Media

 

Uma chamada SIP básica, estabelecida com sucesso, quando aceita pelo receptor, tem a resposta final 200 OK, a negociação do CODEC é feita e a chamada entra na sessão de mídia com ambas as extremidades conhecendo as capacidades uma da outra. Acredito que você não tenha, nenhuma dúvida sobre este mecanismo básico e principal.

Fonte em referencias.

Mas isso não tem nada a ver com o momento em que a mídia realmente inicia, às vezes você pode perceber que o outro lado está reproduzindo um IVR para pedir a entrada de um dígito sem atender sua chamada.

Portanto, o fluxo de mídia antes do estabelecimento da chamada é considerado mídia inicial. Não é a voz da pessoa com quem você deseja falar, mas sim tons do sistema, anúncios ou qualquer som que o outro lado deseja que você ouça, mesmos que muitas vezes você não ouça, por não ter uma tratativa em seu Dialplan. Isto ocorre com frequência, e se seu Dialplan, não tem uma tratativa correta, o app_dial.c vai estacionar a chamada, ou seja vai executar o res_musiconhold.c.


Uma implementação de alguma forma semelhante ao PSTN pode ser encontrada quando seu telefone celular tenta alcançar um número fora do sinal:
O número discado não está disponível no momento, tente novamente mais tarde.
Isso pode ser o que você ouve como resultado e, neste caso, seu provedor de serviços de telefonia não atendeu a sua chamada nem cobrou a tarifa da chamada.

180 Ringing

Conforme declarado na Bíblia SIP RFC3261, 180 é usado para alertar o UA chamador que recebeu um INVITE e está tocando.

A resposta 180 na maioria das vezes não carrega o corpo SDP, e o dispositivo que recebe essa resposta geralmente inicia um toque de retorno local para o usuário final. Isso quer dizer que o tom de toque que você ouve ao esperar que o receptor atenda não é uma viagem pela rede, mas sim configurável em seu dispositivo terminal (endpoint).

Vale ressaltar que as mesmas coisas acontecem quando alguma mensagem do tipo  4XX, 5XX, 6XX é recebido, seu dispositivo deve gerar alguns tipos de áudios informativos, para que o usuário possa notar que a chamada falhou, ou que foi sem sucesso, antes de desligar completamente.

183 Session Progress

A resposta 183 (Progresso da sessão) é usada para transmitir as informações. Os campos de cabeçalho ou corpo SDP, neste caso, podem ser usados para transmitir mais detalhes sobre o andamento da chamada.
Fonte em referencias - Early Media with SIP 183 response.

A resposta 183 contém corpo SDP e é geralmente usada em 3 casos:
  1. Fazendo um RINGBACK da viagem na rede: o dispositivo que executa o UAC reproduzirá o fluxo de mídia enviado pelo UAS ao usuário para indicar que o receptor está sendo alertado.
  2. Simplesmente reproduzir um som de mensagem de erro e, em seguida, desligar como afirmei acima.
  3. Para a implementação de uma resposta de voz interativa: os tons DTMF podem ser reunidos junto com os pacotes de mídia.
É sobre a mídia antiga, simples, não é?

Detecting Early Media

Isso é sobre a mídia inicial, é simples,  acima está a definição SIP sobre a mídia inicial, posso dizer que é bastante simples, mas na verdade, o UAC não poderia retransmitir as respostas SIP recebidas para decidir se inicia o local do RINGBACK ou para reproduzir a mídia da extremidade remota. Só porque a sinalização SIP e a mídia RTP estão em seu próprio caminho, o UAS pode iniciar a resposta 183 que contém o corpo SDP sem enviar nenhum pacote de mídia.

Fora isso, alguma implementação anexa ao corpo da resposta 180 o SDP e entra na primeira sessão de mídia sem respostas 183.

Portanto, para detectar a mídia inicial, o UAC também precisa verificar se os pacotes de mídia estão chegando em um determinado momento.

E graças ao RFC3960, algumas políticas para essas bagunças são recomendadas:
  1. A menos que uma resposta 180 (toque) seja recebida, nunca gere toque local (RINGING);
  2. Se um 180 (RINGING) foi recebido, mas não há pacotes de mídia de entrada, gere toque local (RINGING);
  3. Se um 180 (RINGING) foi recebido e há pacotes de mídia de entrada, reproduza-os e não gere toque local (RINGING).
Essas políticas não são definidas como padrão a ser seguido em todos os dispositivos SIP, mas simplesmente afirmam:
Qualquer UA deve reproduzir pacotes de mídia de entrada (e interromper a geração de tom de toque local se estiver sendo executado).

Por último, mas não menos importante, quando a chamada deixa o estado de mídia inicial ao ser atendida, a resposta SDP no 200 OK deve corresponder à resposta SDP no 183/180 anterior, ou seja, nenhuma alteração na capacidade de mídia quando a chamada muda de sessão de mídia antecipada para sessão de mídia oficial (Early Media).

Bem, é isso, espero que faça sentido para você. Se possível, faça alguns rastreamentos com SNGREP/Wireshark de uma chamada SIP com Early Media podem ajudá-lo a entender com mais clareza. 

Referências:




Tkat's All Folks! (É por hoje é só, pessoal!).

Nenhum comentário

Toda vez que um homem supera os reveses, torna-se mentalmente e espiritualmente mais forte!

Tecnologia do Blogger.