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.