NetworkMix
Escrevi num artigo anterior como voz é convertida de ondas de som para dados/pacotes para que por sua vez, possam ser encaminhados na rede (https://networkmix.net/voz-pacotes), mas gostaria de expandir um pouco no assunto voz sobre IP e falar sobre Codecs.
A palavra Codec vem de code/decode que é um dispositivo ou programa/função que codifica e/ou decodifica um sinal ou stream de dados/mídia. Estamos falando aqui de codec voltado a voz apenas, mas codec são utilizados nas mais diversas aplicações e usos, temos codecs trabalhando por ‘detrás da cortina’ na live do YouTube que você está assistindo ao vídeo que você grava no seu celular.
Por termos uma gama gigante de Codecs, eles são utilizados em diversas situações e motivos, por exemplo, temos codecs que são voltados a diminuir drasticamente o consumo de banda, mas por consequência temos perca de qualidade, por outro lado, temos codecs em que o foco é qualidade, mas por consequência o consumo de banda é maior.
Temos diversos codecs mais famosos/conhecidos, como MP3, AVI, RealAudio...além de codecs proprietários que normalmente funcionam ou são feitos para um ecossistema específico, isso cria um problema, pois não necessariamente o dispositivo que está recebendo a mídia ou tentando reproduzi-la possui instalado em si o codec capaz de decodifica-la, para algumas situações é possível instalar manualmente o codec no computador que a partir desse momento ‘aprende’ como interpretar os dados.
Um outro modo de enxergar codecs e protocolos em geral é olhar o nosso mundo, diferentes países falam diferentes idiomas, para pessoas de duas nacionalidades diferentes conseguirem se comunicar ou uma delas precisa saber falar um idioma adicional ou fazer uso de um tradutor que faça esse trabalho de ‘ponte’.
Demos algumas voltas, mas é importante termos esses exemplos na cabeça para prosseguirmos.
Pudemos entender até aqui que o codec é responsável por receber informações e de acordo com suas instruções codificá-la, no nosso caso a informação é voz. Por termos diversos possíveis codecs, diversas possibilidades e requisitos se abrem para nós. Importante reforçar que estamos focando nesse artigo na visão de codec para redes e consumo de banda, mas o assunto é muito mais complexo que apenas isso.
Conforme mencionado, temos diversos codecs que podemos utilizar, abaixo apresento alguns numa tabela que utilizo frequentemente como ‘cola’ para calcular banda necessária em circuitos que vão trafegar voz.
Vamos pegar dois exemplos apresentados na tabela acima, sendo eles os codecs G.711 e G.729.
O codec G.711 utiliza 64kbps (estamos considerando aqui apenas payload, sem cabeçalhos, etc) enquanto G.729 utiliza 8kbps, sendo assim podemos ver que G.729 utiliza 8 vezes menos banda (apenas para referência, na realidade chega a ser apenas 3 ou 4 vezes menos) que o G.711, agora considere isso numa estrutura de milhares/milhões de ligações, a diferença em requisitos de circuitos/banda muda drasticamente, quanto mais banda um circuito precisa ter, mais dinheiro a empresa precisará desembolsar, a decisão do Codec a ser usado em algumas situações se torna algo que inviabiliza (ou não) o projeto.
Mas como falamos anteriormente um preço é pago quando temos um codec que faz compactação de dados, parte dele (dados/informação) é perdida.
G.711 colhe 8 mil amostras de ondas de som por segundo, sendo que em cada amostra temos 8 bits, chegamos então ao valor de 64Kbps (8.000 * 8 = 64.000 bits)
G.729 realiza menos amostragens (80 amostras para cada frame de 10 ms), por consequência a qualidade é impactada.
Veja que no exemplo apresentado temos uma coluna ‘Mean Opinion Score (MOS)’, o MOS é uma métrica utilizada para informar a qualidade do codec. A nota varia de 1 a 5, sendo 5 a melhor/maior nota. MOS é calculado de diversas formas, alguns fabricantes e artigos possuem MOS calculado através de fórmulas aritméticas sendo que outras documentações referencia MOS calculado por pessoas. O instituto ITU possui alguns documentos e recomendações nesse cálculo, segue o link para quem tem curiosidade https://www.itu.int/rec/T-REC-P.800.1-201607-I/en.
De forma resumida é apenas importante saber que MOS é a nota para a qualidade da chamada/codec, quanto menos o MOS, menor é a qualidade da experiência do usuário.
Pudemos entender até aqui de forma simplista, o que é um codec, para que serve e que saber a diferencia entre eles é importante para realizar decisões conscientes.
No início do artigo usamos como exemplo que um codec também pode ser visto como um idioma que duas pontas usam para se conversar, isso se aplica a voz sobre IP também.
Temos abaixo um exemplo de INVITE SIP, em que o dispositivo local inicia a tentativa de chamada a um dispositivo remoto, no INVITE é informado qual codec é localmente suportado, podemos ver que no nosso caso podemos falar apenas em G.711.
Mas e se o outro lado for o inverso? E falar apenas G.729 ou qualquer outro codec? Se não houver um dispositivo no meio do caminho que possa fazer o papel de ‘tradutor’ os dois dispositivos nunca vão conseguir conversar, pois as duas pontas precisam entrar em acordo no idioma/codec a ser utilizado.
Dispositivos que podem fazer esse papel de ‘tradutor’ incluem Gateways de Voz e /ou SBCs, por exemplo. Ao invés das duas pontas se comunicarem diretamente, o SBC fica no meio do caminho/sessão convertendo os pacotes G.711 para G.729 e vice-versa. Esse processo é chamado de transcoding.
Antigamente o processo de transcoding só podia ser alcançado utilizando equipamentos físicos que possuíam circuitos desenhados especificamente para essa função, as famosas DSPs (Digital Signaling Processor). Mas hoje é comum diversos fabricantes e soluções oferecerem a função de transcoding até em máquinas virtuais, cada um fazendo de sua maneira, mas normalmente fazendo uso de integrações especificas e instruções em processadores, memória e placas de rede.
O mundo de voz sobre IP é gigante, e poderíamos gastar horas falando sobre diversos tópicos e aprofundar em como por exemplo cada codec funciona, como a compressão é realizada/alcançada, mas isso fugiria (ainda mais) do nosso foco que é redes, o ponto principal que queria apresentar aqui é dar visibilidade sobre o que é um codec para administradores de rede que suportam infraestruturas e desconhecem ou possuem conhecimento limitado no assunto.
Sabemos que infelizmente em diversos lugares existe uma cultura de ‘problema não é aqui’ em TI, e quanto maior for nosso arsenal, menor a chance de jogarem algo na nossa área quando conseguirmos facilmente identificar que o problema não é network, isso resulta em soluções mais rápidas que é o nosso objetivo em situações em que não é possível prevenir o problema.
Em outros artigos abordarei um pouco mais a parte de voz e ferramentas que podem facilitar a vida do analista fazendo troubleshooting de problemas.