Question

Je suis en train d'écrire une application iPhone qui a besoin d'enregistrer de l'audio à partir du microphone intégré, puis envoyer que des données audio à un serveur pour le traitement.

L'application utilise une connexion socket pour se connecter au serveur audio et la file d'attente des services pour faire l'enregistrement. Ce que je ne suis pas sûr de est quand envoyer les données. Audio File d'attente des services déclenche un rappel à chaque fois qu'il a rempli un tampon avec des données audio. NSOutputStream déclenche un événement à chaque fois qu'il ya un espace disponible.

Ma première pensée était d'envoyer les données au serveur sur le rappel audio file d'attente. Mais il semble que cela se heurterait à un problème si le NSOutputStream ne dispose pas d'espace disponible à ce moment-là.

Alors je pensais en mémoire tampon les données qu'il revient de la file d'attente audio et l'envoi d'un certain chaque fois que le NSOutputStream déclenche un espace événement disponible. Mais cela semble avoir un problème si l'envoi au serveur prend de l'avance de l'enregistrement audio alors il y aura une situation où il n'y a rien à écrire sur l'espace événement disponibles, l'événement ne sera pas tiré à nouveau et le transfert de données sera effectivly être au point mort.

Alors, quelle est la meilleure façon de gérer cette situation? Dois-je avoir une minuterie qui déclenche de façon répétée et voir s'il y a l'espace disponible et il y a des données qui doit être envoyé? Aussi, je pense que je vais devoir faire une synchronisation des threads pour que je puisse prendre des morceaux de données de mon tampon pour envoyer à travers le réseau, mais aussi ajouter des morceaux de données dans la mémoire tampon comme le produit d'enregistrement sans risquer mutiler mon tampon.

Était-ce utile?

La solution

Vous pouvez utiliser un tampon circulaire pour maintenir un certain nombre de trames audio et déposer des trames si le tampon dépasse une certaine taille. Lorsque votre flux-a-espace disponible rappel est appelée, tirez un cadre hors du tampon circulaire et l'envoyer.

CHDataStructures fournit quelques tampon en anneau (qu'il appelle « tampon circulaire ») des classes .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top