Technical Use Cases
Wikis > Technical Use Cases
Overview
This page captures a number of key technical use cases, and shows how the various platform services and client application components interact to realise these.
Launch Experience
# https://www.websequencediagrams.com/
Title Launch and Start Experience (Intrahome TV + Comp)
# v0p01 19-May-2016 jawalke2(Replace this parenthesis with the @ sign)cisco.com
participant Origin/CDN as CDN
participant Timeline
participant Layout
participant TV Client as TV
participant Companion as comp
note over TV: HbbTV app is running
note over TV: Service endpoints discovered via service registry
TV->+Layout: CreateContext (deviceId, caps)
Layout-->-TV: contextId
note over comp: CSA is running
note over comp: Service endpoints discovered via service registry
note over comp,TV: DIAL Device discovery, app2app enabled...
comp->+TV: getContext()
TV-->-comp: contextId
comp->Layout: JoinContext(contextId, deviceId, caps)
TV->+Layout: LoadDMApp (contextId, DMAppSpec)
Layout->Layout: loadLayoutReqs(url)
Layout->Timeline: createTimeline (contextId)
Layout->+Timeline: loadDMAppTimeline(contextId, DMAppSpec)
Timeline->-Timeline: loadTimelineDoc(url)
Timeline-->Layout: dmappId
Layout-->TV: dmappId
Layout-->-comp: dmappId
note over Layout,TV: Client initiates websocket connection...
note over Layout,comp: Client initiates websocket connection...
note left of CDN
Assume DMApp has media dmapc(s) defined for t=0 (e.g. video players)
end note
loop foreach dmapc
Timeline-->+Layout: initComponent(contextId, dmappId, componentId, initParams)
end
Layout->Layout: evaluateLayout()
Layout->+comp: layoutUpdate(dmapcLayoutList)
Layout->+TV: layoutUpdate(dmapcLayoutList)
TV<->CDN: Fetch dmapc(s) + media objects
TV->TV: Instantiate Video Player dmapc
TV->TV: createMediaSynchroniser()
TV->TV: initMediaSynchroniser(dmap mediaObject, timelineSelector)
TV->TV: enableInterDeviceSync(callback)
TV->-Layout: dmapcStatus(contextId, dmappId, componentId, status)
Layout->Timeline: dmapcStatus(contextId, dmappId, componentId, status)
comp<->CDN: Fetch dmapc(s) + media objects
comp->comp: Instantiate Media Player dmapc
comp->comp: initSyncServiceClient(css_cii_url, dmapc mediaObjectList, correlations...)
comp->comp: enableSynchronisation(callbacks...)
comp->-Layout: dmapcStatus(contextId, dmappId, componentId, status)
Layout->-Timeline: dmapcStatus(contextId, dmappId, componentId, status)
note left of CDN
dmapc(s) report status back to Layout/Timeline
(critical / non-critcal error management)
end note
note over Timeline: when all dmapc ready, play from t=0
loop foreach dmapc
Timeline-->+Layout: startComponent(contextId, dmappId, componentId, presTime)
end
Layout->comp: layoutUpdate(dmapcLayoutList)
Layout->-TV: layoutUpdate(dmapcLayoutList)
# https://www.websequencediagrams.com/
Title Launch and Start Experience (Intrahome TV only)
# v0p01 28-June-2016 jawalke2(Replace this parenthesis with the @ sign)cisco.com
participant Origin/CDN as CDN
participant Timeline
participant Layout
participant TV Client as TV
note over TV: HbbTV app is running
note over TV: Service endpoints discovered via service registry
TV->+Layout: CreateContext (deviceId, caps)
Layout-->-TV: contextId
TV->+Layout: LoadDMApp (contextId, DMAppSpec)
Layout->Layout: loadLayoutReqs(url)
Layout->Timeline: createTimeline (contextId)
Layout->+Timeline: loadDMAppTimeline(contextId, DMAppSpec)
Timeline->-Timeline: loadTimelineDoc(url)
Timeline-->Layout: dmappId
Layout-->-TV: dmappId
note over Layout,TV: Client initiates websocket connection...
note left of CDN
Assume DMApp has media dmapc(s) defined for t=0 (e.g. video players)
end note
loop foreach dmapc
Timeline-->+Layout: initComponent(contextId, dmappId, componentId, initParams)
end
Layout->Layout: evaluateLayout()
Layout->+TV: layoutUpdate(dmapcLayoutList)
TV<->CDN: Fetch dmapc(s) + media objects
TV->TV: Instantiate Video Player dmapc
TV->TV: createMediaSynchroniser()
TV->TV: initMediaSynchroniser(dmap mediaObject, timelineSelector)
TV->TV: enableInterDeviceSync(callback)
TV->-Layout: dmapcStatus(contextId, dmappId, componentId, status)
Layout->-Timeline: dmapcStatus(contextId, dmappId, componentId, status)
note left of CDN
dmapc(s) report status back to Layout/Timeline
(critical / non-critcal error management)
end note
note over Timeline: when all dmapc ready, play from t=0
loop foreach dmapc
Timeline-->+Layout: startComponent(contextId, dmappId, componentId, presTime)
end
Layout->-TV: layoutUpdate(dmapcLayoutList)
Add Companion Device
# https://www.websequencediagrams.com/
Title Add Companion Device (Intrahome TV only)
# v0p01 19-May-2016 jawalke2(Replace this parenthesis with the @ sign)cisco.com
participant Origin/CDN as CDN
participant Timeline
participant Layout
participant TV Client as TV
participant Companion as comp
note over TV,comp: HbbTV app and CSA are running
note over TV,comp: Service endpoints discovered via service registry
note over comp,TV: DIAL Device discovery, app2app enabled...
note over Timeline,comp: DMApp is running (see 'Launch and Start Experience (Intrahome TV only)')
comp->+TV: getContext()
TV-->-comp: contextId
comp->Layout: JoinContext(contextId, deviceId, caps)
Layout->Layout: evaluateLayout()
note over Layout: some dmapc's migrate to CSA...
Layout->+TV: layoutUpdate(dmapcLayoutList)
TV->Layout: saveDmapcState(contextId, dmappId, componentId)
note over Layout,TV: Tear down timeline sync...
TV->TV: remove Dmapc
TV->-Layout: dmapcStatus(contextId, dmappId, componentId, status)
Layout->Timeline: dmapcStatus(contextId, dmappId, componentId, status)
Layout->+comp: layoutUpdate(dmapcLayoutList)
comp<->CDN: Fetch dmapc(s) + media objects
comp->comp: Instantiate dmapc
comp->Layout: restoreDmapcState(contextId, dmappId, componentId)
Layout->comp: dmapcState
note over Layout,comp: Re-establish timeline sync...
comp->-Layout: dmapcStatus(contextId, dmappId, componentId, status)
Layout->-Timeline: dmapcStatus(contextId, dmappId, componentId, status)
User Initiates Layout Change
# https://www.websequencediagrams.com/
Title User Initiates Layout Change (Intrahome TV + Comp)
# v0p01 29-June-2016 jawalke2(Replace this parenthesis with the @ sign)cisco.com
participant Origin/CDN as CDN
participant Timeline
participant Layout
participant TV Client as TV
participant Companion as comp
note over TV,comp: HbbTV app and CSA are running
note over TV,comp: Service endpoints discovered via service registry
note over Timeline,comp: DMApp is running (see 'Launch and Start Experience')
note over Layout,comp: Move component from TV to companion...
comp-->+Layout: moveComponent(contextId, dmappId, componentId, targetDeviceId)
Layout->Layout: evaluateLayout()
Layout->+TV: layoutUpdate(dmapcLayoutList)
TV->Layout: saveDmapcState(contextId, dmappId, componentId)
note over Layout,TV: Tear down timeline sync...
TV->TV: remove Dmapc
TV->-Layout: dmapcStatus(contextId, dmappId, componentId, status)
Layout->Timeline: dmapcStatus(contextId, dmappId, componentId, status)
Layout->+comp: layoutUpdate(dmapcLayoutList)
comp<->CDN: Fetch dmapc(s) + media objects
comp->comp: Instantiate dmapc
comp->Layout: restoreDmapcState(contextId, dmappId, componentId)
Layout->comp: dmapcState
note over Layout,comp: Re-establish timeline sync...
comp->-Layout: dmapcStatus(contextId, dmappId, componentId, status)
Layout->-Timeline: dmapcStatus(contextId, dmappId, componentId, status)
Timeline Event
# https://www.websequencediagrams.com/
Title Timeline Events (Intrahome TV + Comp)
# v0p01 19-May-2016 jawalke2(Replace this parenthesis with the @ sign)cisco.com
participant Origin/CDN as CDN
participant Timeline
participant Layout
participant TV Client as TV
participant Companion as comp
note over TV,comp: HbbTV app and CSA are running
note over TV,comp: Service endpoints discovered via service registry
note over Timeline,comp: DMApp is running (see 'Launch and Start Experience')
loop foreach timeline event
note left of CDN
Event adds additional media dmapc(s)...
end note
Timeline-->+Layout: initComponent(contextId, dmappId, componentId, initParams)
Layout->Layout: evaluateLayout()
Layout->+comp: layoutUpdate(dmapcLayoutList)
Layout->+TV: layoutUpdate(dmapcLayoutList)
TV<->CDN: Fetch dmapc(s) + media objects
TV->TV: Instantiate Media Player dmapc
TV->TV: addMediaObject(new dmapc mediaObject, timelineSelector, correlerationTimestamp)
TV->-Layout: dmapcStatus(contextId, dmappId, componentId, status)
Layout->Timeline: dmapcStatus(contextId, dmappId, componentId, status)
Timeline-->Layout: startComponent(contextId, dmappId, componentId, presTime)
Layout->TV: layoutUpdate(dmapcLayoutList)
comp<->CDN: Fetch dmapc(s) + media objects
comp->comp: Instantiate Media Player dmapc
comp->comp: addMediaObject(new dmapc mediaObject, timelineSelector, correlerationTimestamp)
comp->-Layout: dmapcStatus(contextId, dmappId, componentId, status)
Layout->-Timeline: dmapcStatus(contextId, dmappId, componentId, status)
Timeline-->Layout: startComponent(componentId, presTime)
Layout->comp: layoutUpdate(dmapcLayoutList)
end
Tear Down Experience
# https://www.websequencediagrams.com/
Title Tear Down Experience (Intrahome TV + Comp)
# v0p01 19-May-2016 jawalke2(Replace this parenthesis with the @ sign)cisco.com
participant Origin/CDN as CDN
participant Timeline
participant Layout
participant TV Client as TV
participant Companion as comp
note over TV,comp: HbbTV app and CSA are running
note over TV,comp: Service endpoints discovered via service registry
note over Timeline,comp: DMApp is running (see 'Launch and Start Experience')
note left of CDN
optionally stop
end note
TV->Timeline: play(DMAppId, 0)
note left of CDN
Tear down...
end note
TV->Layout: UnloadDMApp(dmappId, contextId)
Layout->+Timeline: UnloadDMAppTimeline(dmappId, contextId)
loop foreach dmapc
Timeline-->+Layout: stopComponent(contextId, dmappId, componentId, presTime)
end
Layout->Layout: evaluateLayout()
Layout->+comp: layoutUpdate(empty)
Layout->+TV: layoutUpdate(empty)
loop foreach removed dmapc
TV->TV: removeMediaObject(dmapc mediaObject)
TV->Layout: dmapcStatus(contextId, dmappId, componentId, status)
Layout->Timeline: dmapcStatus(contextId, dmappId, componentId, status)
end
TV->-TV: disableInterDeviceSync(callback)
loop foreach removed dmapc
comp->comp: removeMediaObject(dmapc mediaObject)
comp->Layout: dmapcStatus(contextId, dmappId, componentId, status)
Layout->Timeline: dmapcStatus(contextId, dmappId, componentId, status)
end
comp->-comp: disableSynchronisation(callbacks)
TV->Layout: DestroyContext(contextId)
Layout->Timeline: DestroyTimeline(contextId)
Recent Posts