探索 Mediastreamer2 VoIP 引擎。 第 3 部分

文章素材取自我 禪頻道.

探索 Mediastreamer2 VoIP 引擎。 第 3 部分

改進音調產生器範例

在上一個 文章 我們編寫了一個音訊發生器應用程序,並用它從電腦揚聲器中提取聲音。現在我們會注意到,我們的程式在完成時不會將記憶體返回到堆中。是時候澄清這個問題了。

當我們不再需要該電路後,應該從停止資料管道開始釋放記憶體。為此,您需要使用以下函數來斷開時脈源和計時器與電路的連接 ms_ticker_detach()。在我們的例子中,我們必須斷開股票代碼與過濾器輸入的連接 虛空源:

ms_ticker_detach(ticker, voidsource)

順便說一下,停止輸送機後,我們可以更改其電路並將其重新投入運行,再次連接自動收報機。

現在我們可以使用該函數刪除它 ms_ticker_destroy():

ms_ticker_destroy(ticker)

傳送帶已經停止,我們可以開始拆卸其部件,斷開過濾器。為此,請使用該函數 ms_filter_unlink():

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

參數的目的與函數相同 ms_filter_link().

我們使用以下方法刪除現在分開的過濾器 ms_filter_destroy():

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

透過將這些行添加到我們的範例中,我們將從記憶體管理的角度獲得正確的程式終止。

正如我們所看到的,程式的正確完成要求我們添加與開始時大致相同數量的程式碼行,每個過濾器平均四行程式碼。事實證明,程式碼的大小將與專案中使用的過濾器數量成比例增加。如果我們談論電路中的一千個過濾器,那麼用於創建和銷毀它們的四千行例行操作將會添加到您的程式碼中。

現在您知道如何使用媒體串流正確終止程式。在下面的例子中,為了簡潔起見,我將「忘記」這樣做。但你不會忘記嗎?

媒體串流的開發人員沒有提供軟體工具來方便在組裝/拆卸電路時操作過濾器。不過,有一個幫助程式可以讓您快速在電路中插入/移除濾波器。

當我們的範例中的過濾器數量超過幾十個時,我們將在稍後返回解決這個問題。

下一個 文章 我們將組裝一個訊號電平計電路並學習如何從濾波器讀取測量結果。我們來評估一下測量精度。

來源: www.habr.com

為具有 DDoS 保護、VPS VDS 服務器的站點購買可靠的主機 🔥 購買具備 DDoS 防護的可靠網站寄存服務,包括 VPS 和 VDS 伺服器 | ProHoster