4 DIVA Transcode Service

この章では、DIVAdirector 5.3 で導入される新しい DIVA Transcode Service について説明します。

概要

Oracle DIVAdirector 5.3 では、新しいトランスコードサービスをシステムに導入しています。このサービスには、2 つの主要コンポーネントが含まれています。1 つ目のコンポーネントは、要求の送信と表示、および現在構成されているトランスコーダ情報 (名前、バージョンなど) の表示を行う RESTful API です。2 つ目のコンポーネントは、すべてのアクティブなトランスコード要求の進行状況と状態を更新するために定期的に実行される時間ベースのバックグラウンドプロセスです。

ルートパスは、現在構成されているトランスコーダ実装サービスが読み取ることのできる場所を指している必要があります。ただし、新しいトランスコードサービスではその場所への読み取りアクセスは必要ありません。新しいトランスコードサービスとトランスコーダ実装との違いを明確にするために、トランスコードサービスでは複数のトランスコーダ実装 (Vantage、FlipFactory など) に対して 1 つの共通インタフェースを提供します。トランスコーダ実装 (Vantage サービスなど) では、ルートパスへの読み取り権限が必要です。

トランスコードサービス API は、自己ホスト型 Open Web Interface for .Net (OWIN) アプリケーション内にあり、Windows サービスに含まれています (IIS への依存関係はすべて削除)。要求の情報は、サービスインストーラを使ってインストールされた SQL Server Express LocalDB データベースに保持され、共通インタフェースを介してデータレイヤーによってアクセスされます。

トランスコーダサービスを使用するには、ユーザーが要求の送信時にソースまたは宛先として transcodeSvc を選択します。新しいトランスコードサービスを正しく構成するには、「Source Name」が DIVAdirector の「TranscodeSourceDestName」構成値と一致する必要があり、「Connect Options」のエントリに「tr」フラグ (「tr_restore_format」や「tr_names」など) が含まれていてはいけません。

Web 構成ファイル

新しいトランスコーダサービスでは、DIVAdirector Web の構成にいくつかの変更を行う必要があります。Web 構成ファイルは、インストール先の www フォルダにあります。たとえば、C:\Program Files (x86)\DIVAdirector 5\www\Web.config です。

設定の更新は次のとおりです。

DIVArchive Web Services (WS) Endpoint

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\ フォルダにあります。

この構成ファイルには、下記のように、注意を必要とする 4 つの主要セクションがあります。

  1. DIVArchive Web Services API REST エンドポイントの構成

    <appSettings> セクションでは、4 つの設定を構成する必要があります。

    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. Transcoder Service アクセスの構成

    <TranscodeSettingsConfigurationSection> セクションでは、3 つの設定を構成する必要があります。

    TranscoderClientSettings

    TranscoderApiUrl は、トランスコードサービスの基本 API エンドポイントの URL です。オプションの整数 LocationIdTranscoderClientSettings に追加すると、デフォルトの場所をオーバーライドできます。

    <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 Web Services (WS) API REST エンドポイントを介して) DIVArchive の復元要求の進行状況をポーリングし、完了次第トランスコード要求を開始します。このタスクは、プロキシ作成サービスの呼び出しも行います。

    <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 サポート技術者の立ち合いなしでこれらの変更を行わないよう強くお勧めします。

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 に設定されている場合) を使ってロケーションの検索を試み、そのロケーションを使用します。ログファイルには、ロケーションが指定されなかったこと、および使用されたデフォルト値が示されます。

パス列には、ロケーションに関連付けられたパスが格納されています。この値によって、トランスコードされたジョブの基本出力パスが形成されます。パスの残りの部分は、トランスコードサービスから返されたジョブ 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 エンドポイントが 2 つあります。

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