En este capítulo, se analiza el nuevo servicio de transcodificación de DIVA presentado con DIVAdirector 5.3.
La versión 5.3 de Oracle DIVAdirector introduce un nuevo servicio de transcodificación al sistema. El servicio consta de dos componentes principales. El primer componente es una API RESTful que se utiliza para enviar y ver solicitudes, y para ver la información del transcodificador que ya está configurada (por ejemplo, nombre y versión). El segundo componente es un proceso en segundo plano basado en tiempo que se ejecuta periódicamente para actualizar el progreso y el estado de todas las solicitudes que se transcodifican activamente.
El valor de Root Path (Ruta raíz) debe apuntar a una ubicación que puede leer el servicio de implementación del transcodificador actualmente configurado. Sin embargo, el nuevo servicio de transcodificación no necesita acceso de lectura a la ubicación. Para aclarar la distinción entre el nuevo servicio de transcodificación y la implementación del transcodificador, el servicio de transcodificación proporciona una interfaz común para varias implementaciones del transcodificador (por ejemplo, Vantage, FlipFactory, etc.). La implementación del transcodificador (por ejemplo, el servicio Vantage) requiere acceso de lectura a la ruta raíz.
La API del servicio de transcodificación es una aplicación Open Web Interface for .Net (OWIN) autohospedada contenida en un servicio de Windows, lo que elimina cualquier dependencia de IIS. La información de solicitud se mantiene en una base de datos Express LocalDB de SQL Server que se instala con el instalador del servicio y se accede a ella mediante la capa de datos con una interfaz común.
Para utilizar el servicio de transcodificación, los usuarios seleccionan transcodeSvc como origen o destino cuando envían las solicitudes. Para configurar el nuevo servicio de transcodificador correctamente, el Source Name (Nombre de origen) debe coincidir con el valor de configuración TranscodeSourceDestName de DIVAdirector y la entrada Connect Options (Opciones de conexión) no incluye ninguno de los indicadores tr (por ejemplo, tr_restore_format, tr_names, etc.).
El nuevo servicio de transcodificador requiere varios cambios en la configuración web de DIVAdirector. El archivo de configuración web se encuentra en la carpeta www de la instalación. Por ejemplo, C:\Program Files (x86)\DIVAdirector 5\www\Web.config
.
Las actualizaciones de configuración son:
Puede configurar el punto final de servicios web en cualquier puerto disponible.
<add key="DIVArchiveAPIUrl" value="http://10.80.106.57:9763/services/DIVArchiveWS_REST_2.1/" />
appname
Esto identifica el nombre de la aplicación que se registrará en la interfaz API de servicios web de DIVArchive. En especial, el valor del parámetro appName
se transmite al método registerClient
. Esto es necesario antes de interactuar con la API de servicios web (WS) de DIVArchive. Por ejemplo:
<add key="appName" value="DIVAdirector" />
TranscodeSourceDestName
Esto identifica el nombre del origen o el destino preconfigurado que define la ubicación de restauración de DIVArchive que usará DIVAdirector para crear proxies con el servicio de transcodificación.
<add key="TranscodeSourceDestName" value="transcodeSvc"/>
El servicio de Windows de DIVAdirector que se instala junto con la aplicación web maneja las tareas en segundo plano que se llevan a cabo fuera del contexto de una solicitud web (por ejemplo, creación de proxy, extracción de metadatos, supervisión de carpetas de entrega, etc.). La consola de gestión de Windows muestra el servicio heredado como servicio del servidor de DIVAdirector
.
La funcionalidad de la tarea en segundo plano se está migrando del servicio de heredado a un servicio nuevo. El nuevo servicio Oracle.DIVAdirector.TaskManager
actualmente maneja solamente un subjuego de la funcionalidad y, por lo tanto, ambos servicios serán instalados por el instalador de DIVAdirector hasta que se haya migrado por completo el servicio heredado.
El archivo de configuración del servicio Oracle.DIVAdirector.TaskManager
, Oracle.DIVAdirector.TaskManager.exe.config
, se encuentra en la carpeta C:\Program Files (x86)\DIVAdirector 5\TaskManager\
.
El archivo de configuración tiene cuatro secciones principales que necesitan atención, como se describe a continuación.
Configuración de punto final de REST de la API de servicios web de DIVArchive
Cuatro ajustes requieren configuración en la sección <appSettings>
:
applicationName
Nombre de la aplicación que se registrará en la interfaz API de servicios web. En especial, este es el valor del parámetro appName
que se transmite al método registerClient
. Esto es necesario antes de interactuar con la API de servicios web.
<add key="applicationName" value="app name" />
locationName
Identifica la ubicación física donde se encuentra la computadora que ejecuta el cliente. En especial, el valor del parámetro locName
se transmite al método registerClient
. Esto es necesario antes de interactuar con la API de servicios web.
<add key="locationName" value="location name" />
processID
Identifica el número de ID de proceso que se usa para registrar la aplicación cliente. En especial, el valor del parámetro processID
se transmite al método registerClient
. Esto es necesario antes de interactuar con la API de servicios web.
<add key="processId" value="1234" />
DIVArchiveApiUrl
Identifica el punto final de REST de la API de servicios web. Puede usar cualquier número de puerto disponible para el punto final.
<add key="DIVArchiveApiUrl" value="http://10.80.106.57:9763/services/DIVArchiveWS_REST_2.1/" />
Configuración de acceso al servicio de transcodificación
Tres ajustes requieren configuración en la sección <TranscodeSettingsConfigurationSection>
:
TranscoderClientSettings
TranscoderApiUrl
es la dirección URL del punto final de la API base del servicio de transcodificación. Se puede agregar un número entero LocationId
opcional a TranscoderClientSettings
para sustituir la ubicación por defecto.
<TranscoderClientSettings TranscoderApiUrl="http://localhost:9876/api/">
PresetName
PresetName
es el nombre de una configuración prestablecida en el servicio de transcodificador. Un nombre prestablecido es un nombre asociado con un ID prestablecido (por ejemplo, un ID de flujo de trabajo de Vantage).
PresetName="Default Video Proxy"
ProxyableFileExtensions
ProxyableFileExtensions
es la lista de extensiones para las que el servicio intentará crear un proxy.
ProxyableFileExtensions="mxf,lxf,avi,mpg,mpeg,mov,mp4">
La siguiente lista de parámetros se transmite al flujo de trabajo prestablecido definido por PresetName
. Puede agregar más parámetros a esta lista según sea necesario realizar cambios de código.
<Parameters> <Parameter Key="GenerateKeyFrames" Value="True" /> <Parameter Key="KeyframeCaptureInterval" Value="00:00:01:00@29.97" /> </Parameters>
Configuración de tareas e intervalos de tareas
Las siguientes tareas se configuran en la sección <ScheduledTasks>
y las ejecuta el servicio de Windows. No puede desactivar ninguna de estas tareas sin perder funcionalidad. Sin embargo, puede ajustar el temporizador de intervalo con el parámetro IntervalInSeconds
para lograr un mejor rendimiento.
TranscodeOnRestoreCompleteTask
Esta tarea sondea el progreso de una solicitud de restauración de DIVArchive, mediante el punto final de REST de la API de servicios web (WS) de DIVArchive, e inicia una solicitud de transcodificación después de la finalización. Esta tarea también es responsable de llamar al servicio de creación de proxy.
<ScheduledTask Name="TranscodeOnRestoreCompleteTask" Type="Oracle.DIVAdirector.TaskManager.Tasks.TranscodeOnRestoreCompleteTask, Oracle.DIVAdirector.TaskManager" IntervalInSeconds="10" Enabled="true" />
UpdateRequestsStatusTask
Esta tarea supervisa y actualiza el estado y el progreso de todas las solicitudes activas de DIVArchive.
<ScheduledTask Name="UpdateRequestsStatusTask" Type="Oracle.DIVAdirector.TaskManager.Tasks.UpdateRequestsStatusTask, Oracle.DIVAdirector.TaskManager" IntervalInSeconds="10" Enabled="true" />
Configuración de comunicación de base de datos de Postgres
Esta cadena de conexión debe usar el mismo servidor y las mismas credenciales que la cadena de conexión definida en el archivo web.config de la aplicación web de DIVAdirector.
<connectionStrings> <add name="DIVADirectorContext" connectionString="Server=localhost;Database=DIVAdirector;User Id=postgres;Password=Manager;" providerName="Npgsql" /> </connectionStrings>
ADVERTENCIA:
Oracle recomienda no realizar estas modificaciones sin la asistencia de un técnico de soporte de Oracle.
Hay varios ajustes de configuración almacenados en LocalDB que solamente se pueden modificar si se modifican directamente las filas de la base de datos.
Los siguientes ajustes de configuración del transcodificador se pueden modificar directamente en la base de datos:
TranscoderSettings.Transcoder almacena el nombre de la implementación actual del transcodificador. Vantage es el único transcodificador que se admite en esta versión.
VantageSettings.Host almacena el nombre de la computadora que ejecuta el servicio SDK de Vantage.
VantageSettings.Port almacena el número de puerto usado por el servicio SDK de Vantage.
VantageSettings.MetadataActionDescriptions almacena las descripciones de las acciones en el flujo de trabajo de Vantage que expone las variables de metadatos que se deben asociar con un trabajo.
La tabla Valores prestablecidos almacena una asignación con nombre a un identificador de flujo de trabajo interno de la implementación del transcodificador. Para Vantage, InternalId es el identificador de flujo de trabajo.
El parámetro CheckStatusOnStartup es un indicador booleano que indica un valor prestablecido necesario que se deberá comprobar durante el inicio del servicio. Se registrará una advertencia si se configura CheckStatusOnStartup como True y no se encuentra el valor prestablecido. El servicio intentará activar el valor prestablecido si CheckStatusOnStartup está definido en True y se encuentra el valor prestablecido pero no está activo. Los archivos log del transcodificador tendrán entradas para esta comprobación y para los intentos de activación.
La tabla Locations (Ubicaciones) almacena un conjunto de ubicaciones de almacenamiento de salida predefinidas. El servicio de transcodificación solamente aceptará trabajos con una ubicación de almacenamiento válida. Si no se especifica ninguna ubicación en la solicitud de transcodificación, el servicio intentará encontrar una ubicación mediante IsDefault (si está configurado en True) y usará esa ubicación. Los archivos log indicarán que no se ha especificado ninguna ubicación y se usará el valor por defecto.
La columna Path (Ruta) almacena la ruta asociada con la ubicación. Este valor formará la ruta de salida de base para el trabajo de transcodificación. El resto de la ruta se formará mediante el ID de trabajo devuelto por el servicio de transcodificación. Por ejemplo, si la ruta de ubicación es \\10.80.106.91\c$\Users\Administrator\Desktop\output\Dev
y se devuelve un ID de trabajo 6449d0db-2377-4e3d-a969-be09a742a63d
desde el servicio de transcodificación, la ruta de salida final será \\10.80.106.91\c$\Users\Administrator\Desktop\output\Dev\6449d0db-2377-4e3d-a969-be09a742a63d
.
Hay dos puntos finales principales de REST que se configuran mediante la modificación de las entradas de la base de datos:
/api/transcoder
se usa para ver la información de transcodificador configurada actualmente.
/api/jobs/[
jobId
]
se usa para ver el progreso del trabajo y para enviar trabajos nuevos.
Para crear un nuevo trabajo de transcodificación, la solicitud es la siguiente:
HTTP POST to /api/jobs { "inputFilePath": " \\rootPath\InputFileMXF", "output":{ "presetName": "Default Video Proxy", "parameters": [ { "name": "GenerateKeyFrames", "value": "True" }, { "name": "KeyframeWidth", "value": "128" }, …. ] } }
La respuesta a la solicitud es la siguiente:
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" } ] } }
Para obtener todos los resúmenes de trabajos, la solicitud es la siguiente:
HTTP GET TO /api/jobs
La respuesta a la solicitud es la siguiente:
[ { "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 }]
Para obtener todos los detalles de trabajos, la solicitud es la siguiente:
HTTP GET to /api/jobs/794660fe-2c37-491c-b7a9-7fe27f2c6346
La respuesta a la solicitud es la siguiente:
{ "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" } ] } }