이 장에서는 DIVAdirector 5.3에 사용된 새 DIVA Transcode Service에 대해 설명합니다.
Oracle DIVAdirector 5.3은 시스템에 새로운 트랜스코드 서비스를 소개합니다. 서비스에는 두 가지 주요 구성 요소가 포함됩니다. 첫번째 구성 요소는 요청을 제출 및 확인하고 현재 구성된 트랜스코더 정보(이름, 버전 등)를 확인하는 데 사용되는 RESTful API입니다. 두번째 구성 요소는 모든 활성 트랜스코딩 요청의 진행률 및 상태를 업데이트하도록 주기적으로 실행되는 시간 기반 백그라운드 프로세스입니다.
Root Path는 현재 구성된 트랜스코더 구현 서비스가 읽을 수 있는 위치를 가리켜야 합니다. 하지만 새 트랜스코드 서비스는 위치에 대한 읽기 액세스 권한을 필요로 하지 않습니다. 새 트랜스코드 서비스와 트랜스코더 구현의 명확한 구별을 위해 트랜스코드 서비스는 여러 트랜스코더 구현(예: Vantage, FlipFactory 등)에 대해 공통 인터페이스를 제공합니다. 트랜스코더 구현(예: Vantage 서비스)은 Root Path에 대한 읽기 액세스 권한을 필요로 합니다.
트랜스코드 서비스 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 등)가 포함되지 않습니다.
새 트랜스코더 서비스를 사용하려면 몇 가지 DIVAdirector Web 구성을 변경해야 합니다. 웹 구성 파일은 설치의 www 폴더에 있습니다. C:\Program Files (x86)\DIVAdirector 5\www\Web.config
를 예로 들 수 있습니다.
설정 업데이트는 다음과 같습니다.
사용 가능한 포트에 대한 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"/>
웹 응용 프로그램과 함께 설치된 DIVAdirector Windows 서비스는 프록시 만들기, 메타데이터 추출, 드롭 폴더 모니터링 등 웹 요청 컨텍스트 외부에서 수행된 백그라운드 작업을 처리합니다. Windows Management Console(관리 콘솔)에는 레거시 서비스가 DIVAdirector Server 서비스
로 표시됩니다.
레거시 서비스에서 새 서비스로 백그라운드 작업 기능이 마이그레이션되고 있습니다. 지금은 새 Oracle.DIVAdirector.TaskManager
서비스가 해당 기능 중 일부만 처리하므로 레거시 서비스가 완전히 마이그레이션될 때까지는 DIVAdirector 설치 프로그램을 통해 레거시 서비스와 새 서비스가 모두 설치됩니다.
Oracle.DIVAdirector.TaskManager
서비스 구성 파일인 Oracle.DIVAdirector.TaskManager.exe.config
는 C:\Program Files (x86)\DIVAdirector 5\TaskManager\
폴더에 있습니다.
구성 파일의 주요 섹션 4개는 아래에 설명된 대로 주의가 필요합니다.
DIVArchive 웹 서비스 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/" />
트랜스코더 서비스 액세스 구성
<TranscodeSettingsConfigurationSection>
섹션에서 세 가지 설정을 구성해야 합니다.
TranscoderClientSettings
TranscoderApiUrl
은 트랜스코드 서비스 기본 API 끝점의 URL입니다. 선택적 정수 LocationId
를 TranscoderClientSettings
에 추가하여 기본 위치를 대체할 수 있습니다.
<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>
작업 및 작업 간격 구성
다음 작업이 <ScheduledTasks>
섹션에서 구성되며 Windows 서비스를 통해 실행됩니다. 기능 손실 없이 이러한 작업을 사용 안함으로 설정할 수 없습니다. 하지만 성능 향상을 위해 IntervalInSeconds
매개변수를 사용하여 간격 타이머를 조정할 수 있습니다.
TranscodeOnRestoreCompleteTask
이 작업은 DIVArchive 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" />
Postgres 데이터베이스 통신 구성
이 연결 문자열은 DIVAdirector 웹 응용 프로그램의 web.config 파일에서 정의된 연결 문자열과 동일한 서버 및 자격 증명을 사용해야 합니다.
<connectionStrings> <add name="DIVADirectorContext" connectionString="Server=localhost;Database=DIVAdirector;User Id=postgres;Password=Manager;" providerName="Npgsql" /> </connectionStrings>
경고:
오라클 고객지원센터 기술자의 참석 없이는 다음과 같이 수정하지 않는 것이 좋습니다.
데이터베이스 행을 직접 수정해야만 수정할 수 있는 LocalDB에 저장된 구성 설정이 몇 가지 있습니다.
다음 트랜스코더 설정은 데이터베이스에서 직접 수정할 수 있습니다.
TranscoderSettings.Transcoder는 현재 트랜스코더 구현의 이름을 저장합니다. Vantage는 이번 릴리스에서 지원되는 유일한 트랜스코더입니다.
VantageSettings.Host는 Vantage SDK 서비스를 실행 중인 컴퓨터의 이름을 저장합니다.
VantageSettings.Port는 Vantage SDK 서비스에 사용되는 포트 번호를 저장합니다.
VantageSettings.MetadataActionDescriptions는 작업과 연관되어야 할 메타데이터 변수를 노출하는 작업에 대한 설명을 Vantage 워크플로우에 저장합니다.
Presets 테이블은 트랜스코더 구현의 내부 워크플로우 식별자에 대해 명명된 매핑을 저장합니다. Vantage의 경우 InternalId가 워크플로우 식별자입니다.
CheckStatusOnStartup 매개변수는 서비스 시작 중 확인해야 하는 필수 사전 설정을 나타내는 부울 플래그입니다. CheckStatusOnStartup이 true로 설정되고 사전 설정을 찾을 수 없는 경우 경고가 기록됩니다. CheckStatusOnStartup이 true로 설정되고 사전 설정이 발견되었지만 활성 상태가 아닌 경우 서비스는 사전 설정을 활성화하려고 시도합니다. 트랜스코드 로그 파일에는 이 검사에 대한 항목과 시도된 활성화가 포함됩니다.
Locations 테이블은 일련의 미리 정의된 출력 스토리지 위치를 저장합니다. 트랜스코드 서비스는 유효한 스토리지 위치가 있는 작업만 수락합니다. 트랜스코드 요청에 지정된 위치가 없을 경우 서비스는 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
가 됩니다.
데이터베이스 항목을 수정하여 구성되는 두 가지 REST 주요 끝점이 있습니다.
/api/transcoder
는 현재 구성된 트랜스코더 정보를 확인하는 데 사용됩니다.
/api/jobs/[
jobId
]
는 작업 진행률을 확인하고 새 작업을 제출하는 데 사용됩니다.
새 트랜스코드 작업을 만들기 위한 요청은 다음과 같습니다.
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" } ] } }
모든 작업 요약을 가져오기 위한 요청은 다음과 같습니다.
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 }]
작업 세부정보를 가져오기 위한 요청은 다음과 같습니다.
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" } ] } }