Domanda

Sto scrivendo un app, di cui una parte permette ai video flusso di utente / gioco. Voglio limitare la funzionalità in modo che possano streaming video solo se hanno una connessione WiFi. Io poi salvare il video in modo che quando hanno una connessione solo 3G (o minore) non possono lo streaming di video e può riprodurre solo i video che vengono salvati sul telefono.

Idealmente, mi piacerebbe arrivare MPMoviePlayerController per lo streaming / riprodurre il filmato e quindi accedere ai dati di film e salvarlo. Tuttavia, l'API MPMoviePlayerController non sembra supportare l'accesso ai dati di film.

Mi piacerebbe evitare e scenario di download-poi-play. Tutte le idee?

È stato utile?

Soluzione

Due soluzioni vengono in mente. Entrambe queste soluzioni richiedono che il file è in un formato che può essere riprodotto progressiva, ad esempio che non è necessario l'intero file per essere in grado di giocare (ma che sarebbe un prerequisito comunque).

  1. utilizzare un filo per scaricare i dati e aggiungere in un file, e riprodurre il file da un altro thread. Ora, che richiede che è possibile gestire gli eventi EOF nel MPMoviePlayerController e mettere in pausa la riproduzione fino a quando il file di cache viene aggiunto e poi riprendere per lo stesso punto.

Finora quello che ho visto gente che fa questo non funziona perché MPMoviePlayerController non può gestire l'evento EOF. (Non ancora testato la mia auto) [ caching video su disco dopo precarico successo da MPMoviePlayerController

  1. Salta la riproduzione da un file e la configurazione di un server locale HTTP e flusso da quella (su localhost). Questo non è anche testato. L'idea è che MPMoviePlayerController avrebbe handlle caso di dati mancanti migliori da un flusso HTTP poi dalla lettura direttamente il file. Downside potrebbe essere che è meno efficiente, ma penso che sia un aumento minore in CPU. Non so se l'interfaccia di rete dovrebbe gestire la cosa, ma sto supponendo che non è un problema.

I lasciare questa risposta come un wiki, perché io non ho una soluzione di lavoro, ma anche io voglio uno.

Altri suggerimenti

C'è un modo per fare questo lavoro, ma si deve scrivere il proprio HTTP Live Streaming downloader.

In sostanza, si analizza il file .m3u8 (si tratta di uno standard piuttosto semplice, ma può diventare difficile con flussi alternativi e la possibilità che il flusso sarà semplicemente cadere fuori e hanno bisogno di una nuova playlist per continuare) e quindi scaricare i pezzi in. formato ts al vostro storage locale, dire che la cartella Documenti o cache, ecc.

Poi si dovrà impostare un server HTTP locale per consentire la MPMoviePlayerController o AVPlayer per accedere ai file su HTTP (dal momento che non toccheranno un percorso di file locale), tra cui un file di playlist ri-codificato che punta a file locali, che dovrete crea dalla playlist originale (s). CocoaHTTPServer grandi opere per questo.

Una volta fatto tutto questo, funziona benissimo. E 'inevitabile che si ottiene un po' di ritardo, mentre si scarica il primo blocco o due prima di presentare il vostro URL HTTP locale al giocatore di film, ma dopo che si ottiene download, la registrazione e la riproduzione di anteprima senza soluzione di continuità.

In bocca al lupo!

l'iPhone sta usando download progressivo in modo da non salvare sul dispositivo. Per questo è necessario scaricare esplicitamente e quindi riprodurre il video dalla cartella locale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top