Pregunta

Apple ha incluido HTTP Streaming adaptativo tasa de bits en el iPhone OS 3.0, en particular, se encarga de esto automáticamente Safari.

Me gustaría jugar con esto de una manera de bajo costo, pero espero que va a requerir un servidor HTTP personalizado en el peor de los casos, y PHP interesante / etc secuencias de comandos en el mejor de los casos.

Pero primero necesito saber cuáles son las diferencias de protocolo o estándar es. HTTP es razonablemente simple como un protocolo, pero el bitrate adaptativo significa que el tamaño del archivo es diferente, las localizaciones del pedazo son diferentes a diferentes tasas de bits, etc. Por ejemplo, ¿el cliente diga nada al servidor especial sobre la corriente, ya que está descargando, o es todo se maneja en el lado del servidor?

La eliminación de pausas tampón para el usuario final es muy atractivo para tanto en vivo como secuencias de vídeo pregrabado, y haciendo ambas cosas a través de HTTP es aún mejor dado muchas redes y los gobiernos están limitando el tráfico no el puerto 80.

  • ¿Cuáles son los detalles técnicos para la transmisión HTTP bitrate adaptativo, especialmente, la aplicación de Apple?
  • ¿Dónde es esto mejor implementada -? Parte del propio servidor HTTP, que forma parte de un mod, en un guión ...

  • ¿Qué cambios son necesarios para el lado del cliente, si uno fuera a implementar esto en una aplicación?

¿Fue útil?

Solución

Actualizar

Parece que Apple hizo un borrador de la propuesta del IETF, y algunas personas que ya están trabajando en segmenters:

HTTP Live Streaming - Draft-Pantos-http-live-streaming a-01
http://tools.ietf.org/id/draft -pantos-http-live-streaming a-01.txt

iPhone HTTP Streaming con FFMpeg y un Open Source Segmenter
http: // www.ioncannon.net/programming/452/iphone-http-streaming-with-ffmpeg-and-an-open-source-segmenter/


Parece que el servidor HTTP actúa simplemente como un servidor HTTP mudo. Hurgando el sitio web de ejemplo proporcionado por Akamai me da suficiente información para empezar a trabajar con streaming de contenido estático.

http://iphone.akamai.com/

El libro blanco ( http://www.akamai.com/dl/akamai/iphone_wp .pdf ) proporciona información acerca de la codificación de flujo de transporte, por lo que las corrientes .ts son sencillos.

  

El codificador (o un segmentador separada   proceso) producirá H.264 / AAC   contenido en una secuencia de contenido pequeña   segmentos, en formato MPEG-2 TS (Ts).   También hay un archivo de índice que M3U8   referencias de los segmentos; en el caso   de contenido en vivo la M3U8 es   continuamente actualizada para reflejar el   contenido más reciente.

     

Codificación H.264 debe ser de una sola pasada   Perfil de línea de base, marco de reordenación   discapacitado. fotogramas clave se sugieren   cada 5 segundos, idealmente una aún   divisor de la longitud del segmento elegido.

El sitio web proporciona un archivo M3U8, que es simplemente una lista de reproducción M3U, pero en el formato UTF-8 codificación de caracteres.

Ese archivo se vincula a un archivo M3U8 para cada tasa de bits. Asumo todos ellos deben tener cortes en las mismas posiciones (cada 2 o 10 segundos, por ejemplo) de manera que la conmutación puede ser sin costura. Parece estar totalmente orientada al cliente -. El cliente decide cómo medir el ancho de banda y la versión que se va a poner

El contenido del archivo principal son:

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=860000
hi/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=512000
med/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=160000
lo/prog_index.m3u8

A continuación, cada uno de los otros archivos son:

hi / prog_index.m3u8

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10, 
fileSequence0.ts
#EXTINF:10, 
fileSequence1.ts
#EXTINF:10, 
fileSequence2.ts
#EXTINF:10, 
fileSequence3.ts
#EXTINF:1,  
fileSequence4.ts
#EXT-X-ENDLIST

med / prog_index.m3u8

<video width="640" height="480">
   <source src="content1/content1.m3u8" />
</video>

lo / prog_index.m3u8

<*>

Esto funciona con la etiqueta HTML 5 video:

<*>

Todavía hay muchas preguntas sin respuesta, pero esto es probablemente suficiente para empezar.

Otros consejos

Y un jugador pequeño en Python + GStreamer http://code.google.com/ p / hl-jugador /

Vea esto para un codificador de código abierto y de segmentación y otras cosas interesantes:)

http://www.ioncannon.net/programming/452/iphone-http-streaming-with-ffmpeg-and-an-open-source-segmenter/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top