@startuml
autonumber
box "Container" #LightGreen
participant Cobalt
participant Starboard
participant GStreamer_client_appsrc
participant decrypter_element
participant ocdmProxy
end box
Cobalt -> Starboard: SbPlayerWriteSample2(player, sample[])
note right: Currently sample array size must be 1
Starboard -> Starboard: Create GstBuffer and add media data from sample to it
opt Sample encrypted
Starboard -> GStreamer_client_appsrc: gst_buffer_add_protection_meta(gst_buffer, decrytion_params)
end
Starboard -> GStreamer_client_appsrc: gst_app_src_push_buffer(app_src, gst_buffer)
GStreamer_client_appsrc --> decrypter_element: data flows through client pipeline
decrypter_element -> decrypter_element: gst_buffer_get_protection_meta(buffer)
opt Implementation before CBCS support added
decrypter_element -> ocdmProxy: opencdm_gstreamer_session_decrypt_ex(key_session, buffer, sub_samples, iv, kid, init_with_last_15, decrytion_params caps)
else Implementation after CBCS support added
decrypter_element -> ocdmProxy: opencdm_gstreamer_session_decrypt_buffer(key_session, buffer, caps)
end
ocdmProxy -> ocdmProxy: Create gst struct containing encryption data decrytion_params
ocdmProxy -> decrypter_element: gst_buffer_add_protection_meta(buffer, metadata)
note left
Decryption is deferred until the data is sent to Rialto so
attach the required decryption parameters to the media frame
which are then ready to be passed to Rialto when it requests
more data.
end note
@enduml |