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

Erwerben Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz, VPS VDS-Server đŸ”„ Kaufen Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster