Abbiamo un'app su cui stiamo lavorando che deve fornire la riproduzione di file video tramite AVPlayer. I file devono essere memorizzati sul dispositivo dell'utente, ma devono anche essere riprodotti durante il download.Download AVPlayer e video progressivi con AVURLAssets
Al momento abbiamo creato un modulo di download che utilizza la libreria ASIHTTPRequest per ottenere i file video tramite PHP (non vogliamo che il supporto sia collegabile tramite URL pubblici) e li scriva sul disco in modo asincrono.
Abbiamo quindi impostare un AVPlayer come da AV Foundation Programming Guide, ottenendo il file con AVURLAsset, facendo un AVPlayerItem con il bene, la costruzione del AVPlayer con l'oggetto, quindi impostando il lettore ad un AVPlayerLayer. Il lettore funziona perfettamente con un file video completamente scaricato ed eseguirà anche un file scaricato progressivamente perfettamente nel simulatore.
Sfortunatamente su un dispositivo reale, il comportamento del lettore cambia, dove invece carica il video una volta e non tenta di estrarre nuovi pacchetti dal disco. Il risultato è che il lettore riprodurrà video e audio fino al punto nel video che segna dove il download è stato nel momento in cui la risorsa è stata caricata (ad esempio, se vengono salvati 2 MB di dati, il giocatore viene creato, il giocatore riprodurrà solo fino a 2 MB di dati). Poiché ha l'intestazione del video, il lettore continuerà felicemente a pensare che stia riproducendo per tutta la durata del video, ma nessun altro video viene visualizzato sullo schermo.
L'ultima ruga è che se il video è inserito in una AVComposition e l'AVPlayer è stato creato con questo, il video progressivo funzionerà correttamente. Questa sarebbe una buona soluzione (ed è necessario per la nostra app in ogni caso), tranne per il fatto che il client per la nostra app richiede che il video sia riproducibile su una Apple TV via AirPlay, di cui AVCompositions è incapace.
Qualcuno sa se esiste un modo per riprodurre in modo progressivo il download di file video utilizzando un AVPlayer creato da AVURLAssets? C'è un modo per forzare il lettore/lettore a leggere dal disco con un set AVURLA come sembra fare con un AVComposition invece di mettere apparentemente in cache il video in memoria?
Grazie!
Hai mai lavorato a questo problema? In quale versione di iOS eri attivo e questo comportamento è cambiato con le versioni più recenti? –
No, non ho ancora una soluzione per questo oltre all'uso di AVComposition. Stavamo usando iOS 5.1 e 6.0 al momento e il comportamento continua ancora fino alla 6.1. –
@RobertNall Sto cercando di fare la stessa cosa con AVComposition - puoi elaborare un po 'come hai inserito il video in AVComposition? Se il lettore raggiunge EOF, la riproduzione riprende dopo aver scaricato più dati? –