Re: problem while reducing the seding rate

David Sugar <[email protected]>
Newsgroups gmane.comp.gnu.ccrtp.devel
Organization GNU Telephony
Message-ID <[email protected]>
I have always used a RTP stream class that is derived from 
SymmetricRTPSession, and with a custom run method, so I had not noticed 
this.  You may well be correct that dispatchDataPacket() should be public.

Dinil Divakaran wrote:
> 
>> 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:
>>
> 
> But dispatchDataPacket is a protected class method !
> 
> - Dinil
> 
> 
>> 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
>>> [email protected]
>>> http://lists.gnu.org/mailman/listinfo/ccrtp-devel
>>
>>

_______________________________________________
Ccrtp-devel mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/ccrtp-devel
dyfet.vcf (text/x-vcard, 187 B)
begin:vcard
fn:David Sugar
n:Sugar;David
org:GNU Telephony
adr:;;;;;;USA
email;internet:[email protected]
x-mozilla-html:FALSE
url:http://www.gnutelephony.org
version:2.1
end:vcard
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.