Add an API entry point to pass a Composition

PiperOrigin-RevId: 508031337
This commit is contained in:
kimvde 2023-02-08 11:13:37 +00:00 committed by microkatz
parent 79b688ef30
commit 45c42ed373
4 changed files with 1592 additions and 24 deletions

View File

@ -16,6 +16,7 @@
package com.google.android.exoplayer2.transformer;
import static com.google.android.exoplayer2.util.Assertions.checkArgument;
import static com.google.android.exoplayer2.util.Assertions.checkState;
import static java.lang.annotation.ElementType.TYPE_USE;
@ -674,38 +675,55 @@ public final class Transformer {
}
/**
* Starts an asynchronous operation to export the given {@link EditedMediaItem}.
* Starts an asynchronous operation to export the given {@link Composition}.
*
* <p>This method is under implementation. Concatenating audio/video inputs with the same format
* and the same {@link Effects} applied is the only supported use case. More precisely:
*
* <ul>
* <li>The {@link Composition} must contain exactly one {@link Composition#sequences
* EditedMediaItemSequence} and its {@link Composition#effects Effects} must be {@linkplain
* Effects#EMPTY empty}.
* <li>The {@link EditedMediaItem} instances in the {@link EditedMediaItemSequence} must:
* <ul>
* <li>have identical tracks of the same format (after {@linkplain
* EditedMediaItem#removeAudio audio} or {@linkplain EditedMediaItem#removeVideo
* video} removal and {@linkplain EditedMediaItem#flattenForSlowMotion slow motion
* flattening}).
* <li>have identical {@link EditedMediaItem#effects Effects} applied.
* <li>not represent an image.
* <li>be such that either all or none requires transcoding.
* </ul>
* </ul>
*
* <p>The export state is notified through the {@linkplain Builder#addListener(Listener)
* listener}.
*
* <p>Concurrent exports on the same Transformer object are not allowed.
*
* <p>If no custom {@link Muxer.Factory} is specified, the output is an MP4 file.
* <p>If no custom {@link Transformer.Builder#setMuxerFactory(Muxer.Factory) Muxer.Factory} is
* specified, the output is an MP4 file.
*
* <p>The output can contain at most one video track and one audio track. Other track types are
* ignored. For adaptive bitrate, if no custom {@link AssetLoader.Factory} is specified, the
* highest bitrate video and audio streams are selected.
* ignored. For adaptive bitrate inputs, if no custom {@link
* Transformer.Builder#setAssetLoaderFactory(AssetLoader.Factory) AssetLoader.Factory} is
* specified, the highest bitrate video and audio streams are selected.
*
* <p>If encoding the output's video track is needed, the output frames' dimensions will be
* swapped if the height is larger than the width. This is to improve compatibility among
* different device encoders.
* <p>If exporting the video track entails transcoding, the output frames' dimensions will be
* swapped if the output video's height is larger than the width. This is to improve compatibility
* among different device encoders.
*
* @param editedMediaItem The {@link MediaItem} to export, with the transformations to apply to
* it.
* @param composition The {@link Composition} to export.
* @param path The path to the output file.
* @throws IllegalArgumentException If the path is invalid.
* @throws IllegalStateException If this method is called from the wrong thread.
* @throws IllegalStateException If an export is already in progress.
*/
public void start(EditedMediaItem editedMediaItem, String path) {
public void start(Composition composition, String path) {
checkArgument(composition.sequences.size() == 1);
checkArgument(composition.effects == Effects.EMPTY);
verifyApplicationThread();
if (transformerInternal != null) {
throw new IllegalStateException("There is already a export in progress.");
}
EditedMediaItemSequence sequence =
new EditedMediaItemSequence(ImmutableList.of(editedMediaItem));
Composition composition = new Composition(ImmutableList.of(sequence), Effects.EMPTY);
checkState(transformerInternal == null, "There is already a export in progress.");
TransformerInternalListener transformerInternalListener =
new TransformerInternalListener(composition);
HandlerWrapper applicationHandler = clock.createHandler(looper, /* callback= */ null);
@ -729,6 +747,37 @@ public final class Transformer {
transformerInternal.start();
}
/**
* Starts an asynchronous operation to export the given {@link EditedMediaItem}.
*
* <p>The export state is notified through the {@linkplain Builder#addListener(Listener)
* listener}.
*
* <p>Concurrent exports on the same Transformer object are not allowed.
*
* <p>If no custom {@link Transformer.Builder#setMuxerFactory(Muxer.Factory) Muxer.Factory} is
* specified, the output is an MP4 file.
*
* <p>The output can contain at most one video track and one audio track. Other track types are
* ignored. For adaptive bitrate inputs, if no custom {@link
* Transformer.Builder#setAssetLoaderFactory(AssetLoader.Factory) AssetLoader.Factory} is
* specified, the highest bitrate video and audio streams are selected.
*
* <p>If exporting the video track entails transcoding, the output frames' dimensions will be
* swapped if the output video's height is larger than the width. This is to improve compatibility
* among different device encoders.
*
* @param editedMediaItem The {@link EditedMediaItem} to export.
* @param path The path to the output file.
* @throws IllegalStateException If this method is called from the wrong thread.
* @throws IllegalStateException If an export is already in progress.
*/
public void start(EditedMediaItem editedMediaItem, String path) {
EditedMediaItemSequence sequence =
new EditedMediaItemSequence(ImmutableList.of(editedMediaItem));
start(new Composition(ImmutableList.of(sequence), Effects.EMPTY), path);
}
/**
* Starts an asynchronous operation to export the given {@link MediaItem}.
*
@ -737,19 +786,20 @@ public final class Transformer {
*
* <p>Concurrent exports on the same Transformer object are not allowed.
*
* <p>If no custom {@link Muxer.Factory} is specified, the output is an MP4 file.
* <p>If no custom {@link Transformer.Builder#setMuxerFactory(Muxer.Factory) Muxer.Factory} is
* specified, the output is an MP4 file.
*
* <p>The output can contain at most one video track and one audio track. Other track types are
* ignored. For adaptive bitrate, if no custom {@link AssetLoader.Factory} is specified, the
* highest bitrate video and audio streams are selected.
* ignored. For adaptive bitrate inputs, if no custom {@link
* Transformer.Builder#setAssetLoaderFactory(AssetLoader.Factory) AssetLoader.Factory} is
* specified, the highest bitrate video and audio streams are selected.
*
* <p>If encoding the output's video track is needed, the output frames' dimensions will be
* swapped if the height is larger than the width. This is to improve compatibility among
* different device encoders.
* <p>If exporting the video track entails transcoding, the output frames' dimensions will be
* swapped if the output video's height is larger than the width. This is to improve compatibility
* among different device encoders.
*
* @param mediaItem The {@link MediaItem} to export.
* @param path The path to the output file.
* @throws IllegalArgumentException If the path is invalid.
* @throws IllegalArgumentException If the {@link MediaItem} is not supported.
* @throws IllegalStateException If this method is called from the wrong thread.
* @throws IllegalStateException If an export is already in progress.

View File

@ -47,6 +47,7 @@ import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.audio.AudioProcessor;
import com.google.android.exoplayer2.audio.SilenceSkippingAudioProcessor;
import com.google.android.exoplayer2.audio.SonicAudioProcessor;
import com.google.android.exoplayer2.effect.Presentation;
import com.google.android.exoplayer2.effect.ScaleToFitTransformation;
@ -375,6 +376,53 @@ public final class TransformerEndToEndTest {
context, testMuxer, getDumpFileName(FILE_AUDIO_VIDEO + ".48000hz"));
}
@Test
public void startTransformation_concatenateMediaItemsWithSameFormat_completesSuccessfully()
throws Exception {
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
EditedMediaItem editedMediaItem =
new EditedMediaItem.Builder(mediaItem).setEffects(Effects.EMPTY).build();
EditedMediaItemSequence editedMediaItemSequence =
new EditedMediaItemSequence(ImmutableList.of(editedMediaItem, editedMediaItem));
Composition composition =
new Composition(ImmutableList.of(editedMediaItemSequence), Effects.EMPTY);
transformer.start(composition, outputPath);
TransformerTestRunner.runLooper(transformer);
DumpFileAsserts.assertOutput(
context, testMuxer, getDumpFileName(FILE_AUDIO_VIDEO + ".concatenated"));
}
@Test
public void
startTransformation_concatenateMediaItemsWithSameFormatAndEffects_completesSuccessfully()
throws Exception {
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
AudioProcessor audioProcessor = new SilenceSkippingAudioProcessor();
Effects effects =
new Effects(ImmutableList.of(audioProcessor), /* videoEffects= */ ImmutableList.of());
// The video track must be removed in order for the export to end. Indeed, the
// Robolectric decoder just copies the input buffers to the output and the audio timestamps are
// therefore computed based on the encoded samples. As a result, the audio timestamps are much
// smaller than they should be and the muxer waits for more audio samples before writing video
// samples.
EditedMediaItem editedMediaItem =
new EditedMediaItem.Builder(mediaItem).setEffects(effects).setRemoveVideo(true).build();
EditedMediaItemSequence editedMediaItemSequence =
new EditedMediaItemSequence(ImmutableList.of(editedMediaItem, editedMediaItem));
Composition composition =
new Composition(ImmutableList.of(editedMediaItemSequence), Effects.EMPTY);
transformer.start(composition, outputPath);
TransformerTestRunner.runLooper(transformer);
DumpFileAsserts.assertOutput(
context, testMuxer, getDumpFileName(FILE_AUDIO_VIDEO + ".silence_skipped_concatenated"));
}
@Test
public void startTransformation_withMultipleListeners_callsEachOnCompletion() throws Exception {
Transformer.Listener mockListener1 = mock(Transformer.Listener.class);

View File

@ -0,0 +1,924 @@
format 0:
peakBitrate = 200000
id = 2
sampleMimeType = audio/mp4a-latm
codecs = mp4a.40.2
maxInputSize = 294
channelCount = 1
sampleRate = 44100
language = und
metadata = entries=[TSSE: description=null: values=[Lavf56.1.0]]
initializationData:
data = length 2, hash 5F7
format 1:
id = 1
sampleMimeType = video/avc
codecs = avc1.64001F
maxInputSize = 36722
width = 1080
height = 720
frameRate = 29.970028
initializationData:
data = length 29, hash 4746B5D9
data = length 10, hash 7A0D0F2B
sample:
trackIndex = 1
dataHashCode = -770308242
size = 36692
isKeyFrame = true
presentationTimeUs = 0
sample:
trackIndex = 1
dataHashCode = -732087136
size = 5312
isKeyFrame = false
presentationTimeUs = 66733
sample:
trackIndex = 1
dataHashCode = 468156717
size = 599
isKeyFrame = false
presentationTimeUs = 33366
sample:
trackIndex = 1
dataHashCode = 1150349584
size = 7735
isKeyFrame = false
presentationTimeUs = 200200
sample:
trackIndex = 1
dataHashCode = 1443582006
size = 987
isKeyFrame = false
presentationTimeUs = 133466
sample:
trackIndex = 1
dataHashCode = -310585145
size = 673
isKeyFrame = false
presentationTimeUs = 100100
sample:
trackIndex = 1
dataHashCode = 807460688
size = 523
isKeyFrame = false
presentationTimeUs = 166833
sample:
trackIndex = 1
dataHashCode = 1936487090
size = 6061
isKeyFrame = false
presentationTimeUs = 333666
sample:
trackIndex = 1
dataHashCode = -32297181
size = 992
isKeyFrame = false
presentationTimeUs = 266933
sample:
trackIndex = 1
dataHashCode = 1529616406
size = 623
isKeyFrame = false
presentationTimeUs = 233566
sample:
trackIndex = 0
dataHashCode = 1205768497
size = 23
isKeyFrame = true
presentationTimeUs = 44000
sample:
trackIndex = 0
dataHashCode = 837571078
size = 6
isKeyFrame = true
presentationTimeUs = 67219
sample:
trackIndex = 0
dataHashCode = -1991633045
size = 148
isKeyFrame = true
presentationTimeUs = 90439
sample:
trackIndex = 0
dataHashCode = -822987359
size = 189
isKeyFrame = true
presentationTimeUs = 113659
sample:
trackIndex = 0
dataHashCode = -1141508176
size = 205
isKeyFrame = true
presentationTimeUs = 136879
sample:
trackIndex = 0
dataHashCode = -226971245
size = 210
isKeyFrame = true
presentationTimeUs = 160099
sample:
trackIndex = 0
dataHashCode = -2099636855
size = 210
isKeyFrame = true
presentationTimeUs = 183319
sample:
trackIndex = 0
dataHashCode = 1541550559
size = 207
isKeyFrame = true
presentationTimeUs = 206539
sample:
trackIndex = 0
dataHashCode = 411148001
size = 225
isKeyFrame = true
presentationTimeUs = 229759
sample:
trackIndex = 0
dataHashCode = -897603973
size = 215
isKeyFrame = true
presentationTimeUs = 252979
sample:
trackIndex = 1
dataHashCode = 1949198785
size = 421
isKeyFrame = false
presentationTimeUs = 300300
sample:
trackIndex = 1
dataHashCode = -147880287
size = 4899
isKeyFrame = false
presentationTimeUs = 433766
sample:
trackIndex = 1
dataHashCode = 1369083472
size = 568
isKeyFrame = false
presentationTimeUs = 400400
sample:
trackIndex = 1
dataHashCode = 965782073
size = 620
isKeyFrame = false
presentationTimeUs = 367033
sample:
trackIndex = 1
dataHashCode = -261176150
size = 5450
isKeyFrame = false
presentationTimeUs = 567233
sample:
trackIndex = 1
dataHashCode = -1830836678
size = 1051
isKeyFrame = false
presentationTimeUs = 500500
sample:
trackIndex = 1
dataHashCode = 1767407540
size = 874
isKeyFrame = false
presentationTimeUs = 467133
sample:
trackIndex = 1
dataHashCode = 918440283
size = 781
isKeyFrame = false
presentationTimeUs = 533866
sample:
trackIndex = 1
dataHashCode = -1408463661
size = 4725
isKeyFrame = false
presentationTimeUs = 700700
sample:
trackIndex = 1
dataHashCode = 1569455924
size = 1022
isKeyFrame = false
presentationTimeUs = 633966
sample:
trackIndex = 0
dataHashCode = 1478106136
size = 211
isKeyFrame = true
presentationTimeUs = 276199
sample:
trackIndex = 0
dataHashCode = -1380417145
size = 216
isKeyFrame = true
presentationTimeUs = 299419
sample:
trackIndex = 0
dataHashCode = 780903644
size = 229
isKeyFrame = true
presentationTimeUs = 322639
sample:
trackIndex = 0
dataHashCode = 586204432
size = 232
isKeyFrame = true
presentationTimeUs = 345859
sample:
trackIndex = 0
dataHashCode = -2038771492
size = 235
isKeyFrame = true
presentationTimeUs = 369079
sample:
trackIndex = 0
dataHashCode = -2065161304
size = 231
isKeyFrame = true
presentationTimeUs = 392299
sample:
trackIndex = 0
dataHashCode = 468662933
size = 226
isKeyFrame = true
presentationTimeUs = 415519
sample:
trackIndex = 0
dataHashCode = -358398546
size = 216
isKeyFrame = true
presentationTimeUs = 438739
sample:
trackIndex = 0
dataHashCode = 1767325983
size = 229
isKeyFrame = true
presentationTimeUs = 461959
sample:
trackIndex = 0
dataHashCode = 1093095458
size = 219
isKeyFrame = true
presentationTimeUs = 485179
sample:
trackIndex = 1
dataHashCode = -1723778407
size = 790
isKeyFrame = false
presentationTimeUs = 600600
sample:
trackIndex = 1
dataHashCode = 1578275472
size = 610
isKeyFrame = false
presentationTimeUs = 667333
sample:
trackIndex = 1
dataHashCode = 1989768395
size = 2751
isKeyFrame = false
presentationTimeUs = 834166
sample:
trackIndex = 1
dataHashCode = -1215674502
size = 745
isKeyFrame = false
presentationTimeUs = 767433
sample:
trackIndex = 1
dataHashCode = -814473606
size = 621
isKeyFrame = false
presentationTimeUs = 734066
sample:
trackIndex = 1
dataHashCode = 498370894
size = 505
isKeyFrame = false
presentationTimeUs = 800800
sample:
trackIndex = 1
dataHashCode = -1051506468
size = 1268
isKeyFrame = false
presentationTimeUs = 967633
sample:
trackIndex = 1
dataHashCode = -1025604144
size = 880
isKeyFrame = false
presentationTimeUs = 900900
sample:
trackIndex = 1
dataHashCode = -913586520
size = 530
isKeyFrame = false
presentationTimeUs = 867533
sample:
trackIndex = 1
dataHashCode = 1340459242
size = 568
isKeyFrame = false
presentationTimeUs = 934266
sample:
trackIndex = 0
dataHashCode = 1687543702
size = 241
isKeyFrame = true
presentationTimeUs = 508399
sample:
trackIndex = 0
dataHashCode = 1675188486
size = 228
isKeyFrame = true
presentationTimeUs = 531619
sample:
trackIndex = 0
dataHashCode = 888567545
size = 238
isKeyFrame = true
presentationTimeUs = 554839
sample:
trackIndex = 0
dataHashCode = -439631803
size = 234
isKeyFrame = true
presentationTimeUs = 578058
sample:
trackIndex = 0
dataHashCode = 1606694497
size = 231
isKeyFrame = true
presentationTimeUs = 601278
sample:
trackIndex = 0
dataHashCode = 1747388653
size = 217
isKeyFrame = true
presentationTimeUs = 624498
sample:
trackIndex = 0
dataHashCode = -734560004
size = 239
isKeyFrame = true
presentationTimeUs = 647718
sample:
trackIndex = 0
dataHashCode = -975079040
size = 243
isKeyFrame = true
presentationTimeUs = 670938
sample:
trackIndex = 0
dataHashCode = -1403504710
size = 231
isKeyFrame = true
presentationTimeUs = 694158
sample:
trackIndex = 0
dataHashCode = 379512981
size = 230
isKeyFrame = true
presentationTimeUs = 717378
sample:
trackIndex = 0
dataHashCode = -997198863
size = 238
isKeyFrame = true
presentationTimeUs = 740598
sample:
trackIndex = 0
dataHashCode = 1394492825
size = 225
isKeyFrame = true
presentationTimeUs = 763818
sample:
trackIndex = 0
dataHashCode = -885232755
size = 232
isKeyFrame = true
presentationTimeUs = 787038
sample:
trackIndex = 0
dataHashCode = 260871367
size = 243
isKeyFrame = true
presentationTimeUs = 810258
sample:
trackIndex = 0
dataHashCode = -1505318960
size = 232
isKeyFrame = true
presentationTimeUs = 833478
sample:
trackIndex = 0
dataHashCode = -390625371
size = 237
isKeyFrame = true
presentationTimeUs = 856698
sample:
trackIndex = 0
dataHashCode = 1067950751
size = 228
isKeyFrame = true
presentationTimeUs = 879918
sample:
trackIndex = 0
dataHashCode = -1179436278
size = 235
isKeyFrame = true
presentationTimeUs = 903138
sample:
trackIndex = 0
dataHashCode = 1906607774
size = 264
isKeyFrame = true
presentationTimeUs = 926358
sample:
trackIndex = 0
dataHashCode = -800475828
size = 257
isKeyFrame = true
presentationTimeUs = 949578
sample:
trackIndex = 0
dataHashCode = 1718972977
size = 227
isKeyFrame = true
presentationTimeUs = 972798
sample:
trackIndex = 1
dataHashCode = -770308242
size = 36692
isKeyFrame = true
presentationTimeUs = 1024000
sample:
trackIndex = 1
dataHashCode = -732087136
size = 5312
isKeyFrame = false
presentationTimeUs = 1090733
sample:
trackIndex = 1
dataHashCode = 468156717
size = 599
isKeyFrame = false
presentationTimeUs = 1057366
sample:
trackIndex = 1
dataHashCode = 1150349584
size = 7735
isKeyFrame = false
presentationTimeUs = 1224200
sample:
trackIndex = 1
dataHashCode = 1443582006
size = 987
isKeyFrame = false
presentationTimeUs = 1157466
sample:
trackIndex = 1
dataHashCode = -310585145
size = 673
isKeyFrame = false
presentationTimeUs = 1124100
sample:
trackIndex = 1
dataHashCode = 807460688
size = 523
isKeyFrame = false
presentationTimeUs = 1190833
sample:
trackIndex = 1
dataHashCode = 1936487090
size = 6061
isKeyFrame = false
presentationTimeUs = 1357666
sample:
trackIndex = 1
dataHashCode = -32297181
size = 992
isKeyFrame = false
presentationTimeUs = 1290933
sample:
trackIndex = 1
dataHashCode = 1529616406
size = 623
isKeyFrame = false
presentationTimeUs = 1257566
sample:
trackIndex = 0
dataHashCode = -1120448741
size = 227
isKeyFrame = true
presentationTimeUs = 996018
sample:
trackIndex = 0
dataHashCode = -1718323210
size = 235
isKeyFrame = true
presentationTimeUs = 1019238
sample:
trackIndex = 0
dataHashCode = -422416
size = 229
isKeyFrame = true
presentationTimeUs = 1042458
sample:
trackIndex = 0
dataHashCode = 833757830
size = 6
isKeyFrame = true
presentationTimeUs = 1065678
sample:
trackIndex = 0
dataHashCode = 1205768497
size = 23
isKeyFrame = true
presentationTimeUs = 1068000
sample:
trackIndex = 0
dataHashCode = 837571078
size = 6
isKeyFrame = true
presentationTimeUs = 1091219
sample:
trackIndex = 0
dataHashCode = -1991633045
size = 148
isKeyFrame = true
presentationTimeUs = 1114439
sample:
trackIndex = 0
dataHashCode = -822987359
size = 189
isKeyFrame = true
presentationTimeUs = 1137659
sample:
trackIndex = 0
dataHashCode = -1141508176
size = 205
isKeyFrame = true
presentationTimeUs = 1160879
sample:
trackIndex = 0
dataHashCode = -226971245
size = 210
isKeyFrame = true
presentationTimeUs = 1184099
sample:
trackIndex = 1
dataHashCode = 1949198785
size = 421
isKeyFrame = false
presentationTimeUs = 1324300
sample:
trackIndex = 1
dataHashCode = -147880287
size = 4899
isKeyFrame = false
presentationTimeUs = 1457766
sample:
trackIndex = 1
dataHashCode = 1369083472
size = 568
isKeyFrame = false
presentationTimeUs = 1424400
sample:
trackIndex = 1
dataHashCode = 965782073
size = 620
isKeyFrame = false
presentationTimeUs = 1391033
sample:
trackIndex = 1
dataHashCode = -261176150
size = 5450
isKeyFrame = false
presentationTimeUs = 1591233
sample:
trackIndex = 1
dataHashCode = -1830836678
size = 1051
isKeyFrame = false
presentationTimeUs = 1524500
sample:
trackIndex = 1
dataHashCode = 1767407540
size = 874
isKeyFrame = false
presentationTimeUs = 1491133
sample:
trackIndex = 1
dataHashCode = 918440283
size = 781
isKeyFrame = false
presentationTimeUs = 1557866
sample:
trackIndex = 0
dataHashCode = -2099636855
size = 210
isKeyFrame = true
presentationTimeUs = 1207319
sample:
trackIndex = 0
dataHashCode = 1541550559
size = 207
isKeyFrame = true
presentationTimeUs = 1230539
sample:
trackIndex = 0
dataHashCode = 411148001
size = 225
isKeyFrame = true
presentationTimeUs = 1253759
sample:
trackIndex = 0
dataHashCode = -897603973
size = 215
isKeyFrame = true
presentationTimeUs = 1276979
sample:
trackIndex = 0
dataHashCode = 1478106136
size = 211
isKeyFrame = true
presentationTimeUs = 1300199
sample:
trackIndex = 0
dataHashCode = -1380417145
size = 216
isKeyFrame = true
presentationTimeUs = 1323419
sample:
trackIndex = 0
dataHashCode = 780903644
size = 229
isKeyFrame = true
presentationTimeUs = 1346639
sample:
trackIndex = 0
dataHashCode = 586204432
size = 232
isKeyFrame = true
presentationTimeUs = 1369859
sample:
trackIndex = 0
dataHashCode = -2038771492
size = 235
isKeyFrame = true
presentationTimeUs = 1393079
sample:
trackIndex = 0
dataHashCode = -2065161304
size = 231
isKeyFrame = true
presentationTimeUs = 1416299
sample:
trackIndex = 1
dataHashCode = -1408463661
size = 4725
isKeyFrame = false
presentationTimeUs = 1724700
sample:
trackIndex = 1
dataHashCode = 1569455924
size = 1022
isKeyFrame = false
presentationTimeUs = 1657966
sample:
trackIndex = 1
dataHashCode = -1723778407
size = 790
isKeyFrame = false
presentationTimeUs = 1624600
sample:
trackIndex = 1
dataHashCode = 1578275472
size = 610
isKeyFrame = false
presentationTimeUs = 1691333
sample:
trackIndex = 1
dataHashCode = 1989768395
size = 2751
isKeyFrame = false
presentationTimeUs = 1858166
sample:
trackIndex = 1
dataHashCode = -1215674502
size = 745
isKeyFrame = false
presentationTimeUs = 1791433
sample:
trackIndex = 1
dataHashCode = -814473606
size = 621
isKeyFrame = false
presentationTimeUs = 1758066
sample:
trackIndex = 1
dataHashCode = 498370894
size = 505
isKeyFrame = false
presentationTimeUs = 1824800
sample:
trackIndex = 0
dataHashCode = 468662933
size = 226
isKeyFrame = true
presentationTimeUs = 1439519
sample:
trackIndex = 0
dataHashCode = -358398546
size = 216
isKeyFrame = true
presentationTimeUs = 1462739
sample:
trackIndex = 0
dataHashCode = 1767325983
size = 229
isKeyFrame = true
presentationTimeUs = 1485959
sample:
trackIndex = 0
dataHashCode = 1093095458
size = 219
isKeyFrame = true
presentationTimeUs = 1509179
sample:
trackIndex = 0
dataHashCode = 1687543702
size = 241
isKeyFrame = true
presentationTimeUs = 1532399
sample:
trackIndex = 0
dataHashCode = 1675188486
size = 228
isKeyFrame = true
presentationTimeUs = 1555619
sample:
trackIndex = 0
dataHashCode = 888567545
size = 238
isKeyFrame = true
presentationTimeUs = 1578839
sample:
trackIndex = 0
dataHashCode = -439631803
size = 234
isKeyFrame = true
presentationTimeUs = 1602058
sample:
trackIndex = 0
dataHashCode = 1606694497
size = 231
isKeyFrame = true
presentationTimeUs = 1625278
sample:
trackIndex = 0
dataHashCode = 1747388653
size = 217
isKeyFrame = true
presentationTimeUs = 1648498
sample:
trackIndex = 1
dataHashCode = -1051506468
size = 1268
isKeyFrame = false
presentationTimeUs = 1991633
sample:
trackIndex = 1
dataHashCode = -1025604144
size = 880
isKeyFrame = false
presentationTimeUs = 1924900
sample:
trackIndex = 1
dataHashCode = -913586520
size = 530
isKeyFrame = false
presentationTimeUs = 1891533
sample:
trackIndex = 1
dataHashCode = 1340459242
size = 568
isKeyFrame = false
presentationTimeUs = 1958266
sample:
trackIndex = 0
dataHashCode = -734560004
size = 239
isKeyFrame = true
presentationTimeUs = 1671718
sample:
trackIndex = 0
dataHashCode = -975079040
size = 243
isKeyFrame = true
presentationTimeUs = 1694938
sample:
trackIndex = 0
dataHashCode = -1403504710
size = 231
isKeyFrame = true
presentationTimeUs = 1718158
sample:
trackIndex = 0
dataHashCode = 379512981
size = 230
isKeyFrame = true
presentationTimeUs = 1741378
sample:
trackIndex = 0
dataHashCode = -997198863
size = 238
isKeyFrame = true
presentationTimeUs = 1764598
sample:
trackIndex = 0
dataHashCode = 1394492825
size = 225
isKeyFrame = true
presentationTimeUs = 1787818
sample:
trackIndex = 0
dataHashCode = -885232755
size = 232
isKeyFrame = true
presentationTimeUs = 1811038
sample:
trackIndex = 0
dataHashCode = 260871367
size = 243
isKeyFrame = true
presentationTimeUs = 1834258
sample:
trackIndex = 0
dataHashCode = -1505318960
size = 232
isKeyFrame = true
presentationTimeUs = 1857478
sample:
trackIndex = 0
dataHashCode = -390625371
size = 237
isKeyFrame = true
presentationTimeUs = 1880698
sample:
trackIndex = 0
dataHashCode = 1067950751
size = 228
isKeyFrame = true
presentationTimeUs = 1903918
sample:
trackIndex = 0
dataHashCode = -1179436278
size = 235
isKeyFrame = true
presentationTimeUs = 1927138
sample:
trackIndex = 0
dataHashCode = 1906607774
size = 264
isKeyFrame = true
presentationTimeUs = 1950358
sample:
trackIndex = 0
dataHashCode = -800475828
size = 257
isKeyFrame = true
presentationTimeUs = 1973578
sample:
trackIndex = 0
dataHashCode = 1718972977
size = 227
isKeyFrame = true
presentationTimeUs = 1996798
sample:
trackIndex = 0
dataHashCode = -1120448741
size = 227
isKeyFrame = true
presentationTimeUs = 2020018
sample:
trackIndex = 0
dataHashCode = -1718323210
size = 235
isKeyFrame = true
presentationTimeUs = 2043238
sample:
trackIndex = 0
dataHashCode = -422416
size = 229
isKeyFrame = true
presentationTimeUs = 2066458
sample:
trackIndex = 0
dataHashCode = 833757830
size = 6
isKeyFrame = true
presentationTimeUs = 2089678
released = true

View File

@ -0,0 +1,546 @@
format 0:
sampleMimeType = audio/mp4a-latm
channelCount = 1
sampleRate = 44100
pcmEncoding = 2
sample:
trackIndex = 0
dataHashCode = 1205768497
size = 23
isKeyFrame = true
presentationTimeUs = 0
sample:
trackIndex = 0
dataHashCode = 837571078
size = 6
isKeyFrame = true
presentationTimeUs = 261
sample:
trackIndex = 0
dataHashCode = -1991633045
size = 148
isKeyFrame = true
presentationTimeUs = 329
sample:
trackIndex = 0
dataHashCode = -822987359
size = 189
isKeyFrame = true
presentationTimeUs = 2007
sample:
trackIndex = 0
dataHashCode = -1141508176
size = 205
isKeyFrame = true
presentationTimeUs = 4150
sample:
trackIndex = 0
dataHashCode = -226971245
size = 210
isKeyFrame = true
presentationTimeUs = 6474
sample:
trackIndex = 0
dataHashCode = -2099636855
size = 210
isKeyFrame = true
presentationTimeUs = 8855
sample:
trackIndex = 0
dataHashCode = 1541550559
size = 207
isKeyFrame = true
presentationTimeUs = 11236
sample:
trackIndex = 0
dataHashCode = 411148001
size = 225
isKeyFrame = true
presentationTimeUs = 13583
sample:
trackIndex = 0
dataHashCode = -897603973
size = 215
isKeyFrame = true
presentationTimeUs = 16134
sample:
trackIndex = 0
dataHashCode = 1478106136
size = 211
isKeyFrame = true
presentationTimeUs = 18572
sample:
trackIndex = 0
dataHashCode = -1380417145
size = 216
isKeyFrame = true
presentationTimeUs = 20964
sample:
trackIndex = 0
dataHashCode = 780903644
size = 229
isKeyFrame = true
presentationTimeUs = 23413
sample:
trackIndex = 0
dataHashCode = 586204432
size = 232
isKeyFrame = true
presentationTimeUs = 26010
sample:
trackIndex = 0
dataHashCode = -2038771492
size = 235
isKeyFrame = true
presentationTimeUs = 28640
sample:
trackIndex = 0
dataHashCode = -2065161304
size = 231
isKeyFrame = true
presentationTimeUs = 31304
sample:
trackIndex = 0
dataHashCode = 468662933
size = 226
isKeyFrame = true
presentationTimeUs = 33923
sample:
trackIndex = 0
dataHashCode = -358398546
size = 216
isKeyFrame = true
presentationTimeUs = 36486
sample:
trackIndex = 0
dataHashCode = 1767325983
size = 229
isKeyFrame = true
presentationTimeUs = 38935
sample:
trackIndex = 0
dataHashCode = 1093095458
size = 219
isKeyFrame = true
presentationTimeUs = 41531
sample:
trackIndex = 0
dataHashCode = 1687543702
size = 241
isKeyFrame = true
presentationTimeUs = 44014
sample:
trackIndex = 0
dataHashCode = 1675188486
size = 228
isKeyFrame = true
presentationTimeUs = 46747
sample:
trackIndex = 0
dataHashCode = 888567545
size = 238
isKeyFrame = true
presentationTimeUs = 49332
sample:
trackIndex = 0
dataHashCode = -439631803
size = 234
isKeyFrame = true
presentationTimeUs = 52030
sample:
trackIndex = 0
dataHashCode = 1606694497
size = 231
isKeyFrame = true
presentationTimeUs = 54683
sample:
trackIndex = 0
dataHashCode = 1747388653
size = 217
isKeyFrame = true
presentationTimeUs = 57302
sample:
trackIndex = 0
dataHashCode = -734560004
size = 239
isKeyFrame = true
presentationTimeUs = 59762
sample:
trackIndex = 0
dataHashCode = -975079040
size = 243
isKeyFrame = true
presentationTimeUs = 62472
sample:
trackIndex = 0
dataHashCode = -1403504710
size = 231
isKeyFrame = true
presentationTimeUs = 65227
sample:
trackIndex = 0
dataHashCode = 379512981
size = 230
isKeyFrame = true
presentationTimeUs = 67846
sample:
trackIndex = 0
dataHashCode = -997198863
size = 238
isKeyFrame = true
presentationTimeUs = 70454
sample:
trackIndex = 0
dataHashCode = 1394492825
size = 225
isKeyFrame = true
presentationTimeUs = 73152
sample:
trackIndex = 0
dataHashCode = -885232755
size = 232
isKeyFrame = true
presentationTimeUs = 75703
sample:
trackIndex = 0
dataHashCode = 260871367
size = 243
isKeyFrame = true
presentationTimeUs = 78334
sample:
trackIndex = 0
dataHashCode = -1505318960
size = 232
isKeyFrame = true
presentationTimeUs = 81089
sample:
trackIndex = 0
dataHashCode = -390625371
size = 237
isKeyFrame = true
presentationTimeUs = 83719
sample:
trackIndex = 0
dataHashCode = 1067950751
size = 228
isKeyFrame = true
presentationTimeUs = 86406
sample:
trackIndex = 0
dataHashCode = -1179436278
size = 235
isKeyFrame = true
presentationTimeUs = 88991
sample:
trackIndex = 0
dataHashCode = 1906607774
size = 264
isKeyFrame = true
presentationTimeUs = 91656
sample:
trackIndex = 0
dataHashCode = -800475828
size = 257
isKeyFrame = true
presentationTimeUs = 94649
sample:
trackIndex = 0
dataHashCode = 1718972977
size = 227
isKeyFrame = true
presentationTimeUs = 97563
sample:
trackIndex = 0
dataHashCode = -1120448741
size = 227
isKeyFrame = true
presentationTimeUs = 100137
sample:
trackIndex = 0
dataHashCode = -1718323210
size = 235
isKeyFrame = true
presentationTimeUs = 102710
sample:
trackIndex = 0
dataHashCode = -422416
size = 229
isKeyFrame = true
presentationTimeUs = 105375
sample:
trackIndex = 0
dataHashCode = 833757830
size = 6
isKeyFrame = true
presentationTimeUs = 107971
sample:
trackIndex = 0
dataHashCode = 1205768497
size = 23
isKeyFrame = true
presentationTimeUs = 108039
sample:
trackIndex = 0
dataHashCode = 837571078
size = 6
isKeyFrame = true
presentationTimeUs = 108300
sample:
trackIndex = 0
dataHashCode = -1991633045
size = 148
isKeyFrame = true
presentationTimeUs = 108368
sample:
trackIndex = 0
dataHashCode = -822987359
size = 189
isKeyFrame = true
presentationTimeUs = 110046
sample:
trackIndex = 0
dataHashCode = -1141508176
size = 205
isKeyFrame = true
presentationTimeUs = 112189
sample:
trackIndex = 0
dataHashCode = -226971245
size = 210
isKeyFrame = true
presentationTimeUs = 114513
sample:
trackIndex = 0
dataHashCode = -2099636855
size = 210
isKeyFrame = true
presentationTimeUs = 116894
sample:
trackIndex = 0
dataHashCode = 1541550559
size = 207
isKeyFrame = true
presentationTimeUs = 119275
sample:
trackIndex = 0
dataHashCode = 411148001
size = 225
isKeyFrame = true
presentationTimeUs = 121622
sample:
trackIndex = 0
dataHashCode = -897603973
size = 215
isKeyFrame = true
presentationTimeUs = 124173
sample:
trackIndex = 0
dataHashCode = 1478106136
size = 211
isKeyFrame = true
presentationTimeUs = 126610
sample:
trackIndex = 0
dataHashCode = -1380417145
size = 216
isKeyFrame = true
presentationTimeUs = 129003
sample:
trackIndex = 0
dataHashCode = 780903644
size = 229
isKeyFrame = true
presentationTimeUs = 131452
sample:
trackIndex = 0
dataHashCode = 586204432
size = 232
isKeyFrame = true
presentationTimeUs = 134048
sample:
trackIndex = 0
dataHashCode = -2038771492
size = 235
isKeyFrame = true
presentationTimeUs = 136679
sample:
trackIndex = 0
dataHashCode = -2065161304
size = 231
isKeyFrame = true
presentationTimeUs = 139343
sample:
trackIndex = 0
dataHashCode = 468662933
size = 226
isKeyFrame = true
presentationTimeUs = 141962
sample:
trackIndex = 0
dataHashCode = -358398546
size = 216
isKeyFrame = true
presentationTimeUs = 144524
sample:
trackIndex = 0
dataHashCode = 1767325983
size = 229
isKeyFrame = true
presentationTimeUs = 146973
sample:
trackIndex = 0
dataHashCode = 1093095458
size = 219
isKeyFrame = true
presentationTimeUs = 149570
sample:
trackIndex = 0
dataHashCode = 1687543702
size = 241
isKeyFrame = true
presentationTimeUs = 152053
sample:
trackIndex = 0
dataHashCode = 1675188486
size = 228
isKeyFrame = true
presentationTimeUs = 154785
sample:
trackIndex = 0
dataHashCode = 888567545
size = 238
isKeyFrame = true
presentationTimeUs = 157370
sample:
trackIndex = 0
dataHashCode = -439631803
size = 234
isKeyFrame = true
presentationTimeUs = 160069
sample:
trackIndex = 0
dataHashCode = 1606694497
size = 231
isKeyFrame = true
presentationTimeUs = 162722
sample:
trackIndex = 0
dataHashCode = 1747388653
size = 217
isKeyFrame = true
presentationTimeUs = 165341
sample:
trackIndex = 0
dataHashCode = -734560004
size = 239
isKeyFrame = true
presentationTimeUs = 167801
sample:
trackIndex = 0
dataHashCode = -975079040
size = 243
isKeyFrame = true
presentationTimeUs = 170511
sample:
trackIndex = 0
dataHashCode = -1403504710
size = 231
isKeyFrame = true
presentationTimeUs = 173266
sample:
trackIndex = 0
dataHashCode = 379512981
size = 230
isKeyFrame = true
presentationTimeUs = 175885
sample:
trackIndex = 0
dataHashCode = -997198863
size = 238
isKeyFrame = true
presentationTimeUs = 178493
sample:
trackIndex = 0
dataHashCode = 1394492825
size = 225
isKeyFrame = true
presentationTimeUs = 181191
sample:
trackIndex = 0
dataHashCode = -885232755
size = 232
isKeyFrame = true
presentationTimeUs = 183742
sample:
trackIndex = 0
dataHashCode = 260871367
size = 243
isKeyFrame = true
presentationTimeUs = 186372
sample:
trackIndex = 0
dataHashCode = -1505318960
size = 232
isKeyFrame = true
presentationTimeUs = 189127
sample:
trackIndex = 0
dataHashCode = -390625371
size = 237
isKeyFrame = true
presentationTimeUs = 191758
sample:
trackIndex = 0
dataHashCode = 1067950751
size = 228
isKeyFrame = true
presentationTimeUs = 194445
sample:
trackIndex = 0
dataHashCode = -1179436278
size = 235
isKeyFrame = true
presentationTimeUs = 197030
sample:
trackIndex = 0
dataHashCode = 1906607774
size = 264
isKeyFrame = true
presentationTimeUs = 199694
sample:
trackIndex = 0
dataHashCode = -800475828
size = 257
isKeyFrame = true
presentationTimeUs = 202688
sample:
trackIndex = 0
dataHashCode = 1718972977
size = 227
isKeyFrame = true
presentationTimeUs = 205601
sample:
trackIndex = 0
dataHashCode = -1120448741
size = 227
isKeyFrame = true
presentationTimeUs = 208175
sample:
trackIndex = 0
dataHashCode = -1718323210
size = 235
isKeyFrame = true
presentationTimeUs = 210749
sample:
trackIndex = 0
dataHashCode = -422416
size = 229
isKeyFrame = true
presentationTimeUs = 213413
sample:
trackIndex = 0
dataHashCode = 833757830
size = 6
isKeyFrame = true
presentationTimeUs = 216010
released = true