Como resolver problemas de Áudio causados pela configuração de TIMING (tempo) do Asterisk® SCF™
O artigo atual descreve vários módulos de temporização e explica como eliminar problemas de áudio acionados pela maneira como a TIMING (temporização) do Asterisk® SCF™ é configurada no ambiente de produção.
Afinal o que é TIMING?
O TIMING afeta o fluxo RTP em chamadas que usam RTP (SIP, H323, MGCP). Uma vez que o sistema RTP é normalmente cronometrado em pacotes de entrada, em algumas situações você pode chegar a uma paralisação. É quando o TIMING (tempo) interno assume o controle, forçando o Asterisk® SCF™ a enviar pacotes com base no módulo carregado e não no fluxo de entrada.
OBS: Uma paralisação ocorre quando ambos os sistemas estão esperando a chegada de um pacote e nenhum deles está enviando nada.
Interfaces TIMING:
Em versões mais antigas do Asterisk (1.4.x), se o sistema Asterisk® SCF™ requeria TIMING interno, a única fonte aceitável era o DAHDI. A partir do Asterisk 1.6.1, há uma nova API de temporização, que permite que vários módulos de temporização (TIMING) sejam usados.
Aqui estão os módulos de temporização incluídos no Asterisk® SCF™:
RES_TIMING_DAHDI:
- usa mecanismos de temporização (TIMING) fornecidos pelo DAHDI;
- costuma ser o único meio pelo qual o Asterisk® SCF™ poderia receber o TEMPO (TIMING);
- pode ser muito eficiente, especialmente se o sistema for usar hardware DAHDI;
- pode não ser tão atraente se DAHDI for estritamente usado como uma fonte de temporização (TIMIG).
- é um recurso relativamente novo no Linux (Kernel, não entenda Linux como Distribuição, pois o Sistema Operacional é GNU/Linux! Lembre-se disto.), o que significa que pode não ser amplamente divulgado;
- está disponível apenas em Sistemas Operacionais, com o Linux (Kernel) usando uma versão de pelo menos 2.6.25 e uma versão do GLIBC de pelo menos 2.8;
- começando com o Asterisk® SCF™ 1.6.2.2 usa um mecanismo de temporização (TIMIG) fornecido diretamente pelo Linux (Kernel).
- usa a biblioteca POSIX PTHREADS para fornecer tempo (TIMING);
- é portátil para muitos tipos de sistemas porque o código usa um conjunto de funções comumente implementado;
- é a única fonte de tempo (TIMING), atualmente utilizável em um sistema não GNU/Linux (e seus forks);
- é também a fonte de temporização (TIMING) menos EFICIENTE, conhecida por PERDER sua eficácia em um ambiente CRITICO (tal como é o de ToIP - Telephony Over IP, VoIP - Voice Over IP, TDMoIP - TDM Over IP e GoIP - GSM Over IP), ou muito carregado, porque um único encadeamento do espaço do usuário é usado para fornecer temporização (TIMING) para todos os usuários do temporizador (INTERFACE TIMING).
Por padrão, no Asterisk® SCF™, é construido e carregado todas as interfaces de temporização (TIMING) definidas no arquivo /etc/asterisk/modules.conf; res_timing_pthread é o primeiro módulo a ser carregado e é seguido por res_timing_dahdi (quando existe o DAHDI instalado em seu ambiente de produção).
Se você deseja a INTERFACE TIMING, você precisa editar o arquivo modules.conf conforme explicado abaixo:
Etapa 1: veja na Command Line do Asterisk® SCF™ quais módulos estão disponíveis em sua produção:
*CLI> module show like timingModule Description Use Countres_timing_pthread.so pthread Timing Interface 0res_timing_dahdi.so DAHDI Timing Interface 0res_timing_timerfd.so Timerfd Timing Interface 1
OBS: no caso o DAHDI é apenas ilustrativo, já que 100% das soluções de mercado não fazem uso do DAHDI como INTERFACE TIMING.
Etapa 2: Inclua no arquivo modules.conf as interfaces que não iremos utilizar, no caso do exemplo DAHDI e PTHREAD:
# vim /etc/asterisk/modules.conf
[modules]noload => res_timing_dahdi.sonoload => res_timing_pthread.so
Etapa 3: Pare e Reinicie o Asterisk e depois, repita a etapa 1, e veja se é este resultado:
# systemctl stop asterisk.service # systemctl start asterisk.service # rasterisk -vvvvgci
*CLI> module show link timing Module Description Use Count res_timing_timerfd.so Timerfd Timing Interface 1
Deixe um comentário