#[derive(Debug, Clone, PartialEq)]
pub struct Mpd {
pub id: Option<String>,
pub presentation_type: PresentationType,
pub media_presentation_duration: Option<f64>,
pub min_buffer_time: f64,
pub minimum_update_period: Option<f64>,
pub availability_start_time: Option<String>,
pub availability_end_time: Option<String>,
pub time_shift_buffer_depth: Option<f64>,
pub suggested_presentation_delay: Option<f64>,
pub publish_time: Option<String>,
pub max_segment_duration: Option<f64>,
pub max_subsegment_duration: Option<f64>,
pub profiles: String,
pub base_urls: Vec<BaseUrl>,
pub utc_timings: Vec<UtcTiming>,
pub locations: Vec<Location>,
pub service_descriptions: Vec<ServiceDescription>,
pub content_steering: Option<ContentSteering>,
pub patch_locations: Vec<PatchLocation>,
pub essential_properties: Vec<Descriptor>,
pub supplemental_properties: Vec<Descriptor>,
pub metrics: Vec<Metrics>,
pub periods: Vec<Period>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct BaseUrl {
pub url: String,
pub service_location: Option<String>,
pub availability_time_offset: Option<f64>,
pub availability_time_complete: Option<bool>,
pub byte_range: Option<String>,
pub dvb_priority: Option<u32>,
pub dvb_weight: Option<u32>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct PatchLocation {
pub url: String,
pub service_location: Option<String>,
pub ttl: Option<f64>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum PresentationType {
Static,
Dynamic,
}
#[derive(Debug, Clone, PartialEq)]
pub struct Period {
pub id: Option<String>,
pub start: Option<f64>,
pub duration: Option<f64>,
pub xlink_href: Option<String>,
pub xlink_actuate: Option<String>,
pub base_urls: Vec<BaseUrl>,
pub supplemental_properties: Vec<Descriptor>,
pub essential_properties: Vec<Descriptor>,
pub asset_identifier: Option<Descriptor>,
pub event_streams: Vec<EventStream>,
pub preselections: Vec<Preselection>,
pub segment_base: Option<SegmentBase>,
pub segment_list: Option<SegmentList>,
pub segment_template: Option<SegmentTemplate>,
pub subsets: Vec<Subset>,
pub adaptation_sets: Vec<AdaptationSet>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct AdaptationSet {
pub id: Option<u32>,
pub mime_type: Option<String>,
pub codecs: Option<String>,
pub content_type: Option<ContentType>,
pub lang: Option<String>,
pub width: Option<u32>,
pub height: Option<u32>,
pub frame_rate: Option<String>,
pub min_width: Option<u32>,
pub min_height: Option<u32>,
pub min_frame_rate: Option<String>,
pub min_bandwidth: Option<u64>,
pub max_bandwidth: Option<u64>,
pub max_width: Option<u32>,
pub max_height: Option<u32>,
pub max_frame_rate: Option<String>,
pub par: Option<String>,
pub audio_sampling_rate: Option<u32>,
pub sar: Option<String>,
pub profiles: Option<String>,
pub scan_type: Option<String>,
pub start_with_sap: Option<u32>,
pub max_playout_rate: Option<f64>,
pub selection_priority: Option<u32>,
pub coding_dependency: Option<bool>,
pub supplemental_codecs: Option<String>,
pub maximum_sap_period: Option<f64>,
pub segment_profiles: Option<String>,
pub segment_alignment: bool,
pub subsegment_alignment: bool,
pub bitstream_switching: Option<bool>,
pub base_urls: Vec<BaseUrl>,
pub roles: Vec<Descriptor>,
pub accessibilities: Vec<Descriptor>,
pub audio_channel_configurations: Vec<Descriptor>,
pub labels: Vec<Label>,
pub group_labels: Vec<Label>,
pub essential_properties: Vec<Descriptor>,
pub supplemental_properties: Vec<Descriptor>,
pub viewpoints: Vec<Descriptor>,
pub frame_packings: Vec<Descriptor>,
pub inband_event_streams: Vec<Descriptor>,
pub producer_reference_times: Vec<ProducerReferenceTime>,
pub content_components: Vec<ContentComponent>,
pub segment_sequence_properties: Vec<SegmentSequenceProperties>,
pub segment_base: Option<SegmentBase>,
pub segment_list: Option<SegmentList>,
pub segment_template: Option<SegmentTemplate>,
pub event_streams: Vec<EventStream>,
pub content_protections: Vec<ContentProtection>,
pub representations: Vec<Representation>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ContentType {
Video,
Audio,
Text,
Image,
Muxed,
}
#[derive(Debug, Clone, PartialEq)]
pub struct Representation {
pub id: String,
pub bandwidth: u64,
pub width: Option<u32>,
pub height: Option<u32>,
pub codecs: Option<String>,
pub frame_rate: Option<String>,
pub audio_sampling_rate: Option<u32>,
pub mime_type: Option<String>,
pub sar: Option<String>,
pub quality_ranking: Option<u32>,
pub dependency_id: Option<String>,
pub max_playout_rate: Option<f64>,
pub scan_type: Option<String>,
pub start_with_sap: Option<u32>,
pub profiles: Option<String>,
pub coding_dependency: Option<bool>,
pub supplemental_codecs: Option<String>,
pub codec_private_data: Option<String>,
pub media_stream_structure_id: Option<String>,
pub maximum_sap_period: Option<f64>,
pub segment_profiles: Option<String>,
pub base_urls: Vec<BaseUrl>,
pub audio_channel_configurations: Vec<Descriptor>,
pub essential_properties: Vec<Descriptor>,
pub supplemental_properties: Vec<Descriptor>,
pub frame_packings: Vec<Descriptor>,
pub inband_event_streams: Vec<Descriptor>,
pub producer_reference_times: Vec<ProducerReferenceTime>,
pub segment_sequence_properties: Vec<SegmentSequenceProperties>,
pub sub_representations: Vec<SubRepresentation>,
pub segment_base: Option<SegmentBase>,
pub segment_list: Option<SegmentList>,
pub segment_template: Option<SegmentTemplate>,
pub content_protections: Vec<ContentProtection>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct SegmentTemplate {
pub media: Option<String>,
pub initialization: Option<String>,
pub index: Option<String>,
pub timescale: u64,
pub duration: Option<u64>,
pub start_number: u64,
pub end_number: Option<u64>,
pub presentation_time_offset: u64,
pub availability_time_offset: Option<f64>,
pub availability_time_complete: Option<bool>,
pub bitstream_switching_source_url: Option<String>,
pub bitstream_switching_range: Option<String>,
pub segment_timeline: Option<Vec<TimelineEntry>>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct TimelineEntry {
pub t: Option<u64>,
pub d: u64,
pub r: i64,
pub k: Option<u64>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct SegmentBase {
pub timescale: u64,
pub presentation_time_offset: u64,
pub index_range: Option<String>,
pub index_range_exact: Option<bool>,
pub availability_time_offset: Option<f64>,
pub availability_time_complete: Option<bool>,
pub initialization_source_url: Option<String>,
pub initialization_range: Option<String>,
pub representation_index_source_url: Option<String>,
pub representation_index_range: Option<String>,
pub bitstream_switching_source_url: Option<String>,
pub bitstream_switching_range: Option<String>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct SegmentList {
pub xlink_href: Option<String>,
pub xlink_actuate: Option<String>,
pub timescale: u64,
pub duration: Option<u64>,
pub start_number: u64,
pub end_number: Option<u64>,
pub presentation_time_offset: u64,
pub availability_time_offset: Option<f64>,
pub availability_time_complete: Option<bool>,
pub initialization_source_url: Option<String>,
pub initialization_range: Option<String>,
pub representation_index_source_url: Option<String>,
pub representation_index_range: Option<String>,
pub bitstream_switching_source_url: Option<String>,
pub bitstream_switching_range: Option<String>,
pub segment_urls: Vec<SegmentUrl>,
pub segment_timeline: Option<Vec<TimelineEntry>>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SegmentUrl {
pub media: Option<String>,
pub media_range: Option<String>,
pub index_range: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Descriptor {
pub scheme_id_uri: String,
pub value: Option<String>,
pub id: Option<String>,
pub dvb_url: Option<String>,
pub dvb_mime_type: Option<String>,
pub dvb_font_family: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct UtcTiming {
pub scheme_id_uri: String,
pub value: Option<String>,
pub id: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ContentProtection {
pub scheme_id_uri: String,
pub value: Option<String>,
pub default_kid: Option<String>,
pub pssh: Option<String>,
pub robustness: Option<String>,
pub ref_: Option<String>,
pub ref_id: Option<String>,
pub laurl: Option<String>,
pub pro: Option<String>,
pub certurls: Vec<CertUrl>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct EventStream {
pub scheme_id_uri: String,
pub value: Option<String>,
pub timescale: u64,
pub presentation_time_offset: u64,
pub events: Vec<Event>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Event {
pub presentation_time: u64,
pub duration: Option<u64>,
pub id: Option<String>,
pub message_data: Option<String>,
pub content: Option<String>,
pub signal_binary: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Location {
pub url: String,
pub service_location: Option<String>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct ServiceDescription {
pub id: Option<u32>,
pub scope: Option<Descriptor>,
pub latency: Option<Latency>,
pub playback_rate: Option<PlaybackRate>,
pub operating_quality: Option<OperatingQuality>,
pub operating_bandwidth: Option<OperatingBandwidth>,
pub client_data_reporting: Option<ClientDataReporting>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Latency {
pub target: Option<u32>,
pub min: Option<u32>,
pub max: Option<u32>,
pub reference_id: Option<u32>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct PlaybackRate {
pub min: Option<f64>,
pub max: Option<f64>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ContentSteering {
pub server_url: String,
pub default_service_location: Option<String>,
pub query_before_start: Option<bool>,
pub client_requirement: Option<bool>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ProducerReferenceTime {
pub id: u32,
pub inband: Option<bool>,
pub type_: Option<String>,
pub application_scheme: Option<String>,
pub wall_clock_time: String,
pub presentation_time: u64,
pub utc_timing: Option<UtcTiming>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct SubRepresentation {
pub level: Option<u32>,
pub bandwidth: Option<u64>,
pub content_component: Option<String>,
pub codecs: Option<String>,
pub dependency_level: Option<String>,
pub width: Option<u32>,
pub height: Option<u32>,
pub mime_type: Option<String>,
pub frame_rate: Option<String>,
pub audio_sampling_rate: Option<u32>,
pub sar: Option<String>,
pub scan_type: Option<String>,
pub profiles: Option<String>,
pub start_with_sap: Option<u32>,
pub max_playout_rate: Option<f64>,
pub coding_dependency: Option<bool>,
pub maximum_sap_period: Option<f64>,
pub segment_profiles: Option<String>,
pub content_protections: Vec<ContentProtection>,
pub audio_channel_configurations: Vec<Descriptor>,
pub frame_packings: Vec<Descriptor>,
pub inband_event_streams: Vec<Descriptor>,
pub essential_properties: Vec<Descriptor>,
pub supplemental_properties: Vec<Descriptor>,
pub segment_sequence_properties: Vec<SegmentSequenceProperties>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Preselection {
pub id: Option<String>,
pub preselection_components: Option<String>,
pub lang: Option<String>,
pub tag: Option<String>,
pub order: Option<u32>,
pub content_type: Option<String>,
pub mime_type: Option<String>,
pub codecs: Option<String>,
pub accessibilities: Vec<Descriptor>,
pub roles: Vec<Descriptor>,
pub viewpoints: Vec<Descriptor>,
pub labels: Vec<Label>,
pub essential_properties: Vec<Descriptor>,
pub supplemental_properties: Vec<Descriptor>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ContentComponent {
pub id: Option<String>,
pub content_type: Option<String>,
pub lang: Option<String>,
pub accessibilities: Vec<Descriptor>,
pub roles: Vec<Descriptor>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct OperatingQuality {
pub media_type: Option<String>,
pub min: Option<u32>,
pub max: Option<u32>,
pub target: Option<u32>,
pub type_: Option<String>,
pub max_quality_difference: Option<u32>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct OperatingBandwidth {
pub media_type: Option<String>,
pub min: Option<u32>,
pub max: Option<u32>,
pub target: Option<u32>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Label {
pub lang: Option<String>,
pub text: String,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct CertUrl {
pub url: String,
pub cert_type: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ClientDataReporting {
pub service_locations: Option<String>,
pub adaptation_sets: Option<String>,
pub cmcd_parameters: Option<CmcdParameters>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct CmcdParameters {
pub scheme_id_uri: String,
pub value: Option<String>,
pub id: Option<String>,
pub version: Option<String>,
pub session_id: Option<String>,
pub content_id: Option<String>,
pub mode: Option<String>,
pub keys: Option<String>,
pub include_in_requests: Option<String>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct Metrics {
pub metrics: String,
pub reportings: Vec<Descriptor>,
pub ranges: Vec<MetricsRange>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct MetricsRange {
pub starttime: Option<f64>,
pub duration: Option<f64>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Subset {
pub contains: String,
pub id: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct PatchDocument {
pub mpd_id: String,
pub original_publish_time: String,
pub publish_time: String,
pub operations: Vec<PatchOperation>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct PatchOperation {
pub action: PatchAction,
pub selector: String,
pub position: Option<PatchPosition>,
pub value: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum PatchAction {
Add,
Remove,
Replace,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum PatchPosition {
Before,
After,
Prepend,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SegmentSequenceProperties {
pub cadence: Option<u32>,
pub sap_type: Option<u32>,
pub event: Option<bool>,
pub alignment: Option<String>,
}