Explorando o mecanismo VoIP do Mediastreamer2. Parte 8

O material do artigo foi retirado do meu canal zen.

Explorando o mecanismo VoIP do Mediastreamer2. Parte 8

Estrutura do pacote RTP

No passado статье Nós estamos usando TShark realizou a captura dos pacotes RTP que foram trocados entre nosso receptor e transmissor. Pois bem, neste vamos pintar os elementos da embalagem em cores diferentes e falar sobre a sua finalidade.

Vejamos a mesma embalagem, mas com margens coloridas e etiquetas explicativas:
Explorando o mecanismo VoIP do Mediastreamer2. Parte 8

Na parte inferior da lista, os bytes que compõem o pacote RTP são coloridos e, por sua vez, é a carga útil do pacote UDP (seu cabeçalho está circulado em preto). Os fundos coloridos indicam os bytes do cabeçalho RTP, e o bloco de dados que contém a carga útil do pacote RTP é destacado em verde. Os dados são apresentados em formato hexadecimal. No nosso caso, este é um sinal de áudio compactado de acordo com a lei u (lei mu), ou seja, uma amostra tem um tamanho de 1 byte. Como usamos a taxa de amostragem padrão (8000 Hz), a uma taxa de pacote de 50 Hz, cada pacote RTP deve conter 160 bytes de carga útil. Veremos isso contando os bytes na área verde, deve haver 10 linhas deles.

De acordo com o padrão, a quantidade de dados no payload deve ser um múltiplo de quatro, ou seja, deve conter um número inteiro de palavras de quatro bytes. Se acontecer de sua carga útil não corresponder a essa regra, você precisará adicionar bytes com valor zero ao final da carga útil e definir o bit Padding. Este bit está localizado no primeiro byte do cabeçalho RTP e tem a cor turquesa. Observe que todos os bytes de carga útil são 0xFF, que é a aparência do silêncio da lei u.

O cabeçalho do pacote RTP consiste em 12 bytes obrigatórios, mas em dois casos pode ser mais longo:

  • Quando um pacote carrega um sinal de áudio obtido pela mistura de sinais de várias fontes (fluxos RTP), depois dos primeiros 12 bytes do cabeçalho existe uma tabela com uma lista de identificadores de fonte cujos payloads foram usados ​​para criar o payload desse pacote. Neste caso, nos quatro bits inferiores do primeiro byte do cabeçalho (campo Contagem de identificadores de origem contribuinte) indica o número de fontes. O tamanho do campo é de 4 bits, portanto a tabela pode conter até 15 identificadores de origem. Cada um dos quais ocupa 4 bytes. Esta tabela é usada ao configurar uma chamada de conferência.

  • Quando o título tiver a extensão . Neste caso, o bit é definido no primeiro byte do cabeçalho X. No cabeçalho estendido, após a tabela de participantes (se houver), há um cabeçalho de extensão de uma palavra, seguido das palavras de extensão. Uma extensão é uma coleção de bytes que você pode usar para transferir dados adicionais. O padrão não estipula o formato desses dados - pode ser qualquer um. Por exemplo, podem ser algumas configurações adicionais para o dispositivo que recebe pacotes RTP. Para algumas aplicações, no entanto, padrões de cabeçalho estendidos foram desenvolvidos. Isso é feito, por exemplo, para comunicações no padrão ED-137 (Padrões de Interoperabilidade para Componentes VoIP ATM).

Agora vamos ver os campos de cabeçalho com mais detalhes. Abaixo está uma imagem canónica com a estrutura do cabeçalho RTP, à qual também não resisti e pintei nas mesmas cores.

Explorando o mecanismo VoIP do Mediastreamer2. Parte 8
VER — número da versão do protocolo (versão atual 2);

P - um sinalizador que é definido nos casos em que o pacote RTP é complementado com bytes vazios no final;

X - sinalizar que o cabeçalho é estendido;

CC — contém o número de identificadores CSRC após o cabeçalho constante (após as palavras 1..3), a tabela não é mostrada na figura;

M — marcador de início de quadro ou presença de fala no canal (se for utilizado detector de pausa de fala). Se o receptor não contiver um detector de pausa de fala, então este bit deve ser ativado permanentemente;

TIPO P - especifica o formato da carga útil;

Número sequencial - número do pacote, usado para restaurar a ordem em que os pacotes são reproduzidos, pois a situação real é quando os pacotes podem chegar ao receptor na ordem errada em que foram enviados. O valor inicial deve ser aleatório, isso é feito para que, se o fluxo RTP for criptografado, seja difícil hackeá-lo. Além disso, este campo permite detectar pacotes perdidos;

Timestamp - carimbo de data/hora. O tempo é medido em amostras de sinal, ou seja, se um burst contiver 160 amostras, então o timestamp do próximo burst será mais 160. O valor inicial do timestamp deve ser aleatório;

SSRC — identificador da origem do pacote, deve ser único. É melhor gerá-lo aleatoriamente antes de iniciar o fluxo RTP.

Se você desenvolver seu próprio transmissor ou receptor de pacotes RTP, terá que olhar seus pacotes mais de uma vez para aumentar a produtividade, recomendo que você aprenda a usar a filtragem de pacotes no TShark, ele permite capturar apenas os pacotes que são do seu interesse. Em um ambiente onde dezenas de dispositivos RTP operam na rede, isso é muito valioso. Na linha de comando do TShark, as opções de filtragem são especificadas com a opção "-f". Usamos esta opção quando queríamos capturar pacotes da porta 8010:
-f "udp port 8010"
Os parâmetros de filtragem são essencialmente um conjunto de critérios que um pacote "capturado" deve atender. A condição pode verificar o endereço, porta, valor de um determinado byte no pacote. As condições podem ser combinadas com operações lógicas "AND", "OR", etc. Uma ferramenta muito poderosa.

Se você deseja visualizar a dinâmica das alterações de campo em lotes, será necessário duplicar a saída TShark para um arquivo, como mostrado no último artigo, passando a saída TShark na entrada tee. Em seguida, abra o arquivo de log com menos, vim ou outra ferramenta que pode trabalhar rapidamente com arquivos de texto enormes e pesquisar strings, você pode descobrir todas as nuances do comportamento dos campos de pacotes em um fluxo RTP.

Se necessitar de ouvir o sinal transmitido pelo stream RTP, então deverá utilizar a versão TShark com interface visual Wireshark. Com manipulações simples do mouse, você pode ouvir e ver a forma de onda do sinal. Mas com uma condição - se estiver codificado no formato u-law ou a-low.

Próximo статье faremos um interfone duplex com você. Estoque um par de fones de ouvido e um interlocutor.

Fonte: habr.com

Adicionar um comentário