...
| 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 GStreamerrdk_gstreamer_serverutils 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: removeSourceflush(current_audio_src_id) rialtoClient -> rialtoServer: removeSourceflush(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_serverflush note right: Flush data for removed source GStreamer_server --> rialtoServer: rialtoServer -> GStreamer_server: Disable audio flag in playsink GStreamer_server --> rialtoServer:procedure described in Flush diagram rialtoServer --> rialtoClient: rialtoClient --> GStreamer_client: GStreamer_client -> GStreamer_client: Convert audioAttr & caps to rialto::mediaSource GStreamer_client -> rialtoClient: attachSourceswitchSource(mediaSource) rialtoClient -> rialtoServer: attachSourceswitchSource(mediaSource) opt audio caps changed rialtoServer -> GStreamerrdk_gstreamer_serverutils: performAudioTrackCodecChannelSwitch(audioAttr, caps, ...) note right: This will call the underlying _soc\nimplementation for the platform GStreamerrdk_gstreamer_serverutils --> 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 |
...