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)).
|
||||
* Ogg: Allow non-contiguous pages
|
||||
([#7230](https://github.com/google/ExoPlayer/issues/7230)).
|
||||
* MP4: Fix playback of MP4 containing Opus.
|
||||
* Matroska: Remove support for "Invisible" block header flag.
|
||||
* FLV: Ignore SCRIPTDATA segments with invalid name types, rather than failing
|
||||
playback ([#7675](https://github.com/google/ExoPlayer/issues/7675)).
|
||||
|
@ -4,8 +4,7 @@
|
||||
"samples": [
|
||||
{
|
||||
"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",
|
||||
"extension": "mpd"
|
||||
"uri": "file:///sdcard/1.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.Ac3Util;
|
||||
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.extractor.GaplessInfoHolder;
|
||||
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.HevcConfig;
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
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);
|
||||
|
||||
// Default values.
|
||||
@Nullable List<byte[]> initializationData = null;
|
||||
@Nullable ImmutableList<byte[]> initializationData = null;
|
||||
long subsampleOffsetUs = Format.OFFSET_SAMPLE_RELATIVE;
|
||||
|
||||
String mimeType;
|
||||
@ -924,7 +925,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
|
||||
int sampleDescriptionLength = atomSize - Atom.HEADER_SIZE - 8;
|
||||
byte[] sampleDescriptionData = new byte[sampleDescriptionLength];
|
||||
parent.readBytes(sampleDescriptionData, 0, sampleDescriptionLength);
|
||||
initializationData = Collections.singletonList(sampleDescriptionData);
|
||||
initializationData = ImmutableList.of(sampleDescriptionData);
|
||||
} else if (atomType == Atom.TYPE_wvtt) {
|
||||
mimeType = MimeTypes.APPLICATION_MP4VTT;
|
||||
} else if (atomType == Atom.TYPE_stpp) {
|
||||
@ -1042,7 +1043,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
|
||||
mimeType = mimeTypeAndInitializationDataBytes.first;
|
||||
@Nullable byte[] initializationDataBytes = mimeTypeAndInitializationDataBytes.second;
|
||||
if (initializationDataBytes != null) {
|
||||
initializationData = Collections.singletonList(initializationDataBytes);
|
||||
initializationData = ImmutableList.of(initializationDataBytes);
|
||||
}
|
||||
} else if (childAtomType == Atom.TYPE_pasp) {
|
||||
pixelWidthHeightRatio = parsePaspFromParent(parent, childStartPosition);
|
||||
@ -1242,7 +1243,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
|
||||
mimeType = MimeTypes.AUDIO_FLAC;
|
||||
}
|
||||
|
||||
@Nullable byte[] initializationData = null;
|
||||
@Nullable List<byte[]> initializationData = null;
|
||||
while (childPosition - position < size) {
|
||||
parent.setPosition(childPosition);
|
||||
int childAtomSize = parent.readInt();
|
||||
@ -1255,14 +1256,18 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
|
||||
Pair<@NullableType String, byte @NullableType []> mimeTypeAndInitializationData =
|
||||
parseEsdsFromParent(parent, esdsAtomPosition);
|
||||
mimeType = mimeTypeAndInitializationData.first;
|
||||
initializationData = mimeTypeAndInitializationData.second;
|
||||
if (MimeTypes.AUDIO_AAC.equals(mimeType) && initializationData != null) {
|
||||
// Update sampleRate and channelCount from the AudioSpecificConfig initialization data,
|
||||
// which is more reliable. See [Internal: b/10903778].
|
||||
AacUtil.Config aacConfig = AacUtil.parseAudioSpecificConfig(initializationData);
|
||||
sampleRate = aacConfig.sampleRateHz;
|
||||
channelCount = aacConfig.channelCount;
|
||||
codecs = aacConfig.codecs;
|
||||
@Nullable byte[] initializationDataBytes = mimeTypeAndInitializationData.second;
|
||||
if (initializationDataBytes != null) {
|
||||
if (MimeTypes.AUDIO_AAC.equals(mimeType)) {
|
||||
// Update sampleRate and channelCount from the AudioSpecificConfig initialization
|
||||
// data,
|
||||
// which is more reliable. See [Internal: b/10903778].
|
||||
AacUtil.Config aacConfig = AacUtil.parseAudioSpecificConfig(initializationDataBytes);
|
||||
sampleRate = aacConfig.sampleRateHz;
|
||||
channelCount = aacConfig.channelCount;
|
||||
codecs = aacConfig.codecs;
|
||||
}
|
||||
initializationData = ImmutableList.of(initializationDataBytes);
|
||||
}
|
||||
}
|
||||
} 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
|
||||
// Signature and the body of the dOps atom.
|
||||
int childAtomBodySize = childAtomSize - Atom.HEADER_SIZE;
|
||||
initializationData = new byte[opusMagic.length + childAtomBodySize];
|
||||
System.arraycopy(opusMagic, 0, initializationData, 0, opusMagic.length);
|
||||
byte[] headerBytes = Arrays.copyOf(opusMagic, opusMagic.length + childAtomBodySize);
|
||||
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) {
|
||||
int childAtomBodySize = childAtomSize - Atom.FULL_HEADER_SIZE;
|
||||
initializationData = new byte[4 + childAtomBodySize];
|
||||
initializationData[0] = 0x66; // f
|
||||
initializationData[1] = 0x4C; // L
|
||||
initializationData[2] = 0x61; // a
|
||||
initializationData[3] = 0x43; // C
|
||||
byte[] initializationDataBytes = new byte[4 + childAtomBodySize];
|
||||
initializationDataBytes[0] = 0x66; // f
|
||||
initializationDataBytes[1] = 0x4C; // L
|
||||
initializationDataBytes[2] = 0x61; // a
|
||||
initializationDataBytes[3] = 0x43; // C
|
||||
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) {
|
||||
int childAtomBodySize = childAtomSize - Atom.FULL_HEADER_SIZE;
|
||||
initializationData = new byte[childAtomBodySize];
|
||||
byte[] initializationDataBytes = new byte[childAtomBodySize];
|
||||
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,
|
||||
// which is more reliable. See https://github.com/google/ExoPlayer/pull/6629.
|
||||
Pair<Integer, Integer> audioSpecificConfig =
|
||||
CodecSpecificDataUtil.parseAlacAudioSpecificConfig(initializationData);
|
||||
CodecSpecificDataUtil.parseAlacAudioSpecificConfig(initializationDataBytes);
|
||||
sampleRate = audioSpecificConfig.first;
|
||||
channelCount = audioSpecificConfig.second;
|
||||
initializationData = ImmutableList.of(initializationDataBytes);
|
||||
}
|
||||
childPosition += childAtomSize;
|
||||
}
|
||||
@ -1328,8 +1335,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
|
||||
.setChannelCount(channelCount)
|
||||
.setSampleRate(sampleRate)
|
||||
.setPcmEncoding(pcmEncoding)
|
||||
.setInitializationData(
|
||||
initializationData == null ? null : Collections.singletonList(initializationData))
|
||||
.setInitializationData(initializationData)
|
||||
.setDrmInitData(drmInitData)
|
||||
.setLanguage(language)
|
||||
.build();
|
||||
|
@ -98,6 +98,14 @@ public final class FragmentedMp4ExtractorTest {
|
||||
simulationConfig);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void sampleWithOpusTrack() throws Exception {
|
||||
ExtractorAsserts.assertBehavior(
|
||||
getExtractorFactory(ImmutableList.of()),
|
||||
"mp4/sample_opus_fragmented.mp4",
|
||||
simulationConfig);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void samplePartiallyFragmented() throws Exception {
|
||||
ExtractorAsserts.assertBehavior(
|
||||
|
@ -74,4 +74,9 @@ public final class Mp4ExtractorTest {
|
||||
public void mp4SampleWithEac3jocTrack() throws Exception {
|
||||
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