Ce chapitre aborde le nouveau service de transcodage DIVA ajouté à DIVAdirector 5.3.
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).
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 :
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"/>
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.
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/" />
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>
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" />
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>
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.
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.
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 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 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
.
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.
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" } ] } }
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 }]
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" } ] } }