gateway advice needed

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

 



Robert Reif wrote:
> Joel Dodson wrote:
>> Hi Robert,
>>
>> you can still use the jitter buffer and support multiple codecs at
>> that layer (I did in my project).  I don't know about mixing the
>> streams, I suspect it can be used at the lower layers as well.  Most
>> of the APIs seem to be well encapsulated and can be used independently
>> of the rest of the packages.
>>
>> Joel
>>
>>
>> On Tue, Nov 15, 2011 at 4:38 AM, Robert Reif<reif at earthlink.net>  wrote:
>>> Joel Dodson wrote:
>>>> Hi Robert,
>>>>
>>>> I used PJSIP/PJMEDIA to do what sounds like almost exactly what you're
>>>> wanting to do.  I used the lower layer APIs, not pjsua.
>>>>
>>>> I also used the rtp module in PJMEDIA to directly access the rtp and
>>>> rtcp packets.  I didn't use the higher level audio port concept.
>>>>
>>>> Check out siprtp.c and simpleua.c in pjsip-apps/src/samples.  Those
>>>> are good examples of how to use the lower level APIs and especially
>>>> the pjsip_inv_session and pjmedia_rtp_session (disclaimer, I'm looking
>>>> at pjsip 1.6 release, I haven't used pjsip in a while so I hope those
>>>> examples and abstractions are still there).  Assuming those
>>>> abstractions still exist, they're a great place to start.
>>>>
>>>> I was able to support several hundred simultaneous g711 based audio
>>>> streams through my signaling and media gateway with very low latency.
>>>> That was on windows XP running on VMs.  You should be able to get much
>>>> more than that on a better hardware configuration.
>>>>
>>>> good luck,
>>>>
>>>> Joel
>>>>
>>>>
>>>> On Mon, Nov 14, 2011 at 5:40 PM, Robert Reif<reif at earthlink.net>    
>>>> wrote:
>>>>
>>>>> I need to develop a SIP gateway on Windows to another networked 
>>>>> protocol
>>>>> for
>>>>> a dynamic number of channels and I am looking at pjsip for the SIP 
>>>>> side.
>>>>>
>>>>> Can I have multiple active users in independent calls and add and
>>>>> subtract
>>>>> users at runtime?
>>>>>
>>>>> Can I get access to the PCM audio streams for each user?
>>>>>
>>>>> Are there any gateway examples available?
>>>>>
>>>>> I just found this project today and have been reading the 
>>>>> documentation
>>>>> and
>>>>> source code. I built the code and am using it for interoperability
>>>>> testing
>>>>> and it looks like it will do what I need but I would like some
>>>>> conformation
>>>>> or advice before I invest a lot of effort.
>>>>>
>>>>> _______________________________________________
>>>>> 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
>>>>>
>>>>>
>>>> _______________________________________________
>>>> 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
>>>>
>>>>
>>> Thanks Joel,
>>>
>>> It's good to know that pjsip can do what I need.  However I would 
>>> like to
>>> work at a higher level because I don't want to restrict what codecs are
>>> supported on the SIP side.  I would also like to take advantage of the
>>> jitter buffer so I don't want to work with the RTP packets.  I may 
>>> also have
>>> the need in the future to support multiple users calling into a single
>>> channel so I might need access to the combiner.  The audio format on 
>>> the
>>> other side of the gateway can be any format, packet size and sample 
>>> rate and
>>> will probably be different than the SIP side.  The library for the 
>>> other
>>> side dynamically handles the buffering, jitter, SRC, format 
>>> conversions and
>>> combining for it's protocols so all it needs is the raw PCM audio 
>>> stream per
>>> channel.
>>>
>>> _______________________________________________
>>> 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
>>>
>> _______________________________________________
>> 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
>>
> I'm playing with simpleua.c now just to get a feel for the APIs and 
> how they fit together.
>
> It looks like I can replace the sound devices with mem_player and 
> mem_capture to get at the streams.
>
> Once that is working, I can start looking at multiple calls, 
> registration and finally adding and removing users dynamically.
>
> Thanks for the advice.
>
> Bob.
>
> _______________________________________________
> 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
>
I'm stuck trying to get at the audio streams in the simpleua.c example.

I'm stuck in the function call_on_media_update after the media session 
is created and the first media port is found.

What I want to do is read the audio data from the SIP call.  I expect 
there to be data only when there is voice activity.  I expect there to 
be no audio data available when there is no activity.

I also want to write audio data to the SIP call only when there is voice 
activity on the non-SIP side.

Is the solution to my problem as simple as adding my own callbacks to 
the media port?  The callbacks would fill and drain FIFOs connected to 
the non-SIP side.

The other option seems to be to attach a conference bridge to the media 
session.  The conference bridge would be configured with no hardware 
device (because there really is none) so a master port must be created.  
I can't find any examples that connect a conference bridge to a media 
session and to memory player port, capture ports, and master port.

I assume there will be one conference bridge per call.  Can all the 
conference bridges share a master port?

Am I even on the right track or am I missing something fundamental.



[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