PJMEDIA conference bridge - direct port?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 12/19/2011 06:00 AM, Alain Totouom wrote:

> Hi Alex,
>
> hope your client is not the Texan company RevCord ;o)

Indeed not, but thanks for the heads up!  :-)

>  From what i can now guess, you don't need an extra merge_port as you
> can directly use the decoded RTP buffer buffer in your pseudo-code
> like this...

I created the merge_port because that is how I understood your initial 
step #2, "create a custom (playback) port with the needed callbacks 
put_frame/get_frame/on_destroy".  Where should I put these overrides?

> while(RTP decode into PCM frames and such into&frame) {
> 	pjmedia_frame frame;
> 	frame.buf = your RTP buffer
> 	frame.size= the size of the current frame, rtp payload size
> 	frame.type = PJMEDIA_FRAME_TYPE_AUDIO;
>        pjmedia_put_frame(rev,&frame);
>     }

Hmm.  That yields the same problem as before 
(../src/pjmedia/splitcomb.c:742: rport_put_frame: Assertion 
`frame->size == this_port->info.bytes_per_frame' failed.).  Let me try 
to enhance the clarity a little bit.

First, I am creating a conference bridge:

    pjmedia_port *conf = NULL;
    ...
    pjmedia_conf_create(pool, 3, 8000, 1,
       (8000 * PTIME) / 1000, PJMEDIA_CONF_NO_DEVICE, &conf);

Then, I am creating the splitcomb:

    pjmedia_port *split_comb = NULL;
    ...
    pjmedia_splitcomb_create(pool, 8000, 1, (8000 * PTIME) / 1000,
       16, 0, &split_comb);


Then, I'm creating the reverse channel in channel slot 0:

    pjmedia_port *conf_port = NULL;
    ...
    pjmedia_splitcomb_create_rev_channel(pool, split_comb, 0,
       0, &conf_port);

Then, I connect the splitcomb itself (not the reverse channel) to the 
bridge, by adding the conf port and then connecting it:

    unsigned split_comb_slot = 0;
    ...
    pjmedia_conf_add_port(conf, pool, split_comb, NULL,
       &split_comb_slot);

    pjmedia_conf_connect_port(conf, split_comb_slot, 0, 0));

Then, I iterate through my RTP acquisition loop, in ways that more or 
less exactly mimic pjsip-apps/src/samples/pcaputil.c, and, as you 
suggest, end up with PCM frames.  I tried your suggestion:

    pjmedia_port_put_frame(conf_port, &pcm_frame);

And got the same blank frame/assertion issue as before.

Am I misunderstanding the flow here?  Also, where does the "custom" 
port fit in?

Thanks!

-- 
Alex Balashov - Principal
Evariste Systems LLC
260 Peachtree Street NW
Suite 2200
Atlanta, GA 30303
Tel: +1-678-954-0670
Fax: +1-404-961-1892
Web: http://www.evaristesys.com/



[Index of Archives]     [Asterisk Users]     [Asterisk App Development]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [Linux API]
  Powered by Linux