We are implementing a media application where we receive an MPEG transport stream and demultiplex the MP3 audio streams contained within.
In all transport streams which have constant bit-rate the audio extraction is flawless. However, when a particular variable rate stream is sent to our unit the diagnostic data indicates that some UDP packets are missing: rate varies between about 2 to 12Mbit/s. WireShark I/O graphs show a variable bit-rate with some pronounced peaks.
What is interesting is that tests with higher constant bitrate transport streams up to about 20Mbit/s do not generate problems.
I wonder (but cannot yet prove) if it is a timing problem related to a burst of UDP packets arriving and some are being missed. I have implemented the checks described in SPRU523G section 3.4.1 regarding ensuring that there are enough receive UDP buffers.
The problem still persists.
The problem does not appear to be with the transport stream itself because a VLC player running on another computer connected to the same closed network plays it OK. Also I have performed a "follow UDP stream" in WireShark, saved it, and then played that in VLC player: The result was OK. therefore, what's on the wire as seen by Wireshark and what it seen by another PC and played by VLC player are both OK.
Is it possible for UDP packets to be missed by the NDK if they all arrive very quickly (i.e. in bursts), even if there is enough buffering? I have looked at the WireShark traces and it appears that some arrive within about 6uS of each other. Howver, streams that work correctly show arrivals up to about 8uS worst case so this may not be significant.
I've looked at the EMAC_RxServiceCheck in the csl_emac module and consider the possibility that as it is processing an interrupt for another packet (or more than one) would be missed or is that not possible.
We're running a C6457 at just under 1GHz with a Vitesse 8221 PHY
Any ideas?
