...
| PlantUML Macro | ||||
|---|---|---|---|---|
| ||||
@startuml autonumber box "Container" #LightGreen participant Cobalt participant Starboard participant ocdmProxy participant rialtoClient end box box "Platform" #LightBlue participant rialtoServer participant Ocdm end box Cobalt -> Starboard: SbDrmCloseSession(media_keys_handle, session_id) Starboard -> ocdmProxy: opencdm_session_close(session_id) ocdmProxy -> ocdmProxy: Lookup MediaKeys object for session_id ocdmProxy -> rialtoClient: closeKeySession(media_keys_handle, session_id) rialtoClient -> rialtoServer: closeKeySession(media_keys_handle, session_id) opt No buffered media segments that need this session for decryption opt media_keys.key_system == "com.netflix.playready" rialtoServer -> Ocdm: opencdm_session_cancel_challenge_data(session_id) Ocdm --> rialtoServer: status rialtoServer -> Ocdm: opencdm_session_clean_decrypt_context(session_id) Ocdm --> rialtoServer: status else !Netflix rialtoServer -> Ocdm: opencdm_session_close(session_id) note right: TODO: Current code only calls for !Netflix\nbut maybe should we always call it? Ocdm --> rialtoServer: status end rialtoServer -> Ocdm: opencdm_destruct_session(session_id) Ocdm --> rialtoServer: status else Media segments are buffered that need this media key sessions note over rialtoServer, Ocdm The above sequence must be deferred until no media segments are buffered that reference this media key session otherwise their decryption will fail. rialtoServer must track these references, details not shown for brevity. end note end rialtoServer --> rialtoClient: status rialtoClient --> ocdmProxy: status ocdmProxy --> Starboard: status Starboard -/ Cobalt: SbDrmSessionClosedFunc(media_keys_handle, context, session_id) Starboard --> Cobalt: status @enduml |
...