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);

これらの行を例に追加することで、メモリ管理の観点から正しいプログラム終了が得られます。

ご覧のとおり、プログラムを正しく完成させるには、最初とほぼ同じ行数のコードを追加する必要があり、フィルターごとに平均 4 行のコードを追加する必要がありました。プロジェクトで使用されるフィルターの数に比例して、プログラム コードのサイズが増加することがわかります。スキーム内のフィルターが 1,000 個ある場合、フィルターを作成および破棄するための 4,000 行の日常的な操作がコードに追加されます。

これで、メディア ストリーマーを使用してプログラムを正しく終了する方法がわかりました。以下の例では、簡潔にするために、これを行うことを「忘れて」います。でも忘れないよね?

メディアストリーマーの開発者は、回路の組み立て/分解中にフィルターの操作を容易にするソフトウェアツールを提供していませんでした。ただし、回路にフィルターをすばやく挿入したり、回路からフィルターを削除したりできるヘルパーがあります。

この問題は、例の中のフィルターの数が数十を超えたときに後で再度取り上げます。

статье 信号レベルメーター回路を組み立て、フィルターからの測定結果の読み方を学びます。測定精度を評価してみましょう。

出所: habr.com

DDoS 保護機能を備えた信頼性の高いサイト用ホスティング、VPS VDS サーバーを購入する 🔥 DDoS攻撃対策付きの信頼性の高いウェブサイトホスティング、VPS/VDSサーバーを購入しましょう | ProHoster