Thank you for your kind comments. I have blown up my connection with ISP every 
time I tried writing frames using ast_write for the equivalent of echo. I am 
copying the relevant code fromconference.c  for elucidation. Kindly forgive me 
for bringing up the App Konference  code here.

// loop over member list and retrieve incoming frames
        for (listentry = conf->listheaders->speakerlistheader.next; listentry 
!= &conf->listheaders->speakerlistheader; listentry = listentry->next)
        {
                ast_conf_member *member = (ast_conf_member *)((char*)listentry 
- offsetof(ast_conf_member, speakerlistentry));
                member_process_spoken_frames(conf,member,&spoken_frames,
                                             &listener_count, &speaker_count);
        }

        // mix incoming frames and get batch of outgoing frames
        conf_frame *send_frames = spoken_frames ? mix_frames(conf, 
spoken_frames, speaker_count, listener_count) : NULL;

        // loop over member list and send outgoing frames
        for (listentry = conf->listheaders->memberlistheader.next; listentry != 
&conf->listheaders->memberlistheader; listentry = listentry->next)
        {
                ast_conf_member *member = (ast_conf_member *)((char*)listentry 
- offsetof(ast_conf_member, memberlistentry));
        /* ********************************************************this blows 
up the ISP connection
                  conf_frame * sendFrame=NULL;
                for(sendFrame=send_frames; sendFrame != NULL;sendFrame = 
send_frames->next) {
                        ast_write(member->chan, sendFrame->fr);
                }
        */
                member_process_outgoing_frames(conf, member);
        }

member_process_outgoing_frames queues the frames to be sent out to the 
listeners. What I don't understand is why the ISP drops the connection.

Thanks

From: [email protected] 
[mailto:[email protected]] On Behalf Of Matthew Jordan
Sent: Wednesday, December 24, 2014 11:30 AM
To: Asterisk Developers Mailing List
Subject: Re: [asterisk-dev] Volume Control



On Wed, Dec 24, 2014 at 1:14 PM, Murthy Gandikota 
<[email protected]<mailto:[email protected]>> wrote:
To correct myself, it has nothing to do with hardware. I am using 
ast_openstream acquire the stream object. I then use ast_write to send a frame 
on the stream to all the conference members. Meanwhile  another thread is 
waiting  for events  on the channel (ast_waitfor) and if a spoken frame is 
sensed, then it is being queued for the conference members. Here is the catch: 
if I do ast_write(stream, NULL) and speak up on the phone, then I can hear an 
echo of myself. So it must be possible to do ast_write(stream, frame) and hear 
an echo, if the talk volume is sufficiently higher than the listen volume?


I have no idea what App Konference is doing with the media mixing that it is 
performing. ast_write and ast_waitfor have nothing to do with the act of mixing 
media however - those are merely calls to write media to a channel and to wait 
for a file descriptor on a channel to be triggered. That actual act of mixing 
the media would have to be provided by something else.

In bridge_softmix - which is a bridging module for the Bridging Framework that 
mixes media between n channels - we explicitly remove the source channel from 
the media that is mixed for it - so you don't hear yourself. But that's an 
implementation detail of that mixer - other mixers could choose to echo back 
the audio from the speakers.
Volume, again, is handled by something else completely different from mixing 
media. In the case of func_volume, an audiohook is used to manipulate the media 
prior to it being written down into the channel technology. The audiohook 
itself is invoked via ast_write.

--
Matthew Jordan
Digium, Inc. | Engineering Manager
445 Jan Davis Drive NW - Huntsville, AL 35806 - USA
Check us out at: http://digium.com & http://asterisk.org
-- 
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-dev

Reply via email to