Lors du traitement d'une vidéo en direct, vous devez enregistrer le caractèredans un conteneur tout en le retirant et en le lisant. Les utilisateurs d'Android l'ont implémenté à l'aide d'une file d'attente, mais la file d'attente iOS ne semble pas avoir cette fonction. J'ai essayé de convertir le caractèreen un. OC puis en l'enregistrant dans le tableau, les données sont récupérées et lues en parcourant le tableau. Bien sûr, le parcours du tableau doit être placé dans un sous-thread. Cette méthode d'implémentation ne pose pas de problème au début, mais elle doit être parcourue. le tableau en continu. Après avoir parcouru pendant un certain temps, il s'arrêtera automatiquement et ne traversera plus le tableau
Avez-vous un bon moyen de résoudre cette fonction ?
char *p = new char[ilen + 1];
memcpy(p, data, ilen);
NSData *data= [NSData dataWithBytes:p length:ilen];
[clientManager.dataArr addObject:data];
// Ceci traverse le tableau
[clientManager.dataArr enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
int fragment_type; NSLog(@"+++++++++++%lu",(unsigned long)clientManager.dataArr.count); NSData *data = clientManager.dataArr[0]; [clientManager.dataArr removeObjectAtIndex:0]; char* Framebuf= (char*)[data bytes]; NSLog(@"2<><><><><>>%s",Framebuf); int head_size = sizeof(FRAME_HEAD); FRAME_HEAD *frameHead = new FRAME_HEAD; memcpy(frameHead, Framebuf, head_size); int frameType = frameHead->iFrameType;
Comment pouvez-vous entrer et sortir de la pile ? La caractéristique de la pile est la suivante : premier entré, dernier sorti. Vous mettez les données de diffusion en direct dans un tableau. N'est-ce pas en streaming ? Vous continuez à les insérer et vous les retirez de 0. Comment pouvez-vous utiliser une pile pour y parvenir ? Entrées et sorties ultérieures, les anciennes données ne peuvent pas être utilisées
Vous pouvez vous référer à la méthode suivante
Comment créer et utiliser une file d'attente en Objective-C ?
Implémentation de la file d'attente Objective-C
Ce n'est pas une diffusion en direct, c'est une rediffusion. Le côté C++ ne peut pas le gérer. L'envoi de commandes vers C++ puis vers le terminal cloud nécessite un processus, nous devons donc le gérer
.