Estudamos o mecanismo VoIP do Mediastreamer2. Parte 2

Material do artigo retirado do meu canal zen .



Crie um gerador de tons


No artigo anterior , instalamos a biblioteca de streamer de mídia, as ferramentas de desenvolvimento e testamos seu funcionamento criando um aplicativo de avaliação.


Hoje criaremos um aplicativo que pode serrar através de uma placa de som em uma placa de som. Para resolver esse problema, precisamos conectar os filtros ao circuito do gerador de som mostrado abaixo:


Circuito gerador de som


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


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

Depois de iniciar o programa, você ouvirá um sinal sonoro curto, consistindo de dois tons na dinâmica do computador.


Construímos e lançamos nosso primeiro circuito de som. Vimos como criar instâncias de filtro, como conectar e como chamar seus métodos. Satisfeitos com o primeiro sucesso, ainda precisamos prestar atenção ao fato de que nosso programa não libera a memória alocada antes de terminar. No próximo artigo, aprenderemos como limpar depois de nós mesmos.


All Articles