[Live-devel] Query on AMRDeinterleaver::deliverIncomingFrame

changchun.zhang at tektronix.com changchun.zhang at tektronix.com
Wed Jan 20 22:12:41 PST 2010

Hi experts,

Have someone tested the functions used to deinterleave multi AMR frames in a single RTP packet? Here I have a question on the method AMRDeinterleave::deliverIncomingFrame. 
I suspect this method can only support the scenario that one RTP packet contains only one AMR frame.
My understanding is as below:
1. MultiframedRTPSource::networkReadHandler 
   This method receives RTP packet from the network and store it in the ReorderingPacketBuffer.
2. MultiFramedRTPSource::doGetNextFrame1()
   This method get a complete bufferedpacket form the ReorderingPacketBuffer and call the virtual method processSpecialHeader of the subclass(RawAMRRTPSource) to get the info of the AMR payload header, like the ILL, ILP etc.
   The usable packet is also transferred to the fInputBuffer of the AMRDeinterleaver.
3. FramedSource::afterGetting(this)
   In our case, the AMRDeinterleaver::afterGettingFrame is used. Then AMRDeinterleaver::afterGettingFrame1
4. AMRDeinterleave::deliverIncomingFrame
   This method is supposed to deliver the AMR frames in the packet, and placed in the fFrames[fIncomingBandId][binNumber], in which the binNumber is caculated by the (ILL, ILP, numChannels).
   I understand there should a loop to traverse all the AMR frames in a packet by this method. But it seems this method is only called once per packet, from my reading. 

I do not have the traffic of the format like multiple frames in single RTP packet. The RTSP server can only encode the .amr file to single frame /single packet.There must be something missed in my reading. 

More information about the live-devel mailing list