Hi Tony, Sorry for the late reply. I just fixed the crash in interruptionListener after pjsua is restarted (ticket #1174). Thanks for the report. Best regards, Ming On Fri, Feb 4, 2011 at 8:38 PM, Tony Million <tony at bababoo.com> wrote: > Ok thats fine, my only question would be how to signal to pj media that the audio should stop and restart when I get the begin / end interruption signal? > > Regards, > -- > Tony Million > > > On 4 Feb 2011, at 11:10, Ming wrote: > >> Hi Tony, >> >> Yes, that's right, you will overwrite coreaudio_dev's callback and >> handle the interruption case at the application level. >> >> Regards, >> Ming >> >> On Fri, Feb 4, 2011 at 6:03 PM, Tony Million <tony at bababoo.com> wrote: >>> Hi Ming, >>> >>> I dont quite understand what you mean, wouldn't our AudioSession over-write the PJSIP one? >>> Sorry to ask, but can you explain this a little better? >>> >>> >>> >>> What we do in our app is: >>> >>> main >>> { >>> ? ? ? ?register callback handler for reachbility >>> } >>> >>> callback handler >>> { >>> ? ? ? ?(release resources if necessary) >>> ? ? ? ?pjsua_destroy(); >>> >>> ? ? ? ?if(connectable) >>> ? ? ? ?{ >>> ? ? ? ? ? ? ? ?.. obviously all the setup here >>> ? ? ? ? ? ? ? ?pjsua_init(); >>> >>> ? ? ? ? ? ? ? ?(alloc resources) >>> ? ? ? ? ? ? ? ?pjsua_start(); >>> ? ? ? ?} >>> } >>> >>> The callback handler is called for any network state change (that is wifi->wifi, wifi->3g wifi->no signal (and the same for all 3G states too)). So in this way when pjsua starts up again it is bound to the correctly connected network interface. Unless there is a method of telling pjsua to rebind to the active network interface that I have missed, this is the only way I have found to handle network transitions. >>> >>> >>> >>> Also, as a footnote since we are talking about reachability , there is still a compatibility in os_darwinos.h when including <SystemConfiguration/SystemConfiguration.h> the following diff will fix it >>> >>> Index: pjlib/include/pj/compat/os_darwinos.h >>> =================================================================== >>> --- pjlib/include/pj/compat/os_darwinos.h ? ? ? (revision 3410) >>> +++ pjlib/include/pj/compat/os_darwinos.h ? ? ? (working copy) >>> @@ -95,7 +95,10 @@ >>> ?/* >>> ?* Socket related >>> ?*/ >>> -typedef int socklen_t; >>> +#ifndef _SOCKLEN_T >>> +#define _SOCKLEN_T >>> +typedef ? ? ? ?__darwin_socklen_t ? ? ?socklen_t; >>> +#endif >>> >>> ?/* Set 1 if native sockaddr_in has sin_len member. >>> ?* Default: 0 >>> >>> >>> >>> >>> Regards, >>> -- >>> Tony Million >>> Chief Technology Officer - Bababoo Inc >>> Web: http://www.bababoo.com/ >>> Tel: +44 20 7993 9152 >>> Twitter: @bababoo >>> >>> On 4 Feb 2011, at 09:09, Ming wrote: >>> >>>> Hi Tony, >>>> >>>> In the case that you need to restart pjsua, you will need to create >>>> your own interruptionListener handler. You can do this by calling >>>> AudioSessionInitialize() before coreaudio calls this function. >>>> >>>> Regards, >>>> Ming >>>> >>>> On Thu, Feb 3, 2011 at 4:22 PM, Tony Million <tony at bababoo.com> wrote: >>>>> I've investigated more, and found the following: >>>>> When our app detects a change in network (i.e. changing from wifi to 3G or >>>>> wifi->different wifi, or even losing signal entirely) we shutdown pjsip >>>>> using pjsua_destroy() then, if/when a network is available we reinitialize >>>>> pjsua using the same startup code we used in the first instance. >>>>> When restarting pjsua I see the following error: >>>>> ?08:13:52.942 sip_endpoint.c ?Module "mod-invite" registered >>>>> ?08:13:52.942 coreaudio_dev. ? dev_id 0: iPhone IO device ?(in=1, out=1) >>>>> 8000Hz >>>>> ?08:13:52.942 coreaudio_dev. ?Error: cannot initialize audio session >>>>> services (1768843636) >>>>> ?08:13:52.943 coreaudio_dev. ?core audio initialized >>>>> ?08:13:52.943 ? ? ? ? ?pjlib ?select() I/O Queue created (0x9dba14) >>>>> ?08:13:52.979 sip_endpoint.c ?Module "mod-evsub" registered >>>>> >>>>> At this point, when I go to make a cellular call, I'll see the same crash I >>>>> pasted (pasted again for completeness >>>>> ?08:14:57.383 coreaudio_dev. ?Session interrupted! --- Begin Interruption >>>>> --- >>>>> Assertion failed: (mutex), function pj_mutex_lock, file >>>>> ../src/pj/os_core_unix.c, line 1203. >>>>> Program received signal: ??SIGABRT?. >>>>> At >>>>> As far as I know the only way to get pjsua to work correctly with the new >>>>> network interface (be it the 3G WWAN or WIFI Network) is to call >>>>> pjsua_destroy and then start up pjsua again. If this is incorrect I'm happy >>>>> to change my code. If I do not shutdown/restart pjsua eventually I just >>>>> start getting 502 (Timeout) responses from pjsua. >>>>> >>>>> Hope this helps, >>>>> Tony >>>>> On 3 Feb 2011, at 05:06, Ming wrote: >>>>> >>>>> Hi Tony, >>>>> >>>>> Thanks for the report. Is the crash always reproducible (i.e. does it >>>>> happen every time you make a call)? >>>>> Do you set up your own audio session interruptions in your >>>>> application? Is there any log message from PJSIP on audio session >>>>> initialization error (Error: cannot initialize audio session >>>>> services...)? >>>>> >>>>> Regards, >>>>> Ming >>>>> >>>>> On Thu, Feb 3, 2011 at 2:24 AM, Tony Million <tony at bababoo.com> wrote: >>>>> >>>>> Hi, >>>>> >>>>> I've been seeing crashes related to audio session interruptions on the >>>>> >>>>> iphone for a while, and just got one while the app is connected to a >>>>> >>>>> debugger. >>>>> >>>>> I've attached the logs, I had made a call on cellular and just switched back >>>>> >>>>> to the PJSip based app. >>>>> >>>>> I have numerous crash logs showing the same thing but today is the first day >>>>> >>>>> I could catch it in the debugger. Don't know if this helps, I'm running >>>>> >>>>> current trunk. >>>>> >>>>> ?18:08:27.718 coreaudio_dev. ?Session interrupted! --- Begin Interruption >>>>> >>>>> --- >>>>> >>>>> Assertion failed: (mutex), function pj_mutex_lock, file >>>>> >>>>> ../src/pj/os_core_unix.c, line 1203. >>>>> >>>>> Program received signal: ??SIGABRT?. >>>>> >>>>> (gdb) bt >>>>> >>>>> #0 ?0x33bd52d4 in __kill () >>>>> >>>>> #1 ?0x33bd52ca in kill () >>>>> >>>>> #2 ?0x33bd52bc in raise () >>>>> >>>>> #3 ?0x33be9d78 in abort () >>>>> >>>>> #4 ?0x33bd7986 in __assert_rtn () >>>>> >>>>> #5 ?0x00076258 in pj_mutex_lock () >>>>> >>>>> #6 ?0x000aa114 in interruptionListener () >>>>> >>>>> #7 ?0x31730772 in SSServer_AudioSessionDeferredListenerMessage () >>>>> >>>>> #8 ?0x316ddf2e in _XAudioSessionDeferredListenerMessage () >>>>> >>>>> #9 ?0x31677bea in mshMIGPerform () >>>>> >>>>> #10 0x33a556fe in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ >>>>> >>>>> () >>>>> >>>>> #11 0x33a556c2 in __CFRunLoopDoSource1 () >>>>> >>>>> #12 0x33a47f7c in __CFRunLoopRun () >>>>> >>>>> #13 0x33a47c86 in CFRunLoopRunSpecific () >>>>> >>>>> #14 0x33a47b8e in CFRunLoopRunInMode () >>>>> >>>>> #15 0x33b0e4aa in GSEventRunModal () >>>>> >>>>> #16 0x33b0e556 in GSEventRun () >>>>> >>>>> #17 0x32099328 in -[UIApplication _run] () >>>>> >>>>> #18 0x32096e92 in UIApplicationMain () >>>>> >>>>> #19 0x00002cbc in main (argc=1, argv=0x2fdff67c) at >>>>> >>>>> /Users/tony/Projects/IOS/main.m:14 >>>>> >>>>> >>>>> Regards, >>>>> >>>>> -- >>>>> >>>>> Tony Million >>>>> >>>>> _______________________________________________ >>>>> >>>>> 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 >>>>> >>>>> >>>>> _______________________________________________ >>>>> 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 >>> >>> >>> _______________________________________________ >>> 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 > > > _______________________________________________ > 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 >