[Live-devel] dummy ADUs while scaling up
Matthew Romaine
Matthew.Romaine at jp.sony.com
Tue Feb 22 16:32:28 PST 2005
Hi Ross,
Not sure to what extent you got mp3 trickplay working with VLC (just
packets streaming, or audio out too?), but I found something
interesting I'm hoping you can explain.
After an RTSP "Scale:" command was accepted by the onDemandRTSPServer,
the StreamRead in VLC's livedotcom.cpp was being passed the same
timestamp value multiple times (consistently, actually; for 8 times in
a row, and then it would get the next (sequentially correct) pts
value).
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? While it could conceivably be done on the client side, I wonder
if the dummy-frame insertion should be special-cased out for cases when
loss of intermediate ADUs is intentional...
tia,
matt
----- debugging output (before and after Scale: 2.0 is acknowledged)
-----
mp3GetADUInfoFromFrame: hdr: fffb9264, frameSize: 418, part2_3_lengths:
1007,1124,522,582, aduSize: 405, backpointer: 50
a->m:read frame 405<-50, fs:418, sis:32, dh:382, (descriptor size: 2)
a->m:outputting frame for 392<-60 (fs 418, dh 382), (descriptorSize: 2)
a->m:outputting 332 bytes from 392<-60
a->m:outputting 50 bytes from 405<-50
mp3GetADUInfoFromFrame: hdr: fffb9264, frameSize: 418, part2_3_lengths:
939,936,501,426, aduSize: 351, backpointer: 27
m->a:read frame 351<-27, fs:418, sis:32, dh:382, (descriptor size: 0)
doGetNextFrame1()
m->a:outputting ADU 351<-27, nbr:387, sis:32, dh:382, (descriptor size:
2)
fScale-th frame; calling afterGetting
mp3GetADUInfoFromFrame: hdr: fffb9264, frameSize: 418, part2_3_lengths:
939,936,501,426, aduSize: 351, backpointer: 27
a->m:read frame 351<-27, fs:418, sis:32, dh:382, (descriptor size: 2)
a->m:outputting frame for 405<-50 (fs 418, dh 382), (descriptorSize: 2)
a->m:outputting 355 bytes from 405<-50
a->m:outputting 27 bytes from 351<-27
mp3GetADUInfoFromFrame: hdr: fffb9264, frameSize: 418, part2_3_lengths:
984,885,434,508, aduSize: 352, backpointer: 58
m->a:read frame 352<-58, fs:418, sis:32, dh:382, (descriptor size: 0)
doGetNextFrame1()
m->a:outputting ADU 352<-58, nbr:388, sis:32, dh:382, (descriptor size:
2)
fScale-th frame; calling afterGetting
mp3GetADUInfoFromFrame: hdr: fffb9264, frameSize: 418, part2_3_lengths:
984,885,434,508, aduSize: 352, backpointer: 58
a->m:read frame 352<-58, fs:418, sis:32, dh:382, (descriptor size: 2)
a->m:outputting frame for 351<-27 (fs 418, dh 382), (descriptorSize: 2)
a->m:outputting 324 bytes from 351<-27
a->m:outputting 58 bytes from 352<-58
RTSPClientSession[0x2800800]::incomingRequestHandler1() read 170
bytes:PLAY rtsp://43.13.117.153:8554/mp3AudioTest/track1 RTSP/1.0
CSeq: 5
Session: 1
Scale: 2.000000
User-Agent: VLC Media Player (LIVE.COM Streaming Media v2005.02.13)
parseRequestString() returned cmdName "PLAY", urlPreSuffix
"mp3AudioTest", urlSuffix "track1"
sending response: RTSP/1.0 200 OK
CSeq: 5
Date: Tue, Feb 22 2005 07:02:47 GMT
Scale: 2.000000
Session: 1
RTP-Info: url=rtsp://43.13.117.153:8554/mp3AudioTest/track1;seq=23955
mp3GetADUInfoFromFrame: hdr: fffb9264, frameSize: 418, part2_3_lengths:
842,928,524,400, aduSize: 337, backpointer: 88
m->a:read frame 337<-88, fs:418, sis:32, dh:382, (descriptor size: 0)
doGetNextFrame1()
m->a:outputting ADU 337<-88, nbr:373, sis:32, dh:382, (descriptor size:
2)
fScale-th frame; calling afterGetting
mp3GetADUInfoFromFrame: hdr: fffb9264, frameSize: 418, part2_3_lengths:
842,928,524,400, aduSize: 337, backpointer: 88
a->m:read frame 337<-88, fs:418, sis:32, dh:382, (descriptor size: 2)
a->m:outputting frame for 352<-58 (fs 418, dh 382), (descriptorSize: 2)
a->m:outputting 294 bytes from 352<-58
a->m:outputting 88 bytes from 337<-88
mp3GetADUInfoFromFrame: hdr: fffb9264, frameSize: 418, part2_3_lengths:
805,797,577,521, aduSize: 338, backpointer: 133
m->a:read frame 338<-133, fs:418, sis:32, dh:382, (descriptor size: 0)
doGetNextFrame1()
m->a:outputting ADU 338<-133, nbr:374, sis:32, dh:382, (descriptor
size: 2)
skipping this frame
mp3GetADUInfoFromFrame: hdr: fffb9264, frameSize: 418, part2_3_lengths:
822,886,458,436, aduSize: 326, backpointer: 177
m->a:read frame 326<-177, fs:418, sis:32, dh:382, (descriptor size: 0)
doGetNextFrame1()
m->a:outputting ADU 326<-177, nbr:362, sis:32, dh:382, (descriptor
size: 2)
fScale-th frame; calling afterGetting
mp3GetADUInfoFromFrame: hdr: fffb9264, frameSize: 418, part2_3_lengths:
822,886,458,436, aduSize: 326, backpointer: 177
a->m:read frame 326<-177, fs:418, sis:32, dh:382, (descriptor size: 2)
a->m:need to insert a dummy ADU (177, 133, 382) [2, 4]
mp3GetADUInfoFromFrame: hdr: fffb9264, frameSize: 418, part2_3_lengths:
0,0,0,0, aduSize: 0, backpointer: 133
a->m:need to insert a dummy ADU (177, 135, 382) [2, 5]
mp3GetADUInfoFromFrame: hdr: fffb9264, frameSize: 418, part2_3_lengths:
0,0,0,0, aduSize: 0, backpointer: 135
a->m:need to insert a dummy ADU (177, 137, 382) [2, 6]
mp3GetADUInfoFromFrame: hdr: fffb9264, frameSize: 418, part2_3_lengths:
0,0,0,0, aduSize: 0, backpointer: 137
a->m:need to insert a dummy ADU (177, 139, 382) [2, 7]
mp3GetADUInfoFromFrame: hdr: fffb9264, frameSize: 418, part2_3_lengths:
0,0,0,0, aduSize: 0, backpointer: 139
a->m:need to insert a dummy ADU (177, 141, 382) [2, 8]
mp3GetADUInfoFromFrame: hdr: fffb9264, frameSize: 418, part2_3_lengths:
0,0,0,0, aduSize: 0, backpointer: 141
a->m:need to insert a dummy ADU (177, 143, 382) [2, 9]
mp3GetADUInfoFromFrame: hdr: fffb9264, frameSize: 418, part2_3_lengths:
0,0,0,0, aduSize: 0, backpointer: 143
a->m:need to insert a dummy ADU (177, 145, 382) [2, 0]
mp3GetADUInfoFromFrame: hdr: fffb9264, frameSize: 418, part2_3_lengths:
0,0,0,0, aduSize: 0, backpointer: 145
a->m:need to insert a dummy ADU (177, 147, 382) [2, 1]
mp3GetADUInfoFromFrame: hdr: fffb9264, frameSize: 418, part2_3_lengths:
0,0,0,0, aduSize: 0, backpointer: 147
a->m:need to insert a dummy ADU (177, 149, 382) [2, 2]
a->m:outputting frame for 337<-88 (fs 418, dh 382), (descriptorSize: 2)
a->m:outputting 249 bytes from 337<-88
a->m:outputting 133 bytes from 380<-133
a->m:outputting frame for 380<-133 (fs 418, dh 382), (descriptorSize: 2)
a->m:outputting 247 bytes from 380<-133
a->m:outputting 135 bytes from 380<-135
a->m:outputting frame for 380<-135 (fs 418, dh 382), (descriptorSize: 2)
a->m:outputting 245 bytes from 380<-135
a->m:outputting 137 bytes from 380<-137
a->m:outputting frame for 380<-137 (fs 418, dh 382), (descriptorSize: 2)
a->m:outputting 243 bytes from 380<-137
a->m:outputting 139 bytes from 380<-139
a->m:outputting frame for 380<-139 (fs 418, dh 382), (descriptorSize: 2)
a->m:outputting 241 bytes from 380<-139
a->m:outputting 141 bytes from 380<-141
a->m:outputting frame for 380<-141 (fs 418, dh 382), (descriptorSize: 2)
a->m:outputting 239 bytes from 380<-141
a->m:outputting 143 bytes from 380<-143
a->m:outputting frame for 380<-143 (fs 418, dh 382), (descriptorSize: 2)
a->m:outputting 237 bytes from 380<-143
a->m:outputting 145 bytes from 380<-145
a->m:outputting frame for 380<-145 (fs 418, dh 382), (descriptorSize: 2)
a->m:outputting 235 bytes from 380<-145
a->m:outputting 147 bytes from 380<-147
a->m:outputting frame for 380<-147 (fs 418, dh 382), (descriptorSize: 2)
a->m:outputting 233 bytes from 380<-147
a->m:outputting 149 bytes from 326<-177
mp3GetADUInfoFromFrame: hdr: fffb9264, frameSize: 418, part2_3_lengths:
847,974,468,449, aduSize: 343, backpointer: 233
m->a:read frame 343<-233, fs:418, sis:32, dh:382, (descriptor size: 0)
doGetNextFrame1()
m->a:outputting ADU 343<-233, nbr:379, sis:32, dh:382, (descriptor
size: 2)
skipping this frame
mp3GetADUInfoFromFrame: hdr: fffb9264, frameSize: 418, part2_3_lengths:
1026,917,447,466, aduSize: 357, backpointer: 272
m->a:read frame 357<-272, fs:418, sis:32, dh:382, (descriptor size: 0)
doGetNextFrame1()
m->a:outputting ADU 357<-272, nbr:393, sis:32, dh:382, (descriptor
size: 2)
fScale-th frame; calling afterGetting
mp3GetADUInfoFromFrame: hdr: fffb9264, frameSize: 418, part2_3_lengths:
1026,917,447,466, aduSize: 357, backpointer: 272
a->m:read frame 357<-272, fs:418, sis:32, dh:382, (descriptor size: 2)
a->m:need to insert a dummy ADU (272, 233, 382) [1, 3]
mp3GetADUInfoFromFrame: hdr: fffb9264, frameSize: 418, part2_3_lengths:
0,0,0,0, aduSize: 0, backpointer: 233
a->m:need to insert a dummy ADU (272, 235, 382) [1, 4]
mp3GetADUInfoFromFrame: hdr: fffb9264, frameSize: 418, part2_3_lengths:
0,0,0,0, aduSize: 0, backpointer: 235
a->m:need to insert a dummy ADU (272, 237, 382) [1, 5]
mp3GetADUInfoFromFrame: hdr: fffb9264, frameSize: 418, part2_3_lengths:
0,0,0,0, aduSize: 0, backpointer: 237
a->m:need to insert a dummy ADU (272, 239, 382) [1, 6]
mp3GetADUInfoFromFrame: hdr: fffb9264, frameSize: 418, part2_3_lengths:
0,0,0,0, aduSize: 0, backpointer: 239
a->m:need to insert a dummy ADU (272, 241, 382) [1, 7]
mp3GetADUInfoFromFrame: hdr: fffb9264, frameSize: 418, part2_3_lengths:
0,0,0,0, aduSize: 0, backpointer: 241
a->m:need to insert a dummy ADU (272, 243, 382) [1, 8]
mp3GetADUInfoFromFrame: hdr: fffb9264, frameSize: 418, part2_3_lengths:
0,0,0,0, aduSize: 0, backpointer: 243
a->m:need to insert a dummy ADU (272, 245, 382) [1, 9]
mp3GetADUInfoFromFrame: hdr: fffb9264, frameSize: 418, part2_3_lengths:
0,0,0,0, aduSize: 0, backpointer: 245
a->m:need to insert a dummy ADU (272, 247, 382) [1, 0]
mp3GetADUInfoFromFrame: hdr: fffb9264, frameSize: 418, part2_3_lengths:
0,0,0,0, aduSize: 0, backpointer: 247
a->m:need to insert a dummy ADU (272, 249, 382) [1, 1]
a->m:outputting frame for 326<-177 (fs 418, dh 382), (descriptorSize: 2)
a->m:outputting 149 bytes from 326<-177
a->m:outputting 233 bytes from 380<-233
a->m:outputting frame for 380<-233 (fs 418, dh 382), (descriptorSize: 2)
a->m:outputting 147 bytes from 380<-233
a->m:outputting 235 bytes from 380<-235
a->m:outputting frame for 380<-235 (fs 418, dh 382), (descriptorSize: 2)
a->m:outputting 145 bytes from 380<-235
a->m:outputting 237 bytes from 380<-237
a->m:outputting frame for 380<-237 (fs 418, dh 382), (descriptorSize: 2)
a->m:outputting 143 bytes from 380<-237
a->m:outputting 239 bytes from 380<-239
a->m:outputting frame for 380<-239 (fs 418, dh 382), (descriptorSize: 2)
a->m:outputting 141 bytes from 380<-239
a->m:outputting 241 bytes from 380<-241
a->m:outputting frame for 380<-241 (fs 418, dh 382), (descriptorSize: 2)
a->m:outputting 139 bytes from 380<-241
a->m:outputting 243 bytes from 380<-243
a->m:outputting frame for 380<-243 (fs 418, dh 382), (descriptorSize: 2)
a->m:outputting 137 bytes from 380<-243
a->m:outputting 245 bytes from 380<-245
a->m:outputting frame for 380<-245 (fs 418, dh 382), (descriptorSize: 2)
a->m:outputting 135 bytes from 380<-245
a->m:outputting 247 bytes from 380<-247
a->m:outputting frame for 380<-247 (fs 418, dh 382), (descriptorSize: 2)
a->m:outputting 133 bytes from 380<-247
a->m:outputting 249 bytes from 357<-272
-----------------------------------------------------
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