Skip to main content
Version: Upcoming 🤫🚧

ADR 104 – Video Streaming

Purpose

This Architecture Decision Record (ADR) provides normative guidance for the use case "Autonomous Operation as a Service (AOaaS)". As "Autonomous Operation as a Service" provides different scenarios, the ADRs are separated.

This ADR provides guidance about Video Streaming.

Autonomous Operation as a Service aims at keeping machine downtime minimal by accelerating the process to solve a faulty situation using knowledge of prior events as well as human ingenuity. One of the main "fault-to-solution" paths within AOaaS involves a Machine Operator diagnosing faulty situations remotely while only using machine data and video information.

To access the available video content (either as dashcam-style video segments or as live streams) some guidelines were established, which are documented here. Please note, that this document assumes to only handle the credential and endpoint information; accessing the actual video data itself is not part of this document.

Roles

  • Machine Owner acts as Data Provider
  • Machine (Remote) Operator acts as Data Consumer

API Structure

Data Provider

The Data Provider MUST expose the endpoints according to the following Architecture Decision Records (ADRs):

Architecture Decision Record (ADR)VersionLink
ADR 002 – Cross-Company Authorization and Discovery Version 0.2.00.2.0https://factory-x-contributions.github.io/architecture-decisions/docs/hercules_network_adr/adr002-authorization-discovery
ADR 003 – Authentication for Dataspaces Version 0.2.00.2.0https://factory-x-contributions.github.io/architecture-decisions/docs/hercules_network_adr/adr003-authentication
ADR 008 – Asset Administration Shell Profile for Factory-X Version 0.2.00.2.0https://factory-x-contributions.github.io/architecture-decisions/docs/hercules_network_adr/adr008-aas-profile
ADR 009 – Discovery of AAS Services via DSP Version 0.2.00.2.0https://factory-x-contributions.github.io/architecture-decisions/docs/hercules_network_adr/adr009-aas-rest-dsp

Data Consumer

The Data Consumer MUST expose the endpoints according to the following Architecture Decision Records (ADRs):

Architecture Decision Record (ADR)VersionLink
ADR 002 – Cross-Company Authorization and Discovery Version 0.2.00.2.0https://factory-x-contributions.github.io/architecture-decisions/docs/hercules_network_adr/adr002-authorization-discovery
ADR 003 – Authentication for Dataspaces Version 0.2.00.2.0https://factory-x-contributions.github.io/architecture-decisions/docs/hercules_network_adr/adr003-authentication

Note: The Consumer is not required to provide any assets

Data Models

The following submodels are used (the Short Name will be used in further chapters):

Short NameFull NameVersionReferenceStatus
Asset Interfaces DescriptionAsset Interfaces Description1.0IDTA Submodel TemplateRequired
Bills of MaterialHierarchical Structures enabling Bills of Material1.1IDTA Submodel TemplateOptional

How to Provide Data

To provide information and credentials about available video data the Asset Interfaces Description Submodel MUST be used. This Submodel MUST be part of an Asset Administration Shell (AAS) of a streaming device (like a camera). This AAS itself MUST be referable by using the globalAssetId of the streaming device.

A Data Provider MUST provide the Asset Interfaces Description Submodel in at least one of two ways:

  • Providing its AAS directly using the globalAssetId
  • Providing its AAS using a self-managed Entity as part of a Bills of Material Submodel of another AAS, also referable using the globalAssetId

Note: This step is optional if the dspEndpoint and all relevant metadata are already known - in which case a negotiation can begin right away.

Asset Interfaces Description Submodel

The Asset Interfaces Description Submodel MUST contain an Interface with:

  • Actions for LiveStream and Videos within InteractionMetadata according to the PropertyDefinition:

    • LiveStream (Action):
      • The REST API endpoint that returns a URL (e.g., WebRTC) for the camera's live video stream.
    • Videos (Action):
      • The REST API endpoint that returns URLs for recorded videos of a specific event ID.
  • Application specific dsp_sc in securityDefinitions within EndpointMetadata:

    • scheme: Defines the security mechanism that used during access; Set to: dsp.
    • id: ID of the Dataset in the Data Providers catalog that contains the Submodel.
    • dspEndpoint: Points to a DSP Catalog endpoint containing the relevant Dataset.

    Note: dsp_sc is defined as follows:

    dsp_no_sec.json — Security Definition
    {
    "idShort": "dsp_sc",
    "qualifiers": [
    {
    "kind": "ConceptQualifier",
    "type": "Cardinality",
    "valueType": "xs:string",
    "value": "ZeroToOne"
    }
    ],
    "value": [
    {
    "idShort": "scheme",
    "semanticId": {
    "type": "ExternalReference",
    "keys": [
    {
    "type": "GlobalReference",
    "value": "https://www.w3.org/2019/wot/security#SecurityScheme"
    }
    ]
    },
    "qualifiers": [
    {
    "kind": "ConceptQualifier",
    "type": "Cardinality",
    "valueType": "xs:string",
    "value": "One"
    }
    ],
    "valueType": "xs:string",
    "value": "dsp",
    "modelType": "Property"
    },
    {
    "idShort": "id",
    "description": [
    {
    "language": "en",
    "text": "id represents the id of that Dataset in the Data Providers catalog that contains the Submodel."
    }
    ],
    "qualifiers": [
    {
    "semanticId": {
    "type": "ExternalReference",
    "keys": [
    {
    "type": "GlobalReference",
    "value": "https://admin-shell.io/SubmodelTemplates/Cardinality/1/0"
    }
    ]
    },
    "kind": "TemplateQualifier",
    "type": "SMT/Cardinality",
    "valueType": "xs:string",
    "value": "One"
    }
    ],
    "valueType": "xs:string",
    "modelType": "Property"
    },
    {
    "idShort": "dspEndpoint",
    "description": [
    {
    "language": "en",
    "text": "dspEndpoint represents the endpoint of the Data Provider's DSP endpoint where the catalog containing the relevant Dataset is located."
    }
    ],
    "qualifiers": [
    {
    "semanticId": {
    "type": "ExternalReference",
    "keys": [
    {
    "type": "GlobalReference",
    "value": "https://admin-shell.io/SubmodelTemplates/Cardinality/1/0"
    }
    ]
    },
    "kind": "TemplateQualifier",
    "type": "SMT/Cardinality",
    "valueType": "xs:string",
    "value": "One"
    }
    ],
    "valueType": "xs:string",
    "modelType": "Property"
    }
    ],
    "modelType": "SubmodelElementCollection"
    }

    Download dsp_no_sec.json

  • Reference to dsp_sc within the security of EndpointMetadata.

Authentication and Authorization

Apart from mechanism already described within the linked ADRs, no additional Authentication or Authorization mechanism is specified.

Alternatives evaluated

Only credentials are shared within Factory-X dataspace to access stream relevant data through a cloud service. As an alternative, streams may be integrated directly into the Factory-X EDC. Access to streams can be provided by sharing the credentials similar to how it is done in ADR012.