Wir untersuchen die Mediastreamer2 VoIP-Engine. Teil 2

Artikelmaterial aus meinem Zen-Kanal .



Erstellen Sie einen Tongenerator


Im vorherigen Artikel haben wir die Media-Streamer-Bibliothek und die Entwicklungstools installiert und ihre Funktion durch Erstellen einer Testanwendung getestet.


Heute werden wir eine Anwendung erstellen, die eine Soundkarte auf einer Soundkarte durchschauen kann. Um dieses Problem zu lösen, müssen wir die Filter an die unten gezeigte Schallgeneratorschaltung anschließen:


Tongeneratorschaltung


, . . , . . , , , . , .


, , . , . — . , ( ) . , , , . , , 10 .


. , , , . , . , — , . , , . , . , , . .


, , . . :


/*  mstest2.c */
#include <mediastreamer2/msfilter.h>
#include <mediastreamer2/msticker.h>
#include <mediastreamer2/dtmfgen.h>
#include <mediastreamer2/mssndcard.h>
int main()
{
    ms_init();

    /*   . */
    MSFilter  *voidsource = ms_filter_new(MS_VOID_SOURCE_ID);
    MSFilter  *dtmfgen = ms_filter_new(MS_DTMF_GEN_ID);
    MSSndCard *card_playback = ms_snd_card_manager_get_default_card(ms_snd_card_manager_get());
    MSFilter  *snd_card_write = ms_snd_card_create_writer(card_playback);

    /*  . */
    MSTicker *ticker = ms_ticker_new();

    /*    . */
    ms_filter_link(voidsource, 0, dtmfgen, 0);
    ms_filter_link(dtmfgen, 0, snd_card_write, 0);

   /*   . */
   ms_ticker_attach(ticker, voidsource);

   /*   . */
   char key='1';
   ms_filter_call_method(dtmfgen, MS_DTMF_GEN_PLAY, (void*)&key);

   /* , ,        .*/
   ms_sleep(2);   
}

, : voidsource, dtmfgen, snd_card_write. .


, , . , , , " " ( ).



ms_filter_link(src, src_out, dst, dst_in)

-, — ( , ). -, — .


( ). , — . , .


(DTMF) "1". ms_filter_call_method() MS_DTMF_GEN_PLAY, , .


:


$ gcc mstest2.c -o mstest2 `pkg-config mediastreamer --libs --cflags`

:


$ ./mstest2

Nach dem Starten des Programms hören Sie ein kurzes Tonsignal, das aus zwei Tönen in der Computerdynamik besteht.


Wir haben unsere erste Soundschaltung gebaut und gestartet. Wir haben gesehen, wie man Filterinstanzen erstellt, wie man eine Verbindung herstellt und wie man ihre Methoden aufruft. Mit dem ersten Erfolg zufrieden, müssen wir immer noch darauf achten, dass unser Programm den zugewiesenen Speicher vor dem Beenden nicht freigibt. Im nächsten Artikel werden wir lernen, wie wir nach uns selbst aufräumen können.


All Articles