4 Service de transcodage DIVA

Ce chapitre aborde le nouveau service de transcodage DIVA ajouté à DIVAdirector 5.3.

Introduction

La version 5.3 d'Oracle DIVAdirector ajoute un nouveau service de transcodage au système. Ce service contient deux composants principaux. Le premier composant est une API RESTful permettant de soumettre et d'afficher des demandes, ainsi que de consulter des informations du transcodeur actuellement configuré (nom, version, etc.). Le second composant est un processus en arrière-plan basé sur le temps qui s'exécute périodiquement pour mettre à jour l'avancement et le statut de toutes les demandes de transcodage actives.

Le champ Root Path doit pointer vers un emplacement que le service d'implémentation du transcodeur actuellement configuré peut lire. En revanche, le service de transcodage lui-même n'a pas besoin d'un accès en lecture à l'emplacement. Pour expliquer la distinction entre le nouveau service de transcodage et l'implémentation du transcodeur, le service de transcodage fournit une interface commune pour plusieurs implémentations de transcodeur (par exemple Vantage, FlipFactory, etc.). L'implémentation du transcodeur (par exemple, le service Vantage) requiert un accès en lecture au chemin racine.

L'API du service de transcodage figure dans une application Open Web Interface for .Net (OWIN) auto-hébergée et contenue dans un service Windows, ce qui supprime toute dépendance à l'IIS. Les informations des demandes sont conservées dans une base de données SQL Server Express LocalDB qui est installée avec le programme d'installation du service et accessible par la couche de données via une interface commune.

Pour utiliser le service de transcodage, les utilisateurs doivent sélectionner transcodeSvc comme source ou destination lors de la soumission des demandes. Pour une configuration correcte du nouveau service de transcodage, le paramètre Source Name doit correspondre à la valeur de configuration TranscodeSourceDestName de DIVAdirector et l'entrée Connect Options ne doit inclure aucun des indicateurs tr (exemples : tr_restore_format, tr_names, etc).

Fichier de configuration Web

Le service de transcodage requiert l'apport de plusieurs modifications à la configuration Web de DIVAdirector. Le fichier de configuration Web se trouve dans le dossier www de l'installation. Par exemple, C:\Program Files (x86)\DIVAdirector 5\www\Web.config.

Les mises à jour des paramètres sont les suivantes :

DIVArchive Web Services (WS) Endpoint

Vous pouvez configurer le point d'extrémité WS pour tout port disponible.

<add key="DIVArchiveAPIUrl" value="http://10.80.106.57:9763/services/DIVArchiveWS_REST_2.1/" />
appname

Ce paramètre identifie le nom de l'application à enregistrer dans l'interface de l'API WS de DIVArchive. Plus spécifiquement, la valeur du paramètre appName est transmise à la méthode registerClient. Cette transmission est requise avant l'interface avec l'API WS de DIVArchive. Par exemple :

<add key="appName" value="DIVAdirector" />
TranscodeSourceDestName

Ce paramètre identifie le nom de la source ou de la destination préconfigurée qui définit l'emplacement de restauration DIVArchive à utiliser par DIVAdirector pour la création des proxies avec le service de transcodage.

<add key="TranscodeSourceDestName" value="transcodeSvc"/>

Services Windows

Le service Windows DIVAdirector installé avec l'application Web gère les tâches en arrière-plan exécutées en dehors du cadre d'une demande Web (création de proxy, extraction de métadonnées, surveillance de dossier de déport, etc.). La console de gestion Windows affiche le service hérité DIVAdirector Server Service.

La fonctionnalité de tâches en arrière-plan est migrée vers un nouveau service, loin du service hérité. Actuellement, le nouveau service Oracle.DIVAdirector.TaskManager gère uniquement un sous-ensemble de la fonctionnalité. De fait, les deux services sont installés par le programme d'installation de DIVAdirector tant que le service existant n'a pas été complètement migré.

Le fichier de configuration du service Oracle.DIVAdirector.TaskManager , Oracle.DIVAdirector.TaskManager.exe.config, se trouve dans le dossier C:\Program Files (x86)\DIVAdirector 5\TaskManager\.

Le fichier de configuration comprend quatre sections principales décrites ci-dessous, dont vous devez tenir compte.

  1. Configuration de point d'extrémité API REST des services Web DIVArchive

    Quatre paramètres doivent être configurés dans la section <appSettings> :

    applicationName

    Ce paramètre est le nom de l'application à enregistrer dans l'interface de l'API WS. Plus spécifiquement, la valeur du paramètre appName est transmise à la méthode registerClient. Cette transmission est requise avant l'interface avec l'API WS.

    <add key="applicationName" value="app name" />
    
    locationName

    Ce paramètre indique l'emplacement physique où est situé l'ordinateur qui exécute le client. Plus spécifiquement, la valeur du paramètre locName est transmise à la méthode registerClient. Cette transmission est requise avant l'interface avec l'API WS.

    <add key="locationName" value="location name" />
    
    processID

    Ce paramètre identifie l'ID processus utilisé pour enregistrer l'application cliente. Plus spécifiquement, la valeur du paramètre processID est transmise à la méthode registerClient. Cette transmission est requise avant l'interface avec l'API WS.

    <add key="processId" value="1234" />
    
    DIVArchiveApiUrl

    Ce paramètre identifie le point d'extrémité WS API REST. Vous pouvez utiliser n'importe quel numéro de port disponible pour le point d'extrémité.

    <add key="DIVArchiveApiUrl" value="http://10.80.106.57:9763/services/DIVArchiveWS_REST_2.1/" />
    
  2. Configuration de l'accès au service de transcodage

    Trois paramètres doivent être configurés dans la section <TranscodeSettingsConfigurationSection> :

    TranscoderClientSettings

    Le paramètre TranscoderApiUrl est l'URL du point d'extrémité de l'API de base du service de transcodage. Un nombre entier facultatif LocationId peut être ajouté au paramètre TranscoderClientSettings pour remplacer l'emplacement par défaut.

    <TranscoderClientSettings TranscoderApiUrl="http://localhost:9876/api/">
    
    PresetName

    Le paramètre PresetName est le nom d'une configuration prédéfinie dans le service de transcodage. Il s'agit d'un nom associé à un ID prédéfini (par exemple, un ID workflow Vantage).

    PresetName="Default Video Proxy"
    
    ProxyableFileExtensions

    Le paramètre ProxyableFileExtensions est la liste des extensions de fichier pour laquelle le service tente de créer un proxy.

    ProxyableFileExtensions="mxf,lxf,avi,mpg,mpeg,mov,mp4">
    

    La liste des paramètres ci-dessous est transmise au workflow prédéfini défini par le paramètre PresetName. Vous pouvez ajouter d'autres paramètres à cette liste au besoin sans aucune modification de code.

    <Parameters>
    <Parameter Key="GenerateKeyFrames" Value="True" />
    <Parameter Key="KeyframeCaptureInterval" Value="00:00:01:00@29.97" />
    </Parameters>
    
  3. Configuration de tâches et d'intervalles de tâche

    Les tâches suivantes sont configurées dans la section <ScheduledTasks> et exécutées par le service Windows. Vous ne pouvez pas désactiver une de ces tâches sans perdre la fonctionnalité. En revanche, vous pouvez régler une horloge d'intervalles à l'aide du paramètre IntervalInSeconds pour une performance accrue.

    TranscodeOnRestoreCompleteTask

    Cette tâche interroge l'avancement d'une demande de restauration DIVArchive (via le point d'extrémité DIVArchive Web Services (WS) API REST), et lance une demande de transcodage à l'aboutissement. Cette tâche est également chargée d'appeler le service de création de proxy.

    <ScheduledTask Name="TranscodeOnRestoreCompleteTask" Type="Oracle.DIVAdirector.TaskManager.Tasks.TranscodeOnRestoreCompleteTask, Oracle.DIVAdirector.TaskManager" IntervalInSeconds="10" Enabled="true" />
    
    UpdateRequestsStatusTask

    Cette tâche surveille et met à jour l'état et l'avancement de toutes les demandes DIVArchive actives.

    <ScheduledTask Name="UpdateRequestsStatusTask" Type="Oracle.DIVAdirector.TaskManager.Tasks.UpdateRequestsStatusTask, Oracle.DIVAdirector.TaskManager" IntervalInSeconds="10" Enabled="true" />
    
  4. Configuration de la communication avec la base de données Postgres

    Cette chaîne de connexion doit utiliser le même serveur et les mêmes informations d'identification de connexion que celle de la chaîne de connexion définie dans le fichier web.config de l'application Web DIVAdirector.

    <connectionStrings>
    <add name="DIVADirectorContext" connectionString="Server=localhost;Database=DIVAdirector;User Id=postgres;Password=Manager;" providerName="Npgsql" />
    </connectionStrings>
    

Paramètres de base de données

AVERTISSEMENT :

Oracle recommande vivement de ne pas effectuer ces modifications sans la présence d'un technicien du support Oracle.

Plusieurs paramètres de configuration stockés dans la base de données LocalDB peuvent uniquement être modifiés directement dans les lignes de base de données.

Paramètres du transcodeur

Les paramètres de transcodeur suivants peuvent être modifiés directement dans la base de données :

  • TranscoderSettings.Transcoder stocke le nom de l'implémentation du transcodeur actuelle. Dans cette version, seul le transcodeur Vantage est pris en charge.

  • VantageSettings.Host stocke le nom de la machine exécutant le service SDK Vantage.

  • VantageSettings.Port stocke le nom du port utilisé par le service SDK Vantage.

  • VantageSettings.MetadataActionDescriptions stocke les descriptions des actions impliquées dans le workflow Vantage qui exposent les variables de métadonnées qui devraient être associées à une tâche.

Paramètres de la base de données du transcodeur Vantage

Valeurs prédéfinies

Le tableau Valeurs prédéfinies stocke un mappage nommé vers un identificateur de workflow interne de l'implémentation de transcodeur. Pour Vantage, l'ID interne correspond à l'identificateur du workflow.

Le texte environnant décrit c4_presets.jpg.

Le paramètre CheckStatusOnStartup est un indicateur booléen signalant qu'une valeur prédéfinie requise doit être vérifiée pendant le démarrage du service. Un avertissement est consigné si CheckStatusOnStartup est défini sur true et que la valeur prédéfinie est introuvable. Le service tente d'activer la valeur prédéfinie si CheckStatusOnStartup est défini sur true et que la valeur prédéfinie est identifiée mais non active. Les fichiers journaux de transcodage mentionneront des entrées relatives à cette vérification et cette tentative d'activation.

Le texte environnant décrit c4_logfile.jpg.

Emplacements

Le tableau Emplacements stocke un ensemble d'emplacements de stockage prédéfinis. Le service de transcodage accepte uniquement les tâches associée à un emplacement de stockage valide. Si aucun emplacement n'est spécifié dans la demande de transcodage, le service tente de trouver un emplacement à l'aide de IsDefault (s'il est défini sur true) et d'utiliser cet emplacement. Les fichiers journaux indiquent qu'aucun emplacement n'a été spécifié et que la valeur par défaut est utilisée.

La colonne Path stocke le chemin associé à l'emplacement. Cette valeur constitue le chemin de base pour la tâche de transcodage. Le reste du chemin est constitué de l'ID de tâche renvoyé par le service de transcodage. Par exemple, si le chemin de l'emplacement est \\10.80.106.91\c$\Users\Administrator\Desktop\output\Dev et que l'ID de tâche 6449d0db-2377-4e3d-a969-be09a742a63d est renvoyé par le service de transcodage, le chemin de sortie final du fichier de transcodage sera \\10.80.106.91\c$\Users\Administrator\Desktop\output\Dev\6449d0db-2377-4e3d-a969-be09a742a63d.

Points d'extrémité de l'API

Deux principaux points d'extrémité REST sont configurés par la modification des entrées de la base de données :

  • /api/transcoder est utilisé pour afficher les informations du transcodeur actuellement configuré.

  • /api/jobs/[jobId] est utilisé pour afficher la progression des tâches et soumettre de nouvelles tâches.

Exemple n° 1

Pour créer une nouvelle tâche de transcodage, effectuez la demande suivante :

HTTP POST to /api/jobs
{    
    "inputFilePath": " \\rootPath\InputFileMXF",
    "output":{
        "presetName": "Default Video Proxy",
        "parameters": [
            {
                "name": "GenerateKeyFrames",
                "value": "True"
            },
            {
                "name": "KeyframeWidth",
                "value": "128"
            }, ….
        ]
    }
}

La réponse à la demande est la suivante :

201 Created
Headers: 
…. Location: http://localhost:9876/api/jobs/794660fe-2c37-491c-b7a9-7fe27f2c6346....
Body:
{
  "jobId": "794660fe-2c37-491c-b7a9-7fe27f2c6346",
  "internalId": "57d0a08b-fa5f-4ff7-8177-c1d2d4adf92a",
  "inputFilePath": "\\rootPath\InputFileMXF",
  "outputFilePath": null,
  "status": 8,
  "createdDate": "2015-08-13T10:26:06.5553211-06:00",
  "createdBy": null,
  "updatedDate": "2015-08-13T10:26:06.5553211-06:00",
  "updatedBy": null,
  "progress": 0,
  "metadata": null,
  "output": {
    "id": 11,
    "presetName": "Default Video Proxy",
    "location": {
      "id": 1,
      "name": "Default Location",
      "path": "\\10.80.106.91\c$\Users\Administrator\Desktop\output\Dev",
      "isDefault": true
    },
    "parameters": [
      {
        "id": 40,
        "name": "GenerateKeyFrames",
        "type": null,
        "value": "True"
      },
      {
        "id": 43,
        "name": "KeyframeWidth",
        "type": null,
        "value": "128"
      },
      {
        "id": 45,
        "name": "OutputFileName",
        "type": null,
        "value": "AA004001"
      }
    ]
  }
}

Exemple n° 2

Pour obtenir le récapitulatif de toutes les tâches, effectuez la demande suivante :

HTTP GET TO /api/jobs

La réponse à la demande est la suivante :

[
  {
    "jobId": "2ebbd1e9-b404-4909-944e-8d48c0a4b370",
    "internalId": "57d0a08b-fa5f-4ff7-8177-c1d2d4adf92a",
    "inputFilePath": "C:\Users\Administrator\Desktop\watch\AA004001.MXF",
    "outputFilePath": "\\10.80.106.91\c$\Users\Administrator\Desktop\output\Dev\2ebbd1e9-b404-4909-944e-8d48c0a4b370\AA004001.mp4",
    "status": 6,
    "createdDate": "2015-08-13T10:26:06.557",
    "createdBy": null,
    "updatedDate": "2015-08-13T10:26:26.067",
    "updatedBy": "TaskManager",
    "progress": 100
  },
  {
    "jobId": "25970df1-7f60-4f65-8ee9-49b83b908364",
    "internalId": "44c54311-da47-443f-b7e2-21c56c247e0e",
    "inputFilePath": "C:\Users\Administrator\Desktop\watch\AA004001.MXF",
    "outputFilePath": "\\10.80.106.91\c$\Users\Administrator\Desktop\output\Dev\25970df1-7f60-4f65-8ee9-49b83b908364\AA004001.mp4",
    "status": 6,
    "createdDate": "2015-08-13T10:19:26.28",
    "createdBy": null,
    "updatedDate": "2015-08-13T10:19:50.687",
    "updatedBy": "TaskManager",
    "progress": 100
  }]

Exemple n° 3

Pour obtenir les détails de la tâche, effectuez la demande suivante :

HTTP GET to /api/jobs/794660fe-2c37-491c-b7a9-7fe27f2c6346

La réponse à la demande est la suivante :

{
  "jobId": "794660fe-2c37-491c-b7a9-7fe27f2c6346",
  "internalId": "57d0a08b-fa5f-4ff7-8177-c1d2d4adf92a",
  "inputFilePath": "C:\Users\Administrator\Desktop\watch\AA004001.MXF",
  "outputFilePath": "\\10.80.106.91\c$\Users\Administrator\Desktop\output\Dev\2ebbd1e9-b404-4909-944e-8d48c0a4b370\AA004001.mp4",
  "status": 6,
  "createdDate": "2015-08-13T10:26:06.557",
  "createdBy": null,
  "updatedDate": "2015-08-13T10:26:26.067",
  "updatedBy": "TaskManager",
  "progress": 100,
  "metadata": "[{\"Key\":\"Container Format\",\"Value\":\"Material Exchange Format (OP-1a)\"},{\"Key\":\"Content Duration\",\"Value\":\"00:00:08:04@25\"},{\"Key\":\"Video Framerate\",\"Value\":\"25\"},{\"Key\":\"Header Timecode\",\"Value\":\"01:06:18:15@25\"},{\"Key\":\"OutputFileFullPath\",\"Value\":\"\\\\10.80.106.91\\c$\\Users\\Administrator\\Desktop\\output\\Dev\\2ebbd1e9-b404-4909-944e-8d48c0a4b370\\AA004001.mp4\"}]",
  "output": {
    "id": 11,
    "location": {
      "id": 1,
      "name": "Default Location",
      "path": "\\10.80.106.91\c$\Users\Administrator\Desktop\output\Dev",
      "isDefault": true
    },
    "presetName": "Default Video Proxy",
    "parameters": [
      {
        "id": 40,
        "name": "GenerateKeyFrames",
        "type": null,
        "value": "True"
      },
      {
        "id": 43,
        "name": "KeyframeWidth",
        "type": null,
        "value": "128"
      },
      {
        "id": 45,
        "name": "OutputFileName",
        "type": null,
        "value": "AA004001"
      }
    ]
  }
}