Fix ADTS extraction with mid-stream ID3
PiperOrigin-RevId: 304184650
This commit is contained in:
parent
8cb7907e71
commit
eb65f5e20a
@ -132,6 +132,9 @@
|
||||
* Fix playback of Widevine protected content that only provides V1 PSSH atoms
|
||||
on API levels 21 and 22.
|
||||
* Fix playback of PlayReady content on Fire TV Stick (Gen 2).
|
||||
* Fix playback of WAV files with trailing non-media bytes
|
||||
([#7129](https://github.com/google/ExoPlayer/issues/7129)).
|
||||
* Fix playback of ADTS files with mid-stream ID3 metadata.
|
||||
* DASH:
|
||||
* Update the manifest URI to avoid repeated HTTP redirects
|
||||
([#6907](https://github.com/google/ExoPlayer/issues/6907)).
|
||||
|
@ -355,42 +355,44 @@ public final class AdtsReader implements ElementaryStreamReader {
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether the given syncPositionCandidate is a real SYNC word.
|
||||
*
|
||||
* <p>SYNC word pattern can occur within AAC data, so we perform a few checks to make sure this is
|
||||
* really a SYNC word. This includes:
|
||||
* Checks whether a candidate SYNC word position is likely to be the position of a real SYNC word.
|
||||
* The caller must check that the first byte of the SYNC word is 0xFF before calling this method.
|
||||
* This method performs the following checks:
|
||||
*
|
||||
* <ul>
|
||||
* <li>Checking if MPEG version of this frame matches the first detected version.
|
||||
* <li>Checking if the sample rate index of this frame matches the first detected sample rate
|
||||
* index.
|
||||
* <li>Checking if the bytes immediately after the current package also match a SYNC-word.
|
||||
* <li>The MPEG version of this frame must match the previously detected version.
|
||||
* <li>The sample rate index of this frame must match the previously detected sample rate index.
|
||||
* <li>The frame size must be at least 7 bytes
|
||||
* <li>The bytes following the frame must be either another SYNC word with the same MPEG
|
||||
* version, or the start of an ID3 header.
|
||||
* </ul>
|
||||
*
|
||||
* If the buffer runs out of data for any check, optimistically skip that check, because
|
||||
* AdtsReader consumes each buffer as a whole. We will still run a header validity check later.
|
||||
* With the exception of the first check, if there is insufficient data in the buffer then checks
|
||||
* are optimistically skipped and {@code true} is returned.
|
||||
*
|
||||
* @param pesBuffer The buffer containing at data to check.
|
||||
* @param syncPositionCandidate The candidate SYNC word position. May be -1 if the first byte of
|
||||
* the candidate was the last byte of the previously consumed buffer.
|
||||
* @return True if all checks were passed or skipped, indicating the position is likely to be the
|
||||
* position of a real SYNC word. False otherwise.
|
||||
*/
|
||||
private boolean checkSyncPositionValid(ParsableByteArray pesBuffer, int syncPositionCandidate) {
|
||||
// The SYNC word contains 2 bytes, and the first byte may be in the previously consumed buffer.
|
||||
// Hence the second byte of the SYNC word may be byte 0 of this buffer, and
|
||||
// syncPositionCandidate (which indicates position of the first byte of the SYNC word) may be
|
||||
// -1.
|
||||
// Since the first byte of the SYNC word is always FF, which does not contain any informational
|
||||
// bits, we set the byte position to be the second byte in the SYNC word to ensure it's always
|
||||
// within this buffer.
|
||||
pesBuffer.setPosition(syncPositionCandidate + 1);
|
||||
if (!tryRead(pesBuffer, adtsScratch.data, 1)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// The MPEG version of this frame must match the previously detected version.
|
||||
adtsScratch.setPosition(4);
|
||||
int currentFrameVersion = adtsScratch.readBits(1);
|
||||
if (firstFrameVersion != VERSION_UNSET && currentFrameVersion != firstFrameVersion) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// The sample rate index of this frame must match the previously detected sample rate index.
|
||||
if (firstFrameSampleRateIndex != C.INDEX_UNSET) {
|
||||
if (!tryRead(pesBuffer, adtsScratch.data, 1)) {
|
||||
// Insufficient data for further checks.
|
||||
return true;
|
||||
}
|
||||
adtsScratch.setPosition(2);
|
||||
@ -401,24 +403,50 @@ public final class AdtsReader implements ElementaryStreamReader {
|
||||
pesBuffer.setPosition(syncPositionCandidate + 2);
|
||||
}
|
||||
|
||||
// Optionally check the byte after this frame matches SYNC word.
|
||||
|
||||
// The frame size must be at least 7 bytes.
|
||||
if (!tryRead(pesBuffer, adtsScratch.data, 4)) {
|
||||
// Insufficient data for further checks.
|
||||
return true;
|
||||
}
|
||||
adtsScratch.setPosition(14);
|
||||
int frameSize = adtsScratch.readBits(13);
|
||||
if (frameSize <= 6) {
|
||||
// Not a frame.
|
||||
if (frameSize < 7) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// The bytes following the frame must be either another SYNC word with the same MPEG version, or
|
||||
// the start of an ID3 header.
|
||||
byte[] data = pesBuffer.data;
|
||||
int dataLimit = pesBuffer.limit();
|
||||
int nextSyncPosition = syncPositionCandidate + frameSize;
|
||||
if (nextSyncPosition + 1 >= pesBuffer.limit()) {
|
||||
if (nextSyncPosition >= dataLimit) {
|
||||
// Insufficient data for further checks.
|
||||
return true;
|
||||
}
|
||||
return (isAdtsSyncBytes(pesBuffer.data[nextSyncPosition], pesBuffer.data[nextSyncPosition + 1])
|
||||
&& (firstFrameVersion == VERSION_UNSET
|
||||
|| ((pesBuffer.data[nextSyncPosition + 1] & 0x8) >> 3) == currentFrameVersion));
|
||||
if (data[nextSyncPosition] == (byte) 0xFF) {
|
||||
if (nextSyncPosition + 1 == dataLimit) {
|
||||
// Insufficient data for further checks.
|
||||
return true;
|
||||
}
|
||||
return isAdtsSyncBytes((byte) 0xFF, data[nextSyncPosition + 1])
|
||||
&& ((data[nextSyncPosition + 1] & 0x8) >> 3) == currentFrameVersion;
|
||||
} else {
|
||||
if (data[nextSyncPosition] != 'I') {
|
||||
return false;
|
||||
}
|
||||
if (nextSyncPosition + 1 == dataLimit) {
|
||||
// Insufficient data for further checks.
|
||||
return true;
|
||||
}
|
||||
if (data[nextSyncPosition + 1] != 'D') {
|
||||
return false;
|
||||
}
|
||||
if (nextSyncPosition + 2 == dataLimit) {
|
||||
// Insufficient data for further checks.
|
||||
return true;
|
||||
}
|
||||
return data[nextSyncPosition + 2] == '3';
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isAdtsSyncBytes(byte firstByte, byte secondByte) {
|
||||
|
@ -29,6 +29,11 @@ public final class AdtsExtractorTest {
|
||||
ExtractorAsserts.assertBehavior(AdtsExtractor::new, "ts/sample.adts");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void sample_with_id3() throws Exception {
|
||||
ExtractorAsserts.assertBehavior(AdtsExtractor::new, "ts/sample_with_id3.adts");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void sample_withSeeking() throws Exception {
|
||||
ExtractorAsserts.assertBehavior(
|
||||
|
BIN
testdata/src/test/assets/ts/sample_with_id3.adts
vendored
Normal file
BIN
testdata/src/test/assets/ts/sample_with_id3.adts
vendored
Normal file
Binary file not shown.
607
testdata/src/test/assets/ts/sample_with_id3.adts.0.dump
vendored
Normal file
607
testdata/src/test/assets/ts/sample_with_id3.adts.0.dump
vendored
Normal file
@ -0,0 +1,607 @@
|
||||
seekMap:
|
||||
isSeekable = false
|
||||
duration = UNSET TIME
|
||||
getPosition(0) = [[timeUs=0, position=0]]
|
||||
numberOfTracks = 2
|
||||
track 0:
|
||||
total output bytes = 30797
|
||||
sample count = 144
|
||||
format 0:
|
||||
id = 0
|
||||
sampleMimeType = audio/mp4a-latm
|
||||
codecs = mp4a.40.2
|
||||
channelCount = 1
|
||||
sampleRate = 44100
|
||||
initializationData:
|
||||
data = length 2, hash 5F7
|
||||
sample 0:
|
||||
time = 0
|
||||
flags = 1
|
||||
data = length 23, hash 47DE9131
|
||||
sample 1:
|
||||
time = 23219
|
||||
flags = 1
|
||||
data = length 6, hash 31CF3A46
|
||||
sample 2:
|
||||
time = 46438
|
||||
flags = 1
|
||||
data = length 6, hash 31CF3A46
|
||||
sample 3:
|
||||
time = 69657
|
||||
flags = 1
|
||||
data = length 6, hash 31CF3A46
|
||||
sample 4:
|
||||
time = 92876
|
||||
flags = 1
|
||||
data = length 6, hash 31EC5206
|
||||
sample 5:
|
||||
time = 116095
|
||||
flags = 1
|
||||
data = length 171, hash 4F6478F6
|
||||
sample 6:
|
||||
time = 139314
|
||||
flags = 1
|
||||
data = length 202, hash AF4068A3
|
||||
sample 7:
|
||||
time = 162533
|
||||
flags = 1
|
||||
data = length 210, hash E4C10618
|
||||
sample 8:
|
||||
time = 185752
|
||||
flags = 1
|
||||
data = length 217, hash 9ECCD0D9
|
||||
sample 9:
|
||||
time = 208971
|
||||
flags = 1
|
||||
data = length 212, hash 6BAC2CD9
|
||||
sample 10:
|
||||
time = 232190
|
||||
flags = 1
|
||||
data = length 223, hash 188B6010
|
||||
sample 11:
|
||||
time = 255409
|
||||
flags = 1
|
||||
data = length 222, hash C1A04D0C
|
||||
sample 12:
|
||||
time = 278628
|
||||
flags = 1
|
||||
data = length 220, hash D65F9768
|
||||
sample 13:
|
||||
time = 301847
|
||||
flags = 1
|
||||
data = length 227, hash B96C9E14
|
||||
sample 14:
|
||||
time = 325066
|
||||
flags = 1
|
||||
data = length 229, hash 9FB09972
|
||||
sample 15:
|
||||
time = 348285
|
||||
flags = 1
|
||||
data = length 220, hash 2271F053
|
||||
sample 16:
|
||||
time = 371504
|
||||
flags = 1
|
||||
data = length 226, hash 5EDD2F4F
|
||||
sample 17:
|
||||
time = 394723
|
||||
flags = 1
|
||||
data = length 239, hash 957510E0
|
||||
sample 18:
|
||||
time = 417942
|
||||
flags = 1
|
||||
data = length 224, hash 718A8F47
|
||||
sample 19:
|
||||
time = 441161
|
||||
flags = 1
|
||||
data = length 225, hash 5E11E293
|
||||
sample 20:
|
||||
time = 464380
|
||||
flags = 1
|
||||
data = length 227, hash FCE50D27
|
||||
sample 21:
|
||||
time = 487599
|
||||
flags = 1
|
||||
data = length 212, hash 77908C40
|
||||
sample 22:
|
||||
time = 510818
|
||||
flags = 1
|
||||
data = length 227, hash 34C4EB32
|
||||
sample 23:
|
||||
time = 534037
|
||||
flags = 1
|
||||
data = length 231, hash 95488307
|
||||
sample 24:
|
||||
time = 557256
|
||||
flags = 1
|
||||
data = length 226, hash 97F12D6F
|
||||
sample 25:
|
||||
time = 580475
|
||||
flags = 1
|
||||
data = length 236, hash 91A9D9A2
|
||||
sample 26:
|
||||
time = 603694
|
||||
flags = 1
|
||||
data = length 227, hash 27A608F9
|
||||
sample 27:
|
||||
time = 626913
|
||||
flags = 1
|
||||
data = length 229, hash 57DAAE4
|
||||
sample 28:
|
||||
time = 650132
|
||||
flags = 1
|
||||
data = length 235, hash ED30AC34
|
||||
sample 29:
|
||||
time = 673351
|
||||
flags = 1
|
||||
data = length 227, hash BD3D6280
|
||||
sample 30:
|
||||
time = 696570
|
||||
flags = 1
|
||||
data = length 233, hash 694B1087
|
||||
sample 31:
|
||||
time = 719789
|
||||
flags = 1
|
||||
data = length 232, hash 1EDFE047
|
||||
sample 32:
|
||||
time = 743008
|
||||
flags = 1
|
||||
data = length 228, hash E2A831F4
|
||||
sample 33:
|
||||
time = 766227
|
||||
flags = 1
|
||||
data = length 231, hash 757E6012
|
||||
sample 34:
|
||||
time = 789446
|
||||
flags = 1
|
||||
data = length 223, hash 4003D791
|
||||
sample 35:
|
||||
time = 812665
|
||||
flags = 1
|
||||
data = length 232, hash 3CF9A07C
|
||||
sample 36:
|
||||
time = 835884
|
||||
flags = 1
|
||||
data = length 228, hash 25AC3FF7
|
||||
sample 37:
|
||||
time = 859103
|
||||
flags = 1
|
||||
data = length 220, hash 2C1824CE
|
||||
sample 38:
|
||||
time = 882322
|
||||
flags = 1
|
||||
data = length 229, hash 46FDD8FB
|
||||
sample 39:
|
||||
time = 905541
|
||||
flags = 1
|
||||
data = length 237, hash F6988018
|
||||
sample 40:
|
||||
time = 928760
|
||||
flags = 1
|
||||
data = length 242, hash 60436B6B
|
||||
sample 41:
|
||||
time = 951979
|
||||
flags = 1
|
||||
data = length 275, hash 90EDFA8E
|
||||
sample 42:
|
||||
time = 975198
|
||||
flags = 1
|
||||
data = length 242, hash 5C86EFCB
|
||||
sample 43:
|
||||
time = 998417
|
||||
flags = 1
|
||||
data = length 233, hash E0A51B82
|
||||
sample 44:
|
||||
time = 1021636
|
||||
flags = 1
|
||||
data = length 235, hash 590DF14F
|
||||
sample 45:
|
||||
time = 1044855
|
||||
flags = 1
|
||||
data = length 238, hash 69AF4E6E
|
||||
sample 46:
|
||||
time = 1068074
|
||||
flags = 1
|
||||
data = length 235, hash E745AE8D
|
||||
sample 47:
|
||||
time = 1091293
|
||||
flags = 1
|
||||
data = length 223, hash 295F2A13
|
||||
sample 48:
|
||||
time = 1114512
|
||||
flags = 1
|
||||
data = length 228, hash E2F47B21
|
||||
sample 49:
|
||||
time = 1137731
|
||||
flags = 1
|
||||
data = length 229, hash 262C3CFE
|
||||
sample 50:
|
||||
time = 1160950
|
||||
flags = 1
|
||||
data = length 232, hash 4B5BF5E8
|
||||
sample 51:
|
||||
time = 1184169
|
||||
flags = 1
|
||||
data = length 233, hash F3D80836
|
||||
sample 52:
|
||||
time = 1207388
|
||||
flags = 1
|
||||
data = length 237, hash 32E0A11E
|
||||
sample 53:
|
||||
time = 1230607
|
||||
flags = 1
|
||||
data = length 228, hash E1B89F13
|
||||
sample 54:
|
||||
time = 1253826
|
||||
flags = 1
|
||||
data = length 237, hash 8BDD9E38
|
||||
sample 55:
|
||||
time = 1277045
|
||||
flags = 1
|
||||
data = length 235, hash 3C84161F
|
||||
sample 56:
|
||||
time = 1300264
|
||||
flags = 1
|
||||
data = length 227, hash A47E1789
|
||||
sample 57:
|
||||
time = 1323483
|
||||
flags = 1
|
||||
data = length 228, hash 869FDFD3
|
||||
sample 58:
|
||||
time = 1346702
|
||||
flags = 1
|
||||
data = length 233, hash 272ECE2
|
||||
sample 59:
|
||||
time = 1369921
|
||||
flags = 1
|
||||
data = length 227, hash DB6B9618
|
||||
sample 60:
|
||||
time = 1393140
|
||||
flags = 1
|
||||
data = length 212, hash 63214325
|
||||
sample 61:
|
||||
time = 1416359
|
||||
flags = 1
|
||||
data = length 221, hash 9BA588A1
|
||||
sample 62:
|
||||
time = 1439578
|
||||
flags = 1
|
||||
data = length 225, hash 21EFD50C
|
||||
sample 63:
|
||||
time = 1462797
|
||||
flags = 1
|
||||
data = length 231, hash F3AD0BF
|
||||
sample 64:
|
||||
time = 1486016
|
||||
flags = 1
|
||||
data = length 224, hash 822C9210
|
||||
sample 65:
|
||||
time = 1509235
|
||||
flags = 1
|
||||
data = length 195, hash D4EF53EE
|
||||
sample 66:
|
||||
time = 1532454
|
||||
flags = 1
|
||||
data = length 195, hash A816647A
|
||||
sample 67:
|
||||
time = 1555673
|
||||
flags = 1
|
||||
data = length 184, hash 9A2B7E6
|
||||
sample 68:
|
||||
time = 1578892
|
||||
flags = 1
|
||||
data = length 210, hash 956E3600
|
||||
sample 69:
|
||||
time = 1602111
|
||||
flags = 1
|
||||
data = length 234, hash 35CFDA0A
|
||||
sample 70:
|
||||
time = 1625330
|
||||
flags = 1
|
||||
data = length 239, hash 9E15AC1E
|
||||
sample 71:
|
||||
time = 1648549
|
||||
flags = 1
|
||||
data = length 228, hash F3B70641
|
||||
sample 72:
|
||||
time = 1671768
|
||||
flags = 1
|
||||
data = length 237, hash 124E3194
|
||||
sample 73:
|
||||
time = 1694987
|
||||
flags = 1
|
||||
data = length 231, hash 950CD7C8
|
||||
sample 74:
|
||||
time = 1718206
|
||||
flags = 1
|
||||
data = length 236, hash A12E49AF
|
||||
sample 75:
|
||||
time = 1741425
|
||||
flags = 1
|
||||
data = length 242, hash 43BC9C24
|
||||
sample 76:
|
||||
time = 1764644
|
||||
flags = 1
|
||||
data = length 241, hash DCF0B17
|
||||
sample 77:
|
||||
time = 1787863
|
||||
flags = 1
|
||||
data = length 251, hash C0B99968
|
||||
sample 78:
|
||||
time = 1811082
|
||||
flags = 1
|
||||
data = length 245, hash 9B38ED1C
|
||||
sample 79:
|
||||
time = 1834301
|
||||
flags = 1
|
||||
data = length 238, hash 1BA69079
|
||||
sample 80:
|
||||
time = 1857520
|
||||
flags = 1
|
||||
data = length 233, hash 44C8C6BF
|
||||
sample 81:
|
||||
time = 1880739
|
||||
flags = 1
|
||||
data = length 231, hash EABBEE02
|
||||
sample 82:
|
||||
time = 1903958
|
||||
flags = 1
|
||||
data = length 226, hash D09C44FB
|
||||
sample 83:
|
||||
time = 1927177
|
||||
flags = 1
|
||||
data = length 235, hash BE6A6608
|
||||
sample 84:
|
||||
time = 1950396
|
||||
flags = 1
|
||||
data = length 235, hash 2735F454
|
||||
sample 85:
|
||||
time = 1973615
|
||||
flags = 1
|
||||
data = length 238, hash B160DFE7
|
||||
sample 86:
|
||||
time = 1996834
|
||||
flags = 1
|
||||
data = length 232, hash 1B217D2E
|
||||
sample 87:
|
||||
time = 2020053
|
||||
flags = 1
|
||||
data = length 251, hash D1C14CEA
|
||||
sample 88:
|
||||
time = 2043272
|
||||
flags = 1
|
||||
data = length 256, hash 97C87F08
|
||||
sample 89:
|
||||
time = 2066491
|
||||
flags = 1
|
||||
data = length 237, hash 6645DB3
|
||||
sample 90:
|
||||
time = 2089710
|
||||
flags = 1
|
||||
data = length 235, hash 727A1C82
|
||||
sample 91:
|
||||
time = 2112929
|
||||
flags = 1
|
||||
data = length 234, hash 5015F8B5
|
||||
sample 92:
|
||||
time = 2136148
|
||||
flags = 1
|
||||
data = length 241, hash 9102144B
|
||||
sample 93:
|
||||
time = 2159367
|
||||
flags = 1
|
||||
data = length 224, hash 64E0D807
|
||||
sample 94:
|
||||
time = 2182586
|
||||
flags = 1
|
||||
data = length 228, hash 1922B852
|
||||
sample 95:
|
||||
time = 2205805
|
||||
flags = 1
|
||||
data = length 224, hash 953502D8
|
||||
sample 96:
|
||||
time = 2229024
|
||||
flags = 1
|
||||
data = length 214, hash 92B87FE7
|
||||
sample 97:
|
||||
time = 2252243
|
||||
flags = 1
|
||||
data = length 213, hash BB0C8D86
|
||||
sample 98:
|
||||
time = 2275462
|
||||
flags = 1
|
||||
data = length 206, hash 9AD21017
|
||||
sample 99:
|
||||
time = 2298681
|
||||
flags = 1
|
||||
data = length 209, hash C479FE94
|
||||
sample 100:
|
||||
time = 2321900
|
||||
flags = 1
|
||||
data = length 220, hash 3033DCE1
|
||||
sample 101:
|
||||
time = 2345119
|
||||
flags = 1
|
||||
data = length 217, hash 7D589C94
|
||||
sample 102:
|
||||
time = 2368338
|
||||
flags = 1
|
||||
data = length 216, hash AAF6C183
|
||||
sample 103:
|
||||
time = 2391557
|
||||
flags = 1
|
||||
data = length 206, hash 1EE1207F
|
||||
sample 104:
|
||||
time = 2414776
|
||||
flags = 1
|
||||
data = length 204, hash 4BEB1210
|
||||
sample 105:
|
||||
time = 2437995
|
||||
flags = 1
|
||||
data = length 213, hash 21A841C9
|
||||
sample 106:
|
||||
time = 2461214
|
||||
flags = 1
|
||||
data = length 207, hash B80B0424
|
||||
sample 107:
|
||||
time = 2484433
|
||||
flags = 1
|
||||
data = length 212, hash 4785A1C3
|
||||
sample 108:
|
||||
time = 2507652
|
||||
flags = 1
|
||||
data = length 205, hash 59BF7229
|
||||
sample 109:
|
||||
time = 2530871
|
||||
flags = 1
|
||||
data = length 208, hash FA313DDE
|
||||
sample 110:
|
||||
time = 2554090
|
||||
flags = 1
|
||||
data = length 211, hash 190D85FD
|
||||
sample 111:
|
||||
time = 2577309
|
||||
flags = 1
|
||||
data = length 211, hash BA050052
|
||||
sample 112:
|
||||
time = 2600528
|
||||
flags = 1
|
||||
data = length 211, hash F3080F10
|
||||
sample 113:
|
||||
time = 2623747
|
||||
flags = 1
|
||||
data = length 210, hash F41B7BE7
|
||||
sample 114:
|
||||
time = 2646966
|
||||
flags = 1
|
||||
data = length 207, hash 2176C97E
|
||||
sample 115:
|
||||
time = 2670185
|
||||
flags = 1
|
||||
data = length 220, hash 32087455
|
||||
sample 116:
|
||||
time = 2693404
|
||||
flags = 1
|
||||
data = length 213, hash 4E5649A8
|
||||
sample 117:
|
||||
time = 2716623
|
||||
flags = 1
|
||||
data = length 213, hash 5F12FDCF
|
||||
sample 118:
|
||||
time = 2739842
|
||||
flags = 1
|
||||
data = length 204, hash 1E895C2A
|
||||
sample 119:
|
||||
time = 2763061
|
||||
flags = 1
|
||||
data = length 219, hash 45382270
|
||||
sample 120:
|
||||
time = 2786280
|
||||
flags = 1
|
||||
data = length 205, hash D66C6A1D
|
||||
sample 121:
|
||||
time = 2809499
|
||||
flags = 1
|
||||
data = length 204, hash 467AD01F
|
||||
sample 122:
|
||||
time = 2832718
|
||||
flags = 1
|
||||
data = length 211, hash F0435574
|
||||
sample 123:
|
||||
time = 2855937
|
||||
flags = 1
|
||||
data = length 206, hash 8C96B75F
|
||||
sample 124:
|
||||
time = 2879156
|
||||
flags = 1
|
||||
data = length 200, hash 82553248
|
||||
sample 125:
|
||||
time = 2902375
|
||||
flags = 1
|
||||
data = length 180, hash 1E51E6CE
|
||||
sample 126:
|
||||
time = 2925594
|
||||
flags = 1
|
||||
data = length 196, hash 33151DC4
|
||||
sample 127:
|
||||
time = 2948813
|
||||
flags = 1
|
||||
data = length 197, hash 1E62A7D6
|
||||
sample 128:
|
||||
time = 2972032
|
||||
flags = 1
|
||||
data = length 206, hash 6A6C4CC9
|
||||
sample 129:
|
||||
time = 2995251
|
||||
flags = 1
|
||||
data = length 209, hash A72FABAA
|
||||
sample 130:
|
||||
time = 3018470
|
||||
flags = 1
|
||||
data = length 217, hash BA33B985
|
||||
sample 131:
|
||||
time = 3041689
|
||||
flags = 1
|
||||
data = length 235, hash 9919CFD9
|
||||
sample 132:
|
||||
time = 3064908
|
||||
flags = 1
|
||||
data = length 236, hash A22C7267
|
||||
sample 133:
|
||||
time = 3088127
|
||||
flags = 1
|
||||
data = length 213, hash 3D57C901
|
||||
sample 134:
|
||||
time = 3111346
|
||||
flags = 1
|
||||
data = length 205, hash 47F68FDE
|
||||
sample 135:
|
||||
time = 3134565
|
||||
flags = 1
|
||||
data = length 210, hash 9A756E9C
|
||||
sample 136:
|
||||
time = 3157784
|
||||
flags = 1
|
||||
data = length 210, hash BD45C31F
|
||||
sample 137:
|
||||
time = 3181003
|
||||
flags = 1
|
||||
data = length 207, hash 8774FF7B
|
||||
sample 138:
|
||||
time = 3204222
|
||||
flags = 1
|
||||
data = length 149, hash 4678C0E5
|
||||
sample 139:
|
||||
time = 3227441
|
||||
flags = 1
|
||||
data = length 161, hash E991035D
|
||||
sample 140:
|
||||
time = 3250660
|
||||
flags = 1
|
||||
data = length 197, hash C3013689
|
||||
sample 141:
|
||||
time = 3273879
|
||||
flags = 1
|
||||
data = length 208, hash E6C0237
|
||||
sample 142:
|
||||
time = 3297098
|
||||
flags = 1
|
||||
data = length 232, hash A330F188
|
||||
sample 143:
|
||||
time = 3320317
|
||||
flags = 1
|
||||
data = length 174, hash 2B69C34E
|
||||
track 1:
|
||||
total output bytes = 141
|
||||
sample count = 2
|
||||
format 0:
|
||||
id = 1
|
||||
sampleMimeType = application/id3
|
||||
sample 0:
|
||||
time = 0
|
||||
flags = 1
|
||||
data = length 55, hash A7EB51A0
|
||||
sample 1:
|
||||
time = 23219
|
||||
flags = 1
|
||||
data = length 86, hash 3FA72D40
|
||||
tracksEnded = true
|
607
testdata/src/test/assets/ts/sample_with_id3.adts.unknown_length.dump
vendored
Normal file
607
testdata/src/test/assets/ts/sample_with_id3.adts.unknown_length.dump
vendored
Normal file
@ -0,0 +1,607 @@
|
||||
seekMap:
|
||||
isSeekable = false
|
||||
duration = UNSET TIME
|
||||
getPosition(0) = [[timeUs=0, position=0]]
|
||||
numberOfTracks = 2
|
||||
track 0:
|
||||
total output bytes = 30797
|
||||
sample count = 144
|
||||
format 0:
|
||||
id = 0
|
||||
sampleMimeType = audio/mp4a-latm
|
||||
codecs = mp4a.40.2
|
||||
channelCount = 1
|
||||
sampleRate = 44100
|
||||
initializationData:
|
||||
data = length 2, hash 5F7
|
||||
sample 0:
|
||||
time = 0
|
||||
flags = 1
|
||||
data = length 23, hash 47DE9131
|
||||
sample 1:
|
||||
time = 23219
|
||||
flags = 1
|
||||
data = length 6, hash 31CF3A46
|
||||
sample 2:
|
||||
time = 46438
|
||||
flags = 1
|
||||
data = length 6, hash 31CF3A46
|
||||
sample 3:
|
||||
time = 69657
|
||||
flags = 1
|
||||
data = length 6, hash 31CF3A46
|
||||
sample 4:
|
||||
time = 92876
|
||||
flags = 1
|
||||
data = length 6, hash 31EC5206
|
||||
sample 5:
|
||||
time = 116095
|
||||
flags = 1
|
||||
data = length 171, hash 4F6478F6
|
||||
sample 6:
|
||||
time = 139314
|
||||
flags = 1
|
||||
data = length 202, hash AF4068A3
|
||||
sample 7:
|
||||
time = 162533
|
||||
flags = 1
|
||||
data = length 210, hash E4C10618
|
||||
sample 8:
|
||||
time = 185752
|
||||
flags = 1
|
||||
data = length 217, hash 9ECCD0D9
|
||||
sample 9:
|
||||
time = 208971
|
||||
flags = 1
|
||||
data = length 212, hash 6BAC2CD9
|
||||
sample 10:
|
||||
time = 232190
|
||||
flags = 1
|
||||
data = length 223, hash 188B6010
|
||||
sample 11:
|
||||
time = 255409
|
||||
flags = 1
|
||||
data = length 222, hash C1A04D0C
|
||||
sample 12:
|
||||
time = 278628
|
||||
flags = 1
|
||||
data = length 220, hash D65F9768
|
||||
sample 13:
|
||||
time = 301847
|
||||
flags = 1
|
||||
data = length 227, hash B96C9E14
|
||||
sample 14:
|
||||
time = 325066
|
||||
flags = 1
|
||||
data = length 229, hash 9FB09972
|
||||
sample 15:
|
||||
time = 348285
|
||||
flags = 1
|
||||
data = length 220, hash 2271F053
|
||||
sample 16:
|
||||
time = 371504
|
||||
flags = 1
|
||||
data = length 226, hash 5EDD2F4F
|
||||
sample 17:
|
||||
time = 394723
|
||||
flags = 1
|
||||
data = length 239, hash 957510E0
|
||||
sample 18:
|
||||
time = 417942
|
||||
flags = 1
|
||||
data = length 224, hash 718A8F47
|
||||
sample 19:
|
||||
time = 441161
|
||||
flags = 1
|
||||
data = length 225, hash 5E11E293
|
||||
sample 20:
|
||||
time = 464380
|
||||
flags = 1
|
||||
data = length 227, hash FCE50D27
|
||||
sample 21:
|
||||
time = 487599
|
||||
flags = 1
|
||||
data = length 212, hash 77908C40
|
||||
sample 22:
|
||||
time = 510818
|
||||
flags = 1
|
||||
data = length 227, hash 34C4EB32
|
||||
sample 23:
|
||||
time = 534037
|
||||
flags = 1
|
||||
data = length 231, hash 95488307
|
||||
sample 24:
|
||||
time = 557256
|
||||
flags = 1
|
||||
data = length 226, hash 97F12D6F
|
||||
sample 25:
|
||||
time = 580475
|
||||
flags = 1
|
||||
data = length 236, hash 91A9D9A2
|
||||
sample 26:
|
||||
time = 603694
|
||||
flags = 1
|
||||
data = length 227, hash 27A608F9
|
||||
sample 27:
|
||||
time = 626913
|
||||
flags = 1
|
||||
data = length 229, hash 57DAAE4
|
||||
sample 28:
|
||||
time = 650132
|
||||
flags = 1
|
||||
data = length 235, hash ED30AC34
|
||||
sample 29:
|
||||
time = 673351
|
||||
flags = 1
|
||||
data = length 227, hash BD3D6280
|
||||
sample 30:
|
||||
time = 696570
|
||||
flags = 1
|
||||
data = length 233, hash 694B1087
|
||||
sample 31:
|
||||
time = 719789
|
||||
flags = 1
|
||||
data = length 232, hash 1EDFE047
|
||||
sample 32:
|
||||
time = 743008
|
||||
flags = 1
|
||||
data = length 228, hash E2A831F4
|
||||
sample 33:
|
||||
time = 766227
|
||||
flags = 1
|
||||
data = length 231, hash 757E6012
|
||||
sample 34:
|
||||
time = 789446
|
||||
flags = 1
|
||||
data = length 223, hash 4003D791
|
||||
sample 35:
|
||||
time = 812665
|
||||
flags = 1
|
||||
data = length 232, hash 3CF9A07C
|
||||
sample 36:
|
||||
time = 835884
|
||||
flags = 1
|
||||
data = length 228, hash 25AC3FF7
|
||||
sample 37:
|
||||
time = 859103
|
||||
flags = 1
|
||||
data = length 220, hash 2C1824CE
|
||||
sample 38:
|
||||
time = 882322
|
||||
flags = 1
|
||||
data = length 229, hash 46FDD8FB
|
||||
sample 39:
|
||||
time = 905541
|
||||
flags = 1
|
||||
data = length 237, hash F6988018
|
||||
sample 40:
|
||||
time = 928760
|
||||
flags = 1
|
||||
data = length 242, hash 60436B6B
|
||||
sample 41:
|
||||
time = 951979
|
||||
flags = 1
|
||||
data = length 275, hash 90EDFA8E
|
||||
sample 42:
|
||||
time = 975198
|
||||
flags = 1
|
||||
data = length 242, hash 5C86EFCB
|
||||
sample 43:
|
||||
time = 998417
|
||||
flags = 1
|
||||
data = length 233, hash E0A51B82
|
||||
sample 44:
|
||||
time = 1021636
|
||||
flags = 1
|
||||
data = length 235, hash 590DF14F
|
||||
sample 45:
|
||||
time = 1044855
|
||||
flags = 1
|
||||
data = length 238, hash 69AF4E6E
|
||||
sample 46:
|
||||
time = 1068074
|
||||
flags = 1
|
||||
data = length 235, hash E745AE8D
|
||||
sample 47:
|
||||
time = 1091293
|
||||
flags = 1
|
||||
data = length 223, hash 295F2A13
|
||||
sample 48:
|
||||
time = 1114512
|
||||
flags = 1
|
||||
data = length 228, hash E2F47B21
|
||||
sample 49:
|
||||
time = 1137731
|
||||
flags = 1
|
||||
data = length 229, hash 262C3CFE
|
||||
sample 50:
|
||||
time = 1160950
|
||||
flags = 1
|
||||
data = length 232, hash 4B5BF5E8
|
||||
sample 51:
|
||||
time = 1184169
|
||||
flags = 1
|
||||
data = length 233, hash F3D80836
|
||||
sample 52:
|
||||
time = 1207388
|
||||
flags = 1
|
||||
data = length 237, hash 32E0A11E
|
||||
sample 53:
|
||||
time = 1230607
|
||||
flags = 1
|
||||
data = length 228, hash E1B89F13
|
||||
sample 54:
|
||||
time = 1253826
|
||||
flags = 1
|
||||
data = length 237, hash 8BDD9E38
|
||||
sample 55:
|
||||
time = 1277045
|
||||
flags = 1
|
||||
data = length 235, hash 3C84161F
|
||||
sample 56:
|
||||
time = 1300264
|
||||
flags = 1
|
||||
data = length 227, hash A47E1789
|
||||
sample 57:
|
||||
time = 1323483
|
||||
flags = 1
|
||||
data = length 228, hash 869FDFD3
|
||||
sample 58:
|
||||
time = 1346702
|
||||
flags = 1
|
||||
data = length 233, hash 272ECE2
|
||||
sample 59:
|
||||
time = 1369921
|
||||
flags = 1
|
||||
data = length 227, hash DB6B9618
|
||||
sample 60:
|
||||
time = 1393140
|
||||
flags = 1
|
||||
data = length 212, hash 63214325
|
||||
sample 61:
|
||||
time = 1416359
|
||||
flags = 1
|
||||
data = length 221, hash 9BA588A1
|
||||
sample 62:
|
||||
time = 1439578
|
||||
flags = 1
|
||||
data = length 225, hash 21EFD50C
|
||||
sample 63:
|
||||
time = 1462797
|
||||
flags = 1
|
||||
data = length 231, hash F3AD0BF
|
||||
sample 64:
|
||||
time = 1486016
|
||||
flags = 1
|
||||
data = length 224, hash 822C9210
|
||||
sample 65:
|
||||
time = 1509235
|
||||
flags = 1
|
||||
data = length 195, hash D4EF53EE
|
||||
sample 66:
|
||||
time = 1532454
|
||||
flags = 1
|
||||
data = length 195, hash A816647A
|
||||
sample 67:
|
||||
time = 1555673
|
||||
flags = 1
|
||||
data = length 184, hash 9A2B7E6
|
||||
sample 68:
|
||||
time = 1578892
|
||||
flags = 1
|
||||
data = length 210, hash 956E3600
|
||||
sample 69:
|
||||
time = 1602111
|
||||
flags = 1
|
||||
data = length 234, hash 35CFDA0A
|
||||
sample 70:
|
||||
time = 1625330
|
||||
flags = 1
|
||||
data = length 239, hash 9E15AC1E
|
||||
sample 71:
|
||||
time = 1648549
|
||||
flags = 1
|
||||
data = length 228, hash F3B70641
|
||||
sample 72:
|
||||
time = 1671768
|
||||
flags = 1
|
||||
data = length 237, hash 124E3194
|
||||
sample 73:
|
||||
time = 1694987
|
||||
flags = 1
|
||||
data = length 231, hash 950CD7C8
|
||||
sample 74:
|
||||
time = 1718206
|
||||
flags = 1
|
||||
data = length 236, hash A12E49AF
|
||||
sample 75:
|
||||
time = 1741425
|
||||
flags = 1
|
||||
data = length 242, hash 43BC9C24
|
||||
sample 76:
|
||||
time = 1764644
|
||||
flags = 1
|
||||
data = length 241, hash DCF0B17
|
||||
sample 77:
|
||||
time = 1787863
|
||||
flags = 1
|
||||
data = length 251, hash C0B99968
|
||||
sample 78:
|
||||
time = 1811082
|
||||
flags = 1
|
||||
data = length 245, hash 9B38ED1C
|
||||
sample 79:
|
||||
time = 1834301
|
||||
flags = 1
|
||||
data = length 238, hash 1BA69079
|
||||
sample 80:
|
||||
time = 1857520
|
||||
flags = 1
|
||||
data = length 233, hash 44C8C6BF
|
||||
sample 81:
|
||||
time = 1880739
|
||||
flags = 1
|
||||
data = length 231, hash EABBEE02
|
||||
sample 82:
|
||||
time = 1903958
|
||||
flags = 1
|
||||
data = length 226, hash D09C44FB
|
||||
sample 83:
|
||||
time = 1927177
|
||||
flags = 1
|
||||
data = length 235, hash BE6A6608
|
||||
sample 84:
|
||||
time = 1950396
|
||||
flags = 1
|
||||
data = length 235, hash 2735F454
|
||||
sample 85:
|
||||
time = 1973615
|
||||
flags = 1
|
||||
data = length 238, hash B160DFE7
|
||||
sample 86:
|
||||
time = 1996834
|
||||
flags = 1
|
||||
data = length 232, hash 1B217D2E
|
||||
sample 87:
|
||||
time = 2020053
|
||||
flags = 1
|
||||
data = length 251, hash D1C14CEA
|
||||
sample 88:
|
||||
time = 2043272
|
||||
flags = 1
|
||||
data = length 256, hash 97C87F08
|
||||
sample 89:
|
||||
time = 2066491
|
||||
flags = 1
|
||||
data = length 237, hash 6645DB3
|
||||
sample 90:
|
||||
time = 2089710
|
||||
flags = 1
|
||||
data = length 235, hash 727A1C82
|
||||
sample 91:
|
||||
time = 2112929
|
||||
flags = 1
|
||||
data = length 234, hash 5015F8B5
|
||||
sample 92:
|
||||
time = 2136148
|
||||
flags = 1
|
||||
data = length 241, hash 9102144B
|
||||
sample 93:
|
||||
time = 2159367
|
||||
flags = 1
|
||||
data = length 224, hash 64E0D807
|
||||
sample 94:
|
||||
time = 2182586
|
||||
flags = 1
|
||||
data = length 228, hash 1922B852
|
||||
sample 95:
|
||||
time = 2205805
|
||||
flags = 1
|
||||
data = length 224, hash 953502D8
|
||||
sample 96:
|
||||
time = 2229024
|
||||
flags = 1
|
||||
data = length 214, hash 92B87FE7
|
||||
sample 97:
|
||||
time = 2252243
|
||||
flags = 1
|
||||
data = length 213, hash BB0C8D86
|
||||
sample 98:
|
||||
time = 2275462
|
||||
flags = 1
|
||||
data = length 206, hash 9AD21017
|
||||
sample 99:
|
||||
time = 2298681
|
||||
flags = 1
|
||||
data = length 209, hash C479FE94
|
||||
sample 100:
|
||||
time = 2321900
|
||||
flags = 1
|
||||
data = length 220, hash 3033DCE1
|
||||
sample 101:
|
||||
time = 2345119
|
||||
flags = 1
|
||||
data = length 217, hash 7D589C94
|
||||
sample 102:
|
||||
time = 2368338
|
||||
flags = 1
|
||||
data = length 216, hash AAF6C183
|
||||
sample 103:
|
||||
time = 2391557
|
||||
flags = 1
|
||||
data = length 206, hash 1EE1207F
|
||||
sample 104:
|
||||
time = 2414776
|
||||
flags = 1
|
||||
data = length 204, hash 4BEB1210
|
||||
sample 105:
|
||||
time = 2437995
|
||||
flags = 1
|
||||
data = length 213, hash 21A841C9
|
||||
sample 106:
|
||||
time = 2461214
|
||||
flags = 1
|
||||
data = length 207, hash B80B0424
|
||||
sample 107:
|
||||
time = 2484433
|
||||
flags = 1
|
||||
data = length 212, hash 4785A1C3
|
||||
sample 108:
|
||||
time = 2507652
|
||||
flags = 1
|
||||
data = length 205, hash 59BF7229
|
||||
sample 109:
|
||||
time = 2530871
|
||||
flags = 1
|
||||
data = length 208, hash FA313DDE
|
||||
sample 110:
|
||||
time = 2554090
|
||||
flags = 1
|
||||
data = length 211, hash 190D85FD
|
||||
sample 111:
|
||||
time = 2577309
|
||||
flags = 1
|
||||
data = length 211, hash BA050052
|
||||
sample 112:
|
||||
time = 2600528
|
||||
flags = 1
|
||||
data = length 211, hash F3080F10
|
||||
sample 113:
|
||||
time = 2623747
|
||||
flags = 1
|
||||
data = length 210, hash F41B7BE7
|
||||
sample 114:
|
||||
time = 2646966
|
||||
flags = 1
|
||||
data = length 207, hash 2176C97E
|
||||
sample 115:
|
||||
time = 2670185
|
||||
flags = 1
|
||||
data = length 220, hash 32087455
|
||||
sample 116:
|
||||
time = 2693404
|
||||
flags = 1
|
||||
data = length 213, hash 4E5649A8
|
||||
sample 117:
|
||||
time = 2716623
|
||||
flags = 1
|
||||
data = length 213, hash 5F12FDCF
|
||||
sample 118:
|
||||
time = 2739842
|
||||
flags = 1
|
||||
data = length 204, hash 1E895C2A
|
||||
sample 119:
|
||||
time = 2763061
|
||||
flags = 1
|
||||
data = length 219, hash 45382270
|
||||
sample 120:
|
||||
time = 2786280
|
||||
flags = 1
|
||||
data = length 205, hash D66C6A1D
|
||||
sample 121:
|
||||
time = 2809499
|
||||
flags = 1
|
||||
data = length 204, hash 467AD01F
|
||||
sample 122:
|
||||
time = 2832718
|
||||
flags = 1
|
||||
data = length 211, hash F0435574
|
||||
sample 123:
|
||||
time = 2855937
|
||||
flags = 1
|
||||
data = length 206, hash 8C96B75F
|
||||
sample 124:
|
||||
time = 2879156
|
||||
flags = 1
|
||||
data = length 200, hash 82553248
|
||||
sample 125:
|
||||
time = 2902375
|
||||
flags = 1
|
||||
data = length 180, hash 1E51E6CE
|
||||
sample 126:
|
||||
time = 2925594
|
||||
flags = 1
|
||||
data = length 196, hash 33151DC4
|
||||
sample 127:
|
||||
time = 2948813
|
||||
flags = 1
|
||||
data = length 197, hash 1E62A7D6
|
||||
sample 128:
|
||||
time = 2972032
|
||||
flags = 1
|
||||
data = length 206, hash 6A6C4CC9
|
||||
sample 129:
|
||||
time = 2995251
|
||||
flags = 1
|
||||
data = length 209, hash A72FABAA
|
||||
sample 130:
|
||||
time = 3018470
|
||||
flags = 1
|
||||
data = length 217, hash BA33B985
|
||||
sample 131:
|
||||
time = 3041689
|
||||
flags = 1
|
||||
data = length 235, hash 9919CFD9
|
||||
sample 132:
|
||||
time = 3064908
|
||||
flags = 1
|
||||
data = length 236, hash A22C7267
|
||||
sample 133:
|
||||
time = 3088127
|
||||
flags = 1
|
||||
data = length 213, hash 3D57C901
|
||||
sample 134:
|
||||
time = 3111346
|
||||
flags = 1
|
||||
data = length 205, hash 47F68FDE
|
||||
sample 135:
|
||||
time = 3134565
|
||||
flags = 1
|
||||
data = length 210, hash 9A756E9C
|
||||
sample 136:
|
||||
time = 3157784
|
||||
flags = 1
|
||||
data = length 210, hash BD45C31F
|
||||
sample 137:
|
||||
time = 3181003
|
||||
flags = 1
|
||||
data = length 207, hash 8774FF7B
|
||||
sample 138:
|
||||
time = 3204222
|
||||
flags = 1
|
||||
data = length 149, hash 4678C0E5
|
||||
sample 139:
|
||||
time = 3227441
|
||||
flags = 1
|
||||
data = length 161, hash E991035D
|
||||
sample 140:
|
||||
time = 3250660
|
||||
flags = 1
|
||||
data = length 197, hash C3013689
|
||||
sample 141:
|
||||
time = 3273879
|
||||
flags = 1
|
||||
data = length 208, hash E6C0237
|
||||
sample 142:
|
||||
time = 3297098
|
||||
flags = 1
|
||||
data = length 232, hash A330F188
|
||||
sample 143:
|
||||
time = 3320317
|
||||
flags = 1
|
||||
data = length 174, hash 2B69C34E
|
||||
track 1:
|
||||
total output bytes = 141
|
||||
sample count = 2
|
||||
format 0:
|
||||
id = 1
|
||||
sampleMimeType = application/id3
|
||||
sample 0:
|
||||
time = 0
|
||||
flags = 1
|
||||
data = length 55, hash A7EB51A0
|
||||
sample 1:
|
||||
time = 23219
|
||||
flags = 1
|
||||
data = length 86, hash 3FA72D40
|
||||
tracksEnded = true
|
Loading…
x
Reference in New Issue
Block a user