@zappar/mediarecorder 0.3.0 → 0.4.1

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.
@@ -8,10 +8,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  });
9
9
  };
10
10
  import * as enc from "./encoder";
11
- enc.initialize(new URL("./webmtransmux.wasm", import.meta.url).toString()).then(() => {
12
- postMessage({ 'type': 'converter-worker-loaded' });
13
- });
14
11
  addEventListener('message', (evt) => __awaiter(void 0, void 0, void 0, function* () {
12
+ if (evt && evt.data && evt.data.t === 'wasm') {
13
+ enc.initialize((location.href.startsWith("blob") || location.href.startsWith('data:')) ? evt.data.url : new URL("./webmtransmux.wasm", import.meta.url).toString()).then(() => {
14
+ postMessage({ 'type': 'converter-wasm-loaded' });
15
+ });
16
+ return;
17
+ }
15
18
  if (evt && evt.data && typeof evt.data['indx'] === 'number') {
16
19
  const webtrans = yield enc.createWebMTrans();
17
20
  webtrans.initialize();
@@ -19,5 +22,7 @@ addEventListener('message', (evt) => __awaiter(void 0, void 0, void 0, function*
19
22
  const ret = webtrans.FS.readFile('/output.mp4');
20
23
  webtrans.delete();
21
24
  postMessage({ indx: evt.data.indx, data: ret.buffer }, { transfer: [ret.buffer] });
25
+ return;
22
26
  }
23
27
  }));
28
+ postMessage({ 'type': 'converter-worker-loaded' });
@@ -1,3 +1,3 @@
1
1
  export declare function getWorker(): Promise<Worker>;
2
2
  export declare function convert(data: ArrayBuffer): Promise<ArrayBuffer>;
3
- export declare function load(): Promise<void>;
3
+ export declare function load(provideWorker?: () => Worker): Promise<void>;
package/lib/converter.js CHANGED
@@ -8,15 +8,22 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  });
9
9
  };
10
10
  let workerPromise;
11
+ let providedWorker;
11
12
  export function getWorker() {
12
13
  if (!workerPromise) {
13
14
  workerPromise = new Promise(resolve => {
14
- const worker = new Worker(new URL('./converter-worker', import.meta.url), { type: 'module' });
15
+ const worker = providedWorker !== null && providedWorker !== void 0 ? providedWorker : new Worker(new URL('./converter-worker', import.meta.url), { type: 'module' });
15
16
  function handle(evt) {
16
- if (evt.data && evt.data.type === 'converter-worker-loaded') {
17
+ if (evt.data && evt.data.type === 'converter-wasm-loaded') {
17
18
  worker.removeEventListener('message', handle);
18
19
  resolve(worker);
19
20
  }
21
+ else if (evt.data && evt.data.type === 'converter-worker-loaded') {
22
+ worker.postMessage({
23
+ t: "wasm",
24
+ url: new URL("./webmtransmux.wasm", import.meta.url).toString()
25
+ });
26
+ }
20
27
  }
21
28
  worker.addEventListener('message', handle);
22
29
  });
@@ -39,10 +46,11 @@ export function convert(data) {
39
46
  });
40
47
  });
41
48
  }
42
- export function load() {
49
+ export function load(provideWorker) {
43
50
  return __awaiter(this, void 0, void 0, function* () {
44
51
  // Preload worker if it's likely to be necessary
45
52
  if (!MediaRecorder.isTypeSupported('video/mp4') && MediaRecorder.isTypeSupported('video/webm;codecs="avc1,opus"')) {
53
+ providedWorker = provideWorker === null || provideWorker === void 0 ? void 0 : provideWorker();
46
54
  yield getWorker();
47
55
  }
48
56
  });
@@ -11,13 +11,9 @@ import { convert } from "./converter";
11
11
  export class ConvertingMediaRecorder extends MediaRecorder {
12
12
  static isTypeSupported(type) {
13
13
  if (type === 'video/mp4') {
14
- if (MediaRecorder.isTypeSupported('video/mp4'))
14
+ if (MediaRecorder.isTypeSupported('video/webm;codecs="avc1,opus"'))
15
15
  return true;
16
- if (!MediaRecorder.isTypeSupported('video/webm;codecs="avc1,opus"')) {
17
- console.log("Warning: device doesn't support codec required for @zappar/mediarecorder remuxing ('video/webm;codecs=\"avc1,opus\"')");
18
- return false;
19
- }
20
- else
16
+ if (MediaRecorder.isTypeSupported('video/mp4'))
21
17
  return true;
22
18
  }
23
19
  return MediaRecorder.isTypeSupported(type);
@@ -26,14 +22,9 @@ export class ConvertingMediaRecorder extends MediaRecorder {
26
22
  let needsConversion = false;
27
23
  let mimeType = options === null || options === void 0 ? void 0 : options.mimeType;
28
24
  if (mimeType === 'video/mp4') {
29
- if (!MediaRecorder.isTypeSupported('video/mp4')) {
30
- if (!MediaRecorder.isTypeSupported('video/webm;codecs="avc1,opus"')) {
31
- console.log("Warning: device doesn't support codec required for @zappar/mediarecorder remuxing ('video/webm;codecs=\"avc1,opus\"')");
32
- }
33
- else {
34
- needsConversion = true;
35
- mimeType = 'video/webm;codecs="avc1,opus"';
36
- }
25
+ if (MediaRecorder.isTypeSupported('video/webm;codecs="avc1,opus"')) {
26
+ needsConversion = true;
27
+ mimeType = 'video/webm;codecs="avc1,opus"';
37
28
  }
38
29
  }
39
30
  super(stream, Object.assign(Object.assign({}, options), { mimeType }));
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zappar/mediarecorder",
3
- "version": "0.3.0",
3
+ "version": "0.4.1",
4
4
  "description": "A MediaRecorder polyfill that supports video/mp4 output on both iOS and Android",
5
5
  "main": "./lib/index.js",
6
6
  "types": "./lib/index.d.ts",