我正在尝试运行本地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服务器是一种托管内容的安全方式吗?
答案 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