From bbd5e074ee351e0b07cc8e474f7abf8038979aec Mon Sep 17 00:00:00 2001 From: KongQun Yang Date: Tue, 1 May 2018 11:18:19 -0700 Subject: [PATCH] Add a test outputing DASH and HLS at the same time Change-Id: I38c0ca9ed206536a4fd84e8c9c074609250013cc --- packager/app/test/packager_test.py | 181 +++++++++++------- .../bear-640x360-audio-3.m4s | Bin 0 -> 8088 bytes .../bear-640x360-audio-4.m4s | Bin 0 -> 8462 bytes .../bear-640x360-audio-5.m4s | Bin 0 -> 8086 bytes .../bear-640x360-audio-6.m4s | Bin 0 -> 2851 bytes .../bear-640x360-audio-init.mp4 | Bin 0 -> 754 bytes .../bear-640x360-audio.m3u8 | 12 ++ .../output.m3u8 | 4 + .../output.mpd | 18 ++ .../testdata/flac-with-encryption/output.m3u8 | 4 + .../flac-with-encryption/stream_0.m3u8 | 17 ++ .../live-profile-with-webm/output.m3u8 | 7 + .../live-profile-with-webm/stream_0.m3u8 | 13 ++ .../live-profile-with-webm/stream_1.m3u8 | 13 ++ 14 files changed, 197 insertions(+), 72 deletions(-) create mode 100644 packager/app/test/testdata/avc-ts-live-playlist-dash-dynamic-with-segment-deletion/bear-640x360-audio-3.m4s create mode 100644 packager/app/test/testdata/avc-ts-live-playlist-dash-dynamic-with-segment-deletion/bear-640x360-audio-4.m4s create mode 100644 packager/app/test/testdata/avc-ts-live-playlist-dash-dynamic-with-segment-deletion/bear-640x360-audio-5.m4s create mode 100644 packager/app/test/testdata/avc-ts-live-playlist-dash-dynamic-with-segment-deletion/bear-640x360-audio-6.m4s create mode 100644 packager/app/test/testdata/avc-ts-live-playlist-dash-dynamic-with-segment-deletion/bear-640x360-audio-init.mp4 create mode 100644 packager/app/test/testdata/avc-ts-live-playlist-dash-dynamic-with-segment-deletion/bear-640x360-audio.m3u8 create mode 100644 packager/app/test/testdata/avc-ts-live-playlist-dash-dynamic-with-segment-deletion/output.m3u8 create mode 100644 packager/app/test/testdata/avc-ts-live-playlist-dash-dynamic-with-segment-deletion/output.mpd create mode 100644 packager/app/test/testdata/flac-with-encryption/output.m3u8 create mode 100644 packager/app/test/testdata/flac-with-encryption/stream_0.m3u8 create mode 100644 packager/app/test/testdata/live-profile-with-webm/output.m3u8 create mode 100644 packager/app/test/testdata/live-profile-with-webm/stream_0.m3u8 create mode 100644 packager/app/test/testdata/live-profile-with-webm/stream_1.m3u8 diff --git a/packager/app/test/packager_test.py b/packager/app/test/packager_test.py index 9f08dd55f9..99716f242c 100755 --- a/packager/app/test/packager_test.py +++ b/packager/app/test/packager_test.py @@ -277,6 +277,7 @@ class PackagerAppTest(unittest.TestCase): dash_if_iop=True, output_media_info=False, output_hls=False, + output_dash=False, hls_playlist_type=None, time_shift_buffer_depth=0.0, preserved_segments_outside_live_window=0, @@ -338,13 +339,14 @@ class PackagerAppTest(unittest.TestCase): if not dash_if_iop: flags.append('--generate_dash_if_iop_compliant_mpd=false') + if output_media_info: flags.append('--output_media_info') - elif output_hls: + if output_hls: flags += ['--hls_master_playlist_output', self.hls_master_playlist_output] if hls_playlist_type: flags += ['--hls_playlist_type', hls_playlist_type] - else: + if output_dash: flags += ['--mpd_output', self.mpd_output] if time_shift_buffer_depth != 0.0: @@ -551,19 +553,20 @@ class PackagerFunctionalTest(PackagerAppTest): (expected_stream_info, stream_info)) def testPackageFirstStream(self): - self.assertPackageSuccess(self._GetStreams(['0']), self._GetFlags()) + self.assertPackageSuccess( + self._GetStreams(['0']), self._GetFlags(output_dash=True)) self._CheckTestResults('first-stream') def testPackageText(self): self.assertPackageSuccess( self._GetStreams(['text'], test_files=['subtitle-english.vtt']), - self._GetFlags()) + self._GetFlags(output_dash=True)) self._CheckTestResults('text') # Probably one of the most common scenarios is to package audio and video. def testPackageAudioVideo(self): self.assertPackageSuccess( - self._GetStreams(['audio', 'video']), self._GetFlags()) + self._GetStreams(['audio', 'video']), self._GetFlags(output_dash=True)) self._CheckTestResults('audio-video') def testPackageAudioVideoWithTrickPlay(self): @@ -573,7 +576,7 @@ class PackagerFunctionalTest(PackagerAppTest): self._GetStream('video', trick_play_factor=1), ] - self.assertPackageSuccess(streams, self._GetFlags()) + self.assertPackageSuccess(streams, self._GetFlags(output_dash=True)) self._CheckTestResults('audio-video-with-trick-play') def testPackageAudioVideoWithTwoTrickPlay(self): @@ -584,7 +587,7 @@ class PackagerFunctionalTest(PackagerAppTest): self._GetStream('video', trick_play_factor=2), ] - self.assertPackageSuccess(streams, self._GetFlags()) + self.assertPackageSuccess(streams, self._GetFlags(output_dash=True)) self._CheckTestResults('audio-video-with-two-trick-play') def testPackageAudioVideoWithTwoTrickPlayDecreasingRate(self): @@ -595,7 +598,7 @@ class PackagerFunctionalTest(PackagerAppTest): self._GetStream('video', trick_play_factor=1), ] - self.assertPackageSuccess(streams, self._GetFlags()) + self.assertPackageSuccess(streams, self._GetFlags(output_dash=True)) # Since the stream descriptors are sorted in packager app, a different # order of trick play factors gets the same mpd. self._CheckTestResults('audio-video-with-two-trick-play') @@ -603,38 +606,38 @@ class PackagerFunctionalTest(PackagerAppTest): def testPackageAudioVideoWithLanguageOverride(self): self.assertPackageSuccess( self._GetStreams(['audio', 'video'], language='por'), - self._GetFlags(default_language='por')) + self._GetFlags(default_language='por', output_dash=True)) self._CheckTestResults('audio-video-with-language-override') def testPackageAudioVideoWithLanguageOverrideUsingMixingCode(self): self.assertPackageSuccess( self._GetStreams(['audio', 'video'], language='por'), - self._GetFlags(default_language='pt')) + self._GetFlags(default_language='pt', output_dash=True)) self._CheckTestResults('audio-video-with-language-override') def testPackageAudioVideoWithLanguageOverrideUsingMixingCode2(self): self.assertPackageSuccess( self._GetStreams(['audio', 'video'], language='pt'), - self._GetFlags(default_language='por')) + self._GetFlags(default_language='por', output_dash=True)) self._CheckTestResults('audio-video-with-language-override') def testPackageAudioVideoWithLanguageOverrideUsingTwoCharacterCode(self): self.assertPackageSuccess( self._GetStreams(['audio', 'video'], language='pt'), - self._GetFlags(default_language='pt')) + self._GetFlags(default_language='pt', output_dash=True)) self._CheckTestResults('audio-video-with-language-override') def testPackageAudioVideoWithLanguageOverrideWithSubtag(self): self.assertPackageSuccess( self._GetStreams(['audio', 'video'], language='por-BR'), - self._GetFlags()) + self._GetFlags(output_dash=True)) self._CheckTestResults('audio-video-with-language-override-with-subtag') def testPackageAacHe(self): self.assertPackageSuccess( self._GetStreams( ['audio'], test_files=['bear-640x360-aac_he-silent_right.mp4']), - self._GetFlags()) + self._GetFlags(output_dash=True)) self._CheckTestResults('acc-he') # Package all video, audio, and text. @@ -643,7 +646,7 @@ class PackagerFunctionalTest(PackagerAppTest): text_stream = self._GetStreams(['text'], test_files=['subtitle-english.vtt']) self.assertPackageSuccess(audio_video_streams + text_stream, - self._GetFlags()) + self._GetFlags(output_dash=True)) self._CheckTestResults('video-audio-text') def testPackageAvcAacTs(self): @@ -772,17 +775,36 @@ class PackagerFunctionalTest(PackagerAppTest): hls=True, test_files=['bear-640x360.ts']), self._GetFlags( + output_dash=True, segment_duration=0.5, time_shift_buffer_depth=0.5, preserved_segments_outside_live_window=1)) self._CheckTestResults('avc-ts-dash-dynamic-with-segment-deletion') + def testPackageAvcTsLivePlaylistAndDashDynamicWithSegmentDeletion(self): + self.assertPackageSuccess( + self._GetStreams( + ['audio'], + output_format='mp4', + segmented=True, + hls=True, + test_files=['bear-640x360.ts']), + self._GetFlags( + output_hls=True, + hls_playlist_type='LIVE', + output_dash=True, + segment_duration=0.5, + time_shift_buffer_depth=0.5, + preserved_segments_outside_live_window=1)) + self._CheckTestResults( + 'avc-ts-live-playlist-dash-dynamic-with-segment-deletion') + def testPackageVp8Webm(self): self.assertPackageSuccess( self._GetStreams(['video'], output_format='webm', test_files=['bear-640x360.webm']), - self._GetFlags()) + self._GetFlags(output_dash=True)) self._CheckTestResults('vp8-webm') def testPackageVp9Webm(self): @@ -790,7 +812,7 @@ class PackagerFunctionalTest(PackagerAppTest): self._GetStreams(['audio', 'video'], output_format='webm', test_files=['bear-320x240-vp9-opus.webm']), - self._GetFlags()) + self._GetFlags(output_dash=True)) self._CheckTestResults('vp9-webm') def testPackageVp9WebmWithBlockgroup(self): @@ -798,7 +820,7 @@ class PackagerFunctionalTest(PackagerAppTest): self._GetStreams(['video'], output_format='webm', test_files=['bear-vp9-blockgroup.webm']), - self._GetFlags()) + self._GetFlags(output_dash=True)) self._CheckTestResults('vp9-webm-with-blockgroup') def testPackageVorbisWebm(self): @@ -806,13 +828,13 @@ class PackagerFunctionalTest(PackagerAppTest): self._GetStreams(['audio'], output_format='webm', test_files=['bear-320x240-audio-only.webm']), - self._GetFlags()) + self._GetFlags(output_dash=True)) self._CheckTestResults('vorbis-webm') def testPackageEncryption(self): self.assertPackageSuccess( self._GetStreams(['audio', 'video']), - self._GetFlags(encryption=True)) + self._GetFlags(encryption=True, output_dash=True)) self._CheckTestResults('encryption') self._VerifyDecryption(self.output[0], 'bear-640x360-a-demuxed-golden.mp4') self._VerifyDecryption(self.output[1], 'bear-640x360-v-golden.mp4') @@ -820,7 +842,7 @@ class PackagerFunctionalTest(PackagerAppTest): # Test deprecated flag --enable_fixed_key_encryption, which is still # supported currently. def testPackageEncryptionUsingFixedKey(self): - flags = self._GetFlags() + [ + flags = self._GetFlags(output_dash=True) + [ '--enable_fixed_key_encryption', '--key_id={0}'.format( self.encryption_key_id), '--key={0}'.format(self.encryption_key), '--clear_lead={0}'.format(self.clear_lead), '--iv={0}'.format( @@ -836,7 +858,7 @@ class PackagerFunctionalTest(PackagerAppTest): audio_key = '11121314151617181920212223242526' video_key_id = '20212223242526272829303132333435' video_key = '21222324252627282930313233343536' - flags = self._GetFlags() + [ + flags = self._GetFlags(output_dash=True) + [ '--enable_raw_key_encryption', '--keys=label=AUDIO:key_id={0}:key={1},label=SD:key_id={2}:key={3}'. format(audio_key_id, audio_key, @@ -858,7 +880,7 @@ class PackagerFunctionalTest(PackagerAppTest): audio_key = '21222324252627282930313233343536' video_key_id = '10111213141516171819202122232425' video_key = '11121314151617181920212223242526' - flags = self._GetFlags() + [ + flags = self._GetFlags(output_dash=True) + [ '--enable_raw_key_encryption', '--keys=label=MyAudio:key_id={0}:key={1},label=:key_id={2}:key={3}'. format(audio_key_id, audio_key, @@ -887,7 +909,7 @@ class PackagerFunctionalTest(PackagerAppTest): self._GetStream('audio', skip_encryption=True), self._GetStream('video') ] - flags = self._GetFlags(encryption=True) + flags = self._GetFlags(encryption=True, output_dash=True) self.assertPackageSuccess(streams, flags) self._CheckTestResults('encryption-of-only-video-stream') @@ -900,7 +922,8 @@ class PackagerFunctionalTest(PackagerAppTest): self._GetStream('video', trick_play_factor=1), ] - self.assertPackageSuccess(streams, self._GetFlags(encryption=True)) + self.assertPackageSuccess(streams, + self._GetFlags(encryption=True, output_dash=True)) self._CheckTestResults('encryption-and-trick-play') self._VerifyDecryption(self.output[0], 'bear-640x360-a-demuxed-golden.mp4') self._VerifyDecryption(self.output[1], 'bear-640x360-v-golden.mp4') @@ -916,7 +939,8 @@ class PackagerFunctionalTest(PackagerAppTest): self._GetStream('video', trick_play_factor=2), ] - self.assertPackageSuccess(streams, self._GetFlags(encryption=True)) + self.assertPackageSuccess(streams, + self._GetFlags(encryption=True, output_dash=True)) self._CheckTestResults('encryption-and-two-trick-plays') self._VerifyDecryption(self.output[0], 'bear-640x360-a-demuxed-golden.mp4') self._VerifyDecryption(self.output[1], 'bear-640x360-v-golden.mp4') @@ -930,7 +954,8 @@ class PackagerFunctionalTest(PackagerAppTest): ] self.clear_lead = 0 - self.assertPackageSuccess(streams, self._GetFlags(encryption=True)) + self.assertPackageSuccess(streams, + self._GetFlags(encryption=True, output_dash=True)) self._CheckTestResults('encryption-and-no-clear-lead') self._VerifyDecryption(self.output[0], 'bear-640x360-a-demuxed-golden.mp4') self._VerifyDecryption(self.output[1], 'bear-640x360-v-golden.mp4') @@ -938,7 +963,8 @@ class PackagerFunctionalTest(PackagerAppTest): def testPackageEncryptionAndNoPsshInStream(self): self.assertPackageSuccess( self._GetStreams(['audio', 'video']), - self._GetFlags(encryption=True, include_pssh_in_stream=False)) + self._GetFlags( + encryption=True, include_pssh_in_stream=False, output_dash=True)) self._CheckTestResults('encryption-and-no-pssh-in-stream') self._VerifyDecryption(self.output[0], 'bear-640x360-a-demuxed-golden.mp4') self._VerifyDecryption(self.output[1], 'bear-640x360-v-golden.mp4') @@ -946,8 +972,8 @@ class PackagerFunctionalTest(PackagerAppTest): def testPackageEncryptionCbc1(self): self.assertPackageSuccess( self._GetStreams(['audio', 'video']), - self._GetFlags(encryption=True, - protection_scheme='cbc1')) + self._GetFlags( + encryption=True, protection_scheme='cbc1', output_dash=True)) self._CheckTestResults('encryption-cbc-1') self._VerifyDecryption(self.output[0], 'bear-640x360-a-demuxed-golden.mp4') self._VerifyDecryption(self.output[1], 'bear-640x360-v-golden.mp4') @@ -955,8 +981,8 @@ class PackagerFunctionalTest(PackagerAppTest): def testPackageEncryptionCens(self): self.assertPackageSuccess( self._GetStreams(['audio', 'video']), - self._GetFlags(encryption=True, - protection_scheme='cens')) + self._GetFlags( + encryption=True, protection_scheme='cens', output_dash=True)) self._CheckTestResults('encryption-cens') self._VerifyDecryption(self.output[0], 'bear-640x360-a-demuxed-golden.mp4') self._VerifyDecryption(self.output[1], 'bear-640x360-v-golden.mp4') @@ -964,8 +990,8 @@ class PackagerFunctionalTest(PackagerAppTest): def testPackageEncryptionCbcs(self): self.assertPackageSuccess( self._GetStreams(['audio', 'video']), - self._GetFlags(encryption=True, - protection_scheme='cbcs')) + self._GetFlags( + encryption=True, protection_scheme='cbcs', output_dash=True)) self._DiffGold(self.output[0], 'bear-640x360-a-cbcs-golden.mp4') self._DiffGold(self.output[1], 'bear-640x360-v-cbcs-golden.mp4') self._DiffGold(self.mpd_output, 'bear-640x360-av-cbcs-golden.mpd') @@ -975,7 +1001,7 @@ class PackagerFunctionalTest(PackagerAppTest): def testPackageEncryptionAndAdCues(self): self.assertPackageSuccess( self._GetStreams(['audio', 'video']), - self._GetFlags(encryption=True, ad_cues='1.5')) + self._GetFlags(encryption=True, output_dash=True, ad_cues='1.5')) self._CheckTestResults('encryption-and-ad-cues') self._VerifyDecryption(self.output[0], 'bear-640x360-a-demuxed-golden.mp4') self._VerifyDecryption(self.output[1], 'bear-640x360-v-golden.mp4') @@ -986,7 +1012,8 @@ class PackagerFunctionalTest(PackagerAppTest): output_format='webm', test_file='bear-320x180-vp9-altref.webm') ] - self.assertPackageSuccess(streams, self._GetFlags(encryption=True)) + self.assertPackageSuccess(streams, + self._GetFlags(encryption=True, output_dash=True)) self._CheckTestResults('webm-subsample-encryption') self._VerifyDecryption(self.output[0], 'bear-320x180-vp9-altref-dec-golden.webm') @@ -998,8 +1025,7 @@ class PackagerFunctionalTest(PackagerAppTest): test_file='bear-320x180-vp9-altref.webm') ] flags = self._GetFlags( - encryption=True, - vp9_subsample_encryption=False) + encryption=True, vp9_subsample_encryption=False, output_dash=True) self.assertPackageSuccess(streams, flags) self._CheckTestResults('webm-vp9-full-sample-encryption') @@ -1064,7 +1090,7 @@ class PackagerFunctionalTest(PackagerAppTest): output_format='webm', test_file='bear-640x360.webm') ] - flags = self._GetFlags(encryption=True) + flags = self._GetFlags(encryption=True, output_dash=True) self.assertPackageSuccess(streams, flags) self._CheckTestResults('webm-with-encryption') @@ -1074,7 +1100,7 @@ class PackagerFunctionalTest(PackagerAppTest): streams = [ self._GetStream('video', test_file='bear-640x360-hevc.mp4') ] - flags = self._GetFlags(encryption=True) + flags = self._GetFlags(encryption=True, output_dash=True) self.assertPackageSuccess(streams, flags) self._CheckTestResults('hevc-with-encryption') @@ -1086,7 +1112,7 @@ class PackagerFunctionalTest(PackagerAppTest): output_format='mp4', test_file='bear-640x360.webm') ] - flags = self._GetFlags(encryption=True) + flags = self._GetFlags(encryption=True, output_dash=True) self.assertPackageSuccess(streams, flags) self._CheckTestResults('vp8-mp4-with-encryption') @@ -1101,7 +1127,7 @@ class PackagerFunctionalTest(PackagerAppTest): output_format='mp4', test_file='bear-320x240-vp9-opus.webm'), ] - flags = self._GetFlags(encryption=True) + flags = self._GetFlags(encryption=True, output_dash=True) self.assertPackageSuccess(streams, flags) self._CheckTestResults('opus-vp9-mp4-with-encryption') @@ -1113,7 +1139,7 @@ class PackagerFunctionalTest(PackagerAppTest): self._GetStream( 'audio', output_format='mp4', test_file='bear-flac.mp4'), ] - flags = self._GetFlags(encryption=True) + flags = self._GetFlags(encryption=True, output_dash=True, output_hls=True) self.assertPackageSuccess(streams, flags) self._CheckTestResults('flac-with-encryption') @@ -1124,7 +1150,7 @@ class PackagerFunctionalTest(PackagerAppTest): self.assertPackageSuccess( self._GetStreams( ['0', '1', '2', '3'], test_files=['bear-multi-configs.wvm']), - self._GetFlags(decryption=True)) + self._GetFlags(decryption=True, output_dash=True)) # Output timescale is 90000. self._CheckTestResults('wvm-input') @@ -1140,14 +1166,15 @@ class PackagerFunctionalTest(PackagerAppTest): self.assertPackageSuccess( self._GetStreams( ['0', '1', '2', '3'], test_files=['bear-multi-configs.wvm']), - self._GetFlags(strip_parameter_set_nalus=False, decryption=True)) + self._GetFlags( + strip_parameter_set_nalus=False, decryption=True, output_dash=True)) # Output timescale is 90000. self._CheckTestResults('wvm-input-without-stripping-parameters-set-nalus') def testPackageEncryptionAndRandomIv(self): self.assertPackageSuccess( self._GetStreams(['audio', 'video']), - self._GetFlags(encryption=True, random_iv=True)) + self._GetFlags(encryption=True, random_iv=True, output_dash=True)) self._AssertStreamInfo(self.output[0], 'is_encrypted: true') self._AssertStreamInfo(self.output[1], 'is_encrypted: true') # The outputs are encrypted with random iv, so they are not the same as @@ -1163,7 +1190,7 @@ class PackagerFunctionalTest(PackagerAppTest): def testPackageEncryptionAndRealClock(self): self.assertPackageSuccess( self._GetStreams(['audio', 'video']), - self._GetFlags(encryption=True, use_fake_clock=False)) + self._GetFlags(encryption=True, output_dash=True, use_fake_clock=False)) self._AssertStreamInfo(self.output[0], 'is_encrypted: true') self._AssertStreamInfo(self.output[1], 'is_encrypted: true') # The outputs are generated with real clock, so they are not the same as @@ -1179,7 +1206,7 @@ class PackagerFunctionalTest(PackagerAppTest): def testPackageEncryptionAndNonDashIfIop(self): self.assertPackageSuccess( self._GetStreams(['audio', 'video']), - self._GetFlags(encryption=True, dash_if_iop=False)) + self._GetFlags(encryption=True, dash_if_iop=False, output_dash=True)) self._DiffGold(self.output[0], 'bear-640x360-a-cenc-golden.mp4') self._DiffGold(self.output[1], 'bear-640x360-v-cenc-golden.mp4') self._DiffGold(self.mpd_output, 'bear-640x360-av-cenc-non-iop-golden.mpd') @@ -1234,44 +1261,48 @@ class PackagerFunctionalTest(PackagerAppTest): self.assertPackageSuccess( self._GetStreams(['audio', 'video'], segmented=True), self._GetFlags( - utc_timings= - 'urn:mpeg:dash:utc:http-xsdate:2014=' + output_dash=True, + utc_timings='urn:mpeg:dash:utc:http-xsdate:2014=' 'http://foo.bar/my_body_is_the_current_date_and_time,' 'urn:mpeg:dash:utc:http-head:2014=' 'http://foo.bar/check_me_for_the_date_header')) self._CheckTestResults('live-profile') def testPackageLiveProfileWithWebM(self): - self.assertPackageSuccess( - self._GetStreams( - ['audio', 'video'], - segmented=True, - output_format='webm', - test_files=['bear-640x360.webm']), self._GetFlags()) + streams = self._GetStreams( + ['audio', 'video'], + segmented=True, + output_format='webm', + test_file='bear-640x360.webm' + ) + flags = self._GetFlags(output_dash=True, output_hls=True) + + self.assertPackageSuccess(streams, flags) self._CheckTestResults('live-profile-with-webm') def testPackageLiveStaticProfile(self): self.assertPackageSuccess( self._GetStreams(['audio', 'video'], segmented=True), - self._GetFlags(generate_static_mpd=True)) + self._GetFlags(output_dash=True, generate_static_mpd=True)) self._CheckTestResults('live-static-profile') def testPackageLiveStaticProfileAndAdCues(self): self.assertPackageSuccess( self._GetStreams(['audio', 'video'], segmented=True), - self._GetFlags(generate_static_mpd=True, ad_cues='1.5')) + self._GetFlags( + output_dash=True, generate_static_mpd=True, ad_cues='1.5')) self._CheckTestResults('live-static-profile-and-ad-cues') def testPackageLiveProfileAndEncryption(self): self.assertPackageSuccess( self._GetStreams(['audio', 'video'], segmented=True), - self._GetFlags(encryption=True)) + self._GetFlags(encryption=True, output_dash=True)) self._CheckTestResults('live-profile-and-encryption') def testPackageLiveProfileAndEncryptionAndNonDashIfIop(self): self.assertPackageSuccess( self._GetStreams(['audio', 'video'], segmented=True), - self._GetFlags(encryption=True, dash_if_iop=False)) + self._GetFlags(encryption=True, dash_if_iop=False, output_dash=True)) self._CheckTestResults( 'live-profile-and-encryption-and-non-dash-if-iop') @@ -1281,7 +1312,7 @@ class PackagerFunctionalTest(PackagerAppTest): segmented=True, test_files=['bear-1280x720.mp4', 'bear-640x360.mp4', 'bear-320x180.mp4']), - self._GetFlags(encryption=True)) + self._GetFlags(encryption=True, output_dash=True)) self._DiffLiveGold(self.output[2], 'bear-640x360-a-live-cenc-golden') self._DiffLiveGold(self.output[3], 'bear-640x360-v-live-cenc-golden') # Mpd cannot be validated right now since we don't generate determinstic @@ -1292,29 +1323,34 @@ class PackagerFunctionalTest(PackagerAppTest): def testPackageLiveProfileAndKeyRotation(self): self.assertPackageSuccess( self._GetStreams(['audio', 'video'], segmented=True), - self._GetFlags(encryption=True, key_rotation=True)) + self._GetFlags(encryption=True, key_rotation=True, output_dash=True)) self._CheckTestResults('live-profile-and-key-rotation') def testPackageLiveProfileAndKeyRotationAndNoPsshInStream(self): self.assertPackageSuccess( self._GetStreams(['audio', 'video'], segmented=True), self._GetFlags( - encryption=True, key_rotation=True, include_pssh_in_stream=False)) + encryption=True, + key_rotation=True, + include_pssh_in_stream=False, + output_dash=True)) self._CheckTestResults( 'live-profile-and-key-rotation-and-no-pssh-in-stream') def testPackageLiveProfileAndKeyRotationAndNonDashIfIop(self): self.assertPackageSuccess( self._GetStreams(['audio', 'video'], segmented=True), - self._GetFlags(encryption=True, - key_rotation=True, - dash_if_iop=False)) + self._GetFlags( + encryption=True, + key_rotation=True, + dash_if_iop=False, + output_dash=True)) self._CheckTestResults( 'live-profile-and-key-rotation-and-non-dash-if-iop') @unittest.skipUnless(test_env.has_aes_flags, 'Requires AES credentials.') def testWidevineEncryptionWithAes(self): - flags = self._GetFlags(widevine_encryption=True) + flags = self._GetFlags(widevine_encryption=True, output_dash=True) flags += [ '--signer=widevine_test', '--aes_signing_key=' + test_env.options.aes_signing_key, @@ -1326,7 +1362,7 @@ class PackagerFunctionalTest(PackagerAppTest): @unittest.skipUnless(test_env.has_aes_flags, 'Requires AES credentials.') def testWidevineEncryptionWithAesAndMultFiles(self): - flags = self._GetFlags(widevine_encryption=True) + flags = self._GetFlags(widevine_encryption=True, output_dash=True) flags += [ '--signer=widevine_test', '--aes_signing_key=' + test_env.options.aes_signing_key, @@ -1342,7 +1378,8 @@ class PackagerFunctionalTest(PackagerAppTest): @unittest.skipUnless(test_env.has_aes_flags, 'Requires AES credentials.') def testKeyRotationWithAes(self): - flags = self._GetFlags(widevine_encryption=True, key_rotation=True) + flags = self._GetFlags( + widevine_encryption=True, key_rotation=True, output_dash=True) flags += [ '--signer=widevine_test', '--aes_signing_key=' + test_env.options.aes_signing_key, @@ -1354,7 +1391,7 @@ class PackagerFunctionalTest(PackagerAppTest): @unittest.skipUnless(test_env.has_rsa_flags, 'Requires RSA credentials.') def testWidevineEncryptionWithRsa(self): - flags = self._GetFlags(widevine_encryption=True) + flags = self._GetFlags(widevine_encryption=True, output_dash=True) flags += [ '--signer=widevine_test', '--rsa_signing_key_path=' + test_env.options.rsa_signing_key_path @@ -1390,7 +1427,7 @@ class PackagerFunctionalTest(PackagerAppTest): self._GetStream('video', bandwidth=44444) ] - flags = self._GetFlags() + flags = self._GetFlags(output_dash=True) self.assertPackageSuccess(streams, flags) self._CheckTestResults('dash-with-bandwidth-override') @@ -1406,7 +1443,7 @@ class PackagerFunctionalTest(PackagerAppTest): self._GetStreams(['0'], output_format=output_extension, test_files=[test_encrypted_file]), - self._GetFlags(decryption=True)) + self._GetFlags(decryption=True, output_dash=True)) self._DiffGold(self.output[-1], golden_clear_file) diff --git a/packager/app/test/testdata/avc-ts-live-playlist-dash-dynamic-with-segment-deletion/bear-640x360-audio-3.m4s b/packager/app/test/testdata/avc-ts-live-playlist-dash-dynamic-with-segment-deletion/bear-640x360-audio-3.m4s new file mode 100644 index 0000000000000000000000000000000000000000..8dcbed305912340fa3cbfa1bb3968a8d1ef2361d GIT binary patch literal 8088 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 literal 0 HcmV?d00001 diff --git a/packager/app/test/testdata/avc-ts-live-playlist-dash-dynamic-with-segment-deletion/bear-640x360-audio-4.m4s b/packager/app/test/testdata/avc-ts-live-playlist-dash-dynamic-with-segment-deletion/bear-640x360-audio-4.m4s new file mode 100644 index 0000000000000000000000000000000000000000..e19520d81536e5f755c0b5cc37acf090bfceca07 GIT binary patch literal 8462 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 PVs%oe94m`V^=SVOWcCTb literal 0 HcmV?d00001 diff --git a/packager/app/test/testdata/avc-ts-live-playlist-dash-dynamic-with-segment-deletion/bear-640x360-audio-6.m4s b/packager/app/test/testdata/avc-ts-live-playlist-dash-dynamic-with-segment-deletion/bear-640x360-audio-6.m4s new file mode 100644 index 0000000000000000000000000000000000000000..b187049c5477e879080bdd9512252b08cc9b5a15 GIT binary patch literal 2851 zcmZ{kcQ_kb8^9xIl}k~IlzWZXV((S6B~l{@LG10CNzkG#RkKyngqT&8BF43=C|Y}K z?U9PA@rkWkSNqi$z29Ho^L+2~{LVYhd(L^EbKd6w003b$=5|;BIy4wS7rNFA4pUX~ z_CWi41^c4uAvtt_cl7xjT^IliZkYhau>5~qx({HT1poqhGye(TgF{1o=_Y5eufO+y zb1u+zEGEL^JT8bij{^ZRbeq2R92RN1J{L}muQ%qG_0RrhmQyAQ_afDAH1T) ztJU;A*gwdte8>kyjaok5X>(}`34Cp;begZf^-2p`7^hP6=3ym11U}nuZ87BZ!C~pS zOw%+<#7$FPu#SVw(D&Bxs{9XsM^LUs2h{b{k1=@5)4!gXGe|d`X=KHKrN`Q(m+7FP9LzO}Txa-Azrwf_^Rxm4U?T>_?VE>7FQ%+Maz=NcE_FT`W4!<-#jz z+rM7=xU7lSy@nPkGb5&*?3^EoUu`YV%m{OV^e7jzAdsM+F|oQSPr9*IDU?wpy!>*9 z<5;3XIAI{?OJQgNZNH9X%Oxu=kVW2%qPvn@k--<0{_nTaRfLn)Z?PE)Dm-1BF^9j3 zbm}>Dj!dJ{Z{}^HWVxYEq5*Dn38t}ww zVbQ!Zfy8l}cF5OhvxYbsd(fi5#8;F{jsj*ZW4LO*cp98rezoddZ(%{2LJ0v>VrZUn z>j+ja^AFGg1 zcBbzGJDhK^Qv(}^z(D3E$pmf)WzjU0WfDWwh#kylWZs;tIU1ImKUL3&`0~vYvP`~c z&!nP}ZDo94M8JfQ#4}~A??V}PrBpk#`H=0%PUK0da&1W6%;bpgN~+MbI&F2FM7)+T zo~d0hvw9~gCWmh%asb1UoHIpJ)~}x<3{>AR+#nhLHO(0YUEMS@aSB+ zEuZHMBg)F63T|@y(UJJ|X7tX>UB;lm~U$x_Z zFOE((Zq#~=!c=q4oYj7d<>;`sn|Zbw>hGyz2@8467D|4{PId0c*0ys|QPbX%zTIQG z&W7NF$yHQ}dfork;G*M(S}&kQal7}qbAfVF3>2^C);S0BzEMxaI9D3z55Zgge)q&N zw6cP=c~RPn47@V{1Y58|n(&x~fuC^kOb=D7DshY}eO&6F^-Dqzs&^NWWOAO&+(laq zA|&K|_L!LGrHorn+IaK#Tjf@lk`76A5U`n9>l+QISDI>l)c)0|QHUvwsh6EPS!7_m;G{v#A-t)t`$2u7O|a$ecum-+-H{v zmaHma1#5EOOi2q|L*(%%`w{m-yl4>A%Yh#^D5ue%f^{(&x%6SCzjd0Jrg?<`;YC zs+JcCGvT|&x8ZZyI4~IHnom;d1tE1#*mTyji-7pqpuZ3DsH}3!<RM|*xy^kcneO%hseF!1hQ zX*X;83`&CoxhJ2!{UCKCRb94$Q!9OlLDtPcaDQSamT@UyswOE7mvfd8mI7?xH(E}$ zekN_Pf+n`Pm%C=aR_M89b1z_`dPZS03!|q*hsuf#!+YurO8S-5ss9mKd~bTR1hZEmC=< z_w*}z{3hzKy9Y0V6U5?XMXq zZ)z#i{s>WY3IabVlW*QGn?~&MfCuk(I<3xj z+WF|>GSJ||!;DYDF{focyU{t05+#O-vhU2NT_cQ^l<`2kUa}(tIBhIIiDdoAKjn!W zh)h;DFaJGr>x<^oJI}bRa}l+9>x{f7F?mA^FETvdZQhFM-xwoZS4kb*{IC%sV=lKe zVLvJH>Ve(wO^1lpd1L6?jVmhYtQ5GgbaPS6mjV5^|wtm(5$MS;*>Dr6_?~wa3$*BXJmz z!oxtKJ4T0ECtRd9eB%PXNk!#mB!`M9f{FoYFH+nNx<_>rdW5+iN}-jN+|orDMn(u! zIirD3mtkgv6_KtEMoS34KF7LUDSnkPRV`wo0kH>Fa-&iKa%LU8p(AZOU*OJ$QAl%f zYDra{=`ABBb?t6Wzv7Rd%!@v97oaa07n<6o2(y7FE4n1asYrm=_`mI!yU_};*ES*JkFI>W|+rrO4vABgx~li*6@eENS6pFllvpV H|2O^z*)b&_ literal 0 HcmV?d00001 diff --git a/packager/app/test/testdata/avc-ts-live-playlist-dash-dynamic-with-segment-deletion/bear-640x360-audio-init.mp4 b/packager/app/test/testdata/avc-ts-live-playlist-dash-dynamic-with-segment-deletion/bear-640x360-audio-init.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..f6ff48bc011610a467f1fbf1092e83ab3393eace GIT binary patch literal 754 zcmZuvyH3L}6m=gw1|$Na0}?|95Mn41kD)?U)uBREEC>V(2;|0T5+$yq*sTCDFf;K1 z>?{m?1QG)qzrc@huj8~4u<& ziG?z;P-- +#EXT-X-TARGETDURATION:1 +#EXT-X-MEDIA-SEQUENCE:3 +#EXT-X-MAP:URI="bear-640x360-audio-init.mp4" +#EXTINF:0.511, +bear-640x360-audio-4.m4s +#EXTINF:0.487, +bear-640x360-audio-5.m4s +#EXTINF:0.302, +bear-640x360-audio-6.m4s diff --git a/packager/app/test/testdata/avc-ts-live-playlist-dash-dynamic-with-segment-deletion/output.m3u8 b/packager/app/test/testdata/avc-ts-live-playlist-dash-dynamic-with-segment-deletion/output.m3u8 new file mode 100644 index 0000000000..070810b3cc --- /dev/null +++ b/packager/app/test/testdata/avc-ts-live-playlist-dash-dynamic-with-segment-deletion/output.m3u8 @@ -0,0 +1,4 @@ +#EXTM3U +## Generated with https://github.com/google/shaka-packager version -- + +#EXT-X-MEDIA:TYPE=AUDIO,URI="bear-640x360-audio.m3u8",GROUP-ID="default-audio-group",NAME="stream_0",AUTOSELECT=YES,CHANNELS="2" diff --git a/packager/app/test/testdata/avc-ts-live-playlist-dash-dynamic-with-segment-deletion/output.mpd b/packager/app/test/testdata/avc-ts-live-playlist-dash-dynamic-with-segment-deletion/output.mpd new file mode 100644 index 0000000000..2d335c1f64 --- /dev/null +++ b/packager/app/test/testdata/avc-ts-live-playlist-dash-dynamic-with-segment-deletion/output.mpd @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/packager/app/test/testdata/flac-with-encryption/output.m3u8 b/packager/app/test/testdata/flac-with-encryption/output.m3u8 new file mode 100644 index 0000000000..553420832b --- /dev/null +++ b/packager/app/test/testdata/flac-with-encryption/output.m3u8 @@ -0,0 +1,4 @@ +#EXTM3U +## Generated with https://github.com/google/shaka-packager version -- + +#EXT-X-MEDIA:TYPE=AUDIO,URI="stream_0.m3u8",GROUP-ID="default-audio-group",NAME="stream_0",AUTOSELECT=YES,CHANNELS="2" diff --git a/packager/app/test/testdata/flac-with-encryption/stream_0.m3u8 b/packager/app/test/testdata/flac-with-encryption/stream_0.m3u8 new file mode 100644 index 0000000000..591b5ae26d --- /dev/null +++ b/packager/app/test/testdata/flac-with-encryption/stream_0.m3u8 @@ -0,0 +1,17 @@ +#EXTM3U +#EXT-X-VERSION:6 +## Generated with https://github.com/google/shaka-packager version -- +#EXT-X-TARGETDURATION:2 +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-MAP:URI="bear-flac-audio.mp4",BYTERANGE="983@0" +#EXT-X-KEY:METHOD=SAMPLE-AES-CTR,URI="data:text/plain;base64,MTIzNDU2Nzg5MDEyMzQ1Ng==",KEYFORMAT="identity" +#EXTINF:1.045, +#EXT-X-BYTERANGE:85277@1051 +bear-flac-audio.mp4 +#EXTINF:1.045, +#EXT-X-BYTERANGE:87892 +bear-flac-audio.mp4 +#EXTINF:0.650, +#EXT-X-BYTERANGE:43075 +bear-flac-audio.mp4 +#EXT-X-ENDLIST diff --git a/packager/app/test/testdata/live-profile-with-webm/output.m3u8 b/packager/app/test/testdata/live-profile-with-webm/output.m3u8 new file mode 100644 index 0000000000..d63f08c183 --- /dev/null +++ b/packager/app/test/testdata/live-profile-with-webm/output.m3u8 @@ -0,0 +1,7 @@ +#EXTM3U +## Generated with https://github.com/google/shaka-packager version -- + +#EXT-X-MEDIA:TYPE=AUDIO,URI="stream_0.m3u8",GROUP-ID="default-audio-group",NAME="stream_0",AUTOSELECT=YES,CHANNELS="2" + +#EXT-X-STREAM-INF:BANDWIDTH=556351,CODECS="vp08.00.10.08.01.02.02.02.00,vorbis",RESOLUTION=640x360,AUDIO="default-audio-group" +stream_1.m3u8 diff --git a/packager/app/test/testdata/live-profile-with-webm/stream_0.m3u8 b/packager/app/test/testdata/live-profile-with-webm/stream_0.m3u8 new file mode 100644 index 0000000000..6ba28f87c0 --- /dev/null +++ b/packager/app/test/testdata/live-profile-with-webm/stream_0.m3u8 @@ -0,0 +1,13 @@ +#EXTM3U +#EXT-X-VERSION:6 +## Generated with https://github.com/google/shaka-packager version -- +#EXT-X-TARGETDURATION:2 +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-MAP:URI="bear-640x360-audio-init.webm" +#EXTINF:1.014, +bear-640x360-audio-1.webm +#EXTINF:1.002, +bear-640x360-audio-2.webm +#EXTINF:0.755, +bear-640x360-audio-3.webm +#EXT-X-ENDLIST diff --git a/packager/app/test/testdata/live-profile-with-webm/stream_1.m3u8 b/packager/app/test/testdata/live-profile-with-webm/stream_1.m3u8 new file mode 100644 index 0000000000..94c245b18b --- /dev/null +++ b/packager/app/test/testdata/live-profile-with-webm/stream_1.m3u8 @@ -0,0 +1,13 @@ +#EXTM3U +#EXT-X-VERSION:6 +## Generated with https://github.com/google/shaka-packager version -- +#EXT-X-TARGETDURATION:2 +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-MAP:URI="bear-640x360-video-init.webm" +#EXTINF:1.001, +bear-640x360-video-1.webm +#EXTINF:1.001, +bear-640x360-video-2.webm +#EXTINF:0.734, +bear-640x360-video-3.webm +#EXT-X-ENDLIST