Comment gérer les canaux

Que se passe-t-il lorsque les appareils de votre réseau ne peuvent pas se connecter à Internet et communiquer directement avec Frame.io, mais qu’ils peuvent communiquer avec votre appareil compatible C2C ? Certaines intégrations peuvent souhaiter effectuer des actions au nom de ces appareils (un enregistreur audio qui charge au nom d’un microphone, ou une caméra qui fait des commentaires en temps réel au nom des boutons d’une pièce jointe).

Ces demandes sont satisfaites en comprenant les canaux d’un appareil. Si votre intégration n’est pas destinée à gérer des sous-appareils, vous pouvez ignorer ce guide.

De quoi ai-je besoin ?

Si vous n’avez pas lu le guide Implémentation C2C : configuration, jetez-y un coup d’œil rapide avant de continuer ! Vous aurez besoin de l’élément access_token que vous avez reçu au cours du processus d’authentification et d’autorisation de l’appareil.

Vous aurez également besoin d’une liste d’ID de modèles d’appareils pour les sous-appareils qui devraient pouvoir se connecter à Frame.io via votre appareil principal.

Qu’est-ce qu’un canal ?

Les canaux sont brièvement abordés dans notre présentation de l’architecture. Chaque appareil de projet a au moins un canal, et bien que nous les ayons généralement traités comme étant identiques, nous devons maintenant en séparer les concepts. Allons plus loin.

Un appareil de projet a la capacité de communiquer directement avec Frame.io. Un canal collecte des données pour que l’appareil de projet puisse communiquer. Dans la plupart des cas, le ProjectDevice et le premier canal ne font qu’un. Prenons une caméra : conceptuellement, l’appareil de projet représente la carte réseau de la caméra, qui envoie des données directement à Frame.io, tandis que le canal représente le capteur CMOS de la caméra, qui collecte des données vidéo à envoyer via la carte réseau (appareil de projet).

Le plus important, c’est que l’appareil de projet est authentifié avec Frame via une OauthApp, contrairement aux canaux. Ils utilisent l’authentification de leur appareil de projet parent.

Notre modèle permet à un appareil de projet d’avoir plusieurs canaux, qui peuvent faire partie ou non de l’appareil physique. Les canaux peuvent être des éléments matériels qui communiquent avec l’appareil principal via TCP/IP, Bluetooth, SDI, etc. L’appareil de projet agit comme un routeur pour envoyer ces données à Frame.io. La façon dont ces données sont fournies des canaux à l’appareil de projet dépend de vous, l’intégrateur.

Imaginez un enregistreur audio, connecté à Frame.io comme appareil de projet, avec de nombreux microphones (connectés comme des canaux séparés). L’enregistreur peut envoyer le fichier de mixage sur son canal principal et les pistes de microphones individuelles sur les canaux des sous-appareils. La manière dont vous utilisez les canaux et ce que chacun représente ne dépendent que de vous ! Les canaux ne sont pas authentifiés, ils peuvent être ajoutés et supprimés par l’appareil à tout moment.

Étant donné que les canaux peuvent appartenir à des sous-appareils physiques distincts, chaque canal sera associé à un modèle d’appareil, comme toute autre intégration matérielle ou logicielle. Cela permet à Frame.io d’afficher le modèle du sous-appareil, qui peut être différent de l’appareil hôte, et permet aux intégrations de définir le comportement pour chaque sous-appareil séparément. Les modèles d’appareils qui peuvent être ajoutés à une intégration donnée en tant que canaux doivent être définis à l’avance.

Il existe plusieurs raisons pour lesquelles vous pourriez vouloir connecter de nouveaux canaux à votre appareil C2C :

  • Permettre plusieurs configurations pour une intégration selon le canal et le modèle d’appareil. Cela inclut la structure de dossiers fixes de ressource, les chemins de dossiers avec jeton, le routage d’extension de fichier, etc. Imaginez une station DIT qui utilise différents canaux pour charger des proxies éditoriaux ou Camera Raw.
  • Donner à l’utilisateur dans Frame.io une visibilité sur vos sous-appareils.
  • Les canaux peuvent être configurés avec des entrées humaines, c’est-à-dire des boutons, qui peuvent être configurés pour des fonctions d’enregistrement en temps réel.

Approfondissons un peu la gestion des canaux avec l’API C2C.

Liste des canaux

Une liste des canaux existants peut être récupérée par le point d’entrée d’identité dans le champ des canaux. Intéressons-nous au champ « canaux » de la payload de réponse :

1{
2 "_type": "project_device",
3 ...
4 "channels": [
5 {
6 "_type": "project_device_channel",
7 "actor_id": null,
8 "asset_type": "video",
9 "device_id": "98e9367a-b26b-4c60-8e64-da83dfd9540b",
10 "external_index": 0,
11 "id": "5919e9bc-7fc2-4629-97e5-852ce27cfa1a",
12 "inserted_at": "2023-07-14T19:11:43.217565Z",
13 "name": "Test Host Device",
14 "project_device_id": "bf30fc66-f126-4336-bdfc-75d3e659b95a",
15 "project_id": "1eb3587f-6bca-4e8d-a2f6-e7413d82c1ad",
16 "real_time_logging_capable": false,
17 "status": "online",
18 "updated_at": "2023-07-14T19:11:43.217565Z"
19 },
20 {
21 "_type": "project_device_channel",
22 "actor_id": null,
23 "asset_type": "video",
24 "device_id": "057b33c4-9f92-4eeb-a3d5-2fd0f4932292",
25 "external_index": 0,
26 "id": "0b17e1e3-588c-4365-be51-5cf097c8f004",
27 "inserted_at": "2023-07-14T19:11:43.217565Z",
28 "name": "Test Client Device 01234",
29 "project_device_id": "bf30fc66-f126-4336-bdfc-75d3e659b95a",
30 "project_id": "1eb3587f-6bca-4e8d-a2f6-e7413d82c1ad",
31 "real_time_logging_capable": false,
32 "status": "offline",
33 "updated_at": "2023-07-14T19:11:43.217565Z"
34 }
35 ],
36 ...
37 "device_id": "98e9367a-b26b-4c60-8e64-da83dfd9540b",
38 ...
39 "id": "bf30fc66-f126-4336-bdfc-75d3e659b95am"
40}

Notez que le paramètre device_id du premier canal correspond au paramètre device_id de notre appareil de projet dans son ensemble.

Connexion d’un canal

Nous pouvons connecter un nouveau canal avec la requête suivante :

$curl -X POST https://api.frame.io/v2/devices/channels/connect \
> --header 'Authorization: Bearer [access_token]' \
> --header 'Content-Type: application/json' \
> --header 'x-client-version: 2.0.0' \
> --data-binary @- <<'__JSON__'{
> "client_id": [client_id],
> "device_model_id": [device_model_id]
> }
$__JSON__
$ | python -m json.tool

Nous obtenons la réponse suivante :

1{
2 "_type": "project_device_channel",
3 "actor_id": null,
4 "asset_type": "video",
5 "device_id": "057b33c4-9f92-4eeb-a3d5-2fd0f4932292",
6 "external_index": 0,
7 "id": "0b17e1e3-588c-4365-be51-5cf097c8f004",
8 "inserted_at": "2023-07-14T19:11:43.217565Z",
9 "name": "Test Client Device 01234",
10 "project_device_id": "bf30fc66-f126-4336-bdfc-75d3e659b95a",
11 "project_id": "1eb3587f-6bca-4e8d-a2f6-e7413d82c1ad",
12 "real_time_logging_capable": true,
13 "status": "offline",
14 "updated_at": "2023-07-14T19:11:43.217565Z"
15}

Cette réponse reflète le champ des canaux du point d’entrée identity.

Le paramètre client_id est ce qui gouverne l’unicité, il doit donc être une valeur stable, comme le numéro de série.

Le paramètre device_model_id est ce qui indique à Frame.io le type sous-jacent d’appareil matériel que ce canal représente, comme un modèle spécifique de microphone. Ces paramètres auront été configurés par votre gestionnaire partenaire.

Si un canal a déjà été déclaré, vous recevrez une erreur 409 avec le titre d’erreur Existe déjà.

Lors de la création d’un canal avec les mêmes identifiants que celui qui était précédemment connecté, puis déconnecté, toute la configuration utilisateur précédente pour le canal sera restaurée.

Déconnexion d’un canal

Un canal est déconnecté par l’identifiant défini Frame.io, et non par l’identifiant client_id ou device_model_id.

$curl -X POST https://api.frame.io/v2/devices/channels/:channel_id/disconnect \
> --header 'Authorization: Bearer [access_token]' \
> --header 'x-client-version: 2.0.0' \
> | python -m json.tool

Ces éléments renvoient une réponse 204 avec une payload vide.

Lors de la suppression d’un canal qui n’existe pas, vous obtiendrez une erreur 404. Vous ne pouvez pas déconnecter le premier canal principal de l’appareil parent.

Déconnexion de tous les canaux de sous-appareils

Vous pouvez déconnecter tous les canaux de sous-appareils actuels sur un appareil de projet avec l’appel suivant :

$curl -X POST https://api.frame.io/v2/devices/channels/disconnect \
> --header 'Authorization: Bearer [access_token]' \
> --header 'x-client-version: 2.0.0' \
> | python -m json.tool

Ces éléments renvoient une réponse 204 avec une payload vide. Cet appel aboutit systématiquement, même si l’appareil de projet ne dispose d’aucun canal d’appareil client. Nous pouvons maintenant lister tous nos canaux en utilisant le point d’entrée identity ; seul le canal principal de l’appareil hôte sera conservé.

Flux de gestion des canaux

Nous ne recommandons pas que le paramètre ProjectDevice gère l’état du canal en interne, afin d’éviter les problèmes d’intégrité des données qui pourraient résulter de cycles d’alimentation se produisant à des moments peu idéaux. Par exemple :

  • Mise hors tension après qu’un appel de connexion de canal a été traité, mais avant que l’id renvoyé puisse être validé dans un magasin de données.
  • Branchement/débranchement de sous-appareils de l’appareil hôte pendant qu’il est éteint.

Au lieu de cela, il est recommandé que tous les appareils hôtes exécutent les étapes suivantes lors du premier démarrage :

  • Appeler le point d’entrée de déconnexion de canal en masse pour effacer tous les canaux des sous-appareils existants.
  • Appeler le point d’entrée de connexion de canal pour chaque sous-appareil actuellement connecté.

Après la configuration initiale, un appareil hôte DOIT appeler le point d’entrée de déconnexion de canal chaque fois qu’un sous-appareil est déconnecté, et le point d’entrée de connexion de canal chaque fois qu’un nouveau sous-appareil est ajouté. Les appareils hôtes NE PEUVENT PAS effacer les sous-appareils chaque fois qu’un nouvel appareil est connecté.

Les appareils hôtes DOIVENT gérer correctement les mauvaises conditions réseau lors de la gestion des appareils, et ajouter/supprimer correctement les appareils actuellement connectés lors du rétablissement de la connexion au réseau.

Étapes suivantes

Si ce n’est pas déjà fait, nous vous encourageons à contacter notre équipe, puis à passer au guide suivant. Nous nous ferons un plaisir de répondre à vos questions.