SIP - O modelo de oferta / resposta
O uso de SDP com SIP é fornecido na resposta de oferta SDP RFC 3264. O tipo de corpo de mensagem padrão no SIP é application/sdp.
A parte chamadora lista os recursos de mídia que deseja receber no SDP, geralmente em um INVITE ou em um ACK.
A parte chamada lista seus recursos de mídia na resposta 200 OK ao CONVITE.
Um uso SIP típico de SDP inclui os seguintes campos: versão, origem, assunto, hora, conexão e uma ou mais mídias e atributos.
Os campos de assunto e hora não são usados pelo SIP, mas são incluídos para compatibilidade.
No padrão SDP, o campo assunto é um campo obrigatório e deve conter pelo menos um caractere, sugerido como s = - se não houver assunto.
O campo de hora geralmente é definido como t = 00. SIP usa os campos de conexão, mídia e atributo para configurar sessões entre UAs.
O campo de origem tem uso limitado com SIP.
O id de sessão geralmente é mantido constante durante uma sessão SIP.
A versão é incrementada cada vez que o SDP é alterado. Se o SDP enviado não for alterado em relação ao enviado anteriormente, a versão será mantida a mesma.
Como o tipo de sessão de mídia e codec a ser usado fazem parte da negociação de conexão, o SIP pode usar o SDP para especificar vários tipos de mídia alternativos e aceitar ou recusar seletivamente esses tipos de mídia.
A especificação de oferta / resposta, RFC 3264, recomenda que um atributo contendo um = rtpmap: seja usado para cada campo de mídia. Um fluxo de mídia é recusado definindo o número da porta como zero para o campo de mídia correspondente na resposta SDP.
Exemplo
No exemplo a seguir, o chamador Tesla deseja configurar uma chamada de áudio e vídeo com dois codecs de áudio possíveis e um codec de vídeo no SDP transportado no CONVITE inicial -
v = 0
o = John 0844526 2890844526 IN IP4 172.22.1.102
s = -
c = IN IP4 172.22.1.102
t = 0 0
m = audio 6000 RTP/AVP 97 98
a = rtpmap:97 AMR/16000/1
a = rtpmap:98 AMR-WB/8000/1
m = video 49172 RTP/AVP 32
a = rtpmap:32 MPV/90000
Os codecs são referenciados pelos números de perfil RTP / AVP 97, 98.
A parte chamada Marry atende a chamada, escolhe o segundo codec para o primeiro campo de mídia e recusa o segundo campo de mídia, querendo apenas a sessão AMR.
v = 0
o = Marry 2890844526 2890844526 IN IP4 172.22.1.110
s = -
c = IN IP4 200.201.202.203
t = 0 0
m = audio 60000 RTP/AVP 8
a = rtpmap:97 AMR/16000
m = video 0 RTP/AVP 32
Se esta chamada apenas de áudio não for aceitável, Tom enviará um ACK e, em seguida, um BYE para cancelar a chamada. Caso contrário, a sessão de áudio seria estabelecida e os pacotes RTP trocados.
Como este exemplo ilustra, a menos que o número e a ordem dos campos de mídia sejam mantidos, a parte chamadora não saberá com certeza quais sessões de mídia estão sendo aceitas e recusadas pela parte chamada.
As regras de oferta / resposta são resumidas nas seções a seguir.
Regras para gerar uma oferta
Uma oferta SDP deve incluir todos os campos SDP obrigatórios (isso inclui v =, o =, s =, c = e t =). Esses são campos obrigatórios no SDP.
Geralmente inclui um campo de mídia ( m = ), mas não é obrigatório. As linhas de mídia contêm todos os codecs listados em ordem de preferência. A única exceção a isso é se o terminal suportar um grande número de codecs, os mais prováveis de serem aceitos ou os mais preferidos devem ser listados. Diferentes tipos de mídia incluem áudio, vídeo, texto, MSRP, BFCP e assim por diante.
Regras para gerar uma resposta
Uma resposta SDP a uma oferta deve ser construída de acordo com as seguintes regras -
A resposta deve ter o mesmo número de m = linhas na mesma ordem da resposta.
Fluxos de mídia individuais podem ser recusados definindo o número da porta como 0.
Os fluxos são aceitos enviando um número de porta diferente de zero.
As cargas úteis listadas para cada tipo de mídia devem ser um subconjunto das cargas úteis listadas na oferta.
Para cargas dinâmicas, o mesmo número de carga dinâmica não precisa ser usado em cada direção. Normalmente, apenas uma única carga útil é selecionada.
Regras para modificar uma sessão
Qualquer uma das partes pode iniciar outra troca de oferta / resposta para modificar uma sessão. Quando uma sessão é modificada, as seguintes regras devem ser seguidas -
O número da versão da linha de origem ( o = ) deve ser igual ao último enviado, o que indica que este SDP é idêntico à troca anterior, ou pode ser incrementado em um, o que indica um novo SDP que deve ser analisado.
A oferta deve incluir todas as linhas de mídia existentes e devem ser enviadas no mesmo pedido.
Fluxos de mídia adicionais podem ser adicionados ao final da lista m = line.
Um fluxo de mídia existente pode ser excluído configurando o número da porta como 0. Esta linha de mídia deve permanecer no SDP e em todas as trocas de ofertas / respostas futuras para esta sessão.
Chamada em espera
Uma pessoa em uma chamada pode colocar a outra temporariamente em espera. Isso é feito enviando um CONVITE com um SDP idêntico ao do CONVITE original, mas coma = sendonly atributo presente.
A chamada é reativada enviando outro CONVITE com o a = sendrecvatributo presente. A ilustração a seguir mostra o fluxo de uma chamada em espera.