Codecs y Formatos

De Asterisk Wiki
Ir a la navegación Ir a la búsqueda
Alert.png To Do
Esta página necesita ser completada.
Puedes revisar todas las páginas por completar en este enlace.


Como es común en toda comunicación de múltiples medios (multimedia), es necesario utilizar un "lenguaje" común durante la trasmisión, y en caso de querer almacenarla en nuestro sistema algun tipo de formato.

Para ello Asterisk utiliza toda una serie de Codecs y Formatos, tanto de video, como de audio, incluso de Imagen segun veremos a continuación

Reconocimiento

Para poder conocer que codecs y formatos es posible usar en nuestro sistema, accediendo a la CLI con el siguiente comando:

CLI> core show codecs


Nos aparecerá una lista especificando algunos datos con respecto a los mismos, concretamente útiles, el identificador asociado, el nombre utilizado por asterisk, el tipo y una pequeña descripción.

Para ampliar detalles, por ejemplo del codec ULAW, consultando, el identificador número 4:

CLI> core show codec 4


Nos aparece la información específica del mismo.

Hay que considerar ademas, que el uso del codec, va "inscrito" en el dispositivo que vayamos a utilizar. Si utilizamos softphones (teléfonos por ordenador) es muy probable que podamos "instalarles" cualquier codec literalmente, pero en el caso de utilizar dispositivos físicos, a no ser que el productor tenga opciones a "insertarles" nuevos codecs, cosa poco probable, tendremos que conformarnos con los que trae por defecto.

En teoría si en un punto, tenemos un teléfono última generación con un codec muy eficiente, y en el otro punto tenemos un teléfono IP muy antiguo, que utiliza un códec obsoleto, nos encontramos ante otro problema adicional. Si decidimos que el teléfono nuevo por defecto utilice el codec de máxima calidad, al llegar el audio a nuestra máquina Asterisk, esta debe convertirlo (transcoding) al estilo del códec del dispositivo más antiguo, y esta conversión en ocasiones puede suponer un consumo de CPU aun superior, que el de la propia codificación y descodificación de los medios.

En cuanto a los formatos, la forma de conocer cuales tenemos disponibles sería utilizando el comando dentro de la CLI siguiente:

CLI> core show file formats


Compromisos

Triangulo de Compromisos

En términos generales un codec básicamente es un algoritmo de compresión y descompresión, que aprovecha la potencia de las CPU para realizar una labor de mejor o peor calidad. Lo mismo se aplica para los formatos pero concretamente en el momento de escritura en fichero de almacenamiento.

Como todos los algoritmos, nos encontramos ante un triangulo en el cual, si preferimos optar por tender hacia un vértice, sacrificamos el resto. En este caso los vértices serían:

  • Uso de recursos de CPU
  • Consumo de Ancho de Banda
  • Calidad de la comunicación

Si creamos un algoritmo muy sofisticado que sea capaz de comprimir bastante el medio, y nos ofrezca una calidad de comunicación bastante aceptable, lo más probable es que estemos sacrificando una gran cantidad de Recursos de la CPU

En contrapartida, si queremos utilizar un algoritmo bastante lineal, y conservar la calidad en la comunicación, lo típico sería que el consumo de ancho de banda sea demasiado alto.

Si elegimos sacrificar la calidad en la comunicación entonces podremos permitirnos un consumo de ancho de banda ajustado, y un algoritmo relativamente lineal.

Eventualmente existen algoritmos muy sofisticados que son capaces de rendir en términos generales (menor uso de recursos, menor consumo, y máxima calidad) mucho mejor que otros menos elaborados. Pero como suele venir siendo común estos códecs están protegidos detrás de licencias de uso bastante caras y que eventualmente será decisión nuestra valorar el coste general (TOC) de la solución dado que si manejamos un alto nivel de comunicaciones, el rendimiento global podría verse afectado, y con el pago de esas licencias, conseguir un ahorro de costes a nivel de infraestructura tanto de Servidor como de Comunicaciones.

Codecs

Audio

ulaw

Este codec, es realmente conocido como G.711 pero en su versión específica para Estados Unidos. Es el tipo de codificación que utilizan los teléfonos en la red clásica de telefonía en EEUU y Canadá. Ofrece un flujo de datos de 64 kbit/s lo que puede resultar bastante alto comparado a sus "competidores" (aunque para la telefonía estándar, es un flujo de datos común). Esos 64 kbit/s recuerdan al ancho de banda, obtenido por los MODEM que se utilizaban antiguamente para conectarse a Internet y es justamente por esto, las lineas de voz, ocupaban el 100% de su ancho de banda utilizando este códec.

alaw

Es equivalente al codec ulaw, pero es el utilizado en Europa. Para configuraciones hechas en España es muy conveniente permitir este codec, y forzar los dispositivos a utilizar este códec, (u otro mejor) para intentar evitar la transcodificación.

gsm

Este codec es muy reconocido dado que se utiliza regularmente en los canales de las lineas móviles. Sus siglas hacen referencia a Global System for Mobile communications, es decir, Sistema Global para las comunicaciones móviles. Realmente no prima en la calidad sino en la cantidad, ya que el flujo de datos en una conexión Full-Rate es de solo 13kbit/s. Es un buen método para ahorrar ancho de banda ya que es casi consume 5 veces menos que el códec alaw, aunque si trabajamos en conexiones de mala calidad a nivel de tiempo de respuesta (tiempo que tarda en ir y volver un paquete enviado) o de jitter (desviación estándar del tiempo de respuesta), la voz podría llegar a distorsionarse tanto hasta ser incomprensible.

ilbc

Uno de los codecs más interesantes, creado por una empresa que compró Google, y aplicable a múltiples programas conocidos de conversación por voz, como un softphone muy popular en Linux llamado Ekiga, la convertida empresa Gizmo5 al conocido Google Voice, y como no podía ser menos, Google Talk.

Puede llegar a ofrecer niveles de calidad superiores al poderoso G729.a (vemos más adelante), y a cambio es distribuido con una licencia no Open Source, pero si de uso bastante libre, incluso es posible modificar el código. Si el dispositivo lo permite, sin duda es una gran opción permitir el uso de este códec. El flujo de datos es de tan solo 13,3 kbit/s, equivalente a GSM pero con infinita mayor calidad. El problema como suele ser lógico, es que a no ser que tuviese el algoritmo definitivo (que no es el caso), consume demasiados recursos en la CPU comparativamente al resto de los codecs.

speex

Otro códec bastante interesante desarrollado por la comunidad Xiph (también conocida por formatos reconocidos como Vorbis, Flac), y por el hecho de ser uno de los pocos 100% Open Source (Licencia BSD), y muy ajustable a nivel de nuestro sistema Asterisk. Cuando hablamos de ajustable, nos referimos a nivel de configuración (codecs.conf) podríamos elegir variar el compromiso de consumo de CPU a costa del consumo de ancho de banda o la calidad y llegar a conseguir la ajustada cantidad de solo 2kbit/s en caso que fuera necesario [1]

g722

Este codec es una "mejora" del G.711 y también su uso es gratuito y es soportado por multiples dispositivos. En esencia este puede ser el problema de utilizar uno u otro codec: Que el dispositivo que conecte con nuestro asterisk lo soporte. Comparativamente hablando con otros codecs como ilbc, y speex, este codec es muy inferior, pero en cambio ha sido más popular entre los dispositivos de telefonía, asi que, a veces sería una mejor opción que utilizar el códec alaw, en caso que se nos permita elegirlo.

g723

Este codec es un compromiso bastante aceptable entre ancho de banda, calidad y consumo, y de hecho se utiliza en conjunto con el codec de video H.323. En Asterisk solo puede ser usado en el modo pass-thru (es decir, para comunicaciones directas entre dos dispositivos que soporten este codec, parametro directmedia de SIP. Así que perderiamos mucha funcionalidad que nos ofrece Asterisk. Además no es gratuito, tiene licencias cerradas, y también se encuentra bajo los estandares de la ITU-T

g726

Como el códec G.711, también proviene de la telefonía convencional. El consumo de ancho de banda es bastante inferior (32kbit/s) y se introdujo como una mejora para aprovechar los troncales de telefonía ofrecidos por los operadores, G.726

g729

El codec G.729a es el códec que utiliza una licencia de pago más popular en el mundo de Asterisk. De hecho Digium comercializa sus licencias directamente como un producto desde su página web oficial. Este códec es todo un compromiso de calidad en todos los niveles anteriormente expuestos. Podría considerarse que en la actualidad no tiene rivales, y su algoritmo al estar patentado no es posible que sea replicado. En instalaciones bastante grandes, o en instalaciones que tengamos problemas porque el coste del ancho de banda se dispara en precio conforme vamos solitando ampliaciones, este códec podría ser muy interesante tenerlo en cuenta ya que realmente para lo que ofrece, no es excesivamente caro. Por ejemplo en una instalación de teléfonos en una sede remota, que dependen de troncales en una sede principal, y que el ancho de banda lo comparten además con otras aplicaciones de uso interno, sería una buena opción plantearse la adquisición de estas licencias.

Podríamos considerar el uso de codecs libres u Open Source como los comentados anteriormente, pero nos encontramos ante la dificultad que muchos terminales no lo soportan. Si los teléfonos no pasan por un sistema Asterisk intermedio, y conectar directamente con la central, hay que tener en cuenta, que este codec suele venir implícito en una gran cantidad de teléfonos físicos, lo que aporta un valor añadido aún superior.

Formatos

Los formatos principalmente se miden, por el nivel de compresión que afecta a la calidad, y por la tasa de bits (bitrate) que afecta al tamaño. Al igual que ocurre con los codecs, el hecho de conseguir una buen bitrate, en conjunción a una buena calidad, incluso perfecta calidad (compresión nula), supone un esfuerzo mayor en los recursos de procesamiento del sistema.

En consecuencia, podemos decir que existen múltiples formatos que no tienen ningún tipo de compresión, es decir también llamados formatos "sin perdidas", muy divulgados a raíz de las críticas por la baja calidad que ofrecían algunos formatos más populares con carácter comprimido.

Audio

GSM

Este formato, sería simplemente la traducción directa de una pista de audio basada en el códec GSM en bruto, con las mismas características a nivel de calidad y tasa de bit (en consecuencia tamaño), suele representarse con la extensión gsm aunque tambien puede tener extensión wav49.

PCM

Es un formato utilizado regularmente por los sistema de telefonía tradicionales, traducción directa de modulación por impulsos codificados, no tiene ningún tipo de compresión, ni tampoco perdida de calidad, pero suele ser el formato con los bitrates más elevados, dado que podría considerarse un tipo de grabación en "bruto". Suele utilizar las extensiones wav o pcm

WAV

Formato creado por Microsoft, que suele basarse en otros formatos pero que en esencia suele ser un tipo de formato sin compresión pero también como parecidos, suele tener tamaños considerables para la cantidad de información almacenada, dado que suele ser un formato de almacenaje en bruto. Sus distintas variantes, simplemente establecen la frecuencia y los bits, que desembocará en el nivel de la calidad de grabación.

El más utilizado en asterisk es el WAV 16 bit linear (wav16 o simplemente wav)

OGG

Su nombre viene de Ogg Vorbis, es un formato open source, también englobado dentro de la comunidad Xiph, al igual que el códec Speex. Viene a ser un posible reemplazo de los codecs más populares especialmente en Internet, donde se realiza la mayor parte de la transferencía de los mismos, como puede ser el caso de MP3, para concretamente, el estilo de formatos con compresión y cuya perdida esta basada en el nivel de esta. Se establecen 12 niveles de compresión que van desde q(-2) a q(10) siendo el máximo, el mínimo nivel de compresión y en consecuencia, el ficheros de mayor tamaño produce.

SLINEAR

Es un formato de archivo, nativo de Asterisk, que no tiene ningun tipo de compresión ni perdida de calidad en consecuencia, pero el bitrate suele ser bastante elevado. Es equivalente al formato RAW (en bruto), y suele representarse con la extensión sln.

MP3

El formato más conocido entre todos, hace referencia a MPEG Layer III, y posee licencias muy especiales de distribución. Es por estas por lo que su desarrollo dentro de Asterisk ha de hacerse de forma individual, y es altamente recomendable transformar los ficheros MP3 a otro formato más práctico para Asterisk antes de trabajar con ellos. Se considera al igual que OGG, un formato de compresión, con significativas perdidas de calidad en función de la misma

Referencias

  1. Speex Codec, Fundación Xiph

Véase también

Enlaces Externos