我正在尝试播放加密的hls内容。使用本地开发的名为chunker的工具对内容进行分块。
具有关于内容的信息的目录被加载到想要播放块的设备上并被显示为内容的播放列表。目录指向每个内容的清单文件。
在实时场景中,当chunker正在运行并且对内容进行分块时,单击播放列表时不会开始播放,它甚至不会向d清单中的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];
}
答案 0 :(得分:1)
最后想出了问题所在。有趣的是,可能会帮助别人。 对于每个块,我们的chunker首先为密钥uri添加EXT-X-KEY标记,并且在处理下一个块之前将添加块标记或名称,因此在任何时候播放列表都将以EXT-X-KEY标记结束。只有在创建块之后才会添加与此标记对应的实际块,然后再次快速跟随下一个块的EXT-X-KEY标记。看起来玩家认为它在更新过程中读取播放列表(因为最后一个EXT-X-KEY标签的块尚未更新)并继续尝试。当我们停止chunker时,捕获信号并用最后一个块更新播放列表。所以,停止后玩家可以玩。 奇怪的是,只有iOS有这个问题,macos和模拟器似乎已经处理了这种情况。