...
| 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: SbDrmUpdateSession(media_keys_handle, ticket, key, session_id) Starboard -> ocdmProxy: opencdm_session_update(session_id, key) ocdmProxy -> ocdmProxy: Lookup MediaKeys object for session_id ocdmProxy -> rialtoClient: updateKeySessionupdateSession(media_keys_handle, session_id, key) rialtoClient -> rialtoServer: updateKeySessionupdateSession(media_keys_handle, session_id, key) opt media_keys.key_system == "com.netflix.playready" rialtoServer -> Ocdm: opencdm_session_store_license_data(session_id, license_data=key) Ocdm --> rialtoServer: status, secure_stop_id note left: Secure stop ID ignored as\nnot supported by Rialto else rialtoServer -> Ocdm: opencdm_session_update(session_id, key) Ocdm --> rialtoServer: status end rialtoServer --> rialtoClient: status rialtoClient --> ocdmProxy: status opt update successful ocdmProxy --> Starboard: status=OK Starboard --> Cobalt: status=OK loop For each key updated Ocdm -/ rialtoServer: OnKeyUpdated(session_id, key_id) rialtoServer -> rialtoServer: Store updated key_id end Ocdm -/ rialtoServer: OnAllKeysUpdated(session_id) rialtoServer -/ rialtoClient: onKeyStatusesChanged(session_id, key_statuses) rialtoClient -/ ocdmProxy: onKeyStatusesChanged(session_id, key_statuses) loop For each key updated ocdmProxy -/ Starboard: OnKeyUpdated(session_id, key_id) end ocdmProxy -/ Starboard: OnAllKeysUpdated(session_id) Starboard -/ Cobalt: SbDrmSessionUpdatedFunc(media_keys_handle, context, ticket, kSbDrmStatusSuccess, nullptr, session_id); Starboard -/ Cobalt: SbDrmSessionKeyStatusesChangedFunc(media_keys_handle, context, session_id, key_ids, key_statuses); else update failed ocdmProxy --> Starboard: status=NOK Starboard -/ Cobalt: SbDrmSessionUpdatedFunc(media_keys_handle, context, ticket, kSbDrmStatusUnknownError, nullptr, session_id); Starboard --> Cobalt: status=NOK end @enduml |
...
| PlantUML Macro | ||||
|---|---|---|---|---|
| ||||
@startuml autonumber box "Container" #LightGreen participant Netflix participant DPI participant rialtoClient end box box "Platform" #LightBlue participant rialtoServer participant Ocdm end box Netflix -> DPI: hasLicense(session_id, key_id) DPI -> DPI: Lookup MediaKeys object for session_id DPI -> rialtoClient: containsKey(media_keys_handle, session_id, key_id) rialtoClient -> rialtoServer: containsKey(media_keys_handle, session_id, key_id) rialtoServer -> Ocdm: opencdm_session_has_key_id(session, key_id) Ocdm --> rialtoServer: result rialtoServer --> rialtoClient: result rialtoClient --> DPI: result DPI --> Netflix: result @enduml |
...
Note that Remove is not required by Cobalt so we do not yet need to implement this API.
...
| PlantUML Macro | ||||
|---|---|---|---|---|
| ||||
@startuml autonumber box "Container" #LightGreen participant Client participant ocdmProxy participant rialtoClient end box box "Platform" #LightBlue participant rialtoServer participant Ocdm end box Client -> ocdmProxy: opencdm_session_remove(session_id) ocdmProxy -> ocdmProxy: Lookup MediaKeys object for session_id ocdmProxy -> rialtoClient: removeKeySession(media_keys_handle, session_id) rialtoClient -> rialtoServer: removeKeySession(media_keys_handle, session_id) rialtoServer -> Ocdm: opencdm_session_remove(session_id) Ocdm --> rialtoServer: status rialtoServer --> rialtoClient: status rialtoClient --> ocdmProxy: status ocdmProxy --> Client: status @enduml |
...
Note that Load is not required by Cobalt so we do not yet need to implement this API.
...
| PlantUML Macro | ||||
|---|---|---|---|---|
| ||||
@startuml
autonumber
box "Container" #LightGreen
participant Netflix
participant DPI
participant rialtoClient
end box
box "Platform" #LightBlue
participant rialtoServer
participant Ocdm
end box
Netflix -> DPI: ~IDrmSession()
DPI -> DPI: Lookup MediaKeys object for session_id
DPI -> rialtoClient: closeKeySession(media_keys_handle, session_id)
rialtoClient -> rialtoServer: closeKeySession(media_keys_handle, session_id)
note over rialtoServer, Ocdm: Same sequence as closeKeySession above
rialtoServer --> rialtoClient: status
rialtoClient --> DPI: status
DPI --> Netflix:
@enduml |
| PlantUML Macro | ||||
|---|---|---|---|---|
| ||||
@startuml
autonumber
box "Container" #LightGreen
participant Application
participant rialtoClient
end box
box "Platform" #LightBlue
participant rialtoServer
participant Ocdm
end box
Application -> rialtoClient: setDrmHeader(media_keys_handle, session_id, drmHeader)
rialtoClient -> rialtoServer: setDrmHeader(media_keys_handle, session_id, drmHeader)
rialtoServer -> Ocdm: opencdm_session_set_drm_header(session_handle, drmHeader)
Ocdm --> rialtoServer: status
rialtoServer --> rialtoClient: status
rialtoClient --> Application : status
@enduml |
| PlantUML Macro | ||||
|---|---|---|---|---|
| ||||
@startuml
autonumber
box "Container" #LightGreen
participant Application
participant rialtoClient
end box
box "Platform" #LightBlue
participant rialtoServer
participant Ocdm
end box
Application -> rialtoClient: getLastDrmError(media_keys_handle, session_id)
rialtoClient -> rialtoServer: getLastDrmError(media_keys_handle, session_id, drmHeader)
rialtoServer -> Ocdm: opencdm_session_system_error(session_handle)
Ocdm --> rialtoServer: status, errorCode
rialtoServer --> rialtoClient: status, errorCode
rialtoClient --> Application : status, errorCode
@enduml |
| PlantUML Macro | ||||
|---|---|---|---|---|
| ||||
@startuml
autonumber
box "Container" #LightGreen
participant Application
participant rialtoClient
end box
box "Platform" #LightBlue
participant rialtoServer
participant Ocdm
end box
Application -> rialtoClient: getCdmKeySessionId(media_keys_handle, session_id)
rialtoClient -> rialtoServer: getCdmKeySessionId(media_keys_handle, session_id)
rialtoServer -> Ocdm: opencdm_session_id(session_handle)
Ocdm --> rialtoServer: status, cdmSessionId
rialtoServer --> rialtoClient: status, cdmSessionId
rialtoClient --> Application : status, cdmSessionId
@enduml
|
| PlantUML Macro | ||||
|---|---|---|---|---|
| ||||
@startuml
autonumber
box "Container" #LightGreen
participant Client
participant ocdmProxy
participant rialtoClient
end box
box "Platform" #LightBlue
participant rialtoServer
participant Ocdm
end box
Client -> ocdmProxy: opencdm_destruct_session(session_id)
ocdmProxy -> ocdmProxy: Lookup MediaKeys object for session_id
ocdmProxy -> rialtoClient: releaseKeySession(media_keys_handle, session_id)
rialtoClient -> rialtoServer: releaseKeySession(media_keys_handle, session_id)
rialtoServer -> Ocdm: opencdm_destruct_session(session_id)
Ocdm --> rialtoServer: status
rialtoServer --> rialtoClient: status
rialtoClient --> ocdmProxy: status
ocdmProxy --> Client: status
@enduml |