Share chunkers from the same input except for WVM
Updated test files and added end to end tests for AdCues. Change-Id: I28f57c2f0d15f65fa04f599fae446a5c1373bf47
This commit is contained in:
parent
b74e511f29
commit
1455f43c02
|
@ -53,6 +53,10 @@ class PackagerAppTest(unittest.TestCase):
|
|||
else:
|
||||
self.encryption_iv = '3334353637383930'
|
||||
self.widevine_content_id = '3031323334353637'
|
||||
# TS files may have a non-zero start, which could result in the first
|
||||
# segment to be less than 1 second. Set clear_lead to be less than 1
|
||||
# so only the first segment is left in clear.
|
||||
self.clear_lead = 0.8
|
||||
|
||||
def tearDown(self):
|
||||
if test_env.options.remove_temp_files_after_test:
|
||||
|
@ -123,7 +127,6 @@ class PackagerAppTest(unittest.TestCase):
|
|||
strip_parameter_set_nalus=True,
|
||||
encryption=False,
|
||||
fairplay=False,
|
||||
clear_lead=1,
|
||||
protection_scheme=None,
|
||||
vp9_subsample_encryption=True,
|
||||
decryption=False,
|
||||
|
@ -137,6 +140,7 @@ class PackagerAppTest(unittest.TestCase):
|
|||
hls_playlist_type=None,
|
||||
time_shift_buffer_depth=0.0,
|
||||
generate_static_mpd=False,
|
||||
ad_cues=None,
|
||||
use_fake_clock=True):
|
||||
flags = []
|
||||
|
||||
|
@ -156,7 +160,7 @@ class PackagerAppTest(unittest.TestCase):
|
|||
'--enable_raw_key_encryption',
|
||||
'--keys=label=:key_id={0}:key={1}'.format(self.encryption_key_id,
|
||||
self.encryption_key),
|
||||
'--clear_lead={0}'.format(clear_lead)
|
||||
'--clear_lead={0}'.format(self.clear_lead)
|
||||
]
|
||||
|
||||
if not random_iv:
|
||||
|
@ -206,6 +210,9 @@ class PackagerAppTest(unittest.TestCase):
|
|||
if generate_static_mpd:
|
||||
flags += ['--generate_static_mpd']
|
||||
|
||||
if ad_cues:
|
||||
flags += ['--ad_cues', ad_cues]
|
||||
|
||||
flags.append('--segment_duration=1')
|
||||
# Use fake clock, so output can be compared.
|
||||
if use_fake_clock:
|
||||
|
@ -618,7 +625,7 @@ class PackagerFunctionalTest(PackagerAppTest):
|
|||
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-golden.mpd')
|
||||
self._VerifyDecryption(self.output[0], 'bear-640x360-a-golden.mp4')
|
||||
self._VerifyDecryption(self.output[0], 'bear-640x360-a-demuxed-golden.mp4')
|
||||
self._VerifyDecryption(self.output[1], 'bear-640x360-v-golden.mp4')
|
||||
|
||||
# Test deprecated flag --enable_fixed_key_encryption, which is still
|
||||
|
@ -627,13 +634,14 @@ class PackagerFunctionalTest(PackagerAppTest):
|
|||
flags = self._GetFlags() + [
|
||||
'--enable_fixed_key_encryption', '--key_id={0}'.format(
|
||||
self.encryption_key_id), '--key={0}'.format(self.encryption_key),
|
||||
'--clear_lead={0}'.format(1), '--iv={0}'.format(self.encryption_iv)
|
||||
'--clear_lead={0}'.format(self.clear_lead), '--iv={0}'.format(
|
||||
self.encryption_iv)
|
||||
]
|
||||
self.assertPackageSuccess(self._GetStreams(['audio', 'video']), flags)
|
||||
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-golden.mpd')
|
||||
self._VerifyDecryption(self.output[0], 'bear-640x360-a-golden.mp4')
|
||||
self._VerifyDecryption(self.output[0], 'bear-640x360-a-demuxed-golden.mp4')
|
||||
self._VerifyDecryption(self.output[1], 'bear-640x360-v-golden.mp4')
|
||||
|
||||
def testPackageWithEncryptionMultiKeys(self):
|
||||
|
@ -644,14 +652,15 @@ class PackagerFunctionalTest(PackagerAppTest):
|
|||
flags = self._GetFlags() + [
|
||||
'--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, video_key_id, video_key),
|
||||
'--clear_lead={0}'.format(1), '--iv={0}'.format(self.encryption_iv)
|
||||
format(audio_key_id, audio_key,
|
||||
video_key_id, video_key), '--clear_lead={0}'.format(
|
||||
self.clear_lead), '--iv={0}'.format(self.encryption_iv)
|
||||
]
|
||||
self.assertPackageSuccess(self._GetStreams(['audio', 'video']), flags)
|
||||
|
||||
self.encryption_key_id = audio_key_id
|
||||
self.encryption_key = audio_key
|
||||
self._VerifyDecryption(self.output[0], 'bear-640x360-a-golden.mp4')
|
||||
self._VerifyDecryption(self.output[0], 'bear-640x360-a-demuxed-golden.mp4')
|
||||
self.encryption_key_id = video_key_id
|
||||
self.encryption_key = video_key
|
||||
self._VerifyDecryption(self.output[1], 'bear-640x360-v-golden.mp4')
|
||||
|
@ -664,8 +673,9 @@ class PackagerFunctionalTest(PackagerAppTest):
|
|||
flags = self._GetFlags() + [
|
||||
'--enable_raw_key_encryption',
|
||||
'--keys=label=MyAudio:key_id={0}:key={1},label=:key_id={2}:key={3}'.
|
||||
format(audio_key_id, audio_key, video_key_id, video_key),
|
||||
'--clear_lead={0}'.format(1), '--iv={0}'.format(self.encryption_iv)
|
||||
format(audio_key_id, audio_key,
|
||||
video_key_id, video_key), '--clear_lead={0}'.format(
|
||||
self.clear_lead), '--iv={0}'.format(self.encryption_iv)
|
||||
]
|
||||
# DRM label 'MyVideo' is not defined, will fall back to the key for the
|
||||
# empty default label.
|
||||
|
@ -675,7 +685,7 @@ class PackagerFunctionalTest(PackagerAppTest):
|
|||
|
||||
self.encryption_key_id = audio_key_id
|
||||
self.encryption_key = audio_key
|
||||
self._VerifyDecryption(self.output[0], 'bear-640x360-a-golden.mp4')
|
||||
self._VerifyDecryption(self.output[0], 'bear-640x360-a-demuxed-golden.mp4')
|
||||
self.encryption_key_id = video_key_id
|
||||
self.encryption_key = video_key
|
||||
self._VerifyDecryption(self.output[1], 'bear-640x360-v-golden.mp4')
|
||||
|
@ -697,7 +707,7 @@ class PackagerFunctionalTest(PackagerAppTest):
|
|||
self._DiffGold(self.output[1], 'bear-640x360-v-cenc-golden.mp4')
|
||||
self._DiffGold(self.output[2], 'bear-640x360-v-trick-1-cenc-golden.mp4')
|
||||
self._DiffGold(self.mpd_output, 'bear-640x360-av-trick-1-cenc-golden.mpd')
|
||||
self._VerifyDecryption(self.output[0], 'bear-640x360-a-golden.mp4')
|
||||
self._VerifyDecryption(self.output[0], 'bear-640x360-a-demuxed-golden.mp4')
|
||||
self._VerifyDecryption(self.output[1], 'bear-640x360-v-golden.mp4')
|
||||
self._VerifyDecryption(self.output[2], 'bear-640x360-v-trick-1-golden.mp4')
|
||||
|
||||
|
@ -714,22 +724,22 @@ class PackagerFunctionalTest(PackagerAppTest):
|
|||
self._DiffGold(self.output[3], 'bear-640x360-v-trick-2-cenc-golden.mp4')
|
||||
self._DiffGold(self.mpd_output,
|
||||
'bear-640x360-av-trick-1-trick-2-cenc-golden.mpd')
|
||||
self._VerifyDecryption(self.output[0], 'bear-640x360-a-golden.mp4')
|
||||
self._VerifyDecryption(self.output[0], 'bear-640x360-a-demuxed-golden.mp4')
|
||||
self._VerifyDecryption(self.output[1], 'bear-640x360-v-golden.mp4')
|
||||
self._VerifyDecryption(self.output[2], 'bear-640x360-v-trick-1-golden.mp4')
|
||||
self._VerifyDecryption(self.output[3], 'bear-640x360-v-trick-2-golden.mp4')
|
||||
|
||||
def testPackageWithEncryptionAndNoClearLead(self):
|
||||
self.clear_lead = 0
|
||||
self.assertPackageSuccess(
|
||||
self._GetStreams(['audio', 'video']),
|
||||
self._GetFlags(encryption=True, clear_lead=0))
|
||||
self._GetStreams(['audio', 'video']), self._GetFlags(encryption=True))
|
||||
self._DiffGold(self.output[0],
|
||||
'bear-640x360-a-cenc-no-clear-lead-golden.mp4')
|
||||
self._DiffGold(self.output[1],
|
||||
'bear-640x360-v-cenc-no-clear-lead-golden.mp4')
|
||||
self._DiffGold(self.mpd_output,
|
||||
'bear-640x360-av-cenc-no-clear-lead-golden.mpd')
|
||||
self._VerifyDecryption(self.output[0], 'bear-640x360-a-golden.mp4')
|
||||
self._VerifyDecryption(self.output[0], 'bear-640x360-a-demuxed-golden.mp4')
|
||||
self._VerifyDecryption(self.output[1], 'bear-640x360-v-golden.mp4')
|
||||
|
||||
def testPackageWithEncryptionAndNoPsshInStream(self):
|
||||
|
@ -739,7 +749,7 @@ class PackagerFunctionalTest(PackagerAppTest):
|
|||
self._DiffGold(self.output[0], 'bear-640x360-a-cenc-no-pssh-golden.mp4')
|
||||
self._DiffGold(self.output[1], 'bear-640x360-v-cenc-no-pssh-golden.mp4')
|
||||
self._DiffGold(self.mpd_output, 'bear-640x360-av-cenc-no-pssh-golden.mpd')
|
||||
self._VerifyDecryption(self.output[0], 'bear-640x360-a-golden.mp4')
|
||||
self._VerifyDecryption(self.output[0], 'bear-640x360-a-demuxed-golden.mp4')
|
||||
self._VerifyDecryption(self.output[1], 'bear-640x360-v-golden.mp4')
|
||||
|
||||
def testPackageWithEncryptionCbc1(self):
|
||||
|
@ -750,7 +760,7 @@ class PackagerFunctionalTest(PackagerAppTest):
|
|||
self._DiffGold(self.output[0], 'bear-640x360-a-cbc1-golden.mp4')
|
||||
self._DiffGold(self.output[1], 'bear-640x360-v-cbc1-golden.mp4')
|
||||
self._DiffGold(self.mpd_output, 'bear-640x360-av-cbc1-golden.mpd')
|
||||
self._VerifyDecryption(self.output[0], 'bear-640x360-a-golden.mp4')
|
||||
self._VerifyDecryption(self.output[0], 'bear-640x360-a-demuxed-golden.mp4')
|
||||
self._VerifyDecryption(self.output[1], 'bear-640x360-v-golden.mp4')
|
||||
|
||||
def testPackageWithEncryptionCens(self):
|
||||
|
@ -761,7 +771,7 @@ class PackagerFunctionalTest(PackagerAppTest):
|
|||
self._DiffGold(self.output[0], 'bear-640x360-a-cens-golden.mp4')
|
||||
self._DiffGold(self.output[1], 'bear-640x360-v-cens-golden.mp4')
|
||||
self._DiffGold(self.mpd_output, 'bear-640x360-av-cens-golden.mpd')
|
||||
self._VerifyDecryption(self.output[0], 'bear-640x360-a-golden.mp4')
|
||||
self._VerifyDecryption(self.output[0], 'bear-640x360-a-demuxed-golden.mp4')
|
||||
self._VerifyDecryption(self.output[1], 'bear-640x360-v-golden.mp4')
|
||||
|
||||
def testPackageWithEncryptionCbcs(self):
|
||||
|
@ -772,7 +782,17 @@ class PackagerFunctionalTest(PackagerAppTest):
|
|||
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')
|
||||
self._VerifyDecryption(self.output[0], 'bear-640x360-a-golden.mp4')
|
||||
self._VerifyDecryption(self.output[0], 'bear-640x360-a-demuxed-golden.mp4')
|
||||
self._VerifyDecryption(self.output[1], 'bear-640x360-v-golden.mp4')
|
||||
|
||||
def testPackageWithEncryptionAndAdCues(self):
|
||||
self.assertPackageSuccess(
|
||||
self._GetStreams(['audio', 'video']),
|
||||
self._GetFlags(encryption=True, ad_cues='1.5'))
|
||||
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-ad_cues-golden.mpd')
|
||||
self._VerifyDecryption(self.output[0], 'bear-640x360-a-demuxed-golden.mp4')
|
||||
self._VerifyDecryption(self.output[1], 'bear-640x360-v-golden.mp4')
|
||||
|
||||
def testPackageWithWebmSubsampleEncryption(self):
|
||||
|
@ -980,7 +1000,7 @@ class PackagerFunctionalTest(PackagerAppTest):
|
|||
self.assertFalse(self._CompareWithGold(self.output[1],
|
||||
'bear-640x360-v-cenc-golden.mp4'))
|
||||
self._DiffGold(self.mpd_output, 'bear-640x360-av-cenc-golden.mpd')
|
||||
self._VerifyDecryption(self.output[0], 'bear-640x360-a-golden.mp4')
|
||||
self._VerifyDecryption(self.output[0], 'bear-640x360-a-demuxed-golden.mp4')
|
||||
self._VerifyDecryption(self.output[1], 'bear-640x360-v-golden.mp4')
|
||||
|
||||
def testPackageWithEncryptionAndRealClock(self):
|
||||
|
@ -996,7 +1016,7 @@ class PackagerFunctionalTest(PackagerAppTest):
|
|||
self.assertFalse(self._CompareWithGold(self.output[1],
|
||||
'bear-640x360-v-cenc-golden.mp4'))
|
||||
self._DiffGold(self.mpd_output, 'bear-640x360-av-cenc-golden.mpd')
|
||||
self._VerifyDecryption(self.output[0], 'bear-640x360-a-golden.mp4')
|
||||
self._VerifyDecryption(self.output[0], 'bear-640x360-a-demuxed-golden.mp4')
|
||||
self._VerifyDecryption(self.output[1], 'bear-640x360-v-golden.mp4')
|
||||
|
||||
def testPackageWithEncryptionAndNonDashIfIop(self):
|
||||
|
@ -1031,6 +1051,21 @@ class PackagerFunctionalTest(PackagerAppTest):
|
|||
os.path.join(self.tmp_dir, 'video.m3u8'),
|
||||
'bear-640x360-v-mp4-cenc-golden.m3u8')
|
||||
|
||||
def testPackageWithHlsSingleSegmentMp4EncryptedAndAdCues(self):
|
||||
self.assertPackageSuccess(
|
||||
self._GetStreams(['audio', 'video'], hls=True),
|
||||
self._GetFlags(encryption=True, output_hls=True, ad_cues='1.5'))
|
||||
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.hls_master_playlist_output,
|
||||
'bear-640x360-av-mp4-master-cenc-golden.m3u8')
|
||||
self._DiffGold(
|
||||
os.path.join(self.tmp_dir, 'audio.m3u8'),
|
||||
'bear-640x360-a-mp4-cenc-ad_cues-golden.m3u8')
|
||||
self._DiffGold(
|
||||
os.path.join(self.tmp_dir, 'video.m3u8'),
|
||||
'bear-640x360-v-mp4-cenc-ad_cues-golden.m3u8')
|
||||
|
||||
# Test HLS with multi-segment mp4 and content in subdirectories.
|
||||
def testPackageWithHlsMultiSegmentMp4WithCustomPath(self):
|
||||
test_file = os.path.join(self.test_data_dir, 'bear-640x360.mp4')
|
||||
|
@ -1074,6 +1109,15 @@ class PackagerFunctionalTest(PackagerAppTest):
|
|||
self._DiffLiveGold(self.output[1], 'bear-640x360-v-live-golden')
|
||||
self._DiffGold(self.mpd_output, 'bear-640x360-av-live-static-golden.mpd')
|
||||
|
||||
def testPackageWithLiveStaticProfileAndAdCues(self):
|
||||
self.assertPackageSuccess(
|
||||
self._GetStreams(['audio', 'video'], live=True),
|
||||
self._GetFlags(generate_static_mpd=True, ad_cues='1.5'))
|
||||
self._DiffLiveGold(self.output[0], 'bear-640x360-a-live-golden')
|
||||
self._DiffLiveGold(self.output[1], 'bear-640x360-v-live-golden')
|
||||
self._DiffGold(self.mpd_output,
|
||||
'bear-640x360-av-live-static-ad_cues-golden.mpd')
|
||||
|
||||
def testPackageWithLiveProfileAndEncryption(self):
|
||||
self.assertPackageSuccess(
|
||||
self._GetStreams(['audio', 'video'], live=True),
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,13 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--Generated with https://github.com/google/shaka-packager version <tag>-<hash>-<test>-->
|
||||
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" xmlns:cenc="urn:mpeg:cenc:2013" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011" minBufferTime="PT2S" type="static" mediaPresentationDuration="PT2.781S">
|
||||
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" xmlns:cenc="urn:mpeg:cenc:2013" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011" minBufferTime="PT2S" type="static" mediaPresentationDuration="PT2.741S">
|
||||
<Period id="0">
|
||||
<AdaptationSet id="0" contentType="audio" subsegmentAlignment="true">
|
||||
<ContentProtection value="cenc" schemeIdUri="urn:mpeg:dash:mp4protection:2011" cenc:default_KID="31323334-3536-3738-3930-313233343536"/>
|
||||
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
||||
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
||||
</ContentProtection>
|
||||
<Representation id="0" bandwidth="81568" codecs="opus" mimeType="audio/mp4" audioSamplingRate="48000">
|
||||
<Representation id="0" bandwidth="79930" codecs="opus" mimeType="audio/mp4" audioSamplingRate="48000">
|
||||
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
|
||||
<BaseURL>output_audio.mp4</BaseURL>
|
||||
<SegmentBase indexRange="975-1042" timescale="1000000">
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--Generated with https://github.com/google/shaka-packager version <tag>-<hash>-<test>-->
|
||||
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" xmlns:cenc="urn:mpeg:cenc:2013" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011" minBufferTime="PT2S" type="static" mediaPresentationDuration="PT2.781S">
|
||||
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" xmlns:cenc="urn:mpeg:cenc:2013" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011" minBufferTime="PT2S" type="static" mediaPresentationDuration="PT2.741S">
|
||||
<Period id="0">
|
||||
<AdaptationSet id="0" contentType="audio">
|
||||
<Representation id="0" bandwidth="76531" codecs="opus" mimeType="audio/webm" audioSamplingRate="48000">
|
||||
<Representation id="0" bandwidth="75444" codecs="opus" mimeType="audio/webm" audioSamplingRate="48000">
|
||||
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
|
||||
<BaseURL>output_audio.webm</BaseURL>
|
||||
<SegmentBase indexRange="323-371" timescale="1000000">
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,4 +1,4 @@
|
|||
bandwidth: 129162
|
||||
bandwidth: 129185
|
||||
audio_info {
|
||||
codec: "mp4a.40.2"
|
||||
sampling_frequency: 44100
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -3,12 +3,12 @@
|
|||
## Generated with https://github.com/google/shaka-packager version <tag>-<hash>-<test>
|
||||
#EXT-X-TARGETDURATION:2
|
||||
#EXT-X-PLAYLIST-TYPE:VOD
|
||||
#EXTINF:0.975,
|
||||
#EXTINF:0.952,
|
||||
output_audio-1.ts
|
||||
#EXTINF:0.998,
|
||||
output_audio-2.ts
|
||||
#EXT-X-DISCONTINUITY
|
||||
#EXT-X-KEY:METHOD=SAMPLE-AES,URI="data:text/plain;base64,MTIzNDU2Nzg5MDEyMzQ1Ng==",IV=0x3334353637383930,KEYFORMAT="identity"
|
||||
#EXTINF:0.789,
|
||||
#EXTINF:0.998,
|
||||
output_audio-2.ts
|
||||
#EXTINF:0.813,
|
||||
output_audio-3.ts
|
||||
#EXT-X-ENDLIST
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -3,9 +3,9 @@
|
|||
## Generated with https://github.com/google/shaka-packager version <tag>-<hash>-<test>
|
||||
#EXT-X-TARGETDURATION:2
|
||||
#EXT-X-PLAYLIST-TYPE:EVENT
|
||||
#EXTINF:0.975,
|
||||
#EXTINF:0.952,
|
||||
output_audio-1.ts
|
||||
#EXTINF:0.998,
|
||||
output_audio-2.ts
|
||||
#EXTINF:0.789,
|
||||
#EXTINF:0.813,
|
||||
output_audio-3.ts
|
||||
|
|
|
@ -3,12 +3,12 @@
|
|||
## Generated with https://github.com/google/shaka-packager version <tag>-<hash>-<test>
|
||||
#EXT-X-TARGETDURATION:2
|
||||
#EXT-X-PLAYLIST-TYPE:VOD
|
||||
#EXTINF:0.975,
|
||||
#EXTINF:0.952,
|
||||
output_audio-1.ts
|
||||
#EXTINF:0.998,
|
||||
output_audio-2.ts
|
||||
#EXT-X-DISCONTINUITY
|
||||
#EXT-X-KEY:METHOD=SAMPLE-AES,URI="skd://www.license.com/getkey?KeyId=31323334-3536-3738-3930-313233343536",KEYFORMATVERSIONS="1",KEYFORMAT="com.apple.streamingkeydelivery"
|
||||
#EXTINF:0.789,
|
||||
#EXTINF:0.998,
|
||||
output_audio-2.ts
|
||||
#EXTINF:0.813,
|
||||
output_audio-3.ts
|
||||
#EXT-X-ENDLIST
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -3,10 +3,10 @@
|
|||
## Generated with https://github.com/google/shaka-packager version <tag>-<hash>-<test>
|
||||
#EXT-X-TARGETDURATION:2
|
||||
#EXT-X-PLAYLIST-TYPE:VOD
|
||||
#EXTINF:0.975,
|
||||
#EXTINF:0.952,
|
||||
output_audio-1.ts
|
||||
#EXTINF:0.998,
|
||||
output_audio-2.ts
|
||||
#EXTINF:0.789,
|
||||
#EXTINF:0.813,
|
||||
output_audio-3.ts
|
||||
#EXT-X-ENDLIST
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -3,9 +3,10 @@
|
|||
## Generated with https://github.com/google/shaka-packager version <tag>-<hash>-<test>
|
||||
#EXT-X-TARGETDURATION:2
|
||||
#EXT-X-MEDIA-SEQUENCE:1
|
||||
#EXT-X-DISCONTINUITY-SEQUENCE:1
|
||||
#EXT-X-KEY:METHOD=SAMPLE-AES,URI="data:text/plain;base64,MTIzNDU2Nzg5MDEyMzQ1Ng==",IV=0x3334353637383930,KEYFORMAT="identity"
|
||||
#EXTINF:0.998,
|
||||
output_audio-2.ts
|
||||
#EXT-X-DISCONTINUITY
|
||||
#EXT-X-KEY:METHOD=SAMPLE-AES,URI="data:text/plain;base64,MzQ1Njc4OTAxMjM0NTYxMg==",IV=0x3334353637383930,KEYFORMAT="identity"
|
||||
#EXTINF:0.789,
|
||||
#EXT-X-KEY:METHOD=SAMPLE-AES,URI="data:text/plain;base64,MjM0NTY3ODkwMTIzNDU2MQ==",IV=0x3334353637383930,KEYFORMAT="identity"
|
||||
#EXTINF:0.813,
|
||||
output_audio-3.ts
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -5,5 +5,5 @@
|
|||
#EXT-X-MEDIA-SEQUENCE:1
|
||||
#EXTINF:0.998,
|
||||
output_audio-2.ts
|
||||
#EXTINF:0.789,
|
||||
#EXTINF:0.813,
|
||||
output_audio-3.ts
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
#EXTM3U
|
||||
#EXT-X-VERSION:6
|
||||
## Generated with https://github.com/google/shaka-packager version <tag>-<hash>-<test>
|
||||
#EXT-X-TARGETDURATION:2
|
||||
#EXT-X-PLAYLIST-TYPE:VOD
|
||||
#EXT-X-MAP:URI="output_audio.mp4",BYTERANGE="967@0"
|
||||
#EXT-X-KEY:METHOD=SAMPLE-AES-CENC,URI="data:text/plain;base64,MTIzNDU2Nzg5MDEyMzQ1Ng==",KEYFORMAT="identity"
|
||||
#EXTINF:0.998,
|
||||
#EXT-X-BYTERANGE:16279@1035
|
||||
output_audio.mp4
|
||||
#EXTINF:0.998,
|
||||
#EXT-X-BYTERANGE:16674
|
||||
output_audio.mp4
|
||||
#EXT-X-PLACEMENT-OPPORTUNITY
|
||||
#EXTINF:0.766,
|
||||
#EXT-X-BYTERANGE:10632
|
||||
output_audio.mp4
|
||||
#EXT-X-ENDLIST
|
|
@ -5,13 +5,13 @@
|
|||
#EXT-X-PLAYLIST-TYPE:VOD
|
||||
#EXT-X-MAP:URI="output_audio.mp4",BYTERANGE="967@0"
|
||||
#EXT-X-KEY:METHOD=SAMPLE-AES-CENC,URI="data:text/plain;base64,MTIzNDU2Nzg5MDEyMzQ1Ng==",KEYFORMAT="identity"
|
||||
#EXTINF:1.022,
|
||||
#EXT-X-BYTERANGE:16655@1035
|
||||
#EXTINF:0.998,
|
||||
#EXT-X-BYTERANGE:16279@1035
|
||||
output_audio.mp4
|
||||
#EXTINF:0.998,
|
||||
#EXT-X-BYTERANGE:16650
|
||||
#EXT-X-BYTERANGE:16674
|
||||
output_audio.mp4
|
||||
#EXTINF:0.743,
|
||||
#EXT-X-BYTERANGE:10272
|
||||
#EXTINF:0.766,
|
||||
#EXT-X-BYTERANGE:10632
|
||||
output_audio.mp4
|
||||
#EXT-X-ENDLIST
|
||||
|
|
|
@ -4,10 +4,10 @@
|
|||
#EXT-X-TARGETDURATION:2
|
||||
#EXT-X-PLAYLIST-TYPE:VOD
|
||||
#EXT-X-MAP:URI="audio-init.mp4"
|
||||
#EXTINF:1.022,
|
||||
#EXTINF:0.998,
|
||||
audio-1.m4s
|
||||
#EXTINF:0.998,
|
||||
audio-2.m4s
|
||||
#EXTINF:0.743,
|
||||
#EXTINF:0.766,
|
||||
audio-3.m4s
|
||||
#EXT-X-ENDLIST
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -5,10 +5,10 @@
|
|||
#EXT-X-PLAYLIST-TYPE:VOD
|
||||
#EXTINF:0.975,
|
||||
output_audio-1.ts
|
||||
#EXTINF:1.010,
|
||||
output_audio-2.ts
|
||||
#EXT-X-DISCONTINUITY
|
||||
#EXT-X-KEY:METHOD=SAMPLE-AES,URI="data:text/plain;base64,MTIzNDU2Nzg5MDEyMzQ1Ng==",IV=0x3334353637383930,KEYFORMAT="identity"
|
||||
#EXTINF:0.801,
|
||||
#EXTINF:0.975,
|
||||
output_audio-2.ts
|
||||
#EXTINF:0.836,
|
||||
output_audio-3.ts
|
||||
#EXT-X-ENDLIST
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -5,8 +5,8 @@
|
|||
#EXT-X-PLAYLIST-TYPE:VOD
|
||||
#EXTINF:0.975,
|
||||
output_audio-1.ts
|
||||
#EXTINF:1.010,
|
||||
#EXTINF:0.975,
|
||||
output_audio-2.ts
|
||||
#EXTINF:0.801,
|
||||
#EXTINF:0.836,
|
||||
output_audio-3.ts
|
||||
#EXT-X-ENDLIST
|
||||
|
|
|
@ -7,10 +7,10 @@
|
|||
#EXTINF:0.975,
|
||||
#EXT-X-BYTERANGE:23728@794
|
||||
output_audio.mp4
|
||||
#EXTINF:1.010,
|
||||
#EXT-X-BYTERANGE:24574
|
||||
#EXTINF:0.975,
|
||||
#EXT-X-BYTERANGE:23730
|
||||
output_audio.mp4
|
||||
#EXTINF:0.801,
|
||||
#EXT-X-BYTERANGE:19510
|
||||
#EXTINF:0.836,
|
||||
#EXT-X-BYTERANGE:20354
|
||||
output_audio.mp4
|
||||
#EXT-X-ENDLIST
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#EXTM3U
|
||||
## Generated with https://github.com/google/shaka-packager version <tag>-<hash>-<test>
|
||||
#EXT-X-MEDIA:TYPE=AUDIO,URI="audio.m3u8",GROUP-ID="audio",NAME="stream_0",AUTOSELECT=YES,CHANNELS="2"
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=1242861,CODECS="avc1.64001e,ac-3",RESOLUTION=640x360,AUDIO="audio"
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=1242703,CODECS="avc1.64001e,ac-3",RESOLUTION=640x360,AUDIO="audio"
|
||||
video.m3u8
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#EXTM3U
|
||||
## Generated with https://github.com/google/shaka-packager version <tag>-<hash>-<test>
|
||||
#EXT-X-MEDIA:TYPE=AUDIO,URI="audio.m3u8",GROUP-ID="audio",NAME="stream_0",AUTOSELECT=YES,CHANNELS="2"
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=1168319,CODECS="avc1.64001e,ac-3",RESOLUTION=640x360,AUDIO="audio"
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=1168277,CODECS="avc1.64001e,ac-3",RESOLUTION=640x360,AUDIO="audio"
|
||||
video.m3u8
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
||||
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
||||
</ContentProtection>
|
||||
<Representation id="1" bandwidth="129162" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
|
||||
<Representation id="1" bandwidth="129185" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
|
||||
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
|
||||
<BaseURL>output_audio.mp4</BaseURL>
|
||||
<SegmentBase indexRange="967-1034" timescale="44100">
|
||||
|
|
|
@ -0,0 +1,58 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--Generated with https://github.com/google/shaka-packager version <tag>-<hash>-<test>-->
|
||||
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" xmlns:cenc="urn:mpeg:cenc:2013" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011" minBufferTime="PT2S" type="static" mediaPresentationDuration="PT2.76317S">
|
||||
<Period id="0">
|
||||
<AdaptationSet id="0" contentType="video" width="640" height="360" frameRate="30000/1001" subsegmentAlignment="true" par="16:9">
|
||||
<ContentProtection value="cenc" schemeIdUri="urn:mpeg:dash:mp4protection:2011" cenc:default_KID="31323334-3536-3738-3930-313233343536"/>
|
||||
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
||||
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
||||
</ContentProtection>
|
||||
<Representation id="0" bandwidth="885590" codecs="avc1.64001e" mimeType="video/mp4" sar="1:1">
|
||||
<BaseURL>output_video.mp4</BaseURL>
|
||||
<SegmentBase indexRange="1091-1158" timescale="30000">
|
||||
<Initialization range="0-1090"/>
|
||||
</SegmentBase>
|
||||
</Representation>
|
||||
</AdaptationSet>
|
||||
<AdaptationSet id="2" contentType="audio" subsegmentAlignment="true">
|
||||
<ContentProtection value="cenc" schemeIdUri="urn:mpeg:dash:mp4protection:2011" cenc:default_KID="31323334-3536-3738-3930-313233343536"/>
|
||||
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
||||
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
||||
</ContentProtection>
|
||||
<Representation id="1" bandwidth="129185" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
|
||||
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
|
||||
<BaseURL>output_audio.mp4</BaseURL>
|
||||
<SegmentBase indexRange="967-1034" timescale="44100">
|
||||
<Initialization range="0-966"/>
|
||||
</SegmentBase>
|
||||
</Representation>
|
||||
</AdaptationSet>
|
||||
</Period>
|
||||
<Period id="1" start="PT2.06873S">
|
||||
<AdaptationSet id="0" contentType="video" width="640" height="360" frameRate="30000/1001" subsegmentAlignment="true" par="16:9">
|
||||
<ContentProtection value="cenc" schemeIdUri="urn:mpeg:dash:mp4protection:2011" cenc:default_KID="31323334-3536-3738-3930-313233343536"/>
|
||||
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
||||
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
||||
</ContentProtection>
|
||||
<Representation id="0" bandwidth="885590" codecs="avc1.64001e" mimeType="video/mp4" sar="1:1">
|
||||
<BaseURL>output_video.mp4</BaseURL>
|
||||
<SegmentBase indexRange="1091-1158" timescale="30000" presentationTimeOffset="62061">
|
||||
<Initialization range="0-1090"/>
|
||||
</SegmentBase>
|
||||
</Representation>
|
||||
</AdaptationSet>
|
||||
<AdaptationSet id="2" contentType="audio" subsegmentAlignment="true">
|
||||
<ContentProtection value="cenc" schemeIdUri="urn:mpeg:dash:mp4protection:2011" cenc:default_KID="31323334-3536-3738-3930-313233343536"/>
|
||||
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
||||
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
||||
</ContentProtection>
|
||||
<Representation id="1" bandwidth="129185" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
|
||||
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
|
||||
<BaseURL>output_audio.mp4</BaseURL>
|
||||
<SegmentBase indexRange="967-1034" timescale="44100" presentationTimeOffset="91230">
|
||||
<Initialization range="0-966"/>
|
||||
</SegmentBase>
|
||||
</Representation>
|
||||
</AdaptationSet>
|
||||
</Period>
|
||||
</MPD>
|
|
@ -19,7 +19,7 @@
|
|||
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
||||
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
||||
</ContentProtection>
|
||||
<Representation id="1" bandwidth="129162" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
|
||||
<Representation id="1" bandwidth="129185" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
|
||||
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
|
||||
<BaseURL>output_audio.mp4</BaseURL>
|
||||
<SegmentBase indexRange="967-1034" timescale="44100">
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
||||
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
||||
</ContentProtection>
|
||||
<Representation id="1" bandwidth="129012" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
|
||||
<Representation id="1" bandwidth="129035" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
|
||||
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
|
||||
<BaseURL>output_audio.mp4</BaseURL>
|
||||
<SegmentBase indexRange="915-982" timescale="44100">
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
</Representation>
|
||||
</AdaptationSet>
|
||||
<AdaptationSet id="1" contentType="audio" subsegmentAlignment="true">
|
||||
<Representation id="1" bandwidth="129162" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
|
||||
<Representation id="1" bandwidth="129185" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
|
||||
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
|
||||
<ContentProtection value="cenc" schemeIdUri="urn:mpeg:dash:mp4protection:2011" cenc:default_KID="31323334-3536-3738-3930-313233343536"/>
|
||||
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
||||
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
||||
</ContentProtection>
|
||||
<Representation id="1" bandwidth="129162" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
|
||||
<Representation id="1" bandwidth="129185" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
|
||||
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
|
||||
<BaseURL>output_audio.mp4</BaseURL>
|
||||
<SegmentBase indexRange="967-1034" timescale="44100">
|
||||
|
|
|
@ -21,13 +21,12 @@
|
|||
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
||||
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
||||
</ContentProtection>
|
||||
<Representation id="1" bandwidth="124634" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
|
||||
<Representation id="1" bandwidth="124859" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
|
||||
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
|
||||
<SegmentTemplate timescale="44100" initialization="output_audio-init.mp4" media="output_audio-$Number$.m4s" startNumber="1">
|
||||
<SegmentTimeline>
|
||||
<S t="0" d="45056"/>
|
||||
<S t="45056" d="44032"/>
|
||||
<S t="89088" d="32768"/>
|
||||
<S t="0" d="44032" r="1"/>
|
||||
<S t="88064" d="33792"/>
|
||||
</SegmentTimeline>
|
||||
</SegmentTemplate>
|
||||
</Representation>
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
</Representation>
|
||||
</AdaptationSet>
|
||||
<AdaptationSet id="1" contentType="audio" segmentAlignment="true">
|
||||
<Representation id="1" bandwidth="124634" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
|
||||
<Representation id="1" bandwidth="124859" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
|
||||
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
|
||||
<ContentProtection value="cenc" schemeIdUri="urn:mpeg:dash:mp4protection:2011" cenc:default_KID="31323334-3536-3738-3930-313233343536"/>
|
||||
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
||||
|
@ -25,9 +25,8 @@
|
|||
</ContentProtection>
|
||||
<SegmentTemplate timescale="44100" initialization="output_audio-init.mp4" media="output_audio-$Number$.m4s" startNumber="1">
|
||||
<SegmentTimeline>
|
||||
<S t="0" d="45056"/>
|
||||
<S t="45056" d="44032"/>
|
||||
<S t="89088" d="32768"/>
|
||||
<S t="0" d="44032" r="1"/>
|
||||
<S t="88064" d="33792"/>
|
||||
</SegmentTimeline>
|
||||
</SegmentTemplate>
|
||||
</Representation>
|
||||
|
|
|
@ -17,13 +17,12 @@
|
|||
<AdaptationSet id="1" contentType="audio" segmentAlignment="true">
|
||||
<ContentProtection value="cenc" schemeIdUri="urn:mpeg:dash:mp4protection:2011"/>
|
||||
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b"/>
|
||||
<Representation id="1" bandwidth="125598" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
|
||||
<Representation id="1" bandwidth="125808" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
|
||||
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
|
||||
<SegmentTemplate timescale="44100" initialization="output_audio-init.mp4" media="output_audio-$Number$.m4s" startNumber="1">
|
||||
<SegmentTimeline>
|
||||
<S t="0" d="45056"/>
|
||||
<S t="45056" d="44032"/>
|
||||
<S t="89088" d="32768"/>
|
||||
<S t="0" d="44032" r="1"/>
|
||||
<S t="88064" d="33792"/>
|
||||
</SegmentTimeline>
|
||||
</SegmentTemplate>
|
||||
</Representation>
|
||||
|
|
|
@ -17,13 +17,12 @@
|
|||
<AdaptationSet id="1" contentType="audio" segmentAlignment="true">
|
||||
<ContentProtection value="cenc" schemeIdUri="urn:mpeg:dash:mp4protection:2011"/>
|
||||
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b"/>
|
||||
<Representation id="1" bandwidth="125122" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
|
||||
<Representation id="1" bandwidth="125337" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
|
||||
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
|
||||
<SegmentTemplate timescale="44100" initialization="output_audio-init.mp4" media="output_audio-$Number$.m4s" startNumber="1">
|
||||
<SegmentTimeline>
|
||||
<S t="0" d="45056"/>
|
||||
<S t="45056" d="44032"/>
|
||||
<S t="89088" d="32768"/>
|
||||
<S t="0" d="44032" r="1"/>
|
||||
<S t="88064" d="33792"/>
|
||||
</SegmentTimeline>
|
||||
</SegmentTemplate>
|
||||
</Representation>
|
||||
|
|
|
@ -15,15 +15,14 @@
|
|||
</Representation>
|
||||
</AdaptationSet>
|
||||
<AdaptationSet id="1" contentType="audio" segmentAlignment="true">
|
||||
<Representation id="1" bandwidth="125598" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
|
||||
<Representation id="1" bandwidth="125808" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
|
||||
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
|
||||
<ContentProtection value="cenc" schemeIdUri="urn:mpeg:dash:mp4protection:2011"/>
|
||||
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b"/>
|
||||
<SegmentTemplate timescale="44100" initialization="output_audio-init.mp4" media="output_audio-$Number$.m4s" startNumber="1">
|
||||
<SegmentTimeline>
|
||||
<S t="0" d="45056"/>
|
||||
<S t="45056" d="44032"/>
|
||||
<S t="89088" d="32768"/>
|
||||
<S t="0" d="44032" r="1"/>
|
||||
<S t="88064" d="33792"/>
|
||||
</SegmentTimeline>
|
||||
</SegmentTemplate>
|
||||
</Representation>
|
||||
|
|
|
@ -13,13 +13,12 @@
|
|||
</Representation>
|
||||
</AdaptationSet>
|
||||
<AdaptationSet id="1" contentType="audio" segmentAlignment="true">
|
||||
<Representation id="1" bandwidth="122308" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
|
||||
<Representation id="1" bandwidth="122544" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
|
||||
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
|
||||
<SegmentTemplate timescale="44100" initialization="output_audio-init.mp4" media="output_audio-$Number$.m4s" startNumber="1">
|
||||
<SegmentTimeline>
|
||||
<S t="0" d="45056"/>
|
||||
<S t="45056" d="44032"/>
|
||||
<S t="89088" d="32768"/>
|
||||
<S t="0" d="44032" r="1"/>
|
||||
<S t="88064" d="33792"/>
|
||||
</SegmentTimeline>
|
||||
</SegmentTemplate>
|
||||
</Representation>
|
||||
|
|
|
@ -0,0 +1,46 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--Generated with https://github.com/google/shaka-packager version <tag>-<hash>-<test>-->
|
||||
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" xmlns:cenc="urn:mpeg:cenc:2013" profiles="urn:mpeg:dash:profile:isoff-live:2011" minBufferTime="PT2S" type="static" mediaPresentationDuration="PT2.76317S">
|
||||
<Period id="0">
|
||||
<AdaptationSet id="0" contentType="video" width="640" height="360" frameRate="30000/1001" segmentAlignment="true" par="16:9">
|
||||
<Representation id="0" bandwidth="875099" codecs="avc1.64001e" mimeType="video/mp4" sar="1:1">
|
||||
<SegmentTemplate timescale="30000" initialization="output_video-init.mp4" media="output_video-$Number$.m4s" startNumber="1">
|
||||
<SegmentTimeline>
|
||||
<S t="2002" d="30030" r="1"/>
|
||||
</SegmentTimeline>
|
||||
</SegmentTemplate>
|
||||
</Representation>
|
||||
</AdaptationSet>
|
||||
<AdaptationSet id="1" contentType="audio" segmentAlignment="true">
|
||||
<Representation id="1" bandwidth="131035" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
|
||||
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
|
||||
<SegmentTemplate timescale="44100" initialization="output_audio-init.mp4" media="output_audio-$Number$.m4s" startNumber="1">
|
||||
<SegmentTimeline>
|
||||
<S t="0" d="44032" r="1"/>
|
||||
</SegmentTimeline>
|
||||
</SegmentTemplate>
|
||||
</Representation>
|
||||
</AdaptationSet>
|
||||
</Period>
|
||||
<Period id="1" start="PT2.06873S">
|
||||
<AdaptationSet id="1" contentType="audio" segmentAlignment="true">
|
||||
<Representation id="1" bandwidth="108486" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
|
||||
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
|
||||
<SegmentTemplate timescale="44100" presentationTimeOffset="91230" initialization="output_audio-init.mp4" media="output_audio-$Number$.m4s" startNumber="3">
|
||||
<SegmentTimeline>
|
||||
<S t="88064" d="33792"/>
|
||||
</SegmentTimeline>
|
||||
</SegmentTemplate>
|
||||
</Representation>
|
||||
</AdaptationSet>
|
||||
<AdaptationSet id="0" contentType="video" width="640" height="360" frameRate="30000/1001" segmentAlignment="true" par="16:9">
|
||||
<Representation id="0" bandwidth="869044" codecs="avc1.64001e" mimeType="video/mp4" sar="1:1">
|
||||
<SegmentTemplate timescale="30000" presentationTimeOffset="62060" initialization="output_video-init.mp4" media="output_video-$Number$.m4s" startNumber="3">
|
||||
<SegmentTimeline>
|
||||
<S t="62062" d="22022"/>
|
||||
</SegmentTimeline>
|
||||
</SegmentTemplate>
|
||||
</Representation>
|
||||
</AdaptationSet>
|
||||
</Period>
|
||||
</MPD>
|
|
@ -13,13 +13,12 @@
|
|||
</Representation>
|
||||
</AdaptationSet>
|
||||
<AdaptationSet id="1" contentType="audio" segmentAlignment="true">
|
||||
<Representation id="1" bandwidth="122308" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
|
||||
<Representation id="1" bandwidth="122544" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
|
||||
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
|
||||
<SegmentTemplate timescale="44100" initialization="output_audio-init.mp4" media="output_audio-$Number$.m4s" startNumber="1">
|
||||
<SegmentTimeline>
|
||||
<S t="0" d="45056"/>
|
||||
<S t="45056" d="44032"/>
|
||||
<S t="89088" d="32768"/>
|
||||
<S t="0" d="44032" r="1"/>
|
||||
<S t="88064" d="33792"/>
|
||||
</SegmentTimeline>
|
||||
</SegmentTemplate>
|
||||
</Representation>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#EXTM3U
|
||||
## Generated with https://github.com/google/shaka-packager version <tag>-<hash>-<test>
|
||||
#EXT-X-MEDIA:TYPE=AUDIO,URI="audio.m3u8",GROUP-ID="audio",NAME="stream_0",AUTOSELECT=YES,CHANNELS="2"
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=1111147,CODECS="avc1.64001e,mp4a.40.2",RESOLUTION=640x360,AUDIO="audio"
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=1111340,CODECS="avc1.64001e,mp4a.40.2",RESOLUTION=640x360,AUDIO="audio"
|
||||
video.m3u8
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#EXTM3U
|
||||
## Generated with https://github.com/google/shaka-packager version <tag>-<hash>-<test>
|
||||
#EXT-X-MEDIA:TYPE=AUDIO,URI="audio/audio.m3u8",GROUP-ID="audio",NAME="stream_0",AUTOSELECT=YES,CHANNELS="2"
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=1105129,CODECS="avc1.64001e,mp4a.40.2",RESOLUTION=640x360,AUDIO="audio"
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=1105163,CODECS="avc1.64001e,mp4a.40.2",RESOLUTION=640x360,AUDIO="audio"
|
||||
video/video.m3u8
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
||||
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
||||
</ContentProtection>
|
||||
<Representation id="2" bandwidth="129162" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
|
||||
<Representation id="2" bandwidth="129185" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
|
||||
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
|
||||
<BaseURL>output_audio.mp4</BaseURL>
|
||||
<SegmentBase indexRange="967-1034" timescale="44100">
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
||||
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
||||
</ContentProtection>
|
||||
<Representation id="3" bandwidth="129162" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
|
||||
<Representation id="3" bandwidth="129185" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
|
||||
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
|
||||
<BaseURL>output_audio.mp4</BaseURL>
|
||||
<SegmentBase indexRange="967-1034" timescale="44100">
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
#EXTM3U
|
||||
#EXT-X-VERSION:6
|
||||
## Generated with https://github.com/google/shaka-packager version <tag>-<hash>-<test>
|
||||
#EXT-X-TARGETDURATION:2
|
||||
#EXT-X-PLAYLIST-TYPE:VOD
|
||||
#EXT-X-MAP:URI="output_video.mp4",BYTERANGE="1091@0"
|
||||
#EXT-X-KEY:METHOD=SAMPLE-AES-CENC,URI="data:text/plain;base64,MTIzNDU2Nzg5MDEyMzQ1Ng==",KEYFORMAT="identity"
|
||||
#EXTINF:1.001,
|
||||
#EXT-X-BYTERANGE:99313@1159
|
||||
output_video.mp4
|
||||
#EXTINF:1.001,
|
||||
#EXT-X-BYTERANGE:122340
|
||||
output_video.mp4
|
||||
#EXT-X-PLACEMENT-OPPORTUNITY
|
||||
#EXTINF:0.734,
|
||||
#EXT-X-BYTERANGE:80067
|
||||
output_video.mp4
|
||||
#EXT-X-ENDLIST
|
|
@ -1755,6 +1755,9 @@ MediaContainerName DetermineContainerFromFileName(
|
|||
} else if (base::EndsWith(file_name, ".ts",
|
||||
base::CompareCase::INSENSITIVE_ASCII)) {
|
||||
return CONTAINER_MPEG2TS;
|
||||
} else if (base::EndsWith(file_name, ".wvm",
|
||||
base::CompareCase::INSENSITIVE_ASCII)) {
|
||||
return CONTAINER_WVM;
|
||||
} else if (base::EndsWith(file_name, ".vtt",
|
||||
base::CompareCase::INSENSITIVE_ASCII)) {
|
||||
return CONTAINER_WEBVTT;
|
||||
|
|
|
@ -55,6 +55,7 @@ enum MediaContainerName {
|
|||
CONTAINER_WEBM, // Matroska / WebM
|
||||
CONTAINER_WEBVTT, // WebVTT file.
|
||||
CONTAINER_WTV, // WTV (Windows Television)
|
||||
CONTAINER_WVM, // WVM (Widevine Classic Format)
|
||||
CONTAINER_MAX // Must be last
|
||||
};
|
||||
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
#include "packager/file/file.h"
|
||||
#include "packager/media/base/decryptor_source.h"
|
||||
#include "packager/media/base/key_source.h"
|
||||
#include "packager/media/base/macros.h"
|
||||
#include "packager/media/base/media_sample.h"
|
||||
#include "packager/media/base/stream_info.h"
|
||||
#include "packager/media/formats/mp2t/mp2t_media_parser.h"
|
||||
|
@ -186,7 +187,14 @@ Status Demuxer::InitializeParser() {
|
|||
case CONTAINER_MPEG2TS:
|
||||
parser_.reset(new mp2t::Mp2tMediaParser());
|
||||
break;
|
||||
// Widevine classic (WVM) is derived from MPEG2PS. We do not support
|
||||
// non-WVM MPEG2PS file, thus we do not differentiate between the two.
|
||||
// Every MPEG2PS file is assumed to be WVM file. If it turns out not the
|
||||
// case, an error will be reported when trying to parse the file as WVM
|
||||
// file.
|
||||
case CONTAINER_MPEG2PS:
|
||||
FALLTHROUGH_INTENDED;
|
||||
case CONTAINER_WVM:
|
||||
parser_.reset(new wvm::WvmMediaParser());
|
||||
break;
|
||||
case CONTAINER_WEBM:
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include "packager/base/files/file_path.h"
|
||||
#include "packager/base/logging.h"
|
||||
#include "packager/base/path_service.h"
|
||||
#include "packager/base/strings/string_util.h"
|
||||
#include "packager/base/strings/stringprintf.h"
|
||||
#include "packager/base/threading/simple_thread.h"
|
||||
#include "packager/base/time/clock.h"
|
||||
|
@ -583,6 +584,11 @@ Status CreateAudioVideoJobs(
|
|||
|
||||
// Demuxers are shared among all streams with the same input.
|
||||
std::shared_ptr<Demuxer> demuxer;
|
||||
// Chunkers can be shared among all streams with the same input (except for
|
||||
// WVM files), which allows samples from the same input to be synced when
|
||||
// doing chunking.
|
||||
std::shared_ptr<MediaHandler> chunker;
|
||||
bool is_wvm_file = false;
|
||||
// Replicators are shared among all streams with the same input and stream
|
||||
// selector.
|
||||
std::shared_ptr<MediaHandler> replicator;
|
||||
|
@ -592,21 +598,32 @@ Status CreateAudioVideoJobs(
|
|||
|
||||
for (const StreamDescriptor& stream : streams) {
|
||||
// If we changed our input files, we need a new demuxer.
|
||||
if (previous_input != stream.input) {
|
||||
const bool new_input_file = stream.input != previous_input;
|
||||
if (new_input_file) {
|
||||
Status status = CreateDemuxer(stream, packaging_params, &demuxer);
|
||||
if (!status.ok()) {
|
||||
return status;
|
||||
}
|
||||
|
||||
job_manager->Add("RemuxJob", demuxer);
|
||||
|
||||
// Share chunkers among all streams with the same input except for WVM
|
||||
// file, which may contain multiple video files and the samples may not be
|
||||
// interleaved either.
|
||||
is_wvm_file =
|
||||
DetermineContainerFromFileName(stream.input) == CONTAINER_WVM;
|
||||
if (!is_wvm_file) {
|
||||
chunker =
|
||||
std::make_shared<ChunkingHandler>(packaging_params.chunking_params);
|
||||
}
|
||||
}
|
||||
|
||||
if (!stream.language.empty()) {
|
||||
demuxer->SetLanguageOverride(stream.stream_selector, stream.language);
|
||||
}
|
||||
|
||||
const bool new_stream = previous_input != stream.input ||
|
||||
previous_selector != stream.stream_selector;
|
||||
const bool new_stream =
|
||||
new_input_file || previous_selector != stream.stream_selector;
|
||||
previous_input = stream.input;
|
||||
previous_selector = stream.stream_selector;
|
||||
|
||||
|
@ -623,14 +640,16 @@ Status CreateAudioVideoJobs(
|
|||
packaging_params.ad_cue_generator_params);
|
||||
}
|
||||
|
||||
replicator = std::make_shared<Replicator>();
|
||||
|
||||
std::shared_ptr<MediaHandler> chunker =
|
||||
if (is_wvm_file) {
|
||||
chunker =
|
||||
std::make_shared<ChunkingHandler>(packaging_params.chunking_params);
|
||||
}
|
||||
|
||||
std::shared_ptr<MediaHandler> encryptor = CreateEncryptionHandler(
|
||||
packaging_params, stream, encryption_key_source);
|
||||
|
||||
replicator = std::make_shared<Replicator>();
|
||||
|
||||
Status status;
|
||||
if (ad_cue_generator) {
|
||||
status.Update(
|
||||
|
|
Loading…
Reference in New Issue