Implement binary search seeking for FLAC extractor
PiperOrigin-RevId: 284814594
This commit is contained in:
parent
65adcdaeb9
commit
a95c28a929
@ -4,8 +4,7 @@
|
|||||||
|
|
||||||
* Add Java FLAC extractor
|
* Add Java FLAC extractor
|
||||||
([#6406](https://github.com/google/ExoPlayer/issues/6406)).
|
([#6406](https://github.com/google/ExoPlayer/issues/6406)).
|
||||||
This extractor does not support seeking and live streams. If
|
If `DefaultExtractorsFactory` is used, this extractor is only used if the FLAC
|
||||||
`DefaultExtractorsFactory` is used, this extractor is only used if the FLAC
|
|
||||||
extension is not loaded.
|
extension is not loaded.
|
||||||
* Make `MediaSourceEventListener.LoadEventInfo` and
|
* Make `MediaSourceEventListener.LoadEventInfo` and
|
||||||
`MediaSourceEventListener.MediaLoadData` top-level classes.
|
`MediaSourceEventListener.MediaLoadData` top-level classes.
|
||||||
|
@ -19,6 +19,7 @@ import com.google.android.exoplayer2.extractor.BinarySearchSeeker;
|
|||||||
import com.google.android.exoplayer2.extractor.ExtractorInput;
|
import com.google.android.exoplayer2.extractor.ExtractorInput;
|
||||||
import com.google.android.exoplayer2.extractor.SeekMap;
|
import com.google.android.exoplayer2.extractor.SeekMap;
|
||||||
import com.google.android.exoplayer2.util.Assertions;
|
import com.google.android.exoplayer2.util.Assertions;
|
||||||
|
import com.google.android.exoplayer2.util.FlacConstants;
|
||||||
import com.google.android.exoplayer2.util.FlacStreamMetadata;
|
import com.google.android.exoplayer2.util.FlacStreamMetadata;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
@ -49,6 +50,15 @@ import java.nio.ByteBuffer;
|
|||||||
|
|
||||||
private final FlacDecoderJni decoderJni;
|
private final FlacDecoderJni decoderJni;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a {@link FlacBinarySearchSeeker}.
|
||||||
|
*
|
||||||
|
* @param streamMetadata The stream metadata.
|
||||||
|
* @param firstFramePosition The byte offset of the first frame in the stream.
|
||||||
|
* @param inputLength The length of the stream in bytes.
|
||||||
|
* @param decoderJni The FLAC JNI decoder.
|
||||||
|
* @param outputFrameHolder A holder used to retrieve the frame found by a seeking operation.
|
||||||
|
*/
|
||||||
public FlacBinarySearchSeeker(
|
public FlacBinarySearchSeeker(
|
||||||
FlacStreamMetadata streamMetadata,
|
FlacStreamMetadata streamMetadata,
|
||||||
long firstFramePosition,
|
long firstFramePosition,
|
||||||
@ -56,7 +66,7 @@ import java.nio.ByteBuffer;
|
|||||||
FlacDecoderJni decoderJni,
|
FlacDecoderJni decoderJni,
|
||||||
OutputFrameHolder outputFrameHolder) {
|
OutputFrameHolder outputFrameHolder) {
|
||||||
super(
|
super(
|
||||||
new FlacSeekTimestampConverter(streamMetadata),
|
/* seekTimestampConverter= */ streamMetadata::getSampleNumber,
|
||||||
new FlacTimestampSeeker(decoderJni, outputFrameHolder),
|
new FlacTimestampSeeker(decoderJni, outputFrameHolder),
|
||||||
streamMetadata.getDurationUs(),
|
streamMetadata.getDurationUs(),
|
||||||
/* floorTimePosition= */ 0,
|
/* floorTimePosition= */ 0,
|
||||||
@ -64,7 +74,8 @@ import java.nio.ByteBuffer;
|
|||||||
/* floorBytePosition= */ firstFramePosition,
|
/* floorBytePosition= */ firstFramePosition,
|
||||||
/* ceilingBytePosition= */ inputLength,
|
/* ceilingBytePosition= */ inputLength,
|
||||||
/* approxBytesPerFrame= */ streamMetadata.getApproxBytesPerFrame(),
|
/* approxBytesPerFrame= */ streamMetadata.getApproxBytesPerFrame(),
|
||||||
/* minimumSearchRange= */ Math.max(1, streamMetadata.minFrameSize));
|
/* minimumSearchRange= */ Math.max(
|
||||||
|
FlacConstants.MIN_FRAME_HEADER_SIZE, streamMetadata.minFrameSize));
|
||||||
this.decoderJni = Assertions.checkNotNull(decoderJni);
|
this.decoderJni = Assertions.checkNotNull(decoderJni);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -124,21 +135,4 @@ import java.nio.ByteBuffer;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* A {@link SeekTimestampConverter} implementation that returns the frame index (sample index) as
|
|
||||||
* the timestamp for a stream seek time position.
|
|
||||||
*/
|
|
||||||
private static final class FlacSeekTimestampConverter implements SeekTimestampConverter {
|
|
||||||
private final FlacStreamMetadata streamMetadata;
|
|
||||||
|
|
||||||
public FlacSeekTimestampConverter(FlacStreamMetadata streamMetadata) {
|
|
||||||
this.streamMetadata = streamMetadata;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public long timeUsToTargetTime(long timeUs) {
|
|
||||||
return Assertions.checkNotNull(streamMetadata).getSampleIndex(timeUs);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -239,7 +239,10 @@ public final class DefaultExtractorsFactory implements ExtractorsFactory {
|
|||||||
? AmrExtractor.FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
|
? AmrExtractor.FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
|
||||||
: 0));
|
: 0));
|
||||||
extractors[12] = new Ac4Extractor();
|
extractors[12] = new Ac4Extractor();
|
||||||
// Prefer the FLAC extension extractor because it supports seeking.
|
// Prefer the FLAC extension extractor because it outputs raw audio, which can be handled by the
|
||||||
|
// framework on all API levels, unlike the core library FLAC extractor, which outputs FLAC audio
|
||||||
|
// frames and so relies on having a FLAC decoder (e.g., a MediaCodec decoder that handles FLAC
|
||||||
|
// (from API 27), or the FFmpeg extension with FLAC enabled).
|
||||||
if (FLAC_EXTENSION_EXTRACTOR_CONSTRUCTOR != null) {
|
if (FLAC_EXTENSION_EXTRACTOR_CONSTRUCTOR != null) {
|
||||||
try {
|
try {
|
||||||
extractors[13] = FLAC_EXTENSION_EXTRACTOR_CONSTRUCTOR.newInstance();
|
extractors[13] = FLAC_EXTENSION_EXTRACTOR_CONSTRUCTOR.newInstance();
|
||||||
|
@ -15,22 +15,25 @@
|
|||||||
*/
|
*/
|
||||||
package com.google.android.exoplayer2.extractor;
|
package com.google.android.exoplayer2.extractor;
|
||||||
|
|
||||||
|
import com.google.android.exoplayer2.C;
|
||||||
|
import com.google.android.exoplayer2.util.FlacConstants;
|
||||||
import com.google.android.exoplayer2.util.FlacStreamMetadata;
|
import com.google.android.exoplayer2.util.FlacStreamMetadata;
|
||||||
import com.google.android.exoplayer2.util.ParsableByteArray;
|
import com.google.android.exoplayer2.util.ParsableByteArray;
|
||||||
import com.google.android.exoplayer2.util.Util;
|
import com.google.android.exoplayer2.util.Util;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
/** Reads and peeks FLAC frame elements. */
|
/** Reads and peeks FLAC frame elements. */
|
||||||
public final class FlacFrameReader {
|
public final class FlacFrameReader {
|
||||||
|
|
||||||
/** Holds a frame block size. */
|
/** Holds a sample number. */
|
||||||
public static final class BlockSizeHolder {
|
public static final class SampleNumberHolder {
|
||||||
/** The block size in samples. */
|
/** The sample number. */
|
||||||
public int blockSizeSamples;
|
public long sampleNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether the given FLAC frame header is valid and, if so, reads it and writes the frame
|
* Checks whether the given FLAC frame header is valid and, if so, reads it and writes the frame
|
||||||
* block size in {@code blockSizeHolder}.
|
* first sample number in {@code sampleNumberHolder}.
|
||||||
*
|
*
|
||||||
* <p>If the header is valid, the position of {@code scratch} is moved to the byte following it.
|
* <p>If the header is valid, the position of {@code scratch} is moved to the byte following it.
|
||||||
* Otherwise, there is no guarantee on the position.
|
* Otherwise, there is no guarantee on the position.
|
||||||
@ -39,14 +42,14 @@ public final class FlacFrameReader {
|
|||||||
* header.
|
* header.
|
||||||
* @param flacStreamMetadata The stream metadata.
|
* @param flacStreamMetadata The stream metadata.
|
||||||
* @param frameStartMarker The frame start marker of the stream.
|
* @param frameStartMarker The frame start marker of the stream.
|
||||||
* @param blockSizeHolder The holder used to contain the block size.
|
* @param sampleNumberHolder The holder used to contain the sample number.
|
||||||
* @return Whether the frame header is valid.
|
* @return Whether the frame header is valid.
|
||||||
*/
|
*/
|
||||||
public static boolean checkAndReadFrameHeader(
|
public static boolean checkAndReadFrameHeader(
|
||||||
ParsableByteArray scratch,
|
ParsableByteArray scratch,
|
||||||
FlacStreamMetadata flacStreamMetadata,
|
FlacStreamMetadata flacStreamMetadata,
|
||||||
int frameStartMarker,
|
int frameStartMarker,
|
||||||
BlockSizeHolder blockSizeHolder) {
|
SampleNumberHolder sampleNumberHolder) {
|
||||||
int frameStartPosition = scratch.getPosition();
|
int frameStartPosition = scratch.getPosition();
|
||||||
|
|
||||||
long frameHeaderBytes = scratch.readUnsignedInt();
|
long frameHeaderBytes = scratch.readUnsignedInt();
|
||||||
@ -54,6 +57,7 @@ public final class FlacFrameReader {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean isBlockSizeVariable = (frameHeaderBytes >>> 16 & 1) == 1;
|
||||||
int blockSizeKey = (int) (frameHeaderBytes >> 12 & 0xF);
|
int blockSizeKey = (int) (frameHeaderBytes >> 12 & 0xF);
|
||||||
int sampleRateKey = (int) (frameHeaderBytes >> 8 & 0xF);
|
int sampleRateKey = (int) (frameHeaderBytes >> 8 & 0xF);
|
||||||
int channelAssignmentKey = (int) (frameHeaderBytes >> 4 & 0xF);
|
int channelAssignmentKey = (int) (frameHeaderBytes >> 4 & 0xF);
|
||||||
@ -62,32 +66,67 @@ public final class FlacFrameReader {
|
|||||||
return checkChannelAssignment(channelAssignmentKey, flacStreamMetadata)
|
return checkChannelAssignment(channelAssignmentKey, flacStreamMetadata)
|
||||||
&& checkBitsPerSample(bitsPerSampleKey, flacStreamMetadata)
|
&& checkBitsPerSample(bitsPerSampleKey, flacStreamMetadata)
|
||||||
&& !reservedBit
|
&& !reservedBit
|
||||||
&& checkAndReadUtf8Data(scratch)
|
&& checkAndReadFirstSampleNumber(
|
||||||
&& checkAndReadBlockSizeSamples(scratch, flacStreamMetadata, blockSizeKey, blockSizeHolder)
|
scratch, flacStreamMetadata, isBlockSizeVariable, sampleNumberHolder)
|
||||||
|
&& checkAndReadBlockSizeSamples(scratch, flacStreamMetadata, blockSizeKey)
|
||||||
&& checkAndReadSampleRate(scratch, flacStreamMetadata, sampleRateKey)
|
&& checkAndReadSampleRate(scratch, flacStreamMetadata, sampleRateKey)
|
||||||
&& checkAndReadCrc(scratch, frameStartPosition);
|
&& checkAndReadCrc(scratch, frameStartPosition);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the block size of the given frame.
|
* Checks whether the given FLAC frame header is valid and, if so, writes the frame first sample
|
||||||
|
* number in {@code sampleNumberHolder}.
|
||||||
*
|
*
|
||||||
* <p>If no exception is thrown, the position of {@code scratch} is left unchanged. Otherwise,
|
* <p>The {@code input} peek position is left unchanged.
|
||||||
* there is no guarantee on the position.
|
|
||||||
*
|
*
|
||||||
* @param scratch The array to get the data from, whose position must correspond to the start of a
|
* @param input The input to get the data from, whose peek position must correspond to the frame
|
||||||
* frame.
|
* header.
|
||||||
* @return The block size in samples, or -1 if the block size is invalid.
|
* @param flacStreamMetadata The stream metadata.
|
||||||
|
* @param frameStartMarker The frame start marker of the stream.
|
||||||
|
* @param sampleNumberHolder The holder used to contain the sample number.
|
||||||
|
* @return Whether the frame header is valid.
|
||||||
*/
|
*/
|
||||||
public static int getFrameBlockSizeSamples(ParsableByteArray scratch) {
|
public static boolean checkFrameHeaderFromPeek(
|
||||||
int blockSizeKey = (scratch.data[2] & 0xFF) >> 4;
|
ExtractorInput input,
|
||||||
if (blockSizeKey < 6 || blockSizeKey > 7) {
|
FlacStreamMetadata flacStreamMetadata,
|
||||||
return readFrameBlockSizeSamplesFromKey(scratch, blockSizeKey);
|
int frameStartMarker,
|
||||||
|
SampleNumberHolder sampleNumberHolder)
|
||||||
|
throws IOException, InterruptedException {
|
||||||
|
long originalPeekPosition = input.getPeekPosition();
|
||||||
|
|
||||||
|
byte[] frameStartBytes = new byte[2];
|
||||||
|
input.peekFully(frameStartBytes, 0, 2);
|
||||||
|
int frameStart = (frameStartBytes[0] & 0xFF) << 8 | (frameStartBytes[1] & 0xFF);
|
||||||
|
if (frameStart != frameStartMarker) {
|
||||||
|
input.resetPeekPosition();
|
||||||
|
input.advancePeekPosition((int) (originalPeekPosition - input.getPosition()));
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
scratch.skipBytes(4);
|
|
||||||
scratch.readUtf8EncodedLong();
|
ParsableByteArray scratch = new ParsableByteArray(FlacConstants.MAX_FRAME_HEADER_SIZE);
|
||||||
int blockSizeSamples = readFrameBlockSizeSamplesFromKey(scratch, blockSizeKey);
|
System.arraycopy(
|
||||||
scratch.setPosition(0);
|
frameStartBytes, /* srcPos= */ 0, scratch.data, /* destPos= */ 0, /* length= */ 2);
|
||||||
return blockSizeSamples;
|
|
||||||
|
int totalBytesPeeked = 2;
|
||||||
|
while (totalBytesPeeked < FlacConstants.MAX_FRAME_HEADER_SIZE) {
|
||||||
|
int bytesPeeked =
|
||||||
|
input.peek(
|
||||||
|
scratch.data,
|
||||||
|
totalBytesPeeked,
|
||||||
|
FlacConstants.MAX_FRAME_HEADER_SIZE - totalBytesPeeked);
|
||||||
|
if (bytesPeeked == C.RESULT_END_OF_INPUT) {
|
||||||
|
// The size of the last frame is less than MAX_FRAME_HEADER_SIZE.
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
totalBytesPeeked += bytesPeeked;
|
||||||
|
}
|
||||||
|
scratch.setLimit(totalBytesPeeked);
|
||||||
|
|
||||||
|
input.resetPeekPosition();
|
||||||
|
input.advancePeekPosition((int) (originalPeekPosition - input.getPosition()));
|
||||||
|
|
||||||
|
return checkAndReadFrameHeader(
|
||||||
|
scratch, flacStreamMetadata, frameStartMarker, sampleNumberHolder);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -159,27 +198,40 @@ public final class FlacFrameReader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether the given UTF-8 data is valid and, if so, reads it.
|
* Checks whether the given sample number is valid and, if so, reads it and writes it in {@code
|
||||||
|
* sampleNumberHolder}.
|
||||||
*
|
*
|
||||||
* <p>If the UTF-8 data is valid, the position of {@code scratch} is moved to the byte following
|
* <p>If the sample number is valid, the position of {@code scratch} is moved to the byte
|
||||||
* it. Otherwise, there is no guarantee on the position.
|
* following it. Otherwise, there is no guarantee on the position.
|
||||||
*
|
*
|
||||||
* @param scratch The array to read the data from, whose position must correspond to the UTF-8
|
* @param scratch The array to read the data from, whose position must correspond to the sample
|
||||||
* data.
|
* number data.
|
||||||
* @return Whether the UTF-8 data is valid.
|
* @param flacStreamMetadata The stream metadata.
|
||||||
|
* @param isBlockSizeVariable Whether the stream blocking strategy is variable block size or fixed
|
||||||
|
* block size.
|
||||||
|
* @param sampleNumberHolder The holder used to contain the sample number.
|
||||||
|
* @return Whether the sample number is valid.
|
||||||
*/
|
*/
|
||||||
private static boolean checkAndReadUtf8Data(ParsableByteArray scratch) {
|
private static boolean checkAndReadFirstSampleNumber(
|
||||||
|
ParsableByteArray scratch,
|
||||||
|
FlacStreamMetadata flacStreamMetadata,
|
||||||
|
boolean isBlockSizeVariable,
|
||||||
|
SampleNumberHolder sampleNumberHolder) {
|
||||||
|
long utf8Value;
|
||||||
try {
|
try {
|
||||||
scratch.readUtf8EncodedLong();
|
utf8Value = scratch.readUtf8EncodedLong();
|
||||||
} catch (NumberFormatException e) {
|
} catch (NumberFormatException e) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sampleNumberHolder.sampleNumber =
|
||||||
|
isBlockSizeVariable ? utf8Value : utf8Value * flacStreamMetadata.maxBlockSizeSamples;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether the given frame block size key and block size bits are valid and, if so, reads
|
* Checks whether the given frame block size key and block size bits are valid and, if so, reads
|
||||||
* the block size bits and writes the block size in {@code blockSizeHolder}.
|
* the block size bits.
|
||||||
*
|
*
|
||||||
* <p>If the block size is valid, the position of {@code scratch} is moved to the byte following
|
* <p>If the block size is valid, the position of {@code scratch} is moved to the byte following
|
||||||
* the block size bits. Otherwise, there is no guarantee on the position.
|
* the block size bits. Otherwise, there is no guarantee on the position.
|
||||||
@ -188,20 +240,12 @@ public final class FlacFrameReader {
|
|||||||
* size bits.
|
* size bits.
|
||||||
* @param flacStreamMetadata The stream metadata.
|
* @param flacStreamMetadata The stream metadata.
|
||||||
* @param blockSizeKey The key in the block size lookup table.
|
* @param blockSizeKey The key in the block size lookup table.
|
||||||
* @param blockSizeHolder The holder used to contain the block size.
|
|
||||||
* @return Whether the block size is valid.
|
* @return Whether the block size is valid.
|
||||||
*/
|
*/
|
||||||
private static boolean checkAndReadBlockSizeSamples(
|
private static boolean checkAndReadBlockSizeSamples(
|
||||||
ParsableByteArray scratch,
|
ParsableByteArray scratch, FlacStreamMetadata flacStreamMetadata, int blockSizeKey) {
|
||||||
FlacStreamMetadata flacStreamMetadata,
|
|
||||||
int blockSizeKey,
|
|
||||||
BlockSizeHolder blockSizeHolder) {
|
|
||||||
int blockSizeSamples = readFrameBlockSizeSamplesFromKey(scratch, blockSizeKey);
|
int blockSizeSamples = readFrameBlockSizeSamplesFromKey(scratch, blockSizeKey);
|
||||||
if (blockSizeSamples == -1 || blockSizeSamples > flacStreamMetadata.maxBlockSizeSamples) {
|
return blockSizeSamples != -1 && blockSizeSamples <= flacStreamMetadata.maxBlockSizeSamples;
|
||||||
return false;
|
|
||||||
}
|
|
||||||
blockSizeHolder.blockSizeSamples = blockSizeSamples;
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -45,19 +45,6 @@ public final class FlacMetadataReader {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Holds the metadata extracted from the first frame. */
|
|
||||||
public static final class FirstFrameMetadata {
|
|
||||||
/** The frame start marker, which should correspond to the 2 first bytes of each frame. */
|
|
||||||
public final int frameStartMarker;
|
|
||||||
/** The block size in samples. */
|
|
||||||
public final int blockSizeSamples;
|
|
||||||
|
|
||||||
public FirstFrameMetadata(int frameStartMarker, int blockSizeSamples) {
|
|
||||||
this.frameStartMarker = frameStartMarker;
|
|
||||||
this.blockSizeSamples = blockSizeSamples;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final int STREAM_MARKER = 0x664C6143; // ASCII for "fLaC"
|
private static final int STREAM_MARKER = 0x664C6143; // ASCII for "fLaC"
|
||||||
private static final int SYNC_CODE = 0x3FFE;
|
private static final int SYNC_CODE = 0x3FFE;
|
||||||
private static final int STREAM_INFO_TYPE = 0;
|
private static final int STREAM_INFO_TYPE = 0;
|
||||||
@ -204,23 +191,22 @@ public final class FlacMetadataReader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns some metadata extracted from the first frame of a FLAC stream.
|
* Returns the frame start marker, consisting of the 2 first bytes of the first frame.
|
||||||
*
|
*
|
||||||
* <p>The read position of {@code input} is left unchanged and the peek position is aligned with
|
* <p>The read position of {@code input} is left unchanged and the peek position is aligned with
|
||||||
* the read position.
|
* the read position.
|
||||||
*
|
*
|
||||||
* @param input Input stream to get the metadata from (starting from the read position).
|
* @param input Input stream to get the start marker from (starting from the read position).
|
||||||
* @return A {@link FirstFrameMetadata} containing the frame start marker (which should be the
|
* @return The frame start marker (which must be the same for all the frames in the stream).
|
||||||
* same for all the frames in the stream) and the block size of the frame.
|
* @throws ParserException If an error occurs parsing the frame start marker.
|
||||||
* @throws ParserException If an error occurs parsing the frame metadata.
|
|
||||||
* @throws IOException If peeking from the input fails.
|
* @throws IOException If peeking from the input fails.
|
||||||
* @throws InterruptedException If interrupted while peeking from input.
|
* @throws InterruptedException If interrupted while peeking from input.
|
||||||
*/
|
*/
|
||||||
public static FirstFrameMetadata getFirstFrameMetadata(ExtractorInput input)
|
public static int getFrameStartMarker(ExtractorInput input)
|
||||||
throws IOException, InterruptedException {
|
throws IOException, InterruptedException {
|
||||||
input.resetPeekPosition();
|
input.resetPeekPosition();
|
||||||
ParsableByteArray scratch = new ParsableByteArray(FlacConstants.MAX_FRAME_HEADER_SIZE);
|
ParsableByteArray scratch = new ParsableByteArray(2);
|
||||||
input.peekFully(scratch.data, 0, FlacConstants.MAX_FRAME_HEADER_SIZE);
|
input.peekFully(scratch.data, 0, 2);
|
||||||
|
|
||||||
int frameStartMarker = scratch.readUnsignedShort();
|
int frameStartMarker = scratch.readUnsignedShort();
|
||||||
int syncCode = frameStartMarker >> 2;
|
int syncCode = frameStartMarker >> 2;
|
||||||
@ -229,11 +215,8 @@ public final class FlacMetadataReader {
|
|||||||
throw new ParserException("First frame does not start with sync code.");
|
throw new ParserException("First frame does not start with sync code.");
|
||||||
}
|
}
|
||||||
|
|
||||||
scratch.setPosition(0);
|
|
||||||
int firstFrameBlockSizeSamples = FlacFrameReader.getFrameBlockSizeSamples(scratch);
|
|
||||||
|
|
||||||
input.resetPeekPosition();
|
input.resetPeekPosition();
|
||||||
return new FirstFrameMetadata(frameStartMarker, firstFrameBlockSizeSamples);
|
return frameStartMarker;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static FlacStreamMetadata readStreamInfoBlock(ExtractorInput input)
|
private static FlacStreamMetadata readStreamInfoBlock(ExtractorInput input)
|
||||||
|
@ -0,0 +1,140 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2019 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package com.google.android.exoplayer2.extractor.flac;
|
||||||
|
|
||||||
|
import com.google.android.exoplayer2.extractor.BinarySearchSeeker;
|
||||||
|
import com.google.android.exoplayer2.extractor.ExtractorInput;
|
||||||
|
import com.google.android.exoplayer2.extractor.FlacFrameReader;
|
||||||
|
import com.google.android.exoplayer2.extractor.FlacFrameReader.SampleNumberHolder;
|
||||||
|
import com.google.android.exoplayer2.extractor.SeekMap;
|
||||||
|
import com.google.android.exoplayer2.util.FlacConstants;
|
||||||
|
import com.google.android.exoplayer2.util.FlacStreamMetadata;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A {@link SeekMap} implementation for FLAC stream using binary search.
|
||||||
|
*
|
||||||
|
* <p>This seeker performs seeking by using binary search within the stream, until it finds the
|
||||||
|
* frame that contains the target sample.
|
||||||
|
*/
|
||||||
|
/* package */ final class FlacBinarySearchSeeker extends BinarySearchSeeker {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a {@link FlacBinarySearchSeeker}.
|
||||||
|
*
|
||||||
|
* @param flacStreamMetadata The stream metadata.
|
||||||
|
* @param frameStartMarker The frame start marker, consisting of the 2 bytes by which every frame
|
||||||
|
* in the stream must start.
|
||||||
|
* @param firstFramePosition The byte offset of the first frame in the stream.
|
||||||
|
* @param inputLength The length of the stream in bytes.
|
||||||
|
* @param sampleNumberHolder A holder used to retrieve the sample number of a frame found by a
|
||||||
|
* seeking operation.
|
||||||
|
*/
|
||||||
|
public FlacBinarySearchSeeker(
|
||||||
|
FlacStreamMetadata flacStreamMetadata,
|
||||||
|
int frameStartMarker,
|
||||||
|
long firstFramePosition,
|
||||||
|
long inputLength,
|
||||||
|
SampleNumberHolder sampleNumberHolder) {
|
||||||
|
super(
|
||||||
|
/* seekTimestampConverter= */ flacStreamMetadata::getSampleNumber,
|
||||||
|
new FlacTimestampSeeker(flacStreamMetadata, frameStartMarker, sampleNumberHolder),
|
||||||
|
flacStreamMetadata.getDurationUs(),
|
||||||
|
/* floorTimePosition= */ 0,
|
||||||
|
/* ceilingTimePosition= */ flacStreamMetadata.totalSamples,
|
||||||
|
/* floorBytePosition= */ firstFramePosition,
|
||||||
|
/* ceilingBytePosition= */ inputLength,
|
||||||
|
/* approxBytesPerFrame= */ flacStreamMetadata.getApproxBytesPerFrame(),
|
||||||
|
/* minimumSearchRange= */ Math.max(
|
||||||
|
FlacConstants.MIN_FRAME_HEADER_SIZE, flacStreamMetadata.minFrameSize));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final class FlacTimestampSeeker implements TimestampSeeker {
|
||||||
|
|
||||||
|
private final FlacStreamMetadata flacStreamMetadata;
|
||||||
|
private final int frameStartMarker;
|
||||||
|
private final SampleNumberHolder foundFrameSampleNumberHolder;
|
||||||
|
private final SampleNumberHolder tempSampleNumberHolder;
|
||||||
|
|
||||||
|
private FlacTimestampSeeker(
|
||||||
|
FlacStreamMetadata flacStreamMetadata,
|
||||||
|
int frameStartMarker,
|
||||||
|
SampleNumberHolder foundFrameSampleNumberHolder) {
|
||||||
|
this.flacStreamMetadata = flacStreamMetadata;
|
||||||
|
this.frameStartMarker = frameStartMarker;
|
||||||
|
this.foundFrameSampleNumberHolder = foundFrameSampleNumberHolder;
|
||||||
|
tempSampleNumberHolder = new SampleNumberHolder();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TimestampSearchResult searchForTimestamp(ExtractorInput input, long targetSampleIndex)
|
||||||
|
throws IOException, InterruptedException {
|
||||||
|
long searchPosition = input.getPosition();
|
||||||
|
|
||||||
|
// Find left frame.
|
||||||
|
long leftFrameFirstSampleNumber = findNextFrame(input);
|
||||||
|
long leftFramePosition = input.getPeekPosition();
|
||||||
|
|
||||||
|
input.advancePeekPosition(
|
||||||
|
Math.max(FlacConstants.MIN_FRAME_HEADER_SIZE, flacStreamMetadata.minFrameSize));
|
||||||
|
|
||||||
|
// Find right frame.
|
||||||
|
long rightFrameFirstSampleNumber = findNextFrame(input);
|
||||||
|
long rightFramePosition = input.getPeekPosition();
|
||||||
|
|
||||||
|
if (leftFrameFirstSampleNumber <= targetSampleIndex
|
||||||
|
&& rightFrameFirstSampleNumber > targetSampleIndex) {
|
||||||
|
foundFrameSampleNumberHolder.sampleNumber = leftFrameFirstSampleNumber;
|
||||||
|
return TimestampSearchResult.targetFoundResult(leftFramePosition);
|
||||||
|
} else if (rightFrameFirstSampleNumber <= targetSampleIndex) {
|
||||||
|
return TimestampSearchResult.underestimatedResult(
|
||||||
|
rightFrameFirstSampleNumber, rightFramePosition);
|
||||||
|
} else {
|
||||||
|
return TimestampSearchResult.overestimatedResult(
|
||||||
|
leftFrameFirstSampleNumber, searchPosition);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Searches for the next frame in {@code input}.
|
||||||
|
*
|
||||||
|
* <p>The peek position is advanced to the start of the found frame, or at the end of the stream
|
||||||
|
* if no frame was found.
|
||||||
|
*
|
||||||
|
* @param input The input from which to search (starting from the peek position).
|
||||||
|
* @return The number of the first sample in the found frame, or the total number of samples in
|
||||||
|
* the stream if no frame was found.
|
||||||
|
* @throws IOException If peeking from the input fails. In this case, there is no guarantee on
|
||||||
|
* the peek position.
|
||||||
|
* @throws InterruptedException If interrupted while peeking from input. In this case, there is
|
||||||
|
* no guarantee on the peek position.
|
||||||
|
*/
|
||||||
|
private long findNextFrame(ExtractorInput input) throws IOException, InterruptedException {
|
||||||
|
while (input.getPeekPosition() < input.getLength() - FlacConstants.MIN_FRAME_HEADER_SIZE
|
||||||
|
&& !FlacFrameReader.checkFrameHeaderFromPeek(
|
||||||
|
input, flacStreamMetadata, frameStartMarker, tempSampleNumberHolder)) {
|
||||||
|
input.advancePeekPosition(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (input.getPeekPosition() >= input.getLength() - FlacConstants.MIN_FRAME_HEADER_SIZE) {
|
||||||
|
input.advancePeekPosition((int) (input.getLength() - input.getPeekPosition()));
|
||||||
|
return flacStreamMetadata.totalSamples;
|
||||||
|
}
|
||||||
|
|
||||||
|
return tempSampleNumberHolder.sampleNumber;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -25,9 +25,8 @@ import com.google.android.exoplayer2.extractor.ExtractorInput;
|
|||||||
import com.google.android.exoplayer2.extractor.ExtractorOutput;
|
import com.google.android.exoplayer2.extractor.ExtractorOutput;
|
||||||
import com.google.android.exoplayer2.extractor.ExtractorsFactory;
|
import com.google.android.exoplayer2.extractor.ExtractorsFactory;
|
||||||
import com.google.android.exoplayer2.extractor.FlacFrameReader;
|
import com.google.android.exoplayer2.extractor.FlacFrameReader;
|
||||||
import com.google.android.exoplayer2.extractor.FlacFrameReader.BlockSizeHolder;
|
import com.google.android.exoplayer2.extractor.FlacFrameReader.SampleNumberHolder;
|
||||||
import com.google.android.exoplayer2.extractor.FlacMetadataReader;
|
import com.google.android.exoplayer2.extractor.FlacMetadataReader;
|
||||||
import com.google.android.exoplayer2.extractor.FlacMetadataReader.FirstFrameMetadata;
|
|
||||||
import com.google.android.exoplayer2.extractor.PositionHolder;
|
import com.google.android.exoplayer2.extractor.PositionHolder;
|
||||||
import com.google.android.exoplayer2.extractor.SeekMap;
|
import com.google.android.exoplayer2.extractor.SeekMap;
|
||||||
import com.google.android.exoplayer2.extractor.TrackOutput;
|
import com.google.android.exoplayer2.extractor.TrackOutput;
|
||||||
@ -42,7 +41,7 @@ import java.lang.annotation.Retention;
|
|||||||
import java.lang.annotation.RetentionPolicy;
|
import java.lang.annotation.RetentionPolicy;
|
||||||
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
||||||
|
|
||||||
// TODO: implement seeking.
|
// TODO: implement seeking using the optional seek table.
|
||||||
/**
|
/**
|
||||||
* Extracts data from FLAC container format.
|
* Extracts data from FLAC container format.
|
||||||
*
|
*
|
||||||
@ -78,7 +77,7 @@ public final class FlacExtractor implements Extractor {
|
|||||||
STATE_GET_STREAM_MARKER_AND_INFO_BLOCK_BYTES,
|
STATE_GET_STREAM_MARKER_AND_INFO_BLOCK_BYTES,
|
||||||
STATE_READ_STREAM_MARKER,
|
STATE_READ_STREAM_MARKER,
|
||||||
STATE_READ_METADATA_BLOCKS,
|
STATE_READ_METADATA_BLOCKS,
|
||||||
STATE_GET_FIRST_FRAME_METADATA,
|
STATE_GET_FRAME_START_MARKER,
|
||||||
STATE_READ_FRAMES
|
STATE_READ_FRAMES
|
||||||
})
|
})
|
||||||
private @interface State {}
|
private @interface State {}
|
||||||
@ -87,20 +86,20 @@ public final class FlacExtractor implements Extractor {
|
|||||||
private static final int STATE_GET_STREAM_MARKER_AND_INFO_BLOCK_BYTES = 1;
|
private static final int STATE_GET_STREAM_MARKER_AND_INFO_BLOCK_BYTES = 1;
|
||||||
private static final int STATE_READ_STREAM_MARKER = 2;
|
private static final int STATE_READ_STREAM_MARKER = 2;
|
||||||
private static final int STATE_READ_METADATA_BLOCKS = 3;
|
private static final int STATE_READ_METADATA_BLOCKS = 3;
|
||||||
private static final int STATE_GET_FIRST_FRAME_METADATA = 4;
|
private static final int STATE_GET_FRAME_START_MARKER = 4;
|
||||||
private static final int STATE_READ_FRAMES = 5;
|
private static final int STATE_READ_FRAMES = 5;
|
||||||
|
|
||||||
/** Arbitrary scratch length of 32KB, which is ~170ms of 16-bit stereo PCM audio at 48KHz. */
|
/** Arbitrary scratch length of 32KB, which is ~170ms of 16-bit stereo PCM audio at 48KHz. */
|
||||||
private static final int SCRATCH_LENGTH = 32 * 1024;
|
private static final int SCRATCH_LENGTH = 32 * 1024;
|
||||||
|
|
||||||
/** Value of an unknown block size. */
|
/** Value of an unknown sample number. */
|
||||||
private static final int BLOCK_SIZE_UNKNOWN = -1;
|
private static final int SAMPLE_NUMBER_UNKNOWN = -1;
|
||||||
|
|
||||||
private final byte[] streamMarkerAndInfoBlock;
|
private final byte[] streamMarkerAndInfoBlock;
|
||||||
private final ParsableByteArray scratch;
|
private final ParsableByteArray scratch;
|
||||||
private final boolean id3MetadataDisabled;
|
private final boolean id3MetadataDisabled;
|
||||||
|
|
||||||
private final BlockSizeHolder blockSizeHolder;
|
private final SampleNumberHolder sampleNumberHolder;
|
||||||
|
|
||||||
@MonotonicNonNull private ExtractorOutput extractorOutput;
|
@MonotonicNonNull private ExtractorOutput extractorOutput;
|
||||||
@MonotonicNonNull private TrackOutput trackOutput;
|
@MonotonicNonNull private TrackOutput trackOutput;
|
||||||
@ -110,9 +109,9 @@ public final class FlacExtractor implements Extractor {
|
|||||||
@MonotonicNonNull private FlacStreamMetadata flacStreamMetadata;
|
@MonotonicNonNull private FlacStreamMetadata flacStreamMetadata;
|
||||||
private int minFrameSize;
|
private int minFrameSize;
|
||||||
private int frameStartMarker;
|
private int frameStartMarker;
|
||||||
private int currentFrameBlockSizeSamples;
|
@MonotonicNonNull private FlacBinarySearchSeeker binarySearchSeeker;
|
||||||
private int currentFrameBytesWritten;
|
private int currentFrameBytesWritten;
|
||||||
private long totalSamplesWritten;
|
private long currentFrameFirstSampleNumber;
|
||||||
|
|
||||||
/** Constructs an instance with {@code flags = 0}. */
|
/** Constructs an instance with {@code flags = 0}. */
|
||||||
public FlacExtractor() {
|
public FlacExtractor() {
|
||||||
@ -129,8 +128,8 @@ public final class FlacExtractor implements Extractor {
|
|||||||
streamMarkerAndInfoBlock =
|
streamMarkerAndInfoBlock =
|
||||||
new byte[FlacConstants.STREAM_MARKER_SIZE + FlacConstants.STREAM_INFO_BLOCK_SIZE];
|
new byte[FlacConstants.STREAM_MARKER_SIZE + FlacConstants.STREAM_INFO_BLOCK_SIZE];
|
||||||
scratch = new ParsableByteArray(SCRATCH_LENGTH);
|
scratch = new ParsableByteArray(SCRATCH_LENGTH);
|
||||||
blockSizeHolder = new BlockSizeHolder();
|
|
||||||
id3MetadataDisabled = (flags & FLAG_DISABLE_ID3_METADATA) != 0;
|
id3MetadataDisabled = (flags & FLAG_DISABLE_ID3_METADATA) != 0;
|
||||||
|
sampleNumberHolder = new SampleNumberHolder();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -147,7 +146,7 @@ public final class FlacExtractor implements Extractor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int read(ExtractorInput input, PositionHolder seekPosition)
|
public @ReadResult int read(ExtractorInput input, PositionHolder seekPosition)
|
||||||
throws IOException, InterruptedException {
|
throws IOException, InterruptedException {
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case STATE_READ_ID3_METADATA:
|
case STATE_READ_ID3_METADATA:
|
||||||
@ -162,11 +161,11 @@ public final class FlacExtractor implements Extractor {
|
|||||||
case STATE_READ_METADATA_BLOCKS:
|
case STATE_READ_METADATA_BLOCKS:
|
||||||
readMetadataBlocks(input);
|
readMetadataBlocks(input);
|
||||||
return Extractor.RESULT_CONTINUE;
|
return Extractor.RESULT_CONTINUE;
|
||||||
case STATE_GET_FIRST_FRAME_METADATA:
|
case STATE_GET_FRAME_START_MARKER:
|
||||||
getFirstFrameMetadata(input);
|
getFrameStartMarker(input);
|
||||||
return Extractor.RESULT_CONTINUE;
|
return Extractor.RESULT_CONTINUE;
|
||||||
case STATE_READ_FRAMES:
|
case STATE_READ_FRAMES:
|
||||||
return readFrames(input);
|
return readFrames(input, seekPosition);
|
||||||
default:
|
default:
|
||||||
throw new IllegalStateException();
|
throw new IllegalStateException();
|
||||||
}
|
}
|
||||||
@ -174,9 +173,13 @@ public final class FlacExtractor implements Extractor {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void seek(long position, long timeUs) {
|
public void seek(long position, long timeUs) {
|
||||||
|
if (position == 0) {
|
||||||
state = STATE_READ_ID3_METADATA;
|
state = STATE_READ_ID3_METADATA;
|
||||||
|
currentFrameFirstSampleNumber = 0;
|
||||||
|
} else if (binarySearchSeeker != null) {
|
||||||
|
binarySearchSeeker.setSeekTargetUs(timeUs);
|
||||||
|
}
|
||||||
currentFrameBytesWritten = 0;
|
currentFrameBytesWritten = 0;
|
||||||
totalSamplesWritten = 0;
|
|
||||||
scratch.reset();
|
scratch.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -218,25 +221,33 @@ public final class FlacExtractor implements Extractor {
|
|||||||
minFrameSize = Math.max(flacStreamMetadata.minFrameSize, FlacConstants.MIN_FRAME_HEADER_SIZE);
|
minFrameSize = Math.max(flacStreamMetadata.minFrameSize, FlacConstants.MIN_FRAME_HEADER_SIZE);
|
||||||
castNonNull(trackOutput)
|
castNonNull(trackOutput)
|
||||||
.format(flacStreamMetadata.getFormat(streamMarkerAndInfoBlock, id3Metadata));
|
.format(flacStreamMetadata.getFormat(streamMarkerAndInfoBlock, id3Metadata));
|
||||||
castNonNull(extractorOutput)
|
|
||||||
.seekMap(new SeekMap.Unseekable(flacStreamMetadata.getDurationUs()));
|
|
||||||
|
|
||||||
state = STATE_GET_FIRST_FRAME_METADATA;
|
state = STATE_GET_FRAME_START_MARKER;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void getFirstFrameMetadata(ExtractorInput input)
|
private void getFrameStartMarker(ExtractorInput input) throws IOException, InterruptedException {
|
||||||
throws IOException, InterruptedException {
|
frameStartMarker = FlacMetadataReader.getFrameStartMarker(input);
|
||||||
FirstFrameMetadata firstFrameMetadata = FlacMetadataReader.getFirstFrameMetadata(input);
|
castNonNull(extractorOutput)
|
||||||
frameStartMarker = firstFrameMetadata.frameStartMarker;
|
.seekMap(
|
||||||
currentFrameBlockSizeSamples = firstFrameMetadata.blockSizeSamples;
|
getSeekMap(
|
||||||
|
/* firstFramePosition= */ (int) input.getPosition(),
|
||||||
|
/* streamLength= */ input.getLength()));
|
||||||
|
|
||||||
state = STATE_READ_FRAMES;
|
state = STATE_READ_FRAMES;
|
||||||
}
|
}
|
||||||
|
|
||||||
private int readFrames(ExtractorInput input) throws IOException, InterruptedException {
|
private @ReadResult int readFrames(ExtractorInput input, PositionHolder seekPosition)
|
||||||
|
throws IOException, InterruptedException {
|
||||||
Assertions.checkNotNull(trackOutput);
|
Assertions.checkNotNull(trackOutput);
|
||||||
Assertions.checkNotNull(flacStreamMetadata);
|
Assertions.checkNotNull(flacStreamMetadata);
|
||||||
|
|
||||||
|
// Handle pending seek if necessary.
|
||||||
|
if (binarySearchSeeker != null && binarySearchSeeker.isSeeking()) {
|
||||||
|
int seekResult = binarySearchSeeker.handlePendingSeek(input, seekPosition);
|
||||||
|
currentFrameFirstSampleNumber = sampleNumberHolder.sampleNumber;
|
||||||
|
return seekResult;
|
||||||
|
}
|
||||||
|
|
||||||
// Copy more bytes into the scratch.
|
// Copy more bytes into the scratch.
|
||||||
int currentLimit = scratch.limit();
|
int currentLimit = scratch.limit();
|
||||||
int bytesRead =
|
int bytesRead =
|
||||||
@ -246,7 +257,8 @@ public final class FlacExtractor implements Extractor {
|
|||||||
if (!foundEndOfInput) {
|
if (!foundEndOfInput) {
|
||||||
scratch.setLimit(currentLimit + bytesRead);
|
scratch.setLimit(currentLimit + bytesRead);
|
||||||
} else if (scratch.bytesLeft() == 0) {
|
} else if (scratch.bytesLeft() == 0) {
|
||||||
return C.RESULT_END_OF_INPUT;
|
outputSampleMetadata();
|
||||||
|
return Extractor.RESULT_END_OF_INPUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Search for a frame.
|
// Search for a frame.
|
||||||
@ -257,24 +269,17 @@ public final class FlacExtractor implements Extractor {
|
|||||||
scratch.skipBytes(Math.min(minFrameSize, scratch.bytesLeft()));
|
scratch.skipBytes(Math.min(minFrameSize, scratch.bytesLeft()));
|
||||||
}
|
}
|
||||||
|
|
||||||
int nextFrameBlockSizeSamples = findFrame(scratch, foundEndOfInput);
|
long nextFrameFirstSampleNumber = findFrame(scratch, foundEndOfInput);
|
||||||
int numberOfFrameBytes = scratch.getPosition() - positionBeforeFindingAFrame;
|
int numberOfFrameBytes = scratch.getPosition() - positionBeforeFindingAFrame;
|
||||||
scratch.setPosition(positionBeforeFindingAFrame);
|
scratch.setPosition(positionBeforeFindingAFrame);
|
||||||
trackOutput.sampleData(scratch, numberOfFrameBytes);
|
trackOutput.sampleData(scratch, numberOfFrameBytes);
|
||||||
currentFrameBytesWritten += numberOfFrameBytes;
|
currentFrameBytesWritten += numberOfFrameBytes;
|
||||||
|
|
||||||
// Frame found.
|
// Frame found.
|
||||||
if (nextFrameBlockSizeSamples != BLOCK_SIZE_UNKNOWN || foundEndOfInput) {
|
if (nextFrameFirstSampleNumber != SAMPLE_NUMBER_UNKNOWN) {
|
||||||
long timeUs = getTimeUs(totalSamplesWritten, flacStreamMetadata.sampleRate);
|
outputSampleMetadata();
|
||||||
trackOutput.sampleMetadata(
|
|
||||||
timeUs,
|
|
||||||
C.BUFFER_FLAG_KEY_FRAME,
|
|
||||||
currentFrameBytesWritten,
|
|
||||||
/* offset= */ 0,
|
|
||||||
/* encryptionData= */ null);
|
|
||||||
totalSamplesWritten += currentFrameBlockSizeSamples;
|
|
||||||
currentFrameBytesWritten = 0;
|
currentFrameBytesWritten = 0;
|
||||||
currentFrameBlockSizeSamples = nextFrameBlockSizeSamples;
|
currentFrameFirstSampleNumber = nextFrameFirstSampleNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (scratch.bytesLeft() < FlacConstants.MAX_FRAME_HEADER_SIZE) {
|
if (scratch.bytesLeft() < FlacConstants.MAX_FRAME_HEADER_SIZE) {
|
||||||
@ -288,6 +293,21 @@ public final class FlacExtractor implements Extractor {
|
|||||||
return Extractor.RESULT_CONTINUE;
|
return Extractor.RESULT_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private SeekMap getSeekMap(int firstFramePosition, long streamLength) {
|
||||||
|
Assertions.checkNotNull(flacStreamMetadata);
|
||||||
|
if (streamLength == C.LENGTH_UNSET || flacStreamMetadata.totalSamples == 0) {
|
||||||
|
return new SeekMap.Unseekable(flacStreamMetadata.getDurationUs());
|
||||||
|
}
|
||||||
|
binarySearchSeeker =
|
||||||
|
new FlacBinarySearchSeeker(
|
||||||
|
flacStreamMetadata,
|
||||||
|
frameStartMarker,
|
||||||
|
firstFramePosition,
|
||||||
|
streamLength,
|
||||||
|
sampleNumberHolder);
|
||||||
|
return binarySearchSeeker.getSeekMap();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Searches for the start of a frame in {@code scratch}.
|
* Searches for the start of a frame in {@code scratch}.
|
||||||
*
|
*
|
||||||
@ -298,19 +318,19 @@ public final class FlacExtractor implements Extractor {
|
|||||||
*
|
*
|
||||||
* @param scratch The array to be searched.
|
* @param scratch The array to be searched.
|
||||||
* @param foundEndOfInput If the end of input was met when filling in the {@code scratch}.
|
* @param foundEndOfInput If the end of input was met when filling in the {@code scratch}.
|
||||||
* @return The block size of the frame found, or {@code BLOCK_SIZE_UNKNOWN} if the search was not
|
* @return The number of the first sample in the frame found, or {@code SAMPLE_NUMBER_UNKNOWN} if
|
||||||
* successful.
|
* the search was not successful.
|
||||||
*/
|
*/
|
||||||
private int findFrame(ParsableByteArray scratch, boolean foundEndOfInput) {
|
private long findFrame(ParsableByteArray scratch, boolean foundEndOfInput) {
|
||||||
Assertions.checkNotNull(flacStreamMetadata);
|
Assertions.checkNotNull(flacStreamMetadata);
|
||||||
|
|
||||||
int frameOffset = scratch.getPosition();
|
int frameOffset = scratch.getPosition();
|
||||||
while (frameOffset <= scratch.limit() - FlacConstants.MAX_FRAME_HEADER_SIZE) {
|
while (frameOffset <= scratch.limit() - FlacConstants.MAX_FRAME_HEADER_SIZE) {
|
||||||
scratch.setPosition(frameOffset);
|
scratch.setPosition(frameOffset);
|
||||||
if (FlacFrameReader.checkAndReadFrameHeader(
|
if (FlacFrameReader.checkAndReadFrameHeader(
|
||||||
scratch, flacStreamMetadata, frameStartMarker, blockSizeHolder)) {
|
scratch, flacStreamMetadata, frameStartMarker, sampleNumberHolder)) {
|
||||||
scratch.setPosition(frameOffset);
|
scratch.setPosition(frameOffset);
|
||||||
return blockSizeHolder.blockSizeSamples;
|
return sampleNumberHolder.sampleNumber;
|
||||||
}
|
}
|
||||||
frameOffset++;
|
frameOffset++;
|
||||||
}
|
}
|
||||||
@ -322,10 +342,20 @@ public final class FlacExtractor implements Extractor {
|
|||||||
scratch.setPosition(frameOffset);
|
scratch.setPosition(frameOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
return BLOCK_SIZE_UNKNOWN;
|
return SAMPLE_NUMBER_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
private long getTimeUs(long numSamples, int sampleRate) {
|
private void outputSampleMetadata() {
|
||||||
return numSamples * C.MICROS_PER_SECOND / sampleRate;
|
long timeUs =
|
||||||
|
currentFrameFirstSampleNumber
|
||||||
|
* C.MICROS_PER_SECOND
|
||||||
|
/ castNonNull(flacStreamMetadata).sampleRate;
|
||||||
|
castNonNull(trackOutput)
|
||||||
|
.sampleMetadata(
|
||||||
|
timeUs,
|
||||||
|
C.BUFFER_FLAG_KEY_FRAME,
|
||||||
|
currentFrameBytesWritten,
|
||||||
|
/* offset= */ 0,
|
||||||
|
/* encryptionData= */ null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -171,14 +171,14 @@ public final class FlacStreamMetadata {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the sample index for the sample at given position.
|
* Returns the sample number of the sample at a given time.
|
||||||
*
|
*
|
||||||
* @param timeUs Time position in microseconds in the FLAC stream.
|
* @param timeUs Time position in microseconds in the FLAC stream.
|
||||||
* @return The sample index for the sample at given position.
|
* @return The sample number corresponding to the time position.
|
||||||
*/
|
*/
|
||||||
public long getSampleIndex(long timeUs) {
|
public long getSampleNumber(long timeUs) {
|
||||||
long sampleIndex = (timeUs * sampleRate) / C.MICROS_PER_SECOND;
|
long sampleNumber = (timeUs * sampleRate) / C.MICROS_PER_SECOND;
|
||||||
return Util.constrainValue(sampleIndex, /* min= */ 0, totalSamples - 1);
|
return Util.constrainValue(sampleNumber, /* min= */ 0, totalSamples - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns the approximate number of bytes per frame for the current FLAC stream. */
|
/** Returns the approximate number of bytes per frame for the current FLAC stream. */
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
seekMap:
|
seekMap:
|
||||||
isSeekable = false
|
isSeekable = true
|
||||||
duration = 2741000
|
duration = 2741000
|
||||||
getPosition(0) = [[timeUs=0, position=0]]
|
getPosition(0) = [[timeUs=0, position=8880]]
|
||||||
numberOfTracks = 1
|
numberOfTracks = 1
|
||||||
track 0:
|
track 0:
|
||||||
format:
|
format:
|
||||||
|
124
library/core/src/test/assets/flac/bear.flac.1.dump
Normal file
124
library/core/src/test/assets/flac/bear.flac.1.dump
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = true
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=8880]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1536000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = 5776
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
metadata = null
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 83F6895
|
||||||
|
total output bytes = 113666
|
||||||
|
sample count = 23
|
||||||
|
sample 0:
|
||||||
|
time = 853333
|
||||||
|
flags = 1
|
||||||
|
data = length 5031, hash 9D55EA53
|
||||||
|
sample 1:
|
||||||
|
time = 938666
|
||||||
|
flags = 1
|
||||||
|
data = length 5119, hash E1CB9BA6
|
||||||
|
sample 2:
|
||||||
|
time = 1024000
|
||||||
|
flags = 1
|
||||||
|
data = length 5360, hash 17265C5D
|
||||||
|
sample 3:
|
||||||
|
time = 1109333
|
||||||
|
flags = 1
|
||||||
|
data = length 5340, hash A90FDDF1
|
||||||
|
sample 4:
|
||||||
|
time = 1194666
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 31F65AD5
|
||||||
|
sample 5:
|
||||||
|
time = 1280000
|
||||||
|
flags = 1
|
||||||
|
data = length 5168, hash F2394F2D
|
||||||
|
sample 6:
|
||||||
|
time = 1365333
|
||||||
|
flags = 1
|
||||||
|
data = length 5776, hash 58437AB3
|
||||||
|
sample 7:
|
||||||
|
time = 1450666
|
||||||
|
flags = 1
|
||||||
|
data = length 5394, hash EBAB20A8
|
||||||
|
sample 8:
|
||||||
|
time = 1536000
|
||||||
|
flags = 1
|
||||||
|
data = length 5168, hash BF37C7A5
|
||||||
|
sample 9:
|
||||||
|
time = 1621333
|
||||||
|
flags = 1
|
||||||
|
data = length 5324, hash 59546B7B
|
||||||
|
sample 10:
|
||||||
|
time = 1706666
|
||||||
|
flags = 1
|
||||||
|
data = length 5172, hash 6036EF0B
|
||||||
|
sample 11:
|
||||||
|
time = 1792000
|
||||||
|
flags = 1
|
||||||
|
data = length 5102, hash 5A131071
|
||||||
|
sample 12:
|
||||||
|
time = 1877333
|
||||||
|
flags = 1
|
||||||
|
data = length 5111, hash 3D9EBB3B
|
||||||
|
sample 13:
|
||||||
|
time = 1962666
|
||||||
|
flags = 1
|
||||||
|
data = length 5113, hash 61101D4F
|
||||||
|
sample 14:
|
||||||
|
time = 2048000
|
||||||
|
flags = 1
|
||||||
|
data = length 5229, hash D2E55742
|
||||||
|
sample 15:
|
||||||
|
time = 2133333
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 7F2E97FA
|
||||||
|
sample 16:
|
||||||
|
time = 2218666
|
||||||
|
flags = 1
|
||||||
|
data = length 5255, hash D92A782
|
||||||
|
sample 17:
|
||||||
|
time = 2304000
|
||||||
|
flags = 1
|
||||||
|
data = length 5196, hash 98FE5138
|
||||||
|
sample 18:
|
||||||
|
time = 2389333
|
||||||
|
flags = 1
|
||||||
|
data = length 5214, hash 3D35C38C
|
||||||
|
sample 19:
|
||||||
|
time = 2474666
|
||||||
|
flags = 1
|
||||||
|
data = length 5211, hash 7E25420F
|
||||||
|
sample 20:
|
||||||
|
time = 2560000
|
||||||
|
flags = 1
|
||||||
|
data = length 5230, hash 2AD96FBC
|
||||||
|
sample 21:
|
||||||
|
time = 2645333
|
||||||
|
flags = 1
|
||||||
|
data = length 3384, hash 938BCDD9
|
||||||
|
sample 22:
|
||||||
|
time = 2730666
|
||||||
|
flags = 1
|
||||||
|
data = length 445, hash A388E3D6
|
||||||
|
tracksEnded = true
|
80
library/core/src/test/assets/flac/bear.flac.2.dump
Normal file
80
library/core/src/test/assets/flac/bear.flac.2.dump
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = true
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=8880]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1536000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = 5776
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
metadata = null
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 83F6895
|
||||||
|
total output bytes = 55652
|
||||||
|
sample count = 12
|
||||||
|
sample 0:
|
||||||
|
time = 1792000
|
||||||
|
flags = 1
|
||||||
|
data = length 5102, hash 5A131071
|
||||||
|
sample 1:
|
||||||
|
time = 1877333
|
||||||
|
flags = 1
|
||||||
|
data = length 5111, hash 3D9EBB3B
|
||||||
|
sample 2:
|
||||||
|
time = 1962666
|
||||||
|
flags = 1
|
||||||
|
data = length 5113, hash 61101D4F
|
||||||
|
sample 3:
|
||||||
|
time = 2048000
|
||||||
|
flags = 1
|
||||||
|
data = length 5229, hash D2E55742
|
||||||
|
sample 4:
|
||||||
|
time = 2133333
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 7F2E97FA
|
||||||
|
sample 5:
|
||||||
|
time = 2218666
|
||||||
|
flags = 1
|
||||||
|
data = length 5255, hash D92A782
|
||||||
|
sample 6:
|
||||||
|
time = 2304000
|
||||||
|
flags = 1
|
||||||
|
data = length 5196, hash 98FE5138
|
||||||
|
sample 7:
|
||||||
|
time = 2389333
|
||||||
|
flags = 1
|
||||||
|
data = length 5214, hash 3D35C38C
|
||||||
|
sample 8:
|
||||||
|
time = 2474666
|
||||||
|
flags = 1
|
||||||
|
data = length 5211, hash 7E25420F
|
||||||
|
sample 9:
|
||||||
|
time = 2560000
|
||||||
|
flags = 1
|
||||||
|
data = length 5230, hash 2AD96FBC
|
||||||
|
sample 10:
|
||||||
|
time = 2645333
|
||||||
|
flags = 1
|
||||||
|
data = length 3384, hash 938BCDD9
|
||||||
|
sample 11:
|
||||||
|
time = 2730666
|
||||||
|
flags = 1
|
||||||
|
data = length 445, hash A388E3D6
|
||||||
|
tracksEnded = true
|
36
library/core/src/test/assets/flac/bear.flac.3.dump
Normal file
36
library/core/src/test/assets/flac/bear.flac.3.dump
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = true
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=8880]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1536000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = 5776
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
metadata = null
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 83F6895
|
||||||
|
total output bytes = 445
|
||||||
|
sample count = 1
|
||||||
|
sample 0:
|
||||||
|
time = 2730666
|
||||||
|
flags = 1
|
||||||
|
data = length 445, hash A388E3D6
|
||||||
|
tracksEnded = true
|
164
library/core/src/test/assets/flac/bear.flac.unklen.dump
Normal file
164
library/core/src/test/assets/flac/bear.flac.unklen.dump
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = false
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=0]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1536000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = 5776
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
metadata = null
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 83F6895
|
||||||
|
total output bytes = 164431
|
||||||
|
sample count = 33
|
||||||
|
sample 0:
|
||||||
|
time = 0
|
||||||
|
flags = 1
|
||||||
|
data = length 5030, hash D2B60530
|
||||||
|
sample 1:
|
||||||
|
time = 85333
|
||||||
|
flags = 1
|
||||||
|
data = length 5066, hash 4C932A54
|
||||||
|
sample 2:
|
||||||
|
time = 170666
|
||||||
|
flags = 1
|
||||||
|
data = length 5112, hash 7E5A7B61
|
||||||
|
sample 3:
|
||||||
|
time = 256000
|
||||||
|
flags = 1
|
||||||
|
data = length 5044, hash 7EF93F13
|
||||||
|
sample 4:
|
||||||
|
time = 341333
|
||||||
|
flags = 1
|
||||||
|
data = length 4943, hash DE7E27F8
|
||||||
|
sample 5:
|
||||||
|
time = 426666
|
||||||
|
flags = 1
|
||||||
|
data = length 5121, hash 6D0D0B40
|
||||||
|
sample 6:
|
||||||
|
time = 512000
|
||||||
|
flags = 1
|
||||||
|
data = length 5068, hash 9924644F
|
||||||
|
sample 7:
|
||||||
|
time = 597333
|
||||||
|
flags = 1
|
||||||
|
data = length 5143, hash 6C34F0CE
|
||||||
|
sample 8:
|
||||||
|
time = 682666
|
||||||
|
flags = 1
|
||||||
|
data = length 5109, hash E3B7BEFB
|
||||||
|
sample 9:
|
||||||
|
time = 768000
|
||||||
|
flags = 1
|
||||||
|
data = length 5129, hash 44111D9B
|
||||||
|
sample 10:
|
||||||
|
time = 853333
|
||||||
|
flags = 1
|
||||||
|
data = length 5031, hash 9D55EA53
|
||||||
|
sample 11:
|
||||||
|
time = 938666
|
||||||
|
flags = 1
|
||||||
|
data = length 5119, hash E1CB9BA6
|
||||||
|
sample 12:
|
||||||
|
time = 1024000
|
||||||
|
flags = 1
|
||||||
|
data = length 5360, hash 17265C5D
|
||||||
|
sample 13:
|
||||||
|
time = 1109333
|
||||||
|
flags = 1
|
||||||
|
data = length 5340, hash A90FDDF1
|
||||||
|
sample 14:
|
||||||
|
time = 1194666
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 31F65AD5
|
||||||
|
sample 15:
|
||||||
|
time = 1280000
|
||||||
|
flags = 1
|
||||||
|
data = length 5168, hash F2394F2D
|
||||||
|
sample 16:
|
||||||
|
time = 1365333
|
||||||
|
flags = 1
|
||||||
|
data = length 5776, hash 58437AB3
|
||||||
|
sample 17:
|
||||||
|
time = 1450666
|
||||||
|
flags = 1
|
||||||
|
data = length 5394, hash EBAB20A8
|
||||||
|
sample 18:
|
||||||
|
time = 1536000
|
||||||
|
flags = 1
|
||||||
|
data = length 5168, hash BF37C7A5
|
||||||
|
sample 19:
|
||||||
|
time = 1621333
|
||||||
|
flags = 1
|
||||||
|
data = length 5324, hash 59546B7B
|
||||||
|
sample 20:
|
||||||
|
time = 1706666
|
||||||
|
flags = 1
|
||||||
|
data = length 5172, hash 6036EF0B
|
||||||
|
sample 21:
|
||||||
|
time = 1792000
|
||||||
|
flags = 1
|
||||||
|
data = length 5102, hash 5A131071
|
||||||
|
sample 22:
|
||||||
|
time = 1877333
|
||||||
|
flags = 1
|
||||||
|
data = length 5111, hash 3D9EBB3B
|
||||||
|
sample 23:
|
||||||
|
time = 1962666
|
||||||
|
flags = 1
|
||||||
|
data = length 5113, hash 61101D4F
|
||||||
|
sample 24:
|
||||||
|
time = 2048000
|
||||||
|
flags = 1
|
||||||
|
data = length 5229, hash D2E55742
|
||||||
|
sample 25:
|
||||||
|
time = 2133333
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 7F2E97FA
|
||||||
|
sample 26:
|
||||||
|
time = 2218666
|
||||||
|
flags = 1
|
||||||
|
data = length 5255, hash D92A782
|
||||||
|
sample 27:
|
||||||
|
time = 2304000
|
||||||
|
flags = 1
|
||||||
|
data = length 5196, hash 98FE5138
|
||||||
|
sample 28:
|
||||||
|
time = 2389333
|
||||||
|
flags = 1
|
||||||
|
data = length 5214, hash 3D35C38C
|
||||||
|
sample 29:
|
||||||
|
time = 2474666
|
||||||
|
flags = 1
|
||||||
|
data = length 5211, hash 7E25420F
|
||||||
|
sample 30:
|
||||||
|
time = 2560000
|
||||||
|
flags = 1
|
||||||
|
data = length 5230, hash 2AD96FBC
|
||||||
|
sample 31:
|
||||||
|
time = 2645333
|
||||||
|
flags = 1
|
||||||
|
data = length 3384, hash 938BCDD9
|
||||||
|
sample 32:
|
||||||
|
time = 2730666
|
||||||
|
flags = 1
|
||||||
|
data = length 445, hash A388E3D6
|
||||||
|
tracksEnded = true
|
@ -1,7 +1,7 @@
|
|||||||
seekMap:
|
seekMap:
|
||||||
isSeekable = false
|
isSeekable = true
|
||||||
duration = 2741000
|
duration = 2741000
|
||||||
getPosition(0) = [[timeUs=0, position=0]]
|
getPosition(0) = [[timeUs=0, position=8880]]
|
||||||
numberOfTracks = 1
|
numberOfTracks = 1
|
||||||
track 0:
|
track 0:
|
||||||
format:
|
format:
|
||||||
|
@ -0,0 +1,124 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = true
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=8880]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1536000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = -1
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
metadata = null
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 9218FDB7
|
||||||
|
total output bytes = 113666
|
||||||
|
sample count = 23
|
||||||
|
sample 0:
|
||||||
|
time = 853333
|
||||||
|
flags = 1
|
||||||
|
data = length 5031, hash 9D55EA53
|
||||||
|
sample 1:
|
||||||
|
time = 938666
|
||||||
|
flags = 1
|
||||||
|
data = length 5119, hash E1CB9BA6
|
||||||
|
sample 2:
|
||||||
|
time = 1024000
|
||||||
|
flags = 1
|
||||||
|
data = length 5360, hash 17265C5D
|
||||||
|
sample 3:
|
||||||
|
time = 1109333
|
||||||
|
flags = 1
|
||||||
|
data = length 5340, hash A90FDDF1
|
||||||
|
sample 4:
|
||||||
|
time = 1194666
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 31F65AD5
|
||||||
|
sample 5:
|
||||||
|
time = 1280000
|
||||||
|
flags = 1
|
||||||
|
data = length 5168, hash F2394F2D
|
||||||
|
sample 6:
|
||||||
|
time = 1365333
|
||||||
|
flags = 1
|
||||||
|
data = length 5776, hash 58437AB3
|
||||||
|
sample 7:
|
||||||
|
time = 1450666
|
||||||
|
flags = 1
|
||||||
|
data = length 5394, hash EBAB20A8
|
||||||
|
sample 8:
|
||||||
|
time = 1536000
|
||||||
|
flags = 1
|
||||||
|
data = length 5168, hash BF37C7A5
|
||||||
|
sample 9:
|
||||||
|
time = 1621333
|
||||||
|
flags = 1
|
||||||
|
data = length 5324, hash 59546B7B
|
||||||
|
sample 10:
|
||||||
|
time = 1706666
|
||||||
|
flags = 1
|
||||||
|
data = length 5172, hash 6036EF0B
|
||||||
|
sample 11:
|
||||||
|
time = 1792000
|
||||||
|
flags = 1
|
||||||
|
data = length 5102, hash 5A131071
|
||||||
|
sample 12:
|
||||||
|
time = 1877333
|
||||||
|
flags = 1
|
||||||
|
data = length 5111, hash 3D9EBB3B
|
||||||
|
sample 13:
|
||||||
|
time = 1962666
|
||||||
|
flags = 1
|
||||||
|
data = length 5113, hash 61101D4F
|
||||||
|
sample 14:
|
||||||
|
time = 2048000
|
||||||
|
flags = 1
|
||||||
|
data = length 5229, hash D2E55742
|
||||||
|
sample 15:
|
||||||
|
time = 2133333
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 7F2E97FA
|
||||||
|
sample 16:
|
||||||
|
time = 2218666
|
||||||
|
flags = 1
|
||||||
|
data = length 5255, hash D92A782
|
||||||
|
sample 17:
|
||||||
|
time = 2304000
|
||||||
|
flags = 1
|
||||||
|
data = length 5196, hash 98FE5138
|
||||||
|
sample 18:
|
||||||
|
time = 2389333
|
||||||
|
flags = 1
|
||||||
|
data = length 5214, hash 3D35C38C
|
||||||
|
sample 19:
|
||||||
|
time = 2474666
|
||||||
|
flags = 1
|
||||||
|
data = length 5211, hash 7E25420F
|
||||||
|
sample 20:
|
||||||
|
time = 2560000
|
||||||
|
flags = 1
|
||||||
|
data = length 5230, hash 2AD96FBC
|
||||||
|
sample 21:
|
||||||
|
time = 2645333
|
||||||
|
flags = 1
|
||||||
|
data = length 3384, hash 938BCDD9
|
||||||
|
sample 22:
|
||||||
|
time = 2730666
|
||||||
|
flags = 1
|
||||||
|
data = length 445, hash A388E3D6
|
||||||
|
tracksEnded = true
|
@ -0,0 +1,80 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = true
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=8880]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1536000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = -1
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
metadata = null
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 9218FDB7
|
||||||
|
total output bytes = 55652
|
||||||
|
sample count = 12
|
||||||
|
sample 0:
|
||||||
|
time = 1792000
|
||||||
|
flags = 1
|
||||||
|
data = length 5102, hash 5A131071
|
||||||
|
sample 1:
|
||||||
|
time = 1877333
|
||||||
|
flags = 1
|
||||||
|
data = length 5111, hash 3D9EBB3B
|
||||||
|
sample 2:
|
||||||
|
time = 1962666
|
||||||
|
flags = 1
|
||||||
|
data = length 5113, hash 61101D4F
|
||||||
|
sample 3:
|
||||||
|
time = 2048000
|
||||||
|
flags = 1
|
||||||
|
data = length 5229, hash D2E55742
|
||||||
|
sample 4:
|
||||||
|
time = 2133333
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 7F2E97FA
|
||||||
|
sample 5:
|
||||||
|
time = 2218666
|
||||||
|
flags = 1
|
||||||
|
data = length 5255, hash D92A782
|
||||||
|
sample 6:
|
||||||
|
time = 2304000
|
||||||
|
flags = 1
|
||||||
|
data = length 5196, hash 98FE5138
|
||||||
|
sample 7:
|
||||||
|
time = 2389333
|
||||||
|
flags = 1
|
||||||
|
data = length 5214, hash 3D35C38C
|
||||||
|
sample 8:
|
||||||
|
time = 2474666
|
||||||
|
flags = 1
|
||||||
|
data = length 5211, hash 7E25420F
|
||||||
|
sample 9:
|
||||||
|
time = 2560000
|
||||||
|
flags = 1
|
||||||
|
data = length 5230, hash 2AD96FBC
|
||||||
|
sample 10:
|
||||||
|
time = 2645333
|
||||||
|
flags = 1
|
||||||
|
data = length 3384, hash 938BCDD9
|
||||||
|
sample 11:
|
||||||
|
time = 2730666
|
||||||
|
flags = 1
|
||||||
|
data = length 445, hash A388E3D6
|
||||||
|
tracksEnded = true
|
@ -0,0 +1,36 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = true
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=8880]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1536000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = -1
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
metadata = null
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 9218FDB7
|
||||||
|
total output bytes = 445
|
||||||
|
sample count = 1
|
||||||
|
sample 0:
|
||||||
|
time = 2730666
|
||||||
|
flags = 1
|
||||||
|
data = length 445, hash A388E3D6
|
||||||
|
tracksEnded = true
|
@ -0,0 +1,164 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = false
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=0]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1536000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = -1
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
metadata = null
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 9218FDB7
|
||||||
|
total output bytes = 164431
|
||||||
|
sample count = 33
|
||||||
|
sample 0:
|
||||||
|
time = 0
|
||||||
|
flags = 1
|
||||||
|
data = length 5030, hash D2B60530
|
||||||
|
sample 1:
|
||||||
|
time = 85333
|
||||||
|
flags = 1
|
||||||
|
data = length 5066, hash 4C932A54
|
||||||
|
sample 2:
|
||||||
|
time = 170666
|
||||||
|
flags = 1
|
||||||
|
data = length 5112, hash 7E5A7B61
|
||||||
|
sample 3:
|
||||||
|
time = 256000
|
||||||
|
flags = 1
|
||||||
|
data = length 5044, hash 7EF93F13
|
||||||
|
sample 4:
|
||||||
|
time = 341333
|
||||||
|
flags = 1
|
||||||
|
data = length 4943, hash DE7E27F8
|
||||||
|
sample 5:
|
||||||
|
time = 426666
|
||||||
|
flags = 1
|
||||||
|
data = length 5121, hash 6D0D0B40
|
||||||
|
sample 6:
|
||||||
|
time = 512000
|
||||||
|
flags = 1
|
||||||
|
data = length 5068, hash 9924644F
|
||||||
|
sample 7:
|
||||||
|
time = 597333
|
||||||
|
flags = 1
|
||||||
|
data = length 5143, hash 6C34F0CE
|
||||||
|
sample 8:
|
||||||
|
time = 682666
|
||||||
|
flags = 1
|
||||||
|
data = length 5109, hash E3B7BEFB
|
||||||
|
sample 9:
|
||||||
|
time = 768000
|
||||||
|
flags = 1
|
||||||
|
data = length 5129, hash 44111D9B
|
||||||
|
sample 10:
|
||||||
|
time = 853333
|
||||||
|
flags = 1
|
||||||
|
data = length 5031, hash 9D55EA53
|
||||||
|
sample 11:
|
||||||
|
time = 938666
|
||||||
|
flags = 1
|
||||||
|
data = length 5119, hash E1CB9BA6
|
||||||
|
sample 12:
|
||||||
|
time = 1024000
|
||||||
|
flags = 1
|
||||||
|
data = length 5360, hash 17265C5D
|
||||||
|
sample 13:
|
||||||
|
time = 1109333
|
||||||
|
flags = 1
|
||||||
|
data = length 5340, hash A90FDDF1
|
||||||
|
sample 14:
|
||||||
|
time = 1194666
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 31F65AD5
|
||||||
|
sample 15:
|
||||||
|
time = 1280000
|
||||||
|
flags = 1
|
||||||
|
data = length 5168, hash F2394F2D
|
||||||
|
sample 16:
|
||||||
|
time = 1365333
|
||||||
|
flags = 1
|
||||||
|
data = length 5776, hash 58437AB3
|
||||||
|
sample 17:
|
||||||
|
time = 1450666
|
||||||
|
flags = 1
|
||||||
|
data = length 5394, hash EBAB20A8
|
||||||
|
sample 18:
|
||||||
|
time = 1536000
|
||||||
|
flags = 1
|
||||||
|
data = length 5168, hash BF37C7A5
|
||||||
|
sample 19:
|
||||||
|
time = 1621333
|
||||||
|
flags = 1
|
||||||
|
data = length 5324, hash 59546B7B
|
||||||
|
sample 20:
|
||||||
|
time = 1706666
|
||||||
|
flags = 1
|
||||||
|
data = length 5172, hash 6036EF0B
|
||||||
|
sample 21:
|
||||||
|
time = 1792000
|
||||||
|
flags = 1
|
||||||
|
data = length 5102, hash 5A131071
|
||||||
|
sample 22:
|
||||||
|
time = 1877333
|
||||||
|
flags = 1
|
||||||
|
data = length 5111, hash 3D9EBB3B
|
||||||
|
sample 23:
|
||||||
|
time = 1962666
|
||||||
|
flags = 1
|
||||||
|
data = length 5113, hash 61101D4F
|
||||||
|
sample 24:
|
||||||
|
time = 2048000
|
||||||
|
flags = 1
|
||||||
|
data = length 5229, hash D2E55742
|
||||||
|
sample 25:
|
||||||
|
time = 2133333
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 7F2E97FA
|
||||||
|
sample 26:
|
||||||
|
time = 2218666
|
||||||
|
flags = 1
|
||||||
|
data = length 5255, hash D92A782
|
||||||
|
sample 27:
|
||||||
|
time = 2304000
|
||||||
|
flags = 1
|
||||||
|
data = length 5196, hash 98FE5138
|
||||||
|
sample 28:
|
||||||
|
time = 2389333
|
||||||
|
flags = 1
|
||||||
|
data = length 5214, hash 3D35C38C
|
||||||
|
sample 29:
|
||||||
|
time = 2474666
|
||||||
|
flags = 1
|
||||||
|
data = length 5211, hash 7E25420F
|
||||||
|
sample 30:
|
||||||
|
time = 2560000
|
||||||
|
flags = 1
|
||||||
|
data = length 5230, hash 2AD96FBC
|
||||||
|
sample 31:
|
||||||
|
time = 2645333
|
||||||
|
flags = 1
|
||||||
|
data = length 3384, hash 938BCDD9
|
||||||
|
sample 32:
|
||||||
|
time = 2730666
|
||||||
|
flags = 1
|
||||||
|
data = length 445, hash A388E3D6
|
||||||
|
tracksEnded = true
|
@ -1,7 +1,7 @@
|
|||||||
seekMap:
|
seekMap:
|
||||||
isSeekable = false
|
isSeekable = true
|
||||||
duration = 2741000
|
duration = 2741000
|
||||||
getPosition(0) = [[timeUs=0, position=0]]
|
getPosition(0) = [[timeUs=0, position=42]]
|
||||||
numberOfTracks = 1
|
numberOfTracks = 1
|
||||||
track 0:
|
track 0:
|
||||||
format:
|
format:
|
||||||
|
@ -0,0 +1,124 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = true
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=42]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1536000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = 5776
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
metadata = null
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 83F6895
|
||||||
|
total output bytes = 113666
|
||||||
|
sample count = 23
|
||||||
|
sample 0:
|
||||||
|
time = 853333
|
||||||
|
flags = 1
|
||||||
|
data = length 5031, hash 9D55EA53
|
||||||
|
sample 1:
|
||||||
|
time = 938666
|
||||||
|
flags = 1
|
||||||
|
data = length 5119, hash E1CB9BA6
|
||||||
|
sample 2:
|
||||||
|
time = 1024000
|
||||||
|
flags = 1
|
||||||
|
data = length 5360, hash 17265C5D
|
||||||
|
sample 3:
|
||||||
|
time = 1109333
|
||||||
|
flags = 1
|
||||||
|
data = length 5340, hash A90FDDF1
|
||||||
|
sample 4:
|
||||||
|
time = 1194666
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 31F65AD5
|
||||||
|
sample 5:
|
||||||
|
time = 1280000
|
||||||
|
flags = 1
|
||||||
|
data = length 5168, hash F2394F2D
|
||||||
|
sample 6:
|
||||||
|
time = 1365333
|
||||||
|
flags = 1
|
||||||
|
data = length 5776, hash 58437AB3
|
||||||
|
sample 7:
|
||||||
|
time = 1450666
|
||||||
|
flags = 1
|
||||||
|
data = length 5394, hash EBAB20A8
|
||||||
|
sample 8:
|
||||||
|
time = 1536000
|
||||||
|
flags = 1
|
||||||
|
data = length 5168, hash BF37C7A5
|
||||||
|
sample 9:
|
||||||
|
time = 1621333
|
||||||
|
flags = 1
|
||||||
|
data = length 5324, hash 59546B7B
|
||||||
|
sample 10:
|
||||||
|
time = 1706666
|
||||||
|
flags = 1
|
||||||
|
data = length 5172, hash 6036EF0B
|
||||||
|
sample 11:
|
||||||
|
time = 1792000
|
||||||
|
flags = 1
|
||||||
|
data = length 5102, hash 5A131071
|
||||||
|
sample 12:
|
||||||
|
time = 1877333
|
||||||
|
flags = 1
|
||||||
|
data = length 5111, hash 3D9EBB3B
|
||||||
|
sample 13:
|
||||||
|
time = 1962666
|
||||||
|
flags = 1
|
||||||
|
data = length 5113, hash 61101D4F
|
||||||
|
sample 14:
|
||||||
|
time = 2048000
|
||||||
|
flags = 1
|
||||||
|
data = length 5229, hash D2E55742
|
||||||
|
sample 15:
|
||||||
|
time = 2133333
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 7F2E97FA
|
||||||
|
sample 16:
|
||||||
|
time = 2218666
|
||||||
|
flags = 1
|
||||||
|
data = length 5255, hash D92A782
|
||||||
|
sample 17:
|
||||||
|
time = 2304000
|
||||||
|
flags = 1
|
||||||
|
data = length 5196, hash 98FE5138
|
||||||
|
sample 18:
|
||||||
|
time = 2389333
|
||||||
|
flags = 1
|
||||||
|
data = length 5214, hash 3D35C38C
|
||||||
|
sample 19:
|
||||||
|
time = 2474666
|
||||||
|
flags = 1
|
||||||
|
data = length 5211, hash 7E25420F
|
||||||
|
sample 20:
|
||||||
|
time = 2560000
|
||||||
|
flags = 1
|
||||||
|
data = length 5230, hash 2AD96FBC
|
||||||
|
sample 21:
|
||||||
|
time = 2645333
|
||||||
|
flags = 1
|
||||||
|
data = length 3384, hash 938BCDD9
|
||||||
|
sample 22:
|
||||||
|
time = 2730666
|
||||||
|
flags = 1
|
||||||
|
data = length 445, hash A388E3D6
|
||||||
|
tracksEnded = true
|
@ -0,0 +1,80 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = true
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=42]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1536000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = 5776
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
metadata = null
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 83F6895
|
||||||
|
total output bytes = 55652
|
||||||
|
sample count = 12
|
||||||
|
sample 0:
|
||||||
|
time = 1792000
|
||||||
|
flags = 1
|
||||||
|
data = length 5102, hash 5A131071
|
||||||
|
sample 1:
|
||||||
|
time = 1877333
|
||||||
|
flags = 1
|
||||||
|
data = length 5111, hash 3D9EBB3B
|
||||||
|
sample 2:
|
||||||
|
time = 1962666
|
||||||
|
flags = 1
|
||||||
|
data = length 5113, hash 61101D4F
|
||||||
|
sample 3:
|
||||||
|
time = 2048000
|
||||||
|
flags = 1
|
||||||
|
data = length 5229, hash D2E55742
|
||||||
|
sample 4:
|
||||||
|
time = 2133333
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 7F2E97FA
|
||||||
|
sample 5:
|
||||||
|
time = 2218666
|
||||||
|
flags = 1
|
||||||
|
data = length 5255, hash D92A782
|
||||||
|
sample 6:
|
||||||
|
time = 2304000
|
||||||
|
flags = 1
|
||||||
|
data = length 5196, hash 98FE5138
|
||||||
|
sample 7:
|
||||||
|
time = 2389333
|
||||||
|
flags = 1
|
||||||
|
data = length 5214, hash 3D35C38C
|
||||||
|
sample 8:
|
||||||
|
time = 2474666
|
||||||
|
flags = 1
|
||||||
|
data = length 5211, hash 7E25420F
|
||||||
|
sample 9:
|
||||||
|
time = 2560000
|
||||||
|
flags = 1
|
||||||
|
data = length 5230, hash 2AD96FBC
|
||||||
|
sample 10:
|
||||||
|
time = 2645333
|
||||||
|
flags = 1
|
||||||
|
data = length 3384, hash 938BCDD9
|
||||||
|
sample 11:
|
||||||
|
time = 2730666
|
||||||
|
flags = 1
|
||||||
|
data = length 445, hash A388E3D6
|
||||||
|
tracksEnded = true
|
@ -0,0 +1,36 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = true
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=42]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1536000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = 5776
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
metadata = null
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 83F6895
|
||||||
|
total output bytes = 445
|
||||||
|
sample count = 1
|
||||||
|
sample 0:
|
||||||
|
time = 2730666
|
||||||
|
flags = 1
|
||||||
|
data = length 445, hash A388E3D6
|
||||||
|
tracksEnded = true
|
@ -0,0 +1,164 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = false
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=0]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1536000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = 5776
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
metadata = null
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 83F6895
|
||||||
|
total output bytes = 164431
|
||||||
|
sample count = 33
|
||||||
|
sample 0:
|
||||||
|
time = 0
|
||||||
|
flags = 1
|
||||||
|
data = length 5030, hash D2B60530
|
||||||
|
sample 1:
|
||||||
|
time = 85333
|
||||||
|
flags = 1
|
||||||
|
data = length 5066, hash 4C932A54
|
||||||
|
sample 2:
|
||||||
|
time = 170666
|
||||||
|
flags = 1
|
||||||
|
data = length 5112, hash 7E5A7B61
|
||||||
|
sample 3:
|
||||||
|
time = 256000
|
||||||
|
flags = 1
|
||||||
|
data = length 5044, hash 7EF93F13
|
||||||
|
sample 4:
|
||||||
|
time = 341333
|
||||||
|
flags = 1
|
||||||
|
data = length 4943, hash DE7E27F8
|
||||||
|
sample 5:
|
||||||
|
time = 426666
|
||||||
|
flags = 1
|
||||||
|
data = length 5121, hash 6D0D0B40
|
||||||
|
sample 6:
|
||||||
|
time = 512000
|
||||||
|
flags = 1
|
||||||
|
data = length 5068, hash 9924644F
|
||||||
|
sample 7:
|
||||||
|
time = 597333
|
||||||
|
flags = 1
|
||||||
|
data = length 5143, hash 6C34F0CE
|
||||||
|
sample 8:
|
||||||
|
time = 682666
|
||||||
|
flags = 1
|
||||||
|
data = length 5109, hash E3B7BEFB
|
||||||
|
sample 9:
|
||||||
|
time = 768000
|
||||||
|
flags = 1
|
||||||
|
data = length 5129, hash 44111D9B
|
||||||
|
sample 10:
|
||||||
|
time = 853333
|
||||||
|
flags = 1
|
||||||
|
data = length 5031, hash 9D55EA53
|
||||||
|
sample 11:
|
||||||
|
time = 938666
|
||||||
|
flags = 1
|
||||||
|
data = length 5119, hash E1CB9BA6
|
||||||
|
sample 12:
|
||||||
|
time = 1024000
|
||||||
|
flags = 1
|
||||||
|
data = length 5360, hash 17265C5D
|
||||||
|
sample 13:
|
||||||
|
time = 1109333
|
||||||
|
flags = 1
|
||||||
|
data = length 5340, hash A90FDDF1
|
||||||
|
sample 14:
|
||||||
|
time = 1194666
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 31F65AD5
|
||||||
|
sample 15:
|
||||||
|
time = 1280000
|
||||||
|
flags = 1
|
||||||
|
data = length 5168, hash F2394F2D
|
||||||
|
sample 16:
|
||||||
|
time = 1365333
|
||||||
|
flags = 1
|
||||||
|
data = length 5776, hash 58437AB3
|
||||||
|
sample 17:
|
||||||
|
time = 1450666
|
||||||
|
flags = 1
|
||||||
|
data = length 5394, hash EBAB20A8
|
||||||
|
sample 18:
|
||||||
|
time = 1536000
|
||||||
|
flags = 1
|
||||||
|
data = length 5168, hash BF37C7A5
|
||||||
|
sample 19:
|
||||||
|
time = 1621333
|
||||||
|
flags = 1
|
||||||
|
data = length 5324, hash 59546B7B
|
||||||
|
sample 20:
|
||||||
|
time = 1706666
|
||||||
|
flags = 1
|
||||||
|
data = length 5172, hash 6036EF0B
|
||||||
|
sample 21:
|
||||||
|
time = 1792000
|
||||||
|
flags = 1
|
||||||
|
data = length 5102, hash 5A131071
|
||||||
|
sample 22:
|
||||||
|
time = 1877333
|
||||||
|
flags = 1
|
||||||
|
data = length 5111, hash 3D9EBB3B
|
||||||
|
sample 23:
|
||||||
|
time = 1962666
|
||||||
|
flags = 1
|
||||||
|
data = length 5113, hash 61101D4F
|
||||||
|
sample 24:
|
||||||
|
time = 2048000
|
||||||
|
flags = 1
|
||||||
|
data = length 5229, hash D2E55742
|
||||||
|
sample 25:
|
||||||
|
time = 2133333
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 7F2E97FA
|
||||||
|
sample 26:
|
||||||
|
time = 2218666
|
||||||
|
flags = 1
|
||||||
|
data = length 5255, hash D92A782
|
||||||
|
sample 27:
|
||||||
|
time = 2304000
|
||||||
|
flags = 1
|
||||||
|
data = length 5196, hash 98FE5138
|
||||||
|
sample 28:
|
||||||
|
time = 2389333
|
||||||
|
flags = 1
|
||||||
|
data = length 5214, hash 3D35C38C
|
||||||
|
sample 29:
|
||||||
|
time = 2474666
|
||||||
|
flags = 1
|
||||||
|
data = length 5211, hash 7E25420F
|
||||||
|
sample 30:
|
||||||
|
time = 2560000
|
||||||
|
flags = 1
|
||||||
|
data = length 5230, hash 2AD96FBC
|
||||||
|
sample 31:
|
||||||
|
time = 2645333
|
||||||
|
flags = 1
|
||||||
|
data = length 3384, hash 938BCDD9
|
||||||
|
sample 32:
|
||||||
|
time = 2730666
|
||||||
|
flags = 1
|
||||||
|
data = length 445, hash A388E3D6
|
||||||
|
tracksEnded = true
|
@ -1,7 +1,7 @@
|
|||||||
seekMap:
|
seekMap:
|
||||||
isSeekable = false
|
isSeekable = true
|
||||||
duration = 2741000
|
duration = 2741000
|
||||||
getPosition(0) = [[timeUs=0, position=0]]
|
getPosition(0) = [[timeUs=0, position=8288]]
|
||||||
numberOfTracks = 1
|
numberOfTracks = 1
|
||||||
track 0:
|
track 0:
|
||||||
format:
|
format:
|
||||||
|
@ -0,0 +1,108 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = true
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=8288]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1408000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = 6456
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 44000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
metadata = null
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 7249A1B8
|
||||||
|
total output bytes = 100240
|
||||||
|
sample count = 19
|
||||||
|
sample 0:
|
||||||
|
time = 837818
|
||||||
|
flags = 1
|
||||||
|
data = length 5414, hash 90768345
|
||||||
|
sample 1:
|
||||||
|
time = 942545
|
||||||
|
flags = 1
|
||||||
|
data = length 5531, hash 1CD2FF67
|
||||||
|
sample 2:
|
||||||
|
time = 1047272
|
||||||
|
flags = 1
|
||||||
|
data = length 5870, hash A9A5CAEE
|
||||||
|
sample 3:
|
||||||
|
time = 1152000
|
||||||
|
flags = 1
|
||||||
|
data = length 5667, hash 875566A1
|
||||||
|
sample 4:
|
||||||
|
time = 1256727
|
||||||
|
flags = 1
|
||||||
|
data = length 5614, hash 5573694C
|
||||||
|
sample 5:
|
||||||
|
time = 1361454
|
||||||
|
flags = 1
|
||||||
|
data = length 6456, hash 921F3DE7
|
||||||
|
sample 6:
|
||||||
|
time = 1466181
|
||||||
|
flags = 1
|
||||||
|
data = length 5817, hash EBECBD16
|
||||||
|
sample 7:
|
||||||
|
time = 1570909
|
||||||
|
flags = 1
|
||||||
|
data = length 5751, hash 4A7D4C6B
|
||||||
|
sample 8:
|
||||||
|
time = 1675636
|
||||||
|
flags = 1
|
||||||
|
data = length 5620, hash B78F8E8D
|
||||||
|
sample 9:
|
||||||
|
time = 1780363
|
||||||
|
flags = 1
|
||||||
|
data = length 5535, hash 8187C107
|
||||||
|
sample 10:
|
||||||
|
time = 1885090
|
||||||
|
flags = 1
|
||||||
|
data = length 5517, hash 79FF36CB
|
||||||
|
sample 11:
|
||||||
|
time = 1989818
|
||||||
|
flags = 1
|
||||||
|
data = length 5716, hash 349FC281
|
||||||
|
sample 12:
|
||||||
|
time = 2094545
|
||||||
|
flags = 1
|
||||||
|
data = length 5556, hash BE97B2CA
|
||||||
|
sample 13:
|
||||||
|
time = 2199272
|
||||||
|
flags = 1
|
||||||
|
data = length 5703, hash 531F9FE3
|
||||||
|
sample 14:
|
||||||
|
time = 2304000
|
||||||
|
flags = 1
|
||||||
|
data = length 5652, hash 1277485D
|
||||||
|
sample 15:
|
||||||
|
time = 2408727
|
||||||
|
flags = 1
|
||||||
|
data = length 5607, hash 14862CB6
|
||||||
|
sample 16:
|
||||||
|
time = 2513454
|
||||||
|
flags = 1
|
||||||
|
data = length 5829, hash FCAF2F1C
|
||||||
|
sample 17:
|
||||||
|
time = 2618181
|
||||||
|
flags = 1
|
||||||
|
data = length 2837, hash 10F1716E
|
||||||
|
sample 18:
|
||||||
|
time = 2722909
|
||||||
|
flags = 1
|
||||||
|
data = length 548, hash B46F603C
|
||||||
|
tracksEnded = true
|
@ -0,0 +1,72 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = true
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=8288]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1408000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = 6456
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 44000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
metadata = null
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 7249A1B8
|
||||||
|
total output bytes = 48500
|
||||||
|
sample count = 10
|
||||||
|
sample 0:
|
||||||
|
time = 1780363
|
||||||
|
flags = 1
|
||||||
|
data = length 5535, hash 8187C107
|
||||||
|
sample 1:
|
||||||
|
time = 1885090
|
||||||
|
flags = 1
|
||||||
|
data = length 5517, hash 79FF36CB
|
||||||
|
sample 2:
|
||||||
|
time = 1989818
|
||||||
|
flags = 1
|
||||||
|
data = length 5716, hash 349FC281
|
||||||
|
sample 3:
|
||||||
|
time = 2094545
|
||||||
|
flags = 1
|
||||||
|
data = length 5556, hash BE97B2CA
|
||||||
|
sample 4:
|
||||||
|
time = 2199272
|
||||||
|
flags = 1
|
||||||
|
data = length 5703, hash 531F9FE3
|
||||||
|
sample 5:
|
||||||
|
time = 2304000
|
||||||
|
flags = 1
|
||||||
|
data = length 5652, hash 1277485D
|
||||||
|
sample 6:
|
||||||
|
time = 2408727
|
||||||
|
flags = 1
|
||||||
|
data = length 5607, hash 14862CB6
|
||||||
|
sample 7:
|
||||||
|
time = 2513454
|
||||||
|
flags = 1
|
||||||
|
data = length 5829, hash FCAF2F1C
|
||||||
|
sample 8:
|
||||||
|
time = 2618181
|
||||||
|
flags = 1
|
||||||
|
data = length 2837, hash 10F1716E
|
||||||
|
sample 9:
|
||||||
|
time = 2722909
|
||||||
|
flags = 1
|
||||||
|
data = length 548, hash B46F603C
|
||||||
|
tracksEnded = true
|
@ -0,0 +1,36 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = true
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=8288]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1408000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = 6456
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 44000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
metadata = null
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 7249A1B8
|
||||||
|
total output bytes = 548
|
||||||
|
sample count = 1
|
||||||
|
sample 0:
|
||||||
|
time = 2722909
|
||||||
|
flags = 1
|
||||||
|
data = length 548, hash B46F603C
|
||||||
|
tracksEnded = true
|
@ -0,0 +1,140 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = false
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=0]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1408000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = 6456
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 44000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
metadata = null
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 7249A1B8
|
||||||
|
total output bytes = 144086
|
||||||
|
sample count = 27
|
||||||
|
sample 0:
|
||||||
|
time = 0
|
||||||
|
flags = 1
|
||||||
|
data = length 5415, hash 915DBC66
|
||||||
|
sample 1:
|
||||||
|
time = 104727
|
||||||
|
flags = 1
|
||||||
|
data = length 5529, hash EFD564F7
|
||||||
|
sample 2:
|
||||||
|
time = 209454
|
||||||
|
flags = 1
|
||||||
|
data = length 5480, hash ADA922FB
|
||||||
|
sample 3:
|
||||||
|
time = 314181
|
||||||
|
flags = 1
|
||||||
|
data = length 5290, hash 7BCEA5FC
|
||||||
|
sample 4:
|
||||||
|
time = 418909
|
||||||
|
flags = 1
|
||||||
|
data = length 5579, hash DBB36F37
|
||||||
|
sample 5:
|
||||||
|
time = 523636
|
||||||
|
flags = 1
|
||||||
|
data = length 5423, hash AB53F799
|
||||||
|
sample 6:
|
||||||
|
time = 628363
|
||||||
|
flags = 1
|
||||||
|
data = length 5583, hash 7243C284
|
||||||
|
sample 7:
|
||||||
|
time = 733090
|
||||||
|
flags = 1
|
||||||
|
data = length 5547, hash 9DA9C99E
|
||||||
|
sample 8:
|
||||||
|
time = 837818
|
||||||
|
flags = 1
|
||||||
|
data = length 5414, hash 90768345
|
||||||
|
sample 9:
|
||||||
|
time = 942545
|
||||||
|
flags = 1
|
||||||
|
data = length 5531, hash 1CD2FF67
|
||||||
|
sample 10:
|
||||||
|
time = 1047272
|
||||||
|
flags = 1
|
||||||
|
data = length 5870, hash A9A5CAEE
|
||||||
|
sample 11:
|
||||||
|
time = 1152000
|
||||||
|
flags = 1
|
||||||
|
data = length 5667, hash 875566A1
|
||||||
|
sample 12:
|
||||||
|
time = 1256727
|
||||||
|
flags = 1
|
||||||
|
data = length 5614, hash 5573694C
|
||||||
|
sample 13:
|
||||||
|
time = 1361454
|
||||||
|
flags = 1
|
||||||
|
data = length 6456, hash 921F3DE7
|
||||||
|
sample 14:
|
||||||
|
time = 1466181
|
||||||
|
flags = 1
|
||||||
|
data = length 5817, hash EBECBD16
|
||||||
|
sample 15:
|
||||||
|
time = 1570909
|
||||||
|
flags = 1
|
||||||
|
data = length 5751, hash 4A7D4C6B
|
||||||
|
sample 16:
|
||||||
|
time = 1675636
|
||||||
|
flags = 1
|
||||||
|
data = length 5620, hash B78F8E8D
|
||||||
|
sample 17:
|
||||||
|
time = 1780363
|
||||||
|
flags = 1
|
||||||
|
data = length 5535, hash 8187C107
|
||||||
|
sample 18:
|
||||||
|
time = 1885090
|
||||||
|
flags = 1
|
||||||
|
data = length 5517, hash 79FF36CB
|
||||||
|
sample 19:
|
||||||
|
time = 1989818
|
||||||
|
flags = 1
|
||||||
|
data = length 5716, hash 349FC281
|
||||||
|
sample 20:
|
||||||
|
time = 2094545
|
||||||
|
flags = 1
|
||||||
|
data = length 5556, hash BE97B2CA
|
||||||
|
sample 21:
|
||||||
|
time = 2199272
|
||||||
|
flags = 1
|
||||||
|
data = length 5703, hash 531F9FE3
|
||||||
|
sample 22:
|
||||||
|
time = 2304000
|
||||||
|
flags = 1
|
||||||
|
data = length 5652, hash 1277485D
|
||||||
|
sample 23:
|
||||||
|
time = 2408727
|
||||||
|
flags = 1
|
||||||
|
data = length 5607, hash 14862CB6
|
||||||
|
sample 24:
|
||||||
|
time = 2513454
|
||||||
|
flags = 1
|
||||||
|
data = length 5829, hash FCAF2F1C
|
||||||
|
sample 25:
|
||||||
|
time = 2618181
|
||||||
|
flags = 1
|
||||||
|
data = length 2837, hash 10F1716E
|
||||||
|
sample 26:
|
||||||
|
time = 2722909
|
||||||
|
flags = 1
|
||||||
|
data = length 548, hash B46F603C
|
||||||
|
tracksEnded = true
|
123
library/core/src/test/assets/flac/bear_with_id3.flac.1.dump
Normal file
123
library/core/src/test/assets/flac/bear_with_id3.flac.1.dump
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = true
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=55284]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1536000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = 5776
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 83F6895
|
||||||
|
total output bytes = 113666
|
||||||
|
sample count = 23
|
||||||
|
sample 0:
|
||||||
|
time = 853333
|
||||||
|
flags = 1
|
||||||
|
data = length 5031, hash 9D55EA53
|
||||||
|
sample 1:
|
||||||
|
time = 938666
|
||||||
|
flags = 1
|
||||||
|
data = length 5119, hash E1CB9BA6
|
||||||
|
sample 2:
|
||||||
|
time = 1024000
|
||||||
|
flags = 1
|
||||||
|
data = length 5360, hash 17265C5D
|
||||||
|
sample 3:
|
||||||
|
time = 1109333
|
||||||
|
flags = 1
|
||||||
|
data = length 5340, hash A90FDDF1
|
||||||
|
sample 4:
|
||||||
|
time = 1194666
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 31F65AD5
|
||||||
|
sample 5:
|
||||||
|
time = 1280000
|
||||||
|
flags = 1
|
||||||
|
data = length 5168, hash F2394F2D
|
||||||
|
sample 6:
|
||||||
|
time = 1365333
|
||||||
|
flags = 1
|
||||||
|
data = length 5776, hash 58437AB3
|
||||||
|
sample 7:
|
||||||
|
time = 1450666
|
||||||
|
flags = 1
|
||||||
|
data = length 5394, hash EBAB20A8
|
||||||
|
sample 8:
|
||||||
|
time = 1536000
|
||||||
|
flags = 1
|
||||||
|
data = length 5168, hash BF37C7A5
|
||||||
|
sample 9:
|
||||||
|
time = 1621333
|
||||||
|
flags = 1
|
||||||
|
data = length 5324, hash 59546B7B
|
||||||
|
sample 10:
|
||||||
|
time = 1706666
|
||||||
|
flags = 1
|
||||||
|
data = length 5172, hash 6036EF0B
|
||||||
|
sample 11:
|
||||||
|
time = 1792000
|
||||||
|
flags = 1
|
||||||
|
data = length 5102, hash 5A131071
|
||||||
|
sample 12:
|
||||||
|
time = 1877333
|
||||||
|
flags = 1
|
||||||
|
data = length 5111, hash 3D9EBB3B
|
||||||
|
sample 13:
|
||||||
|
time = 1962666
|
||||||
|
flags = 1
|
||||||
|
data = length 5113, hash 61101D4F
|
||||||
|
sample 14:
|
||||||
|
time = 2048000
|
||||||
|
flags = 1
|
||||||
|
data = length 5229, hash D2E55742
|
||||||
|
sample 15:
|
||||||
|
time = 2133333
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 7F2E97FA
|
||||||
|
sample 16:
|
||||||
|
time = 2218666
|
||||||
|
flags = 1
|
||||||
|
data = length 5255, hash D92A782
|
||||||
|
sample 17:
|
||||||
|
time = 2304000
|
||||||
|
flags = 1
|
||||||
|
data = length 5196, hash 98FE5138
|
||||||
|
sample 18:
|
||||||
|
time = 2389333
|
||||||
|
flags = 1
|
||||||
|
data = length 5214, hash 3D35C38C
|
||||||
|
sample 19:
|
||||||
|
time = 2474666
|
||||||
|
flags = 1
|
||||||
|
data = length 5211, hash 7E25420F
|
||||||
|
sample 20:
|
||||||
|
time = 2560000
|
||||||
|
flags = 1
|
||||||
|
data = length 5230, hash 2AD96FBC
|
||||||
|
sample 21:
|
||||||
|
time = 2645333
|
||||||
|
flags = 1
|
||||||
|
data = length 3384, hash 938BCDD9
|
||||||
|
sample 22:
|
||||||
|
time = 2730666
|
||||||
|
flags = 1
|
||||||
|
data = length 445, hash A388E3D6
|
||||||
|
tracksEnded = true
|
79
library/core/src/test/assets/flac/bear_with_id3.flac.2.dump
Normal file
79
library/core/src/test/assets/flac/bear_with_id3.flac.2.dump
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = true
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=55284]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1536000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = 5776
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 83F6895
|
||||||
|
total output bytes = 55652
|
||||||
|
sample count = 12
|
||||||
|
sample 0:
|
||||||
|
time = 1792000
|
||||||
|
flags = 1
|
||||||
|
data = length 5102, hash 5A131071
|
||||||
|
sample 1:
|
||||||
|
time = 1877333
|
||||||
|
flags = 1
|
||||||
|
data = length 5111, hash 3D9EBB3B
|
||||||
|
sample 2:
|
||||||
|
time = 1962666
|
||||||
|
flags = 1
|
||||||
|
data = length 5113, hash 61101D4F
|
||||||
|
sample 3:
|
||||||
|
time = 2048000
|
||||||
|
flags = 1
|
||||||
|
data = length 5229, hash D2E55742
|
||||||
|
sample 4:
|
||||||
|
time = 2133333
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 7F2E97FA
|
||||||
|
sample 5:
|
||||||
|
time = 2218666
|
||||||
|
flags = 1
|
||||||
|
data = length 5255, hash D92A782
|
||||||
|
sample 6:
|
||||||
|
time = 2304000
|
||||||
|
flags = 1
|
||||||
|
data = length 5196, hash 98FE5138
|
||||||
|
sample 7:
|
||||||
|
time = 2389333
|
||||||
|
flags = 1
|
||||||
|
data = length 5214, hash 3D35C38C
|
||||||
|
sample 8:
|
||||||
|
time = 2474666
|
||||||
|
flags = 1
|
||||||
|
data = length 5211, hash 7E25420F
|
||||||
|
sample 9:
|
||||||
|
time = 2560000
|
||||||
|
flags = 1
|
||||||
|
data = length 5230, hash 2AD96FBC
|
||||||
|
sample 10:
|
||||||
|
time = 2645333
|
||||||
|
flags = 1
|
||||||
|
data = length 3384, hash 938BCDD9
|
||||||
|
sample 11:
|
||||||
|
time = 2730666
|
||||||
|
flags = 1
|
||||||
|
data = length 445, hash A388E3D6
|
||||||
|
tracksEnded = true
|
35
library/core/src/test/assets/flac/bear_with_id3.flac.3.dump
Normal file
35
library/core/src/test/assets/flac/bear_with_id3.flac.3.dump
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = true
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=55284]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1536000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = 5776
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 83F6895
|
||||||
|
total output bytes = 445
|
||||||
|
sample count = 1
|
||||||
|
sample 0:
|
||||||
|
time = 2730666
|
||||||
|
flags = 1
|
||||||
|
data = length 445, hash A388E3D6
|
||||||
|
tracksEnded = true
|
163
library/core/src/test/assets/flac/bear_with_id3.flac.unklen.dump
Normal file
163
library/core/src/test/assets/flac/bear_with_id3.flac.unklen.dump
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = false
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=0]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1536000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = 5776
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 83F6895
|
||||||
|
total output bytes = 164431
|
||||||
|
sample count = 33
|
||||||
|
sample 0:
|
||||||
|
time = 0
|
||||||
|
flags = 1
|
||||||
|
data = length 5030, hash D2B60530
|
||||||
|
sample 1:
|
||||||
|
time = 85333
|
||||||
|
flags = 1
|
||||||
|
data = length 5066, hash 4C932A54
|
||||||
|
sample 2:
|
||||||
|
time = 170666
|
||||||
|
flags = 1
|
||||||
|
data = length 5112, hash 7E5A7B61
|
||||||
|
sample 3:
|
||||||
|
time = 256000
|
||||||
|
flags = 1
|
||||||
|
data = length 5044, hash 7EF93F13
|
||||||
|
sample 4:
|
||||||
|
time = 341333
|
||||||
|
flags = 1
|
||||||
|
data = length 4943, hash DE7E27F8
|
||||||
|
sample 5:
|
||||||
|
time = 426666
|
||||||
|
flags = 1
|
||||||
|
data = length 5121, hash 6D0D0B40
|
||||||
|
sample 6:
|
||||||
|
time = 512000
|
||||||
|
flags = 1
|
||||||
|
data = length 5068, hash 9924644F
|
||||||
|
sample 7:
|
||||||
|
time = 597333
|
||||||
|
flags = 1
|
||||||
|
data = length 5143, hash 6C34F0CE
|
||||||
|
sample 8:
|
||||||
|
time = 682666
|
||||||
|
flags = 1
|
||||||
|
data = length 5109, hash E3B7BEFB
|
||||||
|
sample 9:
|
||||||
|
time = 768000
|
||||||
|
flags = 1
|
||||||
|
data = length 5129, hash 44111D9B
|
||||||
|
sample 10:
|
||||||
|
time = 853333
|
||||||
|
flags = 1
|
||||||
|
data = length 5031, hash 9D55EA53
|
||||||
|
sample 11:
|
||||||
|
time = 938666
|
||||||
|
flags = 1
|
||||||
|
data = length 5119, hash E1CB9BA6
|
||||||
|
sample 12:
|
||||||
|
time = 1024000
|
||||||
|
flags = 1
|
||||||
|
data = length 5360, hash 17265C5D
|
||||||
|
sample 13:
|
||||||
|
time = 1109333
|
||||||
|
flags = 1
|
||||||
|
data = length 5340, hash A90FDDF1
|
||||||
|
sample 14:
|
||||||
|
time = 1194666
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 31F65AD5
|
||||||
|
sample 15:
|
||||||
|
time = 1280000
|
||||||
|
flags = 1
|
||||||
|
data = length 5168, hash F2394F2D
|
||||||
|
sample 16:
|
||||||
|
time = 1365333
|
||||||
|
flags = 1
|
||||||
|
data = length 5776, hash 58437AB3
|
||||||
|
sample 17:
|
||||||
|
time = 1450666
|
||||||
|
flags = 1
|
||||||
|
data = length 5394, hash EBAB20A8
|
||||||
|
sample 18:
|
||||||
|
time = 1536000
|
||||||
|
flags = 1
|
||||||
|
data = length 5168, hash BF37C7A5
|
||||||
|
sample 19:
|
||||||
|
time = 1621333
|
||||||
|
flags = 1
|
||||||
|
data = length 5324, hash 59546B7B
|
||||||
|
sample 20:
|
||||||
|
time = 1706666
|
||||||
|
flags = 1
|
||||||
|
data = length 5172, hash 6036EF0B
|
||||||
|
sample 21:
|
||||||
|
time = 1792000
|
||||||
|
flags = 1
|
||||||
|
data = length 5102, hash 5A131071
|
||||||
|
sample 22:
|
||||||
|
time = 1877333
|
||||||
|
flags = 1
|
||||||
|
data = length 5111, hash 3D9EBB3B
|
||||||
|
sample 23:
|
||||||
|
time = 1962666
|
||||||
|
flags = 1
|
||||||
|
data = length 5113, hash 61101D4F
|
||||||
|
sample 24:
|
||||||
|
time = 2048000
|
||||||
|
flags = 1
|
||||||
|
data = length 5229, hash D2E55742
|
||||||
|
sample 25:
|
||||||
|
time = 2133333
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 7F2E97FA
|
||||||
|
sample 26:
|
||||||
|
time = 2218666
|
||||||
|
flags = 1
|
||||||
|
data = length 5255, hash D92A782
|
||||||
|
sample 27:
|
||||||
|
time = 2304000
|
||||||
|
flags = 1
|
||||||
|
data = length 5196, hash 98FE5138
|
||||||
|
sample 28:
|
||||||
|
time = 2389333
|
||||||
|
flags = 1
|
||||||
|
data = length 5214, hash 3D35C38C
|
||||||
|
sample 29:
|
||||||
|
time = 2474666
|
||||||
|
flags = 1
|
||||||
|
data = length 5211, hash 7E25420F
|
||||||
|
sample 30:
|
||||||
|
time = 2560000
|
||||||
|
flags = 1
|
||||||
|
data = length 5230, hash 2AD96FBC
|
||||||
|
sample 31:
|
||||||
|
time = 2645333
|
||||||
|
flags = 1
|
||||||
|
data = length 3384, hash 938BCDD9
|
||||||
|
sample 32:
|
||||||
|
time = 2730666
|
||||||
|
flags = 1
|
||||||
|
data = length 445, hash A388E3D6
|
||||||
|
tracksEnded = true
|
@ -1,7 +1,7 @@
|
|||||||
seekMap:
|
seekMap:
|
||||||
isSeekable = false
|
isSeekable = true
|
||||||
duration = 2741000
|
duration = 2741000
|
||||||
getPosition(0) = [[timeUs=0, position=0]]
|
getPosition(0) = [[timeUs=0, position=55284]]
|
||||||
numberOfTracks = 1
|
numberOfTracks = 1
|
||||||
track 0:
|
track 0:
|
||||||
format:
|
format:
|
||||||
|
@ -0,0 +1,124 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = true
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=55284]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1536000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = 5776
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
metadata = null
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 83F6895
|
||||||
|
total output bytes = 113666
|
||||||
|
sample count = 23
|
||||||
|
sample 0:
|
||||||
|
time = 853333
|
||||||
|
flags = 1
|
||||||
|
data = length 5031, hash 9D55EA53
|
||||||
|
sample 1:
|
||||||
|
time = 938666
|
||||||
|
flags = 1
|
||||||
|
data = length 5119, hash E1CB9BA6
|
||||||
|
sample 2:
|
||||||
|
time = 1024000
|
||||||
|
flags = 1
|
||||||
|
data = length 5360, hash 17265C5D
|
||||||
|
sample 3:
|
||||||
|
time = 1109333
|
||||||
|
flags = 1
|
||||||
|
data = length 5340, hash A90FDDF1
|
||||||
|
sample 4:
|
||||||
|
time = 1194666
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 31F65AD5
|
||||||
|
sample 5:
|
||||||
|
time = 1280000
|
||||||
|
flags = 1
|
||||||
|
data = length 5168, hash F2394F2D
|
||||||
|
sample 6:
|
||||||
|
time = 1365333
|
||||||
|
flags = 1
|
||||||
|
data = length 5776, hash 58437AB3
|
||||||
|
sample 7:
|
||||||
|
time = 1450666
|
||||||
|
flags = 1
|
||||||
|
data = length 5394, hash EBAB20A8
|
||||||
|
sample 8:
|
||||||
|
time = 1536000
|
||||||
|
flags = 1
|
||||||
|
data = length 5168, hash BF37C7A5
|
||||||
|
sample 9:
|
||||||
|
time = 1621333
|
||||||
|
flags = 1
|
||||||
|
data = length 5324, hash 59546B7B
|
||||||
|
sample 10:
|
||||||
|
time = 1706666
|
||||||
|
flags = 1
|
||||||
|
data = length 5172, hash 6036EF0B
|
||||||
|
sample 11:
|
||||||
|
time = 1792000
|
||||||
|
flags = 1
|
||||||
|
data = length 5102, hash 5A131071
|
||||||
|
sample 12:
|
||||||
|
time = 1877333
|
||||||
|
flags = 1
|
||||||
|
data = length 5111, hash 3D9EBB3B
|
||||||
|
sample 13:
|
||||||
|
time = 1962666
|
||||||
|
flags = 1
|
||||||
|
data = length 5113, hash 61101D4F
|
||||||
|
sample 14:
|
||||||
|
time = 2048000
|
||||||
|
flags = 1
|
||||||
|
data = length 5229, hash D2E55742
|
||||||
|
sample 15:
|
||||||
|
time = 2133333
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 7F2E97FA
|
||||||
|
sample 16:
|
||||||
|
time = 2218666
|
||||||
|
flags = 1
|
||||||
|
data = length 5255, hash D92A782
|
||||||
|
sample 17:
|
||||||
|
time = 2304000
|
||||||
|
flags = 1
|
||||||
|
data = length 5196, hash 98FE5138
|
||||||
|
sample 18:
|
||||||
|
time = 2389333
|
||||||
|
flags = 1
|
||||||
|
data = length 5214, hash 3D35C38C
|
||||||
|
sample 19:
|
||||||
|
time = 2474666
|
||||||
|
flags = 1
|
||||||
|
data = length 5211, hash 7E25420F
|
||||||
|
sample 20:
|
||||||
|
time = 2560000
|
||||||
|
flags = 1
|
||||||
|
data = length 5230, hash 2AD96FBC
|
||||||
|
sample 21:
|
||||||
|
time = 2645333
|
||||||
|
flags = 1
|
||||||
|
data = length 3384, hash 938BCDD9
|
||||||
|
sample 22:
|
||||||
|
time = 2730666
|
||||||
|
flags = 1
|
||||||
|
data = length 445, hash A388E3D6
|
||||||
|
tracksEnded = true
|
@ -0,0 +1,80 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = true
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=55284]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1536000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = 5776
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
metadata = null
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 83F6895
|
||||||
|
total output bytes = 55652
|
||||||
|
sample count = 12
|
||||||
|
sample 0:
|
||||||
|
time = 1792000
|
||||||
|
flags = 1
|
||||||
|
data = length 5102, hash 5A131071
|
||||||
|
sample 1:
|
||||||
|
time = 1877333
|
||||||
|
flags = 1
|
||||||
|
data = length 5111, hash 3D9EBB3B
|
||||||
|
sample 2:
|
||||||
|
time = 1962666
|
||||||
|
flags = 1
|
||||||
|
data = length 5113, hash 61101D4F
|
||||||
|
sample 3:
|
||||||
|
time = 2048000
|
||||||
|
flags = 1
|
||||||
|
data = length 5229, hash D2E55742
|
||||||
|
sample 4:
|
||||||
|
time = 2133333
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 7F2E97FA
|
||||||
|
sample 5:
|
||||||
|
time = 2218666
|
||||||
|
flags = 1
|
||||||
|
data = length 5255, hash D92A782
|
||||||
|
sample 6:
|
||||||
|
time = 2304000
|
||||||
|
flags = 1
|
||||||
|
data = length 5196, hash 98FE5138
|
||||||
|
sample 7:
|
||||||
|
time = 2389333
|
||||||
|
flags = 1
|
||||||
|
data = length 5214, hash 3D35C38C
|
||||||
|
sample 8:
|
||||||
|
time = 2474666
|
||||||
|
flags = 1
|
||||||
|
data = length 5211, hash 7E25420F
|
||||||
|
sample 9:
|
||||||
|
time = 2560000
|
||||||
|
flags = 1
|
||||||
|
data = length 5230, hash 2AD96FBC
|
||||||
|
sample 10:
|
||||||
|
time = 2645333
|
||||||
|
flags = 1
|
||||||
|
data = length 3384, hash 938BCDD9
|
||||||
|
sample 11:
|
||||||
|
time = 2730666
|
||||||
|
flags = 1
|
||||||
|
data = length 445, hash A388E3D6
|
||||||
|
tracksEnded = true
|
@ -0,0 +1,36 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = true
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=55284]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1536000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = 5776
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
metadata = null
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 83F6895
|
||||||
|
total output bytes = 445
|
||||||
|
sample count = 1
|
||||||
|
sample 0:
|
||||||
|
time = 2730666
|
||||||
|
flags = 1
|
||||||
|
data = length 445, hash A388E3D6
|
||||||
|
tracksEnded = true
|
@ -0,0 +1,164 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = false
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=0]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1536000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = 5776
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
metadata = null
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 83F6895
|
||||||
|
total output bytes = 164431
|
||||||
|
sample count = 33
|
||||||
|
sample 0:
|
||||||
|
time = 0
|
||||||
|
flags = 1
|
||||||
|
data = length 5030, hash D2B60530
|
||||||
|
sample 1:
|
||||||
|
time = 85333
|
||||||
|
flags = 1
|
||||||
|
data = length 5066, hash 4C932A54
|
||||||
|
sample 2:
|
||||||
|
time = 170666
|
||||||
|
flags = 1
|
||||||
|
data = length 5112, hash 7E5A7B61
|
||||||
|
sample 3:
|
||||||
|
time = 256000
|
||||||
|
flags = 1
|
||||||
|
data = length 5044, hash 7EF93F13
|
||||||
|
sample 4:
|
||||||
|
time = 341333
|
||||||
|
flags = 1
|
||||||
|
data = length 4943, hash DE7E27F8
|
||||||
|
sample 5:
|
||||||
|
time = 426666
|
||||||
|
flags = 1
|
||||||
|
data = length 5121, hash 6D0D0B40
|
||||||
|
sample 6:
|
||||||
|
time = 512000
|
||||||
|
flags = 1
|
||||||
|
data = length 5068, hash 9924644F
|
||||||
|
sample 7:
|
||||||
|
time = 597333
|
||||||
|
flags = 1
|
||||||
|
data = length 5143, hash 6C34F0CE
|
||||||
|
sample 8:
|
||||||
|
time = 682666
|
||||||
|
flags = 1
|
||||||
|
data = length 5109, hash E3B7BEFB
|
||||||
|
sample 9:
|
||||||
|
time = 768000
|
||||||
|
flags = 1
|
||||||
|
data = length 5129, hash 44111D9B
|
||||||
|
sample 10:
|
||||||
|
time = 853333
|
||||||
|
flags = 1
|
||||||
|
data = length 5031, hash 9D55EA53
|
||||||
|
sample 11:
|
||||||
|
time = 938666
|
||||||
|
flags = 1
|
||||||
|
data = length 5119, hash E1CB9BA6
|
||||||
|
sample 12:
|
||||||
|
time = 1024000
|
||||||
|
flags = 1
|
||||||
|
data = length 5360, hash 17265C5D
|
||||||
|
sample 13:
|
||||||
|
time = 1109333
|
||||||
|
flags = 1
|
||||||
|
data = length 5340, hash A90FDDF1
|
||||||
|
sample 14:
|
||||||
|
time = 1194666
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 31F65AD5
|
||||||
|
sample 15:
|
||||||
|
time = 1280000
|
||||||
|
flags = 1
|
||||||
|
data = length 5168, hash F2394F2D
|
||||||
|
sample 16:
|
||||||
|
time = 1365333
|
||||||
|
flags = 1
|
||||||
|
data = length 5776, hash 58437AB3
|
||||||
|
sample 17:
|
||||||
|
time = 1450666
|
||||||
|
flags = 1
|
||||||
|
data = length 5394, hash EBAB20A8
|
||||||
|
sample 18:
|
||||||
|
time = 1536000
|
||||||
|
flags = 1
|
||||||
|
data = length 5168, hash BF37C7A5
|
||||||
|
sample 19:
|
||||||
|
time = 1621333
|
||||||
|
flags = 1
|
||||||
|
data = length 5324, hash 59546B7B
|
||||||
|
sample 20:
|
||||||
|
time = 1706666
|
||||||
|
flags = 1
|
||||||
|
data = length 5172, hash 6036EF0B
|
||||||
|
sample 21:
|
||||||
|
time = 1792000
|
||||||
|
flags = 1
|
||||||
|
data = length 5102, hash 5A131071
|
||||||
|
sample 22:
|
||||||
|
time = 1877333
|
||||||
|
flags = 1
|
||||||
|
data = length 5111, hash 3D9EBB3B
|
||||||
|
sample 23:
|
||||||
|
time = 1962666
|
||||||
|
flags = 1
|
||||||
|
data = length 5113, hash 61101D4F
|
||||||
|
sample 24:
|
||||||
|
time = 2048000
|
||||||
|
flags = 1
|
||||||
|
data = length 5229, hash D2E55742
|
||||||
|
sample 25:
|
||||||
|
time = 2133333
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 7F2E97FA
|
||||||
|
sample 26:
|
||||||
|
time = 2218666
|
||||||
|
flags = 1
|
||||||
|
data = length 5255, hash D92A782
|
||||||
|
sample 27:
|
||||||
|
time = 2304000
|
||||||
|
flags = 1
|
||||||
|
data = length 5196, hash 98FE5138
|
||||||
|
sample 28:
|
||||||
|
time = 2389333
|
||||||
|
flags = 1
|
||||||
|
data = length 5214, hash 3D35C38C
|
||||||
|
sample 29:
|
||||||
|
time = 2474666
|
||||||
|
flags = 1
|
||||||
|
data = length 5211, hash 7E25420F
|
||||||
|
sample 30:
|
||||||
|
time = 2560000
|
||||||
|
flags = 1
|
||||||
|
data = length 5230, hash 2AD96FBC
|
||||||
|
sample 31:
|
||||||
|
time = 2645333
|
||||||
|
flags = 1
|
||||||
|
data = length 3384, hash 938BCDD9
|
||||||
|
sample 32:
|
||||||
|
time = 2730666
|
||||||
|
flags = 1
|
||||||
|
data = length 445, hash A388E3D6
|
||||||
|
tracksEnded = true
|
@ -1,7 +1,7 @@
|
|||||||
seekMap:
|
seekMap:
|
||||||
isSeekable = false
|
isSeekable = true
|
||||||
duration = 2741000
|
duration = 2741000
|
||||||
getPosition(0) = [[timeUs=0, position=0]]
|
getPosition(0) = [[timeUs=0, position=55284]]
|
||||||
numberOfTracks = 1
|
numberOfTracks = 1
|
||||||
track 0:
|
track 0:
|
||||||
format:
|
format:
|
||||||
|
@ -0,0 +1,124 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = true
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=55284]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1536000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = 5776
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
metadata = entries=[TXXX: description=ID: value=105519843, TIT2: description=null: value=那么爱你为什么, TPE1: description=null: value=阿强, TALB: description=null: value=华丽的外衣, TXXX: description=ID: value=105519843, APIC: mimeType=image/jpeg, description=]
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 83F6895
|
||||||
|
total output bytes = 113666
|
||||||
|
sample count = 23
|
||||||
|
sample 0:
|
||||||
|
time = 853333
|
||||||
|
flags = 1
|
||||||
|
data = length 5031, hash 9D55EA53
|
||||||
|
sample 1:
|
||||||
|
time = 938666
|
||||||
|
flags = 1
|
||||||
|
data = length 5119, hash E1CB9BA6
|
||||||
|
sample 2:
|
||||||
|
time = 1024000
|
||||||
|
flags = 1
|
||||||
|
data = length 5360, hash 17265C5D
|
||||||
|
sample 3:
|
||||||
|
time = 1109333
|
||||||
|
flags = 1
|
||||||
|
data = length 5340, hash A90FDDF1
|
||||||
|
sample 4:
|
||||||
|
time = 1194666
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 31F65AD5
|
||||||
|
sample 5:
|
||||||
|
time = 1280000
|
||||||
|
flags = 1
|
||||||
|
data = length 5168, hash F2394F2D
|
||||||
|
sample 6:
|
||||||
|
time = 1365333
|
||||||
|
flags = 1
|
||||||
|
data = length 5776, hash 58437AB3
|
||||||
|
sample 7:
|
||||||
|
time = 1450666
|
||||||
|
flags = 1
|
||||||
|
data = length 5394, hash EBAB20A8
|
||||||
|
sample 8:
|
||||||
|
time = 1536000
|
||||||
|
flags = 1
|
||||||
|
data = length 5168, hash BF37C7A5
|
||||||
|
sample 9:
|
||||||
|
time = 1621333
|
||||||
|
flags = 1
|
||||||
|
data = length 5324, hash 59546B7B
|
||||||
|
sample 10:
|
||||||
|
time = 1706666
|
||||||
|
flags = 1
|
||||||
|
data = length 5172, hash 6036EF0B
|
||||||
|
sample 11:
|
||||||
|
time = 1792000
|
||||||
|
flags = 1
|
||||||
|
data = length 5102, hash 5A131071
|
||||||
|
sample 12:
|
||||||
|
time = 1877333
|
||||||
|
flags = 1
|
||||||
|
data = length 5111, hash 3D9EBB3B
|
||||||
|
sample 13:
|
||||||
|
time = 1962666
|
||||||
|
flags = 1
|
||||||
|
data = length 5113, hash 61101D4F
|
||||||
|
sample 14:
|
||||||
|
time = 2048000
|
||||||
|
flags = 1
|
||||||
|
data = length 5229, hash D2E55742
|
||||||
|
sample 15:
|
||||||
|
time = 2133333
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 7F2E97FA
|
||||||
|
sample 16:
|
||||||
|
time = 2218666
|
||||||
|
flags = 1
|
||||||
|
data = length 5255, hash D92A782
|
||||||
|
sample 17:
|
||||||
|
time = 2304000
|
||||||
|
flags = 1
|
||||||
|
data = length 5196, hash 98FE5138
|
||||||
|
sample 18:
|
||||||
|
time = 2389333
|
||||||
|
flags = 1
|
||||||
|
data = length 5214, hash 3D35C38C
|
||||||
|
sample 19:
|
||||||
|
time = 2474666
|
||||||
|
flags = 1
|
||||||
|
data = length 5211, hash 7E25420F
|
||||||
|
sample 20:
|
||||||
|
time = 2560000
|
||||||
|
flags = 1
|
||||||
|
data = length 5230, hash 2AD96FBC
|
||||||
|
sample 21:
|
||||||
|
time = 2645333
|
||||||
|
flags = 1
|
||||||
|
data = length 3384, hash 938BCDD9
|
||||||
|
sample 22:
|
||||||
|
time = 2730666
|
||||||
|
flags = 1
|
||||||
|
data = length 445, hash A388E3D6
|
||||||
|
tracksEnded = true
|
@ -0,0 +1,80 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = true
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=55284]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1536000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = 5776
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
metadata = entries=[TXXX: description=ID: value=105519843, TIT2: description=null: value=那么爱你为什么, TPE1: description=null: value=阿强, TALB: description=null: value=华丽的外衣, TXXX: description=ID: value=105519843, APIC: mimeType=image/jpeg, description=]
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 83F6895
|
||||||
|
total output bytes = 55652
|
||||||
|
sample count = 12
|
||||||
|
sample 0:
|
||||||
|
time = 1792000
|
||||||
|
flags = 1
|
||||||
|
data = length 5102, hash 5A131071
|
||||||
|
sample 1:
|
||||||
|
time = 1877333
|
||||||
|
flags = 1
|
||||||
|
data = length 5111, hash 3D9EBB3B
|
||||||
|
sample 2:
|
||||||
|
time = 1962666
|
||||||
|
flags = 1
|
||||||
|
data = length 5113, hash 61101D4F
|
||||||
|
sample 3:
|
||||||
|
time = 2048000
|
||||||
|
flags = 1
|
||||||
|
data = length 5229, hash D2E55742
|
||||||
|
sample 4:
|
||||||
|
time = 2133333
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 7F2E97FA
|
||||||
|
sample 5:
|
||||||
|
time = 2218666
|
||||||
|
flags = 1
|
||||||
|
data = length 5255, hash D92A782
|
||||||
|
sample 6:
|
||||||
|
time = 2304000
|
||||||
|
flags = 1
|
||||||
|
data = length 5196, hash 98FE5138
|
||||||
|
sample 7:
|
||||||
|
time = 2389333
|
||||||
|
flags = 1
|
||||||
|
data = length 5214, hash 3D35C38C
|
||||||
|
sample 8:
|
||||||
|
time = 2474666
|
||||||
|
flags = 1
|
||||||
|
data = length 5211, hash 7E25420F
|
||||||
|
sample 9:
|
||||||
|
time = 2560000
|
||||||
|
flags = 1
|
||||||
|
data = length 5230, hash 2AD96FBC
|
||||||
|
sample 10:
|
||||||
|
time = 2645333
|
||||||
|
flags = 1
|
||||||
|
data = length 3384, hash 938BCDD9
|
||||||
|
sample 11:
|
||||||
|
time = 2730666
|
||||||
|
flags = 1
|
||||||
|
data = length 445, hash A388E3D6
|
||||||
|
tracksEnded = true
|
@ -0,0 +1,36 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = true
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=55284]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1536000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = 5776
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
metadata = entries=[TXXX: description=ID: value=105519843, TIT2: description=null: value=那么爱你为什么, TPE1: description=null: value=阿强, TALB: description=null: value=华丽的外衣, TXXX: description=ID: value=105519843, APIC: mimeType=image/jpeg, description=]
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 83F6895
|
||||||
|
total output bytes = 445
|
||||||
|
sample count = 1
|
||||||
|
sample 0:
|
||||||
|
time = 2730666
|
||||||
|
flags = 1
|
||||||
|
data = length 445, hash A388E3D6
|
||||||
|
tracksEnded = true
|
@ -0,0 +1,164 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = false
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=0]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1536000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = 5776
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
metadata = entries=[TXXX: description=ID: value=105519843, TIT2: description=null: value=那么爱你为什么, TPE1: description=null: value=阿强, TALB: description=null: value=华丽的外衣, TXXX: description=ID: value=105519843, APIC: mimeType=image/jpeg, description=]
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 83F6895
|
||||||
|
total output bytes = 164431
|
||||||
|
sample count = 33
|
||||||
|
sample 0:
|
||||||
|
time = 0
|
||||||
|
flags = 1
|
||||||
|
data = length 5030, hash D2B60530
|
||||||
|
sample 1:
|
||||||
|
time = 85333
|
||||||
|
flags = 1
|
||||||
|
data = length 5066, hash 4C932A54
|
||||||
|
sample 2:
|
||||||
|
time = 170666
|
||||||
|
flags = 1
|
||||||
|
data = length 5112, hash 7E5A7B61
|
||||||
|
sample 3:
|
||||||
|
time = 256000
|
||||||
|
flags = 1
|
||||||
|
data = length 5044, hash 7EF93F13
|
||||||
|
sample 4:
|
||||||
|
time = 341333
|
||||||
|
flags = 1
|
||||||
|
data = length 4943, hash DE7E27F8
|
||||||
|
sample 5:
|
||||||
|
time = 426666
|
||||||
|
flags = 1
|
||||||
|
data = length 5121, hash 6D0D0B40
|
||||||
|
sample 6:
|
||||||
|
time = 512000
|
||||||
|
flags = 1
|
||||||
|
data = length 5068, hash 9924644F
|
||||||
|
sample 7:
|
||||||
|
time = 597333
|
||||||
|
flags = 1
|
||||||
|
data = length 5143, hash 6C34F0CE
|
||||||
|
sample 8:
|
||||||
|
time = 682666
|
||||||
|
flags = 1
|
||||||
|
data = length 5109, hash E3B7BEFB
|
||||||
|
sample 9:
|
||||||
|
time = 768000
|
||||||
|
flags = 1
|
||||||
|
data = length 5129, hash 44111D9B
|
||||||
|
sample 10:
|
||||||
|
time = 853333
|
||||||
|
flags = 1
|
||||||
|
data = length 5031, hash 9D55EA53
|
||||||
|
sample 11:
|
||||||
|
time = 938666
|
||||||
|
flags = 1
|
||||||
|
data = length 5119, hash E1CB9BA6
|
||||||
|
sample 12:
|
||||||
|
time = 1024000
|
||||||
|
flags = 1
|
||||||
|
data = length 5360, hash 17265C5D
|
||||||
|
sample 13:
|
||||||
|
time = 1109333
|
||||||
|
flags = 1
|
||||||
|
data = length 5340, hash A90FDDF1
|
||||||
|
sample 14:
|
||||||
|
time = 1194666
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 31F65AD5
|
||||||
|
sample 15:
|
||||||
|
time = 1280000
|
||||||
|
flags = 1
|
||||||
|
data = length 5168, hash F2394F2D
|
||||||
|
sample 16:
|
||||||
|
time = 1365333
|
||||||
|
flags = 1
|
||||||
|
data = length 5776, hash 58437AB3
|
||||||
|
sample 17:
|
||||||
|
time = 1450666
|
||||||
|
flags = 1
|
||||||
|
data = length 5394, hash EBAB20A8
|
||||||
|
sample 18:
|
||||||
|
time = 1536000
|
||||||
|
flags = 1
|
||||||
|
data = length 5168, hash BF37C7A5
|
||||||
|
sample 19:
|
||||||
|
time = 1621333
|
||||||
|
flags = 1
|
||||||
|
data = length 5324, hash 59546B7B
|
||||||
|
sample 20:
|
||||||
|
time = 1706666
|
||||||
|
flags = 1
|
||||||
|
data = length 5172, hash 6036EF0B
|
||||||
|
sample 21:
|
||||||
|
time = 1792000
|
||||||
|
flags = 1
|
||||||
|
data = length 5102, hash 5A131071
|
||||||
|
sample 22:
|
||||||
|
time = 1877333
|
||||||
|
flags = 1
|
||||||
|
data = length 5111, hash 3D9EBB3B
|
||||||
|
sample 23:
|
||||||
|
time = 1962666
|
||||||
|
flags = 1
|
||||||
|
data = length 5113, hash 61101D4F
|
||||||
|
sample 24:
|
||||||
|
time = 2048000
|
||||||
|
flags = 1
|
||||||
|
data = length 5229, hash D2E55742
|
||||||
|
sample 25:
|
||||||
|
time = 2133333
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 7F2E97FA
|
||||||
|
sample 26:
|
||||||
|
time = 2218666
|
||||||
|
flags = 1
|
||||||
|
data = length 5255, hash D92A782
|
||||||
|
sample 27:
|
||||||
|
time = 2304000
|
||||||
|
flags = 1
|
||||||
|
data = length 5196, hash 98FE5138
|
||||||
|
sample 28:
|
||||||
|
time = 2389333
|
||||||
|
flags = 1
|
||||||
|
data = length 5214, hash 3D35C38C
|
||||||
|
sample 29:
|
||||||
|
time = 2474666
|
||||||
|
flags = 1
|
||||||
|
data = length 5211, hash 7E25420F
|
||||||
|
sample 30:
|
||||||
|
time = 2560000
|
||||||
|
flags = 1
|
||||||
|
data = length 5230, hash 2AD96FBC
|
||||||
|
sample 31:
|
||||||
|
time = 2645333
|
||||||
|
flags = 1
|
||||||
|
data = length 3384, hash 938BCDD9
|
||||||
|
sample 32:
|
||||||
|
time = 2730666
|
||||||
|
flags = 1
|
||||||
|
data = length 445, hash A388E3D6
|
||||||
|
tracksEnded = true
|
@ -1,7 +1,7 @@
|
|||||||
seekMap:
|
seekMap:
|
||||||
isSeekable = false
|
isSeekable = true
|
||||||
duration = 2741000
|
duration = 2741000
|
||||||
getPosition(0) = [[timeUs=0, position=0]]
|
getPosition(0) = [[timeUs=0, position=39868]]
|
||||||
numberOfTracks = 1
|
numberOfTracks = 1
|
||||||
track 0:
|
track 0:
|
||||||
format:
|
format:
|
||||||
|
124
library/core/src/test/assets/flac/bear_with_picture.flac.1.dump
Normal file
124
library/core/src/test/assets/flac/bear_with_picture.flac.1.dump
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = true
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=39868]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1536000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = 5776
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
metadata = entries=[Picture: mimeType=image/png, description=]
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 83F6895
|
||||||
|
total output bytes = 113666
|
||||||
|
sample count = 23
|
||||||
|
sample 0:
|
||||||
|
time = 853333
|
||||||
|
flags = 1
|
||||||
|
data = length 5031, hash 9D55EA53
|
||||||
|
sample 1:
|
||||||
|
time = 938666
|
||||||
|
flags = 1
|
||||||
|
data = length 5119, hash E1CB9BA6
|
||||||
|
sample 2:
|
||||||
|
time = 1024000
|
||||||
|
flags = 1
|
||||||
|
data = length 5360, hash 17265C5D
|
||||||
|
sample 3:
|
||||||
|
time = 1109333
|
||||||
|
flags = 1
|
||||||
|
data = length 5340, hash A90FDDF1
|
||||||
|
sample 4:
|
||||||
|
time = 1194666
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 31F65AD5
|
||||||
|
sample 5:
|
||||||
|
time = 1280000
|
||||||
|
flags = 1
|
||||||
|
data = length 5168, hash F2394F2D
|
||||||
|
sample 6:
|
||||||
|
time = 1365333
|
||||||
|
flags = 1
|
||||||
|
data = length 5776, hash 58437AB3
|
||||||
|
sample 7:
|
||||||
|
time = 1450666
|
||||||
|
flags = 1
|
||||||
|
data = length 5394, hash EBAB20A8
|
||||||
|
sample 8:
|
||||||
|
time = 1536000
|
||||||
|
flags = 1
|
||||||
|
data = length 5168, hash BF37C7A5
|
||||||
|
sample 9:
|
||||||
|
time = 1621333
|
||||||
|
flags = 1
|
||||||
|
data = length 5324, hash 59546B7B
|
||||||
|
sample 10:
|
||||||
|
time = 1706666
|
||||||
|
flags = 1
|
||||||
|
data = length 5172, hash 6036EF0B
|
||||||
|
sample 11:
|
||||||
|
time = 1792000
|
||||||
|
flags = 1
|
||||||
|
data = length 5102, hash 5A131071
|
||||||
|
sample 12:
|
||||||
|
time = 1877333
|
||||||
|
flags = 1
|
||||||
|
data = length 5111, hash 3D9EBB3B
|
||||||
|
sample 13:
|
||||||
|
time = 1962666
|
||||||
|
flags = 1
|
||||||
|
data = length 5113, hash 61101D4F
|
||||||
|
sample 14:
|
||||||
|
time = 2048000
|
||||||
|
flags = 1
|
||||||
|
data = length 5229, hash D2E55742
|
||||||
|
sample 15:
|
||||||
|
time = 2133333
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 7F2E97FA
|
||||||
|
sample 16:
|
||||||
|
time = 2218666
|
||||||
|
flags = 1
|
||||||
|
data = length 5255, hash D92A782
|
||||||
|
sample 17:
|
||||||
|
time = 2304000
|
||||||
|
flags = 1
|
||||||
|
data = length 5196, hash 98FE5138
|
||||||
|
sample 18:
|
||||||
|
time = 2389333
|
||||||
|
flags = 1
|
||||||
|
data = length 5214, hash 3D35C38C
|
||||||
|
sample 19:
|
||||||
|
time = 2474666
|
||||||
|
flags = 1
|
||||||
|
data = length 5211, hash 7E25420F
|
||||||
|
sample 20:
|
||||||
|
time = 2560000
|
||||||
|
flags = 1
|
||||||
|
data = length 5230, hash 2AD96FBC
|
||||||
|
sample 21:
|
||||||
|
time = 2645333
|
||||||
|
flags = 1
|
||||||
|
data = length 3384, hash 938BCDD9
|
||||||
|
sample 22:
|
||||||
|
time = 2730666
|
||||||
|
flags = 1
|
||||||
|
data = length 445, hash A388E3D6
|
||||||
|
tracksEnded = true
|
@ -0,0 +1,80 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = true
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=39868]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1536000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = 5776
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
metadata = entries=[Picture: mimeType=image/png, description=]
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 83F6895
|
||||||
|
total output bytes = 55652
|
||||||
|
sample count = 12
|
||||||
|
sample 0:
|
||||||
|
time = 1792000
|
||||||
|
flags = 1
|
||||||
|
data = length 5102, hash 5A131071
|
||||||
|
sample 1:
|
||||||
|
time = 1877333
|
||||||
|
flags = 1
|
||||||
|
data = length 5111, hash 3D9EBB3B
|
||||||
|
sample 2:
|
||||||
|
time = 1962666
|
||||||
|
flags = 1
|
||||||
|
data = length 5113, hash 61101D4F
|
||||||
|
sample 3:
|
||||||
|
time = 2048000
|
||||||
|
flags = 1
|
||||||
|
data = length 5229, hash D2E55742
|
||||||
|
sample 4:
|
||||||
|
time = 2133333
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 7F2E97FA
|
||||||
|
sample 5:
|
||||||
|
time = 2218666
|
||||||
|
flags = 1
|
||||||
|
data = length 5255, hash D92A782
|
||||||
|
sample 6:
|
||||||
|
time = 2304000
|
||||||
|
flags = 1
|
||||||
|
data = length 5196, hash 98FE5138
|
||||||
|
sample 7:
|
||||||
|
time = 2389333
|
||||||
|
flags = 1
|
||||||
|
data = length 5214, hash 3D35C38C
|
||||||
|
sample 8:
|
||||||
|
time = 2474666
|
||||||
|
flags = 1
|
||||||
|
data = length 5211, hash 7E25420F
|
||||||
|
sample 9:
|
||||||
|
time = 2560000
|
||||||
|
flags = 1
|
||||||
|
data = length 5230, hash 2AD96FBC
|
||||||
|
sample 10:
|
||||||
|
time = 2645333
|
||||||
|
flags = 1
|
||||||
|
data = length 3384, hash 938BCDD9
|
||||||
|
sample 11:
|
||||||
|
time = 2730666
|
||||||
|
flags = 1
|
||||||
|
data = length 445, hash A388E3D6
|
||||||
|
tracksEnded = true
|
@ -0,0 +1,36 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = true
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=39868]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1536000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = 5776
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
metadata = entries=[Picture: mimeType=image/png, description=]
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 83F6895
|
||||||
|
total output bytes = 445
|
||||||
|
sample count = 1
|
||||||
|
sample 0:
|
||||||
|
time = 2730666
|
||||||
|
flags = 1
|
||||||
|
data = length 445, hash A388E3D6
|
||||||
|
tracksEnded = true
|
@ -0,0 +1,164 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = false
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=0]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1536000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = 5776
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
metadata = entries=[Picture: mimeType=image/png, description=]
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 83F6895
|
||||||
|
total output bytes = 164431
|
||||||
|
sample count = 33
|
||||||
|
sample 0:
|
||||||
|
time = 0
|
||||||
|
flags = 1
|
||||||
|
data = length 5030, hash D2B60530
|
||||||
|
sample 1:
|
||||||
|
time = 85333
|
||||||
|
flags = 1
|
||||||
|
data = length 5066, hash 4C932A54
|
||||||
|
sample 2:
|
||||||
|
time = 170666
|
||||||
|
flags = 1
|
||||||
|
data = length 5112, hash 7E5A7B61
|
||||||
|
sample 3:
|
||||||
|
time = 256000
|
||||||
|
flags = 1
|
||||||
|
data = length 5044, hash 7EF93F13
|
||||||
|
sample 4:
|
||||||
|
time = 341333
|
||||||
|
flags = 1
|
||||||
|
data = length 4943, hash DE7E27F8
|
||||||
|
sample 5:
|
||||||
|
time = 426666
|
||||||
|
flags = 1
|
||||||
|
data = length 5121, hash 6D0D0B40
|
||||||
|
sample 6:
|
||||||
|
time = 512000
|
||||||
|
flags = 1
|
||||||
|
data = length 5068, hash 9924644F
|
||||||
|
sample 7:
|
||||||
|
time = 597333
|
||||||
|
flags = 1
|
||||||
|
data = length 5143, hash 6C34F0CE
|
||||||
|
sample 8:
|
||||||
|
time = 682666
|
||||||
|
flags = 1
|
||||||
|
data = length 5109, hash E3B7BEFB
|
||||||
|
sample 9:
|
||||||
|
time = 768000
|
||||||
|
flags = 1
|
||||||
|
data = length 5129, hash 44111D9B
|
||||||
|
sample 10:
|
||||||
|
time = 853333
|
||||||
|
flags = 1
|
||||||
|
data = length 5031, hash 9D55EA53
|
||||||
|
sample 11:
|
||||||
|
time = 938666
|
||||||
|
flags = 1
|
||||||
|
data = length 5119, hash E1CB9BA6
|
||||||
|
sample 12:
|
||||||
|
time = 1024000
|
||||||
|
flags = 1
|
||||||
|
data = length 5360, hash 17265C5D
|
||||||
|
sample 13:
|
||||||
|
time = 1109333
|
||||||
|
flags = 1
|
||||||
|
data = length 5340, hash A90FDDF1
|
||||||
|
sample 14:
|
||||||
|
time = 1194666
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 31F65AD5
|
||||||
|
sample 15:
|
||||||
|
time = 1280000
|
||||||
|
flags = 1
|
||||||
|
data = length 5168, hash F2394F2D
|
||||||
|
sample 16:
|
||||||
|
time = 1365333
|
||||||
|
flags = 1
|
||||||
|
data = length 5776, hash 58437AB3
|
||||||
|
sample 17:
|
||||||
|
time = 1450666
|
||||||
|
flags = 1
|
||||||
|
data = length 5394, hash EBAB20A8
|
||||||
|
sample 18:
|
||||||
|
time = 1536000
|
||||||
|
flags = 1
|
||||||
|
data = length 5168, hash BF37C7A5
|
||||||
|
sample 19:
|
||||||
|
time = 1621333
|
||||||
|
flags = 1
|
||||||
|
data = length 5324, hash 59546B7B
|
||||||
|
sample 20:
|
||||||
|
time = 1706666
|
||||||
|
flags = 1
|
||||||
|
data = length 5172, hash 6036EF0B
|
||||||
|
sample 21:
|
||||||
|
time = 1792000
|
||||||
|
flags = 1
|
||||||
|
data = length 5102, hash 5A131071
|
||||||
|
sample 22:
|
||||||
|
time = 1877333
|
||||||
|
flags = 1
|
||||||
|
data = length 5111, hash 3D9EBB3B
|
||||||
|
sample 23:
|
||||||
|
time = 1962666
|
||||||
|
flags = 1
|
||||||
|
data = length 5113, hash 61101D4F
|
||||||
|
sample 24:
|
||||||
|
time = 2048000
|
||||||
|
flags = 1
|
||||||
|
data = length 5229, hash D2E55742
|
||||||
|
sample 25:
|
||||||
|
time = 2133333
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 7F2E97FA
|
||||||
|
sample 26:
|
||||||
|
time = 2218666
|
||||||
|
flags = 1
|
||||||
|
data = length 5255, hash D92A782
|
||||||
|
sample 27:
|
||||||
|
time = 2304000
|
||||||
|
flags = 1
|
||||||
|
data = length 5196, hash 98FE5138
|
||||||
|
sample 28:
|
||||||
|
time = 2389333
|
||||||
|
flags = 1
|
||||||
|
data = length 5214, hash 3D35C38C
|
||||||
|
sample 29:
|
||||||
|
time = 2474666
|
||||||
|
flags = 1
|
||||||
|
data = length 5211, hash 7E25420F
|
||||||
|
sample 30:
|
||||||
|
time = 2560000
|
||||||
|
flags = 1
|
||||||
|
data = length 5230, hash 2AD96FBC
|
||||||
|
sample 31:
|
||||||
|
time = 2645333
|
||||||
|
flags = 1
|
||||||
|
data = length 3384, hash 938BCDD9
|
||||||
|
sample 32:
|
||||||
|
time = 2730666
|
||||||
|
flags = 1
|
||||||
|
data = length 445, hash A388E3D6
|
||||||
|
tracksEnded = true
|
@ -1,7 +1,7 @@
|
|||||||
seekMap:
|
seekMap:
|
||||||
isSeekable = false
|
isSeekable = true
|
||||||
duration = 2741000
|
duration = 2741000
|
||||||
getPosition(0) = [[timeUs=0, position=0]]
|
getPosition(0) = [[timeUs=0, position=8880]]
|
||||||
numberOfTracks = 1
|
numberOfTracks = 1
|
||||||
track 0:
|
track 0:
|
||||||
format:
|
format:
|
||||||
|
@ -0,0 +1,124 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = true
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=8880]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1536000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = 5776
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
metadata = entries=[VC: TITLE=test title, VC: ARTIST=test artist]
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 83F6895
|
||||||
|
total output bytes = 113666
|
||||||
|
sample count = 23
|
||||||
|
sample 0:
|
||||||
|
time = 853333
|
||||||
|
flags = 1
|
||||||
|
data = length 5031, hash 9D55EA53
|
||||||
|
sample 1:
|
||||||
|
time = 938666
|
||||||
|
flags = 1
|
||||||
|
data = length 5119, hash E1CB9BA6
|
||||||
|
sample 2:
|
||||||
|
time = 1024000
|
||||||
|
flags = 1
|
||||||
|
data = length 5360, hash 17265C5D
|
||||||
|
sample 3:
|
||||||
|
time = 1109333
|
||||||
|
flags = 1
|
||||||
|
data = length 5340, hash A90FDDF1
|
||||||
|
sample 4:
|
||||||
|
time = 1194666
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 31F65AD5
|
||||||
|
sample 5:
|
||||||
|
time = 1280000
|
||||||
|
flags = 1
|
||||||
|
data = length 5168, hash F2394F2D
|
||||||
|
sample 6:
|
||||||
|
time = 1365333
|
||||||
|
flags = 1
|
||||||
|
data = length 5776, hash 58437AB3
|
||||||
|
sample 7:
|
||||||
|
time = 1450666
|
||||||
|
flags = 1
|
||||||
|
data = length 5394, hash EBAB20A8
|
||||||
|
sample 8:
|
||||||
|
time = 1536000
|
||||||
|
flags = 1
|
||||||
|
data = length 5168, hash BF37C7A5
|
||||||
|
sample 9:
|
||||||
|
time = 1621333
|
||||||
|
flags = 1
|
||||||
|
data = length 5324, hash 59546B7B
|
||||||
|
sample 10:
|
||||||
|
time = 1706666
|
||||||
|
flags = 1
|
||||||
|
data = length 5172, hash 6036EF0B
|
||||||
|
sample 11:
|
||||||
|
time = 1792000
|
||||||
|
flags = 1
|
||||||
|
data = length 5102, hash 5A131071
|
||||||
|
sample 12:
|
||||||
|
time = 1877333
|
||||||
|
flags = 1
|
||||||
|
data = length 5111, hash 3D9EBB3B
|
||||||
|
sample 13:
|
||||||
|
time = 1962666
|
||||||
|
flags = 1
|
||||||
|
data = length 5113, hash 61101D4F
|
||||||
|
sample 14:
|
||||||
|
time = 2048000
|
||||||
|
flags = 1
|
||||||
|
data = length 5229, hash D2E55742
|
||||||
|
sample 15:
|
||||||
|
time = 2133333
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 7F2E97FA
|
||||||
|
sample 16:
|
||||||
|
time = 2218666
|
||||||
|
flags = 1
|
||||||
|
data = length 5255, hash D92A782
|
||||||
|
sample 17:
|
||||||
|
time = 2304000
|
||||||
|
flags = 1
|
||||||
|
data = length 5196, hash 98FE5138
|
||||||
|
sample 18:
|
||||||
|
time = 2389333
|
||||||
|
flags = 1
|
||||||
|
data = length 5214, hash 3D35C38C
|
||||||
|
sample 19:
|
||||||
|
time = 2474666
|
||||||
|
flags = 1
|
||||||
|
data = length 5211, hash 7E25420F
|
||||||
|
sample 20:
|
||||||
|
time = 2560000
|
||||||
|
flags = 1
|
||||||
|
data = length 5230, hash 2AD96FBC
|
||||||
|
sample 21:
|
||||||
|
time = 2645333
|
||||||
|
flags = 1
|
||||||
|
data = length 3384, hash 938BCDD9
|
||||||
|
sample 22:
|
||||||
|
time = 2730666
|
||||||
|
flags = 1
|
||||||
|
data = length 445, hash A388E3D6
|
||||||
|
tracksEnded = true
|
@ -0,0 +1,80 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = true
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=8880]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1536000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = 5776
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
metadata = entries=[VC: TITLE=test title, VC: ARTIST=test artist]
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 83F6895
|
||||||
|
total output bytes = 55652
|
||||||
|
sample count = 12
|
||||||
|
sample 0:
|
||||||
|
time = 1792000
|
||||||
|
flags = 1
|
||||||
|
data = length 5102, hash 5A131071
|
||||||
|
sample 1:
|
||||||
|
time = 1877333
|
||||||
|
flags = 1
|
||||||
|
data = length 5111, hash 3D9EBB3B
|
||||||
|
sample 2:
|
||||||
|
time = 1962666
|
||||||
|
flags = 1
|
||||||
|
data = length 5113, hash 61101D4F
|
||||||
|
sample 3:
|
||||||
|
time = 2048000
|
||||||
|
flags = 1
|
||||||
|
data = length 5229, hash D2E55742
|
||||||
|
sample 4:
|
||||||
|
time = 2133333
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 7F2E97FA
|
||||||
|
sample 5:
|
||||||
|
time = 2218666
|
||||||
|
flags = 1
|
||||||
|
data = length 5255, hash D92A782
|
||||||
|
sample 6:
|
||||||
|
time = 2304000
|
||||||
|
flags = 1
|
||||||
|
data = length 5196, hash 98FE5138
|
||||||
|
sample 7:
|
||||||
|
time = 2389333
|
||||||
|
flags = 1
|
||||||
|
data = length 5214, hash 3D35C38C
|
||||||
|
sample 8:
|
||||||
|
time = 2474666
|
||||||
|
flags = 1
|
||||||
|
data = length 5211, hash 7E25420F
|
||||||
|
sample 9:
|
||||||
|
time = 2560000
|
||||||
|
flags = 1
|
||||||
|
data = length 5230, hash 2AD96FBC
|
||||||
|
sample 10:
|
||||||
|
time = 2645333
|
||||||
|
flags = 1
|
||||||
|
data = length 3384, hash 938BCDD9
|
||||||
|
sample 11:
|
||||||
|
time = 2730666
|
||||||
|
flags = 1
|
||||||
|
data = length 445, hash A388E3D6
|
||||||
|
tracksEnded = true
|
@ -0,0 +1,36 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = true
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=8880]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1536000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = 5776
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
metadata = entries=[VC: TITLE=test title, VC: ARTIST=test artist]
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 83F6895
|
||||||
|
total output bytes = 445
|
||||||
|
sample count = 1
|
||||||
|
sample 0:
|
||||||
|
time = 2730666
|
||||||
|
flags = 1
|
||||||
|
data = length 445, hash A388E3D6
|
||||||
|
tracksEnded = true
|
@ -0,0 +1,164 @@
|
|||||||
|
seekMap:
|
||||||
|
isSeekable = false
|
||||||
|
duration = 2741000
|
||||||
|
getPosition(0) = [[timeUs=0, position=0]]
|
||||||
|
numberOfTracks = 1
|
||||||
|
track 0:
|
||||||
|
format:
|
||||||
|
bitrate = 1536000
|
||||||
|
id = null
|
||||||
|
containerMimeType = null
|
||||||
|
sampleMimeType = audio/flac
|
||||||
|
maxInputSize = 5776
|
||||||
|
width = -1
|
||||||
|
height = -1
|
||||||
|
frameRate = -1.0
|
||||||
|
rotationDegrees = 0
|
||||||
|
pixelWidthHeightRatio = 1.0
|
||||||
|
channelCount = 2
|
||||||
|
sampleRate = 48000
|
||||||
|
pcmEncoding = -1
|
||||||
|
encoderDelay = 0
|
||||||
|
encoderPadding = 0
|
||||||
|
subsampleOffsetUs = 9223372036854775807
|
||||||
|
selectionFlags = 0
|
||||||
|
language = null
|
||||||
|
drmInitData = -
|
||||||
|
metadata = entries=[VC: TITLE=test title, VC: ARTIST=test artist]
|
||||||
|
initializationData:
|
||||||
|
data = length 42, hash 83F6895
|
||||||
|
total output bytes = 164431
|
||||||
|
sample count = 33
|
||||||
|
sample 0:
|
||||||
|
time = 0
|
||||||
|
flags = 1
|
||||||
|
data = length 5030, hash D2B60530
|
||||||
|
sample 1:
|
||||||
|
time = 85333
|
||||||
|
flags = 1
|
||||||
|
data = length 5066, hash 4C932A54
|
||||||
|
sample 2:
|
||||||
|
time = 170666
|
||||||
|
flags = 1
|
||||||
|
data = length 5112, hash 7E5A7B61
|
||||||
|
sample 3:
|
||||||
|
time = 256000
|
||||||
|
flags = 1
|
||||||
|
data = length 5044, hash 7EF93F13
|
||||||
|
sample 4:
|
||||||
|
time = 341333
|
||||||
|
flags = 1
|
||||||
|
data = length 4943, hash DE7E27F8
|
||||||
|
sample 5:
|
||||||
|
time = 426666
|
||||||
|
flags = 1
|
||||||
|
data = length 5121, hash 6D0D0B40
|
||||||
|
sample 6:
|
||||||
|
time = 512000
|
||||||
|
flags = 1
|
||||||
|
data = length 5068, hash 9924644F
|
||||||
|
sample 7:
|
||||||
|
time = 597333
|
||||||
|
flags = 1
|
||||||
|
data = length 5143, hash 6C34F0CE
|
||||||
|
sample 8:
|
||||||
|
time = 682666
|
||||||
|
flags = 1
|
||||||
|
data = length 5109, hash E3B7BEFB
|
||||||
|
sample 9:
|
||||||
|
time = 768000
|
||||||
|
flags = 1
|
||||||
|
data = length 5129, hash 44111D9B
|
||||||
|
sample 10:
|
||||||
|
time = 853333
|
||||||
|
flags = 1
|
||||||
|
data = length 5031, hash 9D55EA53
|
||||||
|
sample 11:
|
||||||
|
time = 938666
|
||||||
|
flags = 1
|
||||||
|
data = length 5119, hash E1CB9BA6
|
||||||
|
sample 12:
|
||||||
|
time = 1024000
|
||||||
|
flags = 1
|
||||||
|
data = length 5360, hash 17265C5D
|
||||||
|
sample 13:
|
||||||
|
time = 1109333
|
||||||
|
flags = 1
|
||||||
|
data = length 5340, hash A90FDDF1
|
||||||
|
sample 14:
|
||||||
|
time = 1194666
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 31F65AD5
|
||||||
|
sample 15:
|
||||||
|
time = 1280000
|
||||||
|
flags = 1
|
||||||
|
data = length 5168, hash F2394F2D
|
||||||
|
sample 16:
|
||||||
|
time = 1365333
|
||||||
|
flags = 1
|
||||||
|
data = length 5776, hash 58437AB3
|
||||||
|
sample 17:
|
||||||
|
time = 1450666
|
||||||
|
flags = 1
|
||||||
|
data = length 5394, hash EBAB20A8
|
||||||
|
sample 18:
|
||||||
|
time = 1536000
|
||||||
|
flags = 1
|
||||||
|
data = length 5168, hash BF37C7A5
|
||||||
|
sample 19:
|
||||||
|
time = 1621333
|
||||||
|
flags = 1
|
||||||
|
data = length 5324, hash 59546B7B
|
||||||
|
sample 20:
|
||||||
|
time = 1706666
|
||||||
|
flags = 1
|
||||||
|
data = length 5172, hash 6036EF0B
|
||||||
|
sample 21:
|
||||||
|
time = 1792000
|
||||||
|
flags = 1
|
||||||
|
data = length 5102, hash 5A131071
|
||||||
|
sample 22:
|
||||||
|
time = 1877333
|
||||||
|
flags = 1
|
||||||
|
data = length 5111, hash 3D9EBB3B
|
||||||
|
sample 23:
|
||||||
|
time = 1962666
|
||||||
|
flags = 1
|
||||||
|
data = length 5113, hash 61101D4F
|
||||||
|
sample 24:
|
||||||
|
time = 2048000
|
||||||
|
flags = 1
|
||||||
|
data = length 5229, hash D2E55742
|
||||||
|
sample 25:
|
||||||
|
time = 2133333
|
||||||
|
flags = 1
|
||||||
|
data = length 5162, hash 7F2E97FA
|
||||||
|
sample 26:
|
||||||
|
time = 2218666
|
||||||
|
flags = 1
|
||||||
|
data = length 5255, hash D92A782
|
||||||
|
sample 27:
|
||||||
|
time = 2304000
|
||||||
|
flags = 1
|
||||||
|
data = length 5196, hash 98FE5138
|
||||||
|
sample 28:
|
||||||
|
time = 2389333
|
||||||
|
flags = 1
|
||||||
|
data = length 5214, hash 3D35C38C
|
||||||
|
sample 29:
|
||||||
|
time = 2474666
|
||||||
|
flags = 1
|
||||||
|
data = length 5211, hash 7E25420F
|
||||||
|
sample 30:
|
||||||
|
time = 2560000
|
||||||
|
flags = 1
|
||||||
|
data = length 5230, hash 2AD96FBC
|
||||||
|
sample 31:
|
||||||
|
time = 2645333
|
||||||
|
flags = 1
|
||||||
|
data = length 3384, hash 938BCDD9
|
||||||
|
sample 32:
|
||||||
|
time = 2730666
|
||||||
|
flags = 1
|
||||||
|
data = length 445, hash A388E3D6
|
||||||
|
tracksEnded = true
|
@ -15,8 +15,14 @@
|
|||||||
*/
|
*/
|
||||||
package com.google.android.exoplayer2.extractor.flac;
|
package com.google.android.exoplayer2.extractor.flac;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import androidx.test.core.app.ApplicationProvider;
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||||
|
import com.google.android.exoplayer2.extractor.Extractor;
|
||||||
import com.google.android.exoplayer2.testutil.ExtractorAsserts;
|
import com.google.android.exoplayer2.testutil.ExtractorAsserts;
|
||||||
|
import com.google.android.exoplayer2.testutil.ExtractorAsserts.ExtractorFactory;
|
||||||
|
import com.google.android.exoplayer2.testutil.TestUtil;
|
||||||
|
import java.io.IOException;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
@ -26,41 +32,41 @@ public class FlacExtractorTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSample() throws Exception {
|
public void testSample() throws Exception {
|
||||||
ExtractorAsserts.assertBehavior(FlacExtractor::new, "flac/bear.flac");
|
assertBehavior(FlacExtractor::new, "flac/bear.flac");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSampleWithId3HeaderAndId3Enabled() throws Exception {
|
public void testSampleWithId3HeaderAndId3Enabled() throws Exception {
|
||||||
ExtractorAsserts.assertBehavior(FlacExtractor::new, "flac/bear_with_id3_enabled.flac");
|
assertBehavior(FlacExtractor::new, "flac/bear_with_id3_enabled.flac");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSampleWithId3HeaderAndId3Disabled() throws Exception {
|
public void testSampleWithId3HeaderAndId3Disabled() throws Exception {
|
||||||
// bear_with_id3_disabled.flac is identical to bear_with_id3_enabled.flac, but the dump file is
|
// bear_with_id3_disabled.flac is identical to bear_with_id3_enabled.flac, but the dump file is
|
||||||
// different due to setting FLAG_DISABLE_ID3_METADATA.
|
// different due to setting FLAG_DISABLE_ID3_METADATA.
|
||||||
ExtractorAsserts.assertBehavior(
|
assertBehavior(
|
||||||
() -> new FlacExtractor(FlacExtractor.FLAG_DISABLE_ID3_METADATA),
|
() -> new FlacExtractor(FlacExtractor.FLAG_DISABLE_ID3_METADATA),
|
||||||
"flac/bear_with_id3_disabled.flac");
|
"flac/bear_with_id3_disabled.flac");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSampleWithVorbisComments() throws Exception {
|
public void testSampleWithVorbisComments() throws Exception {
|
||||||
ExtractorAsserts.assertBehavior(FlacExtractor::new, "flac/bear_with_vorbis_comments.flac");
|
assertBehavior(FlacExtractor::new, "flac/bear_with_vorbis_comments.flac");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSampleWithPicture() throws Exception {
|
public void testSampleWithPicture() throws Exception {
|
||||||
ExtractorAsserts.assertBehavior(FlacExtractor::new, "flac/bear_with_picture.flac");
|
assertBehavior(FlacExtractor::new, "flac/bear_with_picture.flac");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testOneMetadataBlock() throws Exception {
|
public void testOneMetadataBlock() throws Exception {
|
||||||
ExtractorAsserts.assertBehavior(FlacExtractor::new, "flac/bear_one_metadata_block.flac");
|
assertBehavior(FlacExtractor::new, "flac/bear_one_metadata_block.flac");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testNoMinMaxFrameSize() throws Exception {
|
public void testNoMinMaxFrameSize() throws Exception {
|
||||||
ExtractorAsserts.assertBehavior(FlacExtractor::new, "flac/bear_no_min_max_frame_size.flac");
|
assertBehavior(FlacExtractor::new, "flac/bear_no_min_max_frame_size.flac");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -70,6 +76,24 @@ public class FlacExtractorTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testUncommonSampleRate() throws Exception {
|
public void testUncommonSampleRate() throws Exception {
|
||||||
ExtractorAsserts.assertBehavior(FlacExtractor::new, "flac/bear_uncommon_sample_rate.flac");
|
assertBehavior(FlacExtractor::new, "flac/bear_uncommon_sample_rate.flac");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void assertBehavior(ExtractorFactory factory, String file)
|
||||||
|
throws IOException, InterruptedException {
|
||||||
|
// Check behavior prior to initialization.
|
||||||
|
Extractor extractor = factory.create();
|
||||||
|
extractor.seek(0, 0);
|
||||||
|
extractor.release();
|
||||||
|
// Assert output.
|
||||||
|
Context context = ApplicationProvider.getApplicationContext();
|
||||||
|
byte[] data = TestUtil.getByteArray(context, file);
|
||||||
|
// Don't simulate IO errors as it is too slow (see b/145994869).
|
||||||
|
ExtractorAsserts.assertOutput(factory.create(), file, data, context, true, false, false, false);
|
||||||
|
ExtractorAsserts.assertOutput(factory.create(), file, data, context, true, false, false, true);
|
||||||
|
ExtractorAsserts.assertOutput(factory.create(), file, data, context, true, false, true, false);
|
||||||
|
ExtractorAsserts.assertOutput(factory.create(), file, data, context, true, false, true, true);
|
||||||
|
ExtractorAsserts.assertOutput(
|
||||||
|
factory.create(), file, data, context, false, false, false, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -171,7 +171,7 @@ public final class ExtractorAsserts {
|
|||||||
* @throws IOException If reading from the input fails.
|
* @throws IOException If reading from the input fails.
|
||||||
* @throws InterruptedException If interrupted while reading from the input.
|
* @throws InterruptedException If interrupted while reading from the input.
|
||||||
*/
|
*/
|
||||||
private static FakeExtractorOutput assertOutput(
|
public static FakeExtractorOutput assertOutput(
|
||||||
Extractor extractor,
|
Extractor extractor,
|
||||||
String file,
|
String file,
|
||||||
byte[] data,
|
byte[] data,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user