如何通过 GCDWebServer 在 iOS 上播放本地 M3u8 文件
Posted
技术标签:
【中文标题】如何通过 GCDWebServer 在 iOS 上播放本地 M3u8 文件【英文标题】:How to play local M3u8 files on iOS through GCDWebServer 【发布时间】:2016-03-08 09:41:59 【问题描述】:我正在尝试运行本地 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 服务器是否是托管内容的安全方式?
【问题讨论】:
你有没有成功播放本地保存的 m3u8 文件和加密/解密的块?我目前正在处理相同的流程,需要一些指导。 【参考方案1】:将您的 content-type 更改为 application/vnd.apple.mpegurl,如 RFC 部分 3.1
所述【讨论】:
【参考方案2】: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];
编辑:
通过网络服务器的这种设置,对服务器地址的请求将返回directoryPath
中指出的文件夹的文件列表。所以启动 HLS 流的链接看起来像 http://server_local_address/playlist.m3u8
【讨论】:
以上是关于如何通过 GCDWebServer 在 iOS 上播放本地 M3u8 文件的主要内容,如果未能解决你的问题,请参考以下文章