[Live-devel] Jitter value with openRTSP

ggomand ggomand at info.fundp.ac.be
Tue Nov 25 03:24:22 PST 2008


Hello all,

I'm writing to you regarding the jitter value calculated by openRTSP.

I've read this:

">I found out that jitter is expressed in timestamp units. Could you
 >please confirm or correct the following:
 >I divide the jitter value received by liblive by
 > 90000 for h263+, MPEG-Video JPEG-Video, MPEG-Audio
 > 8000 for AMR-NB, AMR-WB, PCMU, PCMA
 >to get the jitter in seconds.

Yes - however, it's best if you look this value (the RTP timestamp
frequency) directly, by calling "RTPSink:: rtpTimestampFrequency()"
(if you are a sender), or "RTPSource:: timestampFrequency()" (if you
are a receiver)."
source : http://osdir.com/ml/video.livedotcom.devel/2006-12/msg00003.html


In my case, I stream a mp4 video with the Helix Server 
(http://www.realnetworks.com/products/media_delivery.html)

So, to get the jitter value in seconds, I've made the following addition 
in the source code of the file "playCommon.cpp". (from line 1170 to 1175)

1165	RTPReceptionStatsDB::Iterator statsIter(src->receptionStatsDB());
1166	// Assume that there's only one SSRC source (usually the case):
1167	RTPReceptionStats* stats = statsIter.next(True);
1168	if (stats != NULL) {
1169
1170	//code added by myself
1171	double freq = src->timestampFrequency();
1172	*env << "stats->jitter()\t" << stats->jitter() << "\n";
1173	*env << "src->timestampFrequency()\t" << src->timestampFrequency() 
<< "\n";
1174	*env << "jitter (in seconds) :\t" << stats->jitter()/freq << "\n";
1175	//end of code added by myself
1176
1177	*env << "inter_packet_gap_ms_min\t" << 
stats->minInterPacketGapUS()/1000.0 << "\n";
1178	struct timeval totalGaps = stats->totalInterPacketGaps();
1179	double totalGapsMS = totalGaps.tv_sec*1000.0 + 
totalGaps.tv_usec/1000.0;
1180	unsigned totNumPacketsReceived = stats->totNumPacketsReceived();
1181	*env << "inter_packet_gap_ms_ave\t"
1182		 << (totNumPacketsReceived == 0 ? 0.0 : 
totalGapsMS/totNumPacketsReceived) << "\n";
1183	*env << "inter_packet_gap_ms_max\t" << 
stats->maxInterPacketGapUS()/1000.0 << "\n";
1184	}

I've got a timestampFrequency of 5544 (for the video subsession).
Is it normal or should it be 90000 ?

Is the code I've added is correct? It gives the jitter in seconds, right?


Another question, the fJitter value is in float, while the return value 
of the jitter() function is in integer, is it right?
Why this choice?

And my last question is, the value jitter that is given in the stats is 
the mean jitter or the last jitter?


Thank you in advance,

Gille


More information about the live-devel mailing list