[pjsip] Help needed with Conference Bridge performances on uclinux-nios2
Fabio Cherchi
fabio.cherchi at yahoo.it
Tue Jun 2 09:27:07 EDT 2009
Hi Benny,
thanks for your prompt reply, see comments inline.
Benny Prijono ha scritto:
> On Tue, Jun 2, 2009 at 2:12 AM, Fabio Cherchi <fabio.cherchi at yahoo.it
> <mailto:fabio.cherchi at yahoo.it>> wrote:
>
> Hi Benny,
>
> thanks for your feedback.
> I tried to apply what you are suggesting by creating a new
> pjmedia-audiodev API. I tried to do something like pa_dev.c and
> wmme_dev.c (because of it has PJMEDIA_FRAME_TYPE_EXTENDED) but
> it's no so simple.
>
>
> Well, yeah. But it shouldn't be overly complicated either. :)
>
>
> I'm wondering if the conf_switch and passthrough codec need
> necessarily a pjmedia-audiodev.
> My PCMA device is defined in the system by a char driver and it's
> talking with a variant of the streamutil by using a simple custom
> pjmedia_port connected to a standard conf bridge.
>
>
> Hmmm, I'm a bit lost here. Did you implemented a sound device at all
> for your device, or did you implement it all using a custom pjmedia_port?
I've implemented a custom pjmedia_port solution. Actually I can have 16
different audio devices (1 each pcma channel) and related streams. I
tried in the past to use either the conf bridge, or a master port for
each channel, to connect them.
>
> If all you did so far is implementing it with a custom pjmedia_port
> and you don't have existing sound device implementation, actually you
> don't need to implement a pjmedia-audiodev device for this. You can
> just modify your pjmedia_port to work with PJMEDIA_FRAME_TYPE_EXTENDED
> rather than normal PCM frames.
Above solution looks the best, I should only add the extended frame
additional info.
>
>
> Then you can use any existing pjmedia-audiodev device (or a master
> clock) to drive the conf_switch clock. But, you won't be able to
> connect anything to slot 0 in the conf_switch, since slot 0 has PCM
> format. I don't think this is a problem if you've implemented your
> device as pjmedia_port.
In fact I don't need the slot 0 with the audiodev.
>
>
> Is it possible to re-use the same code, by simply replacing the
> conf bridge with the conf switch and by removing the pcma2linear
> conversion?
>
>
> I don't think so. There are other checks in the code, especially to
> handle the size conversion between PCM and PCMA.
So definitely there is no way to use passthrough codec + conf switch if
I don't use the audio device solution?
>
> cheers
> Benny
Thanks your feedback is really appreciated.
fabio
>
>
>
> Otherwise I'll continue to create the pjmedia-audiodev.
>
>
> Thanks a lot,
> Fabio
>
> Benny Prijono ha scritto:
>> Sorry for the delay, just back from traveling. And sorry again if
>> I'm not clear with the instructions. So for your system, you will
>> need to create an audio device abstraction based on the new
>> pjmedia-audiodev API. In this sound device abstraction, you'll
>> need to support PCMA.
>>
>> Then add a config macro to add support for your sound device (e.g
>> PJMEDIA_AUDIO_DEV_HAS_MY_DEV), and add your sound device factory
>> initialization in audiodev.c.
>>
>> Then activate the settings in config_site.h, e.g.
>> #define PJMEDIA_AUDIO_DEV_HAS_MY_DEV 1
>> #define PJMEDIA_AUDIO_DEV_HAS_PORTAUDIO 0
>> #define PJMEDIA_AUDIO_DEV_HAS_SYMB_APS 0
>>
>> Something like that.
>>
>> cheers
>> Benny
>>
>>
>> On Mon, May 25, 2009 at 9:16 PM, Fabio Cherchi
>> <fabio.cherchi at yahoo.it <mailto:fabio.cherchi at yahoo.it>> wrote:
>>
>> Hi Benny and all,
>>
>> I'm still stucked to the project make problems above mentioned.
>> My understanding is that to build the project I should follow
>> building step explained here
>> (http://trac.pjsip.org/repos/wiki/APS).
>> Given that I'm not developing on Symbian I would like to know
>> if there is a workaround to enable the Conference Switch and
>> Passthrough Codecs features without using Symbian related
>> libraries and software.
>>
>> Thanks a lot,
>> Fabio
>>
>> Fabio Cherchi ha scritto:
>>> Hi Benny,
>>>
>>> thanks a lot for the suggestion. You are right, the
>>> APS-Direct feature seems fitting the purposes of my application.
>>>
>>> At the moment I've some issue with building the pjproject.
>>> Basically, following instructions I prepared a config_site.h
>>> with the following flags:
>>>
>>> #define PJMEDIA_CONF_USE_SWITCH_BOARD 1
>>>
>>> #define PJMEDIA_AUDIO_DEV_HAS_PORTAUDIO 0
>>> #define PJMEDIA_AUDIO_DEV_HAS_SYMB_APS 1
>>>
>>> #define PJMEDIA_HAS_PASSTHROUGH_CODECS 1
>>>
>>> /* Only PCMA will be supported */
>>> #define PJMEDIA_HAS_PASSTHROUGH_CODEC_PCMU 0
>>> #define PJMEDIA_HAS_PASSTHROUGH_CODEC_PCMA 1
>>> #define PJMEDIA_HAS_PASSTHROUGH_CODEC_AMR 0
>>> #define PJMEDIA_HAS_PASSTHROUGH_CODEC_G729 0
>>> #define PJMEDIA_HAS_PASSTHROUGH_CODEC_ILBC 0
>>>
>>> # define PJMEDIA_HAS_G711_CODEC 0
>>> # define PJMEDIA_HAS_L16_CODEC 0
>>> # define PJMEDIA_HAS_ILBC_CODEC 0
>>> # define PJMEDIA_HAS_G722_CODEC 0
>>> # define PJMEDIA_HAS_GSM_CODEC 0
>>> # define PJMEDIA_HAS_SPEEX_CODEC 0
>>>
>>> But during "make" I got the following errors:
>>>
>>> gcc -o ../bin/pjmedia-test-i686-pc-linux-gnu \
>>>
>>> output/pjmedia-test-i686-pc-linux-gnu/codec_vectors.o
>>> output/pjmedia-test-i686-pc-linux-gnu/jbuf_test.o
>>> output/pjmedia-test-i686-pc-linux-gnu/main.o
>>> output/pjmedia-test-i686-pc-linux-gnu/mips_test.o
>>> output/pjmedia-test-i686-pc-linux-gnu/rtp_test.o
>>> output/pjmedia-test-i686-pc-linux-gnu/test.o
>>> output/pjmedia-test-i686-pc-linux-gnu/sdp_neg_test.o
>>> .../lib/libpjmedia-i686-pc-linux-gnu.a
>>> .../lib/libpjmedia-audiodev-i686-pc-linux-gnu.a
>>> .../lib/libpjmedia-codec-i686-pc-linux-gnu.a
>>> /home/fabioc/SIP/pjproject-1.2/pjproject-1.2/pjlib/lib/libpj-i686-pc-linux-gnu.a
>>> /home/fabioc/SIP/pjproject-1.2/pjproject-1.2/pjlib-util/lib/libpjlib-util-i686-pc-linux-gnu.a
>>> /home/fabioc/SIP/pjproject-1.2/pjproject-1.2/pjnath/lib/libpjnath-i686-pc-linux-gnu.a
>>> -L/home/fabioc/SIP/pjproject-1.2/pjproject-1.2/third_party/lib
>>> -lresample-i686-pc-linux-gnu -lmilenage-i686-pc-linux-gnu
>>> -lsrtp-i686-pc-linux-gnu -lgsmcodec-i686-pc-linux-gnu
>>> -lspeex-i686-pc-linux-gnu -lilbccodec-i686-pc-linux-gnu
>>> -lg7221codec-i686-pc-linux-gnu
>>> -lportaudio-i686-pc-linux-gnu -lm -lnsl -lrt -lpthread
>>> .../lib/libpjmedia-audiodev-i686-pc-linux-gnu.a(audiodev.o):
>>> In function `pjmedia_aud_subsys_init':
>>> audiodev.c:(.text+0x2c3): undefined reference to
>>> `pjmedia_aps_factory'
>>> collect2: ld returned 1 exit status
>>> make[2]: *** [../bin/pjmedia-test-i686-pc-linux-gnu] Error 1
>>> make[2]: Leaving directory
>>> `/home/fabioc/SIP/pjproject-1.2/pjproject-1.2/pjmedia/build'
>>> make[1]: *** [pjmedia-test] Error 2
>>> make[1]: Leaving directory
>>> `/home/fabioc/SIP/pjproject-1.2/pjproject-1.2/pjmedia/build'
>>> make: *** [all] Error 1
>>>
>>> Do you have idea what's wrong in my setup?
>>>
>>> Thanks a lot,
>>> Fabio
>>>
>>> Benny Prijono ha scritto:
>>>> Hi Fabio,
>>>>
>>>> We probably have a solution for you. So your sound devices
>>>> already provide encoded (PCMA) frames, this is actually
>>>> similar to how APS-Direct work! Basically APS-Direct is a
>>>> feature (by means of config tweaks) to utilize APS sound
>>>> device in Nokia handsets, which already provides encoded
>>>> G.729/iLBC/AMR/G.711 codecs.
>>>>
>>>> Please see
>>>> http://trac.pjsip.org/repos/wiki/Nokia_APS_VAS_Direct for
>>>> more info, and get back here if there's anything unclear.
>>>> As a bit of hint, pjsua should work more or less as usual
>>>> when APS-Direct is enabled, though obviously we will loose
>>>> the conferencing feature.
>>>>
>>>> Though the drawback of using APS-Direct approach is you
>>>> won't be able to use many (if not most) PJMEDIA features,
>>>> since PJMEDIA mostly works on PCM frames. But this may be
>>>> your objective in the first place, as you wanted as less
>>>> processing as possible. So depending on how you code your
>>>> application (especially the part to handle multiple sound
>>>> devices), there may be some design changes required.
>>>>
>>>> cheers
>>>> Benny
>>>>
>>>>
>>>> On Sat, May 23, 2009 at 4:17 PM, Fabio Cherchi
>>>> <fabio.cherchi at yahoo.it <mailto:fabio.cherchi at yahoo.it>> wrote:
>>>>
>>>> Hi Benny and all,
>>>>
>>>> I'm developing an application running on uclinux-nios2
>>>> (85MHz) which simply starts and stops multiple RTP
>>>> streams from 16 different custom audio devices (not
>>>> defined as sounds ports) which provide PCMA already
>>>> coded samples.
>>>>
>>>> In my first approach I used the conf bridge to connect
>>>> each stream to a custom pjmedia_port, but after the
>>>> 5th-6th connection the cpu performance becomes poor and
>>>> the timing gap between each put_frame (same for
>>>> get_frame) becomes larger than 20ms (my frame length).
>>>>
>>>> I'm doing some check where I can improve the
>>>> performance (I've already applied Benny's suggestions
>>>> about that on:
>>>> http://trac.pjsip.org/repos/wiki/FAQ#Performance).
>>>> First of all, I've already coded pcma samples, but the
>>>> conf bridge works only with L16 samples, so I need to
>>>> do a double conversion before the streaming.
>>>> Second, the CPU usage shows very high values when I'm
>>>> adding a new call to the conf bridge.
>>>>
>>>> I'm evaluating a different approach based on creating a
>>>> different master port for each call to directly connect
>>>> the custom ports to the streams and also I would like
>>>> to use the pcma passthrough codec.
>>>> Do you think this would help to improve performances?
>>>> Is it possible that multiple master ports could have
>>>> some timing conflicts if running in the same application?
>>>>
>>>> Any suggestion will be very appreciated.
>>>>
>>>> Thanks,
>>>> Fabio
>>>>
>>>> _______________________________________________
>>>> Visit our blog: http://blog.pjsip.org
>>>>
>>>> pjsip mailing list
>>>> pjsip at lists.pjsip.org <mailto:pjsip at lists.pjsip.org>
>>>> http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
>>>>
>>>>
>>>> ------------------------------------------------------------------------
>>>>
>>>> _______________________________________________
>>>> Visit our blog: http://blog.pjsip.org
>>>>
>>>> pjsip mailing list
>>>> pjsip at lists.pjsip.org <mailto:pjsip at lists.pjsip.org>
>>>> http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
>>>>
>>>
>>> ------------------------------------------------------------------------
>>> _______________________________________________ Visit our
>>> blog: http://blog.pjsip.org pjsip mailing list
>>> pjsip at lists.pjsip.org <mailto:pjsip at lists.pjsip.org>
>>> http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
>>
>>
>> _______________________________________________
>> Visit our blog: http://blog.pjsip.org
>>
>> pjsip mailing list
>> pjsip at lists.pjsip.org <mailto:pjsip at lists.pjsip.org>
>> http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
>>
>>
>> ------------------------------------------------------------------------
>> _______________________________________________ Visit our blog:
>> http://blog.pjsip.org pjsip mailing list pjsip at lists.pjsip.org
>> <mailto:pjsip at lists.pjsip.org>
>> http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
>
>
> _______________________________________________
> Visit our blog: http://blog.pjsip.org
>
> pjsip mailing list
> pjsip at lists.pjsip.org <mailto:pjsip at lists.pjsip.org>
> http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Visit our blog: http://blog.pjsip.org
>
> pjsip mailing list
> pjsip at lists.pjsip.org
> http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.pjsip.org/pipermail/pjsip_lists.pjsip.org/attachments/20090602/a71505fb/attachment-0001.html>
More information about the pjsip
mailing list