Pregunta

Estoy escribiendo una aplicación, parte de la cual permite que los videos flujo de usuario / juego. Quiero limitar la funcionalidad de modo que sólo pueden transmitir vídeos si tienen una conexión WiFi. entonces voy a guardar el vídeo para que cuando tienen una conexión 3G sólo (o menor) que no pueden transmitir vídeos y sólo se pueden reproducir vídeos que se guardan en el teléfono.

Idealmente, me gustaría llegar MPMoviePlayerController para transmitir / reproducir la película y luego acceder a los datos de la película y guardarla. Sin embargo, la API MPMoviePlayerController no parece apoyar el acceso a los datos del vídeo.

Me gustaría evitar y descarga escenario-entonces-juego. ¿Alguna idea?

¿Fue útil?

Solución

Dos soluciones vienen a la mente. Tanto estas soluciones requieren que el archivo está en un formato que puede ser jugado progresiva, por ejemplo, que no es necesario todo el archivo para poder reproducirlo (pero eso sería un requisito previo de todos modos).

  1. utilizar un hilo para descargar los datos y añadirlo a un archivo, y reproducir el archivo desde otro hilo. Ahora, eso requiere que se puede manejar eventos EOF en el MPMoviePlayerController y pausar el juego hasta que el archivo de caché se añade a continuación y reanudar para el mismo punto.

Hasta ahora lo que he visto gente haciendo esto no funciona porque MPMoviePlayerController no puede controlar el evento EOF. (No probado mi auto aún) [ Almacenamiento en caché de los vídeos en el disco después de la precarga éxito por MPMoviePlayerController

  1. Saltar la reproducción de un archivo y configurar un servidor local HTTP y corriente de esa (en localhost). Esto también no se ha probado. La idea es que sería MPMoviePlayerController handlle caso de los datos que faltan mejores de una corriente de HTTP, de la lectura del archivo directamente. Inconveniente podría ser que es menos eficiente, pero creo que es un menor aumento de la CPU. No sé si la interfaz de red se ocuparía de ello, pero estoy asumiendo que no es un problema.

He de dejar esta respuesta como un wiki, porque no tengo una solución de trabajo, pero yo también quiero uno.

Otros consejos

Hay una manera de hacer este trabajo, pero usted tiene que escribir su propio HTTP Live Streaming de descarga.

Básicamente, analizar el archivo .m3u8 (que es un estándar bastante simple, pero puede ser difícil con secuencias alternativas y la posibilidad de que la corriente va a caer simplemente a cabo y la necesidad de una nueva lista de reproducción para continuar) y luego descargar los trozos en. formato TS para su almacenamiento local, por ejemplo la carpeta Documentos o cachés, etc.

A continuación, tendrá que configurar un servidor HTTP local para permitir la MPMoviePlayerController o AVPlayer para acceder a los archivos a través de HTTP (ya que no tocarán una ruta de archivo local), incluyendo un archivo de lista de reproducción re-codificado que apunta a la archivos locales, que se tendrá que crear usted mismo de la lista de reproducción original (s). CocoaHTTPServer funciona muy bien para esto.

Una vez hecho todo esto, funciona muy bien. Es inevitable que se obtiene un poco de retraso mientras se descarga el primer trozo o dos antes de la presentación de su URL HTTP local para el reproductor de películas, pero después de eso se obtiene la reproducción descarga, la grabación y la vista previa sin problemas.

Buena suerte!

el iPhone está usando descarga progresiva por lo que no va a salvar en el dispositivo. Para que usted necesita para descargar de forma explícita y luego reproducir el vídeo desde la carpeta local.

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