| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 | @startumlparticipant SegmentLoader order 1participant "media-segment-request" order 2participant XMLHttpRequest order 3participant "segment-transmuxer" order 4participant mux.js order 5SegmentLoader -> "media-segment-request" : mediaSegmentRequest(...)"media-segment-request" -> XMLHttpRequest : request for segment/key/init segmentgroup 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//endSegmentLoader -> SegmentLoader : handleAppendsDone_()note left  Saves segment timing info  and starts next request.end note@enduml
 |