Estudiamos el motor VoIP Mediastreamer2. Parte 2

Material del artículo tomado de mi canal zen .



Crea un generador de tonos


En el artículo anterior , instalamos la biblioteca de medios, herramientas de desarrollo y probamos su funcionamiento mediante la creación de una aplicación de prueba.


Hoy crearemos una aplicación que se puede ver a través de una tarjeta de sonido en una tarjeta de sonido. Para resolver este problema, necesitamos conectar los filtros al circuito generador de sonido que se muestra a continuación:


Circuito generador de sonido


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


, , . , . — . , ( ) . , , , . , , 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

Después de iniciar el programa, escuchará una breve señal de sonido que consta de dos tonos en la dinámica de la computadora.


Construimos y lanzamos nuestro primer circuito de sonido. Vimos cómo crear instancias de filtro, cómo conectarse y cómo llamar a sus métodos. Complacido con el primer éxito, aún debemos prestar atención al hecho de que nuestro programa no libera la memoria asignada antes de finalizar. En el próximo artículo, aprenderemos cómo limpiar después de nosotros mismos.


All Articles