...
| PlantUML Macro | ||||
|---|---|---|---|---|
| ||||
@startuml autonumber box "Container" #LightGreen participant Netflix participant "DPI\n(IElementaryStreamAudioPlayer)" as DPI participant GStreamer_client participant rialtoClient end box box "Platform" #LightBlue participant rialtoServer participant GStreamer_server end box note across disable()/flush()/enable()/firstSampleAvailable() call sequence is guaranteed by Netflix but is only used to detect that an audio stream switch has been initiated in DPI implementation. end note Netflix -> DPI: disable() DPI --> Netflix: Netflix -> DPI: flush() DPI -> DPI: Set audio_switch flag DPI --> Netflix: Netflix -> DPI: enable() DPI --> Netflix: Netflix -> DPI: firstSampleAvailable() DPI --> Netflix: DPI --/ Netflix: getNextMediaSample() Netflix -> DPI: write(sample) note right: ISampleWriter detail skipped for clarity opt audio_switch flag set DPI -> DPI: clear audio_switch flag DPI -> GStreamer_client: performAudioTrackCodecChannelSwitch(audioAttr, caps, ...) note right: This will be a custom Rialto implementation of the API GStreamer_client -> rialtoClient: removeSource(current_audio_src_id) rialtoClient -> rialtoServer: removeSource(current_audio_src_id) rialtoServer -> rialtoServer: For this media source:\n - Stop requesting more data\n - Invalidate pending requests\n - Invalidate cached data in shm for source\n - Disable underflow reporting rialtoServer -> GStreamer_server: Flush data for removed source GStreamer_server --> rialtoServer: rialtoServer -> GStreamer_server: Disable audio flag in playsink GStreamer_server --> rialtoServer: rialtoServer --> rialtoClient: rialtoClient --> GStreamer_client: GStreamer_client -> GStreamer_client: Convert audioAttr & caps to rialto::mediaSource GStreamer_client -> rialtoClient: attachSource(mediaSource) rialtoClient -> rialtoServer: attachSource(mediaSource) opt audio caps changed rialtoServer -> GStreamer_server: performAudioTrackCodecChannelSwitch(audioAttr, caps, ...) note right: This will call the underlying _soc\nimplementation for the platform GStreamer_server --> rialtoServer: end rialtoServer -> GStreamer_server: Enable audio flag in playsink GStreamer_server --> rialtoServer: rialtoServer -> rialtoServer: For this media source:\n - Start requesting data\n - Enable underflow reporting rialtoServer --> rialtoClient: rialtoClient --> GStreamer_client: GStreamer_client --> DPI: DPI --> Netflix: end @enduml |
...