From dc80cf32b6334843311e0e2401fe8d0f1b13a867 Mon Sep 17 00:00:00 2001 From: kimvde Date: Wed, 8 Apr 2020 15:50:14 +0100 Subject: [PATCH] Add TsExtractor tests for LATM and H264 PiperOrigin-RevId: 305475709 --- .../extractor/ts/TsExtractorTest.java | 14 +++- testdata/src/test/assets/ts/sample_h264.ts | Bin 0 -> 20492 bytes .../src/test/assets/ts/sample_h264.ts.0.dump | 61 ++++++++++++++++ .../src/test/assets/ts/sample_h264.ts.1.dump | 61 ++++++++++++++++ .../src/test/assets/ts/sample_h264.ts.2.dump | 61 ++++++++++++++++ .../src/test/assets/ts/sample_h264.ts.3.dump | 37 ++++++++++ .../ts/sample_h264.ts.unknown_length.dump | 58 ++++++++++++++++ testdata/src/test/assets/ts/sample_latm.ts | Bin 0 -> 50760 bytes .../src/test/assets/ts/sample_latm.ts.0.dump | 65 ++++++++++++++++++ .../src/test/assets/ts/sample_latm.ts.1.dump | 65 ++++++++++++++++++ .../src/test/assets/ts/sample_latm.ts.2.dump | 65 ++++++++++++++++++ .../src/test/assets/ts/sample_latm.ts.3.dump | 65 ++++++++++++++++++ .../ts/sample_latm.ts.unknown_length.dump | 62 +++++++++++++++++ 13 files changed, 612 insertions(+), 2 deletions(-) create mode 100644 testdata/src/test/assets/ts/sample_h264.ts create mode 100644 testdata/src/test/assets/ts/sample_h264.ts.0.dump create mode 100644 testdata/src/test/assets/ts/sample_h264.ts.1.dump create mode 100644 testdata/src/test/assets/ts/sample_h264.ts.2.dump create mode 100644 testdata/src/test/assets/ts/sample_h264.ts.3.dump create mode 100644 testdata/src/test/assets/ts/sample_h264.ts.unknown_length.dump create mode 100644 testdata/src/test/assets/ts/sample_latm.ts create mode 100644 testdata/src/test/assets/ts/sample_latm.ts.0.dump create mode 100644 testdata/src/test/assets/ts/sample_latm.ts.1.dump create mode 100644 testdata/src/test/assets/ts/sample_latm.ts.2.dump create mode 100644 testdata/src/test/assets/ts/sample_latm.ts.3.dump create mode 100644 testdata/src/test/assets/ts/sample_latm.ts.unknown_length.dump diff --git a/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/ts/TsExtractorTest.java b/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/ts/TsExtractorTest.java index 3830a1036f..26ad5cdafa 100644 --- a/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/ts/TsExtractorTest.java +++ b/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/ts/TsExtractorTest.java @@ -49,12 +49,12 @@ public final class TsExtractorTest { } @Test - public void sampleScte35() throws Exception { + public void sampleWithScte35() throws Exception { ExtractorAsserts.assertBehavior(TsExtractor::new, "ts/sample_scte35.ts"); } @Test - public void withAit() throws Exception { + public void sampleWithAit() throws Exception { ExtractorAsserts.assertBehavior(TsExtractor::new, "ts/sample_ait.ts"); } @@ -78,6 +78,16 @@ public final class TsExtractorTest { ExtractorAsserts.assertBehavior(TsExtractor::new, "ts/sample_eac3joc.ts"); } + @Test + public void sampleWithH264() throws Exception { + ExtractorAsserts.assertBehavior(TsExtractor::new, "ts/sample_h264.ts"); + } + + @Test + public void sampleWithLatm() throws Exception { + ExtractorAsserts.assertBehavior(TsExtractor::new, "ts/sample_latm.ts"); + } + @Test public void streamWithJunkData() throws Exception { ExtractorAsserts.assertBehavior( diff --git a/testdata/src/test/assets/ts/sample_h264.ts b/testdata/src/test/assets/ts/sample_h264.ts new file mode 100644 index 0000000000000000000000000000000000000000..dabf547e19a62a7e205c070abcb1ad358287ab99 GIT binary patch literal 20492 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 P&#fQ8&d>fQoxlHIeQBX^ literal 0 HcmV?d00001 diff --git a/testdata/src/test/assets/ts/sample_h264.ts.0.dump b/testdata/src/test/assets/ts/sample_h264.ts.0.dump new file mode 100644 index 0000000000..49ec76ee00 --- /dev/null +++ b/testdata/src/test/assets/ts/sample_h264.ts.0.dump @@ -0,0 +1,61 @@ +seekMap: + isSeekable = true + duration = 66733 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(33366) = [[timeUs=33366, position=9545]] + getPosition(66733) = [[timeUs=66733, position=19279]] +numberOfTracks = 3 +track 256: + total output bytes = 13650 + sample count = 2 + format 0: + id = 1/256 + sampleMimeType = video/avc + codecs = avc1.64001E + width = 640 + height = 426 + initializationData: + data = length 29, hash 4C2CAE9C + data = length 9, hash D971CD89 + sample 0: + time = 66733 + flags = 1 + data = length 12394, hash A39F5311 + sample 1: + time = 100100 + flags = 0 + data = length 813, hash 99F7B4FA +track 257: + total output bytes = 5015 + sample count = 4 + format 0: + id = 1/257 + sampleMimeType = audio/mpeg-L2 + maxInputSize = 4096 + channelCount = 1 + sampleRate = 44100 + language = und + sample 0: + time = 66733 + flags = 1 + data = length 1253, hash 727FD1C6 + sample 1: + time = 92855 + flags = 1 + data = length 1254, hash 73FB07B8 + sample 2: + time = 118977 + flags = 1 + data = length 1254, hash 73FB07B8 + sample 3: + time = 145099 + flags = 1 + data = length 1254, hash 73FB07B8 +track 8448: + total output bytes = 0 + sample count = 0 + format 0: + id = 1/8448 + sampleMimeType = application/cea-608 +tracksEnded = true diff --git a/testdata/src/test/assets/ts/sample_h264.ts.1.dump b/testdata/src/test/assets/ts/sample_h264.ts.1.dump new file mode 100644 index 0000000000..ddd38b6597 --- /dev/null +++ b/testdata/src/test/assets/ts/sample_h264.ts.1.dump @@ -0,0 +1,61 @@ +seekMap: + isSeekable = true + duration = 66733 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(33366) = [[timeUs=33366, position=9545]] + getPosition(66733) = [[timeUs=66733, position=19279]] +numberOfTracks = 3 +track 256: + total output bytes = 13650 + sample count = 2 + format 0: + id = 1/256 + sampleMimeType = video/avc + codecs = avc1.64001E + width = 640 + height = 426 + initializationData: + data = length 29, hash 4C2CAE9C + data = length 9, hash D971CD89 + sample 0: + time = 88977 + flags = 1 + data = length 12394, hash A39F5311 + sample 1: + time = 122344 + flags = 0 + data = length 813, hash 99F7B4FA +track 257: + total output bytes = 5015 + sample count = 4 + format 0: + id = 1/257 + sampleMimeType = audio/mpeg-L2 + maxInputSize = 4096 + channelCount = 1 + sampleRate = 44100 + language = und + sample 0: + time = 88977 + flags = 1 + data = length 1253, hash 727FD1C6 + sample 1: + time = 115099 + flags = 1 + data = length 1254, hash 73FB07B8 + sample 2: + time = 141221 + flags = 1 + data = length 1254, hash 73FB07B8 + sample 3: + time = 167343 + flags = 1 + data = length 1254, hash 73FB07B8 +track 8448: + total output bytes = 0 + sample count = 0 + format 0: + id = 1/8448 + sampleMimeType = application/cea-608 +tracksEnded = true diff --git a/testdata/src/test/assets/ts/sample_h264.ts.2.dump b/testdata/src/test/assets/ts/sample_h264.ts.2.dump new file mode 100644 index 0000000000..53290c3fa3 --- /dev/null +++ b/testdata/src/test/assets/ts/sample_h264.ts.2.dump @@ -0,0 +1,61 @@ +seekMap: + isSeekable = true + duration = 66733 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(33366) = [[timeUs=33366, position=9545]] + getPosition(66733) = [[timeUs=66733, position=19279]] +numberOfTracks = 3 +track 256: + total output bytes = 13650 + sample count = 2 + format 0: + id = 1/256 + sampleMimeType = video/avc + codecs = avc1.64001E + width = 640 + height = 426 + initializationData: + data = length 29, hash 4C2CAE9C + data = length 9, hash D971CD89 + sample 0: + time = 111221 + flags = 1 + data = length 12394, hash A39F5311 + sample 1: + time = 144588 + flags = 0 + data = length 813, hash 99F7B4FA +track 257: + total output bytes = 5015 + sample count = 4 + format 0: + id = 1/257 + sampleMimeType = audio/mpeg-L2 + maxInputSize = 4096 + channelCount = 1 + sampleRate = 44100 + language = und + sample 0: + time = 111221 + flags = 1 + data = length 1253, hash 727FD1C6 + sample 1: + time = 137343 + flags = 1 + data = length 1254, hash 73FB07B8 + sample 2: + time = 163465 + flags = 1 + data = length 1254, hash 73FB07B8 + sample 3: + time = 189587 + flags = 1 + data = length 1254, hash 73FB07B8 +track 8448: + total output bytes = 0 + sample count = 0 + format 0: + id = 1/8448 + sampleMimeType = application/cea-608 +tracksEnded = true diff --git a/testdata/src/test/assets/ts/sample_h264.ts.3.dump b/testdata/src/test/assets/ts/sample_h264.ts.3.dump new file mode 100644 index 0000000000..2be5c14165 --- /dev/null +++ b/testdata/src/test/assets/ts/sample_h264.ts.3.dump @@ -0,0 +1,37 @@ +seekMap: + isSeekable = true + duration = 66733 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(33366) = [[timeUs=33366, position=9545]] + getPosition(66733) = [[timeUs=66733, position=19279]] +numberOfTracks = 3 +track 256: + total output bytes = 0 + sample count = 0 + format 0: + id = 1/256 + sampleMimeType = video/avc + codecs = avc1.64001E + width = 640 + height = 426 + initializationData: + data = length 29, hash 4C2CAE9C + data = length 9, hash D971CD89 +track 257: + total output bytes = 0 + sample count = 0 + format 0: + id = 1/257 + sampleMimeType = audio/mpeg-L2 + maxInputSize = 4096 + channelCount = 1 + sampleRate = 44100 + language = und +track 8448: + total output bytes = 0 + sample count = 0 + format 0: + id = 1/8448 + sampleMimeType = application/cea-608 +tracksEnded = true diff --git a/testdata/src/test/assets/ts/sample_h264.ts.unknown_length.dump b/testdata/src/test/assets/ts/sample_h264.ts.unknown_length.dump new file mode 100644 index 0000000000..86327e7fa8 --- /dev/null +++ b/testdata/src/test/assets/ts/sample_h264.ts.unknown_length.dump @@ -0,0 +1,58 @@ +seekMap: + isSeekable = false + duration = UNSET TIME + getPosition(0) = [[timeUs=0, position=0]] +numberOfTracks = 3 +track 256: + total output bytes = 13650 + sample count = 2 + format 0: + id = 1/256 + sampleMimeType = video/avc + codecs = avc1.64001E + width = 640 + height = 426 + initializationData: + data = length 29, hash 4C2CAE9C + data = length 9, hash D971CD89 + sample 0: + time = 66733 + flags = 1 + data = length 12394, hash A39F5311 + sample 1: + time = 100100 + flags = 0 + data = length 813, hash 99F7B4FA +track 257: + total output bytes = 5015 + sample count = 4 + format 0: + id = 1/257 + sampleMimeType = audio/mpeg-L2 + maxInputSize = 4096 + channelCount = 1 + sampleRate = 44100 + language = und + sample 0: + time = 66733 + flags = 1 + data = length 1253, hash 727FD1C6 + sample 1: + time = 92855 + flags = 1 + data = length 1254, hash 73FB07B8 + sample 2: + time = 118977 + flags = 1 + data = length 1254, hash 73FB07B8 + sample 3: + time = 145099 + flags = 1 + data = length 1254, hash 73FB07B8 +track 8448: + total output bytes = 0 + sample count = 0 + format 0: + id = 1/8448 + sampleMimeType = application/cea-608 +tracksEnded = true diff --git a/testdata/src/test/assets/ts/sample_latm.ts b/testdata/src/test/assets/ts/sample_latm.ts new file mode 100644 index 0000000000000000000000000000000000000000..6a5be6784aef9f351d8ac9251da2e4e98e16ed69 GIT binary patch literal 50760 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 R{!hmD|J!H(d+$F4{3jtIK|cTh literal 0 HcmV?d00001 diff --git a/testdata/src/test/assets/ts/sample_latm.ts.0.dump b/testdata/src/test/assets/ts/sample_latm.ts.0.dump new file mode 100644 index 0000000000..a835568cd3 --- /dev/null +++ b/testdata/src/test/assets/ts/sample_latm.ts.0.dump @@ -0,0 +1,65 @@ +seekMap: + isSeekable = true + duration = 0 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(0) = [[timeUs=0, position=0]] + getPosition(0) = [[timeUs=0, position=0]] +numberOfTracks = 3 +track 256: + total output bytes = 45026 + sample count = 2 + format 0: + id = 1/256 + sampleMimeType = video/mpeg2 + width = 640 + height = 426 + initializationData: + data = length 22, hash CE183139 + sample 0: + time = 33367 + flags = 1 + data = length 20711, hash 34341E8 + sample 1: + time = 66733 + flags = 0 + data = length 18112, hash EC44B35B +track 257: + total output bytes = 1396 + sample count = 5 + format 0: + id = 1/257 + sampleMimeType = audio/mp4a-latm + codecs = mp4a.40.5 + channelCount = 1 + sampleRate = 44100 + language = und + initializationData: + data = length 4, hash 1FE978 + sample 0: + time = -92233 + flags = 1 + data = length 279, hash 79BF9F9B + sample 1: + time = -69014 + flags = 1 + data = length 279, hash C96F4684 + sample 2: + time = -45795 + flags = 1 + data = length 279, hash 65670B86 + sample 3: + time = -22576 + flags = 1 + data = length 280, hash 1AF29BCE + sample 4: + time = 643 + flags = 1 + data = length 279, hash C96F4684 +track 8448: + total output bytes = 0 + sample count = 0 + format 0: + id = 1/8448 + sampleMimeType = application/cea-608 +tracksEnded = true diff --git a/testdata/src/test/assets/ts/sample_latm.ts.1.dump b/testdata/src/test/assets/ts/sample_latm.ts.1.dump new file mode 100644 index 0000000000..a835568cd3 --- /dev/null +++ b/testdata/src/test/assets/ts/sample_latm.ts.1.dump @@ -0,0 +1,65 @@ +seekMap: + isSeekable = true + duration = 0 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(0) = [[timeUs=0, position=0]] + getPosition(0) = [[timeUs=0, position=0]] +numberOfTracks = 3 +track 256: + total output bytes = 45026 + sample count = 2 + format 0: + id = 1/256 + sampleMimeType = video/mpeg2 + width = 640 + height = 426 + initializationData: + data = length 22, hash CE183139 + sample 0: + time = 33367 + flags = 1 + data = length 20711, hash 34341E8 + sample 1: + time = 66733 + flags = 0 + data = length 18112, hash EC44B35B +track 257: + total output bytes = 1396 + sample count = 5 + format 0: + id = 1/257 + sampleMimeType = audio/mp4a-latm + codecs = mp4a.40.5 + channelCount = 1 + sampleRate = 44100 + language = und + initializationData: + data = length 4, hash 1FE978 + sample 0: + time = -92233 + flags = 1 + data = length 279, hash 79BF9F9B + sample 1: + time = -69014 + flags = 1 + data = length 279, hash C96F4684 + sample 2: + time = -45795 + flags = 1 + data = length 279, hash 65670B86 + sample 3: + time = -22576 + flags = 1 + data = length 280, hash 1AF29BCE + sample 4: + time = 643 + flags = 1 + data = length 279, hash C96F4684 +track 8448: + total output bytes = 0 + sample count = 0 + format 0: + id = 1/8448 + sampleMimeType = application/cea-608 +tracksEnded = true diff --git a/testdata/src/test/assets/ts/sample_latm.ts.2.dump b/testdata/src/test/assets/ts/sample_latm.ts.2.dump new file mode 100644 index 0000000000..a835568cd3 --- /dev/null +++ b/testdata/src/test/assets/ts/sample_latm.ts.2.dump @@ -0,0 +1,65 @@ +seekMap: + isSeekable = true + duration = 0 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(0) = [[timeUs=0, position=0]] + getPosition(0) = [[timeUs=0, position=0]] +numberOfTracks = 3 +track 256: + total output bytes = 45026 + sample count = 2 + format 0: + id = 1/256 + sampleMimeType = video/mpeg2 + width = 640 + height = 426 + initializationData: + data = length 22, hash CE183139 + sample 0: + time = 33367 + flags = 1 + data = length 20711, hash 34341E8 + sample 1: + time = 66733 + flags = 0 + data = length 18112, hash EC44B35B +track 257: + total output bytes = 1396 + sample count = 5 + format 0: + id = 1/257 + sampleMimeType = audio/mp4a-latm + codecs = mp4a.40.5 + channelCount = 1 + sampleRate = 44100 + language = und + initializationData: + data = length 4, hash 1FE978 + sample 0: + time = -92233 + flags = 1 + data = length 279, hash 79BF9F9B + sample 1: + time = -69014 + flags = 1 + data = length 279, hash C96F4684 + sample 2: + time = -45795 + flags = 1 + data = length 279, hash 65670B86 + sample 3: + time = -22576 + flags = 1 + data = length 280, hash 1AF29BCE + sample 4: + time = 643 + flags = 1 + data = length 279, hash C96F4684 +track 8448: + total output bytes = 0 + sample count = 0 + format 0: + id = 1/8448 + sampleMimeType = application/cea-608 +tracksEnded = true diff --git a/testdata/src/test/assets/ts/sample_latm.ts.3.dump b/testdata/src/test/assets/ts/sample_latm.ts.3.dump new file mode 100644 index 0000000000..a835568cd3 --- /dev/null +++ b/testdata/src/test/assets/ts/sample_latm.ts.3.dump @@ -0,0 +1,65 @@ +seekMap: + isSeekable = true + duration = 0 + getPosition(0) = [[timeUs=0, position=0]] + getPosition(1) = [[timeUs=1, position=0]] + getPosition(0) = [[timeUs=0, position=0]] + getPosition(0) = [[timeUs=0, position=0]] +numberOfTracks = 3 +track 256: + total output bytes = 45026 + sample count = 2 + format 0: + id = 1/256 + sampleMimeType = video/mpeg2 + width = 640 + height = 426 + initializationData: + data = length 22, hash CE183139 + sample 0: + time = 33367 + flags = 1 + data = length 20711, hash 34341E8 + sample 1: + time = 66733 + flags = 0 + data = length 18112, hash EC44B35B +track 257: + total output bytes = 1396 + sample count = 5 + format 0: + id = 1/257 + sampleMimeType = audio/mp4a-latm + codecs = mp4a.40.5 + channelCount = 1 + sampleRate = 44100 + language = und + initializationData: + data = length 4, hash 1FE978 + sample 0: + time = -92233 + flags = 1 + data = length 279, hash 79BF9F9B + sample 1: + time = -69014 + flags = 1 + data = length 279, hash C96F4684 + sample 2: + time = -45795 + flags = 1 + data = length 279, hash 65670B86 + sample 3: + time = -22576 + flags = 1 + data = length 280, hash 1AF29BCE + sample 4: + time = 643 + flags = 1 + data = length 279, hash C96F4684 +track 8448: + total output bytes = 0 + sample count = 0 + format 0: + id = 1/8448 + sampleMimeType = application/cea-608 +tracksEnded = true diff --git a/testdata/src/test/assets/ts/sample_latm.ts.unknown_length.dump b/testdata/src/test/assets/ts/sample_latm.ts.unknown_length.dump new file mode 100644 index 0000000000..cf7c502825 --- /dev/null +++ b/testdata/src/test/assets/ts/sample_latm.ts.unknown_length.dump @@ -0,0 +1,62 @@ +seekMap: + isSeekable = false + duration = UNSET TIME + getPosition(0) = [[timeUs=0, position=0]] +numberOfTracks = 3 +track 256: + total output bytes = 45026 + sample count = 2 + format 0: + id = 1/256 + sampleMimeType = video/mpeg2 + width = 640 + height = 426 + initializationData: + data = length 22, hash CE183139 + sample 0: + time = 33367 + flags = 1 + data = length 20711, hash 34341E8 + sample 1: + time = 66733 + flags = 0 + data = length 18112, hash EC44B35B +track 257: + total output bytes = 1396 + sample count = 5 + format 0: + id = 1/257 + sampleMimeType = audio/mp4a-latm + codecs = mp4a.40.5 + channelCount = 1 + sampleRate = 44100 + language = und + initializationData: + data = length 4, hash 1FE978 + sample 0: + time = -92233 + flags = 1 + data = length 279, hash 79BF9F9B + sample 1: + time = -69014 + flags = 1 + data = length 279, hash C96F4684 + sample 2: + time = -45795 + flags = 1 + data = length 279, hash 65670B86 + sample 3: + time = -22576 + flags = 1 + data = length 280, hash 1AF29BCE + sample 4: + time = 643 + flags = 1 + data = length 279, hash C96F4684 +track 8448: + total output bytes = 0 + sample count = 0 + format 0: + id = 1/8448 + sampleMimeType = application/cea-608 +tracksEnded = true