我们研究了Mediastreamer2 VoIP引擎。第2部分

文章资料取自我的禅宗频道



创建一个音调发生器


在上一篇文章中,我们安装了媒体流媒体库,开发工具,并通过构建试用应用程序测试了它们的功能。


今天,我们将创建一个可以在声卡上穿透声卡的应用程序。为了解决这个问题,我们需要将滤波器连接到如下所示的声音发生器电路:


声音发生器电路


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


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

启动程序后,您会在计算机动态中听到由两个音调组成的短声音信号。


我们建立并启动了第一个声音电路。我们看到了如何创建过滤器实例,如何连接以及如何调用其方法。对于第一个成功感到高兴的是,我们仍然需要注意以下事实:程序在终止之前不会释放分配的内存。在下一篇文章中,我们将学习如何自己清理。


All Articles