VAD Events stop Firing after Bridgine
Hi All, I have a problem with Voice Activity Detection. I am writing a module which will bridge a call to a conference when it detects voice activity on the line. When voice activity isn't detected for a period, the call is parked until voice activity is detected again. It seems that before the call is bridged to the conference, Voice Activity Detection works fine and events with the "Action" of "start-talking" or "stop-talking" are fired. Once the call is bridged, these events are no longer fired. Even If I manually park the call from fs_cli using "uuid_park", the events with "start-talking"/"stop-talking" are never fired again. I have been scouring the net looking for a means of getting these events to fire again. The sip profiles involved all have VAD enabled in both directions. In code, I start the conference call like so: sprintf(szCommand,"{TALK, NOTALK}sofia/externalx/confuser@%s:5080",szConfAddress); switch_ivr_originate( NULL,&pPersistentSession,cause,szCommand, iTimeout, NULL,NULL,NULL,NULL,NULL, SOF_FORKED_DIAL,NULL ) != SWITCH_STATUS_SUCCESS; pMainSessionUUID = switch_core_session_get_uuid( pPersistentSession ); pPersistentChannel = switch_core_session_get_channel( pPersistentSession ); pAppName = switch_core_session_strdup( pPersistentSession, "conference" ); sprintf(szCommand,"%s@default",pExtension); pAppOpt = switch_core_session_strdup( pPersistentSession, szCommand); pPersistentCallExtension = switch_caller_extension_new(pPersistentSession, pAppName, pAppOpt); switch_caller_extension_add_application( pPersistentSession, pPersistentCallExtension, pAppName, pAppOpt ); switch_channel_set_caller_extension( pPersistentChannel, pPersistentCallExtension ); switch_channel_set_state( pPersistentChannel, CS_EXECUTE ); This is just calling another freeswitch box which answers the call and keeps the conference open. I then make a second call to the user's sip phone in much the same way. sprintf(szCommand,"{TALK, NOTALK}user/1001"); switch_ivr_originate( NULL, &pUserSession,&cause, szCommand, iTimeout,NULL,NULL,NULL,NULL,NULL, SOF_FORKED_DIAL,NULL ); pUserSessionUUID = switch_core_session_get_uuid( pUserSession ); pUserChannel = switch_core_session_get_channel( pUserSession ); pUserAppName = switch_core_session_strdup( pUserSession, "conference" ); sprintf(szCommand,"%s@default",USER_EXTENSION); pUserAppOpt = switch_core_session_strdup( pUserSession, szCommand); pUserCallerExtension = switch_caller_extension_new(pUserSession, pUserAppName, pUserAppOpt); switch_caller_extension_add_application( pUserSession, pUserCallerExtension, pUserAppName, pUserAppOpt ); switch_channel_set_caller_extension( pUserChannel, pUserCallerExtension ); switch_channel_set_state( pUserChannel, CS_EXECUTE ); At this point the events are firing fine and my event handler is reacting to them. On the first "start-talking" event I get from the user, I bridge the calls like so: switch_ivr_uuid_bridge (pMainSessionUUID,pUserSessionUUID); At this point, the events for "start-talking" or "stop-talking" are no longer fired and are never fired again even if I break the bridging. I tried commenting out the bridging line just to be sure that the events are fired without the briding and it looks fine. I get all the events continuously. So it seems to break as soon as I bridge. To capture the events, I had expected that I should bind to the events like this: switch_event_bind("START_TALK_EVENT", SWITCH_EVENT_TALK, SWITCH_EVENT_SUBCLASS_ANY, detect_talk , NULL); switch_event_bind("END_TALK_EVENT", SWITCH_EVENT_NOTALK, SWITCH_EVENT_SUBCLASS_ANY, detect_talk , NULL); This never worked. What did work was this: switch_event_bind("TALK_EVENT", SWITCH_EVENT_CUSTOM, "conference::maintenance", detect_talk , NULL); My event handler would just look for an event where the "Action" was set to "start-talking" or "stop-talking". Is there something I am missing here? I don't find enough information on the wiki to help me work out exactly how VAD events should be listened for and handled, so it is entirely likely I am doing it wrong. Can someone help me here or event paste a working code sample? Many thanks for your time, Ronnie
participants (1)
-
Rony Beck