2012-03-21 18 views
11

Sto lavorando a una piccola app per iPhone che sta riproducendo contenuti di film su una connessione di rete utilizzando socket regolari. Il video è nel formato H.264. Sto comunque avendo difficoltà con la riproduzione/decodifica dei dati. Stavo considerando l'utilizzo di FFMPEG, ma la licenza lo rende inadatto al progetto. Ho esaminato il framework Apple AVFoundation (AVPlayer in particolare), che sembra essere in grado di gestire il contenuto h264, tuttavia sono solo in grado di trovare i metodi per avviare il film usando un url - non provando un buffer di memoria trasmesso da il network.Riproduci filmato h.264 con socket in streaming su iOS utilizzando AVFoundation

ho fatto alcuni test per rendere questo accada in ogni caso, utilizzando i seguenti approcci:

  1. riprodurre il filmato utilizzando un normale AVPlayer. Ogni volta che i dati vengono ricevuti sulla rete, vengono scritti su un file usando fopen con la modalità append. L'asset AVPlayer viene quindi ricaricato/ricreato con i dati aggiornati. Sembra che ci siano due problemi con questo approccio: in primo luogo, lo schermo diventa nero per un breve momento mentre il primo asset viene scaricato e il nuovo caricato. In secondo luogo, non so esattamente dove si è fermato il gioco, quindi non sono sicuro di come avrei trovato il posto giusto in cui iniziare a giocare il nuovo asset.
  2. Il secondo approccio consiste nel scrivere i dati nel file come nel primo approccio, ma con la differenza che i dati vengono caricati in una seconda risorsa. Viene quindi utilizzato un AVQueuedPlayer in cui il secondo asset viene inserito/accodato nel lettore e quindi chiamato quando il buffering è stato eseguito. La prima risorsa può quindi essere scaricata senza una schermata nera. Tuttavia, usando questo approccio è ancora più problematico (rispetto al primo approccio) scoprire dove iniziare a giocare alla nuova risorsa.

Qualcuno ha fatto qualcosa del genere e ha funzionato? C'è un modo corretto per farlo usando AVFoundation?

+0

Hai trovato una risposta a questo? Anch'io sto provando a riprodurre un file h264 (estensione del file .264) contenente un singolo fotogramma e cercando di decodificarlo. AVAssetReader non accetta questo formato di file e l'unico piano che ho è quello di creare un file mp4 per frame (questo suona pazzo). – Cthutu

+0

C'è una ragione particolare per cui la sorgente deve spingere il video piuttosto che avere l'app per estrarla? HLS di solito funziona al contrario. Se il tuo computer sorgente può eseguire OSX, ci sono strumenti Apple per eseguire la segmentazione per te da un flusso di input rtsp UDP. In caso contrario, potresti evitare di far credere ad AVPlayer che si tratti di HLS normale eseguendo un proxy sul blocco del tuo file al suo arrivo e scrivere del codice per generare un'appropriata playlist .m3u8 falsa per rappresentare i blocchi. –

risposta

0

Il metodo ufficiale per eseguire questa operazione è il formato HTTP Live Streaming che supporta più livelli di qualità (tra le altre cose) e passa automaticamente da uno all'altro (ad esempio: se l'utente passa da WiFi a cellulare).

È possibile trovare la documentazione qui: Apple Http Streaming Docs

Problemi correlati