...
| PlantUML Macro | ||||
|---|---|---|---|---|
| ||||
@startuml autonumber box "Container" #LightGreen participant Cobalt participant Starboard participant rialtoClient end box box "Platform" #LightBlue participant rialtoServer participant GStreamer_server end box Cobalt -> Starboard: SbIsMediaSupported(video_codec, audio_codec, key_system) note right: key_system ignored Starboard -> rialtoClient: createMediaPipelineCapabilities() rialtoClient -> rialtoServer: createMediaPipelineCapabilities() rialtoServer -> GStreamer_server: Get decoder capabilities GStreamer_server -> rialtoServer: Decoder caps rialtoServer -> rialtoServer: Convert caps to list of supported MIME\ntypes: 'supportedMimeTypes' note right Rialto has pre-defined list of its known MIME types. The list of supported MIME types is the subset of MIME types that are in the pre-defined list AND are supported by the underlying decoders. end note rialtoServer -> rialtoClient: media_pipeline_caps rialtoClient -> Starboard: media_pipeline_caps Starboard -> Starboard: Convert video_codec to MIME type Starboard -> rialtoClient: media_pipeline_caps.isMimeTypeSupported(mimeType) rialtoClient -> rialtoServer: media_pipeline_caps.isMimeTypeSupported(mimeType) rialtoServer -> rialtoServer: Check mimeType against supportedMimeTypes rialtoServer -> rialtoClient: result rialtoClient -> Starboard: result opt video_codec supported Starboard -> Starboard: Convert audio_codec to MIME type Starboard -> rialtoClient: media_pipeline_caps.isMimeTypeSupported(mimeType) rialtoClient -> rialtoServer: media_pipeline_caps.isMimeTypeSupported(mimeType) rialtoServer -> rialtoServer: Check mimeType against supportedMimeTypes rialtoServer -> rialtoClient: result rialtoClient -> Starboard: result opt audio_codec supported Starboard --> Cobalt: true else Starboard --> Cobalt: false end else Starboard -> Cobalt: false end == Get Supported Mime Types == note across: An alternative implementation could use the getsupporteMimeTypes() API Starboard -> rialtoClient: media_pipeline_caps.getSupportedMimeTypes(sourceType) note right: sourceType indicates audio or video rialtoClient -> rialtoServer: media_pipeline_caps.getSupportedMimeTypes(sourceType) rialtoServer -> rialtoServer: Extract relevant MIME types from\nsupportedMimeTypes based on sourceType rialtoServer -> rialtoClient: mimeTypes[] rialtoClient -> Starboard: mimeTypes[] @enduml |
API for setting the position and size of the video output window for a pipeline session.
This is not something that a user of rialto-gstreamer needs to be concerned about (it is done automatically). This API is to query if a specified set of properties are supported on the RialtoServer. This enables RialtoGstreamer to determine the set of properties to present, and support, for the user of rialto-gstreamer. This will happen upon creation of a pipeline (when a sink is created).
| PlantUML Macro | ||||
|---|---|---|---|---|
| ||||
@startuml
| ||||
| PlantUML Macro | ||||
| ||||
@startuml autonumber box "Container" #LightGreen participant CobaltGStreamer_client participant StarboardrialtoGstreamer participant GStreamer_client participant rialtoClient end box box "Platform" #LightBlue participant rialtoServer participant GStreamer_server end box CobaltGStreamer_client -> rialtoGstreamer: a sink is requested rialtoGstreamer -> StarboardrialtoClient: SetBounds(z, x, y, w, h) Starboard getSupportedProperties(pipeline_session, media_type, property_names) rialtoClient -> GStreamer_clientrialtoServer: set video sink geometry getSupportedProperties(pipeline_session, xmedia_type, y, w, h) GStreamer_client property_names) rialtoServer -> rialtoClientGStreamer_server: g_object_class_find_property(called once for setVideoWindow(pipeline_session, x, y, w, h) rialtoClient each property name) GStreamer_server -> rialtoServer: setVideoWindow(pipeline_session, x, y, w, h) rialtoServer -> GStreamer_server: set video sink geometry (pipeline, x, y, w, h) GStreamer_server --> rialtoServer: status rialtoServerproperty (or null if not supported) for each property name rialtoServer -> rialtoClient: list of supported properties rialtoClient --> rialtoClientrialtoGstreamer: list of supported statusproperties rialtoClientrialtoGstreamer --> GStreamer_client: status GStreamer_client --> Starboard: Starboard --> Cobalt: @enduml |
The notifyQos() callback is used to notify clients of dropped audio/video data in the server side pipeline.
a sink is created that supports the properties
@enduml |
API for setting the position and size of the video output window for a pipeline session.
| PlantUML Macroplantumlrender | ||||
|---|---|---|---|---|
| ||||
@startumlautonumberbox autonumber box "Container" #LightGreen participant Cobalt participant Starboard participant GStreamer_client participant rialtoClient end box box "Platform" #LightBlue participant rialtoServer participant GStreamer_server endbox== During pipeline creation == rialtoServer -> GStreamer_server: Subscribe for QOS event == During playback == box
Cobalt -> Starboard: SetBounds(z, x, y, w, h)
Starboard -> GStreamer_client: set video sink geometry (pipeline, x, y, w, h)
GStreamer_client -> rialtoClient: setVideoWindow(pipeline_session, x, y, w, h)
rialtoClient -> rialtoServer: setVideoWindow(pipeline_session, x, y, w, h)
rialtoServer -> GStreamer_server: set video sink geometry (pipeline, x, y, w, h)
GStreamer_server --> rialtoServer: status
rialtoServer --> rialtoClient: status
rialtoClient --> GStreamer_client: status
GStreamer_client --> Starboard:
Starboard --> Cobalt:
@enduml |
The notifyQos() callback is used to notify clients of dropped audio/video data in the server side pipeline.
| PlantUML Render Macro | ||||
|---|---|---|---|---|
| ||||
@startuml
box "Container" #LightGreen box "Platform" #LightBlue
rialtoServer -> GStreamer_server: Subscribe for QOS event
opt Frames dropped or element changed processing strategy note across This event is generate whenever GStreamer generates a QoS event which is currently for these reasons: - The element dropped a buffer because of QoS reasons. - An element changed its processing strategy because of QoS reasons. This could include a decoder that decided to drop every B frame to increase its processing speed or an effect element switching to a lower quality algorithm. end note GStreamer_server -/ rialtoServer: GstBusMessage(qos_event) note right note over Cobalt, Starboard end @enduml |
API for setting and getting the volume for a pipeline session.
| PlantUML Render Macro | ||||
|---|---|---|---|---|
| ||||
@startuml box "Container" #LightGreen box "Platform" #LightBlue
|
| PlantUML Render Macro | ||||
|---|---|---|---|---|
| ||||
@startuml box "Container" #LightGreen box "Platform" #LightBlue
|
API for obtaining the number of "rendered frames" and "dropped frames"
| PlantUML Render Macro | ||||
|---|---|---|---|---|
| ||||
@startuml box "Container" #LightGreen box "Platform" #LightBlue
|
| Code Block | ||||
|---|---|---|---|---|
| ||||
GstStructure *stats{nullptr};
g_object_get(sink, "stats", &stats, nullptr);
if (stats)
{
guint64 renderedVideoFrames;
guint64 droppedVideoFrames;
if (gst_structure_get_uint64(stats, "rendered", &renderedVideoFrames) &&
gst_structure_get_uint64(stats, "dropped", &droppedVideoFrames))
{
std::cout << "renderedVideoFrames " << renderedVideoFrames << std::endl;
std::cout << "droppedVideoFrames " << droppedVideoFrames << std::endl;
}
gst_structure_free(stats);
} |
API for setting and getting the "immediate-output" property (used for low-latency output)
| PlantUML Render Macro | ||||
|---|---|---|---|---|
| ||||
@startuml box "Container" #LightGreen box "Platform" #LightBlue
|
| Code Block | ||||
|---|---|---|---|---|
| ||||
gboolean immediateOutput;
# NOTE: The "immediate-output" property will only be available if it's supported by the hardware
g_object_get(videoSink, "immediate-output", &immediateOutput, nullptr);
if (immediateOutput) ... |
| PlantUML Render Macro | ||||
|---|---|---|---|---|
| ||||
@startuml box "Container" #LightGreen box "Platform" #LightBlue
opt Frames dropped or element changed processing strategy note across This event is generate whenever GStreamer generates a QoS event which is currently for these reasons: - The element dropped a buffer because of QoS reasons. - An element changed its processing strategy because of QoS reasons. This could include a decoder that decided to drop every B frame to increase its processing speed or an effect element switching to a lower quality algorithm. end note GStreamer_server -/ rialtoServer: GstBusMessage(qos_event) note right note over Cobalt, Starboard end @enduml |
This is not something that a user of rialto-gstreamer needs to be concerned about (it is done automatically). This API is to query if a specified set of properties are supported on the RialtoServer. This enables RialtoGstreamer to determine the set of properties to present, and support, for the user of rialto-gstreamer. This will happen upon creation of a pipeline (when a sink is created).
object_set(pipeline, "immediate-output", immediateOutput, nullptr) |
| Code Block | ||||
|---|---|---|---|---|
| ||||
gboolean immediateOutput{TRUE}; // The desired setting
# NOTE: The "immediate-output" property will only be available if it's supported by the hardware
g_object_set(videoSink, "immediate-output", immediateOutput, nullptr); |
API for setting the "low-latency" property (used for low-latency audio output)
| PlantUML Render Macroplantuml | ||||
|---|---|---|---|---|
| ||||
@startuml
box "Container" #LightGreen
GStreamer_client participant rialtoGstreamer
rialtoClient
box box "Platform" #LightBlue
rialtoServer
GStreamer_server
box
-> rialtoClient: setLowLatency(pipeline_session, media_type, property_names) rialtoClient -> rialtoServer: getSupportedPropertieslowLatency) |
lowLatency) |
| Code Block | ||||
|---|---|---|---|---|
| ||||
gboolean lowLatency{TRUE}; // The desired setting
# NOTE: The "low-latency" property will only be available if it's supported by the hardware
g_object_set(audioSink, "low-latency", lowLatency, nullptr); |
API for setting and getting the "sync" propertyAPI for setting and getting the volume for a pipeline session.
| PlantUML Render Macro | ||||
|---|---|---|---|---|
| ||||
@startuml box "Container" #LightGreen box "Platform" #LightBlue
|
| Code Block | ||||
|---|---|---|---|---|
| ||||
gboolean sync{TRUE};
# NOTE: The "sync" property will only be available if it's supported by the hardware
g_object_get(audioSink, "sync", &sync, nullptr); |
| PlantUML Render Macro | ||||
|---|---|---|---|---|
| ||||
@startuml box "Container" #LightGreen box "Platform" #LightBlue
|
API for obtaining the number of "rendered frames" and "dropped frames"
...
| format | SVG |
|---|---|
| title | getStats |
@startuml
autonumber
box "Container" #LightGreen
participant GStreamer_client
participant rialtoClient
end box
box "Platform" #LightBlue
participant rialtoServer
participant GStreamer_server
end box
...
server: g_object_set(audioSink, "sync", sync, nullptr) |
| Code Block | ||||
|---|---|---|---|---|
| ||||
gboolean sync{TRUE}; // The desired setting
# NOTE: The "sync" property will only be available if it's supported by the hardware
g_object_set(audioSink, "sync", sync, nullptr); |
API for setting the "sync-off" property
| PlantUML Render Macro | ||||
|---|---|---|---|---|
| ||||
@startuml box "Container" #LightGreen box "Platform" #LightBlue
|
| Code Block | ||||
|---|---|---|---|---|
| ||||
gboolean syncOff{TRUE}; // The desired setting
# NOTE: The "sync-off" property will only be available if it's supported by the hardware
g_object_set(audioDecoder, "sync-off", syncOff, nullptr); |
| Code Block | ||||
|---|---|---|---|---|
| ||||
GstStructure *stats{nullptr};
g_object_get(sink, "stats", &stats, nullptr);
if (stats)
{
guint64 renderedVideoFrames;
guint64 droppedVideoFrames;
if (gst_structure_get_uint64(stats, "rendered", &renderedVideoFrames) &&
gst_structure_get_uint64(stats, "dropped", &droppedVideoFrames))
{
std::cout << "renderedVideoFrames " << renderedVideoFrames << std::endl;
std::cout << "droppedVideoFrames " << droppedVideoFrames << std::endl;
}
gst_structure_free(stats);
} |
...
API for setting and getting the "immediatestream-sync-outputmode" property (used for low-latency output)
| PlantUML Render Macro | ||||
|---|---|---|---|---|
| ||||
@startuml box "Container" #LightGreen box "Platform" #LightBlue
|
| Code Block | ||||
|---|---|---|---|---|
| ||||
gboolean immediateOutputsync{TRUE}; # NOTE: The "immediatestream-sync-outputmode" property will only be available if it's supported by the hardware g_object_get(videoSinkaudioDecoder, "immediatestream-sync-outputmode", &immediateOutputstreamSyncMode, nullptr); if (immediateOutput) ... |
| PlantUML Render Macro | ||||
|---|---|---|---|---|
| ||||
@startuml box "Container" #LightGreen box "Platform" #LightBlue
|
| Code Block | ||||
|---|---|---|---|---|
| ||||
gboolean immediateOutputsync{TRUE}; // The desired setting # NOTE: The "immediate-outputstreamSyncMode" property will only be available if it's supported by the hardware g_object_set(videoSinkaudioDecoder, "immediatestream-sync-outputmode", immediateOutputstreamSyncMode, nullptr); |
API for setting and getting the mute setting for a pipeline session.
...