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:
|
else:
|
||||||
self.encryption_iv = '3334353637383930'
|
self.encryption_iv = '3334353637383930'
|
||||||
self.widevine_content_id = '3031323334353637'
|
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):
|
def tearDown(self):
|
||||||
if test_env.options.remove_temp_files_after_test:
|
if test_env.options.remove_temp_files_after_test:
|
||||||
|
@ -123,7 +127,6 @@ class PackagerAppTest(unittest.TestCase):
|
||||||
strip_parameter_set_nalus=True,
|
strip_parameter_set_nalus=True,
|
||||||
encryption=False,
|
encryption=False,
|
||||||
fairplay=False,
|
fairplay=False,
|
||||||
clear_lead=1,
|
|
||||||
protection_scheme=None,
|
protection_scheme=None,
|
||||||
vp9_subsample_encryption=True,
|
vp9_subsample_encryption=True,
|
||||||
decryption=False,
|
decryption=False,
|
||||||
|
@ -137,6 +140,7 @@ class PackagerAppTest(unittest.TestCase):
|
||||||
hls_playlist_type=None,
|
hls_playlist_type=None,
|
||||||
time_shift_buffer_depth=0.0,
|
time_shift_buffer_depth=0.0,
|
||||||
generate_static_mpd=False,
|
generate_static_mpd=False,
|
||||||
|
ad_cues=None,
|
||||||
use_fake_clock=True):
|
use_fake_clock=True):
|
||||||
flags = []
|
flags = []
|
||||||
|
|
||||||
|
@ -156,7 +160,7 @@ class PackagerAppTest(unittest.TestCase):
|
||||||
'--enable_raw_key_encryption',
|
'--enable_raw_key_encryption',
|
||||||
'--keys=label=:key_id={0}:key={1}'.format(self.encryption_key_id,
|
'--keys=label=:key_id={0}:key={1}'.format(self.encryption_key_id,
|
||||||
self.encryption_key),
|
self.encryption_key),
|
||||||
'--clear_lead={0}'.format(clear_lead)
|
'--clear_lead={0}'.format(self.clear_lead)
|
||||||
]
|
]
|
||||||
|
|
||||||
if not random_iv:
|
if not random_iv:
|
||||||
|
@ -206,6 +210,9 @@ class PackagerAppTest(unittest.TestCase):
|
||||||
if generate_static_mpd:
|
if generate_static_mpd:
|
||||||
flags += ['--generate_static_mpd']
|
flags += ['--generate_static_mpd']
|
||||||
|
|
||||||
|
if ad_cues:
|
||||||
|
flags += ['--ad_cues', ad_cues]
|
||||||
|
|
||||||
flags.append('--segment_duration=1')
|
flags.append('--segment_duration=1')
|
||||||
# Use fake clock, so output can be compared.
|
# Use fake clock, so output can be compared.
|
||||||
if use_fake_clock:
|
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[0], 'bear-640x360-a-cenc-golden.mp4')
|
||||||
self._DiffGold(self.output[1], 'bear-640x360-v-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._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')
|
self._VerifyDecryption(self.output[1], 'bear-640x360-v-golden.mp4')
|
||||||
|
|
||||||
# Test deprecated flag --enable_fixed_key_encryption, which is still
|
# Test deprecated flag --enable_fixed_key_encryption, which is still
|
||||||
|
@ -627,13 +634,14 @@ class PackagerFunctionalTest(PackagerAppTest):
|
||||||
flags = self._GetFlags() + [
|
flags = self._GetFlags() + [
|
||||||
'--enable_fixed_key_encryption', '--key_id={0}'.format(
|
'--enable_fixed_key_encryption', '--key_id={0}'.format(
|
||||||
self.encryption_key_id), '--key={0}'.format(self.encryption_key),
|
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.assertPackageSuccess(self._GetStreams(['audio', 'video']), flags)
|
||||||
self._DiffGold(self.output[0], 'bear-640x360-a-cenc-golden.mp4')
|
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.output[1], 'bear-640x360-v-cenc-golden.mp4')
|
||||||
self._DiffGold(self.mpd_output, 'bear-640x360-av-cenc-golden.mpd')
|
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')
|
self._VerifyDecryption(self.output[1], 'bear-640x360-v-golden.mp4')
|
||||||
|
|
||||||
def testPackageWithEncryptionMultiKeys(self):
|
def testPackageWithEncryptionMultiKeys(self):
|
||||||
|
@ -644,14 +652,15 @@ class PackagerFunctionalTest(PackagerAppTest):
|
||||||
flags = self._GetFlags() + [
|
flags = self._GetFlags() + [
|
||||||
'--enable_raw_key_encryption',
|
'--enable_raw_key_encryption',
|
||||||
'--keys=label=AUDIO:key_id={0}:key={1},label=SD:key_id={2}:key={3}'.
|
'--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),
|
format(audio_key_id, audio_key,
|
||||||
'--clear_lead={0}'.format(1), '--iv={0}'.format(self.encryption_iv)
|
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.assertPackageSuccess(self._GetStreams(['audio', 'video']), flags)
|
||||||
|
|
||||||
self.encryption_key_id = audio_key_id
|
self.encryption_key_id = audio_key_id
|
||||||
self.encryption_key = audio_key
|
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_id = video_key_id
|
||||||
self.encryption_key = video_key
|
self.encryption_key = video_key
|
||||||
self._VerifyDecryption(self.output[1], 'bear-640x360-v-golden.mp4')
|
self._VerifyDecryption(self.output[1], 'bear-640x360-v-golden.mp4')
|
||||||
|
@ -664,8 +673,9 @@ class PackagerFunctionalTest(PackagerAppTest):
|
||||||
flags = self._GetFlags() + [
|
flags = self._GetFlags() + [
|
||||||
'--enable_raw_key_encryption',
|
'--enable_raw_key_encryption',
|
||||||
'--keys=label=MyAudio:key_id={0}:key={1},label=:key_id={2}:key={3}'.
|
'--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),
|
format(audio_key_id, audio_key,
|
||||||
'--clear_lead={0}'.format(1), '--iv={0}'.format(self.encryption_iv)
|
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
|
# DRM label 'MyVideo' is not defined, will fall back to the key for the
|
||||||
# empty default label.
|
# empty default label.
|
||||||
|
@ -675,7 +685,7 @@ class PackagerFunctionalTest(PackagerAppTest):
|
||||||
|
|
||||||
self.encryption_key_id = audio_key_id
|
self.encryption_key_id = audio_key_id
|
||||||
self.encryption_key = audio_key
|
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_id = video_key_id
|
||||||
self.encryption_key = video_key
|
self.encryption_key = video_key
|
||||||
self._VerifyDecryption(self.output[1], 'bear-640x360-v-golden.mp4')
|
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[1], 'bear-640x360-v-cenc-golden.mp4')
|
||||||
self._DiffGold(self.output[2], 'bear-640x360-v-trick-1-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._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[1], 'bear-640x360-v-golden.mp4')
|
||||||
self._VerifyDecryption(self.output[2], 'bear-640x360-v-trick-1-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.output[3], 'bear-640x360-v-trick-2-cenc-golden.mp4')
|
||||||
self._DiffGold(self.mpd_output,
|
self._DiffGold(self.mpd_output,
|
||||||
'bear-640x360-av-trick-1-trick-2-cenc-golden.mpd')
|
'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[1], 'bear-640x360-v-golden.mp4')
|
||||||
self._VerifyDecryption(self.output[2], 'bear-640x360-v-trick-1-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')
|
self._VerifyDecryption(self.output[3], 'bear-640x360-v-trick-2-golden.mp4')
|
||||||
|
|
||||||
def testPackageWithEncryptionAndNoClearLead(self):
|
def testPackageWithEncryptionAndNoClearLead(self):
|
||||||
|
self.clear_lead = 0
|
||||||
self.assertPackageSuccess(
|
self.assertPackageSuccess(
|
||||||
self._GetStreams(['audio', 'video']),
|
self._GetStreams(['audio', 'video']), self._GetFlags(encryption=True))
|
||||||
self._GetFlags(encryption=True, clear_lead=0))
|
|
||||||
self._DiffGold(self.output[0],
|
self._DiffGold(self.output[0],
|
||||||
'bear-640x360-a-cenc-no-clear-lead-golden.mp4')
|
'bear-640x360-a-cenc-no-clear-lead-golden.mp4')
|
||||||
self._DiffGold(self.output[1],
|
self._DiffGold(self.output[1],
|
||||||
'bear-640x360-v-cenc-no-clear-lead-golden.mp4')
|
'bear-640x360-v-cenc-no-clear-lead-golden.mp4')
|
||||||
self._DiffGold(self.mpd_output,
|
self._DiffGold(self.mpd_output,
|
||||||
'bear-640x360-av-cenc-no-clear-lead-golden.mpd')
|
'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')
|
self._VerifyDecryption(self.output[1], 'bear-640x360-v-golden.mp4')
|
||||||
|
|
||||||
def testPackageWithEncryptionAndNoPsshInStream(self):
|
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[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.output[1], 'bear-640x360-v-cenc-no-pssh-golden.mp4')
|
||||||
self._DiffGold(self.mpd_output, 'bear-640x360-av-cenc-no-pssh-golden.mpd')
|
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')
|
self._VerifyDecryption(self.output[1], 'bear-640x360-v-golden.mp4')
|
||||||
|
|
||||||
def testPackageWithEncryptionCbc1(self):
|
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[0], 'bear-640x360-a-cbc1-golden.mp4')
|
||||||
self._DiffGold(self.output[1], 'bear-640x360-v-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._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')
|
self._VerifyDecryption(self.output[1], 'bear-640x360-v-golden.mp4')
|
||||||
|
|
||||||
def testPackageWithEncryptionCens(self):
|
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[0], 'bear-640x360-a-cens-golden.mp4')
|
||||||
self._DiffGold(self.output[1], 'bear-640x360-v-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._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')
|
self._VerifyDecryption(self.output[1], 'bear-640x360-v-golden.mp4')
|
||||||
|
|
||||||
def testPackageWithEncryptionCbcs(self):
|
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[0], 'bear-640x360-a-cbcs-golden.mp4')
|
||||||
self._DiffGold(self.output[1], 'bear-640x360-v-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._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')
|
self._VerifyDecryption(self.output[1], 'bear-640x360-v-golden.mp4')
|
||||||
|
|
||||||
def testPackageWithWebmSubsampleEncryption(self):
|
def testPackageWithWebmSubsampleEncryption(self):
|
||||||
|
@ -980,7 +1000,7 @@ class PackagerFunctionalTest(PackagerAppTest):
|
||||||
self.assertFalse(self._CompareWithGold(self.output[1],
|
self.assertFalse(self._CompareWithGold(self.output[1],
|
||||||
'bear-640x360-v-cenc-golden.mp4'))
|
'bear-640x360-v-cenc-golden.mp4'))
|
||||||
self._DiffGold(self.mpd_output, 'bear-640x360-av-cenc-golden.mpd')
|
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')
|
self._VerifyDecryption(self.output[1], 'bear-640x360-v-golden.mp4')
|
||||||
|
|
||||||
def testPackageWithEncryptionAndRealClock(self):
|
def testPackageWithEncryptionAndRealClock(self):
|
||||||
|
@ -996,7 +1016,7 @@ class PackagerFunctionalTest(PackagerAppTest):
|
||||||
self.assertFalse(self._CompareWithGold(self.output[1],
|
self.assertFalse(self._CompareWithGold(self.output[1],
|
||||||
'bear-640x360-v-cenc-golden.mp4'))
|
'bear-640x360-v-cenc-golden.mp4'))
|
||||||
self._DiffGold(self.mpd_output, 'bear-640x360-av-cenc-golden.mpd')
|
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')
|
self._VerifyDecryption(self.output[1], 'bear-640x360-v-golden.mp4')
|
||||||
|
|
||||||
def testPackageWithEncryptionAndNonDashIfIop(self):
|
def testPackageWithEncryptionAndNonDashIfIop(self):
|
||||||
|
@ -1031,6 +1051,21 @@ class PackagerFunctionalTest(PackagerAppTest):
|
||||||
os.path.join(self.tmp_dir, 'video.m3u8'),
|
os.path.join(self.tmp_dir, 'video.m3u8'),
|
||||||
'bear-640x360-v-mp4-cenc-golden.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.
|
# Test HLS with multi-segment mp4 and content in subdirectories.
|
||||||
def testPackageWithHlsMultiSegmentMp4WithCustomPath(self):
|
def testPackageWithHlsMultiSegmentMp4WithCustomPath(self):
|
||||||
test_file = os.path.join(self.test_data_dir, 'bear-640x360.mp4')
|
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._DiffLiveGold(self.output[1], 'bear-640x360-v-live-golden')
|
||||||
self._DiffGold(self.mpd_output, 'bear-640x360-av-live-static-golden.mpd')
|
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):
|
def testPackageWithLiveProfileAndEncryption(self):
|
||||||
self.assertPackageSuccess(
|
self.assertPackageSuccess(
|
||||||
self._GetStreams(['audio', 'video'], live=True),
|
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"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!--Generated with https://github.com/google/shaka-packager version <tag>-<hash>-<test>-->
|
<!--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">
|
<Period id="0">
|
||||||
<AdaptationSet id="0" contentType="audio" subsegmentAlignment="true">
|
<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 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">
|
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
||||||
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
||||||
</ContentProtection>
|
</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"/>
|
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
|
||||||
<BaseURL>output_audio.mp4</BaseURL>
|
<BaseURL>output_audio.mp4</BaseURL>
|
||||||
<SegmentBase indexRange="975-1042" timescale="1000000">
|
<SegmentBase indexRange="975-1042" timescale="1000000">
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!--Generated with https://github.com/google/shaka-packager version <tag>-<hash>-<test>-->
|
<!--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">
|
<Period id="0">
|
||||||
<AdaptationSet id="0" contentType="audio">
|
<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"/>
|
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
|
||||||
<BaseURL>output_audio.webm</BaseURL>
|
<BaseURL>output_audio.webm</BaseURL>
|
||||||
<SegmentBase indexRange="323-371" timescale="1000000">
|
<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 {
|
audio_info {
|
||||||
codec: "mp4a.40.2"
|
codec: "mp4a.40.2"
|
||||||
sampling_frequency: 44100
|
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>
|
## Generated with https://github.com/google/shaka-packager version <tag>-<hash>-<test>
|
||||||
#EXT-X-TARGETDURATION:2
|
#EXT-X-TARGETDURATION:2
|
||||||
#EXT-X-PLAYLIST-TYPE:VOD
|
#EXT-X-PLAYLIST-TYPE:VOD
|
||||||
#EXTINF:0.975,
|
#EXTINF:0.952,
|
||||||
output_audio-1.ts
|
output_audio-1.ts
|
||||||
#EXTINF:0.998,
|
|
||||||
output_audio-2.ts
|
|
||||||
#EXT-X-DISCONTINUITY
|
#EXT-X-DISCONTINUITY
|
||||||
#EXT-X-KEY:METHOD=SAMPLE-AES,URI="data:text/plain;base64,MTIzNDU2Nzg5MDEyMzQ1Ng==",IV=0x3334353637383930,KEYFORMAT="identity"
|
#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
|
output_audio-3.ts
|
||||||
#EXT-X-ENDLIST
|
#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>
|
## Generated with https://github.com/google/shaka-packager version <tag>-<hash>-<test>
|
||||||
#EXT-X-TARGETDURATION:2
|
#EXT-X-TARGETDURATION:2
|
||||||
#EXT-X-PLAYLIST-TYPE:EVENT
|
#EXT-X-PLAYLIST-TYPE:EVENT
|
||||||
#EXTINF:0.975,
|
#EXTINF:0.952,
|
||||||
output_audio-1.ts
|
output_audio-1.ts
|
||||||
#EXTINF:0.998,
|
#EXTINF:0.998,
|
||||||
output_audio-2.ts
|
output_audio-2.ts
|
||||||
#EXTINF:0.789,
|
#EXTINF:0.813,
|
||||||
output_audio-3.ts
|
output_audio-3.ts
|
||||||
|
|
|
@ -3,12 +3,12 @@
|
||||||
## Generated with https://github.com/google/shaka-packager version <tag>-<hash>-<test>
|
## Generated with https://github.com/google/shaka-packager version <tag>-<hash>-<test>
|
||||||
#EXT-X-TARGETDURATION:2
|
#EXT-X-TARGETDURATION:2
|
||||||
#EXT-X-PLAYLIST-TYPE:VOD
|
#EXT-X-PLAYLIST-TYPE:VOD
|
||||||
#EXTINF:0.975,
|
#EXTINF:0.952,
|
||||||
output_audio-1.ts
|
output_audio-1.ts
|
||||||
#EXTINF:0.998,
|
|
||||||
output_audio-2.ts
|
|
||||||
#EXT-X-DISCONTINUITY
|
#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"
|
#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
|
output_audio-3.ts
|
||||||
#EXT-X-ENDLIST
|
#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>
|
## Generated with https://github.com/google/shaka-packager version <tag>-<hash>-<test>
|
||||||
#EXT-X-TARGETDURATION:2
|
#EXT-X-TARGETDURATION:2
|
||||||
#EXT-X-PLAYLIST-TYPE:VOD
|
#EXT-X-PLAYLIST-TYPE:VOD
|
||||||
#EXTINF:0.975,
|
#EXTINF:0.952,
|
||||||
output_audio-1.ts
|
output_audio-1.ts
|
||||||
#EXTINF:0.998,
|
#EXTINF:0.998,
|
||||||
output_audio-2.ts
|
output_audio-2.ts
|
||||||
#EXTINF:0.789,
|
#EXTINF:0.813,
|
||||||
output_audio-3.ts
|
output_audio-3.ts
|
||||||
#EXT-X-ENDLIST
|
#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>
|
## Generated with https://github.com/google/shaka-packager version <tag>-<hash>-<test>
|
||||||
#EXT-X-TARGETDURATION:2
|
#EXT-X-TARGETDURATION:2
|
||||||
#EXT-X-MEDIA-SEQUENCE:1
|
#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,
|
#EXTINF:0.998,
|
||||||
output_audio-2.ts
|
output_audio-2.ts
|
||||||
#EXT-X-DISCONTINUITY
|
#EXT-X-KEY:METHOD=SAMPLE-AES,URI="data:text/plain;base64,MjM0NTY3ODkwMTIzNDU2MQ==",IV=0x3334353637383930,KEYFORMAT="identity"
|
||||||
#EXT-X-KEY:METHOD=SAMPLE-AES,URI="data:text/plain;base64,MzQ1Njc4OTAxMjM0NTYxMg==",IV=0x3334353637383930,KEYFORMAT="identity"
|
#EXTINF:0.813,
|
||||||
#EXTINF:0.789,
|
|
||||||
output_audio-3.ts
|
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
|
#EXT-X-MEDIA-SEQUENCE:1
|
||||||
#EXTINF:0.998,
|
#EXTINF:0.998,
|
||||||
output_audio-2.ts
|
output_audio-2.ts
|
||||||
#EXTINF:0.789,
|
#EXTINF:0.813,
|
||||||
output_audio-3.ts
|
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-PLAYLIST-TYPE:VOD
|
||||||
#EXT-X-MAP:URI="output_audio.mp4",BYTERANGE="967@0"
|
#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"
|
#EXT-X-KEY:METHOD=SAMPLE-AES-CENC,URI="data:text/plain;base64,MTIzNDU2Nzg5MDEyMzQ1Ng==",KEYFORMAT="identity"
|
||||||
#EXTINF:1.022,
|
#EXTINF:0.998,
|
||||||
#EXT-X-BYTERANGE:16655@1035
|
#EXT-X-BYTERANGE:16279@1035
|
||||||
output_audio.mp4
|
output_audio.mp4
|
||||||
#EXTINF:0.998,
|
#EXTINF:0.998,
|
||||||
#EXT-X-BYTERANGE:16650
|
#EXT-X-BYTERANGE:16674
|
||||||
output_audio.mp4
|
output_audio.mp4
|
||||||
#EXTINF:0.743,
|
#EXTINF:0.766,
|
||||||
#EXT-X-BYTERANGE:10272
|
#EXT-X-BYTERANGE:10632
|
||||||
output_audio.mp4
|
output_audio.mp4
|
||||||
#EXT-X-ENDLIST
|
#EXT-X-ENDLIST
|
||||||
|
|
|
@ -4,10 +4,10 @@
|
||||||
#EXT-X-TARGETDURATION:2
|
#EXT-X-TARGETDURATION:2
|
||||||
#EXT-X-PLAYLIST-TYPE:VOD
|
#EXT-X-PLAYLIST-TYPE:VOD
|
||||||
#EXT-X-MAP:URI="audio-init.mp4"
|
#EXT-X-MAP:URI="audio-init.mp4"
|
||||||
#EXTINF:1.022,
|
#EXTINF:0.998,
|
||||||
audio-1.m4s
|
audio-1.m4s
|
||||||
#EXTINF:0.998,
|
#EXTINF:0.998,
|
||||||
audio-2.m4s
|
audio-2.m4s
|
||||||
#EXTINF:0.743,
|
#EXTINF:0.766,
|
||||||
audio-3.m4s
|
audio-3.m4s
|
||||||
#EXT-X-ENDLIST
|
#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
|
#EXT-X-PLAYLIST-TYPE:VOD
|
||||||
#EXTINF:0.975,
|
#EXTINF:0.975,
|
||||||
output_audio-1.ts
|
output_audio-1.ts
|
||||||
#EXTINF:1.010,
|
|
||||||
output_audio-2.ts
|
|
||||||
#EXT-X-DISCONTINUITY
|
#EXT-X-DISCONTINUITY
|
||||||
#EXT-X-KEY:METHOD=SAMPLE-AES,URI="data:text/plain;base64,MTIzNDU2Nzg5MDEyMzQ1Ng==",IV=0x3334353637383930,KEYFORMAT="identity"
|
#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
|
output_audio-3.ts
|
||||||
#EXT-X-ENDLIST
|
#EXT-X-ENDLIST
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -5,8 +5,8 @@
|
||||||
#EXT-X-PLAYLIST-TYPE:VOD
|
#EXT-X-PLAYLIST-TYPE:VOD
|
||||||
#EXTINF:0.975,
|
#EXTINF:0.975,
|
||||||
output_audio-1.ts
|
output_audio-1.ts
|
||||||
#EXTINF:1.010,
|
#EXTINF:0.975,
|
||||||
output_audio-2.ts
|
output_audio-2.ts
|
||||||
#EXTINF:0.801,
|
#EXTINF:0.836,
|
||||||
output_audio-3.ts
|
output_audio-3.ts
|
||||||
#EXT-X-ENDLIST
|
#EXT-X-ENDLIST
|
||||||
|
|
|
@ -7,10 +7,10 @@
|
||||||
#EXTINF:0.975,
|
#EXTINF:0.975,
|
||||||
#EXT-X-BYTERANGE:23728@794
|
#EXT-X-BYTERANGE:23728@794
|
||||||
output_audio.mp4
|
output_audio.mp4
|
||||||
#EXTINF:1.010,
|
#EXTINF:0.975,
|
||||||
#EXT-X-BYTERANGE:24574
|
#EXT-X-BYTERANGE:23730
|
||||||
output_audio.mp4
|
output_audio.mp4
|
||||||
#EXTINF:0.801,
|
#EXTINF:0.836,
|
||||||
#EXT-X-BYTERANGE:19510
|
#EXT-X-BYTERANGE:20354
|
||||||
output_audio.mp4
|
output_audio.mp4
|
||||||
#EXT-X-ENDLIST
|
#EXT-X-ENDLIST
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#EXTM3U
|
#EXTM3U
|
||||||
## Generated with https://github.com/google/shaka-packager version <tag>-<hash>-<test>
|
## 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-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
|
video.m3u8
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#EXTM3U
|
#EXTM3U
|
||||||
## Generated with https://github.com/google/shaka-packager version <tag>-<hash>-<test>
|
## 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-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
|
video.m3u8
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
||||||
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
||||||
</ContentProtection>
|
</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"/>
|
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
|
||||||
<BaseURL>output_audio.mp4</BaseURL>
|
<BaseURL>output_audio.mp4</BaseURL>
|
||||||
<SegmentBase indexRange="967-1034" timescale="44100">
|
<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">
|
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
||||||
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
||||||
</ContentProtection>
|
</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"/>
|
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
|
||||||
<BaseURL>output_audio.mp4</BaseURL>
|
<BaseURL>output_audio.mp4</BaseURL>
|
||||||
<SegmentBase indexRange="967-1034" timescale="44100">
|
<SegmentBase indexRange="967-1034" timescale="44100">
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
||||||
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
||||||
</ContentProtection>
|
</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"/>
|
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
|
||||||
<BaseURL>output_audio.mp4</BaseURL>
|
<BaseURL>output_audio.mp4</BaseURL>
|
||||||
<SegmentBase indexRange="915-982" timescale="44100">
|
<SegmentBase indexRange="915-982" timescale="44100">
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
</Representation>
|
</Representation>
|
||||||
</AdaptationSet>
|
</AdaptationSet>
|
||||||
<AdaptationSet id="1" contentType="audio" subsegmentAlignment="true">
|
<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"/>
|
<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 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">
|
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
||||||
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
||||||
</ContentProtection>
|
</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"/>
|
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
|
||||||
<BaseURL>output_audio.mp4</BaseURL>
|
<BaseURL>output_audio.mp4</BaseURL>
|
||||||
<SegmentBase indexRange="967-1034" timescale="44100">
|
<SegmentBase indexRange="967-1034" timescale="44100">
|
||||||
|
|
|
@ -21,13 +21,12 @@
|
||||||
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
||||||
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
||||||
</ContentProtection>
|
</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"/>
|
<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">
|
<SegmentTemplate timescale="44100" initialization="output_audio-init.mp4" media="output_audio-$Number$.m4s" startNumber="1">
|
||||||
<SegmentTimeline>
|
<SegmentTimeline>
|
||||||
<S t="0" d="45056"/>
|
<S t="0" d="44032" r="1"/>
|
||||||
<S t="45056" d="44032"/>
|
<S t="88064" d="33792"/>
|
||||||
<S t="89088" d="32768"/>
|
|
||||||
</SegmentTimeline>
|
</SegmentTimeline>
|
||||||
</SegmentTemplate>
|
</SegmentTemplate>
|
||||||
</Representation>
|
</Representation>
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
</Representation>
|
</Representation>
|
||||||
</AdaptationSet>
|
</AdaptationSet>
|
||||||
<AdaptationSet id="1" contentType="audio" segmentAlignment="true">
|
<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"/>
|
<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 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">
|
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
||||||
|
@ -25,9 +25,8 @@
|
||||||
</ContentProtection>
|
</ContentProtection>
|
||||||
<SegmentTemplate timescale="44100" initialization="output_audio-init.mp4" media="output_audio-$Number$.m4s" startNumber="1">
|
<SegmentTemplate timescale="44100" initialization="output_audio-init.mp4" media="output_audio-$Number$.m4s" startNumber="1">
|
||||||
<SegmentTimeline>
|
<SegmentTimeline>
|
||||||
<S t="0" d="45056"/>
|
<S t="0" d="44032" r="1"/>
|
||||||
<S t="45056" d="44032"/>
|
<S t="88064" d="33792"/>
|
||||||
<S t="89088" d="32768"/>
|
|
||||||
</SegmentTimeline>
|
</SegmentTimeline>
|
||||||
</SegmentTemplate>
|
</SegmentTemplate>
|
||||||
</Representation>
|
</Representation>
|
||||||
|
|
|
@ -17,13 +17,12 @@
|
||||||
<AdaptationSet id="1" contentType="audio" segmentAlignment="true">
|
<AdaptationSet id="1" contentType="audio" segmentAlignment="true">
|
||||||
<ContentProtection value="cenc" schemeIdUri="urn:mpeg:dash:mp4protection:2011"/>
|
<ContentProtection value="cenc" schemeIdUri="urn:mpeg:dash:mp4protection:2011"/>
|
||||||
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b"/>
|
<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"/>
|
<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">
|
<SegmentTemplate timescale="44100" initialization="output_audio-init.mp4" media="output_audio-$Number$.m4s" startNumber="1">
|
||||||
<SegmentTimeline>
|
<SegmentTimeline>
|
||||||
<S t="0" d="45056"/>
|
<S t="0" d="44032" r="1"/>
|
||||||
<S t="45056" d="44032"/>
|
<S t="88064" d="33792"/>
|
||||||
<S t="89088" d="32768"/>
|
|
||||||
</SegmentTimeline>
|
</SegmentTimeline>
|
||||||
</SegmentTemplate>
|
</SegmentTemplate>
|
||||||
</Representation>
|
</Representation>
|
||||||
|
|
|
@ -17,13 +17,12 @@
|
||||||
<AdaptationSet id="1" contentType="audio" segmentAlignment="true">
|
<AdaptationSet id="1" contentType="audio" segmentAlignment="true">
|
||||||
<ContentProtection value="cenc" schemeIdUri="urn:mpeg:dash:mp4protection:2011"/>
|
<ContentProtection value="cenc" schemeIdUri="urn:mpeg:dash:mp4protection:2011"/>
|
||||||
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b"/>
|
<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"/>
|
<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">
|
<SegmentTemplate timescale="44100" initialization="output_audio-init.mp4" media="output_audio-$Number$.m4s" startNumber="1">
|
||||||
<SegmentTimeline>
|
<SegmentTimeline>
|
||||||
<S t="0" d="45056"/>
|
<S t="0" d="44032" r="1"/>
|
||||||
<S t="45056" d="44032"/>
|
<S t="88064" d="33792"/>
|
||||||
<S t="89088" d="32768"/>
|
|
||||||
</SegmentTimeline>
|
</SegmentTimeline>
|
||||||
</SegmentTemplate>
|
</SegmentTemplate>
|
||||||
</Representation>
|
</Representation>
|
||||||
|
|
|
@ -15,15 +15,14 @@
|
||||||
</Representation>
|
</Representation>
|
||||||
</AdaptationSet>
|
</AdaptationSet>
|
||||||
<AdaptationSet id="1" contentType="audio" segmentAlignment="true">
|
<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"/>
|
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
|
||||||
<ContentProtection value="cenc" schemeIdUri="urn:mpeg:dash:mp4protection:2011"/>
|
<ContentProtection value="cenc" schemeIdUri="urn:mpeg:dash:mp4protection:2011"/>
|
||||||
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b"/>
|
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b"/>
|
||||||
<SegmentTemplate timescale="44100" initialization="output_audio-init.mp4" media="output_audio-$Number$.m4s" startNumber="1">
|
<SegmentTemplate timescale="44100" initialization="output_audio-init.mp4" media="output_audio-$Number$.m4s" startNumber="1">
|
||||||
<SegmentTimeline>
|
<SegmentTimeline>
|
||||||
<S t="0" d="45056"/>
|
<S t="0" d="44032" r="1"/>
|
||||||
<S t="45056" d="44032"/>
|
<S t="88064" d="33792"/>
|
||||||
<S t="89088" d="32768"/>
|
|
||||||
</SegmentTimeline>
|
</SegmentTimeline>
|
||||||
</SegmentTemplate>
|
</SegmentTemplate>
|
||||||
</Representation>
|
</Representation>
|
||||||
|
|
|
@ -13,13 +13,12 @@
|
||||||
</Representation>
|
</Representation>
|
||||||
</AdaptationSet>
|
</AdaptationSet>
|
||||||
<AdaptationSet id="1" contentType="audio" segmentAlignment="true">
|
<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"/>
|
<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">
|
<SegmentTemplate timescale="44100" initialization="output_audio-init.mp4" media="output_audio-$Number$.m4s" startNumber="1">
|
||||||
<SegmentTimeline>
|
<SegmentTimeline>
|
||||||
<S t="0" d="45056"/>
|
<S t="0" d="44032" r="1"/>
|
||||||
<S t="45056" d="44032"/>
|
<S t="88064" d="33792"/>
|
||||||
<S t="89088" d="32768"/>
|
|
||||||
</SegmentTimeline>
|
</SegmentTimeline>
|
||||||
</SegmentTemplate>
|
</SegmentTemplate>
|
||||||
</Representation>
|
</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>
|
</Representation>
|
||||||
</AdaptationSet>
|
</AdaptationSet>
|
||||||
<AdaptationSet id="1" contentType="audio" segmentAlignment="true">
|
<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"/>
|
<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">
|
<SegmentTemplate timescale="44100" initialization="output_audio-init.mp4" media="output_audio-$Number$.m4s" startNumber="1">
|
||||||
<SegmentTimeline>
|
<SegmentTimeline>
|
||||||
<S t="0" d="45056"/>
|
<S t="0" d="44032" r="1"/>
|
||||||
<S t="45056" d="44032"/>
|
<S t="88064" d="33792"/>
|
||||||
<S t="89088" d="32768"/>
|
|
||||||
</SegmentTimeline>
|
</SegmentTimeline>
|
||||||
</SegmentTemplate>
|
</SegmentTemplate>
|
||||||
</Representation>
|
</Representation>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#EXTM3U
|
#EXTM3U
|
||||||
## Generated with https://github.com/google/shaka-packager version <tag>-<hash>-<test>
|
## 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-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
|
video.m3u8
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#EXTM3U
|
#EXTM3U
|
||||||
## Generated with https://github.com/google/shaka-packager version <tag>-<hash>-<test>
|
## 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-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
|
video/video.m3u8
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
||||||
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
||||||
</ContentProtection>
|
</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"/>
|
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
|
||||||
<BaseURL>output_audio.mp4</BaseURL>
|
<BaseURL>output_audio.mp4</BaseURL>
|
||||||
<SegmentBase indexRange="967-1034" timescale="44100">
|
<SegmentBase indexRange="967-1034" timescale="44100">
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
<ContentProtection schemeIdUri="urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b">
|
||||||
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAExMjM0NTY3ODkwMTIzNDU2AAAAAA==</cenc:pssh>
|
||||||
</ContentProtection>
|
</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"/>
|
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
|
||||||
<BaseURL>output_audio.mp4</BaseURL>
|
<BaseURL>output_audio.mp4</BaseURL>
|
||||||
<SegmentBase indexRange="967-1034" timescale="44100">
|
<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",
|
} else if (base::EndsWith(file_name, ".ts",
|
||||||
base::CompareCase::INSENSITIVE_ASCII)) {
|
base::CompareCase::INSENSITIVE_ASCII)) {
|
||||||
return CONTAINER_MPEG2TS;
|
return CONTAINER_MPEG2TS;
|
||||||
|
} else if (base::EndsWith(file_name, ".wvm",
|
||||||
|
base::CompareCase::INSENSITIVE_ASCII)) {
|
||||||
|
return CONTAINER_WVM;
|
||||||
} else if (base::EndsWith(file_name, ".vtt",
|
} else if (base::EndsWith(file_name, ".vtt",
|
||||||
base::CompareCase::INSENSITIVE_ASCII)) {
|
base::CompareCase::INSENSITIVE_ASCII)) {
|
||||||
return CONTAINER_WEBVTT;
|
return CONTAINER_WEBVTT;
|
||||||
|
|
|
@ -15,47 +15,48 @@ namespace media {
|
||||||
/// Container formats supported by this utility function. New formats should be
|
/// Container formats supported by this utility function. New formats should be
|
||||||
/// added at the end of the list (before CONTAINER_MAX).
|
/// added at the end of the list (before CONTAINER_MAX).
|
||||||
enum MediaContainerName {
|
enum MediaContainerName {
|
||||||
CONTAINER_UNKNOWN, // Unknown
|
CONTAINER_UNKNOWN, // Unknown
|
||||||
CONTAINER_AAC, // AAC (Advanced Audio Coding)
|
CONTAINER_AAC, // AAC (Advanced Audio Coding)
|
||||||
CONTAINER_AC3, // AC-3
|
CONTAINER_AC3, // AC-3
|
||||||
CONTAINER_AIFF, // AIFF (Audio Interchange File Format)
|
CONTAINER_AIFF, // AIFF (Audio Interchange File Format)
|
||||||
CONTAINER_AMR, // AMR (Adaptive Multi-Rate Audio)
|
CONTAINER_AMR, // AMR (Adaptive Multi-Rate Audio)
|
||||||
CONTAINER_APE, // APE (Monkey's Audio)
|
CONTAINER_APE, // APE (Monkey's Audio)
|
||||||
CONTAINER_ASF, // ASF (Advanced / Active Streaming Format)
|
CONTAINER_ASF, // ASF (Advanced / Active Streaming Format)
|
||||||
CONTAINER_ASS, // SSA (SubStation Alpha) subtitle
|
CONTAINER_ASS, // SSA (SubStation Alpha) subtitle
|
||||||
CONTAINER_AVI, // AVI (Audio Video Interleaved)
|
CONTAINER_AVI, // AVI (Audio Video Interleaved)
|
||||||
CONTAINER_BINK, // Bink
|
CONTAINER_BINK, // Bink
|
||||||
CONTAINER_CAF, // CAF (Apple Core Audio Format)
|
CONTAINER_CAF, // CAF (Apple Core Audio Format)
|
||||||
CONTAINER_DTS, // DTS
|
CONTAINER_DTS, // DTS
|
||||||
CONTAINER_DTSHD, // DTS-HD
|
CONTAINER_DTSHD, // DTS-HD
|
||||||
CONTAINER_DV, // DV (Digital Video)
|
CONTAINER_DV, // DV (Digital Video)
|
||||||
CONTAINER_DXA, // DXA
|
CONTAINER_DXA, // DXA
|
||||||
CONTAINER_EAC3, // Enhanced AC-3
|
CONTAINER_EAC3, // Enhanced AC-3
|
||||||
CONTAINER_FLAC, // FLAC (Free Lossless Audio Codec)
|
CONTAINER_FLAC, // FLAC (Free Lossless Audio Codec)
|
||||||
CONTAINER_FLV, // FLV (Flash Video)
|
CONTAINER_FLV, // FLV (Flash Video)
|
||||||
CONTAINER_GSM, // GSM (Global System for Mobile Audio)
|
CONTAINER_GSM, // GSM (Global System for Mobile Audio)
|
||||||
CONTAINER_H261, // H.261
|
CONTAINER_H261, // H.261
|
||||||
CONTAINER_H263, // H.263
|
CONTAINER_H263, // H.263
|
||||||
CONTAINER_H264, // H.264
|
CONTAINER_H264, // H.264
|
||||||
CONTAINER_HLS, // HLS (Apple HTTP Live Streaming PlayList)
|
CONTAINER_HLS, // HLS (Apple HTTP Live Streaming PlayList)
|
||||||
CONTAINER_IRCAM, // Berkeley/IRCAM/CARL Sound Format
|
CONTAINER_IRCAM, // Berkeley/IRCAM/CARL Sound Format
|
||||||
CONTAINER_MJPEG, // MJPEG video
|
CONTAINER_MJPEG, // MJPEG video
|
||||||
CONTAINER_MOV, // QuickTime / MOV / MPEG4
|
CONTAINER_MOV, // QuickTime / MOV / MPEG4
|
||||||
CONTAINER_MP3, // MP3 (MPEG audio layer 2/3)
|
CONTAINER_MP3, // MP3 (MPEG audio layer 2/3)
|
||||||
CONTAINER_MPEG2PS, // MPEG-2 Program Stream
|
CONTAINER_MPEG2PS, // MPEG-2 Program Stream
|
||||||
CONTAINER_MPEG2TS, // MPEG-2 Transport Stream
|
CONTAINER_MPEG2TS, // MPEG-2 Transport Stream
|
||||||
CONTAINER_MPEG4BS, // MPEG-4 Bitstream
|
CONTAINER_MPEG4BS, // MPEG-4 Bitstream
|
||||||
CONTAINER_OGG, // Ogg
|
CONTAINER_OGG, // Ogg
|
||||||
CONTAINER_RM, // RM (RealMedia)
|
CONTAINER_RM, // RM (RealMedia)
|
||||||
CONTAINER_SRT, // SRT (SubRip subtitle)
|
CONTAINER_SRT, // SRT (SubRip subtitle)
|
||||||
CONTAINER_SWF, // SWF (ShockWave Flash)
|
CONTAINER_SWF, // SWF (ShockWave Flash)
|
||||||
CONTAINER_TTML, // TTML file.
|
CONTAINER_TTML, // TTML file.
|
||||||
CONTAINER_VC1, // VC-1
|
CONTAINER_VC1, // VC-1
|
||||||
CONTAINER_WAV, // WAV / WAVE (Waveform Audio)
|
CONTAINER_WAV, // WAV / WAVE (Waveform Audio)
|
||||||
CONTAINER_WEBM, // Matroska / WebM
|
CONTAINER_WEBM, // Matroska / WebM
|
||||||
CONTAINER_WEBVTT, // WebVTT file.
|
CONTAINER_WEBVTT, // WebVTT file.
|
||||||
CONTAINER_WTV, // WTV (Windows Television)
|
CONTAINER_WTV, // WTV (Windows Television)
|
||||||
CONTAINER_MAX // Must be last
|
CONTAINER_WVM, // WVM (Widevine Classic Format)
|
||||||
|
CONTAINER_MAX // Must be last
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Determine the container type from input data.
|
/// Determine the container type from input data.
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#include "packager/file/file.h"
|
#include "packager/file/file.h"
|
||||||
#include "packager/media/base/decryptor_source.h"
|
#include "packager/media/base/decryptor_source.h"
|
||||||
#include "packager/media/base/key_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/media_sample.h"
|
||||||
#include "packager/media/base/stream_info.h"
|
#include "packager/media/base/stream_info.h"
|
||||||
#include "packager/media/formats/mp2t/mp2t_media_parser.h"
|
#include "packager/media/formats/mp2t/mp2t_media_parser.h"
|
||||||
|
@ -186,7 +187,14 @@ Status Demuxer::InitializeParser() {
|
||||||
case CONTAINER_MPEG2TS:
|
case CONTAINER_MPEG2TS:
|
||||||
parser_.reset(new mp2t::Mp2tMediaParser());
|
parser_.reset(new mp2t::Mp2tMediaParser());
|
||||||
break;
|
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:
|
case CONTAINER_MPEG2PS:
|
||||||
|
FALLTHROUGH_INTENDED;
|
||||||
|
case CONTAINER_WVM:
|
||||||
parser_.reset(new wvm::WvmMediaParser());
|
parser_.reset(new wvm::WvmMediaParser());
|
||||||
break;
|
break;
|
||||||
case CONTAINER_WEBM:
|
case CONTAINER_WEBM:
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#include "packager/base/files/file_path.h"
|
#include "packager/base/files/file_path.h"
|
||||||
#include "packager/base/logging.h"
|
#include "packager/base/logging.h"
|
||||||
#include "packager/base/path_service.h"
|
#include "packager/base/path_service.h"
|
||||||
|
#include "packager/base/strings/string_util.h"
|
||||||
#include "packager/base/strings/stringprintf.h"
|
#include "packager/base/strings/stringprintf.h"
|
||||||
#include "packager/base/threading/simple_thread.h"
|
#include "packager/base/threading/simple_thread.h"
|
||||||
#include "packager/base/time/clock.h"
|
#include "packager/base/time/clock.h"
|
||||||
|
@ -583,6 +584,11 @@ Status CreateAudioVideoJobs(
|
||||||
|
|
||||||
// Demuxers are shared among all streams with the same input.
|
// Demuxers are shared among all streams with the same input.
|
||||||
std::shared_ptr<Demuxer> demuxer;
|
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
|
// Replicators are shared among all streams with the same input and stream
|
||||||
// selector.
|
// selector.
|
||||||
std::shared_ptr<MediaHandler> replicator;
|
std::shared_ptr<MediaHandler> replicator;
|
||||||
|
@ -592,21 +598,32 @@ Status CreateAudioVideoJobs(
|
||||||
|
|
||||||
for (const StreamDescriptor& stream : streams) {
|
for (const StreamDescriptor& stream : streams) {
|
||||||
// If we changed our input files, we need a new demuxer.
|
// 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);
|
Status status = CreateDemuxer(stream, packaging_params, &demuxer);
|
||||||
if (!status.ok()) {
|
if (!status.ok()) {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
job_manager->Add("RemuxJob", demuxer);
|
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()) {
|
if (!stream.language.empty()) {
|
||||||
demuxer->SetLanguageOverride(stream.stream_selector, stream.language);
|
demuxer->SetLanguageOverride(stream.stream_selector, stream.language);
|
||||||
}
|
}
|
||||||
|
|
||||||
const bool new_stream = previous_input != stream.input ||
|
const bool new_stream =
|
||||||
previous_selector != stream.stream_selector;
|
new_input_file || previous_selector != stream.stream_selector;
|
||||||
previous_input = stream.input;
|
previous_input = stream.input;
|
||||||
previous_selector = stream.stream_selector;
|
previous_selector = stream.stream_selector;
|
||||||
|
|
||||||
|
@ -623,14 +640,16 @@ Status CreateAudioVideoJobs(
|
||||||
packaging_params.ad_cue_generator_params);
|
packaging_params.ad_cue_generator_params);
|
||||||
}
|
}
|
||||||
|
|
||||||
replicator = std::make_shared<Replicator>();
|
if (is_wvm_file) {
|
||||||
|
chunker =
|
||||||
std::shared_ptr<MediaHandler> chunker =
|
std::make_shared<ChunkingHandler>(packaging_params.chunking_params);
|
||||||
std::make_shared<ChunkingHandler>(packaging_params.chunking_params);
|
}
|
||||||
|
|
||||||
std::shared_ptr<MediaHandler> encryptor = CreateEncryptionHandler(
|
std::shared_ptr<MediaHandler> encryptor = CreateEncryptionHandler(
|
||||||
packaging_params, stream, encryption_key_source);
|
packaging_params, stream, encryption_key_source);
|
||||||
|
|
||||||
|
replicator = std::make_shared<Replicator>();
|
||||||
|
|
||||||
Status status;
|
Status status;
|
||||||
if (ad_cue_generator) {
|
if (ad_cue_generator) {
|
||||||
status.Update(
|
status.Update(
|
||||||
|
|
Loading…
Reference in New Issue