def write(self, xmlnode): write_attr_value(xmlnode, 'xmlns', self.xmlns) write_attr_value(xmlnode, 'id', self.id) write_attr_value(xmlnode, 'type', self.type) write_attr_value(xmlnode, 'profiles', self.profiles) write_attr_value(xmlnode, 'availabilityStartTime', self.availability_start_time) write_attr_value(xmlnode, 'availabilityEndTime', self.availability_end_time) write_attr_value(xmlnode, 'publishTime', self.publish_time) write_attr_value(xmlnode, 'mediaPresentationDuration', self.media_presentation_duration) write_attr_value(xmlnode, 'minimumUpdatePeriod', self.minimum_update_period) write_attr_value(xmlnode, 'minBufferTime', self.min_buffer_time) write_attr_value(xmlnode, 'timeShiftBufferDepth', self.time_shift_buffer_depth) write_attr_value(xmlnode, 'suggestedPresentationDelay', self.suggested_presentation_delay) write_attr_value(xmlnode, 'maxSegmentDuration', self.max_segment_duration) write_attr_value(xmlnode, 'maxSubsegmentDuration', self.max_subsegment_duration) write_child_node(xmlnode, 'ProgramInformation', self.program_informations) write_child_node(xmlnode, 'BaseURL', self.base_urls) write_child_node(xmlnode, 'Location', self.locations) write_child_node(xmlnode, 'Period', self.periods) write_child_node(xmlnode, 'Metrics', self.metrics)
def write(self, xmlnode): write_attr_value(xmlnode, "schemeIdUri", self.scheme_id_uri) write_attr_value(xmlnode, "value", self.value) write_attr_value(xmlnode, "id", self.id) write_attr_value(xmlnode, "default_KID", self.default_key_id) write_attr_value(xmlnode, "ns2:default_KID", self.ns2_key_id) write_attr_value(xmlnode, "cenc:default_KID", self.cenc_default_kid) write_child_node(xmlnode, "cenc:pssh", self.pssh)
def write(self, xmlnode): SegmentBase.write(self, xmlnode) write_attr_value(xmlnode, 'duration', self.duration) write_attr_value(xmlnode, 'startNumber', self.start_number) write_child_node(xmlnode, 'SegmentTimeline', self.segment_timelines) write_child_node(xmlnode, 'BitstreamSwitching', self.bitstream_switchings)
def write(self, xmlnode): SegmentBase.write(self, xmlnode) write_attr_value(xmlnode, 'duration', self.duration) write_attr_value(xmlnode, 'startNumber', self.start_number) write_child_node(xmlnode, 'SegmentTimeline', self.segment_timelines) write_child_node(xmlnode, 'BitstreamSwitching', self.bitstream_switchings)
def write(self, xmlnode): write_child_node(xmlnode, 'mas:MarlinContentIds', self.marlin_content_ids) write_attr_value(xmlnode, 'cenc:default_KID', self.cenc_default_KID) write_attr_value(xmlnode, 'xmlns:cenc', self.xmlns_cenc) write_attr_value(xmlnode, 'schemeIdUri', self.scheme_id_uri) write_attr_value(xmlnode, 'value', self.value) write_attr_value(xmlnode, 'id', self.id) write_child_node(xmlnode, 'cenc:pssh', self.widevine)
def on_get(self, req, resp, mpd_id): """ GET /mpds/{mpd_id} """ mode = '' for key, value in req.params.items(): if key == 'mode': mode = value base_url = BaseURL() if mode == 'proxy': base_url.base_url_value = "/proxy{}".format( MPDS['mpds'][str(mpd_id)]['base_url']) elif mode == 'simulation': base_url.base_url_value = "/simulation{}".format( MPDS['mpds'][str(mpd_id)]['base_url']) elif mode == 'validation': base_url.base_url_value = "/validation{}".format( MPDS['mpds'][str(mpd_id)]['base_url']) else: LOGGER.error('No mode provided as query string.') resp.status = falcon.HTTP_400 resp.body = json.dumps({ 'message': 'Please provide a mode in the request ' 'as query string: mode=proxy|simulation|validation.' }) return mpd_response = requests.get(MPDS['mpds'][str(mpd_id)]['url']) resp.content_type = 'application/dash+xml' mpd = MPEGDASHParser.parse(mpd_response.text) mpd.base_urls = [] # Add the custome base urls mpd.base_urls.append(base_url) # Add TAC signalling if mode != 'proxy': tac = DescriptorWithExtUrlQuery() tac.scheme_id_uri = 'urn:mpeg:dash:urlparam:2016:querystring' url_query_info = ExtUrlQueryInfo() url_query_info.include_in_requests = 'mpd segment' url_query_info.query_string = 'token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJEQVNILUlGIENvbmZvcm1hbmNlIiwiY2RuaXN0dCI6Mn0.QjVVZGUXOsFPiHCTax_I14su5rppK-yWPQXrkcI1gQI' url_query_info.query_template = 'dash-if-ietf-token=$query:token$' tac.ext_url_query_info = url_query_info for period in mpd.periods: for adaptation_set in period.adaptation_sets: if not adaptation_set.essential_properties: adaptation_set.essential_properties = [] adaptation_set.essential_properties.append(tac) # Serialize MPD to XML xml_doc = minidom.Document() write_child_node(xml_doc, 'MPD', mpd) resp.body = xml_doc.toprettyxml(indent=' ', newl='\n')
def write(self, xmlnode): write_attr_value(xmlnode, 'timescale', self.timescale) write_attr_value(xmlnode, 'indexRange', self.index_range) write_attr_value(xmlnode, 'indexRangeExact', self.index_range_exact) write_attr_value(xmlnode, 'presentationTimeOffset', self.presentation_time_offset) write_attr_value(xmlnode, 'availabilityTimeOffset', self.availability_time_offset) write_attr_value(xmlnode, 'availabilityTimeComplete', self.availability_time_complete) write_child_node(xmlnode, 'Initialization', self.initializations) write_child_node(xmlnode, 'RepresentationIndex', self.representation_indexes)
def write(self, xmlnode): write_attr_value(xmlnode, 'timescale', self.timescale) write_attr_value(xmlnode, 'indexRange', self.index_range) write_attr_value(xmlnode, 'indexRangeExact', self.index_range_exact) write_attr_value(xmlnode, 'presentationTimeOffset', self.presentation_time_offset) write_attr_value(xmlnode, 'availabilityTimeOffset', self.availability_time_offset) write_attr_value(xmlnode, 'availabilityTimeComplete', self.availability_time_complete) write_child_node(xmlnode, 'Initialization', self.initializations) write_child_node(xmlnode, 'RepresentationIndex', self.representation_indexes)
def write(self, xmlnode): RepresentationBase.write(self, xmlnode) write_attr_value(xmlnode, 'id', self.id) write_attr_value(xmlnode, 'width', self.width) write_attr_value(xmlnode, 'height', self.height) write_attr_value(xmlnode, 'bandwidth', self.bandwidth) write_attr_value(xmlnode, 'mimeType', self.mime_type) write_attr_value(xmlnode, 'codecs', self.codecs) write_child_node(xmlnode, 'BaseURL', self.base_urls) write_child_node(xmlnode, 'SegmentBase', self.segment_bases) write_child_node(xmlnode, 'SegmentList', self.segment_lists) write_child_node(xmlnode, 'SegmentTemplate', self.segment_templates) write_child_node(xmlnode, 'SubRepresentation', self.sub_representations)
def write(self, xmlnode): RepresentationBase.write(self, xmlnode) write_attr_value(xmlnode, 'id', self.id) write_attr_value(xmlnode, 'width', self.width) write_attr_value(xmlnode, 'height', self.height) write_attr_value(xmlnode, 'bandwidth', self.bandwidth) write_attr_value(xmlnode, 'mimeType', self.mime_type) write_attr_value(xmlnode, 'codecs', self.codecs) write_child_node(xmlnode, 'BaseURL', self.base_urls) write_child_node(xmlnode, 'SegmentBase', self.segment_bases) write_child_node(xmlnode, 'SegmentList', self.segment_lists) write_child_node(xmlnode, 'SegmentTemplate', self.segment_templates) write_child_node(xmlnode, 'SubRepresentation', self.sub_representations)
def write(self, xmlnode): write_attr_value(xmlnode, 'id', self.id) write_attr_value(xmlnode, 'lang', self.lang) write_attr_value(xmlnode, 'contentType', self.content_type) write_attr_value(xmlnode, 'par', self.par) write_child_node(xmlnode, 'Accessibility', self.accessibilities) write_child_node(xmlnode, 'Role', self.roles) write_child_node(xmlnode, 'Rating', self.ratings) write_child_node(xmlnode, 'Viewpoint', self.viewpoints)
def write(self, xmlnode): write_attr_value(xmlnode, 'id', self.id) write_attr_value(xmlnode, 'lang', self.lang) write_attr_value(xmlnode, 'contentType', self.content_type) write_attr_value(xmlnode, 'par', self.par) write_child_node(xmlnode, 'Accessibility', self.accessibilities) write_child_node(xmlnode, 'Role', self.roles) write_child_node(xmlnode, 'Rating', self.ratings) write_child_node(xmlnode, 'Viewpoint', self.viewpoints)
def write(self, xmlnode): write_attr_value(xmlnode, 'xmlns', self.xmlns) write_attr_value(xmlnode, 'id', self.id) write_attr_value(xmlnode, 'type', self.type) write_attr_value(xmlnode, 'profiles', self.profiles) write_attr_value(xmlnode, 'availabilityStartTime', self.availability_start_time) write_attr_value(xmlnode, 'availabilityEndTime', self.availability_end_time) write_attr_value(xmlnode, 'publishTime', self.publish_time) write_attr_value(xmlnode, 'mediaPresentationDuration', self.media_presentation_duration) write_attr_value(xmlnode, 'minimumUpdatePeriod', self.minimum_update_period) write_attr_value(xmlnode, 'minBufferTime', self.min_buffer_time) write_attr_value(xmlnode, 'timeShiftBufferDepth', self.time_shift_buffer_depth) write_attr_value(xmlnode, 'suggestedPresentationDelay', self.suggested_presentation_delay) write_attr_value(xmlnode, 'maxSegmentDuration', self.max_segment_duration) write_attr_value(xmlnode, 'maxSubsegmentDuration', self.max_subsegment_duration) write_child_node(xmlnode, 'ProgramInformation', self.program_informations) write_child_node(xmlnode, 'BaseURL', self.base_urls) write_child_node(xmlnode, 'Location', self.locations) write_child_node(xmlnode, 'Period', self.periods) write_child_node(xmlnode, 'Metrics', self.metrics)
def write(self, xmlnode): write_attr_value(xmlnode, 'lang', self.lang) write_attr_value(xmlnode, 'moreInformationURL', self.more_information_url) write_child_node(xmlnode, 'Title', self.titles) write_child_node(xmlnode, 'Source', self.sources) write_child_node(xmlnode, 'Copyright', self.copyrights)
def write(self, xmlnode): write_attr_value(xmlnode, 'lang', self.lang) write_attr_value(xmlnode, 'moreInformationURL', self.more_information_url) write_child_node(xmlnode, 'Title', self.titles) write_child_node(xmlnode, 'Source', self.sources) write_child_node(xmlnode, 'Copyright', self.copyrights)
def write(self, xmlnode): write_child_node(xmlnode, 'S', self.Ss)
def write(self, xmlnode): write_attr_value(xmlnode, 'metrics', self.metrics) write_child_node(xmlnode, 'Reporting', self.reportings) write_child_node(xmlnode, 'Range', self.ranges)
def get_as_doc(cls, mpd): xml_doc = minidom.Document() write_child_node(xml_doc, 'MPD', mpd) return xml_doc
def to_xmlstring(cls, mpd): xml_doc = minidom.Document() write_child_node(xml_doc, 'MPD', mpd) return xml_doc.toprettyxml()
def write(self, xmlnode): write_attr_value(xmlnode, 'schemeIdUri', self.scheme_id_uri) write_attr_value(xmlnode, 'value', self.value) write_attr_value(xmlnode, 'timescale', self.timescale) write_child_node(xmlnode, 'Event', self.events)
def write(self, xmlnode): write_child_node(xmlnode, 'mas:MarlinContentId', self.marlin_content_id) write_attr_value(xmlnode, 'xmlns:mas', self.xmlns_mas) write_attr_value(xmlnode, 'schemeIdUri', self.scheme_id_uri) write_attr_value(xmlnode, 'value', self.value) write_attr_value(xmlnode, 'id', self.id)
def write(self, xmlnode): write_attr_value(xmlnode, 'profile', self.profile) write_attr_value(xmlnode, 'profiles', self.profiles) write_attr_value(xmlnode, 'width', self.width) write_attr_value(xmlnode, 'height', self.height) write_attr_value(xmlnode, 'sar', self.sar) write_attr_value(xmlnode, 'frameRate', self.frame_rate) write_attr_value(xmlnode, 'audioSamplingRate', self.audio_sampling_rate) write_attr_value(xmlnode, 'mimeType', self.mime_type) write_attr_value(xmlnode, 'segmentProfiles', self.segment_profiles) write_attr_value(xmlnode, 'codecs', self.codecs) write_attr_value(xmlnode, 'maximumSAPPeriod', self.maximum_sap_period) write_attr_value(xmlnode, 'startWithSAP', self.start_with_sap) write_attr_value(xmlnode, 'maxPlayoutRate', self.max_playout_rate) write_attr_value(xmlnode, 'codingDependency', self.coding_dependency) write_attr_value(xmlnode, 'scanType', self.scan_type) write_child_node(xmlnode, 'FramePacking', self.frame_packings) write_child_node(xmlnode, 'AudioChannelConfiguration', self.audio_channel_configurations) write_child_node(xmlnode, 'ContentProtection', self.content_protections) write_child_node(xmlnode, 'EssentialProperty', self.essential_properties) write_child_node(xmlnode, 'SupplementalProperty', self.supplemental_properties) write_child_node(xmlnode, 'InbandEventStream', self.inband_event_streams)
def write(self, xmlnode): write_attr_value(xmlnode, 'profile', self.profiles) write_attr_value(xmlnode, 'width', self.width) write_attr_value(xmlnode, 'height', self.height) write_attr_value(xmlnode, 'sar', self.sar) write_attr_value(xmlnode, 'frameRate', self.frame_rate) write_attr_value(xmlnode, 'audioSamplingRate', self.audio_sampling_rate) write_attr_value(xmlnode, 'mimeType', self.mime_type) write_attr_value(xmlnode, 'segmentProfiles', self.segment_profiles) write_attr_value(xmlnode, 'codecs', self.codecs) write_attr_value(xmlnode, 'maximumSAPPeriod', self.maximum_sap_period) write_attr_value(xmlnode, 'startWithSAP', self.start_with_sap) write_attr_value(xmlnode, 'maxPlayoutRate', self.max_playout_rate) write_attr_value(xmlnode, 'codingDependency', self.coding_dependency) write_attr_value(xmlnode, 'scanType', self.scan_type) write_child_node(xmlnode, 'FramePacking', self.frame_packings) write_child_node(xmlnode, 'AudioChannelConfiguration', self.audio_channel_configurations) write_child_node(xmlnode, 'ContentProtection', self.content_protections) write_child_node(xmlnode, 'EssentialProperty', self.essential_properties) write_child_node(xmlnode, 'SupplementalProperty', self.supplemental_properties) write_child_node(xmlnode, 'InbandEventStream', self.inband_event_streams)
def write(self, xmlnode): MultipleSegmentBase.write(self, xmlnode) write_child_node(xmlnode, 'SegmentURL', self.segment_urls)
def write(self, xmlnode): # pylint: disable=super-on-old-class """Writing""" super(DescriptorWithExtUrlQuery, self).write(xmlnode) write_attr_value(xmlnode, 'xmlns:{}'.format(self.prefix), self.xmlns) write_child_node(xmlnode, '{}:ExtUrlQueryInfo'.format(self.prefix), self.ext_url_query_info)
def write(self, xmlnode): RepresentationBase.write(self, xmlnode) write_attr_value(xmlnode, 'id', self.id) write_attr_value(xmlnode, 'group', self.group) write_attr_value(xmlnode, 'lang', self.lang) write_attr_value(xmlnode, 'contentType', self.lang) write_attr_value(xmlnode, 'par', self.par) write_attr_value(xmlnode, 'minBandwidth', self.min_bandwidth) write_attr_value(xmlnode, 'maxBandwidth', self.max_bandwidth) write_attr_value(xmlnode, 'minWidth', self.min_width) write_attr_value(xmlnode, 'maxWidth', self.max_width) write_attr_value(xmlnode, 'minHeight', self.min_height) write_attr_value(xmlnode, 'maxHeight', self.max_height) write_attr_value(xmlnode, 'minFrameRate', self.min_frame_rate) write_attr_value(xmlnode, 'maxFrameRate', self.max_frame_rate) write_attr_value(xmlnode, 'segmentAlignment', self.segment_alignment) write_attr_value(xmlnode, 'subsegmentAlignment', self.subsegment_alignment) write_attr_value(xmlnode, 'subsegmentStartsWithSAP', self.subsegment_starts_with_sap) write_attr_value(xmlnode, 'bitstreamSwitching', self.bitstream_switching) write_child_node(xmlnode, 'Accessibility', self.accessibilities) write_child_node(xmlnode, 'Role', self.roles) write_child_node(xmlnode, 'Rating', self.ratings) write_child_node(xmlnode, 'Viewpoint', self.viewpoints) write_child_node(xmlnode, 'ContentComponent', self.content_components) write_child_node(xmlnode, 'BaseURL', self.base_urls) write_child_node(xmlnode, 'SegmentBase', self.segment_bases) write_child_node(xmlnode, 'SegmentList', self.segment_lists) write_child_node(xmlnode, 'SegmentTemplate', self.segment_templates) write_child_node(xmlnode, 'Representation', self.representations)
def write(self, xmlnode): write_attr_value(xmlnode, 'schemeIdUri', self.scheme_id_uri) write_attr_value(xmlnode, 'value', self.value) write_attr_value(xmlnode, 'timescale', self.timescale) write_child_node(xmlnode, 'Event', self.events)
def write(self, xmlnode): MultipleSegmentBase.write(self, xmlnode) write_child_node(xmlnode, 'SegmentURL', self.segment_urls)
def write(self, xmlnode): write_child_node(xmlnode, 'S', self.Ss)
def write(cls, mpd, filepath): xml_doc = minidom.Document() write_child_node(xml_doc, 'MPD', mpd) with open(filepath, 'w') as f: xml_doc.writexml(f, indent=' ', addindent=' ', newl='\n')
def write(self, xmlnode): write_attr_value(xmlnode, 'metrics', self.metrics) write_child_node(xmlnode, 'Reporting', self.reportings) write_child_node(xmlnode, 'Range', self.ranges)
def write(self, xmlnode): RepresentationBase.write(self, xmlnode) write_attr_value(xmlnode, 'id', self.id) write_attr_value(xmlnode, 'group', self.group) write_attr_value(xmlnode, 'lang', self.lang) write_attr_value(xmlnode, 'label', self.label) write_attr_value(xmlnode, 'contentType', self.content_type) write_attr_value(xmlnode, 'par', self.par) write_attr_value(xmlnode, 'minBandwidth', self.min_bandwidth) write_attr_value(xmlnode, 'maxBandwidth', self.max_bandwidth) write_attr_value(xmlnode, 'minWidth', self.min_width) write_attr_value(xmlnode, 'maxWidth', self.max_width) write_attr_value(xmlnode, 'minHeight', self.min_height) write_attr_value(xmlnode, 'maxHeight', self.max_height) write_attr_value(xmlnode, 'minFrameRate', self.min_frame_rate) write_attr_value(xmlnode, 'maxFrameRate', self.max_frame_rate) write_attr_value(xmlnode, 'segmentAlignment', self.segment_alignment) write_attr_value(xmlnode, 'selectionPriority', self.selection_priority) write_attr_value(xmlnode, 'subsegmentAlignment', self.subsegment_alignment) write_attr_value(xmlnode, 'subsegmentStartsWithSAP', self.subsegment_starts_with_sap) write_attr_value(xmlnode, 'bitstreamSwitching', self.bitstream_switching) write_child_node(xmlnode, 'Accessibility', self.accessibilities) write_child_node(xmlnode, 'Role', self.roles) write_child_node(xmlnode, 'Rating', self.ratings) write_child_node(xmlnode, 'Viewpoint', self.viewpoints) write_child_node(xmlnode, 'ContentComponent', self.content_components) write_child_node(xmlnode, 'BaseURL', self.base_urls) write_child_node(xmlnode, 'SegmentBase', self.segment_bases) write_child_node(xmlnode, 'SegmentList', self.segment_lists) write_child_node(xmlnode, 'SegmentTemplate', self.segment_templates) write_child_node(xmlnode, 'Representation', self.representations)
def write(self, xmlnode): write_attr_value(xmlnode, 'id', self.id) write_attr_value(xmlnode, 'start', self.start) write_attr_value(xmlnode, 'duration', self.duration) write_attr_value(xmlnode, 'bitstreamSwitching', self.bitstream_switching) write_child_node(xmlnode, 'BaseURL', self.base_urls) write_child_node(xmlnode, 'SegmentBase', self.segment_bases) write_child_node(xmlnode, 'SegmentList', self.segment_lists) write_child_node(xmlnode, 'SegmentTemplate', self.segment_templates) write_child_node(xmlnode, 'AssetIdentifier', self.asset_identifiers) write_child_node(xmlnode, 'EventStream', self.event_streams) write_child_node(xmlnode, 'AdaptationSet', self.adaptation_sets) write_child_node(xmlnode, 'Subset', self.subsets)
def write(self, xmlnode): write_attr_value(xmlnode, 'id', self.id) write_attr_value(xmlnode, 'start', self.start) write_attr_value(xmlnode, 'duration', self.duration) write_attr_value(xmlnode, 'bitstreamSwitching', self.bitstream_switching) write_child_node(xmlnode, 'BaseURL', self.base_urls) write_child_node(xmlnode, 'SegmentBase', self.segment_bases) write_child_node(xmlnode, 'SegmentList', self.segment_lists) write_child_node(xmlnode, 'SegmentTemplate', self.segment_templates) write_child_node(xmlnode, 'AssetIdentifier', self.asset_identifiers) write_child_node(xmlnode, 'EventStream', self.event_streams) write_child_node(xmlnode, 'AdaptationSet', self.adaptation_sets) write_child_node(xmlnode, 'Subset', self.subsets)
def write(cls, mpd, filepath): xml_doc = minidom.Document() write_child_node(xml_doc, "MPD", mpd) with open(filepath, "w") as f: xml_doc.writexml(f, indent=" ", addindent=" ", newl="\n")