Servidor de streaming por Internet

Un servidor de streaming (fujo de datos) permite enviar por la red contenidos de audio (radio por Internet) y vídeo (TV por Internet, webcam) de manera que el cliente pueda reproducir los contenidos (escuchar o visualizar) sin esperar la descarga completa de un fichero, ya que se reproduce la secuencia de audio/vídeo mientras continúa la descarga.

Si no se utiliza streaming, para mostrar un contenido multimedia en la red primero tendremos que descargar el archivo entero para posteriormente reproducir su contenido.

El streaming puede ser en Internet o en red local:

  1. streaming por Internet: el contenido multimedia se retransmite por Internet. La iniciativa para reproducir el contenido puede ser del servidor o del cliente:
    • streaming en directo: el contenido multimedia es reproducido a iniciativa del servidor y la señal se retransmite y se visualiza en tiempo real.
    • streaming bajo demanda: el contenido multimedia es reproducido a iniciativa del cliente, por lo que puede ser visualizado en cualquier instante.

    Para visualizar la secuencia de audio/vídeo mientras la descargamos necesitaremos un cliente de streaming.

  2. streaming en red local: el contenido multimedia se retransmite en una red local, generalmente en el ámbito doméstico.
    • servidor UPnP Media Server (DLNA): es un streaming bajo demanda, ya que el contenido multimedia es reproducido por el servidor a iniciativa del cliente.

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.

Servidor de streaming IceCast

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.
  2. Transmitir vídeo.
  3. Montar una radio P2P.

Montar una radio en directo con IceCast

Con IceCast podemos 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).

Transmitir vídeo en directo con IceCast

Con IceCast podemos transmitir vídeo en directo.

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 400×300).
    • -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

Montar una radio P2P con IceCast

Con IceCast podemos 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.

Servidores de streaming bajo demanda por Internet en Linux

El streaming (fujo de datos) permite reproducir (escuchar o visualizar) contenidos multimedia en la red sin tener que descargar el archivo entero para posteriormente reproducir su contenido, ya que reproduce la secuencia de audio/vídeo mientras la descarga.

En el streaming bajo demanda por Internet el contenido multimedia es reproducido a iniciativa del cliente, por lo que puede ser visualizado en cualquier instante. Intervienen dos componentes, gráficamente:

Servidor streaming -> Cliente streaming
  1. Servidor streaming: genera la señal, la convierte en un flujo de datos (stream) y lo envía a la red.
  2. Cliente streaming: visualiza la secuencia de audio/vídeo mientras la descarga.

En Linux hay muchas aplicaciones que permiten servir archivos multimedia bajo demanda por Internet, por ejemplo:

Equivalencias en Windows: MS-Media Services.

  • GNUmp3d (gnu.org/software/gnump3d/, paquete gnump3d): servidor de streaming bajo demanda con interfaz web. Comparte un directorio (/var/music), permite navegar por los directorios y sirve bajo demanda archivos de audio (.ogg y .mp3) y de vídeo (.ogg). Accederemos al archivo /var/music/file.ogg vía web con la URL:

    http://localhost:8888/file.ogg.m3u

    GNUmp3d

Clientes de streaming por Internet en Linux

El streaming (fujo de datos) permite reproducir (escuchar o visualizar) contenidos multimedia en la red sin tener que descargar el archivo entero para posteriormente reproducir su contenido, ya que reproduce la secuencia de audio/vídeo mientras la descarga.

Para visualizar la secuencia de audio/vídeo mientras la descargamos necesitaremos un cliente de streaming por Internet, veamos qué tenemos en Linux. Nos interesa reproducir el stream y grabarlo:

Equivalencias en Windows: MS-Media Player.

Artículos en la categoría "Servidores (software)"

  1. Monitorizar servidores con Nagios
  2. Monitorizar routers SNMP con MRTG
  3. Administración de máquinas Linux con Webmin
  4. Shell remoto con Telnet
  5. Servidor DNS Bind
  6. Servidor de IPs dinámicas DHCP
  7. Servidor de hora NTP
  8. Servidor proxy Squid
  9. Servidor de correo electrónico
  10. Servidor de terminales LTSP
  11. Servidor web Apache
  12. Soporte para PHP en Apache
  13. Soporte para CGI en Apache
  14. Analizador de logs de Apache
  15. Servidor de base de datos MySQL
  16. Servidor web Lighttpd
  17. Whois: Quién es el propietario de un dominio
  18. Servidor de archivos FTP
  19. Compartir archivos en Linux: NFS
  20. Compartir archivos en Windows: Samba
  21. Control de versiones: CVS y Subversion
  22. Servidor de streaming por Internet
  23. Servidor de streaming en red local

34 Comments:

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

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

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

  4. 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

  5. Pingback:Interesante y completo articulo sobre el arte del streaming en Linux

  6. 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!

  7. 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?

  8. 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

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

  10. 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

  11. Ver videos desde mi otra pc

    Esta bueno como lo inicio para que se ejecute el programa

  12. ayuda urgente!!

    BUENAS NOCHES! MI NOMBRE ES FREDDY CHINCHILLA, ESTUDIANTE DE LA CARERA DE INGENIERIA DE COMPUTACION; LES ESCRIBO CON LA INTENSION DE SOLICITAR AYUDA; DEBIDO A QUE COMO TEMA DE TESIS ME TOCA CREAR UN SERVIDOR Q SIRVA PARA TRANSMITIR STREEM DE AUDIO EN UNA PLATAFORMA DE LINUX!! QUISIERA SABER SI ME PUEDEN DECIR SI EL UBUNTU ES RECOMENDADO PARA ESTE REQUERIMINETO!! POR FAVOR NECESITO ACESORIA SOBRE TODO LO QUE ABARCA EL SERVIDOR! LES AGRADEZCO SU AYUDA…

  13. Para el streeaming de audio usa el ICECAST2 para servidor y para tocar la musica usa el IDJC si usas ubuntu 8.10 es mas facil pues solo bajas de los repositorios estos 2 programas

    Saludos

  14. Hola, he tratado de hacer streaming de video en vivo; uso Debian y no logro entender nada. Con VLC, no encuentra la camara web y con Icecast2 y server ni siquiera aparece en el menu despues de instalarlo. Hay algo en linux que funcione como los programas de Windows? Faciles de entender y de utilizar.

  15. Hola, navegando por sus publicaciones sobre los servidores multimedia, me quedan varias dudas en la cabeza, realmente todos los tipos de streaming que presentan son muy buenos, pero creo que no me queda claro cual podría usar, mi intención es tener el servidor de forma local, que funcione bajo demanda, y que sea capaz de reproducir cualquier formato de audio y vídeo del que se disponga, a este servidor se conectaran aproximadamente de 15 a 20 computadoras, y lamentablemente el servidor no sera que digamos una maquina realmente poderosa, la idea general es que se pueda servir el contenido sin que este se vea comprometido a ser borrado o copiado, es un proyecto que se esta planteando como una solución posible dentro de una institución educativa, donde realmente se tiene material de calidad, pero con poca disponibilidad (pocos ejemplares) y poder servirlos de forma simultanea en cualquier momento realmente es una buena solución. si pudieran recomendarme un proceso mas especifico y adecuado para lo que aqu les planteo se los agradeceria.

  16. Charo Montesinos

    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.

  17. hola … me gustaria saber como puedo realizar un servidor de video en linux ….. q tengo q hacer primero y como implementar …. cualquier opinion seria de gran ayuda

  18. Roberto: El icecast se configura desde el script icecast.xml, lo puedes abrir desde la consola con nano:

    # nano /etc/icecast2/icecast.xml

    Icecast es solo el servidor de Streaming, pero debe tener un programa fuente (source) compatible y bien configurado. Y generalmente las configuraciones se hacen en los scripts, es ideal para equipos que sean solo para esta funcion, sin necesidad de entorno grafico puedes hacerlos funcionar.

    Es muy aconsejable que busques documentacion en Google. Aqui ya encontraste que programas se pueden usar pero como todo en Linux requiere mucha lectura.

    Otra nota, algunos de los programas fuente ya sea de audio o video, necesitas compilarlos desde su archivo Source (.tar.gz) para poder añadirles las funciones especificas que quisieras que tuvieran, como reproducir cierto formato especifico, etc…

    Wilmerx: Tengo una pc con procesador pentium II a 433 MHz, 192 en Ram, disco duro de 80 GB, tarjeta de Sonido ISA SoundBlaster 16 y tarjeta de red integrada a la placa madre. Sin monitor, sin teclado y sin mouse.

    Con Debian Squeeze, se administra por SSH. Reproduzco actualmente en formato .OGG con MPD e Icecast2 en mi intranet. Me falta el video, por eso llegue a esta pagina.

    Espero les ayude

  19. 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

  20. 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.

  21. Hola, te felicito, excelentes artículos. Tal vez podrías agregar en streaming bajo demanda a SubSonic, solución web bastante potente para música, reproduce a traves de flash, lista de reproducción o streaming, permite también conectar vía wap desde el celular. Se puede instalar en Linux o Windows (java)
    http://www.subsonic.org/pages/index.jsp
    Saludos

  22. solicito cotizacion

    CARACTERISTICAS
    USO DE CANAL PARA TV POR INTERNET DE 8 A 24HRS TRANSMISION CONTINUA, MINIMO 30 PUNTOS SERVIDOR DE VIDEO STREAMING
    PARA CANAL EN VIVO, CONSOLA EN LINEA PARA ADMINISTRACION DE CONTENIDO DE SERVIDOR STREAMING, FORMATO MP4 3GPP MOV WMA, ALMACENAMIENTO DE 18 GB VIDEO BAJO DEMANDA 2 GBPAS DE TRANSMISION

  23. 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?

  24. execelente probare con peercast gracias por la info

  25. 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.

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

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

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

  29. 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.

  30. 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…

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

  32. Super completo

  33. en la instalacion de IDJC en debian lenny tengo un error no se si me pudiesen ayudar con este:
    $./configure –>todo bien
    $make –> me sale este error

    install…….ok
    installl……ok
    .
    .
    .
    install……error
    make[2]: *** [idjcmixer-avcodecdecode.o] Error 1

    y no termina de instalarse si me ayudaran se los agradeceria un monton

  34. Juan Manuel carmona

    Hola buenas noches no puedo poner el ctrl w para conectar con el icecast2 solo me da ctrl h para herramientas gracias