Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

PlantUML Macro
formatSVG
titleAudio Stream Switching: Netflix + rialto-gstreamer
@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_server: Flush data for removed source
GStreamer_server   --> rialtoServer:
rialtoServerflush
note right: Flush 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:
rialtoServer       ->  rialtoServer:     For this media source:\n - Start requesting data\n - Enable underflow reportingend
rialtoServer       --> rialtoClient:
rialtoClient       --> GStreamer_client:
GStreamer_client   --> DPI:
DPI                --> Netflix:

end


@enduml

...

PlantUML Macro
formatSVG
titleAudio Stream Switching: Netflix C++ integration
@startuml 

autonumber

box "Container" #LightGreen
participant Netflix
participant "DPI\n(IElementaryStreamAudioPlayer)" as DPI
participant rialtoClient
end box


Netflix            ->  DPI:              disable()
DPI                --> Netflix:
Netflix            ->  DPI:              flush()
DPI                ->  rialtoClient:     removeSourceflush(current_audio_src_id)
rialtoClient       --> DPI:
DPI                --> Netflix:

Netflix            ->  DPI:              enable()
DPI                --> Netflix:
Netflix            ->  DPI:              firstSampleAvailable()
DPI                --> Netflix:

opt First media sample after firstSampleAvailable() called

DPI                --/ Netflix:          getNextMediaSample()
Netflix            ->  DPI:              write(sample)
note right: ISampleWriter detail skipped for clarity


DPI                ->  DPI:              Convert sample info to rialto::mediaSource
DPI                ->  rialtoClient:     attachSourceswitchSource(mediaSource)
rialtoClient       --> DPI:
DPI                --> Netflix:

end

@enduml