Commit 55f2d1a5 by kimvde Committed by Rohit Singh

Make onOutputFormat nullable

- This is to make sure we know about all the tracks before initializing
the SamplePipelines. This allows to set the muxer and the fallback
listener track count before the SamplePipelines are built.
- As a result, the test files had to be updated because the order in
which the tracks are written has changed.
- The ImageAssetLoader also had to be updated to call onOutputFormat
repeatedly until it returns a non-null SampleConsumer.
- Also fix the trackCount sent to the muxer and fallback listener. The
correct track count can be computed now that we know about all the
tracks before building the SamplePipelines.

PiperOrigin-RevId: 514426123
parent 67e359c8
...@@ -21,6 +21,7 @@ import static java.lang.annotation.ElementType.TYPE_USE; ...@@ -21,6 +21,7 @@ import static java.lang.annotation.ElementType.TYPE_USE;
import android.os.Looper; import android.os.Looper;
import androidx.annotation.IntDef; import androidx.annotation.IntDef;
import androidx.annotation.IntRange; import androidx.annotation.IntRange;
import androidx.annotation.Nullable;
import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.Format;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import java.lang.annotation.Documented; import java.lang.annotation.Documented;
...@@ -112,17 +113,21 @@ public interface AssetLoader { ...@@ -112,17 +113,21 @@ public interface AssetLoader {
* Called when the {@link Format} of samples that will be output by the {@link AssetLoader} is * Called when the {@link Format} of samples that will be output by the {@link AssetLoader} is
* known. * known.
* *
* <p>Must be called once per {@linkplain #onTrackCount declared} track, and only after that * <p>Must be called after the corresponding track has been {@link #onTrackAdded added}.
* track has been {@link #onTrackAdded added}. *
* <p>For each {@link #onTrackAdded added} track, this method must be called regularly until the
* returned {@link SampleConsumer} is non-null.
* *
* <p>Must be called from the thread that will be used to call the returned {@link * <p>Must be called from the thread that will be used to call the returned {@link
* SampleConsumer}'s methods. This thread must be the same for all formats output, and is * SampleConsumer}'s methods. This thread must be the same for all formats output, and is
* generally different from the one used to access the {@link AssetLoader} methods. * generally different from the one used to access the {@link AssetLoader} methods.
* *
* @param format The {@link Format} of samples that will be output. * @param format The {@link Format} of samples that will be output.
* @return The {@link SampleConsumer} of samples of the given {@link Format}. * @return The {@link SampleConsumer} of samples of the given {@link Format}, or {@code null} if
* it could not be retrieved yet.
* @throws ExportException If an error occurs configuring the {@link SampleConsumer}. * @throws ExportException If an error occurs configuring the {@link SampleConsumer}.
*/ */
@Nullable
SampleConsumer onOutputFormat(Format format) throws ExportException; SampleConsumer onOutputFormat(Format format) throws ExportException;
/** /**
......
...@@ -235,25 +235,31 @@ import java.util.concurrent.atomic.AtomicInteger; ...@@ -235,25 +235,31 @@ import java.util.concurrent.atomic.AtomicInteger;
return decodeOutput; return decodeOutput;
} }
@Nullable
@Override @Override
public SampleConsumer onOutputFormat(Format format) throws ExportException { public SampleConsumer onOutputFormat(Format format) throws ExportException {
@C.TrackType int trackType = getProcessedTrackType(format.sampleMimeType); @C.TrackType int trackType = getProcessedTrackType(format.sampleMimeType);
SampleConsumer sampleConsumer; SampleConsumer sampleConsumer;
if (currentMediaItemIndex.get() == 0) { if (currentMediaItemIndex.get() == 0) {
sampleConsumer = @Nullable
new SampleConsumerWrapper(compositeAssetLoaderListener.onOutputFormat(format)); SampleConsumer wrappedSampleConsumer = compositeAssetLoaderListener.onOutputFormat(format);
if (wrappedSampleConsumer == null) {
return null;
}
sampleConsumer = new SampleConsumerWrapper(wrappedSampleConsumer);
sampleConsumersByTrackType.put(trackType, sampleConsumer); sampleConsumersByTrackType.put(trackType, sampleConsumer);
if (forceAudioTrack && nonEndedTracks.get() == 1 && trackType == C.TRACK_TYPE_VIDEO) { if (forceAudioTrack && nonEndedTracks.get() == 1 && trackType == C.TRACK_TYPE_VIDEO) {
sampleConsumersByTrackType.put( SampleConsumer wrappedAudioSampleConsumer =
C.TRACK_TYPE_AUDIO, checkStateNotNull(
new SampleConsumerWrapper(
compositeAssetLoaderListener.onOutputFormat( compositeAssetLoaderListener.onOutputFormat(
FORCE_AUDIO_TRACK_FORMAT FORCE_AUDIO_TRACK_FORMAT
.buildUpon() .buildUpon()
.setSampleMimeType(MimeTypes.AUDIO_RAW) .setSampleMimeType(MimeTypes.AUDIO_RAW)
.setPcmEncoding(C.ENCODING_PCM_16BIT) .setPcmEncoding(C.ENCODING_PCM_16BIT)
.build()))); .build()));
sampleConsumersByTrackType.put(
C.TRACK_TYPE_AUDIO, new SampleConsumerWrapper(wrappedAudioSampleConsumer));
} }
} else { } else {
// TODO(b/270533049): Remove the check below when implementing blank video frames generation. // TODO(b/270533049): Remove the check below when implementing blank video frames generation.
......
...@@ -46,6 +46,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; ...@@ -46,6 +46,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
protected @MonotonicNonNull Codec decoder; protected @MonotonicNonNull Codec decoder;
protected boolean isEnded; protected boolean isEnded;
private @MonotonicNonNull Format inputFormat; private @MonotonicNonNull Format inputFormat;
private @MonotonicNonNull Format outputFormat;
private final TransformerMediaClock mediaClock; private final TransformerMediaClock mediaClock;
private final AssetLoader.Listener assetLoaderListener; private final AssetLoader.Listener assetLoaderListener;
...@@ -244,19 +245,26 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; ...@@ -244,19 +245,26 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
return true; return true;
} }
if (decoder != null if (outputFormat == null) {
&& getProcessedTrackType(inputFormat.sampleMimeType) == C.TRACK_TYPE_AUDIO) { if (decoder != null
@Nullable Format decoderOutputFormat = decoder.getOutputFormat(); && getProcessedTrackType(inputFormat.sampleMimeType) == C.TRACK_TYPE_AUDIO) {
if (decoderOutputFormat == null) { @Nullable Format decoderOutputFormat = decoder.getOutputFormat();
return false; if (decoderOutputFormat == null) {
return false;
}
outputFormat = decoderOutputFormat;
} else {
// TODO(b/237674316): Move surface creation out of video sampleConsumer. Init decoder and
// get decoderOutput Format before init sampleConsumer.
outputFormat = inputFormat;
} }
sampleConsumer = assetLoaderListener.onOutputFormat(decoderOutputFormat);
} else {
// TODO(b/237674316): Move surface creation out of video sampleConsumer. Init decoder and get
// decoderOutput Format before init sampleConsumer.
sampleConsumer = assetLoaderListener.onOutputFormat(inputFormat);
} }
SampleConsumer sampleConsumer = assetLoaderListener.onOutputFormat(outputFormat);
if (sampleConsumer == null) {
return false;
}
this.sampleConsumer = sampleConsumer;
return true; return true;
} }
......
...@@ -22,14 +22,18 @@ import static com.google.android.exoplayer2.transformer.Transformer.PROGRESS_STA ...@@ -22,14 +22,18 @@ import static com.google.android.exoplayer2.transformer.Transformer.PROGRESS_STA
import static com.google.android.exoplayer2.transformer.Transformer.PROGRESS_STATE_NOT_STARTED; import static com.google.android.exoplayer2.transformer.Transformer.PROGRESS_STATE_NOT_STARTED;
import static com.google.android.exoplayer2.util.Assertions.checkNotNull; import static com.google.android.exoplayer2.util.Assertions.checkNotNull;
import static com.google.android.exoplayer2.util.Assertions.checkState; import static com.google.android.exoplayer2.util.Assertions.checkState;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import android.content.Context; import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.os.Looper; import android.os.Looper;
import androidx.annotation.Nullable;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.MediaItem; import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.upstream.DataSourceBitmapLoader; import com.google.android.exoplayer2.upstream.DataSourceBitmapLoader;
import com.google.android.exoplayer2.upstream.DefaultDataSource;
import com.google.android.exoplayer2.util.BitmapLoader; import com.google.android.exoplayer2.util.BitmapLoader;
import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.MimeTypes;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
...@@ -37,6 +41,8 @@ import com.google.common.util.concurrent.FutureCallback; ...@@ -37,6 +41,8 @@ import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.MoreExecutors; import com.google.common.util.concurrent.MoreExecutors;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
/** An {@link AssetLoader} implementation that loads images into {@link Bitmap} instances. */ /** An {@link AssetLoader} implementation that loads images into {@link Bitmap} instances. */
public final class ImageAssetLoader implements AssetLoader { public final class ImageAssetLoader implements AssetLoader {
...@@ -59,26 +65,36 @@ public final class ImageAssetLoader implements AssetLoader { ...@@ -59,26 +65,36 @@ public final class ImageAssetLoader implements AssetLoader {
public static final String MIME_TYPE_IMAGE_ALL = MimeTypes.BASE_TYPE_IMAGE + "/*"; public static final String MIME_TYPE_IMAGE_ALL = MimeTypes.BASE_TYPE_IMAGE + "/*";
private final Context context; private static final int QUEUE_BITMAP_INTERVAL_MS = 10;
private final EditedMediaItem editedMediaItem; private final EditedMediaItem editedMediaItem;
private final DataSource.Factory dataSourceFactory;
private final Listener listener; private final Listener listener;
private final ScheduledExecutorService scheduledExecutorService;
private @Transformer.ProgressState int progressState; private @Transformer.ProgressState int progressState;
private int progress;
private volatile int progress;
private ImageAssetLoader(Context context, EditedMediaItem editedMediaItem, Listener listener) { private ImageAssetLoader(Context context, EditedMediaItem editedMediaItem, Listener listener) {
this.context = context; checkState(editedMediaItem.durationUs != C.TIME_UNSET);
checkState(editedMediaItem.frameRate != C.RATE_UNSET_INT);
this.editedMediaItem = editedMediaItem; this.editedMediaItem = editedMediaItem;
dataSourceFactory = new DefaultDataSource.Factory(context);
this.listener = listener; this.listener = listener;
scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
progressState = PROGRESS_STATE_NOT_STARTED; progressState = PROGRESS_STATE_NOT_STARTED;
} }
@Override @Override
@SuppressWarnings("FutureReturnValueIgnored")
public void start() { public void start() {
progressState = PROGRESS_STATE_AVAILABLE; progressState = PROGRESS_STATE_AVAILABLE;
listener.onDurationUs(editedMediaItem.durationUs);
listener.onTrackCount(1); listener.onTrackCount(1);
BitmapLoader bitmapLoader = new DataSourceBitmapLoader(context); BitmapLoader bitmapLoader =
new DataSourceBitmapLoader(
MoreExecutors.listeningDecorator(scheduledExecutorService), dataSourceFactory);
MediaItem.LocalConfiguration localConfiguration = MediaItem.LocalConfiguration localConfiguration =
checkNotNull(editedMediaItem.mediaItem.localConfiguration); checkNotNull(editedMediaItem.mediaItem.localConfiguration);
ListenableFuture<Bitmap> future = bitmapLoader.loadBitmap(localConfiguration.uri); ListenableFuture<Bitmap> future = bitmapLoader.loadBitmap(localConfiguration.uri);
...@@ -100,21 +116,10 @@ public final class ImageAssetLoader implements AssetLoader { ...@@ -100,21 +116,10 @@ public final class ImageAssetLoader implements AssetLoader {
SUPPORTED_OUTPUT_TYPE_DECODED, SUPPORTED_OUTPUT_TYPE_DECODED,
/* streamStartPositionUs= */ 0, /* streamStartPositionUs= */ 0,
/* streamOffsetUs= */ 0); /* streamOffsetUs= */ 0);
SampleConsumer sampleConsumer = listener.onOutputFormat(format); scheduledExecutorService.submit(() -> queueBitmapInternal(bitmap, format));
checkState(editedMediaItem.durationUs != C.TIME_UNSET);
checkState(editedMediaItem.frameRate != C.RATE_UNSET_INT);
// TODO(b/262693274): consider using listener.onDurationUs() or the MediaItem change
// callback (when it's added) rather than setting duration here.
sampleConsumer.queueInputBitmap(
bitmap, editedMediaItem.durationUs, editedMediaItem.frameRate);
sampleConsumer.signalEndOfVideoInput();
} catch (ExportException e) {
listener.onError(e);
} catch (RuntimeException e) { } catch (RuntimeException e) {
listener.onError(ExportException.createForAssetLoader(e, ERROR_CODE_UNSPECIFIED)); listener.onError(ExportException.createForAssetLoader(e, ERROR_CODE_UNSPECIFIED));
} }
progress = 100;
} }
@Override @Override
...@@ -122,7 +127,7 @@ public final class ImageAssetLoader implements AssetLoader { ...@@ -122,7 +127,7 @@ public final class ImageAssetLoader implements AssetLoader {
listener.onError(ExportException.createForAssetLoader(t, ERROR_CODE_IO_UNSPECIFIED)); listener.onError(ExportException.createForAssetLoader(t, ERROR_CODE_IO_UNSPECIFIED));
} }
}, },
MoreExecutors.directExecutor()); scheduledExecutorService);
} }
@Override @Override
...@@ -141,5 +146,28 @@ public final class ImageAssetLoader implements AssetLoader { ...@@ -141,5 +146,28 @@ public final class ImageAssetLoader implements AssetLoader {
@Override @Override
public void release() { public void release() {
progressState = PROGRESS_STATE_NOT_STARTED; progressState = PROGRESS_STATE_NOT_STARTED;
scheduledExecutorService.shutdownNow();
}
@SuppressWarnings("FutureReturnValueIgnored")
private void queueBitmapInternal(Bitmap bitmap, Format format) {
try {
@Nullable SampleConsumer sampleConsumer = listener.onOutputFormat(format);
if (sampleConsumer == null) {
scheduledExecutorService.schedule(
() -> queueBitmapInternal(bitmap, format), QUEUE_BITMAP_INTERVAL_MS, MILLISECONDS);
return;
}
// TODO(b/262693274): consider using listener.onDurationUs() or the MediaItem change
// callback rather than setting duration here.
sampleConsumer.queueInputBitmap(
bitmap, editedMediaItem.durationUs, editedMediaItem.frameRate);
sampleConsumer.signalEndOfVideoInput();
progress = 100;
} catch (ExportException e) {
listener.onError(e);
} catch (RuntimeException e) {
listener.onError(ExportException.createForAssetLoader(e, ERROR_CODE_UNSPECIFIED));
}
} }
} }
...@@ -54,6 +54,7 @@ import java.util.ArrayList; ...@@ -54,6 +54,7 @@ import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import org.checkerframework.checker.nullness.qual.MonotonicNonNull; import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
...@@ -99,8 +100,10 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ...@@ -99,8 +100,10 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
private final HandlerThread internalHandlerThread; private final HandlerThread internalHandlerThread;
private final HandlerWrapper internalHandler; private final HandlerWrapper internalHandler;
private final List<CompositeAssetLoader> compositeAssetLoaders; private final List<CompositeAssetLoader> compositeAssetLoaders;
private final AtomicInteger totalInputTrackCount; private final AtomicInteger trackCountsToReport;
private final AtomicInteger unreportedInputTrackCounts; private final AtomicInteger tracksToAdd;
private final AtomicBoolean outputHasAudio;
private final AtomicBoolean outputHasVideo;
private final List<SamplePipeline> samplePipelines; private final List<SamplePipeline> samplePipelines;
private final MuxerWrapper muxerWrapper; private final MuxerWrapper muxerWrapper;
private final ConditionVariable transformerConditionVariable; private final ConditionVariable transformerConditionVariable;
...@@ -153,8 +156,10 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ...@@ -153,8 +156,10 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
compositeAssetLoaderListener, compositeAssetLoaderListener,
clock)); clock));
} }
totalInputTrackCount = new AtomicInteger(); trackCountsToReport = new AtomicInteger(composition.sequences.size());
unreportedInputTrackCounts = new AtomicInteger(composition.sequences.size()); tracksToAdd = new AtomicInteger();
outputHasAudio = new AtomicBoolean();
outputHasVideo = new AtomicBoolean();
samplePipelines = new ArrayList<>(); samplePipelines = new ArrayList<>();
transformerConditionVariable = new ConditionVariable(); transformerConditionVariable = new ConditionVariable();
exportResultBuilder = new ExportResult.Builder(); exportResultBuilder = new ExportResult.Builder();
...@@ -435,12 +440,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ...@@ -435,12 +440,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
ERROR_CODE_FAILED_RUNTIME_CHECK)); ERROR_CODE_FAILED_RUNTIME_CHECK));
return; return;
} }
totalInputTrackCount.addAndGet(trackCount); trackCountsToReport.decrementAndGet();
unreportedInputTrackCounts.decrementAndGet(); tracksToAdd.addAndGet(trackCount);
if (unreportedInputTrackCounts.get() == 0) {
muxerWrapper.setTrackCount(totalInputTrackCount.get());
fallbackListener.setTrackCount(totalInputTrackCount.get());
}
} }
@Override @Override
...@@ -449,21 +450,38 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ...@@ -449,21 +450,38 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
@AssetLoader.SupportedOutputTypes int supportedOutputTypes, @AssetLoader.SupportedOutputTypes int supportedOutputTypes,
long streamStartPositionUs, long streamStartPositionUs,
long streamOffsetUs) { long streamOffsetUs) {
@C.TrackType
int trackType = getProcessedTrackType(firstAssetLoaderInputFormat.sampleMimeType);
AddedTrackInfo trackInfo = AddedTrackInfo trackInfo =
new AddedTrackInfo( new AddedTrackInfo(
firstAssetLoaderInputFormat, firstAssetLoaderInputFormat,
supportedOutputTypes, supportedOutputTypes,
streamStartPositionUs, streamStartPositionUs,
streamOffsetUs); streamOffsetUs);
addedTrackInfoByTrackType.put(trackType, trackInfo);
addedTrackInfoByTrackType.put( if (trackType == C.TRACK_TYPE_AUDIO) {
getProcessedTrackType(firstAssetLoaderInputFormat.sampleMimeType), trackInfo); outputHasAudio.set(true);
} else {
outputHasVideo.set(true);
}
if (trackCountsToReport.get() == 0 && tracksToAdd.get() == 1) {
int outputTrackCount = (outputHasAudio.get() ? 1 : 0) + (outputHasVideo.get() ? 1 : 0);
muxerWrapper.setTrackCount(outputTrackCount);
fallbackListener.setTrackCount(outputTrackCount);
}
tracksToAdd.decrementAndGet();
return trackInfo.shouldTranscode; return trackInfo.shouldTranscode;
} }
@Nullable
@Override @Override
public SampleConsumer onOutputFormat(Format assetLoaderOutputFormat) throws ExportException { public SampleConsumer onOutputFormat(Format assetLoaderOutputFormat) throws ExportException {
if (trackCountsToReport.get() > 0 || tracksToAdd.get() > 0) {
return null;
}
@C.TrackType int trackType = getProcessedTrackType(assetLoaderOutputFormat.sampleMimeType); @C.TrackType int trackType = getProcessedTrackType(assetLoaderOutputFormat.sampleMimeType);
AddedTrackInfo trackInfo = checkStateNotNull(addedTrackInfoByTrackType.get(trackType)); AddedTrackInfo trackInfo = checkStateNotNull(addedTrackInfoByTrackType.get(trackType));
SamplePipeline samplePipeline = getSamplePipeline(assetLoaderOutputFormat, trackInfo); SamplePipeline samplePipeline = getSamplePipeline(assetLoaderOutputFormat, trackInfo);
......
format 0: format 0:
sampleMimeType = audio/mp4a-latm
channelCount = 1
sampleRate = 44100
pcmEncoding = 2
format 1:
id = 1 id = 1
sampleMimeType = video/avc sampleMimeType = video/avc
codecs = avc1.640034 codecs = avc1.640034
...@@ -14,356 +9,361 @@ format 1: ...@@ -14,356 +9,361 @@ format 1:
initializationData: initializationData:
data = length 30, hash F6F3D010 data = length 30, hash F6F3D010
data = length 10, hash 7A0D0F2B data = length 10, hash 7A0D0F2B
format 1:
sampleMimeType = audio/mp4a-latm
channelCount = 1
sampleRate = 44100
pcmEncoding = 2
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = -252482306
size = 36477
isKeyFrame = true
presentationTimeUs = 0
sample:
trackIndex = 1
dataHashCode = 67864034
size = 5341
isKeyFrame = false
presentationTimeUs = 67000
sample:
trackIndex = 1
dataHashCode = 897273234
size = 596
isKeyFrame = false
presentationTimeUs = 33000
sample:
trackIndex = 1
dataHashCode = -1549870586
size = 7704
isKeyFrame = false
presentationTimeUs = 200000
sample:
trackIndex = 1
dataHashCode = 672384813
size = 989
isKeyFrame = false
presentationTimeUs = 133000
sample:
trackIndex = 1
dataHashCode = -988996493
size = 721
isKeyFrame = false
presentationTimeUs = 100000
sample:
trackIndex = 1
dataHashCode = 1711151377
size = 519
isKeyFrame = false
presentationTimeUs = 167000
sample:
trackIndex = 1
dataHashCode = -506806036
size = 6160
isKeyFrame = false
presentationTimeUs = 333000
sample:
trackIndex = 1
dataHashCode = 1902167649
size = 953
isKeyFrame = false
presentationTimeUs = 267000
sample:
trackIndex = 1
dataHashCode = 2054873212
size = 620
isKeyFrame = false
presentationTimeUs = 233000
sample:
trackIndex = 0
dataHashCode = 555688582 dataHashCode = 555688582
size = 416 size = 416
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 0 presentationTimeUs = 0
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 2000837254 dataHashCode = 2000837254
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 4717 presentationTimeUs = 4717
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1593942879 dataHashCode = -1593942879
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 9456 presentationTimeUs = 9456
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 587837542 dataHashCode = 587837542
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 14196 presentationTimeUs = 14196
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1836423877 dataHashCode = -1836423877
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 18935 presentationTimeUs = 18935
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 874705099 dataHashCode = 874705099
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 23674 presentationTimeUs = 23674
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -269206181 dataHashCode = -269206181
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 28413 presentationTimeUs = 28413
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -58682425 dataHashCode = -58682425
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 33152 presentationTimeUs = 33152
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -859796970 dataHashCode = -859796970
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 37892 presentationTimeUs = 37892
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 711911523 dataHashCode = 711911523
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 42631 presentationTimeUs = 42631
sample: sample:
trackIndex = 0 trackIndex = 0
dataHashCode = -252482306
size = 36477
isKeyFrame = true
presentationTimeUs = 0
sample:
trackIndex = 0
dataHashCode = 67864034
size = 5341
isKeyFrame = false
presentationTimeUs = 67000
sample:
trackIndex = 0
dataHashCode = 897273234
size = 596
isKeyFrame = false
presentationTimeUs = 33000
sample:
trackIndex = 0
dataHashCode = -1549870586
size = 7704
isKeyFrame = false
presentationTimeUs = 200000
sample:
trackIndex = 0
dataHashCode = 672384813
size = 989
isKeyFrame = false
presentationTimeUs = 133000
sample:
trackIndex = 0
dataHashCode = -988996493
size = 721
isKeyFrame = false
presentationTimeUs = 100000
sample:
trackIndex = 0
dataHashCode = 1711151377
size = 519
isKeyFrame = false
presentationTimeUs = 167000
sample:
trackIndex = 0
dataHashCode = -506806036
size = 6160
isKeyFrame = false
presentationTimeUs = 333000
sample:
trackIndex = 0
dataHashCode = 1902167649
size = 953
isKeyFrame = false
presentationTimeUs = 267000
sample:
trackIndex = 0
dataHashCode = 2054873212
size = 620
isKeyFrame = false
presentationTimeUs = 233000
sample:
trackIndex = 1
dataHashCode = -694513071 dataHashCode = -694513071
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 47370 presentationTimeUs = 47370
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1124371059 dataHashCode = -1124371059
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 52109 presentationTimeUs = 52109
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 297166745 dataHashCode = 297166745
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 56849 presentationTimeUs = 56849
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -937110638 dataHashCode = -937110638
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 61588 presentationTimeUs = 61588
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1050158990 dataHashCode = -1050158990
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 66327 presentationTimeUs = 66327
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1109510229 dataHashCode = 1109510229
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 71066 presentationTimeUs = 71066
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1297086772 dataHashCode = 1297086772
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 75805 presentationTimeUs = 75805
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1739939803 dataHashCode = -1739939803
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 80545 presentationTimeUs = 80545
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1149727930 dataHashCode = -1149727930
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 85284 presentationTimeUs = 85284
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1627652713 dataHashCode = -1627652713
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 90023 presentationTimeUs = 90023
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 1556608231 dataHashCode = 1556608231
size = 405 size = 405
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 300000 presentationTimeUs = 300000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -1648978019 dataHashCode = -1648978019
size = 4852 size = 4852
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 433000 presentationTimeUs = 433000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -484808327 dataHashCode = -484808327
size = 547 size = 547
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 400000 presentationTimeUs = 400000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -20706048 dataHashCode = -20706048
size = 570 size = 570
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 367000 presentationTimeUs = 367000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 2085064574 dataHashCode = 2085064574
size = 5525 size = 5525
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 567000 presentationTimeUs = 567000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -637074022 dataHashCode = -637074022
size = 1082 size = 1082
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 500000 presentationTimeUs = 500000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -1824027029 dataHashCode = -1824027029
size = 807 size = 807
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 467000 presentationTimeUs = 467000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -1701945306 dataHashCode = -1701945306
size = 744 size = 744
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 533000 presentationTimeUs = 533000
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -551926260 dataHashCode = -551926260
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 94762 presentationTimeUs = 94762
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 45987178 dataHashCode = 45987178
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 99502 presentationTimeUs = 99502
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -903675808 dataHashCode = -903675808
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 104241 presentationTimeUs = 104241
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -755916991 dataHashCode = -755916991
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 108980 presentationTimeUs = 108980
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1355207303 dataHashCode = -1355207303
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 113719 presentationTimeUs = 113719
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -975703389 dataHashCode = -975703389
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 118459 presentationTimeUs = 118459
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1933194670 dataHashCode = 1933194670
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 123198 presentationTimeUs = 123198
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -565778989 dataHashCode = -565778989
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 127937 presentationTimeUs = 127937
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1454083383 dataHashCode = 1454083383
size = 418 size = 418
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 132676 presentationTimeUs = 132676
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -952425536 dataHashCode = -952425536
size = 4732 size = 4732
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 700000 presentationTimeUs = 700000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -1978031576 dataHashCode = -1978031576
size = 1004 size = 1004
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 633000 presentationTimeUs = 633000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -2128215508 dataHashCode = -2128215508
size = 794 size = 794
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 600000 presentationTimeUs = 600000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -259850011 dataHashCode = -259850011
size = 645 size = 645
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 667000 presentationTimeUs = 667000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 1920983928 dataHashCode = 1920983928
size = 2684 size = 2684
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 833000 presentationTimeUs = 833000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 1100642337 dataHashCode = 1100642337
size = 787 size = 787
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 767000 presentationTimeUs = 767000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 1544917830 dataHashCode = 1544917830
size = 649 size = 649
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 733000 presentationTimeUs = 733000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -116205995 dataHashCode = -116205995
size = 509 size = 509
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 800000 presentationTimeUs = 800000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 696343585 dataHashCode = 696343585
size = 1226 size = 1226
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 967000 presentationTimeUs = 967000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -644371190 dataHashCode = -644371190
size = 898 size = 898
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 900000 presentationTimeUs = 900000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -1606273467 dataHashCode = -1606273467
size = 476 size = 476
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 867000 presentationTimeUs = 867000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -571265861 dataHashCode = -571265861
size = 486 size = 486
isKeyFrame = false isKeyFrame = false
......
format 0: format 0:
sampleMimeType = audio/mp4a-latm
channelCount = 2
sampleRate = 12000
pcmEncoding = 2
format 1:
id = 2 id = 2
sampleMimeType = video/avc sampleMimeType = video/avc
codecs = avc1.64000D codecs = avc1.64000D
...@@ -15,332 +10,337 @@ format 1: ...@@ -15,332 +10,337 @@ format 1:
initializationData: initializationData:
data = length 33, hash D3FB879D data = length 33, hash D3FB879D
data = length 10, hash 7A0D0F2B data = length 10, hash 7A0D0F2B
format 1:
sampleMimeType = audio/mp4a-latm
channelCount = 2
sampleRate = 12000
pcmEncoding = 2
sample: sample:
trackIndex = 1 trackIndex = 1
dataHashCode = -212376212
size = 20
isKeyFrame = true
presentationTimeUs = 0
sample:
trackIndex = 1
dataHashCode = -1948569090
size = 72
isKeyFrame = true
presentationTimeUs = 417
sample:
trackIndex = 1
dataHashCode = -1316750072
size = 84
isKeyFrame = true
presentationTimeUs = 1917
sample:
trackIndex = 1
dataHashCode = 1016428949
size = 88
isKeyFrame = true
presentationTimeUs = 3667
sample:
trackIndex = 1
dataHashCode = -1127325245
size = 96
isKeyFrame = true
presentationTimeUs = 5500
sample:
trackIndex = 1
dataHashCode = 1148147726
size = 92
isKeyFrame = true
presentationTimeUs = 7500
sample:
trackIndex = 0
dataHashCode = 1949079733 dataHashCode = 1949079733
size = 5446 size = 5446
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 0 presentationTimeUs = 0
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -1397194508 dataHashCode = -1397194508
size = 125 size = 125
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 14000 presentationTimeUs = 14000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 1147159698 dataHashCode = 1147159698
size = 147 size = 147
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 47333 presentationTimeUs = 47333
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 524634358 dataHashCode = 524634358
size = 149 size = 149
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 80667 presentationTimeUs = 80667
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 2031178347 dataHashCode = 2031178347
size = 149 size = 149
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 114000 presentationTimeUs = 114000
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -625462168 dataHashCode = -625462168
size = 169 size = 169
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 147333 presentationTimeUs = 147333
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -973299745 dataHashCode = -973299745
size = 126 size = 126
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 180667 presentationTimeUs = 180667
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -788426325 dataHashCode = -788426325
size = 120 size = 120
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 228042 presentationTimeUs = 228042
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 2009515523 dataHashCode = 2009515523
size = 126 size = 126
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 244708 presentationTimeUs = 244708
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -874600600 dataHashCode = -874600600
size = 1180 size = 1180
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 334083 presentationTimeUs = 334083
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -212376212
size = 20
isKeyFrame = true
presentationTimeUs = 0
sample:
trackIndex = 0
dataHashCode = -1948569090
size = 72
isKeyFrame = true
presentationTimeUs = 417
sample:
trackIndex = 0
dataHashCode = -1316750072
size = 84
isKeyFrame = true
presentationTimeUs = 1917
sample:
trackIndex = 0
dataHashCode = 1016428949
size = 88
isKeyFrame = true
presentationTimeUs = 3667
sample:
trackIndex = 0
dataHashCode = -1127325245
size = 96
isKeyFrame = true
presentationTimeUs = 5500
sample:
trackIndex = 0
dataHashCode = 1148147726
size = 92
isKeyFrame = true
presentationTimeUs = 7500
sample:
trackIndex = 0
dataHashCode = -2125685540 dataHashCode = -2125685540
size = 76 size = 76
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 9417 presentationTimeUs = 9417
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 473329679 dataHashCode = 473329679
size = 24 size = 24
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 11000 presentationTimeUs = 11000
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 240990900 dataHashCode = 240990900
size = 176 size = 176
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 11500 presentationTimeUs = 11500
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 777637182 dataHashCode = 777637182
size = 196 size = 196
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 15167 presentationTimeUs = 15167
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1872106264 dataHashCode = 1872106264
size = 180 size = 180
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 19250 presentationTimeUs = 19250
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1520711499 dataHashCode = -1520711499
size = 140 size = 140
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 23000 presentationTimeUs = 23000
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1580199067 dataHashCode = 1580199067
size = 232 size = 232
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 25917 presentationTimeUs = 25917
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 475464086 dataHashCode = 475464086
size = 184 size = 184
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 30750 presentationTimeUs = 30750
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -211754132 dataHashCode = -211754132
size = 172 size = 172
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 34584 presentationTimeUs = 34584
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1236547164 dataHashCode = 1236547164
size = 172 size = 172
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 38167 presentationTimeUs = 38167
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -2064216186 dataHashCode = -2064216186
size = 188 size = 188
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 41750 presentationTimeUs = 41750
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 984869991 dataHashCode = 984869991
size = 216 size = 216
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 267416 presentationTimeUs = 267416
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 2106811176 dataHashCode = 2106811176
size = 119 size = 119
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 234083 presentationTimeUs = 234083
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -1981166365 dataHashCode = -1981166365
size = 145 size = 145
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 300750 presentationTimeUs = 300750
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 1234592714 dataHashCode = 1234592714
size = 1274 size = 1274
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 467416 presentationTimeUs = 467416
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -13135608 dataHashCode = -13135608
size = 190 size = 190
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 400750 presentationTimeUs = 400750
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 1840621658 dataHashCode = 1840621658
size = 107 size = 107
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 367416 presentationTimeUs = 367416
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 1637734271 dataHashCode = 1637734271
size = 125 size = 125
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 434083 presentationTimeUs = 434083
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -682950885 dataHashCode = -682950885
size = 260 size = 260
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 45667 presentationTimeUs = 45667
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1301206627 dataHashCode = 1301206627
size = 236 size = 236
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 51084 presentationTimeUs = 51084
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 256580525 dataHashCode = 256580525
size = 236 size = 236
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 56000 presentationTimeUs = 56000
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1086601304 dataHashCode = -1086601304
size = 236 size = 236
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 60917 presentationTimeUs = 60917
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -2046131588 dataHashCode = -2046131588
size = 224 size = 224
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 65834 presentationTimeUs = 65834
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 1550955865 dataHashCode = 1550955865
size = 224 size = 224
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 70500 presentationTimeUs = 70500
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -274800552 dataHashCode = -274800552
size = 220 size = 220
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 75167 presentationTimeUs = 75167
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = 382420909 dataHashCode = 382420909
size = 224 size = 224
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 79750 presentationTimeUs = 79750
sample: sample:
trackIndex = 0 trackIndex = 1
dataHashCode = -1431575865 dataHashCode = -1431575865
size = 232 size = 232
isKeyFrame = true isKeyFrame = true
presentationTimeUs = 84417 presentationTimeUs = 84417
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 2112365658 dataHashCode = 2112365658
size = 1109 size = 1109
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 600750 presentationTimeUs = 600750
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -968901399 dataHashCode = -968901399
size = 250 size = 250
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 534083 presentationTimeUs = 534083
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -1184738023 dataHashCode = -1184738023
size = 124 size = 124
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 500750 presentationTimeUs = 500750
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 1756300509 dataHashCode = 1756300509
size = 134 size = 134
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 567416 presentationTimeUs = 567416
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 823429273 dataHashCode = 823429273
size = 1201 size = 1201
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 734083 presentationTimeUs = 734083
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 651718599 dataHashCode = 651718599
size = 213 size = 213
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 667416 presentationTimeUs = 667416
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 846349953 dataHashCode = 846349953
size = 125 size = 125
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 634083 presentationTimeUs = 634083
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = 1331153462 dataHashCode = 1331153462
size = 114 size = 114
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 700750 presentationTimeUs = 700750
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -73358172 dataHashCode = -73358172
size = 1010 size = 1010
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 867416 presentationTimeUs = 867416
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -1395269253 dataHashCode = -1395269253
size = 209 size = 209
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 800750 presentationTimeUs = 800750
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -1001367604 dataHashCode = -1001367604
size = 139 size = 139
isKeyFrame = false isKeyFrame = false
presentationTimeUs = 767416 presentationTimeUs = 767416
sample: sample:
trackIndex = 1 trackIndex = 0
dataHashCode = -122569918 dataHashCode = -122569918
size = 138 size = 138
isKeyFrame = false isKeyFrame = false
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment