@eluvio/elv-client-js 3.1.95 → 3.1.96
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ElvClient-min.js +2 -2
- package/dist/ElvClient-node-min.js +2 -2
- package/dist/ElvFrameClient-min.js +1 -1
- package/dist/src/AuthorizationClient.js +1 -1
- package/dist/src/client/ContentAccess.js +46 -37
- package/package.json +2 -2
- package/src/AuthorizationClient.js +1 -1
- package/src/client/ContentAccess.js +4 -0
- package/utilities/ObjectSetPermission.js +4 -4
- package/utilities/SimpleIngest.js +41 -0
- package/utilities/example_files/simple_ingest_library_metadata.json +180 -0
- package/utilities/example_files/simple_ingest_library_metadata_animation_NFTs.json +133 -0
|
@@ -353,7 +353,7 @@ var AuthorizationClient = /*#__PURE__*/function () {
|
|
|
353
353
|
addr: Utils.FormatAddress(this.client.signer && this.client.signer.address || "")
|
|
354
354
|
};
|
|
355
355
|
|
|
356
|
-
if (
|
|
356
|
+
if (this.noAuth || noAuth) {
|
|
357
357
|
_context3.next = 29;
|
|
358
358
|
break;
|
|
359
359
|
}
|
|
@@ -4318,6 +4318,15 @@ exports.CreateEncryptionConk = /*#__PURE__*/function () {
|
|
|
4318
4318
|
switch (_context46.prev = _context46.next) {
|
|
4319
4319
|
case 0:
|
|
4320
4320
|
libraryId = _ref81.libraryId, objectId = _ref81.objectId, versionHash = _ref81.versionHash, writeToken = _ref81.writeToken, _ref81$createKMSConk = _ref81.createKMSConk, createKMSConk = _ref81$createKMSConk === void 0 ? true : _ref81$createKMSConk;
|
|
4321
|
+
|
|
4322
|
+
if (!this.signer.remoteSigner) {
|
|
4323
|
+
_context46.next = 3;
|
|
4324
|
+
break;
|
|
4325
|
+
}
|
|
4326
|
+
|
|
4327
|
+
return _context46.abrupt("return");
|
|
4328
|
+
|
|
4329
|
+
case 3:
|
|
4321
4330
|
ValidateParameters({
|
|
4322
4331
|
libraryId: libraryId,
|
|
4323
4332
|
objectId: objectId,
|
|
@@ -4330,21 +4339,21 @@ exports.CreateEncryptionConk = /*#__PURE__*/function () {
|
|
|
4330
4339
|
}
|
|
4331
4340
|
|
|
4332
4341
|
if (libraryId) {
|
|
4333
|
-
_context46.next =
|
|
4342
|
+
_context46.next = 10;
|
|
4334
4343
|
break;
|
|
4335
4344
|
}
|
|
4336
4345
|
|
|
4337
|
-
_context46.next =
|
|
4346
|
+
_context46.next = 9;
|
|
4338
4347
|
return this.ContentObjectLibraryId({
|
|
4339
4348
|
objectId: objectId
|
|
4340
4349
|
});
|
|
4341
4350
|
|
|
4342
|
-
case
|
|
4351
|
+
case 9:
|
|
4343
4352
|
libraryId = _context46.sent;
|
|
4344
4353
|
|
|
4345
|
-
case
|
|
4354
|
+
case 10:
|
|
4346
4355
|
capKey = "eluv.caps.iusr".concat(this.utils.AddressToHash(this.signer.address));
|
|
4347
|
-
_context46.next =
|
|
4356
|
+
_context46.next = 13;
|
|
4348
4357
|
return this.ContentObjectMetadata({
|
|
4349
4358
|
libraryId: libraryId,
|
|
4350
4359
|
objectId: objectId,
|
|
@@ -4352,40 +4361,40 @@ exports.CreateEncryptionConk = /*#__PURE__*/function () {
|
|
|
4352
4361
|
metadataSubtree: capKey
|
|
4353
4362
|
});
|
|
4354
4363
|
|
|
4355
|
-
case
|
|
4364
|
+
case 13:
|
|
4356
4365
|
existingUserCap = _context46.sent;
|
|
4357
4366
|
|
|
4358
4367
|
if (!existingUserCap) {
|
|
4359
|
-
_context46.next =
|
|
4368
|
+
_context46.next = 20;
|
|
4360
4369
|
break;
|
|
4361
4370
|
}
|
|
4362
4371
|
|
|
4363
|
-
_context46.next =
|
|
4372
|
+
_context46.next = 17;
|
|
4364
4373
|
return this.Crypto.DecryptCap(existingUserCap, this.signer.signingKey.privateKey);
|
|
4365
4374
|
|
|
4366
|
-
case
|
|
4375
|
+
case 17:
|
|
4367
4376
|
this.encryptionConks[objectId] = _context46.sent;
|
|
4368
|
-
_context46.next =
|
|
4377
|
+
_context46.next = 34;
|
|
4369
4378
|
break;
|
|
4370
4379
|
|
|
4371
|
-
case
|
|
4372
|
-
_context46.next =
|
|
4380
|
+
case 20:
|
|
4381
|
+
_context46.next = 22;
|
|
4373
4382
|
return this.Crypto.GeneratePrimaryConk({
|
|
4374
4383
|
spaceId: this.contentSpaceId,
|
|
4375
4384
|
objectId: objectId
|
|
4376
4385
|
});
|
|
4377
4386
|
|
|
4378
|
-
case
|
|
4387
|
+
case 22:
|
|
4379
4388
|
this.encryptionConks[objectId] = _context46.sent;
|
|
4380
4389
|
_context46.t0 = this;
|
|
4381
4390
|
_context46.t1 = libraryId;
|
|
4382
4391
|
_context46.t2 = objectId;
|
|
4383
4392
|
_context46.t3 = writeToken;
|
|
4384
4393
|
_context46.t4 = capKey;
|
|
4385
|
-
_context46.next =
|
|
4394
|
+
_context46.next = 30;
|
|
4386
4395
|
return this.Crypto.EncryptConk(this.encryptionConks[objectId], this.signer.signingKey.publicKey);
|
|
4387
4396
|
|
|
4388
|
-
case
|
|
4397
|
+
case 30:
|
|
4389
4398
|
_context46.t5 = _context46.sent;
|
|
4390
4399
|
_context46.t6 = {
|
|
4391
4400
|
libraryId: _context46.t1,
|
|
@@ -4394,32 +4403,32 @@ exports.CreateEncryptionConk = /*#__PURE__*/function () {
|
|
|
4394
4403
|
metadataSubtree: _context46.t4,
|
|
4395
4404
|
metadata: _context46.t5
|
|
4396
4405
|
};
|
|
4397
|
-
_context46.next =
|
|
4406
|
+
_context46.next = 34;
|
|
4398
4407
|
return _context46.t0.ReplaceMetadata.call(_context46.t0, _context46.t6);
|
|
4399
4408
|
|
|
4400
|
-
case
|
|
4409
|
+
case 34:
|
|
4401
4410
|
if (!createKMSConk) {
|
|
4402
|
-
_context46.next =
|
|
4411
|
+
_context46.next = 64;
|
|
4403
4412
|
break;
|
|
4404
4413
|
}
|
|
4405
4414
|
|
|
4406
|
-
_context46.prev =
|
|
4407
|
-
_context46.next =
|
|
4415
|
+
_context46.prev = 35;
|
|
4416
|
+
_context46.next = 38;
|
|
4408
4417
|
return this.authClient.KMSAddress({
|
|
4409
4418
|
objectId: objectId
|
|
4410
4419
|
});
|
|
4411
4420
|
|
|
4412
|
-
case
|
|
4421
|
+
case 38:
|
|
4413
4422
|
kmsAddress = _context46.sent;
|
|
4414
|
-
_context46.next =
|
|
4423
|
+
_context46.next = 41;
|
|
4415
4424
|
return this.authClient.KMSInfo({
|
|
4416
4425
|
objectId: objectId
|
|
4417
4426
|
});
|
|
4418
4427
|
|
|
4419
|
-
case
|
|
4428
|
+
case 41:
|
|
4420
4429
|
kmsPublicKey = _context46.sent.publicKey;
|
|
4421
4430
|
kmsCapKey = "eluv.caps.ikms".concat(this.utils.AddressToHash(kmsAddress));
|
|
4422
|
-
_context46.next =
|
|
4431
|
+
_context46.next = 45;
|
|
4423
4432
|
return this.ContentObjectMetadata({
|
|
4424
4433
|
libraryId: libraryId,
|
|
4425
4434
|
// Cap may only exist in draft
|
|
@@ -4428,11 +4437,11 @@ exports.CreateEncryptionConk = /*#__PURE__*/function () {
|
|
|
4428
4437
|
metadataSubtree: kmsCapKey
|
|
4429
4438
|
});
|
|
4430
4439
|
|
|
4431
|
-
case
|
|
4440
|
+
case 45:
|
|
4432
4441
|
existingKMSCap = _context46.sent;
|
|
4433
4442
|
|
|
4434
4443
|
if (existingKMSCap) {
|
|
4435
|
-
_context46.next =
|
|
4444
|
+
_context46.next = 58;
|
|
4436
4445
|
break;
|
|
4437
4446
|
}
|
|
4438
4447
|
|
|
@@ -4441,10 +4450,10 @@ exports.CreateEncryptionConk = /*#__PURE__*/function () {
|
|
|
4441
4450
|
_context46.t9 = objectId;
|
|
4442
4451
|
_context46.t10 = writeToken;
|
|
4443
4452
|
_context46.t11 = kmsCapKey;
|
|
4444
|
-
_context46.next =
|
|
4453
|
+
_context46.next = 54;
|
|
4445
4454
|
return this.Crypto.EncryptConk(this.encryptionConks[objectId], kmsPublicKey);
|
|
4446
4455
|
|
|
4447
|
-
case
|
|
4456
|
+
case 54:
|
|
4448
4457
|
_context46.t12 = _context46.sent;
|
|
4449
4458
|
_context46.t13 = {
|
|
4450
4459
|
libraryId: _context46.t8,
|
|
@@ -4453,30 +4462,30 @@ exports.CreateEncryptionConk = /*#__PURE__*/function () {
|
|
|
4453
4462
|
metadataSubtree: _context46.t11,
|
|
4454
4463
|
metadata: _context46.t12
|
|
4455
4464
|
};
|
|
4456
|
-
_context46.next =
|
|
4465
|
+
_context46.next = 58;
|
|
4457
4466
|
return _context46.t7.ReplaceMetadata.call(_context46.t7, _context46.t13);
|
|
4458
4467
|
|
|
4459
|
-
case
|
|
4460
|
-
_context46.next =
|
|
4468
|
+
case 58:
|
|
4469
|
+
_context46.next = 64;
|
|
4461
4470
|
break;
|
|
4462
4471
|
|
|
4463
|
-
case
|
|
4464
|
-
_context46.prev =
|
|
4465
|
-
_context46.t14 = _context46["catch"](
|
|
4472
|
+
case 60:
|
|
4473
|
+
_context46.prev = 60;
|
|
4474
|
+
_context46.t14 = _context46["catch"](35);
|
|
4466
4475
|
// eslint-disable-next-line no-console
|
|
4467
4476
|
console.error("Failed to create encryption cap for KMS:"); // eslint-disable-next-line no-console
|
|
4468
4477
|
|
|
4469
4478
|
console.error(_context46.t14);
|
|
4470
4479
|
|
|
4471
|
-
case
|
|
4480
|
+
case 64:
|
|
4472
4481
|
return _context46.abrupt("return", this.encryptionConks[objectId]);
|
|
4473
4482
|
|
|
4474
|
-
case
|
|
4483
|
+
case 65:
|
|
4475
4484
|
case "end":
|
|
4476
4485
|
return _context46.stop();
|
|
4477
4486
|
}
|
|
4478
4487
|
}
|
|
4479
|
-
}, _callee46, this, [[
|
|
4488
|
+
}, _callee46, this, [[35, 60]]);
|
|
4480
4489
|
}));
|
|
4481
4490
|
|
|
4482
4491
|
return function (_x45) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eluvio/elv-client-js",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.96",
|
|
4
4
|
"description": "Javascript client for the Eluvio Content Fabric",
|
|
5
5
|
"main": "src/ElvClient.js",
|
|
6
6
|
"author": "Kevin Talmadge",
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
"dependencies": {
|
|
58
58
|
"@babel/runtime": "^7.8.4",
|
|
59
59
|
"@eluvio/crypto": ">=1.0.8",
|
|
60
|
-
"@eluvio/elv-abr-profile": "^0.
|
|
60
|
+
"@eluvio/elv-abr-profile": "^1.0.0",
|
|
61
61
|
"@sindresorhus/slugify": "^1.1.0",
|
|
62
62
|
"babel-loader": "^8.0.6",
|
|
63
63
|
"bignumber.js": "^8.0.2",
|
|
@@ -204,7 +204,7 @@ class AuthorizationClient {
|
|
|
204
204
|
addr: Utils.FormatAddress(((this.client.signer && this.client.signer.address) || ""))
|
|
205
205
|
};
|
|
206
206
|
|
|
207
|
-
if(!(this.noAuth || noAuth)
|
|
207
|
+
if(!(this.noAuth || noAuth)) {
|
|
208
208
|
const { transactionHash } = await this.MakeAccessRequest({
|
|
209
209
|
libraryId,
|
|
210
210
|
objectId,
|
|
@@ -2332,6 +2332,10 @@ exports.LinkData = async function({libraryId, objectId, versionHash, writeToken,
|
|
|
2332
2332
|
/* Encryption */
|
|
2333
2333
|
|
|
2334
2334
|
exports.CreateEncryptionConk = async function({libraryId, objectId, versionHash, writeToken, createKMSConk=true}) {
|
|
2335
|
+
if(this.signer.remoteSigner) {
|
|
2336
|
+
return;
|
|
2337
|
+
}
|
|
2338
|
+
|
|
2335
2339
|
ValidateParameters({libraryId, objectId, versionHash});
|
|
2336
2340
|
ValidateWriteToken(writeToken);
|
|
2337
2341
|
|
|
@@ -9,7 +9,7 @@ const Logger = require("./lib/concerns/Logger");
|
|
|
9
9
|
|
|
10
10
|
const permissionTypes = ["owner", "editable", "viewable", "listable", "public"];
|
|
11
11
|
|
|
12
|
-
class
|
|
12
|
+
class ObjectSetPermission extends Utility {
|
|
13
13
|
blueprint() {
|
|
14
14
|
return {
|
|
15
15
|
concerns: [Logger, ArgObjectId, Client],
|
|
@@ -55,7 +55,7 @@ class ObjectAddGroupPerms extends Utility {
|
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
if(require.main === module) {
|
|
58
|
-
Utility.cmdLineInvoke(
|
|
58
|
+
Utility.cmdLineInvoke(ObjectSetPermission);
|
|
59
59
|
} else {
|
|
60
|
-
module.exports =
|
|
61
|
-
}
|
|
60
|
+
module.exports = ObjectSetPermission;
|
|
61
|
+
}
|
|
@@ -53,6 +53,10 @@ class SimpleIngest extends Utility {
|
|
|
53
53
|
const libABRProfile = R.path(["metadata", "abr", "default_profile"], libInfo);
|
|
54
54
|
if(R.isNil(libABRProfile)) throw Error("Library does not specify ABR profile for simple ingests");
|
|
55
55
|
|
|
56
|
+
const libMezManageGroups = R.path(["metadata", "abr", "mez_manage_groups"], libInfo);
|
|
57
|
+
|
|
58
|
+
const libMezPermission = R.path(["metadata", "abr", "mez_permission_level"], libInfo);
|
|
59
|
+
|
|
56
60
|
const {drm, libraryId, title} = this.args;
|
|
57
61
|
const encrypt = true;
|
|
58
62
|
|
|
@@ -91,6 +95,7 @@ class SimpleIngest extends Utility {
|
|
|
91
95
|
|
|
92
96
|
if(!R.isNil(createMasterResponse.errors) && !R.isEmpty(createMasterResponse.errors)) throw Error(`Error(s) encountered while inspecting uploaded files: ${createMasterResponse.errors.join("\n")}`);
|
|
93
97
|
|
|
98
|
+
// TODO: replace with a 'waitForNewObject' call (Finalize.waitForPublish throws exception for brand new object not yet visible)
|
|
94
99
|
await seconds(2);
|
|
95
100
|
|
|
96
101
|
await this.concerns.Finalize.waitForPublish({
|
|
@@ -218,6 +223,42 @@ class SimpleIngest extends Utility {
|
|
|
218
223
|
const finalizeErrors = finalizeAbrResponse.errors;
|
|
219
224
|
if(!R.isNil(finalizeErrors) && !R.isEmpty(finalizeErrors)) throw Error(`Error(s) encountered while finalizing object: ${finalizeErrors.join("\n")}`);
|
|
220
225
|
|
|
226
|
+
if(libMezManageGroups && libMezManageGroups.length > 0){
|
|
227
|
+
for(const groupAddress of libMezManageGroups){
|
|
228
|
+
logger.log("Setting access permissions for managers");
|
|
229
|
+
await client.AddContentObjectGroupPermission({
|
|
230
|
+
objectId: id,
|
|
231
|
+
groupAddress,
|
|
232
|
+
permission: "manage"
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
if(libMezPermission) {
|
|
239
|
+
if(!["owner", "editable", "viewable", "listable", "public"].includes(libMezPermission)) {
|
|
240
|
+
logger.warn(`Bad value for mez_permission_level: '${libMezPermission}', skipping permission setting`);
|
|
241
|
+
} else {
|
|
242
|
+
logger.log(`Setting object permission to '${libMezPermission}'`);
|
|
243
|
+
const prevHash = await client.LatestVersionHash({objectId: id});
|
|
244
|
+
|
|
245
|
+
await client.SetPermission({
|
|
246
|
+
objectId: id,
|
|
247
|
+
permission: libMezPermission
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
const newHash = await client.LatestVersionHash({objectId: id});
|
|
251
|
+
|
|
252
|
+
if(prevHash === newHash) {
|
|
253
|
+
logger.log("Version hash unchanged: " + newHash );
|
|
254
|
+
} else {
|
|
255
|
+
logger.log("Previous version hash: " + prevHash );
|
|
256
|
+
logger.log("New version hash: " + newHash );
|
|
257
|
+
}
|
|
258
|
+
logger.data("version_hash", newHash);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
|
|
221
262
|
logger.logList(
|
|
222
263
|
"",
|
|
223
264
|
"Playable media object created:",
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
{
|
|
2
|
+
"abr": {
|
|
3
|
+
"comments": [
|
|
4
|
+
"For movies/TV - snapAR is set to true, this profile will attempt to conform aspect ratio to nearby standard",
|
|
5
|
+
"also specifies 'store encrypted', offers both clear and drm playout formats"
|
|
6
|
+
],
|
|
7
|
+
"mez_content_type": "YOUR_TITLE_(MEZ)_CONTENT_TYPE_ID",
|
|
8
|
+
"mez_manage_groups": [
|
|
9
|
+
"ADDRESS_FOR_YOUR_CONTENT_ADMINS_GROUP"
|
|
10
|
+
],
|
|
11
|
+
"mez_permission_level": "ONE_OF_THE_FOLLOWING: owner, editable, viewable, listable, public",
|
|
12
|
+
"default_profile": {
|
|
13
|
+
"drm_optional": true,
|
|
14
|
+
"store_clear": false,
|
|
15
|
+
"video_parametric_ladder": {
|
|
16
|
+
"baseAspectRatio": "16/9",
|
|
17
|
+
"baseFrameRate": "30",
|
|
18
|
+
"rungSpecs": [
|
|
19
|
+
{
|
|
20
|
+
"dim": 2160,
|
|
21
|
+
"bitrate": 14000000
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"dim": 1440,
|
|
25
|
+
"bitrate": 11500000
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"dim": 1080,
|
|
29
|
+
"bitrate": 9500000
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"dim": 720,
|
|
33
|
+
"bitrate": 4500000
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"dim": 480,
|
|
37
|
+
"bitrate": 1750000
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"dim": 360,
|
|
41
|
+
"bitrate": 810000
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"dim": 240,
|
|
45
|
+
"bitrate": 500000
|
|
46
|
+
}
|
|
47
|
+
],
|
|
48
|
+
"options": {
|
|
49
|
+
"upscale": false,
|
|
50
|
+
"snapAR": true,
|
|
51
|
+
"maxARSnap": 0.06,
|
|
52
|
+
"minDimStepdown": 0.12,
|
|
53
|
+
"frameRateScaleFactor": 0.5
|
|
54
|
+
},
|
|
55
|
+
"limits": {
|
|
56
|
+
"aspectRatioMax": "3",
|
|
57
|
+
"aspectRatioMin": "1/3",
|
|
58
|
+
"avgBitrateMax": 100000000,
|
|
59
|
+
"avgBitrateMin": 100000,
|
|
60
|
+
"fileSizeMax": 100000000,
|
|
61
|
+
"fileSizeMin": 10000,
|
|
62
|
+
"durationMax": 14400,
|
|
63
|
+
"durationMin": 1,
|
|
64
|
+
"finalBitrateMax": 30000000,
|
|
65
|
+
"frameRateMax": "60",
|
|
66
|
+
"frameRateMin": "15",
|
|
67
|
+
"heightMax": 5000,
|
|
68
|
+
"heightMin": 100,
|
|
69
|
+
"sampleAspectRatioMax": "3/2",
|
|
70
|
+
"sampleAspectRatioMin": "2/3",
|
|
71
|
+
"widthMax": 5000,
|
|
72
|
+
"widthMin": 100
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
"ladder_specs": {
|
|
76
|
+
"{\"media_type\":\"audio\",\"channels\":1}": {
|
|
77
|
+
"rung_specs": [
|
|
78
|
+
{
|
|
79
|
+
"bit_rate": 128000,
|
|
80
|
+
"media_type": "audio",
|
|
81
|
+
"pregenerate": true
|
|
82
|
+
}
|
|
83
|
+
]
|
|
84
|
+
},
|
|
85
|
+
"{\"media_type\":\"audio\",\"channels\":2}": {
|
|
86
|
+
"rung_specs": [
|
|
87
|
+
{
|
|
88
|
+
"bit_rate": 192000,
|
|
89
|
+
"media_type": "audio",
|
|
90
|
+
"pregenerate": true
|
|
91
|
+
}
|
|
92
|
+
]
|
|
93
|
+
},
|
|
94
|
+
"{\"media_type\":\"audio\",\"channels\":6}": {
|
|
95
|
+
"rung_specs": [
|
|
96
|
+
{
|
|
97
|
+
"bit_rate": 384000,
|
|
98
|
+
"media_type": "audio",
|
|
99
|
+
"pregenerate": true
|
|
100
|
+
}
|
|
101
|
+
]
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
"playout_formats": {
|
|
105
|
+
"dash-widevine": {
|
|
106
|
+
"drm": {
|
|
107
|
+
"content_id": "",
|
|
108
|
+
"enc_scheme_name": "cenc",
|
|
109
|
+
"license_servers": [],
|
|
110
|
+
"type": "DrmWidevine"
|
|
111
|
+
},
|
|
112
|
+
"protocol": {
|
|
113
|
+
"min_buffer_length": 2,
|
|
114
|
+
"type": "ProtoDash"
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
"hls-aes128": {
|
|
118
|
+
"drm": {
|
|
119
|
+
"enc_scheme_name": "aes-128",
|
|
120
|
+
"type": "DrmAes128"
|
|
121
|
+
},
|
|
122
|
+
"protocol": {
|
|
123
|
+
"type": "ProtoHls"
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
"hls-fairplay": {
|
|
127
|
+
"drm": {
|
|
128
|
+
"enc_scheme_name": "cbcs",
|
|
129
|
+
"license_servers": [],
|
|
130
|
+
"type": "DrmFairplay"
|
|
131
|
+
},
|
|
132
|
+
"protocol": {
|
|
133
|
+
"type": "ProtoHls"
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
"hls-sample-aes": {
|
|
137
|
+
"drm": {
|
|
138
|
+
"enc_scheme_name": "cbcs",
|
|
139
|
+
"type": "DrmSampleAes"
|
|
140
|
+
},
|
|
141
|
+
"protocol": {
|
|
142
|
+
"type": "ProtoHls"
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
"dash-clear": {
|
|
146
|
+
"drm": null,
|
|
147
|
+
"protocol": {
|
|
148
|
+
"min_buffer_length": 2,
|
|
149
|
+
"type": "ProtoDash"
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
"hls-clear": {
|
|
153
|
+
"drm": null,
|
|
154
|
+
"protocol": {
|
|
155
|
+
"type": "ProtoHls"
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
"segment_specs": {
|
|
160
|
+
"audio": {
|
|
161
|
+
"segs_per_chunk": 15,
|
|
162
|
+
"target_dur": 2
|
|
163
|
+
},
|
|
164
|
+
"video": {
|
|
165
|
+
"segs_per_chunk": 15,
|
|
166
|
+
"target_dur": 2
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
"elv": {
|
|
172
|
+
"media": {
|
|
173
|
+
"drm": {
|
|
174
|
+
"fps": {
|
|
175
|
+
"cert": "MIIExzCCA6+gAwIBAgIIHyfkXhxLHC4wDQYJKoZIhvcNAQEFBQAwfzELMAkGA1UEBhMCVVMxEzARBgNVBAoMCkFwcGxlIEluYy4xJjAkBgNVBAsMHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTMwMQYDVQQDDCpBcHBsZSBLZXkgU2VydmljZXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMjAwOTEyMDMzMjI0WhcNMjIwOTEzMDMzMjI0WjBgMQswCQYDVQQGEwJVUzETMBEGA1UECgwKRWx1dmlvIEluYzETMBEGA1UECwwKMktIOEtDM01NWDEnMCUGA1UEAwweRmFpclBsYXkgU3RyZWFtaW5nOiBFbHV2aW8gSW5jMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDslbBURB6gj07g7VrS7Ojixe7FNZOupomcZt+mtMvyavjg7X7/T4RccmKUQxOoMLKCJcQ6WrdHhIpN8+bciq7lr0mNzaN467zREiUNYOpkVPi13sJLieY2m2MEPOQTbIl52Cu1YyH+4/g1dKPmeguSnzZRo36jsCGHlJBjHq0jkQIDAQABo4IB6DCCAeQwDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBRj5EdUy4VxWUYsg6zMRDFkZwMsvjCB4gYDVR0gBIHaMIHXMIHUBgkqhkiG92NkBQEwgcYwgcMGCCsGAQUFBwICMIG2DIGzUmVsaWFuY2Ugb24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNzdW1lcyBhY2NlcHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kgYW5kIGNlcnRpZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wNQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL2NybC5hcHBsZS5jb20va2V5c2VydmljZXMuY3JsMB0GA1UdDgQWBBR4jerseBHEUDC7mU+NQuIzZqHRFDAOBgNVHQ8BAf8EBAMCBSAwOAYLKoZIhvdjZAYNAQMBAf8EJgFuNnNkbHQ2OXFuc3l6eXp5bWFzdmdudGthbWd2bGE1Y212YzdpMC4GCyqGSIb3Y2QGDQEEAQH/BBwBd252bHhlbGV1Y3Vpb2JyZW4yeHZlZmV6N2Y5MA0GCSqGSIb3DQEBBQUAA4IBAQBM17YYquw0soDPAadr1aIM6iC6BQ/kOGYu3y/6AlrwYgAQNFy8DjsQUoqlQWFuA0sigp57bTUymkXEBf9yhUmXXiPafGjbxzsPF5SPFLIciolWbxRCB153L1a/Vh2wg3rhf4IvAZuJpnml6SSg5SjD19bN+gD7zrtp3yWKBKuarLSjDvVIB1SoxEToBs3glAEqoBiA2eZjikBA0aBlbvjUF2gqOmZjZJ7dmG1Tos2Zd4SdGL6ltSpKUeSGSxyv41aqF83vNpymNJmey2t2kPPtC7mt0LM32Ift3AkAl8Za9JbV/pOnc95oAfPhVTOGOI+u2BuB2qaKWjqHwkfqCz4A"
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
{
|
|
2
|
+
"abr": {
|
|
3
|
+
"comments": [
|
|
4
|
+
"For animation NFTs that are not movie/TV clips - snapAR is set to false",
|
|
5
|
+
"also specifies 'store clear', only offers clear playout formats (no drm)",
|
|
6
|
+
"and object permission 'listable'.",
|
|
7
|
+
"does not include DRM cert @ /elv/media/drm/fps/cert"
|
|
8
|
+
],
|
|
9
|
+
"mez_content_type": "YOUR_TITLE_(NFT)_CONTENT_TYPE_ID",
|
|
10
|
+
"mez_manage_groups": [
|
|
11
|
+
"ADDRESS_FOR_YOUR_CONTENT_ADMINS_GROUP"
|
|
12
|
+
],
|
|
13
|
+
"mez_permission_level": "listable",
|
|
14
|
+
"default_profile": {
|
|
15
|
+
"drm_optional": true,
|
|
16
|
+
"store_clear": true,
|
|
17
|
+
"video_parametric_ladder": {
|
|
18
|
+
"baseAspectRatio": "16/9",
|
|
19
|
+
"baseFrameRate": "30",
|
|
20
|
+
"rungSpecs": [
|
|
21
|
+
{
|
|
22
|
+
"dim": 2160,
|
|
23
|
+
"bitrate": 14000000
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"dim": 1440,
|
|
27
|
+
"bitrate": 11500000
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"dim": 1080,
|
|
31
|
+
"bitrate": 9500000
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"dim": 720,
|
|
35
|
+
"bitrate": 4500000
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"dim": 480,
|
|
39
|
+
"bitrate": 1750000
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"dim": 360,
|
|
43
|
+
"bitrate": 810000
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"dim": 240,
|
|
47
|
+
"bitrate": 500000
|
|
48
|
+
}
|
|
49
|
+
],
|
|
50
|
+
"options": {
|
|
51
|
+
"upscale": false,
|
|
52
|
+
"snapAR": false,
|
|
53
|
+
"maxARSnap": 0.06,
|
|
54
|
+
"minDimStepdown": 0.12,
|
|
55
|
+
"frameRateScaleFactor": 0.5
|
|
56
|
+
},
|
|
57
|
+
"limits": {
|
|
58
|
+
"aspectRatioMax": "3",
|
|
59
|
+
"aspectRatioMin": "1/3",
|
|
60
|
+
"avgBitrateMax": 100000000,
|
|
61
|
+
"avgBitrateMin": 100000,
|
|
62
|
+
"fileSizeMax": 100000000,
|
|
63
|
+
"fileSizeMin": 10000,
|
|
64
|
+
"durationMax": 14400,
|
|
65
|
+
"durationMin": 1,
|
|
66
|
+
"finalBitrateMax": 30000000,
|
|
67
|
+
"frameRateMax": "60",
|
|
68
|
+
"frameRateMin": "15",
|
|
69
|
+
"heightMax": 5000,
|
|
70
|
+
"heightMin": 100,
|
|
71
|
+
"sampleAspectRatioMax": "3/2",
|
|
72
|
+
"sampleAspectRatioMin": "2/3",
|
|
73
|
+
"widthMax": 5000,
|
|
74
|
+
"widthMin": 100
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
"ladder_specs": {
|
|
78
|
+
"{\"media_type\":\"audio\",\"channels\":1}": {
|
|
79
|
+
"rung_specs": [
|
|
80
|
+
{
|
|
81
|
+
"bit_rate": 128000,
|
|
82
|
+
"media_type": "audio",
|
|
83
|
+
"pregenerate": true
|
|
84
|
+
}
|
|
85
|
+
]
|
|
86
|
+
},
|
|
87
|
+
"{\"media_type\":\"audio\",\"channels\":2}": {
|
|
88
|
+
"rung_specs": [
|
|
89
|
+
{
|
|
90
|
+
"bit_rate": 192000,
|
|
91
|
+
"media_type": "audio",
|
|
92
|
+
"pregenerate": true
|
|
93
|
+
}
|
|
94
|
+
]
|
|
95
|
+
},
|
|
96
|
+
"{\"media_type\":\"audio\",\"channels\":6}": {
|
|
97
|
+
"rung_specs": [
|
|
98
|
+
{
|
|
99
|
+
"bit_rate": 384000,
|
|
100
|
+
"media_type": "audio",
|
|
101
|
+
"pregenerate": true
|
|
102
|
+
}
|
|
103
|
+
]
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
"playout_formats": {
|
|
107
|
+
"dash-clear": {
|
|
108
|
+
"drm": null,
|
|
109
|
+
"protocol": {
|
|
110
|
+
"min_buffer_length": 2,
|
|
111
|
+
"type": "ProtoDash"
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
"hls-clear": {
|
|
115
|
+
"drm": null,
|
|
116
|
+
"protocol": {
|
|
117
|
+
"type": "ProtoHls"
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
"segment_specs": {
|
|
122
|
+
"audio": {
|
|
123
|
+
"segs_per_chunk": 15,
|
|
124
|
+
"target_dur": 2
|
|
125
|
+
},
|
|
126
|
+
"video": {
|
|
127
|
+
"segs_per_chunk": 15,
|
|
128
|
+
"target_dur": 2
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|