5

Tôi đang cố gắng chạy một máy chủ GCDWebServer cục bộ để phục vụ một tệp M3U8 mà tôi đã lưu trữ cục bộ từ một máy chủ. Tôi đã phân tích tệp và lưu từng tệp .ts vào bộ nhớ cục bộ. Bây giờ tôi đang cố gắng để phục vụ tập tin đó thông qua một máy chủ web địa phương, nhưng tôi không thể để có được các tập tin để chơi bằng cách sử dụng hoặc MPMoviePlayerController hoặc AVPlayerViewController.Cách chơi các tệp M3u8 cục bộ trên iOS thông qua GCDWebServer

Đây là mã máy chủ của tôi:

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]; 

và nỗ lực tiếp theo của tôi để chơi mã:

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

Có điều gì tôi đang làm sai trong cách tôi đang phục vụ tối đa các tệp m3u8 cục bộ? Ngoài ra, đang chạy một máy chủ web cục bộ một cách an toàn để lưu trữ nội dung?

+0

Bạn có thành công để phát tệp m3u8 đã lưu cục bộ và các đoạn mã được mã hóa/giải mã không? Tôi hiện đang làm việc trên cùng một dòng chảy, cần một số hướng dẫn. –

Trả lời

2

thay đổi của bạn content-type để application/vnd.apple.mpegurl như đã nêu trong RFC phần 3,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:

Với điều này thiết lập của máy chủ web, yêu cầu đến địa chỉ máy chủ sẽ trở lại danh sách các tệp của thư mục được chỉ ra trong directoryPath. Vì vậy, liên kết để khởi chạy luồng HLS sẽ giống như http://server_local_address/playlist.m3u8

Các vấn đề liên quan