【问题标题】:Encrypted hls playback doesnot happen加密的 hls 播放不会发生
【发布时间】:2017-01-30 04:54:36
【问题描述】:

我正在尝试播放加密的 hls 内容。使用本地开发的名为 chunker 的工具对内容进行分块。

包含内容信息的目录被加载到想要播放块的设备上,并显示为内容的播放列表。目录指向每个内容的清单文件。

在现场场景中,当分块器正在运行并对内容进行分块时,单击播放列表时不会开始播放,它甚至不会向 d manifest 中的 url 请求解密密钥。但是一旦 chunker 停止,同样的情况就会发生。

在 iPad 上尝试使用 Safari 播放内容时也会发生完全相同的行为。

现在有趣的是,这个问题不会在 ios 模拟器或 macos 上发生,并且播放很好,但只有在 iOS 设备上,当 chunker 运行时它不会播放。

还清楚 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];
}

【问题讨论】:

  • 你是在用AVAssetResourceLoader 做这个吗,喜欢这个答案吗? stackoverflow.com/a/19604111/22147
  • 我尝试使用 AVURLAsset ,但没有运气。同样的问题。
  • 不是 AVURLAsset,而是 AVAssetResourceLoader
  • 我没有 https 服务器,那么清单文件和块只是托管在 http 服务器上,我还需要 AVAssetResourceLoader 吗?
  • 有没有办法知道播放器是否真的在下载或处理清单文件?

标签: ios avplayer http-live-streaming


【解决方案1】:

终于搞清楚是什么问题了。有趣的一个,可能会帮助其他人。 对于每个块,我们的分块器首先为密钥 uri 添加一个 EXT-X-KEY 标签,并且块标签或名称将在处理下一个块之前被附加,因此在任何时候播放列表都会以 EXT-X-KEY 标签结尾。与该标签对应的实际块将仅在创建块后添加,然后再次快速地为下一个块添加 EXT-X-KEY 标记。看起来玩家认为它在更新过程中读取了播放列表(因为最后一个 EXT-X-KEY 标签的块尚未更新)并继续尝试。当我们停止分块器时,会捕获信号并使用最后一个块更新播放列表。因此,停止播放器后,就可以玩了。 而且奇怪的是只有iOS有这个问题,macos和模拟器好像都处理过这种情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-29
    相关资源
    最近更新 更多