ios - 加密的 hls 播放不会发生

标签 ios avplayer http-live-streaming

我正在尝试播放加密的 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/

相关文章:

iphone - 如何从苹果应用商店中删除 iPhone 应用程序的版本?

ios - AVPlayer 在缓冲时显示和隐藏加载指示器

iphone - 如何在AVPlayer播放时开始播放下一首歌曲或识别歌曲已结束?

java - Http 流(使用 CSV 模拟实时数据流)

ios - 在 Swift 中从 CoreData 中获取数据数组

ios - 自动布局的 UIScrollView 内容大小问题

ios - Cocosd2d 和 body.m_radius 取决于设备类型

ios - AVPlayer - 检索所有格式的音轨

ffmpeg 无法转码并将输出提供给 -f mp4 的流

video-streaming - 自适应流播放器播放列表更新间隔