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
7a7d3d1b
authored
Nov 24, 2020
by
kimvde
Committed by
kim-vde
Nov 24, 2020
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Add FMP4 extractor test with sideloaded track
#exofixit PiperOrigin-RevId: 344052500
parent
a8365c2c
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
348 additions
and
1 deletions
library/extractor/src/test/java/com/google/android/exoplayer2/extractor/mp4/FragmentedMp4ExtractorNoSniffingTest.java
library/extractor/src/test/java/com/google/android/exoplayer2/extractor/mp4/FragmentedMp4ExtractorTest.java
testdata/src/test/assets/extractordumps/mp4/sample_fragmented_sideloaded_track.mp4.0.dump
testdata/src/test/assets/extractordumps/mp4/sample_fragmented_sideloaded_track.mp4.unknown_length.dump
testdata/src/test/assets/media/mp4/sample_fragmented_sideloaded_track.mp4
testutils/src/main/java/com/google/android/exoplayer2/testutil/ExtractorAsserts.java
library/extractor/src/test/java/com/google/android/exoplayer2/extractor/mp4/FragmentedMp4ExtractorNoSniffingTest.java
0 → 100644
View file @
7a7d3d1b
/*
* Copyright 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
com
.
google
.
android
.
exoplayer2
.
extractor
.
mp4
;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.Format
;
import
com.google.android.exoplayer2.testutil.ExtractorAsserts
;
import
com.google.android.exoplayer2.util.MimeTypes
;
import
java.util.List
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.robolectric.ParameterizedRobolectricTestRunner
;
import
org.robolectric.ParameterizedRobolectricTestRunner.Parameter
;
import
org.robolectric.ParameterizedRobolectricTestRunner.Parameters
;
/**
* Tests for {@link FragmentedMp4Extractor} that test behaviours where sniffing must not be tested.
*/
@RunWith
(
ParameterizedRobolectricTestRunner
.
class
)
public
class
FragmentedMp4ExtractorNoSniffingTest
{
@Parameters
(
name
=
"{0}"
)
public
static
List
<
Object
[]>
params
()
{
return
ExtractorAsserts
.
configsNoSniffing
();
}
@Parameter
public
ExtractorAsserts
.
SimulationConfig
simulationConfig
;
@Test
public
void
sampleWithSideLoadedTrack
()
throws
Exception
{
// Sideloaded tracks are generally used in Smooth Streaming, where the MP4 files do not contain
// any ftyp box and are not sniffed.
Track
sideloadedTrack
=
new
Track
(
/* id= */
1
,
/* type= */
C
.
TRACK_TYPE_VIDEO
,
/* timescale= */
30_000
,
/* movieTimescale= */
1000
,
/* durationUs= */
C
.
TIME_UNSET
,
new
Format
.
Builder
().
setSampleMimeType
(
MimeTypes
.
VIDEO_H264
).
build
(),
/* sampleTransformation= */
Track
.
TRANSFORMATION_NONE
,
/* sampleDescriptionEncryptionBoxes= */
null
,
/* nalUnitLengthFieldLength= */
4
,
/* editListDurations= */
null
,
/* editListMediaTimes= */
null
);
ExtractorAsserts
.
assertBehavior
(
()
->
new
FragmentedMp4Extractor
(
/* flags= */
0
,
/* timestampAdjuster= */
null
,
sideloadedTrack
),
"media/mp4/sample_fragmented_sideloaded_track.mp4"
,
simulationConfig
);
}
}
library/extractor/src/test/java/com/google/android/exoplayer2/extractor/mp4/FragmentedMp4ExtractorTest.java
View file @
7a7d3d1b
...
@@ -28,7 +28,7 @@ import org.robolectric.ParameterizedRobolectricTestRunner;
...
@@ -28,7 +28,7 @@ import org.robolectric.ParameterizedRobolectricTestRunner;
import
org.robolectric.ParameterizedRobolectricTestRunner.Parameter
;
import
org.robolectric.ParameterizedRobolectricTestRunner.Parameter
;
import
org.robolectric.ParameterizedRobolectricTestRunner.Parameters
;
import
org.robolectric.ParameterizedRobolectricTestRunner.Parameters
;
/**
Unit test for {@link FragmentedMp4Extractor}
. */
/**
Tests for {@link FragmentedMp4Extractor} that test behaviours where sniffing must be tested
. */
@RunWith
(
ParameterizedRobolectricTestRunner
.
class
)
@RunWith
(
ParameterizedRobolectricTestRunner
.
class
)
public
final
class
FragmentedMp4ExtractorTest
{
public
final
class
FragmentedMp4ExtractorTest
{
...
...
testdata/src/test/assets/extractordumps/mp4/sample_fragmented_sideloaded_track.mp4.0.dump
0 → 100644
View file @
7a7d3d1b
seekMap:
isSeekable = false
duration = UNSET TIME
getPosition(0) = [[timeUs=0, position=0]]
numberOfTracks = 1
track 0:
total output bytes = 85933
sample count = 30
format 0:
sampleMimeType = video/avc
sample 0:
time = 66733
flags = 1
data = length 38070, hash B58E1AEE
sample 1:
time = 200199
flags = 0
data = length 8340, hash 8AC449FF
sample 2:
time = 133466
flags = 0
data = length 1295, hash C0DA5090
sample 3:
time = 100100
flags = 0
data = length 469, hash D6E0A200
sample 4:
time = 166832
flags = 0
data = length 564, hash E5F56C5B
sample 5:
time = 333666
flags = 0
data = length 6075, hash 8756E49E
sample 6:
time = 266933
flags = 0
data = length 847, hash DCC2B618
sample 7:
time = 233566
flags = 0
data = length 455, hash B9CCE047
sample 8:
time = 300299
flags = 0
data = length 467, hash 69806D94
sample 9:
time = 467133
flags = 0
data = length 4549, hash 3944F501
sample 10:
time = 400399
flags = 0
data = length 1087, hash 491BF106
sample 11:
time = 367033
flags = 0
data = length 380, hash 5FED016A
sample 12:
time = 433766
flags = 0
data = length 455, hash 8A0610
sample 13:
time = 600599
flags = 0
data = length 5190, hash B9031D8
sample 14:
time = 533866
flags = 0
data = length 1071, hash 684E7DC8
sample 15:
time = 500500
flags = 0
data = length 653, hash 8494F326
sample 16:
time = 567232
flags = 0
data = length 485, hash 2CCC85F4
sample 17:
time = 734066
flags = 0
data = length 4884, hash D16B6A96
sample 18:
time = 667333
flags = 0
data = length 997, hash 164FF210
sample 19:
time = 633966
flags = 0
data = length 640, hash F664125B
sample 20:
time = 700699
flags = 0
data = length 491, hash B5930C7C
sample 21:
time = 867533
flags = 0
data = length 2989, hash 92CF4FCF
sample 22:
time = 800799
flags = 0
data = length 838, hash 294A3451
sample 23:
time = 767433
flags = 0
data = length 544, hash FCCE2DE6
sample 24:
time = 834166
flags = 0
data = length 329, hash A654FFA1
sample 25:
time = 1000999
flags = 0
data = length 1517, hash 5F7EBF8B
sample 26:
time = 934266
flags = 0
data = length 803, hash 7A5C4C1D
sample 27:
time = 900900
flags = 0
data = length 415, hash B31BBC3B
sample 28:
time = 967632
flags = 0
data = length 415, hash 850DFEA3
sample 29:
time = 1034366
flags = 0
data = length 619, hash AB5E56CA
tracksEnded = true
testdata/src/test/assets/extractordumps/mp4/sample_fragmented_sideloaded_track.mp4.unknown_length.dump
0 → 100644
View file @
7a7d3d1b
seekMap:
isSeekable = false
duration = UNSET TIME
getPosition(0) = [[timeUs=0, position=0]]
numberOfTracks = 1
track 0:
total output bytes = 85933
sample count = 30
format 0:
sampleMimeType = video/avc
sample 0:
time = 66733
flags = 1
data = length 38070, hash B58E1AEE
sample 1:
time = 200199
flags = 0
data = length 8340, hash 8AC449FF
sample 2:
time = 133466
flags = 0
data = length 1295, hash C0DA5090
sample 3:
time = 100100
flags = 0
data = length 469, hash D6E0A200
sample 4:
time = 166832
flags = 0
data = length 564, hash E5F56C5B
sample 5:
time = 333666
flags = 0
data = length 6075, hash 8756E49E
sample 6:
time = 266933
flags = 0
data = length 847, hash DCC2B618
sample 7:
time = 233566
flags = 0
data = length 455, hash B9CCE047
sample 8:
time = 300299
flags = 0
data = length 467, hash 69806D94
sample 9:
time = 467133
flags = 0
data = length 4549, hash 3944F501
sample 10:
time = 400399
flags = 0
data = length 1087, hash 491BF106
sample 11:
time = 367033
flags = 0
data = length 380, hash 5FED016A
sample 12:
time = 433766
flags = 0
data = length 455, hash 8A0610
sample 13:
time = 600599
flags = 0
data = length 5190, hash B9031D8
sample 14:
time = 533866
flags = 0
data = length 1071, hash 684E7DC8
sample 15:
time = 500500
flags = 0
data = length 653, hash 8494F326
sample 16:
time = 567232
flags = 0
data = length 485, hash 2CCC85F4
sample 17:
time = 734066
flags = 0
data = length 4884, hash D16B6A96
sample 18:
time = 667333
flags = 0
data = length 997, hash 164FF210
sample 19:
time = 633966
flags = 0
data = length 640, hash F664125B
sample 20:
time = 700699
flags = 0
data = length 491, hash B5930C7C
sample 21:
time = 867533
flags = 0
data = length 2989, hash 92CF4FCF
sample 22:
time = 800799
flags = 0
data = length 838, hash 294A3451
sample 23:
time = 767433
flags = 0
data = length 544, hash FCCE2DE6
sample 24:
time = 834166
flags = 0
data = length 329, hash A654FFA1
sample 25:
time = 1000999
flags = 0
data = length 1517, hash 5F7EBF8B
sample 26:
time = 934266
flags = 0
data = length 803, hash 7A5C4C1D
sample 27:
time = 900900
flags = 0
data = length 415, hash B31BBC3B
sample 28:
time = 967632
flags = 0
data = length 415, hash 850DFEA3
sample 29:
time = 1034366
flags = 0
data = length 619, hash AB5E56CA
tracksEnded = true
testdata/src/test/assets/media/mp4/sample_fragmented_sideloaded_track.mp4
0 → 100644
View file @
7a7d3d1b
No preview for this file type
testutils/src/main/java/com/google/android/exoplayer2/testutil/ExtractorAsserts.java
View file @
7a7d3d1b
...
@@ -61,6 +61,25 @@ public final class ExtractorAsserts {
...
@@ -61,6 +61,25 @@ public final class ExtractorAsserts {
new
Object
[]
{
new
SimulationConfig
(
false
,
false
,
false
,
false
)});
new
Object
[]
{
new
SimulationConfig
(
false
,
false
,
false
,
false
)});
}
}
/**
* Returns a list of arrays containing {@link SimulationConfig} objects to exercise different
* extractor paths in which the input is not sniffed.
*
* <p>This is intended to be used from tests using {@code ParameterizedRobolectricTestRunner} or
* {@code org.junit.runners.Parameterized}.
*/
public
static
List
<
Object
[]>
configsNoSniffing
()
{
return
Arrays
.
asList
(
new
Object
[]
{
new
SimulationConfig
(
false
,
false
,
false
,
false
)},
new
Object
[]
{
new
SimulationConfig
(
false
,
false
,
false
,
true
)},
new
Object
[]
{
new
SimulationConfig
(
false
,
false
,
true
,
false
)},
new
Object
[]
{
new
SimulationConfig
(
false
,
false
,
true
,
true
)},
new
Object
[]
{
new
SimulationConfig
(
false
,
true
,
false
,
false
)},
new
Object
[]
{
new
SimulationConfig
(
false
,
true
,
false
,
true
)},
new
Object
[]
{
new
SimulationConfig
(
false
,
true
,
true
,
false
)},
new
Object
[]
{
new
SimulationConfig
(
false
,
true
,
true
,
true
)});
}
/** A config of different environments to simulate and extractor behaviours to test. */
/** A config of different environments to simulate and extractor behaviours to test. */
public
static
class
SimulationConfig
{
public
static
class
SimulationConfig
{
...
...
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