@amazon/vinyl 3.2.3-next.20261001224604 → 3.2.3-next.20261010160052
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/index.cjs +199 -23
- package/dist/index.cjs.map +4 -4
- package/dist/index.js +222 -44
- package/dist/index.js.map +4 -4
- package/dist/test/integ.es5.js +194 -187
- package/dist/test/integ.js +1092 -256
- package/dist/test/integ.js.map +4 -4
- package/dist/types/current/drm/DrmController.d.ts +20 -0
- package/dist/types/current/drm/DrmController.d.ts.map +1 -1
- package/dist/types/current/drm/DrmControllerImpl.d.ts.map +1 -1
- package/dist/types/current/drm/DrmControllerImpl.js +81 -16
- package/dist/types/current/drm/DrmKeySystem.d.ts +22 -2
- package/dist/types/current/drm/DrmKeySystem.d.ts.map +1 -1
- package/dist/types/current/drm/DrmKeySystem.js +22 -1
- package/dist/types/current/drm/DrmOptions.d.ts +24 -1
- package/dist/types/current/drm/DrmOptions.d.ts.map +1 -1
- package/dist/types/current/drm/DrmOptions.js +2 -1
- package/dist/types/current/drm/commonEme/CommonEme.d.ts +28 -0
- package/dist/types/current/drm/commonEme/CommonEme.d.ts.map +1 -1
- package/dist/types/current/drm/commonEme/CommonEmeFactory.d.ts +18 -4
- package/dist/types/current/drm/commonEme/CommonEmeFactory.d.ts.map +1 -1
- package/dist/types/current/drm/commonEme/CommonEmeFactory.js +13 -6
- package/dist/types/current/drm/commonEme/MsCommonEme.d.ts +1 -0
- package/dist/types/current/drm/commonEme/MsCommonEme.d.ts.map +1 -1
- package/dist/types/current/drm/commonEme/MsCommonEme.js +14 -0
- package/dist/types/current/drm/commonEme/StandardCommonEme.d.ts +1 -0
- package/dist/types/current/drm/commonEme/StandardCommonEme.d.ts.map +1 -1
- package/dist/types/current/drm/commonEme/StandardCommonEme.js +22 -0
- package/dist/types/current/drm/commonEme/WebKitCommonEme.d.ts +1 -0
- package/dist/types/current/drm/commonEme/WebKitCommonEme.d.ts.map +1 -1
- package/dist/types/current/drm/commonEme/WebKitCommonEme.js +14 -0
- package/dist/types/current/drm/dom/MSMediaKeys.d.ts +1 -0
- package/dist/types/current/drm/dom/MSMediaKeys.d.ts.map +1 -1
- package/dist/types/current/drm/dom/WebKitMediaKeys.d.ts +1 -0
- package/dist/types/current/drm/dom/WebKitMediaKeys.d.ts.map +1 -1
- package/dist/types/current/index.d.ts +1 -0
- package/dist/types/current/index.d.ts.map +1 -1
- package/dist/types/current/index.js +1 -0
- package/dist/types/current/streaming/MediaQualityMetadata.d.ts +6 -0
- package/dist/types/current/streaming/MediaQualityMetadata.d.ts.map +1 -1
- package/dist/types/current/streaming/MediaQualityMetadata.js +1 -0
- package/dist/types/current/track/hls/buildHlsMediaTimeline.d.ts +2 -1
- package/dist/types/current/track/hls/buildHlsMediaTimeline.d.ts.map +1 -1
- package/dist/types/current/track/hls/buildHlsMediaTimeline.js +5 -1
- package/dist/types/current/track/hls/util/hlsKeyDrmInfo.d.ts +33 -0
- package/dist/types/current/track/hls/util/hlsKeyDrmInfo.d.ts.map +1 -0
- package/dist/types/current/track/hls/util/hlsKeyDrmInfo.js +78 -0
- package/dist/types/current/tsconfig.tsbuildinfo +1 -1
- package/dist/types/current/vinyl/VinylPlayer.d.ts +2 -1
- package/dist/types/current/vinyl/VinylPlayer.d.ts.map +1 -1
- package/dist/types/current/vinyl/VinylPlayer.js +4 -1
- package/dist/types/current/vinyl/createVinylFactories.d.ts +1 -2
- package/dist/types/current/vinyl/createVinylFactories.d.ts.map +1 -1
- package/dist/types/current/vinyl/createVinylFactories.js +3 -1
- package/dist/types/ts3.7/drm/DrmController.d.ts +20 -0
- package/dist/types/ts3.7/drm/DrmKeySystem.d.ts +22 -2
- package/dist/types/ts3.7/drm/DrmOptions.d.ts +24 -1
- package/dist/types/ts3.7/drm/commonEme/CommonEme.d.ts +28 -0
- package/dist/types/ts3.7/drm/commonEme/CommonEmeFactory.d.ts +18 -4
- package/dist/types/ts3.7/drm/commonEme/MsCommonEme.d.ts +1 -0
- package/dist/types/ts3.7/drm/commonEme/StandardCommonEme.d.ts +1 -0
- package/dist/types/ts3.7/drm/commonEme/WebKitCommonEme.d.ts +1 -0
- package/dist/types/ts3.7/drm/dom/MSMediaKeys.d.ts +1 -0
- package/dist/types/ts3.7/drm/dom/WebKitMediaKeys.d.ts +1 -0
- package/dist/types/ts3.7/index.d.ts +1 -0
- package/dist/types/ts3.7/streaming/MediaQualityMetadata.d.ts +6 -0
- package/dist/types/ts3.7/track/hls/buildHlsMediaTimeline.d.ts +2 -1
- package/dist/types/ts3.7/track/hls/util/hlsKeyDrmInfo.d.ts +33 -0
- package/dist/types/ts3.7/vinyl/VinylPlayer.d.ts +2 -1
- package/dist/types/ts3.7/vinyl/createVinylFactories.d.ts +1 -2
- package/dist/types/ts4.1/drm/DrmController.d.ts +20 -0
- package/dist/types/ts4.1/drm/DrmKeySystem.d.ts +22 -2
- package/dist/types/ts4.1/drm/DrmOptions.d.ts +24 -1
- package/dist/types/ts4.1/drm/commonEme/CommonEme.d.ts +28 -0
- package/dist/types/ts4.1/drm/commonEme/CommonEmeFactory.d.ts +18 -4
- package/dist/types/ts4.1/drm/commonEme/MsCommonEme.d.ts +1 -0
- package/dist/types/ts4.1/drm/commonEme/StandardCommonEme.d.ts +1 -0
- package/dist/types/ts4.1/drm/commonEme/WebKitCommonEme.d.ts +1 -0
- package/dist/types/ts4.1/drm/dom/MSMediaKeys.d.ts +1 -0
- package/dist/types/ts4.1/drm/dom/WebKitMediaKeys.d.ts +1 -0
- package/dist/types/ts4.1/index.d.ts +1 -0
- package/dist/types/ts4.1/streaming/MediaQualityMetadata.d.ts +6 -0
- package/dist/types/ts4.1/track/hls/buildHlsMediaTimeline.d.ts +2 -1
- package/dist/types/ts4.1/track/hls/util/hlsKeyDrmInfo.d.ts +33 -0
- package/dist/types/ts4.1/vinyl/VinylPlayer.d.ts +2 -1
- package/dist/types/ts4.1/vinyl/createVinylFactories.d.ts +1 -2
- package/dist/types/ts4.7/drm/DrmController.d.ts +20 -0
- package/dist/types/ts4.7/drm/DrmKeySystem.d.ts +22 -2
- package/dist/types/ts4.7/drm/DrmOptions.d.ts +24 -1
- package/dist/types/ts4.7/drm/commonEme/CommonEme.d.ts +28 -0
- package/dist/types/ts4.7/drm/commonEme/CommonEmeFactory.d.ts +18 -4
- package/dist/types/ts4.7/drm/commonEme/MsCommonEme.d.ts +1 -0
- package/dist/types/ts4.7/drm/commonEme/StandardCommonEme.d.ts +1 -0
- package/dist/types/ts4.7/drm/commonEme/WebKitCommonEme.d.ts +1 -0
- package/dist/types/ts4.7/drm/dom/MSMediaKeys.d.ts +1 -0
- package/dist/types/ts4.7/drm/dom/WebKitMediaKeys.d.ts +1 -0
- package/dist/types/ts4.7/index.d.ts +1 -0
- package/dist/types/ts4.7/streaming/MediaQualityMetadata.d.ts +6 -0
- package/dist/types/ts4.7/track/hls/buildHlsMediaTimeline.d.ts +2 -1
- package/dist/types/ts4.7/track/hls/util/hlsKeyDrmInfo.d.ts +33 -0
- package/dist/types/ts4.7/vinyl/VinylPlayer.d.ts +2 -1
- package/dist/types/ts4.7/vinyl/createVinylFactories.d.ts +1 -2
- package/dist/unit/types/current/drm/CommonEmeFactory.test.js +92 -56
- package/dist/unit/types/current/drm/DrmControllerImpl.test.js +183 -1
- package/dist/unit/types/current/drm/DrmKeySystem.test.js +1 -0
- package/dist/unit/types/current/drm/DrmKeySystemResolver.test.js +5 -1
- package/dist/unit/types/current/drm/DrmOptions.test.d.ts +2 -0
- package/dist/unit/types/current/drm/DrmOptions.test.d.ts.map +1 -0
- package/dist/unit/types/current/drm/DrmOptions.test.js +23 -0
- package/dist/unit/types/current/drm/commonEme/MsCommonEme.test.js +21 -0
- package/dist/unit/types/current/drm/commonEme/StandardCommonEme.test.js +32 -0
- package/dist/unit/types/current/drm/commonEme/WebKitCommonEme.test.js +21 -0
- package/dist/unit/types/current/index.d.ts +2 -0
- package/dist/unit/types/current/index.d.ts.map +1 -1
- package/dist/unit/types/current/index.js +2 -0
- package/dist/unit/types/current/track/hls/buildHlsMediaTimeline.test.js +48 -1
- package/dist/unit/types/current/track/hls/util/hlsKeyDrmInfo.test.d.ts +2 -0
- package/dist/unit/types/current/track/hls/util/hlsKeyDrmInfo.test.d.ts.map +1 -0
- package/dist/unit/types/current/track/hls/util/hlsKeyDrmInfo.test.js +89 -0
- package/dist/unit/types/current/tsconfig.tsbuildinfo +1 -1
- package/dist/unit/types/current/vinyl/VinylPlayer.test.js +18 -1
- package/dist/unit/types/current/vinyl/createVinylFactories.test.js +29 -1
- package/dist/vinylTestUtil/types/current/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -10
package/dist/index.cjs
CHANGED
|
@@ -245,6 +245,7 @@ __export(index_exports, {
|
|
|
245
245
|
getSegmentTemplate: () => getSegmentTemplate,
|
|
246
246
|
getSourceBufferQuota: () => getSourceBufferQuota,
|
|
247
247
|
hlsByteRangeToMediaRange: () => hlsByteRangeToMediaRange,
|
|
248
|
+
hlsKeyDrmInfo: () => hlsKeyDrmInfo,
|
|
248
249
|
immediatePrefetchPriority: () => immediatePrefetchPriority,
|
|
249
250
|
inferTrackTypeFromUrl: () => inferTrackTypeFromUrl,
|
|
250
251
|
inferTrackTypeFromUrlPath: () => inferTrackTypeFromUrlPath,
|
|
@@ -1579,8 +1580,21 @@ var MsCommonMediaKeySession = class extends import_vinyl_util13.EventHostImpl {
|
|
|
1579
1580
|
this.dispatch("error", { error, target: this });
|
|
1580
1581
|
}
|
|
1581
1582
|
});
|
|
1583
|
+
// Prefixed EME reports no key ids or statuses; a key was added for the
|
|
1584
|
+
// session's init data.
|
|
1585
|
+
__publicField(this, "keyAddedHandler", () => {
|
|
1586
|
+
this.dispatch("keyStatusesChange", {
|
|
1587
|
+
keyStatuses: [
|
|
1588
|
+
{
|
|
1589
|
+
keyId: (0, import_vinyl_util13.bufferToByteArray)(this.initData).slice().buffer,
|
|
1590
|
+
status: "usable"
|
|
1591
|
+
}
|
|
1592
|
+
]
|
|
1593
|
+
});
|
|
1594
|
+
});
|
|
1582
1595
|
session.addEventListener("mskeymessage", this.messageHandler);
|
|
1583
1596
|
session.addEventListener("mskeyerror", this.errorHandler);
|
|
1597
|
+
session.addEventListener("mskeyadded", this.keyAddedHandler);
|
|
1584
1598
|
}
|
|
1585
1599
|
update(key) {
|
|
1586
1600
|
if (this.disposed) return Promise.reject(new import_vinyl_util13.DisposedError());
|
|
@@ -1596,6 +1610,7 @@ var MsCommonMediaKeySession = class extends import_vinyl_util13.EventHostImpl {
|
|
|
1596
1610
|
this.session.close();
|
|
1597
1611
|
this.session.removeEventListener("mskeymessage", this.messageHandler);
|
|
1598
1612
|
this.session.removeEventListener("mskeyerror", this.errorHandler);
|
|
1613
|
+
this.session.removeEventListener("mskeyadded", this.keyAddedHandler);
|
|
1599
1614
|
}
|
|
1600
1615
|
};
|
|
1601
1616
|
function msErrorCodeToStr(code) {
|
|
@@ -1679,6 +1694,10 @@ var StandardCommonMediaKeys = class {
|
|
|
1679
1694
|
);
|
|
1680
1695
|
}
|
|
1681
1696
|
};
|
|
1697
|
+
function copyKeyId(keyId) {
|
|
1698
|
+
const bytes = keyId instanceof ArrayBuffer ? new Uint8Array(keyId) : new Uint8Array(keyId.buffer, keyId.byteOffset, keyId.byteLength);
|
|
1699
|
+
return bytes.slice().buffer;
|
|
1700
|
+
}
|
|
1682
1701
|
var StandardCommonMediaKeySession = class extends import_vinyl_util15.EventHostImpl {
|
|
1683
1702
|
constructor(session, mimeType, initDataType, initData) {
|
|
1684
1703
|
super();
|
|
@@ -1692,7 +1711,21 @@ var StandardCommonMediaKeySession = class extends import_vinyl_util15.EventHostI
|
|
|
1692
1711
|
message: event.message
|
|
1693
1712
|
});
|
|
1694
1713
|
});
|
|
1714
|
+
__publicField(this, "keyStatusesChangeHandler", () => {
|
|
1715
|
+
const keyStatuses = [];
|
|
1716
|
+
this.session.keyStatuses.forEach((status, keyId) => {
|
|
1717
|
+
keyStatuses.push({
|
|
1718
|
+
keyId: copyKeyId(keyId),
|
|
1719
|
+
status
|
|
1720
|
+
});
|
|
1721
|
+
});
|
|
1722
|
+
this.dispatch("keyStatusesChange", { keyStatuses });
|
|
1723
|
+
});
|
|
1695
1724
|
session.addEventListener("message", this.messageHandler);
|
|
1725
|
+
session.addEventListener(
|
|
1726
|
+
"keystatuseschange",
|
|
1727
|
+
this.keyStatusesChangeHandler
|
|
1728
|
+
);
|
|
1696
1729
|
if (session.closed) {
|
|
1697
1730
|
session.closed.then((reason) => {
|
|
1698
1731
|
this.dispatch("closed", {
|
|
@@ -1724,6 +1757,10 @@ var StandardCommonMediaKeySession = class extends import_vinyl_util15.EventHostI
|
|
|
1724
1757
|
super.dispose();
|
|
1725
1758
|
this._disposed = true;
|
|
1726
1759
|
this.session.removeEventListener("message", this.messageHandler);
|
|
1760
|
+
this.session.removeEventListener(
|
|
1761
|
+
"keystatuseschange",
|
|
1762
|
+
this.keyStatusesChangeHandler
|
|
1763
|
+
);
|
|
1727
1764
|
this.session.close().catch(import_vinyl_util15.noop);
|
|
1728
1765
|
}
|
|
1729
1766
|
};
|
|
@@ -1835,8 +1872,21 @@ var WebKitCommonMediaKeySession = class extends import_vinyl_util16.EventHostImp
|
|
|
1835
1872
|
this.dispatch("error", { error, target: this });
|
|
1836
1873
|
}
|
|
1837
1874
|
});
|
|
1875
|
+
// Prefixed EME reports no key ids or statuses; a key was added for the
|
|
1876
|
+
// session's init data.
|
|
1877
|
+
__publicField(this, "keyAddedHandler", () => {
|
|
1878
|
+
this.dispatch("keyStatusesChange", {
|
|
1879
|
+
keyStatuses: [
|
|
1880
|
+
{
|
|
1881
|
+
keyId: (0, import_vinyl_util16.bufferToByteArray)(this.initData).slice().buffer,
|
|
1882
|
+
status: "usable"
|
|
1883
|
+
}
|
|
1884
|
+
]
|
|
1885
|
+
});
|
|
1886
|
+
});
|
|
1838
1887
|
session.addEventListener("webkitkeymessage", this.messageHandler);
|
|
1839
1888
|
session.addEventListener("webkitkeyerror", this.errorHandler);
|
|
1889
|
+
session.addEventListener("webkitkeyadded", this.keyAddedHandler);
|
|
1840
1890
|
}
|
|
1841
1891
|
update(key) {
|
|
1842
1892
|
if (this.disposed) return Promise.reject(new import_vinyl_util16.DisposedError());
|
|
@@ -1854,6 +1904,7 @@ var WebKitCommonMediaKeySession = class extends import_vinyl_util16.EventHostImp
|
|
|
1854
1904
|
this.messageHandler
|
|
1855
1905
|
);
|
|
1856
1906
|
this.session.removeEventListener("webkitkeyerror", this.errorHandler);
|
|
1907
|
+
this.session.removeEventListener("webkitkeyadded", this.keyAddedHandler);
|
|
1857
1908
|
this.session.close();
|
|
1858
1909
|
}
|
|
1859
1910
|
};
|
|
@@ -1877,9 +1928,18 @@ function webkitErrorCodeToStr(code) {
|
|
|
1877
1928
|
|
|
1878
1929
|
// src/drm/commonEme/CommonEmeFactory.ts
|
|
1879
1930
|
var import_vinyl_util17 = require("@amazon/vinyl-util");
|
|
1880
|
-
function commonEmeFactory() {
|
|
1931
|
+
function commonEmeFactory(options) {
|
|
1932
|
+
var _a, _b;
|
|
1933
|
+
if ((options == null ? void 0 : options.preferPrefixedMediaKeys) === true) {
|
|
1934
|
+
return (_a = createPrefixedCommonEme()) != null ? _a : createStandardCommonEme();
|
|
1935
|
+
}
|
|
1936
|
+
return (_b = createStandardCommonEme()) != null ? _b : createPrefixedCommonEme();
|
|
1937
|
+
}
|
|
1938
|
+
function createStandardCommonEme() {
|
|
1939
|
+
return supportsStandardEme() ? new StandardCommonEme() : null;
|
|
1940
|
+
}
|
|
1941
|
+
function createPrefixedCommonEme() {
|
|
1881
1942
|
if (supportsWebKitEme()) return new WebKitCommonEme();
|
|
1882
|
-
if (supportsStandardEme()) return new StandardCommonEme();
|
|
1883
1943
|
if (supportsMsEme()) return new MsCommonEme();
|
|
1884
1944
|
return null;
|
|
1885
1945
|
}
|
|
@@ -1918,6 +1978,7 @@ var DrmKeySystem = /* @__PURE__ */ ((DrmKeySystem2) => {
|
|
|
1918
1978
|
DrmKeySystem2["PLAY_READY_3000"] = "com.microsoft.playready.recommendation.3000";
|
|
1919
1979
|
DrmKeySystem2["FAIR_PLAY"] = "com.apple.fps";
|
|
1920
1980
|
DrmKeySystem2["FAIR_PLAY_1_0"] = "com.apple.fps.1_0";
|
|
1981
|
+
DrmKeySystem2["FAIR_PLAY_2_0"] = "com.apple.fps.2_0";
|
|
1921
1982
|
return DrmKeySystem2;
|
|
1922
1983
|
})(DrmKeySystem || {});
|
|
1923
1984
|
var drmKeySystemValidator = /* @__PURE__ */ (0, import_vinyl_validation.string)().notEmpty();
|
|
@@ -1932,7 +1993,8 @@ function isPlayReady(keySystem) {
|
|
|
1932
1993
|
}
|
|
1933
1994
|
var FAIR_PLAY_KEY_SYSTEMS = [
|
|
1934
1995
|
"com.apple.fps" /* FAIR_PLAY */,
|
|
1935
|
-
"com.apple.fps.1_0" /* FAIR_PLAY_1_0
|
|
1996
|
+
"com.apple.fps.1_0" /* FAIR_PLAY_1_0 */,
|
|
1997
|
+
"com.apple.fps.2_0" /* FAIR_PLAY_2_0 */
|
|
1936
1998
|
];
|
|
1937
1999
|
function isFairPlay(keySystem) {
|
|
1938
2000
|
return FAIR_PLAY_KEY_SYSTEMS.includes(keySystem);
|
|
@@ -1978,7 +2040,8 @@ var drmOptionsValidator = /* @__PURE__ */ (0, import_vinyl_validation3.object)({
|
|
|
1978
2040
|
["org.w3.clearkey" /* CLEAR_KEY */]: /* @__PURE__ */ drmClearKeySystemOptionsValidator.optional()
|
|
1979
2041
|
})
|
|
1980
2042
|
),
|
|
1981
|
-
licenseProvider: /* @__PURE__ */ (0, import_vinyl_validation3.func)().optional()
|
|
2043
|
+
licenseProvider: /* @__PURE__ */ (0, import_vinyl_validation3.func)().optional(),
|
|
2044
|
+
preferPrefixedMediaKeys: /* @__PURE__ */ (0, import_vinyl_validation3.boolean)().maybe().optional()
|
|
1982
2045
|
});
|
|
1983
2046
|
|
|
1984
2047
|
// src/drm/util/unpackPlayReadyChallenge.ts
|
|
@@ -2472,10 +2535,10 @@ var DrmControllerImpl = class extends import_vinyl_util24.EventHostImpl {
|
|
|
2472
2535
|
keySystem,
|
|
2473
2536
|
drmInfo.contentType
|
|
2474
2537
|
);
|
|
2475
|
-
const
|
|
2476
|
-
|
|
2538
|
+
const robustness = (_a = mediaOptions == null ? void 0 : mediaOptions.robustness) != null ? _a : defaultRobustness(keySystem);
|
|
2539
|
+
const capability = __spreadProps(__spreadValues({}, robustness != null && { robustness }), {
|
|
2477
2540
|
encryptionScheme: drmInfo.encryptionScheme
|
|
2478
|
-
};
|
|
2541
|
+
});
|
|
2479
2542
|
if (drmInfo.mimeType) {
|
|
2480
2543
|
capability.contentType = drmInfo.mimeType;
|
|
2481
2544
|
}
|
|
@@ -2558,6 +2621,19 @@ var DrmControllerImpl = class extends import_vinyl_util24.EventHostImpl {
|
|
|
2558
2621
|
this.closeSession(session);
|
|
2559
2622
|
this.handleError(event.error);
|
|
2560
2623
|
});
|
|
2624
|
+
session.on("keyStatusesChange", ({ keyStatuses }) => {
|
|
2625
|
+
if (this.disposed) return;
|
|
2626
|
+
(0, import_vinyl_util24.logDebug)(
|
|
2627
|
+
this,
|
|
2628
|
+
"keyStatusesChange",
|
|
2629
|
+
keyStatuses.map((keyStatus) => keyStatus.status)
|
|
2630
|
+
);
|
|
2631
|
+
this.dispatch("keyStatusesChange", {
|
|
2632
|
+
keySystem: mediaKeys.keySystem,
|
|
2633
|
+
keyStatuses,
|
|
2634
|
+
trackUri
|
|
2635
|
+
});
|
|
2636
|
+
});
|
|
2561
2637
|
return session;
|
|
2562
2638
|
}
|
|
2563
2639
|
/**
|
|
@@ -2570,28 +2646,47 @@ var DrmControllerImpl = class extends import_vinyl_util24.EventHostImpl {
|
|
|
2570
2646
|
this.pendingMessageProps = messageProps;
|
|
2571
2647
|
const keySystem = mediaKeys.keySystem;
|
|
2572
2648
|
(0, import_vinyl_util24.logDebug)(this, "message", keySystem, event.message.byteLength);
|
|
2649
|
+
const messageTime = Date.now();
|
|
2650
|
+
const keySystemOptions = (_a = this.options.keySystems[keySystem]) != null ? _a : this.options.keySystems["*"];
|
|
2651
|
+
const licenseServerOptionsProvider = keySystemOptions == null ? void 0 : keySystemOptions.licenseServer;
|
|
2652
|
+
const resolvedLicenseServerOptions = await (0, import_vinyl_util24.resolveValueProvider)(
|
|
2653
|
+
licenseServerOptionsProvider
|
|
2654
|
+
);
|
|
2655
|
+
let licenseServerOptions = __spreadValues({}, resolvedLicenseServerOptions);
|
|
2656
|
+
this.abortIfDisposed();
|
|
2657
|
+
if (isFairPlayCertificateRequest(keySystem, event.message)) {
|
|
2658
|
+
const certBytes = toCertBytes(
|
|
2659
|
+
licenseServerOptions.serverCertificate
|
|
2660
|
+
);
|
|
2661
|
+
if (!certBytes) {
|
|
2662
|
+
throw new DrmError("FairPlay requires certificate data");
|
|
2663
|
+
}
|
|
2664
|
+
this.pendingMessageProps = null;
|
|
2665
|
+
if (session.disposed) return;
|
|
2666
|
+
(0, import_vinyl_util24.logDebug)(this, "update certificate");
|
|
2667
|
+
await session.update(certBytes.buffer);
|
|
2668
|
+
return;
|
|
2669
|
+
}
|
|
2573
2670
|
if (this.keySetupSpanStart != null) {
|
|
2574
2671
|
this.dispatchLoadSpan(
|
|
2575
2672
|
"keySetup",
|
|
2576
2673
|
this.keySetupSpanStart,
|
|
2577
|
-
|
|
2674
|
+
messageTime,
|
|
2578
2675
|
messageProps
|
|
2579
2676
|
);
|
|
2580
2677
|
this.keySetupSpanStart = null;
|
|
2581
2678
|
}
|
|
2582
|
-
const keySystemOptions = (_a = this.options.keySystems[keySystem]) != null ? _a : this.options.keySystems["*"];
|
|
2583
|
-
const licenseServerOptionsProvider = keySystemOptions == null ? void 0 : keySystemOptions.licenseServer;
|
|
2584
|
-
const licenseServerOptions = (_b = (0, import_vinyl_util24.clone)(await (0, import_vinyl_util24.resolveValueProvider)(licenseServerOptionsProvider))) != null ? _b : {};
|
|
2585
|
-
this.abortIfDisposed();
|
|
2586
2679
|
let challenge = event.message;
|
|
2587
2680
|
if (isPlayReady(keySystem)) {
|
|
2588
2681
|
const unpacked = unpackPlayReadyChallenge(challenge);
|
|
2589
2682
|
challenge = unpacked.challenge;
|
|
2590
|
-
|
|
2591
|
-
licenseServerOptions.init
|
|
2592
|
-
|
|
2593
|
-
|
|
2594
|
-
|
|
2683
|
+
licenseServerOptions = __spreadProps(__spreadValues({}, licenseServerOptions), {
|
|
2684
|
+
init: __spreadProps(__spreadValues({}, licenseServerOptions.init), {
|
|
2685
|
+
headers: __spreadValues(__spreadValues({}, (0, import_vinyl_util24.normalizeHeadersInit)(
|
|
2686
|
+
(_c = (_b = licenseServerOptions.init) == null ? void 0 : _b.headers) != null ? _c : {}
|
|
2687
|
+
)), unpacked.headers)
|
|
2688
|
+
})
|
|
2689
|
+
});
|
|
2595
2690
|
}
|
|
2596
2691
|
const licenseSpanStart = Date.now();
|
|
2597
2692
|
const key = await this.licenseProvider(
|
|
@@ -2703,8 +2798,12 @@ function toCertBytes(serverCertificate) {
|
|
|
2703
2798
|
if (!serverCertificate) return null;
|
|
2704
2799
|
return typeof serverCertificate === "string" ? (0, import_vinyl_util24.base64ToByteArray)(serverCertificate) : (0, import_vinyl_util24.bufferToByteArray)(serverCertificate);
|
|
2705
2800
|
}
|
|
2801
|
+
function defaultRobustness(keySystem) {
|
|
2802
|
+
return keySystem === "com.widevine.alpha" /* WIDEVINE */ ? "SW_SECURE_CRYPTO" /* SW_SECURE_CRYPTO */ : void 0;
|
|
2803
|
+
}
|
|
2706
2804
|
function defaultInitDataTransformer(keySystem, certBytes) {
|
|
2707
|
-
return (initData) => {
|
|
2805
|
+
return (initData, _initDataType, drmInfo) => {
|
|
2806
|
+
var _a;
|
|
2708
2807
|
if (keySystem === "com.apple.fps.1_0" /* FAIR_PLAY_1_0 */) {
|
|
2709
2808
|
if (!certBytes) {
|
|
2710
2809
|
throw new DrmError("FairPlay requires certificate data");
|
|
@@ -2712,9 +2811,23 @@ function defaultInitDataTransformer(keySystem, certBytes) {
|
|
|
2712
2811
|
const contentId = extractContentId(initData);
|
|
2713
2812
|
return createFairPlaySessionInitData(initData, contentId, certBytes);
|
|
2714
2813
|
}
|
|
2814
|
+
if (keySystem === "com.apple.fps.2_0" /* FAIR_PLAY_2_0 */) {
|
|
2815
|
+
const contentId = (_a = drmInfo.contentProtections.find(
|
|
2816
|
+
(cP) => cP.keySystem === keySystem
|
|
2817
|
+
)) == null ? void 0 : _a.contentId;
|
|
2818
|
+
if (!contentId) {
|
|
2819
|
+
throw new DrmError("FairPlay 2.0 requires a content id", {
|
|
2820
|
+
drmInfo
|
|
2821
|
+
});
|
|
2822
|
+
}
|
|
2823
|
+
return (0, import_vinyl_util24.byteStrToByteArray)(contentId);
|
|
2824
|
+
}
|
|
2715
2825
|
return initData;
|
|
2716
2826
|
};
|
|
2717
2827
|
}
|
|
2828
|
+
function isFairPlayCertificateRequest(keySystem, message) {
|
|
2829
|
+
return keySystem === "com.apple.fps.2_0" /* FAIR_PLAY_2_0 */ && (0, import_vinyl_util24.bufferToByteStr)(message) === "certificate";
|
|
2830
|
+
}
|
|
2718
2831
|
|
|
2719
2832
|
// src/drm/DrmKeySystemResolver.ts
|
|
2720
2833
|
var import_vinyl_mpd_parser = require("@amazon/vinyl-mpd-parser");
|
|
@@ -5223,7 +5336,8 @@ var RESTRICTABLE_CONTENT_TYPES = [
|
|
|
5223
5336
|
var drmProtectionValidator = /* @__PURE__ */ descriptorValidator.extend({
|
|
5224
5337
|
keySystem: /* @__PURE__ */ (0, import_vinyl_validation10.enumOf)(DrmKeySystem),
|
|
5225
5338
|
pro: /* @__PURE__ */ (0, import_vinyl_validation10.string)().maybe().optional(),
|
|
5226
|
-
pssh: /* @__PURE__ */ (0, import_vinyl_validation10.string)().maybe().optional()
|
|
5339
|
+
pssh: /* @__PURE__ */ (0, import_vinyl_validation10.string)().maybe().optional(),
|
|
5340
|
+
contentId: /* @__PURE__ */ (0, import_vinyl_validation10.string)().maybe().optional()
|
|
5227
5341
|
});
|
|
5228
5342
|
var mediaFormatMetadataValidator = /* @__PURE__ */ (0, import_vinyl_validation10.object)({
|
|
5229
5343
|
contentProtections: /* @__PURE__ */ (0, import_vinyl_validation10.array)(drmProtectionValidator).readonly(),
|
|
@@ -9520,6 +9634,54 @@ function buildSegmentTimeline(deps, baseUrl, segments) {
|
|
|
9520
9634
|
// src/track/hls/buildHlsMediaTimeline.ts
|
|
9521
9635
|
var import_vinyl_util94 = require("@amazon/vinyl-util");
|
|
9522
9636
|
var import_vinyl_transmux = require("@amazon/vinyl-transmux");
|
|
9637
|
+
|
|
9638
|
+
// src/track/hls/util/hlsKeyDrmInfo.ts
|
|
9639
|
+
var import_vinyl_mpd_parser5 = require("@amazon/vinyl-mpd-parser");
|
|
9640
|
+
var FAIR_PLAY_KEY_FORMAT = "com.apple.streamingkeydelivery";
|
|
9641
|
+
var PLAY_READY_KEY_FORMAT = "com.microsoft.playready";
|
|
9642
|
+
function hlsKeyDrmInfo(deps, key) {
|
|
9643
|
+
var _a, _b;
|
|
9644
|
+
const encryptionScheme = methodToEncryptionScheme(key == null ? void 0 : key.method);
|
|
9645
|
+
if (key == null || encryptionScheme == null) return null;
|
|
9646
|
+
const keyFormat = (_a = key.keyFormat) == null ? void 0 : _a.toLowerCase();
|
|
9647
|
+
let schemeIdUri;
|
|
9648
|
+
let initDataType;
|
|
9649
|
+
let contentId = null;
|
|
9650
|
+
if (keyFormat === FAIR_PLAY_KEY_FORMAT) {
|
|
9651
|
+
schemeIdUri = import_vinyl_mpd_parser5.ContentProtectionScheme.FAIR_PLAY;
|
|
9652
|
+
initDataType = "sinf";
|
|
9653
|
+
contentId = ((_b = key.uri) == null ? void 0 : _b.replace(/^skd:\/\//i, "")) || null;
|
|
9654
|
+
} else if (keyFormat === PLAY_READY_KEY_FORMAT) {
|
|
9655
|
+
schemeIdUri = import_vinyl_mpd_parser5.ContentProtectionScheme.PLAY_READY;
|
|
9656
|
+
initDataType = "cenc";
|
|
9657
|
+
} else if (keyFormat == null ? void 0 : keyFormat.startsWith("urn:uuid:")) {
|
|
9658
|
+
schemeIdUri = keyFormat;
|
|
9659
|
+
initDataType = "cenc";
|
|
9660
|
+
} else {
|
|
9661
|
+
return null;
|
|
9662
|
+
}
|
|
9663
|
+
const keySystems = deps.drmKeySystemResolver(schemeIdUri).filter((keySystem) => keySystem !== "com.apple.fps.1_0" /* FAIR_PLAY_1_0 */);
|
|
9664
|
+
if (keySystems.length === 0) return null;
|
|
9665
|
+
return {
|
|
9666
|
+
contentProtections: keySystems.map((keySystem) => __spreadValues({
|
|
9667
|
+
keySystem
|
|
9668
|
+
}, contentId != null && { contentId })),
|
|
9669
|
+
encryptionScheme,
|
|
9670
|
+
initDataType
|
|
9671
|
+
};
|
|
9672
|
+
}
|
|
9673
|
+
function methodToEncryptionScheme(method) {
|
|
9674
|
+
switch (method) {
|
|
9675
|
+
case "SAMPLE-AES":
|
|
9676
|
+
return "cbcs";
|
|
9677
|
+
case "SAMPLE-AES-CTR":
|
|
9678
|
+
return "cenc";
|
|
9679
|
+
default:
|
|
9680
|
+
return null;
|
|
9681
|
+
}
|
|
9682
|
+
}
|
|
9683
|
+
|
|
9684
|
+
// src/track/hls/buildHlsMediaTimeline.ts
|
|
9523
9685
|
function buildHlsMediaTimeline(deps, data3) {
|
|
9524
9686
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
9525
9687
|
const { mainPlaylist, baseUrl } = data3;
|
|
@@ -9618,7 +9780,7 @@ function createHlsQualityData(deps, data3, baseUrl, playlistUri, metadata) {
|
|
|
9618
9780
|
return {
|
|
9619
9781
|
metadata,
|
|
9620
9782
|
async getSegment(time, affordance = 0) {
|
|
9621
|
-
var _a;
|
|
9783
|
+
var _a, _b;
|
|
9622
9784
|
const playlist = await data3.getMediaPlaylist(playlistUri);
|
|
9623
9785
|
const playlistBaseUrl = getPlaylistBaseUrl(
|
|
9624
9786
|
playlist,
|
|
@@ -9634,8 +9796,12 @@ function createHlsQualityData(deps, data3, baseUrl, playlistUri, metadata) {
|
|
|
9634
9796
|
if (!segment) return null;
|
|
9635
9797
|
const hlsMap = (_a = playlist.segments[0]) == null ? void 0 : _a.map;
|
|
9636
9798
|
if (hlsMap) {
|
|
9799
|
+
const drmInfo = hlsKeyDrmInfo(
|
|
9800
|
+
deps,
|
|
9801
|
+
(_b = playlist.segments[segments.indexOf(segment)]) == null ? void 0 : _b.key
|
|
9802
|
+
);
|
|
9637
9803
|
return __spreadProps(__spreadValues({
|
|
9638
|
-
quality: metadata
|
|
9804
|
+
quality: drmInfo ? __spreadValues(__spreadValues({}, metadata), drmInfo) : metadata
|
|
9639
9805
|
}, segment), {
|
|
9640
9806
|
initData: createSegmentDataProvider(deps, {
|
|
9641
9807
|
url: (0, import_vinyl_util94.resolveUrl)(hlsMap.uri, playlistBaseUrl),
|
|
@@ -10528,7 +10694,12 @@ function createVinylFactories(options) {
|
|
|
10528
10694
|
trackController: (deps) => new TrackControllerImpl(deps, options.trackController),
|
|
10529
10695
|
drmKeySystemResolver: () => defaultDrmKeySystemResolver,
|
|
10530
10696
|
drmController: (deps) => new DrmControllerImpl(deps, options.drm),
|
|
10531
|
-
commonEme:
|
|
10697
|
+
commonEme: () => {
|
|
10698
|
+
var _a;
|
|
10699
|
+
return commonEmeFactory({
|
|
10700
|
+
preferPrefixedMediaKeys: (_a = options.drm) == null ? void 0 : _a.preferPrefixedMediaKeys
|
|
10701
|
+
});
|
|
10702
|
+
},
|
|
10532
10703
|
autoResetController: (deps) => new AutoResetControllerImpl(deps, options.autoReset),
|
|
10533
10704
|
adController: (deps) => new AdControllerImpl(deps, options.adController),
|
|
10534
10705
|
createDashFactories: createDashFactories(options),
|
|
@@ -10619,7 +10790,12 @@ var VinylPlayer = class extends import_vinyl_util99.EventHostImpl {
|
|
|
10619
10790
|
ALL_TRACK_CONTROLLER_EVENTS
|
|
10620
10791
|
)
|
|
10621
10792
|
);
|
|
10622
|
-
add(
|
|
10793
|
+
add(
|
|
10794
|
+
(0, import_vinyl_util99.redispatchEvents)(this, this.drmController, [
|
|
10795
|
+
"error",
|
|
10796
|
+
"keyStatusesChange"
|
|
10797
|
+
])
|
|
10798
|
+
);
|
|
10623
10799
|
add(
|
|
10624
10800
|
this.drmController.on("loadSpanMeasured", (measurement) => {
|
|
10625
10801
|
const trackUri = measurement.trackUri;
|