Haciendo streaming de audio desde tu Desktop con GNU/Linux

Hoy en la tarde tuve un par de horas en la oficina y decidí probar algo que tengo pendiente desde hace ya un rato, hacer streaming de audio desde mi pc. Tengo rato ya jugando con mi micrófono usb BLUE Snowball y monte un canal de Ustream, sin embargo siempre en mi mente esta hacer difusión de una manera más libre y menos dependiente de tecnologías como flash y otros.

Al no conocer absolutamente nada de como hacer streaming, invertí un poco de tiempo en conocer las opciones que hay y me concentré en una tarea básica. Yo quería usar mi micrófono y hablar vía internet tal cual y como lo hago por Ustream, el vídeo es algo que estoy dispuesto a sacrificar.

Icecast y Darkice fueron quizás las primeras opciones y fue lo que probé. La verdad es que el proceso de configuración es bastante sencillo. Este post esta basado en lo que encontré en nwlinux.com.

Icecast solo soporta difusión vía streaming de archivos de audio en una carpeta, denominado puntos de montaje. Darkice configura una entrada de audio en vivo como un punto de montaje para Icecast.

Necesitamos estos paquetes:

  • icecast2 –servidor streaming
  • darkice – Difusor de audio en vivo y configuración
  • jackd – servidor de audio
  • libogg0 – librería de audio ogg
  • libvorbis0a – librería de audio vorbis
  • libvorbisenc2 – librería de codificación vorbis

Luego instalamos las aplicaciones, todas están en los repositorios de debian y ubuntu:

sudo apt-get install icecast2, jackd, darkice, libogg0, libvorbis0a, libvorbisenc2

Una vez instalado configuramos Icecast2 editando el archivo   /etc/icecast2/icecast.xml :

Buscamos la sección de autenticación y indicamos un password mas adecuado que “hackme” para los distintas cuentas

    <authentication>
<!– Sources log in with username ‘source’ –>
<source-password>hackme</source-password>
<!– Relays log in username ‘relay’ –>
<relay-password>hackme</relay-password>

<!– Admin logs in with the username given below –>
<admin-user>admin</admin-user>
<admin-password>hackme</admin-password>
</authentication>

También les recomiendo que copien esta configuración que ya tiene un punto de montaje especificado http://nwlinux.com/uploads/icecast.txt

Luego Habilitamos el script del servidor, editamos /etc/default/icecast2:

# Change this to true when done to enable the init.d script
ENABLE=true

luego iniciamos el servidor Icecast:

sudo  /etc/init.d/icecast2 start

Luego copien el siguiente archivo y guárdenlo como darkice.cfg en la carpeta que deseen: asegunrense de cambiar el password a el que indicaron como user source en la configuración de icecast y de indicar el dispositivo de audio en mi caso era /dev/dsp1 por que era un micrófono externo, sin embargo si usas audio interno debe ser /dev/dsp

# sample DarkIce configuration file, edit for your needs before using
# see the darkice.cfg man page for details
# this section describes general aspects of the live streaming session
[general]
duration = 0 # duration of encoding, in seconds. 0 means forever
bufferSecs = 5 # size of internal slip buffer, in seconds
reconnect = yes # reconnect to the server(s) if disconnected

# this section describes the audio input that will be streamed
[input]
device = /dev/dsp # OSS DSP soundcard device for the audio input
sampleRate = 11025 # sample rate in Hz. try 11025, 22050 or 44100
bitsPerSample = 16 # bits per sample. try 16
channel = 1 # channels. 1 = mono, 2 = stereo

# this section describes a streaming connection to an IceCast server
# there may be up to 8 of these sections, named [icecast-0] … [icecast-7]
# these can be mixed with [icecast2-x] and [shoutcast-x] sections

# this section describes a streaming connection to an IceCast2 server
# there may be up to 8 of these sections, named [icecast2-0] … [icecast2-7]
# these can be mixed with [icecast-x] and [shoutcast-x] sections
[icecast2-0]
bitrateMode = abr # average bit rate
format = vorbis # format of the stream: ogg vorbis
bitrate = 16 # bitrate of the stream sent to the server
server = wacomputing.com
# host name of the server
port = 8000 # port of the IceCast2 server, usually 8000
password = your-password # source password to the IceCast2 server
mountPoint = olypd.ogg # mount point of this stream on the IceCast2 server
name = olypd.ogg
# name of the stream
description = This is only a trial
# description of the stream
url = http://www.wacomputing.com
# URL related to the stream
genre = scanner # genre of the stream
public = yes # advertise this stream?

# this section describes a streaming connection to a ShoutCast server
# there may be up to 8 of these sections, named [shoutcast-0] … [shoutcast-7]
# these can be mixed with [icecast-x] and [icecast2-x] sections

Luego ejecutamos darkice:

darkice -c darkice.cfg

Luego de esto, en mi router redirijo conexiones locales a el puerto 8000 a mi pc y ya tengo acceso desde internet a mi streaming. Adicionalmente tengo una configuración para redireccionar mi ip dinamica a un host gratuito, hay muchos servicios como FreeDNS, NO-IP.org, dyndns, si ya han configurado salida a internet para un servidor web en Linux esto no debe ser difícil.

en mi caso al visitar midominio.org:8000 puedo ver la lista de streams disponibles, al probar puedo escuchar mi audio en linea usando el enlace M3U o XSPF.

Espero poder elaborar sobre esto y poder agregar nuevos elementos como otros flujos de audio simultáneos. Dejen sus comentarios sobre mejores practicas o experiencias.

About effiejayx

Ubuntu enthusiast... need I say more? :)
This entry was posted in Español, planetalinux. Bookmark the permalink.

2 Responses to Haciendo streaming de audio desde tu Desktop con GNU/Linux

  1. estevan says:

    compa ¿como calculo el ancho de banda requerido por el servidor icecast para 200 clientes listen a razón de 64Kbps?
    ¿existe la posibilidad REAL de que CANTV provea un ancho de banda de subida que se ajuste a lo planteado arriba?

  2. Muy buena explicación

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 )

Twitter picture

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

Facebook photo

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

Google+ photo

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

Connecting to %s