4 DIVA 转码服务

本章讨论 DIVAdirector 5.3 中引入的新 DIVA 转码服务。

简介

Oracle DIVAdirector 5.3 在系统中引入了一个新的转码服务。该服务包含两个主要组件。第一个组件是 RESTful API,用于提交和查看请求,以及查看当前配置的转码器信息(名称和版本等)。第二个组件是基于时间的后台进程,它定期执行以更新所有正在执行的转码请求的进度和状态。

根路径必须指向当前配置的转码器实施服务可以读取的位置。然而,新的转码服务无需对该位置具有读取访问权限。为了弄清新转码服务和转码器实施之间的区别,可以这样理解:转码服务为多种转码器实施(例如,Vantage 和 FlipFactory 等)提供了一个通用接口。转码器实施(例如 Vantage 服务)需要对根路径具有读取访问权限。

转码服务 API 位于自托管 Open Web Interface for .Net(适用于 .Net 的开放 Web 接口,OWIN)应用程序中并包含在 Windows 服务中,目的是消除对 IIS 的任何依赖。请求信息存储在通过服务安装程序安装的 SQL Server Express LocalDB 数据库中,并由数据层通过通用接口进行访问。

要使用转码器服务,用户需要在提交请求时选择 transcodeSvc 作为源或目标。要正确配置新的转码服务,Source Name 必须与 DIVAdirector TranscodeSourceDestName 配置值相匹配,并且 Connect Options 条目不能包含任何 tr 标志(例如,tr_restore_formattr_names 等)。

Web 配置文件

新的转码器服务要求对 DIVAdirector Web 配置进行一些更改。Web 配置文件位于安装的 www 文件夹中。例如,C:\Program Files (x86)\DIVAdirector 5\www\Web.config

设置更新如下:

DIVArchive Web 服务 (Web Service, WS) 端点

可以将 WS 端点配置为任何可用端口。

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

此参数标识要在 DIVArchive WS API 接口中注册的应用程序的名称。具体地说,就是传递给 registerClient 方法的 appName 参数的值。需要在与 DIVArchive WS API 连接之前配置此设置。例如:

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

此参数标识预配置源或目标的名称,预配置源或目标定义 DIVAdirector 用于通过转码服务创建代理的 DIVArchive 恢复位置。

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

Windows 服务

随 Web 应用程序一起安装的 DIVAdirector Windows 服务将处理在 Web 请求的上下文之外执行的后台任务(例如,代理创建、元数据提取和放置文件夹监控等)。Windows 管理控制台将旧服务显示为 DIVAdirector Server Service

后台任务功能将从旧服务迁移至新服务。新 Oracle.DIVAdirector.TaskManager 服务当前仅处理一部分功能,因此在旧服务完全迁移之前,DIVAdirector 安装程序将安装两个服务。

Oracle.DIVAdirector.TaskManager 服务配置文件 Oracle.DIVAdirector.TaskManager.exe.config 位于 C:\Program Files (x86)\DIVAdirector 5\TaskManager\ 文件夹内。

该配置文件有四个主要部分需要注意,如下所述。

  1. DIVArchive Web 服务 API REST 端点配置

    您需要在 <appSettings> 部分中配置以下四项设置:

    applicationName

    这是要在 WS API 接口中注册的应用程序的名称。具体地说,这是传递给 registerClient 方法的 appName 参数的值。需要在与 WS API 连接之前配置此设置。

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

    此参数标识运行客户机的计算机所在的物理位置。具体地说,就是传递给 registerClient 方法的 locName 参数的值。需要在与 WS API 连接之前配置此设置。

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

    此参数标识用于注册客户机应用程序的进程 ID 号。具体地说,就是传递给 registerClient 方法的 processID 参数的值。需要在与 WS API 连接之前配置此设置。

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

    此参数标识 WS API REST 端点。可以将任何可用端口号用于此端点。

    <add key="DIVArchiveApiUrl" value="http://10.80.106.57:9763/services/DIVArchiveWS_REST_2.1/" />
    
  2. 转码器服务访问配置

    需要在 <TranscodeSettingsConfigurationSection> 部分配置三个设置:

    TranscoderClientSettings

    TranscoderApiUrl 是转码服务基本 API 端点的 url。可以向 TranscoderClientSettings 添加可选的整数 LocationId,以覆盖默认位置。

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

    PresetName 是转码器服务中预设配置的名称。预设是与预设 ID(例如,Vantage 工作流 ID)关联的名称。

    PresetName="Default Video Proxy"
    
    ProxyableFileExtensions

    ProxyableFileExtensions 是服务将尝试为其创建代理的文件扩展名列表。

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

    下面的参数列表传递到由 PresetName 定义的预设工作流。您可以根据需要向此列表添加更多参数,而无需对代码进行任何更改。

    <Parameters>
    <Parameter Key="GenerateKeyFrames" Value="True" />
    <Parameter Key="KeyframeCaptureInterval" Value="00:00:01:00@29.97" />
    </Parameters>
    
  3. 任务和任务间隔配置

    以下任务在 <ScheduledTasks> 部分中配置并由 Windows 服务运行。一旦禁用任一任务,其相应功能也将丢失。然而,您可以使用 IntervalInSeconds 参数调整间隔计时器以提高性能。

    TranscodeOnRestoreCompleteTask

    此任务轮询 DIVArchive 恢复请求的进度(通过 DIVArchive Web 服务 (Web Service, WS) API REST 端点),并在完成时立即启动转码请求。此任务还负责调用代理创建服务。

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

    此任务将监视并更新所有处于活动状态的 DIVArchive 请求的状态和进度。

    <ScheduledTask Name="UpdateRequestsStatusTask" Type="Oracle.DIVAdirector.TaskManager.Tasks.UpdateRequestsStatusTask, Oracle.DIVAdirector.TaskManager" IntervalInSeconds="10" Enabled="true" />
    
  4. Postgres 数据库通信配置

    此连接字符串应使用与 DIVAdirector Web 应用程序 web.config 文件中定义的连接字符串相同的服务器和凭证。

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

数据库设置

警告:

Oracle 强烈建议,Oracle 支持技术人员不在场时不要执行这些修改。

LocalDB 中存储了几个只能通过直接修改数据库行进行修改的配置设置。

转码器设置

以下转码器设置可以直接在数据库中修改:

  • TranscoderSettings.Transcoder 存储当前转码器实施的名称。此发行版中仅支持 Vantage 转码器。

  • VantageSettings.Host 存储用来运行 Vantage SDK 服务的计算机的名称。

  • VantageSettings.Port 存储 Vantage SDK 服务使用的端口号。

  • VantageSettings.MetadataActionDescriptions 存储 Vantage 工作流中操作的描述,这些操作公开应与作业关联的元数据变量。

Vantage 转码器 DB 设置

预设

预设表存储与转码器实施的间隔工作流标识符的命名映射。对于 Vantage,InternalId 为工作流标识符。

周围的文本说明了 c4_presets.jpg。

CheckStatusOnStartup 参数是一种布尔标志,指示在服务启动期间必须检查的所需预设。如果 CheckStatusOnStartup 设置为 true 而且未找到预设,则将记录一条警告。如果 CheckStatusOnStartup 为 true 并且找到了预设,但预设未处于活动状态,则服务将尝试激活预设。转码日志文件具有关于此检查和激活尝试的条目。

周围的文本说明了 c4_logfile.jpg。

位置

位置表存储一组预定义的输出存储位置。转码服务仅接受具有有效存储位置的作业。如果未在转码请求中指定位置,则服务将尝试使用 IsDefault 来查找位置(如果设置为 true)并使用该位置。日志文件将指出未指定位置,因此使用了默认值。

Path 列存储与位置关联的路径。此值将构成转码作业的基本输出路径。路径的其余部分由转码服务返回的作业 ID 构成。例如,如果位置路径为 \\10.80.106.91\c$\Users\Administrator\Desktop\output\Dev 并且从转码服务返回了作业 ID 6449d0db-2377-4e3d-a969-be09a742a63d,则转码文件的最终输出路径为 \\10.80.106.91\c$\Users\Administrator\Desktop\output\Dev\6449d0db-2377-4e3d-a969-be09a742a63d

API 端点

有两个 REST 主端点,它们通过修改数据库条目进行配置:

  • /api/transcoder 用于查看当前配置的转码器信息。

  • /api/jobs/[jobId] 用于查看作业进度和提交新作业。

示例 1

要创建新的转码服务,则请求如下所示:

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

对请求的响应如下所示:

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"
      }
    ]
  }
}

示例 2

要获取所有作业的摘要,则请求如下所示:

HTTP GET TO /api/jobs

对请求的响应如下所示:

[
  {
    "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
  }]

示例 3

要获取作业详细信息,则请求如下所示:

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

对请求的响应如下所示:

{
  "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"
      }
    ]
  }
}