Fix codec initialization data for Opus in MP4
PiperOrigin-RevId: 325327466
This commit is contained in:
parent
eee9b312dc
commit
b9612bc338
@ -213,6 +213,7 @@
|
|||||||
timestamps ([#7464](https://github.com/google/ExoPlayer/issues/7464)).
|
timestamps ([#7464](https://github.com/google/ExoPlayer/issues/7464)).
|
||||||
* Ogg: Allow non-contiguous pages
|
* Ogg: Allow non-contiguous pages
|
||||||
([#7230](https://github.com/google/ExoPlayer/issues/7230)).
|
([#7230](https://github.com/google/ExoPlayer/issues/7230)).
|
||||||
|
* MP4: Fix playback of MP4 containing Opus.
|
||||||
* Matroska: Remove support for "Invisible" block header flag.
|
* Matroska: Remove support for "Invisible" block header flag.
|
||||||
* FLV: Ignore SCRIPTDATA segments with invalid name types, rather than failing
|
* FLV: Ignore SCRIPTDATA segments with invalid name types, rather than failing
|
||||||
playback ([#7675](https://github.com/google/ExoPlayer/issues/7675)).
|
playback ([#7675](https://github.com/google/ExoPlayer/issues/7675)).
|
||||||
|
@ -4,8 +4,7 @@
|
|||||||
"samples": [
|
"samples": [
|
||||||
{
|
{
|
||||||
"name": "Google Glass H264 (MP4)",
|
"name": "Google Glass H264 (MP4)",
|
||||||
"uri": "https://www.youtube.com/api/manifest/dash/id/bf5bb2419360daf1/source/youtube?as=fmp4_audio_clear,fmp4_sd_hd_clear&sparams=ip,ipbits,expire,source,id,as&ip=0.0.0.0&ipbits=0&expire=19000000000&signature=51AF5F39AB0CEC3E5497CD9C900EBFEAECCCB5C7.8506521BFC350652163895D4C26DEE124209AA9E&key=ik0",
|
"uri": "file:///sdcard/1.mp4"
|
||||||
"extension": "mpd"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Google Play H264 (MP4)",
|
"name": "Google Play H264 (MP4)",
|
||||||
|
@ -27,6 +27,7 @@ import com.google.android.exoplayer2.ParserException;
|
|||||||
import com.google.android.exoplayer2.audio.AacUtil;
|
import com.google.android.exoplayer2.audio.AacUtil;
|
||||||
import com.google.android.exoplayer2.audio.Ac3Util;
|
import com.google.android.exoplayer2.audio.Ac3Util;
|
||||||
import com.google.android.exoplayer2.audio.Ac4Util;
|
import com.google.android.exoplayer2.audio.Ac4Util;
|
||||||
|
import com.google.android.exoplayer2.audio.OpusUtil;
|
||||||
import com.google.android.exoplayer2.drm.DrmInitData;
|
import com.google.android.exoplayer2.drm.DrmInitData;
|
||||||
import com.google.android.exoplayer2.extractor.GaplessInfoHolder;
|
import com.google.android.exoplayer2.extractor.GaplessInfoHolder;
|
||||||
import com.google.android.exoplayer2.metadata.Metadata;
|
import com.google.android.exoplayer2.metadata.Metadata;
|
||||||
@ -40,9 +41,9 @@ import com.google.android.exoplayer2.video.AvcConfig;
|
|||||||
import com.google.android.exoplayer2.video.DolbyVisionConfig;
|
import com.google.android.exoplayer2.video.DolbyVisionConfig;
|
||||||
import com.google.android.exoplayer2.video.HevcConfig;
|
import com.google.android.exoplayer2.video.HevcConfig;
|
||||||
import com.google.common.base.Function;
|
import com.google.common.base.Function;
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import org.checkerframework.checker.nullness.compatqual.NullableType;
|
import org.checkerframework.checker.nullness.compatqual.NullableType;
|
||||||
|
|
||||||
@ -913,7 +914,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
|
|||||||
parent.setPosition(position + Atom.HEADER_SIZE + StsdData.STSD_HEADER_SIZE);
|
parent.setPosition(position + Atom.HEADER_SIZE + StsdData.STSD_HEADER_SIZE);
|
||||||
|
|
||||||
// Default values.
|
// Default values.
|
||||||
@Nullable List<byte[]> initializationData = null;
|
@Nullable ImmutableList<byte[]> initializationData = null;
|
||||||
long subsampleOffsetUs = Format.OFFSET_SAMPLE_RELATIVE;
|
long subsampleOffsetUs = Format.OFFSET_SAMPLE_RELATIVE;
|
||||||
|
|
||||||
String mimeType;
|
String mimeType;
|
||||||
@ -924,7 +925,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
|
|||||||
int sampleDescriptionLength = atomSize - Atom.HEADER_SIZE - 8;
|
int sampleDescriptionLength = atomSize - Atom.HEADER_SIZE - 8;
|
||||||
byte[] sampleDescriptionData = new byte[sampleDescriptionLength];
|
byte[] sampleDescriptionData = new byte[sampleDescriptionLength];
|
||||||
parent.readBytes(sampleDescriptionData, 0, sampleDescriptionLength);
|
parent.readBytes(sampleDescriptionData, 0, sampleDescriptionLength);
|
||||||
initializationData = Collections.singletonList(sampleDescriptionData);
|
initializationData = ImmutableList.of(sampleDescriptionData);
|
||||||
} else if (atomType == Atom.TYPE_wvtt) {
|
} else if (atomType == Atom.TYPE_wvtt) {
|
||||||
mimeType = MimeTypes.APPLICATION_MP4VTT;
|
mimeType = MimeTypes.APPLICATION_MP4VTT;
|
||||||
} else if (atomType == Atom.TYPE_stpp) {
|
} else if (atomType == Atom.TYPE_stpp) {
|
||||||
@ -1042,7 +1043,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
|
|||||||
mimeType = mimeTypeAndInitializationDataBytes.first;
|
mimeType = mimeTypeAndInitializationDataBytes.first;
|
||||||
@Nullable byte[] initializationDataBytes = mimeTypeAndInitializationDataBytes.second;
|
@Nullable byte[] initializationDataBytes = mimeTypeAndInitializationDataBytes.second;
|
||||||
if (initializationDataBytes != null) {
|
if (initializationDataBytes != null) {
|
||||||
initializationData = Collections.singletonList(initializationDataBytes);
|
initializationData = ImmutableList.of(initializationDataBytes);
|
||||||
}
|
}
|
||||||
} else if (childAtomType == Atom.TYPE_pasp) {
|
} else if (childAtomType == Atom.TYPE_pasp) {
|
||||||
pixelWidthHeightRatio = parsePaspFromParent(parent, childStartPosition);
|
pixelWidthHeightRatio = parsePaspFromParent(parent, childStartPosition);
|
||||||
@ -1242,7 +1243,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
|
|||||||
mimeType = MimeTypes.AUDIO_FLAC;
|
mimeType = MimeTypes.AUDIO_FLAC;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable byte[] initializationData = null;
|
@Nullable List<byte[]> initializationData = null;
|
||||||
while (childPosition - position < size) {
|
while (childPosition - position < size) {
|
||||||
parent.setPosition(childPosition);
|
parent.setPosition(childPosition);
|
||||||
int childAtomSize = parent.readInt();
|
int childAtomSize = parent.readInt();
|
||||||
@ -1255,14 +1256,18 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
|
|||||||
Pair<@NullableType String, byte @NullableType []> mimeTypeAndInitializationData =
|
Pair<@NullableType String, byte @NullableType []> mimeTypeAndInitializationData =
|
||||||
parseEsdsFromParent(parent, esdsAtomPosition);
|
parseEsdsFromParent(parent, esdsAtomPosition);
|
||||||
mimeType = mimeTypeAndInitializationData.first;
|
mimeType = mimeTypeAndInitializationData.first;
|
||||||
initializationData = mimeTypeAndInitializationData.second;
|
@Nullable byte[] initializationDataBytes = mimeTypeAndInitializationData.second;
|
||||||
if (MimeTypes.AUDIO_AAC.equals(mimeType) && initializationData != null) {
|
if (initializationDataBytes != null) {
|
||||||
// Update sampleRate and channelCount from the AudioSpecificConfig initialization data,
|
if (MimeTypes.AUDIO_AAC.equals(mimeType)) {
|
||||||
// which is more reliable. See [Internal: b/10903778].
|
// Update sampleRate and channelCount from the AudioSpecificConfig initialization
|
||||||
AacUtil.Config aacConfig = AacUtil.parseAudioSpecificConfig(initializationData);
|
// data,
|
||||||
sampleRate = aacConfig.sampleRateHz;
|
// which is more reliable. See [Internal: b/10903778].
|
||||||
channelCount = aacConfig.channelCount;
|
AacUtil.Config aacConfig = AacUtil.parseAudioSpecificConfig(initializationDataBytes);
|
||||||
codecs = aacConfig.codecs;
|
sampleRate = aacConfig.sampleRateHz;
|
||||||
|
channelCount = aacConfig.channelCount;
|
||||||
|
codecs = aacConfig.codecs;
|
||||||
|
}
|
||||||
|
initializationData = ImmutableList.of(initializationDataBytes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (childAtomType == Atom.TYPE_dac3) {
|
} else if (childAtomType == Atom.TYPE_dac3) {
|
||||||
@ -1291,30 +1296,32 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
|
|||||||
// Build an Opus Identification Header (defined in RFC-7845) by concatenating the Opus Magic
|
// Build an Opus Identification Header (defined in RFC-7845) by concatenating the Opus Magic
|
||||||
// Signature and the body of the dOps atom.
|
// Signature and the body of the dOps atom.
|
||||||
int childAtomBodySize = childAtomSize - Atom.HEADER_SIZE;
|
int childAtomBodySize = childAtomSize - Atom.HEADER_SIZE;
|
||||||
initializationData = new byte[opusMagic.length + childAtomBodySize];
|
byte[] headerBytes = Arrays.copyOf(opusMagic, opusMagic.length + childAtomBodySize);
|
||||||
System.arraycopy(opusMagic, 0, initializationData, 0, opusMagic.length);
|
|
||||||
parent.setPosition(childPosition + Atom.HEADER_SIZE);
|
parent.setPosition(childPosition + Atom.HEADER_SIZE);
|
||||||
parent.readBytes(initializationData, opusMagic.length, childAtomBodySize);
|
parent.readBytes(headerBytes, opusMagic.length, childAtomBodySize);
|
||||||
|
initializationData = OpusUtil.buildInitializationData(headerBytes);
|
||||||
} else if (childAtomType == Atom.TYPE_dfLa) {
|
} else if (childAtomType == Atom.TYPE_dfLa) {
|
||||||
int childAtomBodySize = childAtomSize - Atom.FULL_HEADER_SIZE;
|
int childAtomBodySize = childAtomSize - Atom.FULL_HEADER_SIZE;
|
||||||
initializationData = new byte[4 + childAtomBodySize];
|
byte[] initializationDataBytes = new byte[4 + childAtomBodySize];
|
||||||
initializationData[0] = 0x66; // f
|
initializationDataBytes[0] = 0x66; // f
|
||||||
initializationData[1] = 0x4C; // L
|
initializationDataBytes[1] = 0x4C; // L
|
||||||
initializationData[2] = 0x61; // a
|
initializationDataBytes[2] = 0x61; // a
|
||||||
initializationData[3] = 0x43; // C
|
initializationDataBytes[3] = 0x43; // C
|
||||||
parent.setPosition(childPosition + Atom.FULL_HEADER_SIZE);
|
parent.setPosition(childPosition + Atom.FULL_HEADER_SIZE);
|
||||||
parent.readBytes(initializationData, /* offset= */ 4, childAtomBodySize);
|
parent.readBytes(initializationDataBytes, /* offset= */ 4, childAtomBodySize);
|
||||||
|
initializationData = ImmutableList.of(initializationDataBytes);
|
||||||
} else if (childAtomType == Atom.TYPE_alac) {
|
} else if (childAtomType == Atom.TYPE_alac) {
|
||||||
int childAtomBodySize = childAtomSize - Atom.FULL_HEADER_SIZE;
|
int childAtomBodySize = childAtomSize - Atom.FULL_HEADER_SIZE;
|
||||||
initializationData = new byte[childAtomBodySize];
|
byte[] initializationDataBytes = new byte[childAtomBodySize];
|
||||||
parent.setPosition(childPosition + Atom.FULL_HEADER_SIZE);
|
parent.setPosition(childPosition + Atom.FULL_HEADER_SIZE);
|
||||||
parent.readBytes(initializationData, /* offset= */ 0, childAtomBodySize);
|
parent.readBytes(initializationDataBytes, /* offset= */ 0, childAtomBodySize);
|
||||||
// Update sampleRate and channelCount from the AudioSpecificConfig initialization data,
|
// Update sampleRate and channelCount from the AudioSpecificConfig initialization data,
|
||||||
// which is more reliable. See https://github.com/google/ExoPlayer/pull/6629.
|
// which is more reliable. See https://github.com/google/ExoPlayer/pull/6629.
|
||||||
Pair<Integer, Integer> audioSpecificConfig =
|
Pair<Integer, Integer> audioSpecificConfig =
|
||||||
CodecSpecificDataUtil.parseAlacAudioSpecificConfig(initializationData);
|
CodecSpecificDataUtil.parseAlacAudioSpecificConfig(initializationDataBytes);
|
||||||
sampleRate = audioSpecificConfig.first;
|
sampleRate = audioSpecificConfig.first;
|
||||||
channelCount = audioSpecificConfig.second;
|
channelCount = audioSpecificConfig.second;
|
||||||
|
initializationData = ImmutableList.of(initializationDataBytes);
|
||||||
}
|
}
|
||||||
childPosition += childAtomSize;
|
childPosition += childAtomSize;
|
||||||
}
|
}
|
||||||
@ -1328,8 +1335,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
|
|||||||
.setChannelCount(channelCount)
|
.setChannelCount(channelCount)
|
||||||
.setSampleRate(sampleRate)
|
.setSampleRate(sampleRate)
|
||||||
.setPcmEncoding(pcmEncoding)
|
.setPcmEncoding(pcmEncoding)
|
||||||
.setInitializationData(
|
.setInitializationData(initializationData)
|
||||||
initializationData == null ? null : Collections.singletonList(initializationData))
|
|
||||||
.setDrmInitData(drmInitData)
|
.setDrmInitData(drmInitData)
|
||||||
.setLanguage(language)
|
.setLanguage(language)
|
||||||
.build();
|
.build();
|
||||||
|
@ -98,6 +98,14 @@ public final class FragmentedMp4ExtractorTest {
|
|||||||
simulationConfig);
|
simulationConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void sampleWithOpusTrack() throws Exception {
|
||||||
|
ExtractorAsserts.assertBehavior(
|
||||||
|
getExtractorFactory(ImmutableList.of()),
|
||||||
|
"mp4/sample_opus_fragmented.mp4",
|
||||||
|
simulationConfig);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void samplePartiallyFragmented() throws Exception {
|
public void samplePartiallyFragmented() throws Exception {
|
||||||
ExtractorAsserts.assertBehavior(
|
ExtractorAsserts.assertBehavior(
|
||||||
|
@ -74,4 +74,9 @@ public final class Mp4ExtractorTest {
|
|||||||
public void mp4SampleWithEac3jocTrack() throws Exception {
|
public void mp4SampleWithEac3jocTrack() throws Exception {
|
||||||
ExtractorAsserts.assertBehavior(Mp4Extractor::new, "mp4/sample_eac3joc.mp4", simulationConfig);
|
ExtractorAsserts.assertBehavior(Mp4Extractor::new, "mp4/sample_eac3joc.mp4", simulationConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void mp4SampleWithOpusTrack() throws Exception {
|
||||||
|
ExtractorAsserts.assertBehavior(Mp4Extractor::new, "mp4/sample_opus.mp4", simulationConfig);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
BIN
testdata/src/test/assets/mp4/sample_opus.mp4
vendored
Normal file
BIN
testdata/src/test/assets/mp4/sample_opus.mp4
vendored
Normal file
Binary file not shown.
428
testdata/src/test/assets/mp4/sample_opus.mp4.0.dump
vendored
Normal file
428
testdata/src/test/assets/mp4/sample_opus.mp4.0.dump
vendored
Normal file
@ -0,0 +1,428 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = true
|
||||||
|
duration = 1460000
|
||||||
|
getPosition(0) = [[timeUs=0, position=179]]
|
||||||
|
getPosition(1) = [[timeUs=1, position=179]]
|
||||||
|
getPosition(730000) = [[timeUs=730000, position=398]]
|
||||||
|
getPosition(1460000) = [[timeUs=1460000, position=3701]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
total output bytes = 3651
|
||||||
|
sample count = 101
|
||||||
|
format 0:
|
||||||
|
id = 1
|
||||||
|
sampleMimeType = audio/opus
|
||||||
|
maxInputSize = 278
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
language = und
|
||||||
|
metadata = entries=[TSSE: description=null: value=Lavf58.29.100]
|
||||||
|
initializationData:
|
||||||
|
data = length 19, hash 86852AE2
|
||||||
|
data = length 8, hash 72CBCBF5
|
||||||
|
data = length 8, hash 79C07075
|
||||||
|
sample 0:
|
||||||
|
time = 0
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 1:
|
||||||
|
time = 3500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 2:
|
||||||
|
time = 13500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 3:
|
||||||
|
time = 23500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 4:
|
||||||
|
time = 33500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 5:
|
||||||
|
time = 43500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 6:
|
||||||
|
time = 53500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 7:
|
||||||
|
time = 63500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 8:
|
||||||
|
time = 73500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 9:
|
||||||
|
time = 83500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 10:
|
||||||
|
time = 93500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 11:
|
||||||
|
time = 103500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 12:
|
||||||
|
time = 113500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 13:
|
||||||
|
time = 123500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 14:
|
||||||
|
time = 133500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 15:
|
||||||
|
time = 143500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 16:
|
||||||
|
time = 153500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 17:
|
||||||
|
time = 163500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 18:
|
||||||
|
time = 173500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 19:
|
||||||
|
time = 183500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 20:
|
||||||
|
time = 193500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 21:
|
||||||
|
time = 203500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 22:
|
||||||
|
time = 213500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 23:
|
||||||
|
time = 223500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 24:
|
||||||
|
time = 233500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 25:
|
||||||
|
time = 243500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 26:
|
||||||
|
time = 253500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 27:
|
||||||
|
time = 263500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 28:
|
||||||
|
time = 273500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 29:
|
||||||
|
time = 283500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 30:
|
||||||
|
time = 293500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 31:
|
||||||
|
time = 303500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 32:
|
||||||
|
time = 313500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 33:
|
||||||
|
time = 323500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 34:
|
||||||
|
time = 333500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 35:
|
||||||
|
time = 343500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 36:
|
||||||
|
time = 353500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 37:
|
||||||
|
time = 363500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 38:
|
||||||
|
time = 373500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 39:
|
||||||
|
time = 383500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 40:
|
||||||
|
time = 393500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 41:
|
||||||
|
time = 403500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 42:
|
||||||
|
time = 413500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 43:
|
||||||
|
time = 423500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 44:
|
||||||
|
time = 433500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 45:
|
||||||
|
time = 443500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 46:
|
||||||
|
time = 453500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 47:
|
||||||
|
time = 463500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 48:
|
||||||
|
time = 473500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 49:
|
||||||
|
time = 483500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 50:
|
||||||
|
time = 493500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 51:
|
||||||
|
time = 503500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 52:
|
||||||
|
time = 513499
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 53:
|
||||||
|
time = 523499
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 54:
|
||||||
|
time = 533500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 55:
|
||||||
|
time = 543500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 56:
|
||||||
|
time = 553500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 57:
|
||||||
|
time = 563500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 58:
|
||||||
|
time = 573500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 59:
|
||||||
|
time = 583500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 60:
|
||||||
|
time = 593500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 61:
|
||||||
|
time = 603500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 62:
|
||||||
|
time = 613500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 63:
|
||||||
|
time = 623500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 64:
|
||||||
|
time = 633500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 65:
|
||||||
|
time = 643500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 66:
|
||||||
|
time = 653500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 67:
|
||||||
|
time = 663500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 68:
|
||||||
|
time = 673500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 69:
|
||||||
|
time = 683500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 70:
|
||||||
|
time = 693500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 71:
|
||||||
|
time = 703500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 72:
|
||||||
|
time = 713500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 73:
|
||||||
|
time = 723500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 74:
|
||||||
|
time = 733500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 75:
|
||||||
|
time = 743500
|
||||||
|
flags = 1
|
||||||
|
data = length 66, hash 648F0BC5
|
||||||
|
sample 76:
|
||||||
|
time = 753500
|
||||||
|
flags = 1
|
||||||
|
data = length 248, hash D07B1166
|
||||||
|
sample 77:
|
||||||
|
time = 763500
|
||||||
|
flags = 1
|
||||||
|
data = length 239, hash 61AA7E3B
|
||||||
|
sample 78:
|
||||||
|
time = 773500
|
||||||
|
flags = 1
|
||||||
|
data = length 142, hash F01726AD
|
||||||
|
sample 79:
|
||||||
|
time = 783500
|
||||||
|
flags = 1
|
||||||
|
data = length 124, hash 35B50117
|
||||||
|
sample 80:
|
||||||
|
time = 793500
|
||||||
|
flags = 1
|
||||||
|
data = length 122, hash 6ED2EA14
|
||||||
|
sample 81:
|
||||||
|
time = 803500
|
||||||
|
flags = 1
|
||||||
|
data = length 118, hash AAB319C9
|
||||||
|
sample 82:
|
||||||
|
time = 813500
|
||||||
|
flags = 1
|
||||||
|
data = length 117, hash 7B08A466
|
||||||
|
sample 83:
|
||||||
|
time = 823500
|
||||||
|
flags = 1
|
||||||
|
data = length 120, hash AF62F442
|
||||||
|
sample 84:
|
||||||
|
time = 833500
|
||||||
|
flags = 1
|
||||||
|
data = length 120, hash 21A0E5E9
|
||||||
|
sample 85:
|
||||||
|
time = 843500
|
||||||
|
flags = 1
|
||||||
|
data = length 122, hash F191C09
|
||||||
|
sample 86:
|
||||||
|
time = 853500
|
||||||
|
flags = 1
|
||||||
|
data = length 120, hash C52E4F2D
|
||||||
|
sample 87:
|
||||||
|
time = 863500
|
||||||
|
flags = 1
|
||||||
|
data = length 120, hash D4554502
|
||||||
|
sample 88:
|
||||||
|
time = 873500
|
||||||
|
flags = 1
|
||||||
|
data = length 121, hash D4E641CF
|
||||||
|
sample 89:
|
||||||
|
time = 883500
|
||||||
|
flags = 1
|
||||||
|
data = length 123, hash 518700A8
|
||||||
|
sample 90:
|
||||||
|
time = 893500
|
||||||
|
flags = 1
|
||||||
|
data = length 123, hash 6EA13134
|
||||||
|
sample 91:
|
||||||
|
time = 903500
|
||||||
|
flags = 1
|
||||||
|
data = length 123, hash A4264A7B
|
||||||
|
sample 92:
|
||||||
|
time = 913500
|
||||||
|
flags = 1
|
||||||
|
data = length 126, hash 593B6BA5
|
||||||
|
sample 93:
|
||||||
|
time = 923500
|
||||||
|
flags = 1
|
||||||
|
data = length 127, hash 15988F8A
|
||||||
|
sample 94:
|
||||||
|
time = 933500
|
||||||
|
flags = 1
|
||||||
|
data = length 134, hash 165D0213
|
||||||
|
sample 95:
|
||||||
|
time = 943500
|
||||||
|
flags = 1
|
||||||
|
data = length 129, hash 1F5ABD5B
|
||||||
|
sample 96:
|
||||||
|
time = 953500
|
||||||
|
flags = 1
|
||||||
|
data = length 131, hash 65E1E196
|
||||||
|
sample 97:
|
||||||
|
time = 963500
|
||||||
|
flags = 1
|
||||||
|
data = length 128, hash 70A740A1
|
||||||
|
sample 98:
|
||||||
|
time = 973500
|
||||||
|
flags = 1
|
||||||
|
data = length 130, hash 2D3733ED
|
||||||
|
sample 99:
|
||||||
|
time = 983500
|
||||||
|
flags = 1
|
||||||
|
data = length 124, hash 6CC37521
|
||||||
|
sample 100:
|
||||||
|
time = 993500
|
||||||
|
flags = 536870913
|
||||||
|
data = length 129, hash 722253A8
|
||||||
|
tracksEnded = true
|
232
testdata/src/test/assets/mp4/sample_opus.mp4.1.dump
vendored
Normal file
232
testdata/src/test/assets/mp4/sample_opus.mp4.1.dump
vendored
Normal file
@ -0,0 +1,232 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = true
|
||||||
|
duration = 1460000
|
||||||
|
getPosition(0) = [[timeUs=0, position=179]]
|
||||||
|
getPosition(1) = [[timeUs=1, position=179]]
|
||||||
|
getPosition(730000) = [[timeUs=730000, position=398]]
|
||||||
|
getPosition(1460000) = [[timeUs=1460000, position=3701]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
total output bytes = 3504
|
||||||
|
sample count = 52
|
||||||
|
format 0:
|
||||||
|
id = 1
|
||||||
|
sampleMimeType = audio/opus
|
||||||
|
maxInputSize = 278
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
language = und
|
||||||
|
metadata = entries=[TSSE: description=null: value=Lavf58.29.100]
|
||||||
|
initializationData:
|
||||||
|
data = length 19, hash 86852AE2
|
||||||
|
data = length 8, hash 72CBCBF5
|
||||||
|
data = length 8, hash 79C07075
|
||||||
|
sample 0:
|
||||||
|
time = 483500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 1:
|
||||||
|
time = 493500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 2:
|
||||||
|
time = 503500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 3:
|
||||||
|
time = 513499
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 4:
|
||||||
|
time = 523499
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 5:
|
||||||
|
time = 533500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 6:
|
||||||
|
time = 543500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 7:
|
||||||
|
time = 553500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 8:
|
||||||
|
time = 563500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 9:
|
||||||
|
time = 573500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 10:
|
||||||
|
time = 583500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 11:
|
||||||
|
time = 593500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 12:
|
||||||
|
time = 603500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 13:
|
||||||
|
time = 613500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 14:
|
||||||
|
time = 623500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 15:
|
||||||
|
time = 633500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 16:
|
||||||
|
time = 643500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 17:
|
||||||
|
time = 653500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 18:
|
||||||
|
time = 663500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 19:
|
||||||
|
time = 673500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 20:
|
||||||
|
time = 683500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 21:
|
||||||
|
time = 693500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 22:
|
||||||
|
time = 703500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 23:
|
||||||
|
time = 713500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 24:
|
||||||
|
time = 723500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 25:
|
||||||
|
time = 733500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 26:
|
||||||
|
time = 743500
|
||||||
|
flags = 1
|
||||||
|
data = length 66, hash 648F0BC5
|
||||||
|
sample 27:
|
||||||
|
time = 753500
|
||||||
|
flags = 1
|
||||||
|
data = length 248, hash D07B1166
|
||||||
|
sample 28:
|
||||||
|
time = 763500
|
||||||
|
flags = 1
|
||||||
|
data = length 239, hash 61AA7E3B
|
||||||
|
sample 29:
|
||||||
|
time = 773500
|
||||||
|
flags = 1
|
||||||
|
data = length 142, hash F01726AD
|
||||||
|
sample 30:
|
||||||
|
time = 783500
|
||||||
|
flags = 1
|
||||||
|
data = length 124, hash 35B50117
|
||||||
|
sample 31:
|
||||||
|
time = 793500
|
||||||
|
flags = 1
|
||||||
|
data = length 122, hash 6ED2EA14
|
||||||
|
sample 32:
|
||||||
|
time = 803500
|
||||||
|
flags = 1
|
||||||
|
data = length 118, hash AAB319C9
|
||||||
|
sample 33:
|
||||||
|
time = 813500
|
||||||
|
flags = 1
|
||||||
|
data = length 117, hash 7B08A466
|
||||||
|
sample 34:
|
||||||
|
time = 823500
|
||||||
|
flags = 1
|
||||||
|
data = length 120, hash AF62F442
|
||||||
|
sample 35:
|
||||||
|
time = 833500
|
||||||
|
flags = 1
|
||||||
|
data = length 120, hash 21A0E5E9
|
||||||
|
sample 36:
|
||||||
|
time = 843500
|
||||||
|
flags = 1
|
||||||
|
data = length 122, hash F191C09
|
||||||
|
sample 37:
|
||||||
|
time = 853500
|
||||||
|
flags = 1
|
||||||
|
data = length 120, hash C52E4F2D
|
||||||
|
sample 38:
|
||||||
|
time = 863500
|
||||||
|
flags = 1
|
||||||
|
data = length 120, hash D4554502
|
||||||
|
sample 39:
|
||||||
|
time = 873500
|
||||||
|
flags = 1
|
||||||
|
data = length 121, hash D4E641CF
|
||||||
|
sample 40:
|
||||||
|
time = 883500
|
||||||
|
flags = 1
|
||||||
|
data = length 123, hash 518700A8
|
||||||
|
sample 41:
|
||||||
|
time = 893500
|
||||||
|
flags = 1
|
||||||
|
data = length 123, hash 6EA13134
|
||||||
|
sample 42:
|
||||||
|
time = 903500
|
||||||
|
flags = 1
|
||||||
|
data = length 123, hash A4264A7B
|
||||||
|
sample 43:
|
||||||
|
time = 913500
|
||||||
|
flags = 1
|
||||||
|
data = length 126, hash 593B6BA5
|
||||||
|
sample 44:
|
||||||
|
time = 923500
|
||||||
|
flags = 1
|
||||||
|
data = length 127, hash 15988F8A
|
||||||
|
sample 45:
|
||||||
|
time = 933500
|
||||||
|
flags = 1
|
||||||
|
data = length 134, hash 165D0213
|
||||||
|
sample 46:
|
||||||
|
time = 943500
|
||||||
|
flags = 1
|
||||||
|
data = length 129, hash 1F5ABD5B
|
||||||
|
sample 47:
|
||||||
|
time = 953500
|
||||||
|
flags = 1
|
||||||
|
data = length 131, hash 65E1E196
|
||||||
|
sample 48:
|
||||||
|
time = 963500
|
||||||
|
flags = 1
|
||||||
|
data = length 128, hash 70A740A1
|
||||||
|
sample 49:
|
||||||
|
time = 973500
|
||||||
|
flags = 1
|
||||||
|
data = length 130, hash 2D3733ED
|
||||||
|
sample 50:
|
||||||
|
time = 983500
|
||||||
|
flags = 1
|
||||||
|
data = length 124, hash 6CC37521
|
||||||
|
sample 51:
|
||||||
|
time = 993500
|
||||||
|
flags = 536870913
|
||||||
|
data = length 129, hash 722253A8
|
||||||
|
tracksEnded = true
|
40
testdata/src/test/assets/mp4/sample_opus.mp4.2.dump
vendored
Normal file
40
testdata/src/test/assets/mp4/sample_opus.mp4.2.dump
vendored
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = true
|
||||||
|
duration = 1460000
|
||||||
|
getPosition(0) = [[timeUs=0, position=179]]
|
||||||
|
getPosition(1) = [[timeUs=1, position=179]]
|
||||||
|
getPosition(730000) = [[timeUs=730000, position=398]]
|
||||||
|
getPosition(1460000) = [[timeUs=1460000, position=3701]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
total output bytes = 511
|
||||||
|
sample count = 4
|
||||||
|
format 0:
|
||||||
|
id = 1
|
||||||
|
sampleMimeType = audio/opus
|
||||||
|
maxInputSize = 278
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
language = und
|
||||||
|
metadata = entries=[TSSE: description=null: value=Lavf58.29.100]
|
||||||
|
initializationData:
|
||||||
|
data = length 19, hash 86852AE2
|
||||||
|
data = length 8, hash 72CBCBF5
|
||||||
|
data = length 8, hash 79C07075
|
||||||
|
sample 0:
|
||||||
|
time = 963500
|
||||||
|
flags = 1
|
||||||
|
data = length 128, hash 70A740A1
|
||||||
|
sample 1:
|
||||||
|
time = 973500
|
||||||
|
flags = 1
|
||||||
|
data = length 130, hash 2D3733ED
|
||||||
|
sample 2:
|
||||||
|
time = 983500
|
||||||
|
flags = 1
|
||||||
|
data = length 124, hash 6CC37521
|
||||||
|
sample 3:
|
||||||
|
time = 993500
|
||||||
|
flags = 536870913
|
||||||
|
data = length 129, hash 722253A8
|
||||||
|
tracksEnded = true
|
28
testdata/src/test/assets/mp4/sample_opus.mp4.3.dump
vendored
Normal file
28
testdata/src/test/assets/mp4/sample_opus.mp4.3.dump
vendored
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = true
|
||||||
|
duration = 1460000
|
||||||
|
getPosition(0) = [[timeUs=0, position=179]]
|
||||||
|
getPosition(1) = [[timeUs=1, position=179]]
|
||||||
|
getPosition(730000) = [[timeUs=730000, position=398]]
|
||||||
|
getPosition(1460000) = [[timeUs=1460000, position=3701]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
total output bytes = 129
|
||||||
|
sample count = 1
|
||||||
|
format 0:
|
||||||
|
id = 1
|
||||||
|
sampleMimeType = audio/opus
|
||||||
|
maxInputSize = 278
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
language = und
|
||||||
|
metadata = entries=[TSSE: description=null: value=Lavf58.29.100]
|
||||||
|
initializationData:
|
||||||
|
data = length 19, hash 86852AE2
|
||||||
|
data = length 8, hash 72CBCBF5
|
||||||
|
data = length 8, hash 79C07075
|
||||||
|
sample 0:
|
||||||
|
time = 993500
|
||||||
|
flags = 536870913
|
||||||
|
data = length 129, hash 722253A8
|
||||||
|
tracksEnded = true
|
428
testdata/src/test/assets/mp4/sample_opus.mp4.unknown_length.dump
vendored
Normal file
428
testdata/src/test/assets/mp4/sample_opus.mp4.unknown_length.dump
vendored
Normal file
@ -0,0 +1,428 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = true
|
||||||
|
duration = 1460000
|
||||||
|
getPosition(0) = [[timeUs=0, position=179]]
|
||||||
|
getPosition(1) = [[timeUs=1, position=179]]
|
||||||
|
getPosition(730000) = [[timeUs=730000, position=398]]
|
||||||
|
getPosition(1460000) = [[timeUs=1460000, position=3701]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
total output bytes = 3651
|
||||||
|
sample count = 101
|
||||||
|
format 0:
|
||||||
|
id = 1
|
||||||
|
sampleMimeType = audio/opus
|
||||||
|
maxInputSize = 278
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
language = und
|
||||||
|
metadata = entries=[TSSE: description=null: value=Lavf58.29.100]
|
||||||
|
initializationData:
|
||||||
|
data = length 19, hash 86852AE2
|
||||||
|
data = length 8, hash 72CBCBF5
|
||||||
|
data = length 8, hash 79C07075
|
||||||
|
sample 0:
|
||||||
|
time = 0
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 1:
|
||||||
|
time = 3500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 2:
|
||||||
|
time = 13500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 3:
|
||||||
|
time = 23500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 4:
|
||||||
|
time = 33500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 5:
|
||||||
|
time = 43500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 6:
|
||||||
|
time = 53500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 7:
|
||||||
|
time = 63500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 8:
|
||||||
|
time = 73500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 9:
|
||||||
|
time = 83500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 10:
|
||||||
|
time = 93500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 11:
|
||||||
|
time = 103500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 12:
|
||||||
|
time = 113500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 13:
|
||||||
|
time = 123500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 14:
|
||||||
|
time = 133500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 15:
|
||||||
|
time = 143500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 16:
|
||||||
|
time = 153500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 17:
|
||||||
|
time = 163500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 18:
|
||||||
|
time = 173500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 19:
|
||||||
|
time = 183500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 20:
|
||||||
|
time = 193500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 21:
|
||||||
|
time = 203500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 22:
|
||||||
|
time = 213500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 23:
|
||||||
|
time = 223500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 24:
|
||||||
|
time = 233500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 25:
|
||||||
|
time = 243500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 26:
|
||||||
|
time = 253500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 27:
|
||||||
|
time = 263500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 28:
|
||||||
|
time = 273500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 29:
|
||||||
|
time = 283500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 30:
|
||||||
|
time = 293500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 31:
|
||||||
|
time = 303500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 32:
|
||||||
|
time = 313500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 33:
|
||||||
|
time = 323500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 34:
|
||||||
|
time = 333500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 35:
|
||||||
|
time = 343500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 36:
|
||||||
|
time = 353500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 37:
|
||||||
|
time = 363500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 38:
|
||||||
|
time = 373500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 39:
|
||||||
|
time = 383500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 40:
|
||||||
|
time = 393500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 41:
|
||||||
|
time = 403500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 42:
|
||||||
|
time = 413500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 43:
|
||||||
|
time = 423500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 44:
|
||||||
|
time = 433500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 45:
|
||||||
|
time = 443500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 46:
|
||||||
|
time = 453500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 47:
|
||||||
|
time = 463500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 48:
|
||||||
|
time = 473500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 49:
|
||||||
|
time = 483500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 50:
|
||||||
|
time = 493500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 51:
|
||||||
|
time = 503500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 52:
|
||||||
|
time = 513499
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 53:
|
||||||
|
time = 523499
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 54:
|
||||||
|
time = 533500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 55:
|
||||||
|
time = 543500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 56:
|
||||||
|
time = 553500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 57:
|
||||||
|
time = 563500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 58:
|
||||||
|
time = 573500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 59:
|
||||||
|
time = 583500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 60:
|
||||||
|
time = 593500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 61:
|
||||||
|
time = 603500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 62:
|
||||||
|
time = 613500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 63:
|
||||||
|
time = 623500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 64:
|
||||||
|
time = 633500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 65:
|
||||||
|
time = 643500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 66:
|
||||||
|
time = 653500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 67:
|
||||||
|
time = 663500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 68:
|
||||||
|
time = 673500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 69:
|
||||||
|
time = 683500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 70:
|
||||||
|
time = 693500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 71:
|
||||||
|
time = 703500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 72:
|
||||||
|
time = 713500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 73:
|
||||||
|
time = 723500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 74:
|
||||||
|
time = 733500
|
||||||
|
flags = 1
|
||||||
|
data = length 3, hash 4732
|
||||||
|
sample 75:
|
||||||
|
time = 743500
|
||||||
|
flags = 1
|
||||||
|
data = length 66, hash 648F0BC5
|
||||||
|
sample 76:
|
||||||
|
time = 753500
|
||||||
|
flags = 1
|
||||||
|
data = length 248, hash D07B1166
|
||||||
|
sample 77:
|
||||||
|
time = 763500
|
||||||
|
flags = 1
|
||||||
|
data = length 239, hash 61AA7E3B
|
||||||
|
sample 78:
|
||||||
|
time = 773500
|
||||||
|
flags = 1
|
||||||
|
data = length 142, hash F01726AD
|
||||||
|
sample 79:
|
||||||
|
time = 783500
|
||||||
|
flags = 1
|
||||||
|
data = length 124, hash 35B50117
|
||||||
|
sample 80:
|
||||||
|
time = 793500
|
||||||
|
flags = 1
|
||||||
|
data = length 122, hash 6ED2EA14
|
||||||
|
sample 81:
|
||||||
|
time = 803500
|
||||||
|
flags = 1
|
||||||
|
data = length 118, hash AAB319C9
|
||||||
|
sample 82:
|
||||||
|
time = 813500
|
||||||
|
flags = 1
|
||||||
|
data = length 117, hash 7B08A466
|
||||||
|
sample 83:
|
||||||
|
time = 823500
|
||||||
|
flags = 1
|
||||||
|
data = length 120, hash AF62F442
|
||||||
|
sample 84:
|
||||||
|
time = 833500
|
||||||
|
flags = 1
|
||||||
|
data = length 120, hash 21A0E5E9
|
||||||
|
sample 85:
|
||||||
|
time = 843500
|
||||||
|
flags = 1
|
||||||
|
data = length 122, hash F191C09
|
||||||
|
sample 86:
|
||||||
|
time = 853500
|
||||||
|
flags = 1
|
||||||
|
data = length 120, hash C52E4F2D
|
||||||
|
sample 87:
|
||||||
|
time = 863500
|
||||||
|
flags = 1
|
||||||
|
data = length 120, hash D4554502
|
||||||
|
sample 88:
|
||||||
|
time = 873500
|
||||||
|
flags = 1
|
||||||
|
data = length 121, hash D4E641CF
|
||||||
|
sample 89:
|
||||||
|
time = 883500
|
||||||
|
flags = 1
|
||||||
|
data = length 123, hash 518700A8
|
||||||
|
sample 90:
|
||||||
|
time = 893500
|
||||||
|
flags = 1
|
||||||
|
data = length 123, hash 6EA13134
|
||||||
|
sample 91:
|
||||||
|
time = 903500
|
||||||
|
flags = 1
|
||||||
|
data = length 123, hash A4264A7B
|
||||||
|
sample 92:
|
||||||
|
time = 913500
|
||||||
|
flags = 1
|
||||||
|
data = length 126, hash 593B6BA5
|
||||||
|
sample 93:
|
||||||
|
time = 923500
|
||||||
|
flags = 1
|
||||||
|
data = length 127, hash 15988F8A
|
||||||
|
sample 94:
|
||||||
|
time = 933500
|
||||||
|
flags = 1
|
||||||
|
data = length 134, hash 165D0213
|
||||||
|
sample 95:
|
||||||
|
time = 943500
|
||||||
|
flags = 1
|
||||||
|
data = length 129, hash 1F5ABD5B
|
||||||
|
sample 96:
|
||||||
|
time = 953500
|
||||||
|
flags = 1
|
||||||
|
data = length 131, hash 65E1E196
|
||||||
|
sample 97:
|
||||||
|
time = 963500
|
||||||
|
flags = 1
|
||||||
|
data = length 128, hash 70A740A1
|
||||||
|
sample 98:
|
||||||
|
time = 973500
|
||||||
|
flags = 1
|
||||||
|
data = length 130, hash 2D3733ED
|
||||||
|
sample 99:
|
||||||
|
time = 983500
|
||||||
|
flags = 1
|
||||||
|
data = length 124, hash 6CC37521
|
||||||
|
sample 100:
|
||||||
|
time = 993500
|
||||||
|
flags = 536870913
|
||||||
|
data = length 129, hash 722253A8
|
||||||
|
tracksEnded = true
|
BIN
testdata/src/test/assets/mp4/sample_opus_fragmented.mp4
vendored
Normal file
BIN
testdata/src/test/assets/mp4/sample_opus_fragmented.mp4
vendored
Normal file
Binary file not shown.
1019
testdata/src/test/assets/mp4/sample_opus_fragmented.mp4.0.dump
vendored
Normal file
1019
testdata/src/test/assets/mp4/sample_opus_fragmented.mp4.0.dump
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1019
testdata/src/test/assets/mp4/sample_opus_fragmented.mp4.unknown_length.dump
vendored
Normal file
1019
testdata/src/test/assets/mp4/sample_opus_fragmented.mp4.unknown_length.dump
vendored
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user