@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: GST_MESSAGE_WARNING(src, GST_STREAM_ERROR_DECRYPT)
rialtoServer -/ rialtoClient: notifyPlaybackError(MediaSourceType, PlaybackError::DECRYPTION)
rialtoClient -/ rialtoGstreamer: opencdm_select_key_id(ocdm_session, kid)
end
opt Implementation before CBCS support added
rialtoServer notifyPlaybackError(MediaSourceType, PlaybackError::DECRYPTION)
rialtoGstreamer ->/ Ocdm Application: 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 -> Ocdm: opencdm_gstreamer_session_decrypt_buffer(ocdm_session, gst_buffer, caps)
end
end
GST_MESSAGE_ERROR(sink, GST_STREAM_ERROR_DECRYPT)
note over Application
Pipeline moves to error state an cannot recover.
end note
@enduml |