[Live-devel] dummy ADUs while scaling up
Matthew Romaine
Matthew.Romaine at jp.sony.com
Mon Feb 28 19:19:02 PST 2005
Ross,
Awesome - thanks for the clear explanation and update!
Looking forward to testing this out.
Cheers,
Matt
On 2005/02/28, at 19:03, Ross Finlayson wrote:
> Matt,
>
> Sorry for taking so long to answer this.
>
>> I turned on full debugging output for the liveMedia library, and it
>> looks like the 8 identical pts values are due to dummy ADU frames
>> being inserted. The debugging output snippet below shows before and
>> after sections of a "Scale:" command being acknowledged by the
>> server.
>>
>> The comments in your code state "This situation should occur only if
>> an intermediate ADU was lost", which is by definition the case for
>> this implementation when scaling since we're skipping over audio
>> frames. As I'm not entirely familiar with the innards of mp3 data and
>> how you're handling all this, where do you think is the best place to
>> resolve this?
> Here's the issue:
>
> Most MP3 frames are not self-contained - meaning that, in general,
> it's not possible to take an individual MP3 frame - all by itself -
> and play it, without error. The reason for this is that MP3 frames (in
> general) make use of data that is actually stored in the preceding
> frame. (This is sometimes called a "bit reservoir".) I.e., each MP3
> frame includes a back-pointer to data from the previous frame.
>
> Similarly, you can't play a MP3 file at N-times speed by just
> selecting every Nth frame.
>
> To overcome this problem when streaming MP3 audio using 'trick play',
> we (at the server end) convert the sequence of MP3 frames to 'ADUs'
> (application data units, see <http://www.live.com/rtp-mp3.txt>), then
> select every Nth *ADU*, and then reassemble the resulting sequence of
> ADUs back into a sequence of MP3 frames.
>
> This usually works well, except that, occasionally, the resulting
> sequence of ADUs (formed by selecting every Nth ADU from the original
> sequence) can't be reassembled one-for-one back into a corresponding
> sequence of MP3 frames. This can happen if the back-pointer for one
> ADU would - if the ADU were reassembled into a MP3 frame - overlap the
> data from the previous ADU. (Note that this happens only because we
> removed ADUs from the original sequence; otherwise, the translation
> MP3 frame -> ADU -> MP3 frame is completely one-to-one.) When this
> situation happens, we have to add a dummy (empty) ADU into the
> sequence, before we reassemble the ADU sequence into MP3 frames. So,
> the resulting MP3 stream will contain occasional short gaps (caused by
> the dummy frames).
>
> Unfortunately the version of the code that you used contained a bug,
> which caused 8 dummy ADUs to be inserted, instead of just one. (The
> bug got introduced after I had tested this code originally.) This bug
> has now been fixed in the latest software release (2005.02.28). If you
> build with this new version of the software, MP3 streaming at 'fast
> forward' should sound a lot better (although, because of the need for
> occasional dummy ADUs/frames, it can never be perfect.)
>
>
> Ross Finlayson
> LIVE.COM
> <http://www.live.com/>
>
> _______________________________________________
> live-devel mailing list
> live-devel at lists.live.com
> http://lists.live.com/mailman/listinfo/live-devel
-----------------------------------------------------
Tel: +81-3-5448-6065
Fax: +81-3-5448-5617
Audio Codec Development Department
Personal Communications Business Division
ITCNC, Sony Corporation, Japan
-----------------------------------------------------
More information about the live-devel
mailing list