Usando reSIProcate para conectar Asterisk com WebRTC.

Post Por Daniel Pocock.
Como em um mundo tradicional, "não-WebRTC", o proxy SIP simplesmente facilita chamar entre todos os clientes que ele conhece. Na prática, as implantações geralmente deseja adicionar funcionalidade adicional na forma de um PBX com filas, correio de voz, menus e conferência.

O Asterisk 11,12 e 13 inclui "suporte para WebRTC" embora ainda está evoluindo e eu atualmente não recomendo ligar Asterisk diretamente à Internet pública. Em particular, o Asterisk não suporta recursos como autenticação mútua de TLS com o transporte (WebSocket seguro) WSS. Aqui, nós olhamos como "Repro" pode aceitar conexões de usuários de Internet/Web e retransmiti-las para um servidor Asterisk interno. Aqui está um diagrama da arquitetura:



Observe que as mensagens SIP são aceitos sobre o transporte "WebSocket do Repro" e retransmitida para Asterisk ao longo de um transporte regular SIP TCP. Isso significa que nós nos beneficiamos de suporte "TLS de Repro" também, para que o cliente WebSocket tem uma chance muito maior de escapar do seu firewall do lado do cliente, se a porta 443 é usada (fazer o Repro ser um servidor HTTPS) e os clientes podem ser autenticados com certificados em sua navegador.

Aqui estão os passos para fazê-lo funcionar:


Servidor com Repro e reTurn

Configurar Repro para rodar em um servidor Debian. Verifique se os clientes podem falar com Repro. A pergunta que surge cada vez mais nos dias de hoje: qual é a maneira mais rápida para rodar o "WebRTC" e vê-lo trabalhar? Como pode um desenvolvedor web começar a experimentar WebRTC no seu blog ou demonstração site?
Boa notícia: não é mais necessário copilar ele - e muitos dos componentes estão disponíveis em sistemas baseados em Debian Server (incluindo Ubuntu Server) ou soluções baseadas em RPM, como o Fedora e CentOS.
Vamos a uma rápida verificação de como é fácil, explico abaixo:
# apt-get update
# apt-get install -t experimental repro resiprocate-turn-server
# apt-get install -t unstable chromium sipml5-web-phone
# cd /var/www && mkdir jssip && cd jssip
# wget -r -nH http://tryit.jssip.net
# vim /etc/repro/repro.config
# vim /etc/reTurnServer.config
# vim /var/www/jssip/js/custom.REMOVE_THIS.js

e, em seguida, tentar navegar para "/jssip" ou "/sipml5-web-phone".

Comece com um SIP Proxy

Como explicado no guia "RTC Quick Start" para RTC regular, um proxy SIP é um componente limpo e simples para começar. O mesmo é realmente necessário para WebRTC: iniciar com um proxy. Há dois Vou enfatizar aqui:
  • Repro da reSIProcate é rápido e fácil de configurar e tem suporte embutido TLS. A versão 1.9 alpha com o apoio WebSocket para WebRTC acaba de ser carregado para o "Debian" e está pronto para ser usado em produçãoe. Usuários RPM só precisa baixar o "arquivo tar" e usar rpm build para obter pacotes a partir dele.
  • Kamailio fornece suporte muito bom WebRTC também. Os pacotes estão disponíveis, mas devido a problemas de licença GPL devem ser recompilados com TLS, consulte o arquivo "README" do Kamailio para mais detalhes. Também fiquem a vontade para usar o repositório de "pacotes binários que incluem TLS".

Obter um servidor TURN

servidores TURN, ajudam o fluxo da mídia atravessar NAT. Eles são muito fáceis de configurar, mas devem ter endereços IP reais.

Colocar o JavaScript no servidor Web

Adicionando WebRTC a um Web site pode ser tão simples como cortar e colar um código JavaScript no HTML.
Três amostras de trabalho para começar com:
  • Use o pacote de telefone web "SIPml5" no Debian e adicione a um host virtual, procure "/sipml5-web-phone"
  • Use wget para buscar uma cópia do "JsSIP". Você vai ter uma página de amostra tipo está "tryit.jssip.net". Então edite os arquivos "custom.js" fornecido e altere o endereço do SIP Proxy.
  • QoffeeSIP é outra alternativa.

Browser

Os usuários precisam de um navegador recente. Os últimos Browsers como Google Chrome, Firefox, Opera, IE9 devem funcionar muito bem.

Instalando e configurando Asterisk

Digium, os criadores do Asterisk, atualmente não estão mais apoiando pacotes para Debian e seus forks (Ubuntu), mas eles não fornecem pacotes RPM em seus repositórios de pacotes do "Asterisk".
No entanto, os pacotes binários pré-compilados para Asterisk 11.4 não incluem suporte SRTP. SRTP é uma parte obrigatória do WebRTC. Portanto, tomamos o RPM Fonte (SRPM) e vamos construí-lo manualmente.
Em primeiro lugar, é recomendado que você comece com um servidor CentOSX completamente limpo ou RHELX. Eu construí uma máquina virtual no meu ambiente.  Depois de instalar e configurar uma senha de root, configurar o yum para acessar "EPELX" (eu usei o CentOS6, logo vou usar o EPEL6).
Certifique-se de SELinux e firewall estão desativados de fato (que muitas vezes são ativadas por padrão). Uma maneira rápida de fazer isso:
# sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config
# reboot
...

# iptables -I INPUT -j ACCEPT

Em seguida, você pode fazer "YUM" sobre o repositório Digium e instalar todas as dependências necessárias para a construção de Asterisk:
# rpm -Uvh http://packages.asterisk.org/centos/6/current/x86_64/RPMS/asterisknow-version-3.0.0-1_centos6.noarch.rpm
# yum update
# yum install rpm-build libsrtp-devel

Em seu diretório pessoal, configurar uma árvore de trabalho para "rpm build":
$ mkdir ~/rpmbuild
$ cd ~/rpmbuild
$ mkdir BUILD BUILDROOT RPMS SOURCES SPECS SRPMS
$ cd SPECS
$ wget http://danielpocock.com/sites/danielpocock.com/files/asterisk.spec
$ cd ../SRPMS
$ wget http://packages.asterisk.org/centos/6/asterisk-11/SRPMS/asterisk-11.4.0-1_centos6.src.rpm
$ rpmbuild --rebuild asterisk-11.4.0-1_centos6.src.rpm

Nesta fase, você vai ter alguns erros, mas veja que foi extraído com sucesso o arquivo no diretório de SOURCES:
$ ls -l ../SOURCES
-rw-r--r--   1 daniel daniel 11573400 May 20 23:07 asterisk-sources-11.4.0.tar.gz
$

Ele também irá reclamar dependências que estão faltando, você vai instalar fazendo uso do YUM:
yum install make gcc gcc-c++ ...

Observe que você tenha baixado uma versão ligeiramente modificada do arquivo asterisk.spec, as razões para isso são explicados nesta lista de discussão . O que se segue agora deve desencadear uma compilação bem-sucedida:
$ rpmbuild -bb \
  --without tds \
    --without misdn \
    --without odbc \
   ~/rpmbuild/SOURCES/asterisk.spec

Felizmente, Digium adicionou o suporte SRTP nas versões 12 e 13 não sendo necessário fazer a compilação que estamos fazendo aqui para o Asterisk 11.4.1.

Configuração do Asterisk: aplicação demo

Aqui só temos de instalar os RPMs e fazer uma alteração rápida da configuração:
$ cd ~/rpmbuild/RPMS/x86_64
$ su -
# rpm -i asterisk*rpm
# yum install asterisk-sounds-core-en-ulaw asterisk-sounds-extra-en-ulaw --enablerepo=asterisk-11
# ln -s /usr/share/asterisk/sounds/demo-* /var/lib/asterisk/sounds/en/

Para habilitar conexões do proxy, precisamos definir algumas configurações não padrão. É essencial para usar o transporte TCP. Como as mensagens SIP de clientes WebSocket são geralmente muito grande para pacotes UDP.  Também é necessária permitir SRTP e AVPF, uma vez que estes são obrigatórios em WebRTC. Aqui uma comparação no arquivo padrão do "/etc/asterisk/sip.conf":

--- /etc/asterisk.orig/sip.conf 2013-06-04 10:57:49.428617785 +0200
+++ /etc/asterisk/sip.conf 2013-06-04 11:18:17.825604261 +0200
@@ -207,7 +207,7 @@
 ; subject to change in any release.  If they are changed, the changes will
 ; be reflected in this sample configuration file, as well as in the UPGRADE.txt file.
 ;
tcpenable=no                    ; Enable server for incoming TCP connections (default is no)
tcpenable=yes                    ; Enable server for incoming TCP connections (default is no)
tcpbindaddr=0.0.0.0             ; IP address for TCP server to bind to (0.0.0.0 binds to all interfaces)
                                 ; Optionally add a port number, 192.168.1.1:5062 (default is port 5060)
 
@@ -1371,6 +1371,13 @@
 ; ...
 ;
 
[1001](public-phone,ulaw-phone)
avpf = yes
encryption = yes
context = public
icesupport = yes


 ; Standard configurations not using templates look like this:
 ;
 ;[grandstream1]

Isso pressupõe que o ID de usuário SIP do seu utilizador WebSocket é 1001. Agora você pode executar o Asterisk:
# service asterisk start

Configurando o SIP Proxy Repro para enviar chamadas para Asterisk

Isto é uma demonstração relativamente simples. O objetivo é enviar chamadas para o número 1000 para o aplicativo de demonstração em Asterisk
Na interface web do Repro, clique em Adicionar rota no menu. Utilize os seguintes parâmetros e deixar todas as outras opções em branco:
  • URI: ^sip:([0-9]+)@
  • Destination: sip:$1@pbx.example.org?transport=tcp
Nota: substituir pbx.example.org com o nome ou o endereço IP do Asterisk para o trunk. Vá para o link do menu ADD USER e adicionar um usuário chamado 1001. O ID de usuário e senha devem ser colocadas no arquivo custom.js para JsSIP.

Testando a partir JsSIP

Presumo JsSIP foi criado seguindo as instruções anterior. Asterisk não suporta o CODEC vídeo de um cliente WebRTC. Para contornar isso, no arquivo "custom.js" para JsSIP, certifique-se de vídeo está desativado por padrão.
No cliente WebRTC, disque 1000. Você deve ouvir a demo saudação do Asterisk.

Solução de possiveis problemas

  • Verifique o registo de JavaScript no navegador;
  • Verifique os logs no SIP Proxy Repro e aumente a verbosidade dos logs, se necessário. Se o nível estiver definido como STACK, você vai ver cópias completas de cada mensagem SIP enviados e recebidos.
  • Conectar ao console Asterisk (comandos UNIX: rasterisco -vvvvgci) e permitir a exibição de mensagem SIP: 
    • *CLI> sip set debug on

Nenhum comentário

Toda vez que um homem supera os reveses, torna-se mentalmente e espiritualmente mais forte!

Tecnologia do Blogger.