Wir erkunden die VoIP-Engine Mediastreamer2. Teil 3

Der Inhalt dieses Artikels stammt von meinem Zen-Kanal.

Wir erkunden die VoIP-Engine Mediastreamer2. Teil 3

Verbessern wir das Beispiel des Ton-Generators

In meinem vorherigen Artikel Artikel Wir haben eine Anwendung für einen Ton-Generator geschrieben und damit Klang aus dem Computerlautsprecher extrahiert. Jetzt wollen wir klären, dass unser Programm am Ende seiner Arbeit den Speicher nicht wieder an den Heap zurückgibt. Es ist an der Zeit, hier Klarheit zu schaffen.

Nachdem die Schaltung nicht mehr benötigt wird, sollte die Speicherfreigabe mit dem Stoppen der Datenpipeline beginnen. Dazu muss die Taktsquelle von der Schaltung getrennt werden, das Ticker mittels der Funktion ms_ticker_detach(). In unserem Fall müssen wir das Ticker vom Eingang des Filters voidsource:

ms_ticker_detach(ticker, voidsource)

Übrigens können wir nach dem Stoppen der Pipeline die Schaltung ändern und erneut in Betrieb nehmen, indem wir das Ticker wieder anschließen.

Jetzt können wir es mit der Funktion ms_ticker_destroy():

ms_ticker_destroy(ticker)

Die Pipeline ist gestoppt und wir können beginnen, sie zu zerlegen, indem wir die Filter trennen. Dazu wird die Funktion ms_filter_unlink():

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

Die Argumentzuweisung ist die gleiche wie bei der Funktion ms_filter_link().

Wir entfernen nun die bereits getrennten Filter mit ms_filter_destroy():

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

Wenn wir diese Zeilen in unser Beispiel einfügen, erreichen wir ein korrektes Programmende im Hinblick auf das Speichermanagement.

Wie wir sehen, erforderte ein korrektes Programmende, dass wir ungefähr ebenso viele Codezeilen hinzufügen wie am Anfang, wobei im Durchschnitt vier Zeilen Code pro Filter notwendig waren. Das bedeutet, dass die Größe des Programmcodes proportional zur Anzahl der im Projekt verwendeten Filter wachsen wird. Wenn wir von tausend Filtern in einem Schema sprechen, kommen zu Ihrem Code viertausend Zeilen routinemäßiger Operationen zum Erstellen und Zerstören hinzu.

Jetzt wissen Sie, wie man ein Programm, das einen Medienstreamer verwendet, korrekt beendet. In den nächsten Beispielen werde ich, zur Kompaktheit der Darstellung, dies "vergessen". Aber werden Sie das vergessen?

Die Entwickler des Medienstreamers haben keine programmatischen Mittel zur Erleichterung der Manipulation mit Filtern beim Erstellen/zerlegen von Schemata vorgesehen. Es gibt jedoch einen Helper, der es ermöglicht, Filter schnell in das Schema einzufügen oder herauszunehmen.

Wir werden dieses Problem später angehen, wenn die Anzahl der Filter in unseren Beispielen mehr als ein paar Dutzend erreicht.

Im nächsten Artikel Wir werden das Schaltbild des Signalpegelsensors erstellen und lernen, das Messergebnis aus dem Filter zu lesen. Wir werden die Messgenauigkeit bewerten.

Quelle: habr.com

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster