Explorons le moteur VoIP Mediastreamer2. Partie 3

Le contenu de cet article est tiré de ma chaîne Zen.

Explorons le moteur VoIP Mediastreamer2. Partie 3

Améliorons l'exemple du générateur de tonalité

Dans l'article précédent article Nous avons écrit une application de générateur de tonalité et, à l'aide de celle-ci, nous avons extrait le son du haut-parleur de l'ordinateur. Maintenant, nous allons nous pencher sur le fait que notre programme, une fois terminé, ne restitue pas la mémoire dans le tas. Il est temps d'apporter des éclaircissements à ce sujet.

Après que le schéma ne nous est plus nécessaire, la libération de la mémoire doit commencer par l'arrêt du pipeline de données. Pour ce faire, il est nécessaire de déconnecter la source de l'horloge du schéma à l'aide de la fonction ms_ticker_detach(). Dans notre cas, nous devons déconnecter le ticker de l'entrée du filtre voidsource:

ms_ticker_detach(ticker, voidsource)

Au fait, après avoir arrêté le pipeline, nous pouvons modifier son schéma et le relancer en reconnectant le ticker.

Maintenant, nous pouvons le supprimer en utilisant la fonction ms_ticker_destroy():

ms_ticker_destroy(ticker)

Le pipeline est arrêté et nous pouvons procéder au démontage de ses parties, en déconnectant les filtres. Pour cela, nous utilisons la fonction ms_filter_unlink():

ms_filter_unlink(voidsource, 0, dtmfgen, 0);
ms_filter_unlink(dtmfgen, 0, snd_card_write, 0);

la destination des arguments est la même que celle de la fonction ms_filter_link().

Nous supprimons maintenant les filtres déjà déconnectés à l'aide de ms_filter_destroy():

ms_filter_destroy(voidsource);
ms_filter_destroy(dtmfgen);
ms_filter_destroy(snd_card_write);

En ajoutant ces lignes à notre exemple, nous obtiendrons une fermeture correcte du programme du point de vue de la gestion de la mémoire.

Comme nous pouvons le voir, une fermeture correcte du programme nous a demandé d'ajouter à peu près autant de lignes de code qu'au début, soit en moyenne quatre lignes de code par filtre. Il s'avère que la taille du code de notre programme augmentera proportionnellement au nombre de filtres utilisés dans le projet. Si nous parlons de mille filtres dans le schéma, alors votre code ajoutera quatre mille lignes d'opérations routinières de création et de destruction.

Maintenant, vous savez comment fermer correctement un programme utilisant un médiastreamer. Dans les prochains exemples, par souci de compacité, je vais "oublier" de le faire. Mais vous, vous n'oublierez pas ?

Les développeurs du médiastreamer n'ont pas prévu de moyens logiciels pour faciliter la manipulation des filtres lors de l'assemblage et du démontage des schémas. Néanmoins, il y a un helper qui permet d'insérer et de retirer rapidement un filtre du schéma.

Nous reviendrons à la solution de ce problème plus tard, lorsque le nombre de filtres dans nos exemples dépassera une vingtaine.

Dans la prochaine article nous allons rassembler le schéma du niveau de signal et apprendre à lire le résultat de la mesure à partir du filtre. Évaluons la précision de la mesure.

Source : habr.com

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster