Streaming mp4 con ffmpeg

16

Necesito crear un feed que tenga dos transmisiones: webm y mp4, para que pueda ser compatible con todos los reproductores de video HTML5. La transmisión webm funciona perfectamente. Sin embargo, al intentar acceder a la transmisión mp4, el servidor escupe el siguiente error:

Sat Mar  9 23:21:54 2013 muxer does not support non seekable output

Aquí está la parte del archivo ffserver.conf que se ocupa de la transmisión mp4:

<Stream channel1.mp4>       # Output stream URL definition
   Feed feed1.ffm              # Feed from which to receive video
   Format mp4

   # Audio settings
   AudioCodec libmp3lame
   AudioBitRate 64             # Audio bitrate

   # Video settings
   VideoCodec libx264
   VideoSize 560x320           # Video resolution
   VideoFrameRate 25           # Video FPS
   AVOptionVideo flags +global_header  # Parameters passed to encoder
                                       # (same as ffmpeg command-line parameters)
   AVOptionVideo cpu-used 0
   AVOptionVideo qmin 10
   AVOptionVideo qmax 42
   AVOptionVideo quality good
   AVOptionAudio flags +global_header
   PreRoll 15
   StartSendOnKey
   VideoBitRate 400            # Video bitrate
</Stream>

Por lo que puedo encontrar, algunas personas dicen que mp4 simplemente no se puede transmitir. No tengo ningún archivo adjunto a mp4, excepto por el hecho de que tenía la impresión de que necesitabas mp4 para transmitir video al iPhone con un reproductor de video HTML5. Si este no es el caso, avíseme y con mucho gusto cambiaré a algo que funcione mejor con la transmisión ffmpeg.

Fibericon
fuente
3
Realmente no tienes que transmitir MP4. Para el video HTML5 H.264 / MP4, debería ser suficiente codificar el archivo de video -movflags faststarto tratarlo qt-faststart, luego apuntar al archivo MP4 en la <video>etiqueta. Su servidor necesita un módulo de transmisión H.264 para permitir que el cliente busque. ¿O tienes entrada en vivo?
slhck
Mi cliente requiere que esto se transmita, quiere deshabilitar la búsqueda de clientes por completo. Está transmitiendo desde un archivo (el archivo en el servidor está en formato webm, si hace la diferencia). No puedo simplemente ocultar los controles, porque los iPhones obligan a que se muestren los controles.
Fibericon
@slhck: estoy transmitiendo la entrada de la cámara web en vivo con mp4 pero no puedo hacerlo. Funciona cuando uso flv. ¿Es posible usar mp4 para la transmisión en vivo?
John Qualis
@JohnQualis No estoy seguro si es factible con ffserver. Pero el contenedor no debería importar, realmente: los códecs son los mismos con FLV y MP4 (H.264 y AAC).
slhck
@sklhck: Lo hice funcionar con flv usando ffserver pero no con mp4. La mayoría de los navegadores web admiten mp4. Necesito algo que funcione en iPhone, Android y todos los navegadores web famosos y que sea h264 :) Y estoy transmitiendo una cámara web en vivo
John Qualis

Respuestas:

6

El artículo HTML 5 y video compatible con iPad de su propio sitio web , actualizado por última vez el 12 de noviembre de 2014, tiene esta información:

imagen

El artículo recomienda usar MP4 como una buena solución con una versión suficientemente reciente de ffmpeg, usando la codificación H.264 con AAC.

Sugiero leer el artículo con atención a los detalles: contiene un archivo HTML de ejemplo que funcionará en todos los principales navegadores, así como un comando FFmpeg de ejemplo utilizado para convertir videos a archivos .mp4 para que se transmitan correctamente.

harrymc
fuente
¿Se trata de transmisión "en vivo"?
Markus Siebeneicher
@ MarkusSiebeneicher: Sí, sobre todo.
harrymc
Todavía tengo problemas de transmisión en vivo de mp4 con ffmpeg, ya que parece no "buscable". Canalizo la salida de ffmpeg directamente al navegador, con webm funciona de inmediato. Usando el formato mp4, dice que no es buscable ... Así que realmente me pregunto qué hacer para hacer que mp4 sea "en vivo", donde no se guarde ningún video directamente como archivo (lo que lo haría buscable).
Markus Siebeneicher
@ MarkusSiebeneicher: sugiero hacer esta pregunta en una nueva publicación con detalles.
harrymc