| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 | 
							- @startuml
 
- participant SegmentLoader order 1
 
- participant "media-segment-request" order 2
 
- participant XMLHttpRequest order 3
 
- participant "segment-transmuxer" order 4
 
- participant mux.js order 5
 
- SegmentLoader -> "media-segment-request" : mediaSegmentRequest(...)
 
- "media-segment-request" -> XMLHttpRequest : request for segment/key/init segment
 
- group Request
 
-   XMLHttpRequest -> "media-segment-request" : //segment progress//
 
-   note over "media-segment-request" #moccasin
 
-    If handling partial data,
 
-    tries to transmux new
 
-    segment bytes.
 
-   end note
 
-   "media-segment-request" -> SegmentLoader : progressFn(...)
 
-   note left
 
-     Forwards "progress" events from
 
-     the XML HTTP Request.
 
-   end note
 
-   group Transmux
 
-     "media-segment-request" -> "segment-transmuxer" : transmux(...)
 
-     "segment-transmuxer" -> mux.js : postMessage(...setAudioAppendStart...)
 
-     note left
 
-       Used for checking for overlap when
 
-       prefixing audio with silence.
 
-     end note
 
-     "segment-transmuxer" -> mux.js : postMessage(...alignGopsWith...)
 
-     note left
 
-       Used for aligning gops when overlapping
 
-       content (switching renditions) to fix
 
-       some browser glitching.
 
-     end note
 
-     "segment-transmuxer" -> mux.js : postMessage(...push...)
 
-     note left
 
-       Pushes bytes into the transmuxer pipeline.
 
-     end note
 
-     "segment-transmuxer" -> mux.js : postMessage(...partialFlush...)
 
-     note left #moccasin
 
-       Collates any complete frame data
 
-       from partial segment and
 
-       caches remainder.
 
-     end note
 
-     "segment-transmuxer" -> mux.js : postMessage(...flush...)
 
-     note left
 
-       Collates any complete frame data
 
-       from segment, caches only data
 
-       required between segments.
 
-     end note
 
-     "mux.js" -> "segment-transmuxer" : postMessage(...trackinfo...)
 
-     "segment-transmuxer" -> "media-segment-request" : onTrackInfo(...)
 
-     "media-segment-request" -> SegmentLoader : trackInfoFn(...)
 
-     note left
 
-       Gets whether the segment
 
-       has audio and/or video.
 
-     end note
 
-     "mux.js" -> "segment-transmuxer" : postMessage(...audioTimingInfo...)
 
-     "segment-transmuxer" -> "media-segment-request" : onAudioTimingInfo(...)
 
-     "mux.js" -> "segment-transmuxer" : postMessage(...videoTimingInfo...)
 
-     "segment-transmuxer" -> "media-segment-request" : onVideoTimingInfo(...)
 
-     "media-segment-request" -> SegmentLoader : timingInfoFn(...)
 
-     note left
 
-       Gets the audio/video
 
-       start/end times.
 
-     end note
 
-     "mux.js" -> "segment-transmuxer" : postMessage(...caption...)
 
-     "segment-transmuxer" -> "media-segment-request" : onCaptions(...)
 
-     "media-segment-request" -> SegmentLoader : captionsFn(...)
 
-     note left
 
-       Gets captions from transmux.
 
-     end note
 
-     "mux.js" -> "segment-transmuxer" : postMessage(...id3Frame...)
 
-     "segment-transmuxer" -> "media-segment-request" : onId3(...)
 
-     "media-segment-request" -> SegmentLoader : id3Fn(...)
 
-     note left
 
-       Gets metadata from transmux.
 
-     end note
 
-     "mux.js" -> "segment-transmuxer" : postMessage(...data...)
 
-     "segment-transmuxer" -> "media-segment-request" : onData(...)
 
-     "media-segment-request" -> SegmentLoader : dataFn(...)
 
-     note left
 
-       Gets an fmp4 segment
 
-       ready to be appended.
 
-     end note
 
-     "mux.js" -> "segment-transmuxer" : postMessage(...done...)
 
-     note left
 
-       Gathers GOP info, and calls
 
-       done callback.
 
-     end note
 
-     "segment-transmuxer" -> "media-segment-request" : onDone(...)
 
-     "media-segment-request" -> SegmentLoader : doneFn(...)
 
-     note left
 
-       Queues callbacks on source
 
-       buffer queue to wait for
 
-       appends to complete.
 
-     end note
 
-   end
 
-   XMLHttpRequest -> "media-segment-request" : //segment request finished//
 
- end
 
- SegmentLoader -> SegmentLoader : handleAppendsDone_()
 
- note left
 
-   Saves segment timing info
 
-   and starts next request.
 
- end note
 
- @enduml
 
 
  |