2016-09-21 1 views
0

J'essaie de lire un contenu hls encypté. Le contenu est fragmenté en utilisant un outil développé localement appelé chunker.La lecture hls cryptée ne se produit pas

Un catalogue contenant des informations sur le contenu est chargé sur l'appareil qui veut lire les morceaux et est affiché comme liste de lecture du contenu. Le catalogue pointe vers le fichier manifeste de chaque contenu.

Dans le scénario en direct, lorsque le chunker est en cours d'exécution et le contenu, la lecture ne commence pas à cliquer sur la playlist, il ne fait même pas une demande à l'URL pour la clé de décryptage. Mais la même chose arrive dès que le chunker est arrêté.

Un comportement exactement similaire se produit lorsque vous essayez de lire le contenu à l'aide de Safari sur iPad.

Et maintenant la chose intéressante est, ce problème ne se produit pas avec ios simulator ou macos et la lecture est bien, mais seulement avec un appareil iOS, il ne joue pas lorsque Chunker est en cours d'exécution.

De plus, le contenu hls clair joue bien sur iPad, MacOS et simulateur. Aucun problème avec un contenu clair n'importe où.

J'ai utilisé iOS 8.2 & 9 iPad et j'ai utilisé Avplayer comme lecteur.
Quelqu'un peut-il me donner des indices à ce sujet?

-(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

Faites-vous cela avec 'AVAssetResourceLoader', comme cette réponse? http://stackoverflow.com/a/19604111/22147 –

+0

J'ai essayé d'utiliser AVURLAsset, mais pas de chance. même problème . – CodeTry

+0

Non AVURLAsset, mais AVAssetResourceLoader –

Répondre

1

Enfin compris quel était le problème. Intéressant cependant, pourrait aider les autres. Pour chaque morceau, notre chunker ajoutait un tag EXT-X-KEY pour la clé uri et le tag ou le nom du morceau était ajouté juste avant le traitement du morceau suivant, donc à tout moment la playlist se terminait par le tag EXT-X-KEY. Le bloc réel qui correspondait à cette étiquette ne sera ajouté qu'après la création du segment, puis rapidement suivi de l'étiquette EXT-X-KEY pour le segment suivant. Il semble que le joueur pense qu'il a lu la liste de lecture au milieu d'une mise à jour (puisque le morceau du dernier tag EXT-X-KEY n'est pas encore mis à jour) et continue d'essayer. Lorsque nous arrêtons le chunker, le signal est intercepté et la playlist est mise à jour avec le dernier morceau. Donc, après l'arrêt, le joueur est capable de jouer. Et bizarrement, seul iOS a ce problème, les macos et les simulateurs semblent avoir géré ce cas.