我正在尝试播放加密的 hls 内容。使用本地开发的称为 chunker 的工具对内容进行分块。
包含内容信息的目录被加载到要播放 block 的设备上,并显示为内容的播放列表。目录指向每个内容的 list 文件。
在实际场景中,当分块器正在运行并对内容进行分块时,播放不会在点击播放列表时开始,它甚至不会向 d list 中的 url 请求解密 key 。但是一旦 chunker 停止,同样的事情就会发生。
尝试在 iPad 上使用 Safari 播放内容时也会发生完全相似的行为。
现在有趣的是,这个问题不会发生在 ios 模拟器或 macos 上,播放也很好,但只有 iOS 设备在分块器运行时才不会播放。
此外,清晰的 hls 内容在 iPad、macOS 和模拟器上播放得很好。任何地方的清晰内容都没有问题。
我使用的是 iOS 8.2 和 9 iPad,我使用 Avplayer 作为播放器。
有人可以给我任何线索吗?
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
NSLog(@"Trying to play media ");
NSURL *mediaUrl = [[NSURL alloc]initWithString:[[self.arrMedialist objectAtIndex:indexPath.row]objectForKey:@"url"]];
// NSURL *mediaUrl = [[NSURL alloc]initWithString:@"http://10.237.166.59/ccad/hls.m3u8"];
AVPlayer *player = [[AVPlayer alloc]initWithURL:mediaUrl];
AVPlayerViewController *controller = [[AVPlayerViewController alloc]init];
controller.player = player;
controller.showsPlaybackControls = YES;
[self presentViewController:controller animated:YES completion:nil];
NSLog(@"playing media url %@ ", mediaUrl);
[player play];
}
最佳答案
终于知道问题出在哪里了。有趣的是,可能会对其他人有所帮助。 对于每个 block ,我们的分块器首先为 key uri 添加一个 EXT-X-KEY 标签, block 标签或名称将在处理下一个 block 之前附加,因此播放列表随时都将以 EXT-X-KEY 标签结束。与此标签对应的实际 block 将仅在 block 创建后添加,然后再次快速跟随下一个 block 的 EXT-X-KEY 标签。播放器似乎认为它在更新过程中读取了播放列表(因为最后一个 EXT-X-KEY 标签的 block 尚未更新)并继续尝试。当我们停止 chunker 时,信号被捕获并且播放列表更新为最后一个 block 。因此,停止播放器后可以播放。 奇怪的是,只有iOS有这个问题,macos和模拟器似乎都处理了这个案例。
关于ios - 加密的 hls 播放不会发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39625033/