[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Ccrtp-devel] problem while reducing the seding rate
From: |
David Sugar |
Subject: |
Re: [Ccrtp-devel] problem while reducing the seding rate |
Date: |
Wed, 11 May 2005 07:37:54 -0400 |
User-agent: |
Mozilla Thunderbird 1.0.2 (Macintosh/20050317) |
I have experimented with something functionally similar to this. I
noticed you do not have a dispatchDataPacket at the end of your loop. I
use something a bit more complex at the moment that looks like this:
void RTPStream::run(void)
{
size_t r, n;
size_t size = info.framesize;
timeout_t timer;
bool first = true;
Event event;
unsigned count, jitter = Driver::sip.jitter;
unsigned jsend = jitter;
AudioCodec *codec = session->codec;
bool dtmfdigits = false;
char dbuf[65];
int dig;
Linear tbuf;
if(Driver::sip.getDTMFInband())
dtmf = new DTMFDetect();
setTimer(0);
for(;;)
{
if(dtmfdigits)
{
dtmf->getResult(dbuf, 64);
dig = -1;
if(dbuf[0])
dig = Bayonne::getDigit(dbuf[0]);
if(dig > -1)
{
memset(&event, 0, sizeof(event));
event.id = DTMF_KEYUP;
event.dtmf.digit = dig;
event.dtmf.duration = 60;
if(session->postEvent(&event))
{
setSource(NULL);
setSink(NULL);
setTone(NULL);
}
}
dtmfdigits = false;
}
incTimer(info.framing);
setCancel(cancelDeferred);
enter();
if(tone)
{
tbuf = tone->getFrame();
if(!tbuf || !codec)
{
fcount = 0;
tone = NULL;
memset(&event, 0, sizeof(event));
event.id = AUDIO_IDLE;
session->queEvent(&event);
goto done;
}
if(codec)
{
codec->encode(tbuf, session->buffer,
info.framecount);
putBuffer(session->buffer, size);
// r = dispatchDataPacket();
}
if(jsend)
{
--jsend;
leave();
continue;
}
}
else if(source)
{
n = source->getBuffer(session->buffer, size);
if(n == size)
{
if(ending)
{
memset(&event, 0, sizeof(event));
event.id = AUDIO_ACTIVE;
session->queEvent(&event);
ending = false;
}
putBuffer(session->buffer, size);
}
else if(!ending)
{
fcount = 0;
memset(&event, 0, sizeof(event));
event.id = AUDIO_IDLE;
session->queEvent(&event);
ending = true;
}
// r = dispatchDataPacket();
if(jsend)
{
--jsend;
leave();
continue;
}
}
else
jsend = jitter;
done:
leave();
r = dispatchDataPacket();
setCancel(cancelImmediate);
if(tonecount == 1 && stopid != MSGPORT_WAKEUP)
{
memset(&event, 0, sizeof(event));
event.id = stopid;
stopid = MSGPORT_WAKEUP;
session->postEvent(&event);
}
if(tonecount)
--tonecount;
if(first)
{
while(isPendingData(0))
{
setCancel(cancelDeferred);
r = takeInDataPacket();
if(r < 0)
break;
jitter = Driver::sip.jitter;
if(first)
{
memset(&event, 0, sizeof(event));
event.id = AUDIO_START;
session->queEvent(&event);
count = 6;
while(dtmf && count--)
dtmf->putSamples(Driver::sip.silent_frame, info.framecount);
}
first = false;
enter();
n = getBuffer(session->buffer, r);
if(dtmf && codec && n == size)
{
codec->decode(session->lbuffer,
session->buffer, info.framecount);
dtmfdigits =
dtmf->putSamples(session->lbuffer, info.framecount);
}
if(sink)
sink->putBuffer(session->buffer, n);
leave();
setCancel(cancelImmediate);
}
}
else if(!jitter)
{
if(isPendingData(0))
{
setCancel(cancelDeferred);
r = takeInDataPacket();
if(r < 0)
break;
enter();
n = getBuffer(session->buffer, r);
if(dtmf && codec && n == size)
{
codec->decode(session->lbuffer,
session->buffer, info.framecount);
dtmfdigits =
dtmf->putSamples(session->lbuffer, info.framecount);
}
if(sink)
sink->putBuffer(session->buffer, n);
leave();
setCancel(cancelImmediate);
}
else
{
memset(&event, 0, sizeof(event));
event.id = AUDIO_STOP;
session->queEvent(&event);
first = true;
}
}
else if(!first)
--jitter;
timer = getTimer();
if(timer)
Thread::sleep(timer);
else
Thread::yield();
enter();
if(fcount > 1)
--fcount;
else if(fcount == 1)
{
fcount = 0;
source = NULL;
sink = NULL;
tone = NULL;
memset(&event, 0, sizeof(event));
event.id = AUDIO_IDLE;
session->postEvent(&event);
}
leave();
}
}
Dinil Divakaran wrote:
Hi all,
I was working on an example for transmitting an audio file using ccrtp
(http://www.gnu.org/software/ccrtp/doc/refman/html/audiotx_8cpp-example.html)
The following lines are from the above example. In this code, packets are
sent and then thread sleeps for a time of 'PERIOD' milliseconds. I changed
the value of PERIOD to 100 (milliseconds) and found that even though the
program says that the packets are sent; the packets weren't actually sent.
'tcpdump' showed that only the first packet was sent; and thereafter only
RTCP packets were sent (with still lesser frequency). When I changed the
value of 'PERIOD' to 50, the packets were sent successfully.
Can anyone please tell me where have I gone wrong ?
--------------------------------------------------------------------------
.
.
.
cout << "Transmitting " << PACKET_SIZE
<< " octects long packets "
<< "every " << PERIOD << " milliseconds..." << endl;
unsigned char buffer[PACKET_SIZE];
int count=PACKET_SIZE;
// This will be useful for periodic execution
TimerPort::setTimer(PERIOD);
setCancel(cancelImmediate);
// This is the main loop, where packets are transmitted.
for( int i = 0 ; (!sendingfile || count > 0) ; i++ ){
count = ::read(audioinput,buffer,PACKET_SIZE);
if( count > 0 ){
// send an RTP packet, providing timestamp,
// payload type and payload.
socket->putData(PACKET_SIZE * i, buffer, PACKET_SIZE);
}
cout << "." << flush;
// Let's wait for the next cycle
Thread::sleep(TimerPort::getTimer());
TimerPort::incTimer(PERIOD);
}
cout << endl << "I have got no more data to send. " <<endl;
.
.
.
.
--------------------------------------------------------------------------
- Dinil
_______________________________________________
Ccrtp-devel mailing list
address@hidden
http://lists.gnu.org/mailman/listinfo/ccrtp-devel
dyfet.vcf
Description: Vcard
- [Ccrtp-devel] problem while reducing the seding rate, Dinil Divakaran, 2005/05/11
- Re: [Ccrtp-devel] problem while reducing the seding rate,
David Sugar <=
- Re: [Ccrtp-devel] problem while reducing the seding rate, Michel de Boer, 2005/05/11
- Re: [Ccrtp-devel] problem while reducing the seding rate, David Sugar, 2005/05/11
- Re: [Ccrtp-devel] problem while reducing the seding rate, Michel de Boer, 2005/05/11
- Re: [Ccrtp-devel] problem while reducing the seding rate, Dinil Divakaran, 2005/05/12
- Re: [Ccrtp-devel] problem while reducing the seding rate, Michel de Boer, 2005/05/12
- Re: [Ccrtp-devel] problem while reducing the seding rate, Dinil Divakaran, 2005/05/12
- Re: [Ccrtp-devel] problem while reducing the seding rate, David Sugar, 2005/05/13
- Re: [Ccrtp-devel] problem while reducing the seding rate, Michel de Boer, 2005/05/13