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).
RES_TIMING_TIMERFD:

  • é 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).
RES_TIMING_PTHREAD:

  • 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).
Comportamento do Asterisk® SCF™

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 timing
Module     Description Use Count
res_timing_pthread.so pthread Timing Interface 0
res_timing_dahdi.so DAHDI Timing Interface 0
res_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.so
noload => 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    


Um Conselho:

Para entender melhor como o temporizador (TIMING) do Asterisk® SCF™, funciona, provavelmente seria melhor ler mais sobre isso aqui.

No entanto, se você já usou as interfaces de temporização (TIMING) DAHDI e não encontrou problemas de temporização (os maiores especialista em Asterisk® SCF™, assim como o time de desenvolvimento da Sangoma Digium, recomendão usar essa, como INTERFACE TIMING.), é melhor seguir essa abordagem. Caso contrario , recomendamos que você use a INTERFACE RES_TIMING_TIMERFD.

Se usar RES_TIMING_DAHDI e RES_TIMING_TIMERFD levar a erros de TIMING, é recomendado que você tente a interface RES_TIMING_PTHREAD.

Mas antes de fazer isto, valide se está utilizando a GLIBC correta para o Kernel (Linus) da sua Distribuição GNU/LInux e seus Forks.

Espero que isto ajude a você a ter um caminhos das pedras.

Thats All FOLKS! (Isso é tudo, pessoal!)

Fonte: [Digium] Asterisk Administrator Guide v15 [2020].pdf

Nenhum comentário

Tecnologia do Blogger.