2016-09-21 242 views
0

我想播放加密hls内容。内容使用本地开发的名为chunker的工具分块。加密hls播放不会发生

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

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

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

现在有趣的是,这个问题并没有发生与ios模拟器或马科斯和回放是好的,但只有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]; 
} 
+0

你是用'AVAssetResourceLoader'做这个,就像这个答案一样吗? http://stackoverflow.com/a/19604111/22147 –

+0

我试过使用AVURLAsset,但没有运气。同样的问题 。 – CodeTry

+0

不AVURLAsset,但AVAssetResourceLoader –

回答

1

终于弄清楚是什么问题。有趣的一个,但可能会帮助其他人。 对于每个块,我们的chunker首先为关键uri添加了一个EXT-X-KEY标签,并且在处理下一个块之前将会附加块标签或名称,因此在任何时候播放列表都将以EXT-X-KEY标签结束。与该标签相对应的实际块只有在块被创建后才会被添加,然后再快速跟随下一个块的EXT-X-KEY标签。它看起来像播放器认为它在更新中读取播放列表(因为最后一个EXT-X-KEY标签的块尚未更新)并继续尝试。当我们停止chunker时,信号被捕捉并且播放列表被更新为最后的块。所以,停止后玩家可以玩。 奇怪的是,只有iOS有这个问题,macos和模拟器似乎已经处理了这种情况。