123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- @startuml
- header PlaylistLoader sequences
- title PlaylistLoader sequences: Main Manifest and Alternate Audio
- Participant "PlaylistController" as PC #red
- Participant "MainPlaylistLoader" as MPL #blue
- Participant "mainSegmentLoader" as SL #blue
- Participant "AudioPlaylistLoader" as APL #green
- Participant "audioSegmentLoader" as ASL #green
- Participant "external server" as ext #brown
- Participant "m3u8Parser" as parser #orange
- Participant "mediaGroups" as MG #purple
- Participant Tech #lightblue
- == Initialization ==
- PC -> MPL : construct MainPlaylistLoader
- PC -> MPL: load()
- MPL -> MPL : start()
- == Requesting Main Manifest ==
- MPL -> ext: xhr request for main manifest
- ext -> MPL : response with main manifest
- MPL -> parser: parse main manifest
- parser -> MPL: object representing manifest
- note over MPL #lightblue: trigger 'loadedplaylist'
- == Requesting Video Manifest ==
- note over MPL #lightblue: handling loadedplaylist
- MPL -> MPL : media()
- MPL -> ext : request child manifest
- ext -> MPL: child manifest returned
- MPL -> parser: parse child manifest
- parser -> MPL: object representing the child manifest
- note over MPL #lightblue: trigger 'loadedplaylist'
- note over MPL #lightblue: handleing 'loadedplaylist'
- MPL -> SL: playlist()
- MPL -> SL: load()
- == Requesting Video Segments ==
- note over MPL #lightblue: trigger 'loadedmetadata'
- note over MPL #lightblue: handling 'loadedmetadata'
- opt vod and preload !== 'none'
- MPL -> SL: playlist()
- MPL -> SL: load()
- end
- MPL -> MG: setupMediaGroups()
- == Initializing Media Groups, Choosing Active Tracks ==
- MG -> APL: create child playlist loader for alt audio
- MG -> MG: activeGroup and audio variant selected
- MG -> MG: enable activeTrack, onTrackChanged()
- MG -> SL: reset mainSegmentLoader
- == Requesting Alternate Audio Manifest ==
- MG -> MG: startLoaders()
- MG -> APL: load()
- APL -> APL: start()
- APL -> ext: request alt audio media manifest
- break finish pending tasks
- MG -> Tech: add audioTracks
- MPL -> PC: setupSourceBuffers()
- MPL -> PC: setupFirstPlay()
- loop on monitorBufferTick
- SL -> ext: requests media segments
- ext -> SL: response with media segment bytes
- end
- end
- ext -> APL: responds with child manifest
- APL -> parser: parse child manifest
- parser -> APL: object representing child manifest returned
- == Requesting Alternate Audio Segments ==
- note over APL #lightblue: trigger 'loadedplaylist'
- note over APL #lightblue: handling 'loadedplaylist'
- APL -> ASL: playlist()
- note over APL #lightblue: trigger 'loadedmetadata'
- note over APL #lightblue: handling 'loadedmetadata'
- APL -> ASL: playlist()
- APL -> ASL: load()
- loop audioSegmentLoader.load()
- ASL -> ext: requests media segments
- ext -> ASL: response with media segment bytes
- end
- @enduml
|