Ancho de banda y codecs.

Me llego una pagina de servicios en la nube, el famoso cloud computing, probando las posibilidades que ofrece instale un par de servidores linux para verificar unas ideas que traigo, y en eso se me ocurrió verificar el ancho de banda que ofrecen estos servicios y hacer una observación gráfica de diferentes codecs de audio existentes en Asterisk y en un teléfono IP Aastra que cayo en mis manos.

Después de la instalación de Debian GNU/Linux y Asterisk, creamos un sencillo dialplan con el fin de crear un contador usando los dígitos existentes en el paquete de sonidos.

[default]
exten => 200,1,Goto(test,s,1) 

[test] 
exten => s,1,Answer() 
exten => s,n,Set(COUNT=${DB(test/count)}) 
exten => s,n,GotoIf($[${ISNULL(${COUNT})}]?:continue) 
exten => s,n,Set(DB(test/count)=1) 
exten => s,n,Goto(1) 
exten => s,n(continue),NoOp() 
exten => s,n,SayNumber(${COUNT}) 
exten => s,n,Set(COUNT=$[${COUNT} + 1]) 
exten => s,n,Set(DB(test/count)=${COUNT}) 
exten => s,n,Goto(1) 

Aquí vemos la ejecución donde apreciamos que el contador ya se encuentra en el número 1760, para este caso la ejecución es en GSM sin embargo cada llamada fue realizada con el codec correspondiente y para evitar conversión de un codec a otro (transcoding) se instalaron los paquetes de sonidos de cada uno de ellos.

agua*CLI> 
  == Using SIP RTP CoS mark 5
    -- Executing [200@default:1] Goto("SIP/1000-00000013", "test,s,1") in new stack
    -- Goto (test,s,1)
    -- Executing [s@test:1] Answer("SIP/1000-00000013", "") in new stack
    -- Executing [s@test:2] Set("SIP/1000-00000013", "COUNT=1759") in new stack
    -- Executing [s@test:3] GotoIf("SIP/1000-00000013", "0?:continue") in new stack
    -- Goto (test,s,6)
    -- Executing [s@test:6] NoOp("SIP/1000-00000013", "") in new stack
    -- Executing [s@test:7] SayNumber("SIP/1000-00000013", "1759") in new stack
    --  Playing 'digits/1.gsm' (language 'en')
    --  Playing 'digits/thousand.gsm' (language 'en')
    --  Playing 'digits/7.gsm' (language 'en')
    --  Playing 'digits/hundred.gsm' (language 'en')
    --  Playing 'digits/50.gsm' (language 'en')
    --  Playing 'digits/9.gsm' (language 'en')
    -- Executing [s@test:8] Set("SIP/1000-00000013", "COUNT=1760") in new stack
    -- Executing [s@test:9] Set("SIP/1000-00000013", "DB(test/count)=1760") in new stack
    -- Executing [s@test:10] Goto("SIP/1000-00000013", "1") in new stack
    -- Goto (test,s,1)
    -- Executing [s@test:1] Answer("SIP/1000-00000013", "") in new stack
    -- Executing [s@test:2] Set("SIP/1000-00000013", "COUNT=1760") in new stack
    -- Executing [s@test:3] GotoIf("SIP/1000-00000013", "0?:continue") in new stack
    -- Goto (test,s,6)
    -- Executing [s@test:6] NoOp("SIP/1000-00000013", "") in new stack
    -- Executing [s@test:7] SayNumber("SIP/1000-00000013", "1760") in new stack
    --  Playing 'digits/1.gsm' (language 'en')
    --  Playing 'digits/thousand.gsm' (language 'en')
    --  Playing 'digits/7.gsm' (language 'en')
    --  Playing 'digits/hundred.gsm' (language 'en')
    --  Playing 'digits/60.gsm' (language 'en')

Cada imagen se obtuvo mediante el programa iftop (aptitude install iftop), para darnos una idea general del uso de ancho de banda de cada codec en un flujo constante de datos, las imágenes muestran una conexión mediante IAX2 y el ejemplo del dialplan esta en SIP sin embargo es igual para ambos caso de un modo general.

Codec ALAW

Codec ULAW

Codec GSM

Codec G722

Codec G729

El ejemplo del contador fue tomado del libro Asterisk: The Future of Telephony.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: