File di playlist (M3U8) Fornisci un altro file di playlist infinitamente non dando alcun file multimediale

StackOverflow https://stackoverflow.com/questions/9441401

Domanda

Ho un file di playlist che mi dà un altro file di playlist che mi dà anche un altro file di playlist, continuamente.
Come posso riprodurre questo file di playlist? E dove posso trovare la fonte del video?

Ad esempio, ho un file di playlist. Questo è

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=355670
http://slive.ytn.co.kr:1935/live/ylive_0624_1.sdp/playlist.m3u8?wowzasessionid=195968950

Se accetto a http://slive.ytn.co.kr:1935/live/ylive_0624_1.sdp/playlist.m3u8?wowzasessionid=195968950, mi dà altri file di playlist.

#EXTM3U
#EXT-X-ALLOW-CACHE:NO
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:894
#EXTINF:11,
media_894.ts?wowzasessionid=195968950
#EXTINF:10,
media_895.ts?wowzasessionid=195968950
#EXTINF:11,
media_896.ts?wowzasessionid=195968950

Se accetto ai risultati, mi dà anche file di playlist.

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=373764
http://slive.ytn.co.kr:1935/live/ylive_0624_1.sdp/playlist.m3u8?wowzasessionid=1093961187

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=382539
http://slive.ytn.co.kr:1935/live/ylive_0624_1.sdp/playlist.m3u8?wowzasessionid=1566364859

etc...

Anche se posso suonare l'URL http://slive.ytn.co.kr:1935/live/ylive_0624_1.sdp/playlist.m3u8?wowzasessionid=195968950 In Safari nel mio iPhone, voglio giocare a questo URL nella mia app per iPhone.
Come posso riprodurre da solo l'estensione del file M3U8?

È stato utile?

Soluzione

EDIT - può essere un duplicato di Questo è così domanda Ma se vuoi persistere al file, dovrai andare nel modo più duro elencato di seguito.

Easy Way = Embed UiWebView nella tua app e inizializzalo con l'URL del file .M3U8. Questo aprirà QuickTime che comprende M3U8 e lo suonerà mentre scarica.

Hard Way = Crea manualmente la richiesta/risposte per ogni parte della sessione M3U8 e quindi scarica ogni file .ts a sua volta dal file di playlist. Quando ottieni ogni "pezzo" del video, scrivilo su un file o su una memoria, quindi aggiungi il successivo "blocco" dopo di esso. L'ho fatto per un file .m4v codificato H.264 è servito da M3U8 e ha funzionato (il mio codice è troppo brutto per incollare) ma lo pseudocodico è:

  1. Prendere il M3U8, salvare tutti i cookie inviati e qualsiasi intestazione che può essere importante*
  2. Analizza il .M3U8 (il primo file, con #ext-x-stream-inf: programma-id = 1, larghezza di banda = 373764) e tira i nostri URL.
  3. Prendi la playlist da uno degli URL nel file .M3U8 (assicurandoti di mantenere intestazioni/cookie nella richiesta che potrebbe essere necessario)
  4. Analizza il file di playlist, salvando il numero di metadati di cui hai bisogno dalla parte superiore del file, costruisci un URL assoluto per ogni percorso .TS, quindi riempilo in un array.
  5. Iterale sull'array (di nuovo, essendo consapevole di cookie/intestazioni) e prendi il contenuto di ciascun URL .ts in un file.
  6. Riproduci il file scaricato con qualsiasi framework multimediale scelto (cerca come farlo)

Se hai solo bisogno di riprodurre i file, segui il percorso facile. Se hai bisogno di persistere loro, devi fare la danza M3U8.

*HTTP Scoop è inestimabile per vedere come funziona il "protocollo" M3U8 e per assicurarsi che le intestazioni di richiesta/risposta siano accurate - http://tuffcode.com/

*Ho usato le chiamate sincroni della vaniglia NsurlConnection poiché il mio codice era solo una prova del concetto, altri quadri di rete come AfnetWorking lo renderanno molto più semplice.

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