Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
SDK
/
exoplayer
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
45c42ed3
authored
Feb 08, 2023
by
kimvde
Committed by
microkatz
Feb 08, 2023
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Add an API entry point to pass a Composition
PiperOrigin-RevId: 508031337
parent
79b688ef
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
1592 additions
and
24 deletions
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/Transformer.java
library/transformer/src/test/java/com/google/android/exoplayer2/transformer/TransformerEndToEndTest.java
testdata/src/test/assets/transformerdumps/mp4/sample.mp4.concatenated.dump
testdata/src/test/assets/transformerdumps/mp4/sample.mp4.silence_skipped_concatenated.dump
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/Transformer.java
View file @
45c42ed3
...
@@ -16,6 +16,7 @@
...
@@ -16,6 +16,7 @@
package
com
.
google
.
android
.
exoplayer2
.
transformer
;
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
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkState
;
import
static
java
.
lang
.
annotation
.
ElementType
.
TYPE_USE
;
import
static
java
.
lang
.
annotation
.
ElementType
.
TYPE_USE
;
...
@@ -674,38 +675,55 @@ public final class Transformer {
...
@@ -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)
* <p>The export state is notified through the {@linkplain Builder#addListener(Listener)
* listener}.
* listener}.
*
*
* <p>Concurrent exports on the same Transformer object are not allowed.
* <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
* <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
* ignored. For adaptive bitrate inputs, if no custom {@link
* highest bitrate video and audio streams are selected.
* Transformer.Builder#setAssetLoaderFactory(AssetLoader.Factory) AssetLoader.Factory} is
* specified, the highest bitrate video and audio streams are selected.
*
*
* <p>If e
ncoding the output's video track is needed
, the output frames' dimensions will be
* <p>If e
xporting the video track entails transcoding
, the output frames' dimensions will be
* swapped if the
height is larger than the width. This is to improve compatibility among
* swapped if the
output video's height is larger than the width. This is to improve compatibility
* different device encoders.
*
among
different device encoders.
*
*
* @param editedMediaItem The {@link MediaItem} to export, with the transformations to apply to
* @param composition The {@link Composition} to export.
* it.
* @param path The path to the output file.
* @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 this method is called from the wrong thread.
* @throws IllegalStateException If an export is already in progress.
* @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
();
verifyApplicationThread
();
if
(
transformerInternal
!=
null
)
{
checkState
(
transformerInternal
==
null
,
"There is already a export in progress."
);
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
);
TransformerInternalListener
transformerInternalListener
=
TransformerInternalListener
transformerInternalListener
=
new
TransformerInternalListener
(
composition
);
new
TransformerInternalListener
(
composition
);
HandlerWrapper
applicationHandler
=
clock
.
createHandler
(
looper
,
/* callback= */
null
);
HandlerWrapper
applicationHandler
=
clock
.
createHandler
(
looper
,
/* callback= */
null
);
...
@@ -730,6 +748,37 @@ public final class Transformer {
...
@@ -730,6 +748,37 @@ public final class Transformer {
}
}
/**
/**
* 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}.
* Starts an asynchronous operation to export the given {@link MediaItem}.
*
*
* <p>The export state is notified through the {@linkplain Builder#addListener(Listener)
* <p>The export state is notified through the {@linkplain Builder#addListener(Listener)
...
@@ -737,19 +786,20 @@ public final class Transformer {
...
@@ -737,19 +786,20 @@ public final class Transformer {
*
*
* <p>Concurrent exports on the same Transformer object are not allowed.
* <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
* <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
* ignored. For adaptive bitrate inputs, if no custom {@link
* highest bitrate video and audio streams are selected.
* Transformer.Builder#setAssetLoaderFactory(AssetLoader.Factory) AssetLoader.Factory} is
* specified, the highest bitrate video and audio streams are selected.
*
*
* <p>If e
ncoding the output's video track is needed
, the output frames' dimensions will be
* <p>If e
xporting the video track entails transcoding
, the output frames' dimensions will be
* swapped if the
height is larger than the width. This is to improve compatibility among
* swapped if the
output video's height is larger than the width. This is to improve compatibility
* different device encoders.
*
among
different device encoders.
*
*
* @param mediaItem The {@link MediaItem} to export.
* @param mediaItem The {@link MediaItem} to export.
* @param path The path to the output file.
* @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 IllegalArgumentException If the {@link MediaItem} is not supported.
* @throws IllegalStateException If this method is called from the wrong thread.
* @throws IllegalStateException If this method is called from the wrong thread.
* @throws IllegalStateException If an export is already in progress.
* @throws IllegalStateException If an export is already in progress.
...
...
library/transformer/src/test/java/com/google/android/exoplayer2/transformer/TransformerEndToEndTest.java
View file @
45c42ed3
...
@@ -47,6 +47,7 @@ import com.google.android.exoplayer2.C;
...
@@ -47,6 +47,7 @@ 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.audio.AudioProcessor
;
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.audio.SonicAudioProcessor
;
import
com.google.android.exoplayer2.effect.Presentation
;
import
com.google.android.exoplayer2.effect.Presentation
;
import
com.google.android.exoplayer2.effect.ScaleToFitTransformation
;
import
com.google.android.exoplayer2.effect.ScaleToFitTransformation
;
...
@@ -376,6 +377,53 @@ public final class TransformerEndToEndTest {
...
@@ -376,6 +377,53 @@ public final class TransformerEndToEndTest {
}
}
@Test
@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
{
public
void
startTransformation_withMultipleListeners_callsEachOnCompletion
()
throws
Exception
{
Transformer
.
Listener
mockListener1
=
mock
(
Transformer
.
Listener
.
class
);
Transformer
.
Listener
mockListener1
=
mock
(
Transformer
.
Listener
.
class
);
Transformer
.
Listener
mockListener2
=
mock
(
Transformer
.
Listener
.
class
);
Transformer
.
Listener
mockListener2
=
mock
(
Transformer
.
Listener
.
class
);
...
...
testdata/src/test/assets/transformerdumps/mp4/sample.mp4.concatenated.dump
0 → 100644
View file @
45c42ed3
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
testdata/src/test/assets/transformerdumps/mp4/sample.mp4.silence_skipped_concatenated.dump
0 → 100644
View file @
45c42ed3
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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment