def testThatTimeSegmentIsSameAsNumber(self): urlParts = [ 'livesim', 'segtimeline_1', 'testpic', 'A1', 't%d.m4s' % self.seg_time ] dp = dash_proxy.DashProvider("server.org", urlParts, None, VOD_CONFIG_DIR, CONTENT_ROOT, now=self.now) time_seg = dash_proxy.get_media(dp) urlParts = [ 'livesim', 'segtimeline_1', 'testpic', 'A1', '%d.m4s' % self.seg_nr ] dp = dash_proxy.DashProvider("server.org", urlParts, None, VOD_CONFIG_DIR, CONTENT_ROOT, now=self.now) nr_seg = dash_proxy.get_media(dp) self.assertEqual(len(time_seg), len(nr_seg)) self.assertEqual(time_seg, nr_seg)
def get_segment(nr, now): urlParts = [ 'pdash', 'start_3540', 'stop_3660', 'timeoffset_0', 'testpic', 'A1', '%d.m4s' % nr ] dp = dash_proxy.DashProvider("127.0.0.1", urlParts, None, VOD_CONFIG_DIR, CONTENT_ROOT, now) return dash_proxy.get_media(dp)
def testCheckDowAndUpDependingOnTime(self): urlParts = [ 'livesim', 'ato_inf', 'baseurl_d40_u20', 'testpic', 'A1', '0.m4s' ] dp = dash_proxy.DashProvider("streamtest.eu", urlParts, None, VOD_CONFIG_DIR, CONTENT_ROOT, now=68) self.assertFalse(isMediaSegment(dash_proxy.get_media(dp))) dp = dash_proxy.DashProvider("streamtest.eu", urlParts, None, VOD_CONFIG_DIR, CONTENT_ROOT, now=108) self.assertTrue(isMediaSegment(dash_proxy.get_media(dp)))
def testCheckAvailabilityTimeFractional(self): "Check if timing with fractional seconds is correct with availabilityTimeOffset." urlParts = ['livesim', 'start_60', 'ato_1.5', 'testpic', 'A1', '0.m4s'] expected_results = [False, True, True] # should be available from 60+6-1.5=64.5s (segment duration is 6s) times = [64.3, 64.6, 64.9] for (exp, now) in zip(expected_results, times): dp = dash_proxy.DashProvider("streamtest.eu", urlParts, None, VOD_CONFIG_DIR, CONTENT_ROOT, now=now) d = dash_proxy.get_media(dp) self.assertEqual(isMediaSegment(d), exp, "Did not match for time %s" % now)
def testMediaSegmentTooEarlyWithAST(self): urlParts = ['pdash', 'start_6', 'testpic', 'A1', '0.m4s'] # Should be available after 12s dp = dash_proxy.DashProvider("127.0.0.1", urlParts, None, VOD_CONFIG_DIR, CONTENT_ROOT, now=10) d = dash_proxy.get_media(dp) self.assertEqual(d['ok'], False) dp = dash_proxy.DashProvider("127.0.0.1", urlParts, None, VOD_CONFIG_DIR, CONTENT_ROOT, now=14) d = dash_proxy.get_media(dp) self.assertEqual(len(d), 40346) # A full media segment
def testCheckAvailabilityTimeErrorMsg(self): "Check if error message is correct with availabilityTimeOffset." testelem = ['ato_30', 'ato_1.5', 'ato_inf'] expected_results = ['1.0s', '29.5s', '25.0s'] for (exp, elem) in zip(expected_results, testelem): urlParts = ['livesim', 'start_60', elem, 'testpic', 'A1', '0.m4s'] dp = dash_proxy.DashProvider("streamtest.eu", urlParts, None, VOD_CONFIG_DIR, CONTENT_ROOT, now=35) d = dash_proxy.get_media(dp) self.assertEqual(str(d), "{'ok': False, 'pl': 'Request 0.m4s before first seg AST. " + exp + " too early\\n'}")
def testMediaSegmentTooEarly(self): urlParts = ['pdash', 'testpic', 'A1', '5.m4s'] # Should be available after 36s dp = dash_proxy.DashProvider("127.0.0.1", urlParts, None, VOD_CONFIG_DIR, CONTENT_ROOT, now=34) d = dash_proxy.get_media(dp) self.assertEqual(d['ok'], False)
def testOtherOrderOfOptions(self): urlParts = [ 'livesim', 'baseurl_u20_d10', 'ato_inf', 'testpic', 'A1', '0.m4s' ] dp = dash_proxy.DashProvider("streamtest.eu", urlParts, None, VOD_CONFIG_DIR, CONTENT_ROOT, now=10) d = dash_proxy.get_media(dp) self.assertTrue(isMediaSegment(d), "Not a media segment, but %r" % d) dp = dash_proxy.DashProvider("streamtest.eu", urlParts, None, VOD_CONFIG_DIR, CONTENT_ROOT, now=25) self.assertFalse(isMediaSegment(dash_proxy.get_media(dp)), "Is a media segment, but should not be")
def testMediaSegmentBeforeTimeShiftBufferDepth(self): now = 1356999060 segment = "%d.m4s" % ((now - 330) / 6) urlParts = ['pdash', 'testpic', 'A1', segment] dp = dash_proxy.DashProvider("127.0.0.1", urlParts, None, VOD_CONFIG_DIR, CONTENT_ROOT, now=now) d = dash_proxy.get_media(dp) self.assertEqual(d['ok'], False)
def testMediaSegmentInIntervalWithoutOffset(self): "Check that segment 5 is available after an hour." urlParts = [ 'pdash', 'start_3600', 'stop_3660', 'testpic', 'A1', '5.m4s' ] dp = dash_proxy.DashProvider("127.0.0.1", urlParts, None, VOD_CONFIG_DIR, CONTENT_ROOT, now=3650) d = dash_proxy.get_media(dp) self.assertEqual(d[4:8], b'styp')
def testEmsgInSegment(self): urlParts = [ 'livesim', 'baseurl_u10_d20', 'segtimeline_1', 'segtimelineloss_1', 'testpic', 'A1', '0.m4s' ] dp = dash_proxy.DashProvider("streamtest.eu", urlParts, None, VOD_CONFIG_DIR, CONTENT_ROOT, now=10) d = dash_proxy.get_media(dp) self.assertTrue(isEmsgPresentInSegment(d))
def testThatTimeLookupWorks(self): urlParts = [ 'livesim', 'segtimeline_1', 'testpic', 'A1', 't%d.m4s' % self.seg_time ] dp = dash_proxy.DashProvider("server.org", urlParts, None, VOD_CONFIG_DIR, CONTENT_ROOT, now=self.now) d = dash_proxy.get_media(dp) self.assertTrue(isinstance(d, bytes), "A segment is returned")
def testNoScte35Event(self): segDur = 6 segNr = 1800001 now = segNr * segDur + 50 segment = "%d.m4s" % segNr urlParts = ['pdash', 'scte35_1', 'testpic', 'V1', segment] dp = dash_proxy.DashProvider("127.0.0.1", urlParts, None, VOD_CONFIG_DIR, CONTENT_ROOT, now=now) d = dash_proxy.get_media(dp) self.assertEqual(d.find(b'emsg'), -1)
def testMediaMux(self): testOutputFile = "test_mux.m4s" rm_outfile(testOutputFile) now = 1356998460 segment = "%d.m4s" % ((now - 60) // 6) urlParts = ['pdash', 'testpic', 'V1__A1', segment] dp = dash_proxy.DashProvider("127.0.0.1", urlParts, None, VOD_CONFIG_DIR, CONTENT_ROOT, now=now) d = dash_proxy.get_media(dp) write_data_to_outfile(d, testOutputFile)
def testMediaSegmentWithSidx(self): testOutputFile = "t1_sidx.m4s" rm_outfile(testOutputFile) now = 2101 # 1s after start of segment 350 segment = "349.m4s" urlParts = ['pdash', 'sidx_1', 'testpic', 'A1', segment] dp = dash_proxy.DashProvider("127.0.0.1", urlParts, None, VOD_CONFIG_DIR, CONTENT_ROOT, now=now) d = dash_proxy.get_media(dp) write_data_to_outfile(d, testOutputFile)
def testMediaSegmentForTfdt32(self): testOutputFile = "t1.m4s" rm_outfile(testOutputFile) now = 2101 # 1s after start of segment 350 segment = "349.m4s" urlParts = ['pdash', 'tfdt_32', 'testpic', 'A1', segment] dp = dash_proxy.DashProvider("127.0.0.1", urlParts, None, VOD_CONFIG_DIR, CONTENT_ROOT, now=now) d = dash_proxy.get_media(dp) write_data_to_outfile(d, testOutputFile) self.assertEqual(len(d), 39517)
def testCheckUpAndDownDependingOnTime30sPeriod(self): urlParts = [ 'livesim', 'ato_inf', 'baseurl_u20_d10', 'testpic', 'A1', '0.m4s' ] expected_results = [True, True, False, True, True, False] times = [7, 17, 27, 37, 47, 57] for (exp, now) in zip(expected_results, times): dp = dash_proxy.DashProvider("streamtest.eu", urlParts, None, VOD_CONFIG_DIR, CONTENT_ROOT, now=now) self.assertEqual(isMediaSegment(dash_proxy.get_media(dp)), exp, "Did not match for time %s" % now)
def testLastMediaSegment(self): """With total duration of 2100, the last segment shall be 349 (independent of start) and available at 4101 start+dur_1800+dur_300.""" urlParts = [ 'pdash', 'start_2000', 'dur_1800', 'dur_300', 'testpic', 'A1', '349.m4s' ] dp = dash_proxy.DashProvider("streamtest.eu", urlParts, None, VOD_CONFIG_DIR, CONTENT_ROOT, now=4101) d = dash_proxy.get_media(dp) # print "LMSG at %d" % d.find("lmsg") self.assertEqual(d.find(b"lmsg"), 24)
def testTtmlSegment(self): testOutputFile = "sub.m4s" rm_outfile(testOutputFile) segmentNr = 718263000 segment = "%d.m4s" % segmentNr now = segmentNr * 2 + 10 urlParts = ['livsim', 'ato_inf', 'testpic_stpp', 'S1', segment] dp = dash_proxy.DashProvider("127.0.0.1", urlParts, None, VOD_CONFIG_DIR, CONTENT_ROOT, now=now) d = dash_proxy.get_media(dp) write_data_to_outfile(d, testOutputFile) self.assertTrue(d.find(b'begin="399035:00:00.000"') > 0) self.assertTrue(d.find(b'eng : UTC = 2015-07-10T11:00:00Z') > 0)
def testScte35Event(self): testOutputFile = "seg_scte35.m4s" rm_outfile(testOutputFile) segDur = 6 segNr = 1800000 now = segNr * segDur + 50 segment = "%d.m4s" % segNr urlParts = ['pdash', 'scte35_3', 'testpic', 'V1', segment] dp = dash_proxy.DashProvider("127.0.0.1", urlParts, None, VOD_CONFIG_DIR, CONTENT_ROOT, now=now) d = dash_proxy.get_media(dp) self.assertEqual(d.find(b'emsg'), 28) write_data_to_outfile(d, testOutputFile)
def testTfdtValueFromZero(self): "Tfdt value = mediaPresentationTime which corresponds to segmentNr*duration" now = 1393936560 segNr = 232322749 segment = "%d.m4s" % segNr urlParts = ['pdash', 'testpic', 'V1', segment] dp = dash_proxy.DashProvider("127.0.0.1", urlParts, None, VOD_CONFIG_DIR, CONTENT_ROOT, now=now) d = dash_proxy.get_media(dp) rm_outfile('tmp.m4s') tmp_name = join(OUT_DIR, 'tmp.m4s') with open(tmp_name, 'wb') as ofh: ofh.write(d) mf = MediaSegmentFilter(tmp_name) mf.filter() rm_outfile('tmp.m4s') tfdtValue = mf.tfdt_value presentationTime = tfdtValue // 90000 segmentTime = segNr * 6 self.assertEqual(presentationTime, segmentTime)