[Freeswitch-dev] hooked functions are not called while using one single session

Anthony Minessale anthony.minessale at gmail.com
Fri Mar 26 09:31:43 PDT 2010


you can only write back the exact number of bytes you negotiated per
interval.


On Fri, Mar 26, 2010 at 7:27 AM, Francisco Scaramanga <scaram at hotmail.de>wrote:

>  Now I call switch_core_session_read_frame and
> switch_core_session_write_frame in the same foreground loop. Then I write
> audio into a file and as a result I see that there are many audio gaps.
>
> There seems to be a cross effect by using switch_core_session_write_frame
> and switch_core_session_read_frame together.
> If I only use switch_core_session_read_frame in the loop, there are no gaps
> and everything sounds perfect!
>
> What could be the problem?
>
>
>
> while (1)
> {
>     // READ
>     tstatus = switch_core_session_read_frame(session, &read_frame,
> SWITCH_IO_FLAG_NONE, 0);
>     if (tstatus==SWITCH_STATUS_SUCCESS)
>     {        // write audio in a testfile
>             fwrite((short *)(read_frame)->data, 2,
> ((read_frame)->datalen)/2 ,tmp);
>             switch_size_t ts_rf=read_frame->timestamp;
>     }
>
>     // WRITE
>     vector<unsigned char> vucIn;
>     if (getAudio(&vucAudio)) // get next audio and send it back
>     {
>         memcpy( write_frame.data, &vucIn[0], vucIn.size());
>         write_frame.datalen=vucIn.size();
>         tstatus = switch_core_session_write_frame(session, &write_frame,
> SWITCH_IO_FLAG_NONE, 0);
>     }
>     //Sleep(1);//?
> }
>
> ------------------------------
> Date: Mon, 22 Mar 2010 18:34:46 -0500
>
> From: anthony.minessale at gmail.com
> To: freeswitch-dev at lists.freeswitch.org
> Subject: Re: [Freeswitch-dev] hooked functions are not called while using
> one single session
>
> you don't use the hook functions you use a frame pointer
>
> switch_frame_t *read_frame;
>
> switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE,
> 0);
>
> when i said to look at the stream file example i meant in the function
> itself to see how
> to read and write audio from a channel in a foreground loop.
>
>
>
> On Mon, Mar 22, 2010 at 6:23 PM, Francisco Scaramanga <scaram at hotmail.de>wrote:
>
>  I have an selfmade software which is controlled by a telephone call
> (ISDN/CAPI). The user calls with his phone, gets
> connected and can speak commands which are detected by an internal speech
> recognizer. Furthermore the user can accept
> or hangup incoming calls just by his voice command. It is also possible to
> dial out.
>
> Now I am adding VOIP functionality to my system and decided to use
> FreeSwitch. Therefore I wrote a FreeSwitch module which should be the VOIP
> interface for my software. The module must be able to:
>
> 1. recognize an incoming call which is the users control session (single
> session)
>    I do this in statehandler function channel_on_init.
> 2. pick up another incoming call and intercept with my users control
> session.
> 3. Get the audio data from voip session (user control session) and send it
> to my application (by own tcp-socket)
>     My idea is to use channel_write_frame to receive audio.
> 3. Send audio data from my application to voip user control session so the
> user can hear audio.
>     My idea is to use channel_read_frame.
>
> explanation for using hooks:
> ----------------------------
> The endpoint interface callback functions where never called in my module,
> even I tried to adapt the way it is done
> in mod_portaudio. So my workaround was to set hook functions
> channel_read_frame/channel_write_frame to handle audio.
>
> My problems:
> ------------
> The hook functions are working fine if I have 2 sessions (put together by
> switch_ivr_intercept_session), but if I only have the single user control
> session no hooked function is called. In this case the only way to achieve
> that hooks are called, is to play audio with switch_ivr_play_file. But then,
> audio samples got lost sometimes.
>
> Maybe there is a better way to solve my requirements?
>
>
>
>
> ------------------------------
> Date: Mon, 22 Mar 2010 11:55:42 -0500
>
> From: anthony.minessale at gmail.com
> To: freeswitch-dev at lists.freeswitch.org
> Subject: Re: [Freeswitch-dev] hooked functions are not called while using
> one single session
>
> Why do you even need the hooks?
> What exactly are you trying to do?
> Maybe you should explain it.
>
>
> On Mon, Mar 22, 2010 at 5:33 AM, Francisco Scaramanga <scaram at hotmail.de>wrote:
>
>  I am now using the application interface and play a file after answering
> the call. The call is not connected to a another session, it's just a single
> session.
>
> SWITCH_STANDARD_APP(mod_my_function)
> {
>      /* play audio file */
>     switch_ivr_play_file(session, NULL,
> "C:\\freeswitch1.0.4\\debug\\sounds\\music\\8000\\danza-espanola-op-37-h-142-xii-arabesca.wav",
> NULL);
> }
>
> Now the hooks for channel_write_frame and channel_read_frame are called! I
> write the audio frames into a file for testing if everything is correct. The
> data written in channel_write_frame seems to be perfect, but audio written
> in channel_read_frame only seems to be good at first sight. If I record 20
> seconds of audio and listen to the audiofile I hear that 2 or 3 times short
> parts are missing.
>
> static switch_status_t channel_write_frame(switch_core_session_t *session,
> switch_frame_t *frame, switch_io_flag_t flags, int stream_id)
> {
>   // Audio from danza-espanola-op-37-h-142-xii-arabesca.wav is written into
> a file
>   fwrite((short *)frame->data, 2, frame->datalen/2 ,tmp);
>
> }
> static switch_status_t channel_read_frame(switch_core_session_t *session,
> switch_frame_t **frame, switch_io_flag_t flags, int stream_id)
> {
>     // Spoken audio samples from my microphone are written, but sometimes
> samples are missing
>     fwrite((short *)frame->data, 2, frame->datalen/2 ,tmp);
> }
>
> Is it possible that I don't get all audio samples by hooked functions? why
> audio recorded in channel_write_frame is brilliant and in channel_read_frame
> not?
>
>
>
>
>
>
> ------------------------------
> Date: Tue, 16 Mar 2010 13:59:28 -0500
>
> From: anthony.minessale at gmail.com
> To: freeswitch-dev at lists.freeswitch.org
> Subject: Re: [Freeswitch-dev] hooked functions are not called while using
> one single session
>
> you probably want to use the application interface and a while loop while
> reading a frame.
>
> see most of the functions in switch_ivr_play_say
>
>
> On Tue, Mar 16, 2010 at 8:51 AM, Francisco Scaramanga <scaram at hotmail.de>wrote:
>
>  The module I am writing should be an endpoint VOIP-interface for another
> program. The module should answer a call and transport incoming audio into a
> 3rd party application. Furthermore the 3rd party application sends audio
> data back to the caller. This is why I hooked channel_read_frame and
> channel_write_frame.
>
> How can I trigger the channel to do something that requires reading or
> writing audio? Does it make a difference to use the endpoint interface
> instead of the hooks?
>
>
> ------------------------------
> Date: Tue, 16 Mar 2010 08:34:18 -0500
> From: anthony.minessale at gmail.com
> To: freeswitch-dev at lists.freeswitch.org
> Subject: Re: [Freeswitch-dev] hooked functions are not called while using
> one single session
>
>
> What exactly is your goal?
>
> those hooks will probably only be called if you send the channel to do
> something that
> requires reading and writing audio.
>
>
> On Tue, Mar 16, 2010 at 6:47 AM, Francisco Scaramanga <scaram at hotmail.de>wrote:
>
>  Hello,
> I am writing my own freeswitch module and have implemented 2 hooks for
> reading and writing audio (I did not implement the endpoint interface).
> My problem is that the channel_write_frame and channel_read_frame
> callback-functions are only called if I make an intercept with another
> session (switch_ivr_intercept_session), but my usecase has only one single
> Session for getting and putting audio data in my module.
>
> How can I achieve this?
> scaram
>
> /* on channel init I answer the session and set hooks */
> static switch_status_t channel_on_init(switch_core_session_t *session)
> {
>     switch_channel_t *channel = switch_core_session_get_channel(session);
>     switch_channel_answer(channel);
>
>     switch_channel_set_state(channel, CS_EXCHANGE_MEDIA);
>     switch_set_flag(tech_pvt, TFLAG_IO);
>
>     switch_core_event_hook_add_write_frame(session, &channel_write_frame);
>     switch_core_event_hook_add_read_frame(session, &channel_read_frame);
> }
>
> static switch_status_t channel_write_frame(switch_core_session_t *session,
> switch_frame_t *frame, switch_io_flag_t flags, int stream_id)
> {
>     /* is only called when I intercept 2 Sessions */
> }
> static switch_status_t channel_read_frame(switch_core_session_t *session,
> switch_frame_t *frame, switch_io_flag_t flags, int stream_id)
> {
>     /* is only called when I intercept 2 Sessions */
> }
>
>
>
> ------------------------------
> Ein Postfach für Alles –   bei Hotmail 5 E-Mail-Adressen online verwalten!<http://redirect.gimas.net/?n=M1003HM5Adressen>
>
> _______________________________________________
> FreeSWITCH-dev mailing list
> FreeSWITCH-dev at lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-dev
> http://www.freeswitch.org
>
>
>
>
> --
> Anthony Minessale II
>
> FreeSWITCH http://www.freeswitch.org/
> ClueCon http://www.cluecon.com/
> Twitter: http://twitter.com/FreeSWITCH_wire
>
> AIM: anthm
> MSN:anthony_minessale at hotmail.com
> GTALK/JABBER/PAYPAL:anthony.minessale at gmail.com
> IRC: irc.freenode.net #freeswitch
>
> FreeSWITCH Developer Conference
> sip:888 at conference.freeswitch.org
> iax:guest at conference.freeswitch.org/888<http://conference.freeswitch.org/888>
> googletalk:conf+888 at conference.freeswitch.org<googletalk:conf%2B888 at conference.freeswitch.org>
> pstn:+19193869900
>
> ------------------------------
> Alles in einem Postfach – Ich will Hotmail!<http://redirect.gimas.net/?n=M1003Hotmail>
>
> _______________________________________________
> FreeSWITCH-dev mailing list
> FreeSWITCH-dev at lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-dev
> http://www.freeswitch.org
>
>
>
>
> --
> Anthony Minessale II
>
> FreeSWITCH http://www.freeswitch.org/
> ClueCon http://www.cluecon.com/
> Twitter: http://twitter.com/FreeSWITCH_wire
>
> AIM: anthm
> MSN:anthony_minessale at hotmail.com
> GTALK/JABBER/PAYPAL:anthony.minessale at gmail.com
> IRC: irc.freenode.net #freeswitch
>
> FreeSWITCH Developer Conference
> sip:888 at conference.freeswitch.org
> iax:guest at conference.freeswitch.org/888<http://conference.freeswitch.org/888>
> googletalk:conf+888 at conference.freeswitch.org<googletalk:conf%2B888 at conference.freeswitch.org>
> pstn:+19193869900
>
> ------------------------------
> Treffe Freunde im Messenger Videochat!<http://redirect.gimas.net/?n=M1003IMVideochat>
>
> _______________________________________________
> FreeSWITCH-dev mailing list
> FreeSWITCH-dev at lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-dev
> http://www.freeswitch.org
>
>
>
>
> --
> Anthony Minessale II
>
> FreeSWITCH http://www.freeswitch.org/
> ClueCon http://www.cluecon.com/
> Twitter: http://twitter.com/FreeSWITCH_wire
>
> AIM: anthm
> MSN:anthony_minessale at hotmail.com
> GTALK/JABBER/PAYPAL:anthony.minessale at gmail.com
> IRC: irc.freenode.net #freeswitch
>
> FreeSWITCH Developer Conference
> sip:888 at conference.freeswitch.org
> iax:guest at conference.freeswitch.org/888<http://conference.freeswitch.org/888>
> googletalk:conf+888 at conference.freeswitch.org<googletalk:conf%2B888 at conference.freeswitch.org>
> pstn:+19193869900
>
> ------------------------------
> Alles in einem Postfach – Ich will Hotmail!<http://redirect.gimas.net/?n=M1003Hotmail>
>
> _______________________________________________
> FreeSWITCH-dev mailing list
> FreeSWITCH-dev at lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-dev
> http://www.freeswitch.org
>
>
>
>
> --
> Anthony Minessale II
>
> FreeSWITCH http://www.freeswitch.org/
> ClueCon http://www.cluecon.com/
> Twitter: http://twitter.com/FreeSWITCH_wire
>
> AIM: anthm
> MSN:anthony_minessale at hotmail.com
> GTALK/JABBER/PAYPAL:anthony.minessale at gmail.com
> IRC: irc.freenode.net #freeswitch
>
> FreeSWITCH Developer Conference
> sip:888 at conference.freeswitch.org
> googletalk:conf+888 at conference.freeswitch.org<googletalk:conf%2B888 at conference.freeswitch.org>
> pstn:+19193869900
>
> ------------------------------
> Treffe Freunde im Messenger Videochat!<http://redirect.gimas.net/?n=M1003IMVideochat>
>
> _______________________________________________
> FreeSWITCH-dev mailing list
> FreeSWITCH-dev at lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-dev
> http://www.freeswitch.org
>
>


-- 
Anthony Minessale II

FreeSWITCH http://www.freeswitch.org/
ClueCon http://www.cluecon.com/
Twitter: http://twitter.com/FreeSWITCH_wire

AIM: anthm
MSN:anthony_minessale at hotmail.com <MSN%3Aanthony_minessale at hotmail.com>
GTALK/JABBER/PAYPAL:anthony.minessale at gmail.com<PAYPAL%3Aanthony.minessale at gmail.com>
IRC: irc.freenode.net #freeswitch

FreeSWITCH Developer Conference
sip:888 at conference.freeswitch.org <sip%3A888 at conference.freeswitch.org>
googletalk:conf+888 at conference.freeswitch.org<googletalk%3Aconf%2B888 at conference.freeswitch.org>
pstn:+19193869900
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.freeswitch.org/pipermail/freeswitch-dev/attachments/20100326/bf933a6d/attachment-0001.html 


More information about the FreeSWITCH-dev mailing list