5

Sto tentando di eseguire un GCDWebServer locale per servire un file M3U8 che ho memorizzato localmente da un server. Ho analizzato il file e salvato ogni file .ts nella memoria locale. Ora sto cercando di servire quel file attraverso un server web locale, ma non riesco a far funzionare il file utilizzando MPMoviePlayerController o AVPlayerViewController.Come riprodurre file M3u8 locali su iOS tramite GCDWebServer

Ecco il mio codice del server:

webServer = [[GCDWebServer alloc] init]; 

[webServer addDefaultHandlerForMethod:@"GET" 
         requestClass:[GCDWebServerRequest class] 
         processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) { 

          NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
          NSString *docDirectory = [paths objectAtIndex:0]; 
          NSString *textPath = [docDirectory stringByAppendingPathComponent:@"localPlaylist.m3u8"]; 
          return [GCDWebServerDataResponse responseWithData:[NSData dataWithContentsOfFile:textPath] contentType:@".m3u8"]; 
         }]; 

[webServer startWithPort:8080 bonjourName:nil]; 

e il mio successivo tentativo di riprodurre il codice:

AVPlayerViewController *newPlayer = [[AVPlayerViewController alloc] init]; 
newPlayer.player = [[AVPlayer alloc]initWithURL:webServer.serverURL]; 
[self presentViewController:newPlayer animated:YES completion:nil]; 

C'è qualcosa che sto facendo male nel modo in cui sto servendo il file m3u8 locale? Inoltre, l'esecuzione di un server Web locale è un modo sicuro per ospitare i contenuti?

+0

Hai avuto successo nel riprodurre file m3u8 salvati localmente e blocchi crittografati/decodificati? Attualmente sto lavorando sullo stesso flusso, ho bisogno di una guida. –

risposta

2

cambiare la vostra tipo di contenuto a application/vnd.apple.mpegurl come indicato nella sezione RFC3,1

1
NSString *somePath = @"path/to/folder/with/your/playlist"; 

GCDWebServer *webServer = [[GCDWebServer alloc] init]; 
[webServer addGETHandlerForBasePath:@"/" directoryPath:somePath indexFilename:nil cacheAge:3600 allowRangeRequests:YES]; 
[webServer start]; 

Edit:

Con questa la configurazione del server web, la richiesta all'indirizzo del server verrà restituita elenco dei file della cartella che è stato indicato in directoryPath. Quindi il collegamento per avviare lo stream HLS sarà simile a http://server_local_address/playlist.m3u8