Formato para streaming desde servidor

A ver si podéis echarme una mano con una duda que tengo.

Tenemos un servidor con unos amigos donde tenemos vídeos en formato avi. El servidor usa Ubuntu 10.04 64bits. La mayoría prefieren poder ver online los vídeos a descargarlos, así que me va a tocar usar flv/mp4 para poder hacer streaming. Por razones de espacio no puedo duplicar los contenidos en avi y mp4, así que me tocaría eliminar los avi.

Tengo la duda de que el mp4 resultante tras la conversión (usando ffmpeg) sea equivalente en calidad al avi. ¿Qué códec o parámetros de conversión recomendaríais que de calidad y sea compatible con Flash para usar jwPlayer o algun reproductor similar? Además de el inconveniete de que alguno vaya a descargar los vídeos y su reproductor no admita mp4 (no creo...), ¿veis algún inconveniente más?

¡Gracias!
Algunas aclaraciones.

AVI, MP4, MKV, M4V, FLV, RMVB, WMV, MPG, OGM, etc. son algunos "Contenedores de Video" y que en resumen llamamos llanamente "archivos de video".

DivX/XviD, h.264, VC-1/WMV9, WMV8, NeroDigital, WMV8 son algunos "formatos de video".

El contenedor AVI puede llevar streams de multiples FORMATOS de AUDIO y de VIDEO pero los mas comunes son en MP3 y DivX-XviD. El formato DivX-XviD puede codificar a dimensiones y calidades de HD y FullHD.

El contenedor MP4 puede tener streams de varios formatos de audio y video, pero los mas comunes son en DivX-XviD, h.264 y AAC. La ventaja del h.264 rspecto a DivX es que tiene mejor relacion PESO_DEL_ARCHIVO/CALIDAD, es decir, tiene mayor compresion, dentro de la compresion conserva mas calidad.

el contenedor MOV -quicktime- y el FLV -video flash- en sus ultimas versiones estan usando la cabezera del contenedor MP4, con lo que en principio pueden usar los mismos streams para video y audio, es decir, podrias seguir usando el video tal cual DivX de tus archivos AVI y si acaso solo recodifciar el audio. con eso dejas instacto el video tal cual.

tambien, es una practica comun pero no recomendada que usan el contenedor AVI con streams de video codificados en h.264, si es el caso tampoco ganas nada recodificando, solo usa un multiplexor para pasar de AVI a MP4 los streams de audio y video, un multiplexor no es un softwre de codificacion,lo unico que hace es crear el archivo contenedor -en tu caso un mp4- e inyectar una copia del stream de audio y video a ese archivo, con eso se conserva instacta la calidad.

el multiplexor mas usado para MP4 es el MP4Box, aunque cualquier multiplexor a MP4 sirve.
Hola TRASTARO,

aunque quizás no me expresara muy bien, conocía un poco la diferencia entre contenedores y formatos. Con tu explicación me ha quedado más claro ;).

Imagino que la mayoría de ficheros son/serán DivX/XviD + MP3 en un contenedor AVI. Tengo claro que una de las opciones sería codificar el DivX en h.264 (reproducible por Flash) y el MP3 a AAC (no se si sería obligatorio), y meter todo a un MP4. De esta forma conservaría calidad e incluso bajaría algo el tamaño de los vídeos. El "problema" es que necesaitaría recodificar todo = CPU+tiempo.

No entiendo muy bien la opción:
el contenedor MOV -quicktime- y el FLV -video flash- en sus ultimas versiones estan usando la cabezera del contenedor MP4, con lo que en principio pueden usar los mismos streams para video y audio, es decir, podrias seguir usando el video tal cual DivX de tus archivos AVI y si acaso solo recodifciar el audio. con eso dejas instacto el video tal cual.

Usar FLV casi lo descarto ya que creo que MP4 está algo más extendido en reproductores (o me da esa impresión) y alguna vez para reproducir un FLV me he vuelto loco.

Muchísimas gracias por tu respuesta. Me has ayudado mucho.
tampoco entiendo lo del flash y porque quiers usarlo, si vas a usar flash como base este usa el contenedor FLV como contenedor de video, por eso puse lo de que Adobe adopto el contenedor MP4 y lo usa como variante en sus contenedores propietarios MOV -de quicktime- y FLV -de flash-, el servidor stream con flash usara el FLV para transmitir los streams de audio y video.

primero usa MediaInfo para averiguar como fue codifciado el stream de audio y video, despues puedes usar el mismo bitrate del audio y video al recodificar, sin importar el codificador h.264 que uses, configura PERFIL@LEVEL en automatico, frames de referencia no mas de 6, Tune lo dejas en la opcion que mejor te convenga al tipo de video, ya sea FILM, o ANIMATION o NORMAL. PRESET lo puedes dejar en FAST si quieres una codificacion rapida o en MEDIUM, codificacion rapida pero de calidad, o en SLOW, le dedica mas tiempo al analisis de los macrobloques y deteccion de movimiento, dura mas tiempo la codificacion pero la calidad es muy buena.

basicamente usando el PERFIL Baseline del h.264 tienes las mismas configuraciones del DivX basico, ya usando el MAIN tienes las opciones del DivX mas avanzado, pero es mejor dejar que el encoder decida cual es la mejor opcion a usar segun el analisis del video fuente, por ello lo que te dijera de dejarlo en automatico.

Por encoder a h.264 yo usaria el x264, que es el mas rapido, mas eficiente y de mayor calidad que existe siendo superior incluso al software comercial y que segun entioendop tambien esta disponible para Linux, el encoder propio del FFMPEG a pesar de que es muy bueno para MPEG-1, MPEG-2 para el MPEG-4 de la norma H264/AVC no me gusta mucho ni su eficiencia ni el tiempo ni los resultados.

http://mediainfo.sourceforge.net
Tengo que usar Flash ya que creo que es la única forma de hacer streaming de ficheros. Flash no acepta AVI así que de ahí la conversión.

No quiero pasar a FLV ya que el mismo fichero del que se hará streaming será el que se descargue (el que así lo quiera) y veo mejor el MP4 ya que me vale para hacer streaming con Flash y asu vez me parece más versatil a la hora de reproducirlo en diferentes dispositivos.

El Mediainfo ya tengo un script montado con el que usando XML leo idiomas o duración, así que me costaría poco añadirle más cosas.

Mañana estudio un poco todo lo que me comentas a ver como lo hago.

Muchas gracias de nuevo.

¡Buenas noches!
Tienes una opcion mas cutre xD
Bajar los ficheros y mientras se bajan verlos con programas como VLC, por ejemplo con SFTP, FTP o bien con apache te lo montas con userdir, el unico problema es que no tienes seek, es decir, no puedes empezar por la mitad de la pelicula. EL XBMC se puede configurar para que use FTP como sistema de archivos, lo que no se es como lo gestionara.
Si tienen una linea decente no habra que recodificar, yo tengo sobre 6 MB y veo ficheros de hasta 2 GB sin cortes puesto que la velocidad entre yo y mi servidor va a unos 600kbps.
Con unos 320kbps da para verlo decentemente.
colic escribió:Tienes una opcion mas cutre xD
Bajar los ficheros y mientras se bajan verlos con programas como VLC, por ejemplo con SFTP, FTP o bien con apache te lo montas con userdir, el unico problema es que no tienes seek, es decir, no puedes empezar por la mitad de la pelicula. EL XBMC se puede configurar para que use FTP como sistema de archivos, lo que no se es como lo gestionara.
Si tienen una linea decente no habra que recodificar, yo tengo sobre 6 MB y veo ficheros de hasta 2 GB sin cortes puesto que la velocidad entre yo y mi servidor va a unos 600kbps.
Con unos 320kbps da para verlo decentemente.

Para eso, y aunque te suene raro, funciona mucho mejor Windows Media PLayer. Alt+U creo que era (o abrir URL) y le metes la URL del fichero y tienes seek y todo. Me quedé alucinado de lo bien que funciona. Esa opción es la que usan ahora el que me dice que quiere verlo online :D.

@TRASTARO, he estado mirando un poco. La opción de recodificar no es viable. Pasar una vídeo de 20 min. a MP4 en el servidor me cuesta 30. El server es de OVH y con un Atom de procesador, no te digo más [+risas].

He probado a meter el video/audio en DivX a un contenedor MP4 con MP4Box y no funciona. Reconvirtiendo el sonido a AAC tampoco. Está sería la mejor opción (también la que menos recomiendas) ya que le cuesta 5 segundos y podría hacerlo en tiempo real.

Así que me parece que se van a quedar sin streaming XD. Estoy trasteando con el DivX Web Player, pero solo reproduce AVIs en DivX, así que más de la mitad no son visibles porque están en XviD. Además se necesita instalar el plug-in en el navegador, pero bueno. Somos menos de 10 personas así que no es muy grave.

¡Gracias!
con cualquier software FourCC puedes cambiar el 4CC de XviD a DivX/DivX5 de tu archivo AVI, pero yo he usado y creado para ese servicio y acepta XviD como DivX que son el mismo codec solo que uno se fue por la via privada y formar una empresa -DivX- y el otro decidio seguir en forma libre y gratuita -XviD.

hablando de la recodificacion usando WINE puedes usar Mediacoder, con mediacoder solo recodificamos el audio a AAC y dejamos el video intacto y lo metemos en un contenedor MP4, como multiplexor usa MP4Box, como encoder a AAC usa NeroDigital -HE AAC v2- o FAAC -HE AAC V1 y LC AAC-.

Arrastras los archivos AVI a la ventana de mediacoder, pestaña VIDEO, marcas COPY con eso solo copia el stream del video sin tocarlo, pestaña AUDIO, eliges formato AAC y configuras el bitrate y a CBR, pestaña CONTENEDOR, eliges MP4 y marcas AUTO-SELECT, boton START y uno a uno ira codificando los archivos AVI y tendras archivos MP4 con stream de video en DivX/XviD y audio en AAC con el mismo nombre del archivo original.

si quieres pasar el stream de video de DivX/XviD a h.264, en la pestaña VIDEO desmarcamos COPY, como FORMATO eliges h264, en la pestaña X264 el PROFILE y LEVEL dejas AUTO,frames de referencia no mas de 6, Tune lo dejas en la opcion que mejor te convenga al tipo de video, ya sea FILM, o ANIMATION o NORMAL. PRESET lo puedes dejar en FAST o ULTRA-FAST, con ULTRAFAS el PROFILE o PERFIL sera automaticamente configurado en MAIN y con ULTRA-FAST estara en BASELINE -lo mas basico y facil de decodificvar opro hardware viejo o muy poco potente en computo-

Ahora lo que no me queda claro es que software la esta haciendo de servidor streaming -y que segun se ve esta basado en flash-, o si segun parece quieres usar el servicio WEB -seguro usando apache u otro servidor web- y que puedan entrar a una pagina donde este el link del video stream y usar alguno de los tantos reproductors basados en flash.

Sobre la codificacion, ¿tan dificil sera meter los videos en una memoria USB o en un DVD o en un disco duro externo USB para codificarlo en otra computadora y despues volver a copiar essos archivos recodificados en la maquina que hara de servidor?, y si te preocupa lo de la recodificacion en ese -asco, asco, asco- atom -yo optaria por un procesador nano de VIA o un APU de AMD-, ¿te has puesto a pensar lo que le costara hacer de servidor stream para mas de una conexion simultanea?

Porque yo veria mas sencillo usar un software servidor de video stream bajo demanda y que los clientes -algun software reproductor con soporte stream- solo se conecten al puerto e IP de la maquina que la hace de servidor, con eso lo de menos es el contenedor de video y el formato del audio y video, pues seria el servidor stream el responsable de la decodificacion -por lo cual tendria que tener todos los codecs y splitters correspondientes a los archivos de video-, mientras los clientes solo reciben la señal pura de audio y video sin compresion y ya decodificada. Claro que en un -asco,asco, asco- Intel Atom decodificar el formato de video h264 le costara mucho, a menos que codifiques usando el perfil BASELINE del h264 que da las opciones de codificacion y decodificacion mas basicas para el hardware mas misero, sencillo y poco potente que exista

sencillo el mismo VLC -Video LAN CLiente-
http://n00tz.net/2008/07/vlc-media-server-ubuntu-hardy/
http://www.engadget.com/2005/11/29/how- ... using-vlc/

Mas sofisticado el Video LAN Server -VLS-, restringido a video en formato MPEG-4 [divx/xvid y h264] y MPEG-1/2 [vcd, svcd y dvd-video]
http://www.videolan.org/vlc/streaming.html

y mas laborioso el MPEG4IP, la ventaja que trae codificador de audio y video a AAC y h264 [MPEG-4 AVC] y usa contenedor MP4
http://mpeg4ip.sourceforge.net/

pense que ya no existia para estos dias el apple Darwin Server Streaming, aqui hasta ponen como configurar para usar servidor WEB -MP4WEB- de reproductor
http://linuca.org/body.phtml?nIdNoticia=170

http://www.estrellateyarde.org/discover ... g-en-linux
Hola TRASTARO,

antes de nada, agradecerte tu ayuda y tiempo. Da gusto respuestas así :).

El servidor es un Kemsirve 2G de OVH. Probablemente nos pasemos al superior este mes así que tendríamos un i5. El uso es, como apuntas en tu respuesta, para servir los videos incrustados en una web, como Youtube o MegaVideo en su momento. Tengo un miniportal montado y accedemos a él unos 15 amigos. Ahora mismo tenemos cientos de ficheros, de ahí que lo de reconvertir me de un poco de pereza.

Tengo montado un LightTPD, pero quizás me cambie a Apache el mes que viene porque lo conozco mejor y tiene más módulos complementarios. El uso de LightTPD fue por el "secure downloads" (genera un link único con un hash MD5 que expira en XX minutos), por rendimiento al tener un server tan poco potente (aunque con el trabajo que tiene creo que no es significativo) y por lo bien que dicen que va para el streaming.

Te contesto a tu respuesta trozo a trozo:

TRASTARO escribió:con cualquier software FourCC puedes cambiar el 4CC de XviD a DivX/DivX5 de tu archivo AVI, pero yo he usado y creado para ese servicio y acepta XviD como DivX que son el mismo codec solo que uno se fue por la via privada y formar una empresa -DivX- y el otro decidio seguir en forma libre y gratuita -XviD

Creo que probé con XviD y no me funcionó. Luego vuelvo a probar y si no, cambiar el 4CC me parece buena opción (aunque un poco chapucera :p). La opción del Web Player de DivX es la que va ganando puntos, por comodida y evitarme reconversiones o recodificaciones.

TRASTARO escribió:hablando de la recodificacion usando WINE puedes usar Mediacoder, con mediacoder solo recodificamos el audio a AAC y dejamos el video intacto y lo metemos en un contenedor MP4, como multiplexor usa MP4Box, como encoder a AAC usa NeroDigital -HE AAC v2- o FAAC -HE AAC V1 y LC AAC-.

Arrastras los archivos AVI a la ventana de mediacoder, pestaña VIDEO, marcas COPY con eso solo copia el stream del video sin tocarlo, pestaña AUDIO, eliges formato AAC y configuras el bitrate y a CBR, pestaña CONTENEDOR, eliges MP4 y marcas AUTO-SELECT, boton START y uno a uno ira codificando los archivos AVI y tendras archivos MP4 con stream de video en DivX/XviD y audio en AAC con el mismo nombre del archivo original.

si quieres pasar el stream de video de DivX/XviD a h.264, en la pestaña VIDEO desmarcamos COPY, como FORMATO eliges h264, en la pestaña X264 el PROFILE y LEVEL dejas AUTO,frames de referencia no mas de 6, Tune lo dejas en la opcion que mejor te convenga al tipo de video, ya sea FILM, o ANIMATION o NORMAL. PRESET lo puedes dejar en FAST o ULTRA-FAST, con ULTRAFAS el PROFILE o PERFIL sera automaticamente configurado en MAIN y con ULTRA-FAST estara en BASELINE -lo mas basico y facil de decodificvar opro hardware viejo o muy poco potente en computo-

Probaré a ver que tal, pero Wine quizás se me coma la CPU del server. La opción que comentas de recodificar solo audio creo que es la más viable. Recodificar a h264 creo que ahora mismo es inviable.

TRASTARO escribió:Ahora lo que no me queda claro es que software la esta haciendo de servidor streaming -y que segun se ve esta basado en flash-, o si segun parece quieres usar el servicio WEB -seguro usando apache u otro servidor web- y que puedan entrar a una pagina donde este el link del video stream y usar alguno de los tantos reproductors basados en flash.

Sobre la codificacion, ¿tan dificil sera meter los videos en una memoria USB o en un DVD o en un disco duro externo USB para codificarlo en otra computadora y despues volver a copiar essos archivos recodificados en la maquina que hara de servidor?, y si te preocupa lo de la recodificacion en ese -asco, asco, asco- atom -yo optaria por un procesador nano de VIA o un APU de AMD-, ¿te has puesto a pensar lo que le costara hacer de servidor stream para mas de una conexion simultanea?

Creo que con lo que te comento al principio del post contesto a esto.

TRASTARO escribió:Porque yo veria mas sencillo usar un software servidor de video stream bajo demanda y que los clientes -algun software reproductor con soporte stream- solo se conecten al puerto e IP de la maquina que la hace de servidor, con eso lo de menos es el contenedor de video y el formato del audio y video, pues seria el servidor stream el responsable de la decodificacion -por lo cual tendria que tener todos los codecs y splitters correspondientes a los archivos de video-, mientras los clientes solo reciben la señal pura de audio y video sin compresion y ya decodificada. Claro que en un -asco,asco, asco- Intel Atom decodificar el formato de video h264 le costara mucho, a menos que codifiques usando el perfil BASELINE del h264 que da las opciones de codificacion y decodificacion mas basicas para el hardware mas misero, sencillo y poco potente que exista

sencillo el mismo VLC -Video LAN CLiente-
http://n00tz.net/2008/07/vlc-media-server-ubuntu-hardy/
http://www.engadget.com/2005/11/29/how- ... using-vlc/

Mas sofisticado el Video LAN Server -VLS-, restringido a video en formato MPEG-4 [divx/xvid y h264] y MPEG-1/2 [vcd, svcd y dvd-video]
http://www.videolan.org/vlc/streaming.html

y mas laborioso el MPEG4IP, la ventaja que trae codificador de audio y video a AAC y h264 [MPEG-4 AVC] y usa contenedor MP4
http://mpeg4ip.sourceforge.net/

pense que ya no existia para estos dias el apple Darwin Server Streaming, aqui hasta ponen como configurar para usar servidor WEB -MP4WEB- de reproductor
http://linuca.org/body.phtml?nIdNoticia=170

http://www.estrellateyarde.org/discover ... g-en-linux

También me lo planteé pero no encontraba nada que me encajara del todo. El "problema", además de CPU, es que ya añado complicación al asunto (mis amigos son vagos, vagos, y solo por no abrir el VLC seguro que ni lo miraban) y creo que pierdo algo de control sobre los contenidos que sirvo. El server tiene limitado el ancho de banda y controlo que las descargas se hagan solo desde una misma IP o usuario, limito las veces que se descarga, etc. La gente está avisada del tema pero después de ver como nos clausuraban varias cuentas de filehosters por compartirla cuando supuestamente solo la usabamos tres, no me fio ni de mis amigos [+risas].

¡Un saludo!
8 respuestas