Thanks for the explanation; I seem to grasp your point.
But, can I not do the same using onExpireSend and putData ?
onExpireSend should be given point to OutgoingRTPPkt as argument; but I don't know how to use it with putData. Can
anyone please help ?
- Dinil
On Wed, 11 May 2005, Michel de Boer wrote:
Hi Dinil,
This sounds like the problem that I had with sending RTP DTMF events. All RTP packets in this case have the same timestamp and ccRTP discards packets when the timestamp gets too old.
In your case you increase the PERIOD, but it seems that you keep the payload size of your packets the same. That means that the timestamps you provide with putData will not be in sync with the timestamp clock from ccRTP itself. The timestamp of your second packet indicates that this packet should come 50ms after the first packet. But you only deliver it 100ms after the first packet.
I think you have to deliver the data to ccRTP with the correct rate (depending on the number of samples per second). So if you want to double the period from 50 to 100 then you should also double the size of your payload.
Regards, Michel
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
