2012-03-21 15 views
11

Estoy trabajando en una pequeña aplicación para iPhone que está transmitiendo contenido de películas a través de una conexión de red usando sockets comunes. El video está en formato H.264. Sin embargo, tengo dificultades para reproducir/decodificar los datos. He estado considerando usar FFMPEG, pero la licencia lo hace inadecuado para el proyecto. He estado buscando en el marco de AVFoundation de Apple (AVPlayer en particular), que parece ser capaz de manejar contenido h264, sin embargo, solo puedo encontrar métodos para iniciar la película usando una url, no probando un búfer de memoria transmitido desde la redReproducir película h.264 de transmisión por socket en iOS con AVFoundation

que he estado haciendo algunas pruebas para que esto suceda de todos modos, utilizando los siguientes enfoques:

  1. reproducir la película usando un habitual AVPlayer. Cada vez que se reciben datos en la red, se escriben en un archivo usando fopen con append-mode. El recurso AVPlayer se vuelve a cargar/recrear con los datos actualizados. Parece que hay dos problemas con este enfoque: en primer lugar, la pantalla se pone negra por un momento mientras se descarga el primer activo y se carga el nuevo. En segundo lugar, no sé exactamente dónde se detuvo el juego, por lo que no estoy seguro de cómo encontrar el lugar correcto para comenzar a jugar con el nuevo activo.
  2. El segundo enfoque es escribir los datos en el archivo como en el primer enfoque, pero con la diferencia de que los datos se cargan en un segundo activo. A continuación, se usa un AVQueuedPlayer donde se inserta/pone en cola el segundo activo en el reproductor y luego se llama cuando se ha realizado el almacenamiento en búfer. El primer activo puede ser descargado sin una pantalla en negro. Sin embargo, usar este enfoque es aún más problemático (que el primer enfoque) para saber dónde comenzar a jugar el nuevo activo.

¿Alguien ha hecho algo así y lo ha hecho funcionar? ¿Hay una forma adecuada de hacerlo usando AVFoundation?

+0

¿Ha encontrado una respuesta a esto? Yo también estoy tratando de reproducir un archivo h264 (extensión de archivo .264) que contiene un solo cuadro e intento decodificarlo. AVAssetReader no acepta este formato de archivo y el único plan que tengo es crear un archivo mp4 por cuadro (esto suena loco). – Cthutu

+0

¿Hay alguna razón en particular por la cual la fuente tiene que empujar el video en lugar de que la aplicación lo extraiga? HLS generalmente funciona al revés. Si su máquina fuente puede ejecutar OSX, existen herramientas de Apple para realizar la segmentación desde una corriente de entrada UDP rtsp. De lo contrario, podría simular que el AVPlayer crea que se trata de un HLS normal ejecutando un proxy en el teléfono: inserte el archivo cuando llegue, y escriba un código para generar una lista de reproducción .m3u8 falsa apropiada para representar los fragmentos. –

Respuesta

0

El método oficial para hacer esto es el formato HTTP Live Streaming que admite múltiples niveles de calidad (entre otras cosas) y cambia automáticamente entre ellos (por ejemplo: si el usuario se mueve de WiFi a celular).

Puede encontrar la documentación aquí: Apple Http Streaming Docs

Cuestiones relacionadas