diff --git a/DASH-MPD.xsd b/DASH-MPD.xsd index be7a593..8f1af03 100644 --- a/DASH-MPD.xsd +++ b/DASH-MPD.xsd @@ -107,6 +107,7 @@ + @@ -185,6 +186,7 @@ + @@ -1189,7 +1191,7 @@ - + @@ -1205,7 +1207,7 @@ - + diff --git a/DASH.abnf b/DASH.abnf new file mode 100644 index 0000000..9629c59 --- /dev/null +++ b/DASH.abnf @@ -0,0 +1,215 @@ +; ============================================================================= +; DASH-MPD-values.abnf +; +; Combined ABNF definitions for ISO/IEC 23009-1:2026 (DASH 6th Edition) +; Companion file to DASH-MPD.xsd for automated MPD value validation. +; +; External rules referenced but defined elsewhere: +; host, port - IETF RFC 3986 (as augmented by RFC 6874) +; http-URI, https-URI - IETF RFC 9110 Section 4.2 +; ============================================================================= + + +; ============================================================================= +; 5.3.11.2 - Preselection Descriptor +; Scheme: urn:mpeg:dash:preselection:2016 +; ============================================================================= + +PRESELECTION-DESCRIPTOR-VALUE = TAG-VALUE "," ID-LIST + +ID-LIST = ID-VALUE *( WHITESPACE ID-VALUE ) + +TAG-VALUE = STRING + +ID-VALUE = 1*DIGIT + +WHITESPACE = 1*WSP + + +; ============================================================================= +; 5.8.5.2 - MP4 Protection +; Scheme: urn:mpeg:dash:mp4protection:2011 +; ============================================================================= + +MP4-PROTECTION-VALUE = VERSIONED-4CC + +VERSIONED-4CC = CCCC [ CCCC-VERSION ] + +CCCC = ALPHA ALPHA ALPHA ALPHA + +CCCC-VERSION = ":" 1*8HEXDIG + + +; ============================================================================= +; 5.8.5.3 - CA_descriptor +; Scheme: urn:mpeg:dash:13818:1:CA_descriptor:2011 +; ============================================================================= + +CA-DESCRIPTOR-VALUE = LHEX LHEX LHEX LHEX + +LHEX = DIGIT / "a" / "b" / "c" / "d" / "e" / "f" + + +; ============================================================================= +; 5.8.5.4 - Frame Packing +; Scheme: urn:mpeg:dash:14496:10:frame_packing_arrangement_type:2011 +; urn:mpeg:dash:13818:1:stereo_video_format_type:2011 +; ============================================================================= + +FRAME-PACKING-ARRANGEMENT-TYPE-VALUE = VIDEO-FRAME-PACKING-TYPE + +STEREO-VIDEO-FORMAT-TYPE = VIDEO-FRAME-PACKING-TYPE + +VIDEO-FRAME-PACKING-TYPE = 1*2DIGIT + + +; ============================================================================= +; 5.8.5.6 - DASH Role Scheme +; Scheme: urn:mpeg:dash:role:2011 +; ============================================================================= + +ROLE-VALUE = "caption" / "subtitle" / "main" / "alternate" + / "supplementary" +ROLE-VALUE =/ "commentary" / "dub" / "description" / "sign" + / "metadata" +ROLE-VALUE =/ "enhanced-audio-intelligibility" / "emergency" +ROLE-VALUE =/ "forced-subtitle" / "easyreader" / "karaoke" + + +; ============================================================================= +; 5.8.5.7 - DASH Multiple Views Scheme (Stereo ID) +; Scheme: urn:mpeg:dash:stereoid:2011 +; ============================================================================= + +STEROID-VALUE = VIEW-INDICATOR *( SP VIEW-INDICATOR ) +VIEW-INDICATOR = ("l"/"r") 1*DIGIT + + +; ============================================================================= +; 5.8.5.8 - DASH UTC Timing Schemes +; ============================================================================= + +; --- urn:mpeg:dash:utc:ntp:2014 / urn:mpeg:dash:utc:sntp:2014 --- + +NTP-VALUE = TIME-SERVER *( WS TIME-SERVER ) + +TIME-SERVER = host [ ":" port ] + ; host and port per IETF RFC 3986 / RFC 6874 + +; --- urn:mpeg:dash:utc:http-head:2014 +; urn:mpeg:dash:utc:http-xsdate:2014 +; urn:mpeg:dash:utc:http-iso:2014 +; urn:mpeg:dash:utc:http-ntp:2014 --- + +HTTP-VALUE = httpurl *( WS httpurl ) + ; httpurl = http-URI / https-URI per IETF RFC 9110 + +; --- urn:mpeg:dash:utc:direct:2014 --- + +DIRECT-VALUE = [ "-" ] 4DIGIT "-" 2DIGIT "-" 2DIGIT + "T" 2DIGIT ":" 2DIGIT ":" 2DIGIT ["." 1*DIGIT] + [ "Z" / ( "+" / "-" ) 2DIGIT ":" 2DIGIT ] + + +; ============================================================================= +; 5.8.5.9 - Audio Receiver Mix +; Scheme: urn:mpeg:dash:audio-receiver-mix:2014 +; ============================================================================= + +AUDIO-RECEIVER-MIX-VALUE = ADAPTATION-SET-ID + +ADAPTATION-SET-ID = DECIMAL-DIGITS + + +; ============================================================================= +; 5.8.5.10 - MPD Adaptation Set Linking +; Scheme: urn:mpeg:dash:mpd-as-linking:2015 +; ============================================================================= + +MPD-AS-LINKING-VALUE = MPD-URL [ WSP TIMELINE-OFFSET ] + +MPD-URL = httpurl + ; http-URI / https-URI per IETF RFC 9110 + +TIMELINE-OFFSET = "timeOffset=" [ "-" ] DECIMAL-DIGITS + + +; ============================================================================= +; 5.8.5.11 - Sub-Asset Identifier +; Scheme: urn:mpeg:dash:sai:2015 +; ============================================================================= + +SAI-VALUE = *VCHAR + + +; ============================================================================= +; 5.8.5.13 - Quality Ranking Equivalence +; Scheme: urn:mpeg:dash:qr-equivalence:2018 +; ============================================================================= + +QR-EQUIVALENCE-VALUE = AS-ID *( WSP AS-ID ) + +AS-ID = DECIMAL-DIGITS + + +; ============================================================================= +; 5.8.7 - Supplementary Video (VVC picture-in-picture) +; SupVideoInfo@processingInfo value syntax +; ============================================================================= + +processingInfo = dataUnitsReplaceable 1*( SP regionId ) + +dataUnitsReplaceable = "0" / "1" + +regionId = 1*DIGIT + + + +; ============================================================================= +; Annex H.2.3 - Static Spatial Relationship Description (SRD) +; Scheme: urn:mpeg:dash:srd:2014 +; ============================================================================= + +STATIC-SRD-VALUE = source-id "," object-x "," object-y "," + object-width "," object-height + [ "," total-width + [ "," total-height + [ "," spatial-set-id ] ] ] + +source-id = DECIMAL-DIGITS +spatial-set-id = DECIMAL-DIGITS +object-x = DECIMAL-DIGITS +object-y = DECIMAL-DIGITS +object-width = DECIMAL-DIGITS +object-height = DECIMAL-DIGITS +total-width = DECIMAL-DIGITS +total-height = DECIMAL-DIGITS + + +; ============================================================================= +; Annex H.2.4 - Dynamic Spatial Relationship Description (SRD) +; Scheme: urn:mpeg:dash:srd:dynamic:2016 +; ============================================================================= + +DYNAMIC-SRD-VALUE = source-id "," coordinate-id [ "," spatial-set-id ] + +coordinate-id = STRING + + +; ============================================================================= +; Shared terminal rules +; ============================================================================= + +DECIMAL-DIGITS = 1*DIGIT + +STRING = *VCHAR + +; WS is used in the spec as an alias for whitespace between tokens +WS = 1*WSP + +; httpurl is a placeholder for http-URI / https-URI from RFC 9110 +; Parsers should accept both schemes. +; httpurl = http-URI / https-URI ; defined in IETF RFC 9110 sec. 4.2 + +; HEXDIG is already defined in RFC 5234 core rules. +; LHEX is the lowercase-only subset used by the CA_descriptor scheme. diff --git a/example_G23.mpd b/example_G23.mpd index c34f919..a8477ec 100644 --- a/example_G23.mpd +++ b/example_G23.mpd @@ -4,7 +4,7 @@ http://liveserver.com/live/live1/ - + diff --git a/example_G29-1.mpd b/example_G29-1.mpd index 7b9cb96..c148e89 100644 --- a/example_G29-1.mpd +++ b/example_G29-1.mpd @@ -1,10 +1,10 @@ - + http://cdn1.example.com/ - + diff --git a/xml2rtf.sh b/xml2rtf.sh new file mode 100755 index 0000000..ad016f6 --- /dev/null +++ b/xml2rtf.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +# Check if an input file is provided +if [ -z "$1" ]; then + echo "Usage: ./xml2rtf.sh " + exit 1 +fi + +INPUT_FILE="$1" +# Create an output filename (e.g., data.xml -> data.rtf) +OUTPUT_FILE="${INPUT_FILE%.*}.rtf" + +# Check if 'highlight' is installed +if ! command -v highlight &> /dev/null; then + echo "Error: 'highlight' is not installed." + echo "Please run: brew install highlight" + exit 1 +fi + +echo "Converting $INPUT_FILE to $OUTPUT_FILE..." + +# 1. xmllint --format: Indents and pretty-prints the XML +# 2. highlight: Converts to RTF with B&W styling +# --syntax=xml: Tells the tool it is processing XML +# --out-format=rtf: Sets output to Rich Text +# --style=bw: Uses the built-in Black & White theme (Bold/Italic only) +# --font="Courier New": Sets a monospaced font +# --font-size=24: Sets font size (approx 12pt in RTF context) + +xmllint --format "$INPUT_FILE" | \ +highlight --syntax=xml \ + --out-format=rtf \ + --style=print \ + --font="Courier New" \ + --font-size=9 \ + > "$OUTPUT_FILE" + +echo "Done! Saved to $OUTPUT_FILE"