...
| PlantUML Macro | ||||
|---|---|---|---|---|
| ||||
@startuml autonumber box "Container" #LightGreen participant Cobalt participant Starboard participant GStreamer_client participant rialtoClient end box box "Platform" #LightBlue participant rialtoServer participant GStreamer_server end box == Create Media Pipeline == Cobalt -> Starboard: SbPlayerCreate(media_keys_handle, video_info, audio_info) Starboard -> GStreamer_client: Create Gst pipeline with Rialto sinks activate GStreamer_client opt maxWidth Starboard -> GStreamer_client: Set PROP_MAX_VIDEO_WIDTH end opt maxHeight Starboard -> GStreamer_client: Set PROP_MAX_VIDEO_HEIGHT end note right of GStreamer_client As the Gst pipeline is brought up the creation of the first rialto sink for a pipeline triggers the createMediaPipeline() call. Creation of additional rialto sinks increments a ref count to the media pipeline. To identify which pipeline a sink relates to it will pass the parent bin object pointer to the pipeline root element. end note note right of GStreamer_client If max width and max height are not set by the client the mediaPipeline shall be created with videoRequirements set to 2160x3840. If max width and max height are set, then rialto shall assume the playback is secondary video. end note GStreamer_client -> rialtoClient: createMediaPipeline(client, videoRequirements) rialtoClient -> rialtoServer: createMediaPipeline(client, videoRequirements) rialtoServer -> rialtoServer: Check resource permissions that were granted to app and currently\nallocated pipelines allows creation of this new pipeline note left: Currently this check is simply num_current_pipeline_sessions < max_playback_sessions opt Permission check passed rialtoServer -> rialtoServer: Store video requirements opt videoRequirements != 2160x3840 && westerossink rialtoServer -> GStreamer_server: Set secondary video end rialtoServer --> rialtoClient: pipeline_session rialtoClient --> GStreamer_client: pipeline_session GStreamer_client -> rialtoClient: load(pipeline_session, MEDIA_TYPE_MSE, ~"", ~""). rialtoClient -> rialtoServer: load(pipeline_session, MEDIA_TYPE_MSE, ~"", ~"") rialtoServer -> GStreamer_server: Create rialto server MSE pipeline GStreamer_server --> rialtoServer: opt videoRequirements != 2160x3840 && westerossink rialtoServer -> GStreamer_server: Set secondary video GStreamer_server --> rialtoServer: end rialtoServer -/ rialtoClient: notifyNetworkState(pipeline_session, NETWORK_STATE_BUFFERING) rialtoClient -/ GStreamer_client: notifyNetworkState(pipeline_session, NETWORK_STATE_BUFFERING) rialtoServer --> rialtoClient: rialtoClient --> GStreamer_client: opt video_codec != None GStreamer_client -> rialtoClient: attachSource(pipeline_session, video_source) rialtoClient -> rialtoServer: attachSource(pipeline_session, video_source) rialtoServer -> GStreamer_server: Add video sink to pipeline GStreamer_server --> rialtoServer: rialtoServer --> rialtoClient: rialtoClient --> GStreamer_client: end opt audio_codec != None GStreamer_client -> rialtoClient: attachSource(pipeline_session, audio_source) rialtoClient -> rialtoServer: attachSource(pipeline_session, audio_source) rialtoServer -> GStreamer_server: Add audio sink to pipeline GStreamer_server --> rialtoServer: rialtoServer --> rialtoClient: rialtoClient --> GStreamer_client: end rialtoClient -> rialtoServer: allSourcesAttached(pipeline_session) rialtoServer -> GStreamer_server: Setup and add app source GStreamer_server --> rialtoServer: rialtoServer --> rialtoClient: deactivate GStreamer_client GStreamer_client --> Starboard Starboard --> Cobalt: == Notify that Pipeline & network session is currently IDLE == rialtoServer -/ rialtoClient: notifyNetworkState(NETWORK_STATE_IDLE) note right Note that notification may occur before createMediaPipeline() call returns end note rialtoClient -/ GStreamer_client: notifyNetworkState(NETWORK_STATE_IDLE) rialtoServer -/ rialtoClient: notifyPlaybackState(PLAYBACK_STATE_IDLE) note right Note that notification may occur before createMediaPipeline() call returns end note rialtoClient -/ GStreamer_client: notifyPlaybackState(PLAYBACK_STATE_IDLE) else Permission check failed rialtoServer --> rialtoClient: ERROR_DENIED rialtoClient --> GStreamer_client: ERROR_DENIED end @enduml |
...