Studiamo il motore VoIP Mediastreamer2. Parte 3

Il materiale dell'articolo è tratto dal mio canale zen.

Studiamo il motore VoIP Mediastreamer2. Parte 3

Miglioriamo l'esempio del generatore di toni

Nella parte precedente abbiamo chiarito il corretto completamento dei programmi che utilizzano il mediastreamer. Abbiamo scritto un'applicazione di generatore di toni e grazie a essa abbiamo estratto il suono dall'altoparlante del computer. Ora facciamo attenzione al fatto che il nostro programma, terminando l'esecuzione, non restituisce la memoria di nuovo nell'heap. È tempo di fare chiarezza su questa questione.

Dopo che lo schema non è più necessario, il rilascio della memoria deve iniziare con l'interruzione della pipeline dei dati. Per fare ciò, è necessario scollegare la sorgente dell'orologio dallo schema attraverso la funzione ms_ticker_detach(). Nel nostro caso, dobbiamo scollegare il ticker dall'ingresso del filtro voidsource:

ms_ticker_detach(ticker, voidsource)

A proposito, dopo aver interrotto la pipeline, possiamo modificare il suo schema e riavviarlo, ricollegando di nuovo il ticker.

Ora possiamo eliminarlo, utilizzando la funzione ms_ticker_destroy():

ms_ticker_destroy(ticker)

La pipeline è ferma e possiamo procedere alla sua separazione delle parti, scollegando i filtri. A tal fine, si utilizza la funzione ms_filter_unlink():

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

La destinazione degli argomenti è la stessa di quella della funzione ms_filter_link().

Rimuoviamo, ora già dissociati, i filtri usando ms_filter_destroy():

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

Aggiungendo queste righe al nostro esempio, otterremo una chiusura corretta del programma dal punto di vista della gestione della memoria.

Come vediamo, una corretta chiusura del programma ci ha richiesto di aggiungere circa lo stesso numero di righe di codice che abbiamo all'inizio, e in media ad ogni filtro sono state dedicate quattro righe di codice. Risulta quindi che le dimensioni del codice del programma cresceranno proporzionalmente al numero di filtri utilizzati nel progetto. Parlando di mille filtri in uno schema, al tuo codice si aggiungeranno quattromila righe di operazioni di routine per la creazione e la distruzione.

Ora sai come chiudere correttamente un programma che utilizza uno stream media. Negli esempi seguenti, per compattezza dell'esposizione, 'dimenticherò' di farlo. Ma tu non dimenticherai, vero?

Gli sviluppatori dello stream media non hanno previsto strumenti software per facilitare le operazioni con i filtri durante l'assemblaggio/disassemblaggio degli schemi. Tuttavia, c'è un helper che consente di inserire/estrarre rapidamente un filtro dallo schema.

Torniamo a discutere questa questione più avanti, quando il numero di filtri nei nostri esempi supererà una ventina.

Nel prossimo abbiamo chiarito il corretto completamento dei programmi che utilizzano il mediastreamer. Raccoglieremo lo schema del misuratore di livello del segnale e impareremo a leggere il risultato della misurazione dal filtro. Valuteremo la precisione della misurazione.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster