Advanced Ingest

Command line utility tools (node.js)

This is the most common way to ingest media in batch and customize ingest to fit the specifics of your media sources.

The Media Ingest Guide describes this process here: Your First Ingest

A reference of the media ingest utilities is available here: elv-utils-js Utilities

Application Integration

Commonly the content fabric backs specific applications which have their own user experience for media ingest.

For applications that already have an ‘asynchronous’ workflow-based user experience, use media ingest APIs directly.

For applications with simple UI controls and no asynchronous workflow capabilties, use the automation engine API, Eluvio O.

Content Fabric API or JavaScript SDK

To embed the media ingest process into your own application you can start with the Content Fabric JavaScript SDK or use the REST/HTTP API directly.

The JavaScript elv-client-js API for media ingest implements basic ingest functionality and consists of the following steps:

  • CreateProductionMaster - create and set up the ‘production master’ object
  • CreateABRMezzanine - create and set up the ‘playable mezzanine’ - this can be the same object as the ‘production master’ or a separate object
  • StartABRMezzanineJobs - launch the media encoding ’long running operations’ (LRO)
  • LROStatus - return the status of the ’long running operations’ (LRO)
  • FinalizeABRMezzanine - commit the newly created mezzanine object

API reference: https://eluv-io.github.io/elv-client-js/module-ElvClient_ABRPublishing.html

Simple ingest sample: https://github.com/eluv-io/elv-client-js/blob/develop/utilities/SimpleIngest.js

Media Workflow Tools (Eluvio O)

When ingesting a large pre-existing media library or including the ingest process into an existing application flow, chose the Eluvio Media Workflow tool:

Considerations:

  • avoids an operator having to enter potentially thousands of records through a form
  • reduces the likelihood of mistakes
  • generally a ‘one time’ project, complete once the media archive is ingested

General deployment considerations:

  • an automation engine, deployed on a private system (no public Internet access required)

  • a custom adaptor, created to convert existing library metadata into the necessary ingest ‘spec’

Example Video Ingest Using Eluvio O

See this API reference to complement the below: Create Mezzanine

For a video with a single audio track:

  1. Create a content object (this will become the ‘production master’) and upload the source file.

Using the elv command line tool, create a new object in the library specified (the ‘Title Masters’ library in this case) and upload the file to it.

elv files upload ./MEDIA/TEST/Meridian-video-1080p-audio-English-stereo.mp4 --library ilib2DWQzgHL2FZRXHEqKBNrzVExH2nR --finalize

The command returns the content ID of the newly created object (qid) as well as its version hash (qhash).

{
  "qid": "iq__4Pv172u4JrUvji1qMeiBu9spY17g",
  "qlib_id": "ilib2DWQzgHL2FZRXHEqKBNrzVExH2nR",
  "write_token": null,
  "qhash": "hq__Bx5qrXMX481FHj3dxUySaNibpVpbU6YtpentCAVSH1phmQ2zEtmFBV27d2bas4hyD614S7C3DL",
  "dest_path": "/",
  ...
}

If elv-o does not have access, ensure that the key in use is part of the Content Admins Access Group and that the group has Manage permissions for the object.

  1. Prepare the job parameters.

Copy the content ID of the newly created object (iq__4Pv172u4JrUvji1qMeiBu9spY17g) and create the job parameters for the ‘create_mezz’ workflow.

API reference: Create Mezzanine

  1. Submit the job.
curl  https://dev.o.svc.eluv.io/queue_job/create_mezz -d @o-job-simple.json -H "api-key: $KEY"

The response will include the job_reference ID which will be used for retrieving the status.

{
  "queue_id": "low_priority",
  "job_reference": "job_1676940424694",
  "queued": true
}
  1. Check the job status
curl https://dev.o.svc.eluv.io/job_status -d '{"job_reference":"job_1676940424694"}' -H "api-key: $KEY"

If the job is still in progress, status is ongoing. When the job is complete, the status becomes complete.

{
  "job_id": "j_1676940427014_create_mezz_0xdbf363c68e5f910cf4bfc8e45500a8ef7c2d89d2be01f8b39550677d76fb2212",
  "status": "ongoing",
  "status_code": 10,
}

For a video with multiple audio tracks, use the same process as the simple job above, with only one difference: add the variant JSON key specifying a list of the additional streams to be included in the mezzanine.