Browse Source
run decryption in a webworker (#972)
run decryption in a webworker (#972)
* run decryption in a webworker * drop support for IE10pull/6/head

committed by
GitHub

9 changed files with 164 additions and 17 deletions
-
4README.md
-
3package.json
-
33src/bin-utils.js
-
42src/decrypter-worker.js
-
19src/master-playlist-controller.js
-
44src/segment-loader.js
-
5src/videojs-contrib-hls.js
-
19test/segment-loader.test.js
-
12test/videojs-contrib-hls.test.js
@ -0,0 +1,42 @@ |
|||
import window from 'global/window'; |
|||
import {Decrypter} from 'aes-decrypter'; |
|||
import { createTransferableMessage } from './bin-utils'; |
|||
|
|||
/** |
|||
* Our web worker interface so that things can talk to aes-decrypter |
|||
* that will be running in a web worker. the scope is passed to this by |
|||
* webworkify. |
|||
* |
|||
* @param {Object} self |
|||
* the scope for the web worker |
|||
*/ |
|||
const Worker = function(self) { |
|||
self.onmessage = function(event) { |
|||
const data = event.data; |
|||
const encrypted = new Uint8Array(data.encrypted.bytes, |
|||
data.encrypted.byteOffset, |
|||
data.encrypted.byteLength); |
|||
const key = new Uint32Array(data.key.bytes, |
|||
data.key.byteOffset, |
|||
data.key.byteLength / 4); |
|||
const iv = new Uint32Array(data.iv.bytes, |
|||
data.iv.byteOffset, |
|||
data.iv.byteLength / 4); |
|||
|
|||
/* eslint-disable no-new, handle-callback-err */ |
|||
new Decrypter(encrypted, |
|||
key, |
|||
iv, |
|||
function(err, bytes) { |
|||
window.postMessage(createTransferableMessage({ |
|||
source: data.source, |
|||
decrypted: bytes |
|||
}), [bytes.buffer]); |
|||
}); |
|||
/* eslint-enable */ |
|||
}; |
|||
}; |
|||
|
|||
export default (self) => { |
|||
return new Worker(self); |
|||
}; |
Write
Preview
Loading…
Cancel
Save
Reference in new issue