vivo transmitir transmisión transmisiones programas programa por para internet hacer directo desde como streaming h.264 mp4 mpeg mpeg-4

streaming - transmisión - transmitir en vivo youtube pc



Transmisión en vivo a través de MP4 (4)

Aquí están mis pensamientos, algunos de ellos podrían estar en lo cierto. Abogo por la ignorancia porque nadie realmente ha documentado este proceso completamente, es toda una conjetura educada.

AvAssetWriter solo codifica en un archivo, parece que no hay forma de obtener video codificado en la memoria. Al leer el archivo mientras se está escribiendo desde un hilo de fondo para decir que un socket da como resultado un flujo elemental, esto es esencialmente un m4v, que es un contenedor con h264 / acc mdata, pero no tiene átomos moov. (En otras palabras, sin encabezado). Ningún reproductor suministrado por Apple puede reproducir esta transmisión, pero un reproductor modificado basado en ffplay debería poder decodificar y reproducir la transmisión. Esto debería funcionar, porque ffplay usa libavformat que puede decodificar flujos elementales, una advertencia ya que no hay información de longitud de archivo, algunas cosas tienen que ser determinadas por la reproducción, el DTS y PTS y también el jugador no puede buscar dentro del archivo.

Alternativamente, se puede usar una naul en bruto de la corriente m4v para construir una corriente rtmp.

Si desea seguir hablando, puede contactarme directamente.

Cómo se llega a los datos.

Como tendréis que reconstruir el archivo en el lado de recepción de todos modos, supongo que podríais segmentarlo, Steve Mcfarin escribió un pequeño appleSegmentedEcorder que podéis encontrar en su página de github, esto resuelve algunos de los problemas para los átomos moov desde que tener toda la información del archivo.

Estoy trabajando en un servicio de televisión en línea. Uno de los objetivos es que el video se reproduzca sin complementos adicionales del navegador (excepto Flash).

Decidí usar MP4, ya que es compatible con la mayoría de los navegadores HTML5 y Flash (para el respaldo). Los videos están transcodificados desde ASF en un servidor por FFMpeg.

Sin embargo, descubrí que MP4 no se puede transmitir en vivo porque tiene un átomo moov para metadatos que debe especificar la longitud. FFMpeg no puede transmitir directamente mp4 a stdout, porque pone el moov al final del archivo. ( La transcodificación y transmisión en tiempo real de MP4 funciona en Android pero falla en Flash Player con el error NetStream.Play.FileStructureInvalid )

Por supuesto, MPEG-TS existe, pero no es compatible con HTML5 <video> .

Lo que pensé es un método para transcodificar el flujo en tiempo real a MP4, y en cada nueva solicitud de HTTP para él, primero envíe un moov que especifique un número muy largo para la duración del video, y luego comience a enviar el resto del Archivo MP4.

¿Es posible usar MP4 para la transmisión de esa manera?

Después de algunas investigaciones y la respuesta de av501, entiendo que los tamaños de los marcos deben conocerse para que funcionen.

¿El archivo mp4 se puede segmentar en partes más pequeñas para que pueda transmitirse?

Por supuesto, cambiar a otro contenedor / formato es una opción, pero el único formato compatible tanto con Flash como con HTML5 es mp4 / h264, así que si tengo que admitir ambos, tendré que transcodificar dos veces.


No, no es solo la longitud muy larga ... necesita conocer el tamaño exacto de cada cuadro para crear el encabezado en un mp4. [que es por lo que se crea al final por los diversos codificadores].


Puede usar MP4 fragmentado. Un archivo MP4 fragmentado se construye de la siguiente manera:

moov [moof mdat]+

El cuadro de moov solo contiene información básica sobre las pistas (cuántos, su tipo, inicialización de códec, etc.) pero no contiene información sobre las muestras en la pista. La información sobre las ubicaciones de muestra y los tamaños de muestra se encuentra en la casilla de desplazamiento, cada cuadro de desplazamiento está seguido de un mdat que contiene las muestras como se describe en el cuadro anterior de moof. Normalmente, uno elegiría la duración de un par (moof, mdat) de alrededor de 2,4 u 8 segundos (no hay ninguna especificación al respecto, pero estos valores parecen ser razonables para la mayoría de los usos).

Esta es una forma de construir una secuencia de MP4 interminable.


Solo mirando el segundo párrafo de su pregunta ("Los videos están transcodificados de ASF en un servidor por ffmpeg"), usted mencionó que está usando ffmpeg para transcodificar videos en el servidor.

Use qt-faststart o MP4Box para colocar el átomo MOOV al principio del archivo. (También se asegura de que usando el códec de audio H264 Video & AAC para soporte universal)

Espero que esto te haya ayudado.