[Speex-dev] "More than two wideband layers found. The stream is corrupted." problem

Marian Kechlibar marian.kechlibar at circletech.net
Fri Feb 13 01:19:21 PST 2009


Dear Speex developers,

I am currently experimenting with Speex on Symbian smartphones.

I have compiled the Speex library, and I am now using it in the
following way:

1. Record 320-byte buffers of data in PCM16 format, 8000 Hz sampling rate.
2. Feed the resulting buffer to an instance of a narrowband Speex encoder.
3. Send the encoded data over RTP.
4. Upon receiving on the other side, feed the payload to a narrowband
Speex decoderd.
5. Play the resulting PCM to the reproductor.

However, currently I am stuck in point 4. All of a sudden, the STDOUT
window appears and a huge list of the error messages
"More than two wideband layers found. The stream is corrupted."
flood the screen of the phone (btw: pretty scary sight :-)

I found the message in the file nb_celp.c, in this section of code:

               wideband = speex_bits_unpack_unsigned(bits, 1);
               if (wideband)
               {
                  speex_notify("More than two wideband layers found. The
stream is corrupted.");
                  return -2;
               }

Does this error look familiar to any of you?

How did I manage to corrupt the Speex state? I am using RTP over UDP,
and that UDP runs over GPRS/EDGE, so the sequence of the packets is
not necessarily kept - is this the problem? Should I use the built-in
jitter buffer, or write some kind of my own? Some packets get lost
on the way, since GPRS is not a particularly reliable connection.
Can this damage the Speex internal state too?

Best regards

Marian Kechlibar


More information about the Speex-dev mailing list