Methods for ABR video creation and management
For more information on how to publish ABR content see this detailed guide
- Source:
Methods
static CreateABRMezzanine({abrProfileoptional,addlOfferingSpecsoptional,descriptionoptional,keepOtherStreamsoptional,libraryId,masterVersionHash,masterWriteTokenoptional,writeTokenoptional,metadataoptional,name,objectIdoptional,offeringKeyoptional,respLogLeveloptional,structLogLeveloptional,streamKeys,typeoptional,variantoptional}) → Object
Create (or edit) a mezzanine offering based on a given master content object version and variant key
Parameters:
Name | Type | Attributes | Default | Description |
---|---|---|---|---|
abrProfile |
Object |
<optional> |
Custom ABR profile. If not specified, the profile of the mezzanine library will be used |
|
addlOfferingSpecs |
Object |
<optional> |
Specs for additional offerings to create by patching the offering being created/edited |
|
description |
string |
<optional> |
Description for mezzanine content object |
|
keepOtherStreams |
boolean |
<optional> |
false |
If objectId is specified, whether to preserve existing streams with keys other than the ones specified in production master |
libraryId |
string |
ID of the mezzanine library |
||
masterVersionHash |
string |
The version hash of the production master content object |
||
masterWriteToken |
string |
<optional> |
The write token of the production master content object draft. |
|
writeToken |
string |
<optional> |
The write token of the mezzanine object draft. If specified, the object will not be finalized, and no extra version of the object will be created to hold "bread crumb" metadata entry /lro_draft |
|
metadata |
Object |
<optional> |
Additional metadata for mezzanine content object |
|
name |
string |
Name for mezzanine content object |
||
objectId |
string |
<optional> |
ID of existing object (if not specified, new object will be created) |
|
offeringKey |
string |
<optional> |
default |
The key of the offering to create |
respLogLevel |
"warn" | "info" | "debug" |
<optional> |
warn |
The level of logging to return in http response |
structLogLevel |
"none" | "error" | "warn" | "info" | "debug" |
<optional> |
none |
The level of logging to save to object metadata |
streamKeys |
Array.<string> |
List of stream keys from variant to include. If not supplied all streams will be included. |
||
type |
string |
<optional> |
ID or version hash of the content type for the mezzanine |
|
variant |
string |
<optional> |
default |
What variant of the master content object to use |
Example
async CreateABRMezzanine({ "libraryId": "ilib3JgZBNxZE8ZkM4jP8YUAdTnjukWV", "masterVersionHash": "hq__sknpjER8hAHks8JkJKujw1JwDHPRXodMX59FiHS6ZLxPPSQmD1tE6bpvRyTNxiez5x1LCQmEH", "type": "ABR Master", "name": "Mezzanine Test", "description": "Mezzanine Test Description", "metadata": { "test": "mezzanine" } }); { "logs": [ "2021-03-09 20:06:31 Debug: apiAbrMezzanineInit()", "2021-03-09 20:06:31 Info: Get abr.Profile from lib", "2021-03-09 20:06:31 Info: Get abr.Profile from lib metadata /abr_profile", "2021-03-09 20:06:31 Info: Get production.Master", "2021-03-09 20:06:31 Debug: getProductionVariantCtx(hq__sknpjER8hAHks8JkJKujw1JwDHPRXodMX59FiHS6ZLxPPSQmD1tE6bpvRyTNxiez5x1LCQmEH,default)", "2021-03-09 20:06:31 Debug: getting production.Master: hq__sknpjER8hAHks8JkJKujw1JwDHPRXodMX59FiHS6ZLxPPSQmD1tE6bpvRyTNxiez5x1LCQmEH", "2021-03-09 20:06:31 Debug: Get production.Variant 'default' from production.Master", "2021-03-09 20:06:31 Info: Generate abr.Offering", "2021-03-09 20:06:31 Info: Saving metadata" ], "warnings": [], "errors": [], "id": "iq__4Ym91uVyPhayTRsew3ixQ8aGDJjy", "hash": "hq__36T8woJSLJoC7TfTqsRsME3wBcTTedb21UWkFB3L9seesLG7E86CXm8e7uCP9GfrihPfFwXp9M", "write_token": "tqw__HSa7sjaqEvcqqzVzWXbKs3HYMrm2BiBqWMj228bGixxYn4ibq12Gr65QowfgLH9gYQEBDzxECpugP8g7Mp2", "type": "hq__J39WocoEB1hc19t3o1YUaZM2PAzhRvLck6NVmFFviSTRM5yvVTcJ4SJeULw3VarH6mD6xkfjaC", "qlib_id": "ilib3JgZBNxZE8ZkM4jP8YUAdTnjukWV" }
- Source:
static CreateProductionMaster({libraryId,typeoptional,name,descriptionoptional,contentTypeName,writeTokenoptional,metadataoptional,fileInfooptional,encryptoptional,copyoptional,callbackoptional,respLogLeveloptional,structLogLeveloptional,accessoptional}) → Object
Create a master media content object with the given files.
- If uploading using local files, use fileInfo parameter (see UploadFiles for format)
- If uploading from S3 bucket, use access, filePath and copy, parameters (see UploadFilesFromS3 method)
Parameters:
Name | Type | Attributes | Default | Description |
---|---|---|---|---|
libraryId |
string |
ID of the library |
||
type |
string |
<optional> |
ID or version hash of the content type for this master |
|
name |
string |
Name of the content |
||
description |
string |
<optional> |
Description of the content |
|
contentTypeName |
string |
Name of the content type to use |
||
writeToken |
string |
<optional> |
Write token of the draft. If specified, the object will not be finalized. |
|
metadata |
Object |
<optional> |
Additional metadata for the content object |
|
fileInfo |
Array.<Object> |
<optional> |
Files to upload (See UploadFiles/UploadFilesFromS3 method) |
|
encrypt |
boolean |
<optional> |
true |
(Local or copied files only) - Unless |
copy |
boolean |
<optional> |
false |
(S3) If specified, files will be copied from S3 |
callback |
function |
<optional> |
Progress callback for file upload (See UploadFiles/UploadFilesFromS3 method) |
|
respLogLevel |
"warn" | "info" | "debug" |
<optional> |
warn |
The level of logging to return in http response |
structLogLevel |
"none" | "error" | "warn" | "info" | "debug" |
<optional> |
none |
The level of logging to save to object metadata |
access |
Array.<Object> |
<optional> |
[ |
Array of cloud credentials, along with path matching regex strings - Required if any files in the masters are cloud references (currently only AWS S3 is supported)
|
Throws:
-
error - If the initialization of the master fails, error details can be found in error.body
- Type
- Object
Example
async CreateProductionMaster({ "libraryId": "ilib3JgZBNxZE8ZkM4jP8YUAdTnjukWV", "type": "Production Master", "name": "Production Master Test", "description": "Production Master Test Description", "metadata": { "test": "master" }, "fileInfo": [ { "path": "Video.mp4", "mime_type": "video/mp4", "size": 3738907, "data": "<ArrayBuffer 3738907>" } ] }); { "errors": [], "logs": [ "2021-03-09 20:06:22 Debug: avtest.initProdMaster()", "2021-03-09 20:06:22 Info: Get list of files from object", "2021-03-09 20:06:22 Info: 2 item(s) found in file list.", "2021-03-09 20:06:22 Info: Skipping '.'", "2021-03-09 20:06:22 Info: Analyzing Video.mp4", "2021-03-09 20:06:22 Debug: getAvpReqCtx filePath=Video.mp4 qhot=tqw__HSRoazbriLdH7CGobx96kWaZqkqo2Z1x9Qru5h5n1FyhfX9W6FkWjBH3EikHKUoFLLq3Jf5ZLbTL2UJjFwA key=tqw__HSRoazbriLdH7CGobx96kWaZqkqo2Z1x9Qru5h5n1FyhfX9W6FkWjBH3EikHKUoFLLq3Jf5ZLbTL2UJjFwA.txAll.Video.mp4", "2021-03-09 20:06:22 Info: Successfully generated default variant" ], "warnings": [], "id": "iq__fQhR2f757MCYQ7SNrwKh39XeSPs", "hash": "hq__sknpjER8hAHks8JkJKujw1JwDHPRXodMX59FiHS6ZLxPPSQmD1tE6bpvRyTNxiez5x1LCQmEH", "write_token": "tqw__HSRoazbriLdH7CGobx96kWaZqkqo2Z1x9Qru5h5n1FyhfX9W6FkWjBH3EikHKUoFLLq3Jf5ZLbTL2UJjFwA", "type": "hq__AsSK6q2Jh8vetffArMHiyMhEgQD4fyni1g5PgeBSPcKERMJv5hbuyAd3aNQTaeJD9ounyKTUEu", "qlib_id": "ilib3JgZBNxZE8ZkM4jP8YUAdTnjukWV" }
- Source:
static FinalizeABRMezzanine({libraryId,objectId,writeTokenoptional,preFinalizeFnoptional,preFinalizeThrowoptional}) → Promise.<Object>
Process completed mezzanine transcoding LRO(s), creating the final offering(s) from the transcode(s) Unless a writeToken is passed in, finalize the mez object working draft as well.
If a writeToken is not passed in, then it will be retrieved from /lro_draft of most recent version of object. This is a "bread crumb" entry that gets created by StartABRMezzanineJobs() - unless a writeToken was passed in to StartABRMezzanineJobs() also.
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
libraryId |
string |
ID of the mezzanine library |
|
objectId |
string |
ID of the mezzanine object |
|
writeToken |
string |
<optional> |
Write token for the mezzanine object. If specified, the object will not be finalized. |
preFinalizeFn |
function |
<optional> |
A function to call before finalizing changes, to allow further modifications to offering. The function will be invoked with {elvClient, nodeUrl, writeToken} to allow access to the draft and MUST NOT finalize the draft. |
preFinalizeThrow |
boolean |
<optional> |
If set to |
Example
async FinalizeABRMezzanine({ "libraryId": "ilib3JgZBNxZE8ZkM4jP8YUAdTnjukWV", "objectId": "iq__4Ym91uVyPhayTRsew3ixQ8aGDJjy", }); { "logs": [ "2021-03-09 20:07:22 Debug: getProductionVariantCtx(hq__sknpjER8hAHks8JkJKujw1JwDHPRXodMX59FiHS6ZLxPPSQmD1tE6bpvRyTNxiez5x1LCQmEH,default)", "2021-03-09 20:07:22 Debug: getting production.Master: hq__sknpjER8hAHks8JkJKujw1JwDHPRXodMX59FiHS6ZLxPPSQmD1tE6bpvRyTNxiez5x1LCQmEH", "2021-03-09 20:07:22 Debug: Get production.Variant 'default' from production.Master" ], "warnings": [], "errors": [], "id": "iq__4Ym91uVyPhayTRsew3ixQ8aGDJjy", "hash": "hq__AXQrQWT8v1Xe784ciwaFJoXphaeoXHJzsG3JY8NHTsXZcZ18jqx6dPfqT8268c8Aoq5VnsmC3", "write_token": "tqw__HSa7sjaqEvcqqzVzWXbKs3HYMrm2BiBqWMj228bGixxYn4ibq12Gr65QowfgLNBUX6qWhcPxkCyMnoAaHpW", "type": "hq__J39WocoEB1hc19t3o1YUaZM2PAzhRvLck6NVmFFviSTRM5yvVTcJ4SJeULw3VarH6mD6xkfjaC", "qlib_id": "ilib3JgZBNxZE8ZkM4jP8YUAdTnjukWV" }
- Source:
static LRODraftInfo({libraryId,objectId}) → Promise.<Object>
Retrieve node and write token for a mezzanine's current offering preparation job (if any). Also returns the offering key.
This information is contained in metadata at /lro_draft, in an extra version of the object that gets created and finalized as part of creating a mezzanine. This serves as a "bread crumb trail" to allow users to find the active draft/write token that the ingest LROs are writing to.
Parameters:
Name | Type | Description |
---|---|---|
libraryId |
string |
ID of the library |
objectId |
string |
ID of the object |
Example
async LRODraftInfo({ "libraryId": "ilib3JgZBNxZE8ZkM4jP8YUAdTnjukWV", "objectId": "iq__4Ym91uVyPhayTRsew3ixQ8aGDJjy" }); { "node": "https://host-76-74-28-234.contentfabric.io/", "offering": "default", "write_token": "tqw__HSR7Au7qqAZpAQWf8MKdCHpTvBor5fSRU49m1sjhgZd2w4fgHUoQNpKGkmAic9NpayTkJzwkeZeFVn94Fpa" }
- Source:
static LROStatus({libraryId,objectId,writeTokenoptional}) → Promise.<Object>
Retrieve status information for mezzanine transcoding jobs, aka long running operations (LROs) on the given object. If a write token is passed in, its draft will be checked directly by lookiing at /lro_status. If a write token is not passed in, then the latest version of objectId will be checked for "bread crumb" entry at /lro_draft, to determine the write token that current ingest LRO(s) are writing to.
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
libraryId |
string |
ID of the library |
|
objectId |
string |
ID of the object |
|
writeToken |
string |
<optional> |
Write token of the active draft (that the transcode LROs are writing to) |
Examples
async LROStatus({ "libraryId": "ilib3JgZBNxZE8ZkM4jP8YUAdTnjukWV", "objectId": "iq__4Ym91uVyPhayTRsew3ixQ8aGDJjy" }); { "tlro1EjchYzPaMx7VJV3JM8EmxaSfnyK4UDUoqAqs5QZSgrfL1gtU9o1Q4": { "desc": "stream: video, offering: default, variant: default, masterHash: hq__HC7mRr9J39eVmsoSRkfDC8k4g7oGpKpgWDKGYHnwZC78zzcPDSsNz362Hm9qgw8M87h9uLpvTK", "duration": 0, "duration_ms": 0, "key": "video.default.xcVideo.Meridian-video-1080p-audio-English-stereo.mp4.tqw__HSXggshfz4Y9TSCrcfdxmYUAZ2zCAXWXj3Epe13k8eiP7tGRQphN856Y1Aheyikuz3WQJcV4rP79q8t6qm6", "name": "MEZMAKER VIDEO (stream key: video)", "progress": { "percentage": 0 }, "run_state": "running", "start": "2023-02-15T02:39:31Z" }, "tlro1EjchYzPaMx7VJV3JM8EmxaSfnyK4UDUsWHgxwgCLp8gtYPKdMLnN5": { "desc": "stream: audio, offering: default, variant: default, masterHash: hq__HC7mRr9J39eVmsoSRkfDC8k4g7oGpKpgWDKGYHnwZC78zzcPDSsNz362Hm9qgw8M87h9uLpvTK", "duration": 0, "duration_ms": 0, "key": "audio.default.xcAudio.Meridian-video-1080p-audio-English-stereo.mp4.tqw__HSXggshfz4Y9TSCrcfdxmYUAZ2zCAXWXj3Epe13k8eiP7tGRQphN856Y1Aheyikuz3WQJcV4rP79q8t6qm6", "name": "MEZMAKER AUDIO (stream key: audio)", "progress": { "percentage": 0 }, "run_state": "running", "start": "2023-02-15T02:39:31Z" } }
async LROStatus({ "libraryId": "ilib3JgZBNxZE8ZkM4jP8YUAdTnjukWV", "objectId": "iq__4Ym91uVyPhayTRsew3ixQ8aGDJjy" }); { "tlro1EjchYzPaMx7VJV3JM8EmxaSfnyK4UDUoqAqs5QZSgrfL1gtU9o1Q4": { "desc": "stream: video, offering: default, variant: default, masterHash: hq__HC7mRr9J39eVmsoSRkfDC8k4g7oGpKpgWDKGYHnwZC78zzcPDSsNz362Hm9qgw8M87h9uLpvTK", "duration": 291813000000, "duration_ms": 291813, "key": "video.default.xcVideo.Meridian-video-1080p-audio-English-stereo.mp4.tqw__HSXggshfz4Y9TSCrcfdxmYUAZ2zCAXWXj3Epe13k8eiP7tGRQphN856Y1Aheyikuz3WQJcV4rP79q8t6qm6", "name": "MEZMAKER VIDEO (stream key: video)", "progress": { "percentage": 41.66666666666667 }, "run_state": "running", "start": "2023-02-15T02:39:31Z" }, "tlro1EjchYzPaMx7VJV3JM8EmxaSfnyK4UDUsWHgxwgCLp8gtYPKdMLnN5": { "desc": "stream: audio, offering: default, variant: default, masterHash: hq__HC7mRr9J39eVmsoSRkfDC8k4g7oGpKpgWDKGYHnwZC78zzcPDSsNz362Hm9qgw8M87h9uLpvTK", "duration": 292498000000, "duration_ms": 292498, "key": "audio.default.xcAudio.Meridian-video-1080p-audio-English-stereo.mp4.tqw__HSXggshfz4Y9TSCrcfdxmYUAZ2zCAXWXj3Epe13k8eiP7tGRQphN856Y1Aheyikuz3WQJcV4rP79q8t6qm6", "name": "MEZMAKER AUDIO (stream key: audio)", "progress": { "percentage": 41.66666666666667 }, "run_state": "running", "start": "2023-02-15T02:39:31Z" } }
async LROStatus({ "libraryId": "ilib3JgZBNxZE8ZkM4jP8YUAdTnjukWV", "objectId": "iq__4Ym91uVyPhayTRsew3ixQ8aGDJjy" }); { "tlro1EjchYzPaMx7VJV3JM8EmxaSfnyK4UDUoqAqs5QZSgrfL1gtU9o1Q4": { "desc": "stream: video, offering: default, variant: default, masterHash: hq__HC7mRr9J39eVmsoSRkfDC8k4g7oGpKpgWDKGYHnwZC78zzcPDSsNz362Hm9qgw8M87h9uLpvTK", "duration": 554273000000, "duration_ms": 554273, "end": "2023-02-15T02:48:45Z", "key": "video.default.xcVideo.Meridian-video-1080p-audio-English-stereo.mp4.tqw__HSXggshfz4Y9TSCrcfdxmYUAZ2zCAXWXj3Epe13k8eiP7tGRQphN856Y1Aheyikuz3WQJcV4rP79q8t6qm6", "name": "MEZMAKER VIDEO (stream key: video)", "progress": { "percentage": 100 }, "run_state": "finished", "start": "2023-02-15T02:39:31Z" }, "tlro1EjchYzPaMx7VJV3JM8EmxaSfnyK4UDUsWHgxwgCLp8gtYPKdMLnN5": { "desc": "stream: audio, offering: default, variant: default, masterHash: hq__HC7mRr9J39eVmsoSRkfDC8k4g7oGpKpgWDKGYHnwZC78zzcPDSsNz362Hm9qgw8M87h9uLpvTK", "duration": 550089000000, "duration_ms": 550089, "end": "2023-02-15T02:48:41Z", "key": "audio.default.xcAudio.Meridian-video-1080p-audio-English-stereo.mp4.tqw__HSXggshfz4Y9TSCrcfdxmYUAZ2zCAXWXj3Epe13k8eiP7tGRQphN856Y1Aheyikuz3WQJcV4rP79q8t6qm6", "name": "MEZMAKER AUDIO (stream key: audio)", "progress": { "percentage": 100 }, "run_state": "finished", "start": "2023-02-15T02:39:31Z" } }
- Source:
static StartABRMezzanineJobs({libraryId,objectId,writeTokenoptional,accessoptional,jobIndexes}) → Promise.<Object>
Start transcoding jobs previously set up by CreateABRMezzanine() on the specified mezzanine
Parameters:
Name | Type | Attributes | Description |
---|---|---|---|
libraryId |
string |
ID of the mezzanine library |
|
objectId |
string |
ID of the mezzanine object |
|
writeToken |
string |
<optional> |
Write token of the mezzanine object draft. If provided, no "bread crumb" metadata /lro_draft will be created, nor saved as an extra finalized version |
access |
Array.<Object> |
<optional> |
Array of S3 credentials, along with path matching regexes - Required if any files in the masters are S3 references (See CreateProductionMaster method)
|
jobIndexes |
Array.<number> |
Array of LRO job indexes to start. LROs are listed in a map under metadata key /abr_mezzanine/offerings/(offeringKey)/mez_prep_specs/, and job indexes start with 0, corresponding to map keys in alphabetical order |
Example
async StartABRMezzanineJobs({ "libraryId": "ilib3JgZBNxZE8ZkM4jP8YUAdTnjukWV", "objectId": "iq__4Ym91uVyPhayTRsew3ixQ8aGDJjy", }); { "lro_draft": { "write_token": "tqw__HSa7sjaqEvcqqzVzWXbKs3HYMrm2BiBqWMj228bGixxYn4ibq12Gr65QowfgLNBUX6qWhcPxkCyMnoAaHpW", "node": "https://host-34-105-49-255.testv2.contentfabric.io/", "offering": "default" }, "writeToken": "tqw__HSa7sjaqEvcqqzVzWXbKs3HYMrm2BiBqWMj228bGixxYn4ibq12Gr65QowfgLNBUX6qWhcPxkCyMnoAaHpW", "data": [ "c056f89b-53f3-4aac-8b83-bd996cd37baf", "9ea07c9c-6f8a-41a0-b721-8fd7d72d82c8" ], "logs": [ "2021-03-09 20:06:39 Debug: getAvpReqCtx filePath=Video.mp4 qhot=hq__sknpjER8hAHks8JkJKujw1JwDHPRXodMX59FiHS6ZLxPPSQmD1tE6bpvRyTNxiez5x1LCQmEH key=hq__sknpjER8hAHks8JkJKujw1JwDHPRXodMX59FiHS6ZLxPPSQmD1tE6bpvRyTNxiez5x1LCQmEH.txAudio.Video.mp4", "2021-03-09 20:06:39 Debug: getAvpReqCtx filePath=Video.mp4 qhot=hq__sknpjER8hAHks8JkJKujw1JwDHPRXodMX59FiHS6ZLxPPSQmD1tE6bpvRyTNxiez5x1LCQmEH key=hq__sknpjER8hAHks8JkJKujw1JwDHPRXodMX59FiHS6ZLxPPSQmD1tE6bpvRyTNxiez5x1LCQmEH.txVideo.Video.mp4" ], "node": "https://host-34-105-49-255.testv2.contentfabric.io/", "warnings": [], "errors": [] }
- Source: