如何通过GCDWebServer在iOS上播放本地M3u8文件

时间:2015-12-03 16:51:32

标签: ios mpmovieplayercontroller avplayer http-live-streaming m3u8

我正在尝试运行本地GCDWebServer来提供我从服务器本地存储的M3U8文件。我解析了文件并将每个.ts文件保存到本地存储。现在我正试图通过本地Web服务器提供该文件,但我无法使用MPMoviePlayerController或AVPlayerViewController来播放该文件。

这是我的服务器代码:

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

以及我后来尝试播放代码:

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

我在提供本地m3u8文件的方式有什么问题吗?另外,运行本地Web服务器是一种托管内容的安全方式吗?

2 个答案:

答案 0 :(得分:2)

内容类型更改为应用程序/ vnd.apple.mpegurl ,如RFC部分 3.1

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

修改

使用此Web服务器设置,对服务器地址的请求将返回directoryPath中指出的文件夹文件列表。因此,启动HLS流的链接看起来像http://server_local_address/playlist.m3u8