On May 5, 2008, at 5:26 PM, ?ukasz Zwierko wrote:
> Hi,
>
> Just a thought here: using calls like delay(), sleep() etc. for
very
> short amount of time (like in this case a couple of miliseconds)
> should in my opinion be really discouraged. It is often a symptom
of
> bad programming even in an embedded enviroment, not mentioning
> platforms like Windows or Linux where you can't really tell what
> priority does your task have, and will it not be starved for a long
> time by other tasks. I should be avoided whenever possible.
> Don't want to sound like a smart ass here, but isn't there any
other
> way? From what I understood you wait until some amount of voice
> samples is collected? If that's the case than perhaps you can
measure
> an amount of data collected not the time... If these are PCM
samples
> than the correlation is straightforward.
> Again, sorry if I'm being a smart ass here but I've seen some
really
> bad code with sleep() calls and such like, and I can tell you that
it
> only worked fine in specific conditions, and had a tendency to work
> very poorly when for example CPU was under heavy load.
>
> Luaksz
>
> 2008/5/5 Anthony Minessale <
anthony.minessale@gmail.com>:
>> did you try setting the ptime on the rtp to 30 or 60ms
>>
>> when you choose a codec in your sip settings on FS in vars.xml,
>> instead of
>> PCMU try PCMU@30i or PCMU@60i
>> it may be that the other side is doing 30 or 60 ms and not
telling
>> us.
>>
>> also in pablio.c in the portaudio_mod directory in
ReadAudioStream
>> func,
>> there is a sleep 1 ms too
>> if the windows is really sleeping a lot longer than that, try
>> omitting line
>> 158.
>> This probably will consume the whole cpu but if it fixes your
>> problem it
>> will support the theory that the sleep on windows in
inaccurate.
>>
>>
>>
>>
>>
>> On Mon, May 5, 2008 at 11:38 AM, Csaba Zelei
>> <
csaba.zelei@gmail.com>
wrote:
>>>
>>>
>>>
>>>
>>> With a little hack I can make mod_portaudio to send rtp
packets with
>> ~24ms, ~16ms delay alternately on linux. This result in a
constant
>> 4ms
>> jitter but its better than the original. (diff attached)
>>> However on windows the delta between rtp packets is 15-32
ms
>>> randomly,
>> with occasionally high 70-100ms delta.
>>> I also tried to tweak the windows timer without success.
>>> Does anybody has any idea how to make windows xp more
accurate?
>>>
>>> Sluschny, Thomas wrote:
>>>
>>>
>>>
>>>
>>> as you can see here:
>>>
>>>
>>>
http://jira.freeswitch.org/browse/MODENDP-40
>>>
>>> i have this problem all the time (the error mentioned in
this
>>> issue was
>> only related with this).
>>>
>>> It has to do with windows handle sleep() method, you has
say
>>> sleep(1) for
>> 1ms but on my
>>>
>>> machine it waits 15ms (it depends on your hardware, other
PCs behave
>> different!). So i tested around with high performance counters.
>>>
>>> For now i ignore that problem an set jitterbuffers on
other device
>>> big
>> enough.
>>>
>>> Thomas
>>>
>>> ________________________________
>> Von:
freeswitch-users-bounces@lists.freeswitch.org
>> [mailto:
freeswitch-users-bounces@lists.freeswitch.org] Im
Auftrag
>> von Zelei
>> Csaba
>>> Gesendet: Donnerstag, 24. April 2008 19:05
>>> An:
freeswitch-users@lists.freeswitch.org
>>> Betreff: [Freeswitch-users] mod_portaudio send 3 rtp
packet/60ms
>>> instead
>> of1 packet/20ms
>>>
>>> Dear all,
>>>
>>> I tried to use FS in client mode, starting calls with
>>> mod_portaudio to our
>> providers gateway ( a Cirpack softswitch )
>>> I experienced that there is 2-3 sec delay in the call, its
choppy
>>> and
>> robot like.
>>> I tested it with a softphone, and an ip phone and
everything was
>>> fine. I
>> traced back the problem to mod_portaudio sending 3 rtp packet
in 60ms
>> instead of 1 packet/20ms.
>>>
>>> Here is an rtp statistic from a call: (see
>>
http://pastebin.freeswitch.org/4307
for the complete list and sip
>> trace)
>>>
>>> Packet Sequence Delta (ms)
>>> 42 26138 0.00
>>> 43 26139 0.02
>>> 46 26140 45.69
>>> 47 26141 0.02
>>> 48 26142 2.96
>>> 52 26143 56.31
>>> 53 26144 5.75
>>> 54 26145 0.02
>>> 58 26146 51.99
>>> 59 26147 0.03
>>> 60 26148 2.96
>>> 63 26149 42.95
>>> 65 26150 17.06
>>> 66 26151 0.02
>>> 67 26152 2.90
>>> 71 26153 56.99
>>> 72 26154 0.03
>>> 73 26155 0.02
>>>
>>> Did anyone else experience similar problems?
>>> Is this the desired behaviour, because portaudio get data
in 60ms
>>> interval
>> or can I set it to 20ms somehow?
>>>
>>> Thanks,
>>>
>>> Csaba Zelei
>>>
>>>
>>> ________________________________
>>
>>> _______________________________________________
>>> Freeswitch-users mailing list
>>>
Freeswitch-users@lists.freeswitch.org
>>>
http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
>>> UNSUBSCRIBE:
http://lists.freeswitch.org/mailman/options/freeswitch-users
>>>
http://www.freeswitch.org
>>>
>>>
>>>
>>> Index: mod_portaudio.c
>>>
===================================================================
>>> --- mod_portaudio.c (revision 8260)
>>> +++ mod_portaudio.c (working copy)
>>> @@ -121,6 +121,7 @@
>>> int ring_interval;
>>> GFLAGS flags;
>>> switch_timer_t timer;
>>> + switch_timer_t sync_timer;
>>> } globals;
>>>
>>>
>>> @@ -282,7 +283,15 @@
>>> }
>>>
>>> switch_set_flag_locked(tech_pvt, TFLAG_IO);
>>> +
>>> + /* Start Synchronization Timer */
>>> + //Is it ok to always use 20ms? What about the 160
sample????
>>> + if (
>> switch_core_timer_init(&globals.sync_timer,"soft",
>> 20,160,switch_core_session_get_pool(session))
>> != SWITCH_STATUS_SUCCESS)
>>> + {
>>> + switch_log_printf(SWITCH_CHANNEL_LOG,
>>> SWITCH_LOG_DEBUG,
>> "Sync Timer failed!!\n");
>>> + }
>>>
>>> +
>>> /* Move Channel's State Machine to RING */
>>> switch_channel_set_state(channel, CS_RING);
>>>
>>> @@ -412,6 +421,8 @@
>>> }
>>>
>>> switch_log_printf(SWITCH_CHANNEL_LOG,
SWITCH_LOG_DEBUG, "%s
>>> CHANNEL
>> HANGUP\n",
>>
switch_channel_get_name(switch_core_session_get_channel(session)));
>>> + /* Destroy timer */
>>> + switch_core_timer_destroy(&globals.sync_timer);
>>>
>>> return SWITCH_STATUS_SUCCESS;
>>> }
>>> @@ -542,12 +553,17 @@
>>> switch_mutex_lock(globals.device_lock);
>>>
>>> get_samples:
>>> -
>>> +
>>> if ((samples = ReadAudioStream(globals.audio_stream,
>> globals.read_frame.data,
>>>
>> globals.read_codec.implementation->samples_per_frame,
>>>
>> &globals.timer)) == 0) {
>>> +
>>> + //switch_log_printf(SWITCH_CHANNEL_LOG,
SWITCH_LOG_DEBUG,
>>> "No data
>> reset timer\n");
>>> + switch_core_timer_sync(&globals.sync_timer);
>>> switch_yield(1000);
>>> +
>>> goto get_samples;
>>> +
>>> } else {
>>> globals.read_frame.datalen = samples * 2;
>>> globals.read_frame.samples = samples;
>>> @@ -562,7 +578,9 @@
>>> status = SWITCH_STATUS_SUCCESS;
>>> }
>>> switch_mutex_unlock(globals.device_lock);
>>> -
>>> +
>>> + switch_core_timer_next(&globals.sync_timer);
>>> +
>>> return status;
>>>
>>> }
>>>
>>>
>>> _______________________________________________
>>> Freeswitch-users mailing list
>>>
Freeswitch-users@lists.freeswitch.org
>>>
http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
>>> UNSUBSCRIBE:
http://lists.freeswitch.org/mailman/options/freeswitch-users
>>>
http://www.freeswitch.org
>>>
>>>
>>
>>
>>
>> --
>> Anthony Minessale II
>>
>> FreeSWITCH
http://www.freeswitch.org/
>> ClueCon
http://www.cluecon.com/
>>
>> AIM: anthm
>>
MSN:anthony_minessale@hotmail.com
>> GTALK/JABBER/
PAYPAL:anthony.minessale@gmail.com
>> IRC:
irc.freenode.net #freeswitch
>>
>> FreeSWITCH Developer Conference
>>
sip:888@conference.freeswitch.org
>>
iax:guest@conference.freeswitch.org/888
>>
googletalk:conf+888@conference.freeswitch.org
>> pstn:213-799-1400
>> _______________________________________________
>> Freeswitch-users mailing list
>>
Freeswitch-users@lists.freeswitch.org
>>
http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
>> UNSUBSCRIBE:
http://lists.freeswitch.org/mailman/options/freeswitch-users
>>
http://www.freeswitch.org
>>
>>
>
> _______________________________________________
> Freeswitch-users mailing list
>
Freeswitch-users@lists.freeswitch.org
>
http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
> UNSUBSCRIBE:
http://lists.freeswitch.org/mailman/options/freeswitch-users
>
http://www.freeswitch.org
_______________________________________________
Freeswitch-users mailing list
Freeswitch-users@lists.freeswitch.org
http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
UNSUBSCRIBE:
http://lists.freeswitch.org/mailman/options/freeswitch-users
http://www.freeswitch.org