This commit is contained in:
jeromewu 2019-11-06 13:07:12 +00:00
parent dbcb56b55c
commit c01845d28a
16 changed files with 1286 additions and 5 deletions

2
.gitpod.Dockerfile vendored Normal file
View File

@ -0,0 +1,2 @@
FROM gitpod/workspace-full
RUN sudo apt-get update && sudo apt-get install libx11-xcb-dev

View File

@ -1,4 +1,7 @@
image:
file: .gitpod.Dockerfile
tasks:
- init: >
wget https://github.com/jeromewu/docker-workspace/raw/master/vim.zip -O /tmp/vim.zip &> /dev/null &&
unzip /tmp/vim.zip -d /home/gitpod &> /dev/null
unzip /tmp/vim.zip -d /home/gitpod &> /dev/null &&
npm install

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
{"uuid":"45c92447-c5fe-427b-b3d9-e27dc182d6bc","parent":"ac97f0c5-54ad-4514-8b0f-26f3f7625fab","pid":39992,"argv":["/home/gitpod/.nvm/versions/node/v10.16.3/bin/node","/workspace/ffmpeg.js/src/worker-script/node/index.js"],"execArgv":[],"cwd":"/workspace/ffmpeg.js","time":1573045323607,"ppid":39980,"root":"630f7ff5-edef-40ca-a866-9e846d6f801b","coverageFilename":"/workspace/ffmpeg.js/.nyc_output/45c92447-c5fe-427b-b3d9-e27dc182d6bc.json","files":["/workspace/ffmpeg.js/src/worker-script/node/index.js","/workspace/ffmpeg.js/src/worker-script/index.js","/workspace/ffmpeg.js/src/worker-script/constants/defaultArgs.js","/workspace/ffmpeg.js/src/worker-script/node/getCore.js"]}

View File

@ -0,0 +1 @@
{"uuid":"ac97f0c5-54ad-4514-8b0f-26f3f7625fab","parent":null,"pid":39980,"argv":["/home/gitpod/.nvm/versions/node/v10.16.3/bin/node","/workspace/ffmpeg.js/node_modules/.bin/mocha","--exit","--bail","--require","./scripts/test-helper.js","./tests/ffmpeg.test.js"],"execArgv":[],"cwd":"/workspace/ffmpeg.js","time":1573045322692,"ppid":39971,"root":"630f7ff5-edef-40ca-a866-9e846d6f801b","coverageFilename":"/workspace/ffmpeg.js/.nyc_output/ac97f0c5-54ad-4514-8b0f-26f3f7625fab.json","files":["/workspace/ffmpeg.js/scripts/test-helper.js","/workspace/ffmpeg.js/tests/constants.js","/workspace/ffmpeg.js/src/index.js","/workspace/ffmpeg.js/src/utils/log.js","/workspace/ffmpeg.js/src/createWorker.js","/workspace/ffmpeg.js/src/createJob.js","/workspace/ffmpeg.js/src/utils/getId.js","/workspace/ffmpeg.js/src/utils/resolvePaths.js","/workspace/ffmpeg.js/src/utils/getEnvironment.js","/workspace/ffmpeg.js/src/worker/node/index.js","/workspace/ffmpeg.js/src/worker/node/defaultOptions.js","/workspace/ffmpeg.js/src/constants/defaultOptions.js","/workspace/ffmpeg.js/src/worker/node/spawnWorker.js","/workspace/ffmpeg.js/src/worker/node/terminateWorker.js","/workspace/ffmpeg.js/src/worker/node/onMessage.js","/workspace/ffmpeg.js/src/worker/node/send.js","/workspace/ffmpeg.js/src/worker/node/loadMedia.js"]}

View File

@ -0,0 +1 @@
{"processes":{"ac97f0c5-54ad-4514-8b0f-26f3f7625fab":{"parent":null,"children":[]}},"files":{"/workspace/ffmpeg.js/scripts/test-helper.js":["ac97f0c5-54ad-4514-8b0f-26f3f7625fab"],"/workspace/ffmpeg.js/tests/constants.js":["ac97f0c5-54ad-4514-8b0f-26f3f7625fab"],"/workspace/ffmpeg.js/src/index.js":["ac97f0c5-54ad-4514-8b0f-26f3f7625fab"],"/workspace/ffmpeg.js/src/utils/log.js":["ac97f0c5-54ad-4514-8b0f-26f3f7625fab"],"/workspace/ffmpeg.js/src/createWorker.js":["ac97f0c5-54ad-4514-8b0f-26f3f7625fab"],"/workspace/ffmpeg.js/src/createJob.js":["ac97f0c5-54ad-4514-8b0f-26f3f7625fab"],"/workspace/ffmpeg.js/src/utils/getId.js":["ac97f0c5-54ad-4514-8b0f-26f3f7625fab"],"/workspace/ffmpeg.js/src/utils/resolvePaths.js":["ac97f0c5-54ad-4514-8b0f-26f3f7625fab"],"/workspace/ffmpeg.js/src/utils/getEnvironment.js":["ac97f0c5-54ad-4514-8b0f-26f3f7625fab"],"/workspace/ffmpeg.js/src/worker/node/index.js":["ac97f0c5-54ad-4514-8b0f-26f3f7625fab"],"/workspace/ffmpeg.js/src/worker/node/defaultOptions.js":["ac97f0c5-54ad-4514-8b0f-26f3f7625fab"],"/workspace/ffmpeg.js/src/constants/defaultOptions.js":["ac97f0c5-54ad-4514-8b0f-26f3f7625fab"],"/workspace/ffmpeg.js/src/worker/node/spawnWorker.js":["ac97f0c5-54ad-4514-8b0f-26f3f7625fab"],"/workspace/ffmpeg.js/src/worker/node/terminateWorker.js":["ac97f0c5-54ad-4514-8b0f-26f3f7625fab"],"/workspace/ffmpeg.js/src/worker/node/onMessage.js":["ac97f0c5-54ad-4514-8b0f-26f3f7625fab"],"/workspace/ffmpeg.js/src/worker/node/send.js":["ac97f0c5-54ad-4514-8b0f-26f3f7625fab"],"/workspace/ffmpeg.js/src/worker/node/loadMedia.js":["ac97f0c5-54ad-4514-8b0f-26f3f7625fab"]},"externalIds":{}}

1186
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -10,8 +10,14 @@
"start": "node scripts/server.js",
"build": "rimraf dist && webpack --config scripts/webpack.config.prod.js",
"prepublishOnly": "npm run build",
"test": "mocha",
"lint": "eslint src"
"lint": "eslint src",
"wait": "rimraf dist && wait-on http://localhost:3000/dist/ffmpeg.dev.js",
"test": "npm-run-all -p -r start test:all",
"test:all": "npm-run-all wait test:browser:* test:node:all",
"test:node": "nyc mocha --exit --bail --require ./scripts/test-helper.js",
"test:node:all": "npm run test:node -- ./tests/*.test.js",
"test:browser": "mocha-headless-chrome -a incognito -a no-sandbox -a disable-setuid-sandbox -a disable-logging -t 300000",
"test:browser:ffmpeg": "npm run test:browser -- -f ./tests/ffmpeg.test.html"
},
"browser": {
"./src/worker/node/index.js": "./src/worker/browser/index.js"
@ -46,8 +52,13 @@
"eslint": "^6.1.0",
"eslint-config-airbnb-base": "^14.0.0",
"eslint-plugin-import": "^2.18.2",
"expect.js": "^0.3.1",
"express": "^4.17.1",
"mocha": "^6.2.2",
"mocha-headless-chrome": "^2.0.3",
"npm-run-all": "^4.1.5",
"nyc": "^14.1.1",
"wait-on": "^3.3.0",
"webpack": "^4.41.2",
"webpack-cli": "^3.3.9",
"webpack-dev-middleware": "^3.7.2"

8
scripts/test-helper.js Normal file
View File

@ -0,0 +1,8 @@
const constants = require('../tests/constants');
global.expect = require('expect.js');
global.FFmpeg = require('../src');
Object.keys(constants).forEach((key) => {
global[key] = constants[key];
});

View File

@ -34,7 +34,7 @@ const loadMedia = async (image) => {
.map((c) => c.charCodeAt(0));
} else {
const res = await fetch(resolveURL(image));
data = res.arrayBuffer();
data = await res.arrayBuffer();
}
} else if (image instanceof File || image instanceof Blob) {
data = await readFromBlobOrFile(image);

View File

@ -14,7 +14,7 @@ module.exports = async (media) => {
if (typeof media === 'string') {
if (isURL(media) || media.startsWith('chrome-extension://') || media.startsWith('file://')) {
const res = await fetch(media);
data = res.arrayBuffer();
data = await res.arrayBuffer();
} else if (/data:media\/([a-zA-Z]*);base64,([^"]*)/.test(media)) {
data = Buffer.from(media.split(',')[1], 'base64');
} else {

6
tests/.eslintrc Normal file
View File

@ -0,0 +1,6 @@
{
"rules": {
"no-undef": 0,
"camelcase": 0
}
}

18
tests/constants.js Normal file
View File

@ -0,0 +1,18 @@
const TIMEOUT = 30000;
const BASE_URL = 'http://localhost:3000/tests/assets';
const IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';
const OPTIONS = {
corePath: '../node_modules/@ffmpeg/core/ffmpeg-core.js',
...(IS_BROWSER ? { workerPath: '../dist/worker.dev.js' } : {}),
};
const FLAME_MP4_LENGTH = 100374;
if (typeof module !== 'undefined') {
module.exports = {
TIMEOUT,
BASE_URL,
IS_BROWSER,
OPTIONS,
FLAME_MP4_LENGTH,
};
}

20
tests/ffmpeg.test.html Normal file
View File

@ -0,0 +1,20 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>FFmpeg Unit Test</title>
<link rel="stylesheet" href="../node_modules/mocha/mocha.css">
</head>
<body>
<div id="mocha"></div>
<script src="../node_modules/mocha/mocha.js"></script>
<script src="../node_modules/expect.js/index.js"></script>
<script src="../dist/ffmpeg.dev.js"></script>
<script src="./constants.js"></script>
<script>mocha.setup('bdd');</script>
<script src="./ffmpeg.test.js"></script>
<script>
mocha.run();
</script>
</body>
</html>

22
tests/ffmpeg.test.js Normal file
View File

@ -0,0 +1,22 @@
const { createWorker } = FFmpeg;
const worker = createWorker(OPTIONS);
before(async function cb() {
this.timeout(0);
await worker.load();
});
describe('transcode()', () => {
describe('should transcode different format', () => {
['flame.avi'].forEach((name) => (
it(`transcode ${name}`, async () => {
await worker.write(name, `${BASE_URL}/${name}`);
await worker.transcode(name, 'output.mp4');
await worker.remove(name);
const { data } = await worker.read('output.mp4');
await worker.remove('output.mp4');
expect(data.length).to.be(FLAME_MP4_LENGTH);
}).timeout(TIMEOUT)
));
});
});