Imprimir

Servidores de streaming en directo por Internet en Linux

El streaming (fujo de datos) permite reproducir (escuchar o visualizar) contenidos multimedia procedentes de la red sin tener que esperar a que el archivo se haya descargado por completo, ya que la secuencia de audio/vídeo se reproduce mientras se descarga.

En el streaming en directo por Internet el contenido multimedia es reproducido a iniciativa del servidor y la señal se retransmite y se visualiza en tiempo real. Intervienen tres componentes, gráficamente:

Fuente multimedia -> Servidor streaming -> Cliente streaming
  1. Fuente multimedia: mezcla varias entradas (micrófono, webcam, archivos .mp3, CD,etc.), transforma la señal a un formato que entienda el servidor (.ogg o .mp3), empaqueta la señal y la convierte en un flujo de datos.
  2. Servidor streaming: recibe el flujo de datos (stream) y lo envía a la red.
  3. Cliente streaming: visualiza la secuencia de audio/vídeo mientras la descarga.

Hay varios servidores de streaming para Linux, pero el más utilizado es IceCast (icecast.org, paquete icecast2).

Equivalencias en Windows: ShoutCast, MS-Media Server.

IceCast

  • Puede manejar varios streams diferentes a la vez, cada uno con una URL.
  • La fuente del stream y el servidor IceCast pueden estar en la distintas máquinas, cosa que puede venir bien si donde está la fuente no hay una conexión con suficiente subida para soportar muchos clientes.
  • Si queremos poner un enlace en nuestra web a una fuente IceCast la URL será (por ejemplo):

    http://nuestro_dominio:8000/freej.ogg.m3u

  • Arranca con el script de inicio /etc/init.d/icecast2 y se configura editando /etc/icecast2/icecast.xml. Veamos algunas de las directivas:
    • número máximo de clientes:
      <clients>200</clients>

      ¿Qué ancho de banda consume el stream transmitiendo a 32 Kbps con 200 clientes?

      32 Kbps/cliente x 200 clientes = 6400 Kbps / 1024 M/K = 6.25 Mbps

    • número de sources (mounts):
      <sources>2</sources>
    • contraseña que solicitará a la fuente:
      <source-password>hackme</source-password>
    • contraseña que solicitará si retransmitimos la señal de otro servidor (relay):
      <relay-password>hackme</relay-password>
    • usuario y contraseña para administrar el servidor:
      <admin-user>admin</admin-user>
      <admin-password>hackme</admin-password>
    • puerto estándar de Icecast (ShoutCast usa el 8001):
      <port>8000</port>
    • IP o dominio:
      <hostname>localhost</hostname>

Veamos qué podemos hacer con IceCast:

  1. montar una radio en directo

    Equivalencias en Windows: Traktor.

    • IDJC (Internet DJ Console, onlymeok.nildram.co.uk, paquete idjc): fuente de audio para IceCast. Permite mezclar dos listas de reproducción, señal de micrófono, entradas JACK y llamadas Skype. Genera stream .ogg o .mp3, y puede grabar la emisión. Necesita el servidor de sonido JACK.

      IDJC

    • MuSE (Multiple Streaming Engine, muse.dyne.org, los mismos de DyneBolic, paquete muse-streamer): fuente de audio para IceCast. Puede mezclar listas de reproducción y micrófono, y grabar la salida (.ogg). Lo lanzaremos con el comando:
      $ muse-streamer

      MuSE

    • Mixxx (mixxx.sourceforge.net, paquete mixxx): aplicación DJ que permite mezclar dos listas de reproducción. Trabaja con JACK, ALSA y OSS y envía la salida a la tajeta de sonido, de manera que para montar una radio en directo con Mixxx lo que haremos será utilizar DarkIce (por ejemplo) para capturar el audio de la tarjeta de sonido y reenviarlo a IceCast.

      Mixxx

    • DJPlay (djplay.sourceforge.net, paquete djplay): aplicación para DJs programada en Qt, utiliza el servidor de sonido JACK.

      DJPlay

    • DarkIce (darkice.tyrell.hu, paquete darkice): fuente de audio para IceCast para la línea de comandos (captura el audio de la tarjeta de sonido). Tiene un frontal gráfico, DarkSnow (darksnow.radiolivre.org, paquete darksnow).

      DJPlay

    • IceS (icecast.org/ices.php, paquete ices2): fuente de audio para IceCast para la línea de comandos (captura el audio de la tarjeta de sonido). Tiene un pluging para Xmms2 (paquete xmms2-plugin-ices).
    • LiveIce (star.arm.ac.uk/~spm/software/liveice.html, paquete liveice): fuente de audio para IceCast para la línea de comandos (captura el audio de la tarjeta de sonido), dispone de un GUI en TK para configurarlo. Tiene un pluging para Xmms (paquete xmms-liveice).
  2. transmitir vídeo

    Equivalencias en Windows: WinAmp, MS-Media Encoder.

    • FreeJ (freej.dyne.org, los mismos de la distro Dynebolic, paquete freej): fuente de vídeo Ogg para IceCast, pensado para webcam y retransmisiones en vivo, ya que el sonido procede del micrófono (si hacemos stream con un .mpg no transmite el audio). Admite varias fuentes y trata cada una como una capa, pudiendo aplicarles efectos (transparencias, rotaciones, diferencias, etc.). La señal retransmitida (incluido el audio) la guarda en el archivo freej.ogg. Lo lanzaremos con el comando:
      $ freej /dev/video0 -p hackme

      Algunas opciones son:

      • -s: tamaño de la ventana ancho x alto (por defecto 400x300).
      • -T: calidad de vídeo, de 0 a 63 (63 máxima calidad, por defecto 16).
      • -V: calidad de audio, de -1 a 10 (10 máxima calidad, por defecto 1).
      • -i: ubicación de IceCast (por defecto http://localhost:8000/freej.ogg).
      • -p: source-password de IceCast.

      Una vez iniciado FreeJ, pulsaremos <Ctrl+W> y se conectará a IceCast.

      Podemos insertar el vídeo en nuestra página poniendo algo similar a:

      <embed src="http://localhost:8000/freej.ogg" type="video/ogg"
          controller="true" autoplay="true" height="256" width="320">
      </embed>

      FreeJ

    • dvgrab | ffmpeg2theora | oggfwd: fuente de vídeo para IceCast (vía pipe).
      • dvgrab (kinodv.org, paquete dvgrab): captura la señal de una videocámara vía FireWire (IEEE-1394).
      • ffmpeg2theora (v2v.cc/~j/ffmpeg2theora/, paquete ffmpeg2theora): convierte cualquier archivo que el conversor de formatos de vídeo ffmpeg pueda leer en un stream de vídeo Ogg.
      • oggfwd (v2v.cc/~j/ffmpeg2theora/oggfwd/, paquete oggfwd): redirige el stream de vídeo Ogg que le llega por la entrada estándar a Icecast.

      Para hacer stream con un .mpg:

      $ ffmpeg2theora file.mpg -o /dev/stdout
        | oggfwd localhost 8000 hackme /stream.ogg

      Para hacer stream desde la entrada de vídeo analógica (V4L):

      $ ffmpeg2theora --v4l /dev/video0 -o /dev/stdout
        | oggfwd localhost 8000 hackme /stream.ogg

      Para hacer stream desde la entrada de vídeo digital (IEEE-1394):

      $ dvgrab --format raw -
        | ffmpeg2theora  -f dv -o /dev/stdout
        | oggfwd localhost 8000 hackme /stream.ogg

      Existe un GUI para estos comandos, Theorur (theorur.tvlivre.org, paquete theorur).

      Theorur

  3. montar una radio P2P
    • PeerCast (peercast.org, paquete peercast): red P2P de streaming de audio y vídeo (P2PTV). Consume poco ancho de banda porque los clientes a su vez sirven de nodos de repetición para otros clientes.

      Veremos el listado de canales disponibles en las Yellow Pages (yp.peercast.org). Para escuchar un canal pulsaremos Play y lo podremos reproducir con VLC, Totem, Xmms, etc. (PeerCast proporciona handlers para los browsers Firefox, Konqueror, Epiphany, etc.), quedando añadido a nuestro nodo (lo veremos en Relays).

      El daemon peercast escucha en http://localhost:7144 y arranca con el script de inicio /etc/init.d/peercast-servent

      PeerCast

      Podemos emitir en la red PeerCast de varias maneras, pero la más sencilla es haciendo relay de nuestro servidor IceCast local. Entramos en la página http://localhost:7144 y en la opción Broadcast ponemos la URL, el tipo de stream (.mp3, .ogg...), bitrate, nombre, etc. y pulsamos Create Relay. PeerCast comenzará el relay de nuestra señal en la red PeerCast y nuestro canal aparecerá en las Yellow Pages en unos minutos.

23 Comentarios en “Servidores de streaming en directo por Internet en Linux”

  • Pablo dice:

    Un reportaje muy completo. Voy a intentar ponerlo en marcha. Mi enhorabuena.

  • telandweb dice:

    Super completo, no se puede pedir más. Gracias por toda la info.

  • Carlos dice:

    Te felicito, abundante información. Todo muy claro, con ejemplos, etc.
    Excelente!!
    Muchas gracias

  • Claudio dice:

    Muy bueno el articulo!!!
    Una pregunta, no tenes idea de como puedo transmitir videos bajo demanda con icecast, porque tengo un servidor propio y necesito hacer eso!!!
    O sea que ademas de realizar transmiciones en vivo, ya sean de una camara fireWire o una web-cam, ademas tener videos ya grabados y poder subirlos a icecast!!

    Muchas Gracias por el articulo

  • [...] Interesante y completo articulo sobre el arte del Streaming de audio/video en Linux…
    Por yatoiaki hace pocos segundos [...]

  • Karen dice:

    Hola!!!!!!!!!!!!, Mil gracias gracias por poner información valiosa e importante como esta en este sitio Web =) es de mucha ayuda para los que andamos metidos en este rollo!

  • Martín dice:

    Tengo un problema, quiero utilizar VLC en windows para transmitir video a mi servidor IceCast2 que esta en Linux. Utilizando el VLC parece algo muy sencillo pero en la practica no funciona, no se si le estaré errando en algo ya que de la misma máquina con winamp puedo emitir audio y no hay problema. Sera que hay que agregarle alguna configuración distinta que la de audio al xml del server icecast?

  • cloroformo dice:

    Alguien pregunto como codificar video con su webcam y enviar las imagenes a un servidor icecast2 ???
    Con visonair.tv, aki ta el link para bajar el instalador, es opensource, mu weno, simple de configurar, los frames, calidades, solo transmite en OGG.
    http://dir.visonair.tv/streamer.php

  • emerson dice:

    no encuentro la manera de compilar el internet dj console para emitir a traves de un servidor externo en mp3
    alguien puede ayudarme?

  • Emerson dice:

    Muy interesante, pero no muy real
    Para emitir con IDJC por medio de un servidor propio en ogg, puede ser
    Pero para emitir con Ubuntu con un servidor externo de pago en mp3 la cosa cambia.
    El emitir con un pequeño ancho de banda no te permite llegar a muchos usuarios
    Por lo tanto si quieres tener oyentes, haz de tener un servidor externo, mas cuando lo quieres hacer en vivo
    El caso es que no consigo los datos de compilacion para que el IDJC muestre la pestaña de formato mp3
    Todas las compilaciones restantes ya las hemos hecho
    Si alguien lo sabe, lo agradeceríamos infinitamente. Es que esto de momento nos obliga a usar Ventanitas, y eso nos hace doler el hígado.
    Gracias
    Un cordial saludo

  • Charo Montesinos dice:

    Mi familia y yo tenemos esperanza de realizar nuestro sueño de conversar y vernos nitidamente en forma simultanea y en vivo y en directo como si fuera un video bidireccional, que parezca como si estuvieramos muy cerca todos; o sea, imagen y sonido simultaneos. Con buena resolucion de imagen y sonido y sobre todo que sea comodo economicamente., nos encontramos en diferentes paises alrededor del mundo. Es la primera vez que estoy tratando estos temas modernos de internet.
    Nos hemos inspirado en la red de internet para llevar a cabo nuestro proposito
    Donde puedo conseguir este equipamiento y/o dispositivos necesarios? Agradezco anticipadamente por la gentil atencion que nos brinda a la presente.

  • CORDIAL SALUDO, ESTAMOS INTEREZADOS EN MONTAR UNA EMISORA DE RADIO POR INTERNET, ME GUSTARIA QUE ME AYUDARAN CON LA INFORMACION COMPLETA DE TODO EL PROCESO PARA MONTARLA (EQUIPOS, SERVIDORES Y DEMAS). LES AGRADECEMOS TODA LA INFORMACION QUE NOS PUEDAN ENVIAR Y QUEDAMOS A LA ESPERA DE SU RESPUESTA

  • edgar dice:

    como transmitir en este caso una transmicion de futbol tengo el stremeng contratado a 48 kbp yo estoy en el peru osea quiero transmitir de una provincia a otra mi duda es sobre la recepccion de la transmicion a una radio fm.

  • jesus dice:

    Me parece que no vi transmicion de grabaciones en tiempo real de escritorio, lo ke pasa esque kiero transmitir los videos grabados en tiempo real con XvidCap por ejemplo o camtacia se puede con icecast?

  • vaca dice:

    execelente probare con peercast gracias por la info

  • Engendro dice:

    Eres una bomba amigo!!!! Esta muy interesante este artículo y me parece muy útil. Justo lo que estaba buscando para empezar a montar un noticieron local en la ciudad. Gracias.

  • prof.yeow dice:

    que buena información para tener una radio online desde linux.

  • Ne0h dice:

    Muchas gracias, la información es de relevancia. Este tipo de información es la que debe de llenar internet.
    Saludos.

  • mon dice:

    Hola, como se puede hacer video streaming desde localhost a una pagina web pero con Red5 y gracias por tus aportes son buenísimos

  • joelgomez dice:

    motivado por tu blog y este otro http://screencasters.heathenx.org/ es que estoy empezando a crear videotutoriales es español es caso esta en como publicarlo como lo tiene http://screencasters.heathenx.org/ investigando en google se puede implementando un servidor streaming, todavia no tengo nada claro seguire investigando.
    gracias a tu blog me inicie en linux.

  • Jose Luis dice:

    muy buen aporte … hoy por la mañana me toco improvisar en mi trabajo haciendo una transminsion… y me delegaron levantar un servidor… y esta info esta excelente.. felicidades… muy dedicada la informacion.. asi deberian de ser la mayoria de tutotiales .. este muy completo…

  • Juanjo dice:

    Excelente, voy a intentar ponerlo en marcha, me hacia falta algo asi para empezar a comprenderlo. Gracias!, me abriste las puertas

  • Jan Pierre dice:

    Super completo

Deja un comentario