Ho postato questo sul forum degli sviluppatori Apple, proseguendo con una discussione vivace (scusate il gioco di parole). Questo era in risposta a qualcuno che ha sollevato una nozione simile.
Penso che mi corregga se sbaglio, e ci danno un esempio di come, se non siete d'accordo che la creazione di un MPEG TS dalla H264 grezzo che si ottiene dal AVCaptureVideoDataOutput non è un compito facile meno che non si transcodificare utilizzando x264 o qualcosa di simile . Supponiamo per un attimo di poter ottenere facilmente i file mpeg ts, quindi sarebbe semplice compilarli in un contenitore m3u8, avviare un piccolo server web e servirli. Per quanto ne so, e ci sono molte molte app che lo fanno, l'uso di tunnel di localhost dal dispositivo non è un problema di rifiuto. Quindi forse in qualche modo potresti generare hls dal dispositivo che interrogo sulle prestazioni che otterresti.
così via per tecnica numero 2 Sempre utilizzando AvCaptureVideoDataOutput, è catturare i fotogrammi, avvolgerli in qualche piccolo protocollo pulito, JSON o forse qualcosa di più esoterico come bencode aprire un socket e inviarli al server. Ahh ... buona fortuna avere una buona rete robusta perché l'invio di frame non compressi anche tramite Wi-Fi richiederà larghezza di banda.
così via per numero tecnica 3.
si scrive un nuovo filmato utilizzando avassetwriter e leggere indietro dal file temporaneo utilizzando funzioni standard C, questo va bene, ma quello che hai è H264 grezzo, il mp4 non è completa quindi non ha alcun moov atomi, ora arriva la parte divertente che rigenera questa intestazione. in bocca al lupo.
così via per tecnica 4 che sembra avere in realtà qualche merito
Noi non creiamo uno ma 2 avassetwriters, gestiamo utilizzando un dispatch_queue gcd, dal momento che dopo avassetwriters di istanza può essere utilizzato una sola volta, iniziamo il il primo su un timer, dopo un periodo predeterminato diciamo 10 secondi iniziamo il secondo mentre abbattiamo il primo. Ora abbiamo una serie di file .mov con atomi moov completi, ognuno di questi conteneva video h264 compresso. Ora possiamo inviarli al server e assemblarli in un unico flusso video completo. In alternativa potremmo usare un semplice streamer che prende i file MOV e li avvolge nel protocollo rtmp usando librtmp e li invia a un media server.
Se potessimo inviare ogni singolo file MOV a un altro dispositivo Apple, ottenendo così la comunicazione tra dispositivo, questa domanda è stata erroneamente interpretata molte volte, localizzare un altro dispositivo iPhone sulla stessa sottorete tramite Wi-Fi è piuttosto semplice e potrebbe essere fatto. Individuare un altro dispositivo su TCP sulla connessione cellulare è quasi magico, se può essere fatto è possibile solo su reti cellulari che utilizzano IP indirizzabili e non tutti i corrieri comuni.
Supponiamo che tu possa, quindi hai un problema aggiuntivo perché i lettori video non saranno in grado di gestire la transizione tra diversi file di film separati. Dovresti scrivere il tuo streaming player probabilmente basato sulla decodifica ffmpeg. (Questo funziona piuttosto bene)
Puoi vedere il codice ffmpeg per vedere come è fatto. – vipw
ffmpeg è l'unica soluzione economica, ci sono encoder commerciali ma costano molti soldi. L'HLS creato al telefono sarà un po 'problematico, considerato forse il rtmp, dal momento che sembra che ci siano molti pezzi sul posto. Presumo che le lacune siano perché è necessario leggere i file MOV completi che si stanno generando da avassetwriter. –