...
| 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 client. This will happen upon creation of a pipeline (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.
...