@bigbinary/neeto-media-recorder 2.5.4 → 2.5.5
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/core.js +55 -60
- package/core.js.map +1 -1
- package/index.js +5 -45
- package/index.js.map +1 -1
- package/package.json +1 -1
package/core.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import axios from 'axios';
|
|
2
2
|
import { isPresent, existsBy, isNotEmpty, isNot, noop } from '@bigbinary/neeto-cist';
|
|
3
|
-
import { MIME_TYPE as MIME_TYPE$1,
|
|
3
|
+
import { RETRYABLE_ERRORS, MIME_TYPE as MIME_TYPE$1, UPLOAD_STATUS, UPLOAD_EVENT, SCREEN_RECORDER_STATUS, START_RECORDING_SOUND, RECORDING_LIMIT_REACHED_WARNING_SOUND, SCREEN_RECORDER_ERROR, SCREEN_RECORDER_EVENT, RECORDING_TIME_LIMIT_FREE_PLAN, ONE_SECOND, HALF_A_SECOND_IN_MILLISECONDS, ONE_SECOND_IN_MILLISECONDS, TWO_HUNDRED_MILLISECONDS, ONE_MINUTE_IN_MILLISECONDS, STOP_RECORDING_DUE_TO_LIMIT_REACHED_SOUND, IS_EXTENSION } from '@bigbinary/neeto-media-recorder/constants';
|
|
4
4
|
import { isNotNil, min, isNil, identity, isEmpty, pick, equals, not } from 'ramda';
|
|
5
5
|
import platform from 'platform';
|
|
6
6
|
import '@bigbinary/neeto-media-recorder/core';
|
|
@@ -773,14 +773,6 @@ var partPresignedUrlApi = {
|
|
|
773
773
|
create: retryableCreate
|
|
774
774
|
};
|
|
775
775
|
|
|
776
|
-
// https://www.w3.org/TR/screen-capture/#displaycapturesurfacetype
|
|
777
|
-
var DISPLAY_SURFACE = {
|
|
778
|
-
monitor: "monitor",
|
|
779
|
-
window: "window",
|
|
780
|
-
browser: "browser"
|
|
781
|
-
};
|
|
782
|
-
var MINIMUM_CHROMIUM_VERSION_FOR_MP4 = "128.0.6613.85";
|
|
783
|
-
|
|
784
776
|
var getUnSupportedConstraints = function getUnSupportedConstraints(mediaType) {
|
|
785
777
|
var supportedMediaConstraints = navigator.mediaDevices.getSupportedConstraints();
|
|
786
778
|
return Object.keys(mediaType).filter(function (constraint) {
|
|
@@ -807,51 +799,45 @@ var isStreamEnded = function isStreamEnded(mediaStream) {
|
|
|
807
799
|
readyState: "ended"
|
|
808
800
|
}, mediaStream.getTracks());
|
|
809
801
|
};
|
|
810
|
-
function
|
|
811
|
-
|
|
812
|
-
var match = userAgent.match(/Chrom(e|ium)\/(([0-9][.]?)+)/);
|
|
813
|
-
if (match) {
|
|
814
|
-
return match[2];
|
|
815
|
-
}
|
|
816
|
-
return null;
|
|
817
|
-
}
|
|
818
|
-
function compareChromiumVersions(version1, version2) {
|
|
819
|
-
var v1Parts = version1.split(".").map(Number);
|
|
820
|
-
var v2Parts = version2.split(".").map(Number);
|
|
821
|
-
for (var i = 0; i < Math.max(v1Parts.length, v2Parts.length); i++) {
|
|
822
|
-
var v1Part = v1Parts[i] || 0;
|
|
823
|
-
var v2Part = v2Parts[i] || 0;
|
|
824
|
-
if (v1Part > v2Part) return 1;
|
|
825
|
-
if (v1Part < v2Part) return -1;
|
|
826
|
-
}
|
|
827
|
-
return 0;
|
|
828
|
-
}
|
|
829
|
-
var getSupportedMimeType = function getSupportedMimeType(fallback) {
|
|
830
|
-
var _platform$os, _platform$os$family;
|
|
831
|
-
var isWindows = (_platform$os = platform.os) === null || _platform$os === void 0 ? void 0 : (_platform$os$family = _platform$os.family) === null || _platform$os$family === void 0 ? void 0 : _platform$os$family.includes("Windows");
|
|
832
|
-
if (MediaRecorder.isTypeSupported(MIME_TYPE.mp4) && !isWindows) {
|
|
833
|
-
if (platform.name === "Safari") {
|
|
834
|
-
return MIME_TYPE.mp4;
|
|
835
|
-
}
|
|
836
|
-
var chromiumVersion = getChromiumVersion();
|
|
837
|
-
if (isNil(chromiumVersion)) {
|
|
838
|
-
return MIME_TYPE.webmH264;
|
|
839
|
-
}
|
|
840
|
-
var isChromiumVersionSupported = compareChromiumVersions(chromiumVersion, MINIMUM_CHROMIUM_VERSION_FOR_MP4) >= 0;
|
|
841
|
-
if (isChromiumVersionSupported) {
|
|
842
|
-
return MIME_TYPE.mp4;
|
|
843
|
-
}
|
|
844
|
-
return MIME_TYPE.webmH264;
|
|
845
|
-
} else if (MediaRecorder.isTypeSupported(MIME_TYPE.webmH264)) {
|
|
846
|
-
return MIME_TYPE.webmH264;
|
|
847
|
-
}
|
|
848
|
-
return fallback;
|
|
802
|
+
var getSupportedMimeType = function getSupportedMimeType() {
|
|
803
|
+
return MIME_TYPE.webmH264;
|
|
849
804
|
};
|
|
850
805
|
|
|
851
|
-
// TODO:
|
|
806
|
+
// TODO: Uncomment this when mp4 is stable
|
|
807
|
+
// export const getSupportedMimeType = fallback => {
|
|
808
|
+
// const isWindows = platform.os?.family?.includes("Windows");
|
|
809
|
+
|
|
810
|
+
// if (MediaRecorder.isTypeSupported(MIME_TYPE.mp4) && !isWindows) {
|
|
811
|
+
// if (platform.name === "Safari") {
|
|
812
|
+
// return MIME_TYPE.mp4;
|
|
813
|
+
// }
|
|
814
|
+
|
|
815
|
+
// const chromiumVersion = getChromiumVersion();
|
|
816
|
+
|
|
817
|
+
// if (isNil(chromiumVersion)) {
|
|
818
|
+
// return MIME_TYPE.webmH264;
|
|
819
|
+
// }
|
|
820
|
+
|
|
821
|
+
// const isChromiumVersionSupported =
|
|
822
|
+
// compareChromiumVersions(
|
|
823
|
+
// chromiumVersion,
|
|
824
|
+
// MINIMUM_CHROMIUM_VERSION_FOR_MP4
|
|
825
|
+
// ) >= 0;
|
|
826
|
+
|
|
827
|
+
// if (isChromiumVersionSupported) {
|
|
828
|
+
// return MIME_TYPE.mp4;
|
|
829
|
+
// }
|
|
830
|
+
|
|
831
|
+
// return MIME_TYPE.webmH264;
|
|
832
|
+
// } else if (MediaRecorder.isTypeSupported(MIME_TYPE.webmH264)) {
|
|
833
|
+
// return MIME_TYPE.webmH264;
|
|
834
|
+
// }
|
|
835
|
+
|
|
836
|
+
// return fallback;
|
|
837
|
+
// };
|
|
838
|
+
|
|
852
839
|
var getMediaRecorderOptions = function getMediaRecorderOptions() {
|
|
853
840
|
var mimeType = getSupportedMimeType();
|
|
854
|
-
if (!mimeType) return {};
|
|
855
841
|
return {
|
|
856
842
|
mimeType: mimeType
|
|
857
843
|
};
|
|
@@ -859,7 +845,7 @@ var getMediaRecorderOptions = function getMediaRecorderOptions() {
|
|
|
859
845
|
|
|
860
846
|
var s3AxiosInstance = axios.create({
|
|
861
847
|
headers: {
|
|
862
|
-
"Content-Type": getSupportedMimeType(
|
|
848
|
+
"Content-Type": getSupportedMimeType()
|
|
863
849
|
}
|
|
864
850
|
});
|
|
865
851
|
s3AxiosInstance.interceptors.response.use(identity, function (error) {
|
|
@@ -1225,15 +1211,15 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
|
|
|
1225
1211
|
case 0:
|
|
1226
1212
|
logger.info("Part ready to be uploaded: ", _classPrivateFieldGet(_this, _partNumber));
|
|
1227
1213
|
partNumber = _classPrivateFieldGet(_this, _partNumber);
|
|
1214
|
+
mimeType = getSupportedMimeType();
|
|
1228
1215
|
_classPrivateFieldSet(_this, _partNumber, (_this$partNumber = _classPrivateFieldGet(_this, _partNumber), _this$partNumber++, _this$partNumber));
|
|
1229
1216
|
_classPrivateFieldGet(_this, _uploadProgress)[partNumber] = {
|
|
1230
1217
|
uploaded: 0,
|
|
1231
1218
|
total: new Blob(chunks, {
|
|
1232
|
-
type:
|
|
1219
|
+
type: mimeType
|
|
1233
1220
|
}).size
|
|
1234
1221
|
};
|
|
1235
|
-
_context3.prev =
|
|
1236
|
-
mimeType = getSupportedMimeType(MIME_TYPE.webmH264);
|
|
1222
|
+
_context3.prev = 5;
|
|
1237
1223
|
_context3.next = 8;
|
|
1238
1224
|
return partPresignedUrlApi.create({
|
|
1239
1225
|
recordingId: _classPrivateFieldGet(_this, _recordingId),
|
|
@@ -1276,7 +1262,7 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
|
|
|
1276
1262
|
break;
|
|
1277
1263
|
case 15:
|
|
1278
1264
|
_context3.prev = 15;
|
|
1279
|
-
_context3.t0 = _context3["catch"](
|
|
1265
|
+
_context3.t0 = _context3["catch"](5);
|
|
1280
1266
|
// ignore if aborted
|
|
1281
1267
|
if (!axios.isCancel(_context3.t0)) {
|
|
1282
1268
|
logger.error("Failed to upload partNumber:", partNumber);
|
|
@@ -1293,7 +1279,7 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
|
|
|
1293
1279
|
case "end":
|
|
1294
1280
|
return _context3.stop();
|
|
1295
1281
|
}
|
|
1296
|
-
}, _callee3, null, [[
|
|
1282
|
+
}, _callee3, null, [[5, 15]]);
|
|
1297
1283
|
}));
|
|
1298
1284
|
function value(_x) {
|
|
1299
1285
|
return _value.apply(this, arguments);
|
|
@@ -1305,7 +1291,7 @@ var MultipartS3Uploader = /*#__PURE__*/function () {
|
|
|
1305
1291
|
writable: true,
|
|
1306
1292
|
value: function value() {
|
|
1307
1293
|
return new Blob(_classPrivateFieldGet(_this, _unUploadedChunks), {
|
|
1308
|
-
type: getSupportedMimeType(
|
|
1294
|
+
type: getSupportedMimeType()
|
|
1309
1295
|
});
|
|
1310
1296
|
}
|
|
1311
1297
|
});
|
|
@@ -1371,6 +1357,13 @@ function _slicedToArray(arr, i) {
|
|
|
1371
1357
|
return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
|
|
1372
1358
|
}
|
|
1373
1359
|
|
|
1360
|
+
// https://www.w3.org/TR/screen-capture/#displaycapturesurfacetype
|
|
1361
|
+
var DISPLAY_SURFACE = {
|
|
1362
|
+
monitor: "monitor",
|
|
1363
|
+
window: "window",
|
|
1364
|
+
browser: "browser"
|
|
1365
|
+
};
|
|
1366
|
+
|
|
1374
1367
|
function ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
1375
1368
|
function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$1(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
1376
1369
|
var initialState = {
|
|
@@ -1510,7 +1503,7 @@ var ScreenRecorder = /*#__PURE__*/function () {
|
|
|
1510
1503
|
});
|
|
1511
1504
|
_defineProperty(this, "getWebmMediaBlob", function () {
|
|
1512
1505
|
return new Blob(_classPrivateFieldGet(_this, _mediaChunks), {
|
|
1513
|
-
type: getSupportedMimeType(
|
|
1506
|
+
type: getSupportedMimeType()
|
|
1514
1507
|
});
|
|
1515
1508
|
});
|
|
1516
1509
|
_defineProperty(this, "addCallback", function (event, callback) {
|
|
@@ -1890,6 +1883,7 @@ var ScreenRecorder = /*#__PURE__*/function () {
|
|
|
1890
1883
|
_classPrivateFieldGet(_this, _mediaRecorder).start(5000);
|
|
1891
1884
|
_classPrivateFieldGet(_this, _startTimer).call(_this);
|
|
1892
1885
|
} catch (error) {
|
|
1886
|
+
clearInterval(_classPrivateFieldGet(_this, _timerId));
|
|
1893
1887
|
_classPrivateFieldGet(_this, _store).setState({
|
|
1894
1888
|
status: SCREEN_RECORDER_STATUS.idle,
|
|
1895
1889
|
error: SCREEN_RECORDER_ERROR[error.name]
|
|
@@ -1898,8 +1892,9 @@ var ScreenRecorder = /*#__PURE__*/function () {
|
|
|
1898
1892
|
// To prevent triggering #onRecordingStop when the mediaRecorder is failed to start.
|
|
1899
1893
|
_classPrivateFieldGet(_this, _mediaRecorder).onstop = noop;
|
|
1900
1894
|
if (_classPrivateFieldGet(_this, _mediaStream)) {
|
|
1901
|
-
_classPrivateFieldGet(_this, _mediaStream).
|
|
1902
|
-
|
|
1895
|
+
_classPrivateFieldGet(_this, _mediaStream).getTracks().forEach(function (track) {
|
|
1896
|
+
return track.stop();
|
|
1897
|
+
});
|
|
1903
1898
|
_classPrivateFieldSet(_this, _mediaStream, null);
|
|
1904
1899
|
}
|
|
1905
1900
|
_classPrivateFieldSet(_this, _stream, null);
|