new-segment-loader-sequence.plantuml 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. @startuml
  2. participant SegmentLoader order 1
  3. participant "media-segment-request" order 2
  4. participant XMLHttpRequest order 3
  5. participant "segment-transmuxer" order 4
  6. participant mux.js order 5
  7. SegmentLoader -> "media-segment-request" : mediaSegmentRequest(...)
  8. "media-segment-request" -> XMLHttpRequest : request for segment/key/init segment
  9. group Request
  10. XMLHttpRequest -> "media-segment-request" : //segment progress//
  11. note over "media-segment-request" #moccasin
  12. If handling partial data,
  13. tries to transmux new
  14. segment bytes.
  15. end note
  16. "media-segment-request" -> SegmentLoader : progressFn(...)
  17. note left
  18. Forwards "progress" events from
  19. the XML HTTP Request.
  20. end note
  21. group Transmux
  22. "media-segment-request" -> "segment-transmuxer" : transmux(...)
  23. "segment-transmuxer" -> mux.js : postMessage(...setAudioAppendStart...)
  24. note left
  25. Used for checking for overlap when
  26. prefixing audio with silence.
  27. end note
  28. "segment-transmuxer" -> mux.js : postMessage(...alignGopsWith...)
  29. note left
  30. Used for aligning gops when overlapping
  31. content (switching renditions) to fix
  32. some browser glitching.
  33. end note
  34. "segment-transmuxer" -> mux.js : postMessage(...push...)
  35. note left
  36. Pushes bytes into the transmuxer pipeline.
  37. end note
  38. "segment-transmuxer" -> mux.js : postMessage(...partialFlush...)
  39. note left #moccasin
  40. Collates any complete frame data
  41. from partial segment and
  42. caches remainder.
  43. end note
  44. "segment-transmuxer" -> mux.js : postMessage(...flush...)
  45. note left
  46. Collates any complete frame data
  47. from segment, caches only data
  48. required between segments.
  49. end note
  50. "mux.js" -> "segment-transmuxer" : postMessage(...trackinfo...)
  51. "segment-transmuxer" -> "media-segment-request" : onTrackInfo(...)
  52. "media-segment-request" -> SegmentLoader : trackInfoFn(...)
  53. note left
  54. Gets whether the segment
  55. has audio and/or video.
  56. end note
  57. "mux.js" -> "segment-transmuxer" : postMessage(...audioTimingInfo...)
  58. "segment-transmuxer" -> "media-segment-request" : onAudioTimingInfo(...)
  59. "mux.js" -> "segment-transmuxer" : postMessage(...videoTimingInfo...)
  60. "segment-transmuxer" -> "media-segment-request" : onVideoTimingInfo(...)
  61. "media-segment-request" -> SegmentLoader : timingInfoFn(...)
  62. note left
  63. Gets the audio/video
  64. start/end times.
  65. end note
  66. "mux.js" -> "segment-transmuxer" : postMessage(...caption...)
  67. "segment-transmuxer" -> "media-segment-request" : onCaptions(...)
  68. "media-segment-request" -> SegmentLoader : captionsFn(...)
  69. note left
  70. Gets captions from transmux.
  71. end note
  72. "mux.js" -> "segment-transmuxer" : postMessage(...id3Frame...)
  73. "segment-transmuxer" -> "media-segment-request" : onId3(...)
  74. "media-segment-request" -> SegmentLoader : id3Fn(...)
  75. note left
  76. Gets metadata from transmux.
  77. end note
  78. "mux.js" -> "segment-transmuxer" : postMessage(...data...)
  79. "segment-transmuxer" -> "media-segment-request" : onData(...)
  80. "media-segment-request" -> SegmentLoader : dataFn(...)
  81. note left
  82. Gets an fmp4 segment
  83. ready to be appended.
  84. end note
  85. "mux.js" -> "segment-transmuxer" : postMessage(...done...)
  86. note left
  87. Gathers GOP info, and calls
  88. done callback.
  89. end note
  90. "segment-transmuxer" -> "media-segment-request" : onDone(...)
  91. "media-segment-request" -> SegmentLoader : doneFn(...)
  92. note left
  93. Queues callbacks on source
  94. buffer queue to wait for
  95. appends to complete.
  96. end note
  97. end
  98. XMLHttpRequest -> "media-segment-request" : //segment request finished//
  99. end
  100. SegmentLoader -> SegmentLoader : handleAppendsDone_()
  101. note left
  102. Saves segment timing info
  103. and starts next request.
  104. end note
  105. @enduml