Skip to main content
Skip table of contents

Flics Ingest [VCon OG]

RecorderFlicsIngest controls recordings on a FLICS cluster using the FLICS API. The RecorderFlicsIngest is mainly used to ingest live stream sources.
As the configuration of the sources and recording templates is done in the FLICS cluster the system is very flexible.

Setup

The installation of a RecorderFlicsIngest is done by a dynamic playbook. Below is an example (91_vpms3.recorderflicsingest.v2.yaml from the project-colus repository):

YAML
recorderflicsingest:
  playbook:
    name: RecorderFlicsIngest
    abbreviation: flics
  default:
    endpoints:
      http:
        fqdn: "{{ (default_endpoint_scheme + lookup('prepared_config', 'kubernetesPublicEndpoint') + '/' if not lookup('prepared_config', 'kubernetesPublicEndpoint').endswith('/') else '' | string) | urlsplit('hostname') }}"
    helm_chart:
      install: true
      chart_name: recorderflicsingest
      chart_subpath:
      chart_folder: VidiControl/Recorders/FlicsIngest
      chart_category: VPMS
      chart_namespace: "{{ server_config.system.name }}-vctl"
      chart_instance_name: recorderflicsingest
      chart_version: 25.1.266234-feature-238229flics
      chart_values:
        hull:
          config:
            general:
              globalImageRegistryToFirstRegistrySecretServer: true
              fullnameOverride: recorderflicsingest
              data:
                installation:
                  config:
                    customCaCertificates:
{% for key, value in vpms3.global.system.ssl.custom_ca_certs.items() %}
                      {{ key }}: "{{ (value | singleline) + '\n' }}"
{% endfor %}

            specific:
              ingress:
                controllerClass: "{{ vpms3.global.system.ingress.controllerClass }}"
              recorderflicsingest:
                tag: "25.2.266234-feature-244cflicsrecorder"
                devicesettings:
                  FlicsIngestUrl: http://13.56.223.50/
                  DefaultTemplateId: fa18fe20-2744-4d71-8d22-5b8d4e0a6a6f
                  DefaultSource: SRT
                  RecorderPassword: k0ZXTVeIQrL0DuXV7sYAj1d9hGMZLlZlYxDLo+J1nDBZ4AqxAQYAFJ+IHYLWLm9XiVLaqiGUctFyBI0lOUCJ1NaFrVKyte+3HklvOvrGRZLKe1XGY5tAUK6FjnmTdsIqlJg37LpRneJ7TMEgZRhTbVyqaZC/0yyxkyBWaEjqnvH5s9Wlcy5RQ2KoZAG104Et:hrlvN0HE4w36DX8nnRhJfg==
              database:
                host: "{{ hostvars['sql-server']['host'] }}"
                port: "{{ hostvars['sql-server']['port'] | default(1433) }}"
                user: "{{ hostvars['sql-server']['admin_user'] }}"
                type: postgres
                names:
                  recorderflicsingest: "{{ vpms3.global.system.name | regex_replace('-', '_') }}_vidicontrol_recorderflicsingest"
                connectionstrings:
                  recorderflicsingest: "User ID = {{ hostvars['sql-server']['admin_user'] }};Server={{ hostvars['sql-server']['host'] }};Port={{ hostvars['sql-server']['port'] | default(1433) }};Database={{ vpms3.global.system.name | regex_replace('-', '_') }}_vidicontrol_recorderflicsingest;Pooling=true;"

          objects:
            registry:
              vpms3:
                server: "{{ vpms3.global.docker.registry.endpoint }}"
                username: "{{ vpms3.global.docker.registry.user }}"
                password: "{{ vpms3.global.docker.registry.pass }}"

The versions of the Helm chart and the Docker image must be updated to the currently used versions. Additionally, the device settings must be adapted, mainly the FlicsIngestUrl and the RecorderPassword.

For installing the recorder, the preferred installation method with the tag “flics” can be used, i.e.

BASH
./prepared.sh --log=vvv --tags=flics

Customize config after installation

Workflow

When a recording is started a VidiFlow workflow will be triggered.
This workflow must be created, named 'WF_FlicsIngestStartRecording' and have 'ItemId' and 'Clipname' as parameters (type string).
Workflow name and version can be changed via the VidiControl Configuration Tool.
The version of the workflow must correspond to the version listed in the event 'RecorderFlicsIngest.recordingStarted'.
The module executes a periodic status check of the FLICS cluster and, if necessary, sets the VidiControl device status to online or offline.

Capability

Source and Template are read from the FLICS cluster on module start. When available in the front end the input can be switched to the DynamicEnumValue entries Template and Source

Example:

JSON
"input": {
        "Source": {
            "defaultValue": null,
            "externalDataIdentifier": "",
            "hint": "[{\"Lang\":\"en_US\",\"Text\":\"The SRT Source\"},{\"Lang\":\"de_DE\",\"Text\":\"Die SRT Quelle\"}]",
            "items": {
                "item0": {
                    "default": true,
                    "label": "SRT1",
                    "value": "SRT1"
                },
                "item1": {
                    "default": false,
                    "label": "Zuspieler2",
                    "value": "Zuspieler2"
                },
                "item2": {
                    "default": false,
                    "label": "SRT",
                    "value": "SRT"
                },
                "item3": {
                    "default": false,
                    "label": "DJSRT",
                    "value": "DJSRT"
                }
            },
            "label": "[{\"Lang\":\"en_US\",\"Text\":\"SRT Source\"},{\"Lang\":\"de_DE\",\"Text\":\"SRT Quelle\"}]",
            "optional": null,
            "type": "enum"
        },
        "Template": {
            "defaultValue": null,
            "externalDataIdentifier": "",
            "hint": "[{\"Lang\":\"en_US\",\"Text\":\"The Target Template\"},{\"Lang\":\"de_DE\",\"Text\":\"Das Ziel Template\"}]",
            "items": {
                "item0": {
                    "default": true,
                    "label": "Live XDCAM GROWING",
                    "value": "586a2314-34f9-4d76-b268-d5873a611695"
                },
                "item1": {
                    "default": false,
                    "label": "Live XDCAM GROWING HISCALE",
                    "value": "ebecb908-f9a6-4f2c-9a77-92132e37dcfe"
                },
                "item2": {
                    "default": false,
                    "label": "Live XRDD25 GROWING",
                    "value": "f12a8bab-2b0f-41cf-9d71-90ee599c6848"
                },
                "item3": {
                    "default": false,
                    "label": "LiveSD Template",
                    "value": "fa18fe20-2744-4d71-8d22-5b8d4e0a6a6f"
                },
                "item4": {
                    "default": false,
                    "label": "RDD25 50p",
                    "value": "e3725ca1-b2ce-4c3e-82ad-1a2b9029cab2"
                },
                "item5": {
                    "default": false,
                    "label": "RDD25 Growing",
                    "value": "f63f598c-3517-4c63-add8-d3882df7f46f"
                }
            },
            "label": "[{\"Lang\":\"en_US\",\"Text\":\"Target Template\"},{\"Lang\":\"de_DE\",\"Text\":\"Ziel Template\"}]",
            "optional": null,
            "type": "enum"
        }
    }

Configuration

Config value

Type

Comment

VIDICONTROL_DATABASE_CONNECTION_STRING

string

VIDICONTROL_DATABASE_PASSWORD

string

VIDICONTROL_IDSALT

string

VIDICONTROL_SITEID

string

site id (alphanumeric)

RECORDER_FLICS_INGEST_DATABASE_CONNECTION_STRING

string

RECORDER_FLICS_INGEST_DATABASE_PASSWORD

string

FlicsIngestUrl

string

(DeviceConfiguration:DeviceSettings)

RecorderPassword

string

(DeviceConfiguration:DeviceSettings)

DefaultTemplateId

string

(DeviceConfiguration:DeviceSettings)

DefaultSourceUrl

string

(DeviceConfiguration:DeviceSettings)

Config for VidiControl initialization (Device, Capabilities, Events)

values for Capabilities are partially generated by the FlicsIngestRecorder, values in DeviceConfiguration are system specific

JSON
  "DeviceConfiguration": {
    "DeviceName": "Recorder-FlicsIngest",
    "Uri": "<http://localhost:8080>",
    "DeviceSettings": "{\"FlicsIngestUrl\":\"<http://3.66.29.116/\>",\"DefaultTemplateId\":\"fa18fe20-2744-4d71-8d22-5b8d4e0a6a6f\",\"DefaultSource\":\"DJSRT\",\"RecorderPassword\":\"DLYuuXkpcIEGHLEVw31kvvprwmHHlISM1ZdWdxr6j0yWC76ZaIjw8JdkhLRxrtdC2W4YIAyFZfFVA3XNDXLdaRd4ixA4I1KQ19TG8ABVkno4DzH8qV4y8IcSJ3tDwBEbS7tJ2u9S+5H3ib/Tu3blS/i92q689ulh0OSDOlxhVzOA4iAK4erScSFvp7oZdjMr:WQ/1ZIFCp4TKsAVejxwN4A==\"}",
    "CapabilityGroup": "RecorderFlicsIngestGroup"
  },
  "Capability": [
    {
      "Content": "{\"action\":\"Record\",\"events\":[\"RecorderFlicsIngest.recordingFailed\",\"RecorderFlicsIngest.recordingStarted\",\"RecorderFlicsIngest.recordingFinished\",\"RecorderFlicsIngest.recordingUpdateFailed\"],\"input\":{}}",
      "NeedsStopCommand": true,
      "CapabilityType": 0,
      "DefaultConfig": "{\"blockingProvisioningTime\":10}"
    }
  ],
  "EventType": [
  {
    "Name": "RecorderFlicsIngest.recordingStarted",
    "HandleCustomerSpecific": false,
    "Description": "",
    "Content": "[{\"action\":\"notifyClient\",\"input\":{\"TimeStamp\":\"{-{Placeholder_TimeStamp}-}\",\"ChunkId\":\"{-{Placeholder_ExternalChunkId}-}\",\"UpdateNeeded\":false,\"MessageType\":\"RecorderFlicsIngest.recordingStarted\",\"Emitter\":\"{-{Placeholder_Emitter}-}\",\"Severity\":\"Information\",\"Message\":[{\"Lang\":\"en_US\",\"Text\":\"Recording started.\"},{\"Lang\":\"de_DE\",\"Text\":\"Aufnahme gestartet.\"}]}},{\"action\":\"startWorkflow\",\"input\":{\"user\":\"{-{Placeholder_ActingUser}-}\",\"notificationData\":\"{\\\"Name\\\":\\\"WF_FlicsIngestStartRecording\\\",\\\"Version\\\":\\\"1.latest\\\",\\\"Data\\\":{\\\"Parameters\\\":[{\\\"Name\\\":\\\"Clipname\\\",\\\"Value\\\":\\\"{-{Placeholder_Clipname}-}\\\",\\\"Type\\\":\\\"string\\\"},{\\\"Name\\\":\\\"ItemId\\\",\\\"Value\\\":\\\"{-{Placeholder_VCItemId}-}\\\",\\\"Type\\\":\\\"string\\\"},{\\\"Name\\\":\\\"MediaDirector\\\",\\\"Value\\\":\\\"{-{Placeholder_MediaDirector}-}\\\",\\\"Type\\\":\\\"string\\\"}],\\\"Metadata\\\":null,\\\"Priority\\\":null}}\"}}]"
  },
  {
    "Name": "RecorderFlicsIngest.recordingFinished",
    "HandleCustomerSpecific": false,
    "Description": "",
    "Content": "[{\"action\":\"notifyClient\",\"input\":{\"TimeStamp\":\"{-{Placeholder_TimeStamp}-}\",\"ChunkId\":\"{-{Placeholder_ExternalChunkId}-}\",\"UpdateNeeded\":false,\"MessageType\":\"RecorderFlicsIngest.recordingFinished\",\"Emitter\":\"{-{Placeholder_Emitter}-}\",\"Severity\":\"Information\",\"Message\":[{\"Lang\":\"en_US\",\"Text\":\"Recording finished.\"},{\"Lang\":\"de_DE\",\"Text\":\"Aufnahme beendet.\"}]}}]"
  },
  {
    "Name": "RecorderFlicsIngest.recordingFailed",
    "HandleCustomerSpecific": false,
    "Description": "",
    "Content": "[{\"action\":\"notifyClient\",\"input\":{\"TimeStamp\":\"{-{Placeholder_TimeStamp}-}\",\"ChunkId\":\"{-{Placeholder_ExternalChunkId}-}\",\"UpdateNeeded\":false,\"MessageType\":\"RecorderFlicsIngest.recordingFailed\",\"Emitter\":\"{-{Placeholder_Emitter}-}\",\"Severity\":\"Error\",\"Message\":[{\"Lang\":\"en_US\",\"Text\":\"Recording failed.\"},{\"Lang\":\"de_DE\",\"Text\":\"Aufnahme gescheitert.\"}]}}]"
  },
  {
    "Name": "RecorderFlicsIngest.recordingUpdateFailed",
    "HandleCustomerSpecific": false,
    "Description": "",
    "Content": "[{\"action\":\"notifyClient\",\"input\":{\"TimeStamp\":\"{-{Placeholder_TimeStamp}-}\",\"ChunkId\":\"{-{Placeholder_ExternalChunkId}-}\",\"UpdateNeeded\":false,\"MessageType\":\"RecorderFlicsIngest.recordingUpdateFailed\",\"Emitter\":\"{-{Placeholder_Emitter}-}\",\"Severity\":\"Warning\",\"Message\":[{\"Lang\":\"en_US\",\"Text\":\"Recording update failed.\"},{\"Lang\":\"de_DE\",\"Text\":\"Update der Aufnahme fehlgeschlagen.\"}]}}]"
  }
]

Device

Requires a ConnectionInfo with ServiceName and ServiceRoute, both are read from the FLICS cluster

JSON
{
    "ServiceName": "flics.svc.2.local",
    "ServiceRoute": "{470443f4-582e-43b3-874d-73fd538d420c}/{flics.svc.2.local}"
}

Capability

Requires a Content with an input parameters 'Source' and 'Template' which are read from the FLICS cluster. When supported by the front end 'DynamicEnumValue' entries shall be used

JSON
{
    "action": "Record",
    "events": [
        "RecorderFlicsIngest.recordingFailed",
        "RecorderFlicsIngest.recordingStarted",
        "RecorderFlicsIngest.recordingFinished",
        "RecorderFlicsIngest.recordingUpdateFailed"
    ],
    "input": {
        "Source": {
            "defaultValue": null,
            "externalDataIdentifier": "",
            "hint": "[{\"Lang\":\"en_US\",\"Text\":\"The SRT Source\"},{\"Lang\":\"de_DE\",\"Text\":\"Die SRT Quelle\"}]",
            "items": {
                "item0": {
                    "default": true,
                    "label": "SRT1",
                    "value": "SRT1"
                },
                "item1": {
                    "default": false,
                    "label": "Zuspieler2",
                    "value": "Zuspieler2"
                },
                "item2": {
                    "default": false,
                    "label": "SRT",
                    "value": "SRT"
                },
                "item3": {
                    "default": false,
                    "label": "DJSRT",
                    "value": "DJSRT"
                }
            },
            "label": "[{\"Lang\":\"en_US\",\"Text\":\"SRT Source\"},{\"Lang\":\"de_DE\",\"Text\":\"SRT Quelle\"}]",
            "optional": null,
            "type": "enum"
        },
        "Template": {
            "defaultValue": null,
            "externalDataIdentifier": "",
            "hint": "[{\"Lang\":\"en_US\",\"Text\":\"The Target Template\"},{\"Lang\":\"de_DE\",\"Text\":\"Das Ziel Template\"}]",
            "items": {
                "item0": {
                    "default": true,
                    "label": "Live XDCAM GROWING",
                    "value": "586a2314-34f9-4d76-b268-d5873a611695"
                },
                "item1": {
                    "default": false,
                    "label": "Live XDCAM GROWING HISCALE",
                    "value": "ebecb908-f9a6-4f2c-9a77-92132e37dcfe"
                },
                "item2": {
                    "default": false,
                    "label": "Live XRDD25 GROWING",
                    "value": "f12a8bab-2b0f-41cf-9d71-90ee599c6848"
                },
                "item3": {
                    "default": false,
                    "label": "LiveSD Template",
                    "value": "fa18fe20-2744-4d71-8d22-5b8d4e0a6a6f"
                },
                "item4": {
                    "default": false,
                    "label": "RDD25 50p",
                    "value": "e3725ca1-b2ce-4c3e-82ad-1a2b9029cab2"
                },
                "item5": {
                    "default": false,
                    "label": "RDD25 Growing",
                    "value": "f63f598c-3517-4c63-add8-d3882df7f46f"
                }
            },
            "label": "[{\"Lang\":\"en_US\",\"Text\":\"Target Template\"},{\"Lang\":\"de_DE\",\"Text\":\"Ziel Template\"}]",
            "optional": null,
            "type": "enum"
        }
    },
    "output": {
    },
    "properties": {
    }
}
JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.