@startuml
autonumber
box "Container" #LightGreen
participant Application
participant rialtoGstreamer
participant rialtoClient
end box
box "Platform" #LightBlue
participant rialtoServer
participant GStreamer_server
end box
== Decryption ==
GStreamer_server -> rialtoServer: decrypt(buffer)
rialtoServer -> GStreamer_server: MediaKeyErrorStatus:: gst_buffer_get_protection_meta(buffer)
opt Protection Meta exists (Frame encrypted)
rialtoServer Fail
GStreamer_server -> GStreamer_server: GST_BASE_TRANSFORM_FLOW_DROPPED
note over GStreamer_server
Frame is dropped but playback is unaffected.
end note
GStreamer_server -> rialtoServer: Extract frame's metadata
opt media_keys.key_system == "com.netflix.playready"
rialtoServer -> Ocdm: opencdm_select_key_id(ocdm_session, kid)
end
opt Implementation before CBCS support added
rialtoServer -> Ocdm: opencdm_gstreamer_session_decrypt_ex(ocdm_session, gst_buffer, subsample_info, iv, key, init_with_last_15, caps)
else Implementation after CBCS support added
rialtoServer -> OcdmGST_MESSAGE_WARNING(src, GST_STREAM_ERROR_DECRYPT)
rialtoServer -/ rialtoClient: notifyPlaybackError(MediaSourceType, PlaybackError::DECRYPTION)
rialtoClient -/ rialtoGstreamer: notifyPlaybackError(MediaSourceType, PlaybackError::DECRYPTION)
note over rialtoGstreamer
Posting an error message on the sink make the\n
sink unable to continue playing back content.
end note
rialtoGstreamer -/ Application: opencdm_gstreamer_session_decrypt_buffer(ocdm_session, gst_buffer, caps)
end
end
GST_MESSAGE_ERROR(sink, GST_STREAM_ERROR_DECRYPT)
@enduml |