Some things are hidden for a reason, and if you see them, you'll be changed forever, but I wanted to be changed forever.
- https://f002.backblazeb2.com/file/minerals/ISO_IEC_23009-1_2022(en).pdf
- https://wikipedia.org/wiki/Dynamic_Adaptive_Streaming_over_HTTP
- https://dashif.org/Guidelines-TimingModel/Timing-Model.pdf
- https://dashif.org/docs/DASH-IF-IOP-v4.3.pdf
Go language, I need a package for DASH (MPD) files
- standard library only
- use a separate file for each type
- only send new or updated files
- package is named "dash"
- package will include a parse method, byte slice input
- BaseURL is a single element not a slice
- support these elements and attributes
- MPD
- @mediaPresentationDuration
- BaseURL
- Period
- @duration
- @id
- BaseURL
- AdaptationSet
- @codecs
- @height
- @lang
- @mimeType
- @width
- ContentProtection
- @schemeIdUri
- cenc:pssh
- Role
- @value
- SegmentTemplate
- @duration
- @endNumber
- @initialization
- @media
- @presentationTimeOffset
- @startNumber
- @timescale
- SegmentTimeline
- S
- @d
- @r
- S
- Representation
- @bandwidth
- @codecs
- @height
- @id
- @mimeType
- @width
- BaseURL
- SegmentTemplate
- ContentProtection
- SegmentBase
- @indexRange
- Initialization
- @range
- SegmentList
- Initialization
- @sourceURL
- SegmentURL
- @media
- Initialization
- MPD
- add navigation
- from AdaptationSet to Period
- from Initialization to SegmentList
- from Period to MPD
- from Representation to AdaptationSet
- from SegmentList to Representation
- from SegmentTemplate to AdaptationSet
- from SegmentTemplate to Representation
- from SegmentURL to SegmentList
- resolve BaseURL using
- MPD URL
- all parent BaseURL
- resolve Initialization@sourceURL using
- MPD URL
- all parent BaseURL
- resolve SegmentTemplate@initialization using
- MPD URL
- all parent BaseURL
- resolve SegmentTemplate@media using
- MPD URL
- all parent BaseURL
- resolve SegmentURL@media using
- MPD URL
- all parent BaseURL
- resolve function should return
*url.URL - add method to get all Representation, group by id
- add method to get codecs
- add method to get height
- add method to get width
- add method to get mimeType
- AdaptationSet.Role is single element not slice
- add method to get SegmentTemplate
- add method to replace SegmentTemplate@initialization
$RepresentationID$
- add method to replace SegmentTemplate@media
$Number$$Number%02d$$Number%03d$$Number%04d$$Number%05d$$Number%06d$$Number%07d$$Number%08d$$Number%09d$$RepresentationID$
- add method to replace SegmentTemplate@media
$RepresentationID$$Time$
- SegmentTemplate@startNumber is 1 if missing
- SegmentTemplate@timescale is 1 if missing
- Period@duration is MPD@mediaPresentationDuration if missing
- add method to get
Timevalues from SegmentTimeline - add method to get
Numbervalues from SegmentTimeline - add method to get
Numbervalues from SegmentTemplate@startNumber to SegmentTemplate@endNumber - add method to get
Numbervalues from Ceil( AsSeconds(Period@duration) / (SegmentTemplate@duration / SegmentTemplate@timescale) ) - add a method that returns the SegmentTemplate URLs
- use SegmentTemplate@presentationTimeOffset as initial
$Time$ - add method to get
time.Durationtime.ParseDuration(strings.ToLower( strings.TrimPrefix(Period@duration, "PT"), )) - add method to get unique ContentProtection from
- AdaptationSet
- Representation
- include test file in same package
- test will read all ".mpd" files in the "testdata" folder
- user will provide test files
- for each file, get the slice of replaced
SegmentTemplate@mediaURLs - only get one slice of URLs per mimeType
- print slice length, and first and last URLs
- add Representation.String method. each value on its own line
- Representation@bandwidth
- Representation.GetWidth
- Representation.GetHeight
- Representation.GetCodecs
- Representation.GetMimeType
- AdaptationSet@lang
- Role@value
- Period@id
- Representation@id
- [email protected]
- Discord username
- 10308