Skip to content

Commit

Permalink
Merge e58159e into 5e1ccf6
Browse files Browse the repository at this point in the history
  • Loading branch information
thijstriemstra committed Jan 24, 2021
2 parents 5e1ccf6 + e58159e commit 9538f0a
Show file tree
Hide file tree
Showing 10 changed files with 327 additions and 47 deletions.
10 changes: 10 additions & 0 deletions build-config/fragments/dev.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,16 @@ module.exports = {
console.log(colors.green(' [examples] wasm mime-type handler ready'));
console.log('');

// ========================================================
// use proper headers for SharedArrayBuffer on Firefox
// see https://github.com/ffmpegwasm/ffmpeg.wasm/issues/102
// ========================================================
app.use((req, res, next) => {
res.header('Cross-Origin-Opener-Policy', 'same-origin');
res.header('Cross-Origin-Embedder-Policy', 'require-corp');
next();
});

// =============================================
// file upload handler for simple upload example
// =============================================
Expand Down
104 changes: 104 additions & 0 deletions examples/plugins/video-only-ffmpegwasm.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>ffmpeg.wasm video-only example - Record Plugin for Video.js</title>

<link href="../../node_modules/video.js/dist/video-js.min.css" rel="stylesheet">
<link href="../../dist/css/videojs.record.css" rel="stylesheet">
<link href="../assets/css/examples.css" rel="stylesheet">

<script src="../../node_modules/video.js/dist/video.min.js"></script>
<script src="../../node_modules/recordrtc/RecordRTC.js"></script>
<script src="../../node_modules/webrtc-adapter/out/adapter.js"></script>
<script src="../../node_modules/@ffmpeg/ffmpeg/dist/ffmpeg.min.js"></script>

<script src="../../dist/videojs.record.js"></script>
<script src="../../dist/plugins/videojs.record.ffmpeg-wasm.js"></script>

<script src="../browser-workarounds.js"></script>

<style>
/* change player background color */
#myVideo {
background-color: #F5BDAB;
}
</style>
</head>
<body>

<video id="myVideo" playsinline class="video-js vjs-default-skin"></video>

<script>
/* eslint-disable */
var options = {
controls: true,
width: 320,
height: 240,
fluid: false,
bigPlayButton: false,
controlBar: {
volumePanel: false
},
plugins: {
record: {
audio: false,
video: true,
maxLength: 20,
debug: true,
displayMilliseconds: false,
convertEngine: 'ffmpeg.wasm',
// convert recorded data to MP3
convertOptions: ['-f', 'mp3', '-codec:a', 'libmp3lame', '-qscale:a', '2'],
// specify MP3 output mime-type
pluginLibraryOptions: {
outputType: 'audio/mpeg'
},
convertWorkerURL: '../../node_modules/@ffmpeg/core/dist/ffmpeg-core.js'
}
}
};

// apply some workarounds for opera browser
applyVideoWorkaround();

var player = videojs('myVideo', options, function() {
// print version information at startup
videojs.log('Using video.js', videojs.VERSION,
'with videojs-record', videojs.getPluginVersion('record'),
'and recordrtc', RecordRTC.version);
});
// error handling
player.on('deviceError', function() {
console.log('device error:', player.deviceErrorCode);
});
player.on('error', function(element, error) {
console.error(error);
});

// user clicked the record button and started recording
player.on('startRecord', function() {
console.log('started recording!');
});

// converter started processing
player.on('startConvert', function() {
console.log('started converting!');
});

// user completed recording and stream is available
player.on('finishRecord', function() {
// the blob object contains the recorded data that
// can be downloaded by the user, stored on server etc.
console.log('finished recording: ', player.recordedData);
});

// converter completed and stream is available
player.on('finishConvert', function() {
// the convertedData object contains the recorded data that
// can be downloaded by the user, stored on server etc.
console.log('finished converting: ', player.convertedData);
});
</script>
</body>
</html>
133 changes: 94 additions & 39 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -78,10 +78,16 @@
"webrtc-adapter": ">=7.7.0"
},
"devDependencies": {
"@babel/core": "^7.12.3",
"@babel/plugin-transform-runtime": "^7.12.1",
"@babel/preset-env": "^7.12.1",
"@babel/register": "^7.12.1",
"@babel/core": "^7.12.10",
"@babel/plugin-transform-runtime": "^7.12.10",
"@babel/preset-env": "^7.12.11",
"@babel/register": "^7.12.10",
"@ffmpeg/core": "^0.8.4",
"@ffmpeg/ffmpeg": "^0.9.5",
"@mattiasbuelens/web-streams-polyfill": "^0.3.2",
"add-zero": "^1.0.0",
"babel-loader": "^8.2.2",
Expand Down
4 changes: 2 additions & 2 deletions src/js/defaults.js
Original file line number Diff line number Diff line change
Expand Up @@ -120,8 +120,8 @@ const pluginDefaultOptions = {
imageOutputQuality: 0.92,
// Accepts numbers in milliseconds; use this to force intervals-based blobs.
timeSlice: 0,
// Media converter library to use. Legal values are 'ts-ebml' and 'ffmpeg.js'.
// Use an empty string '' to disable (default).
// Media converter library to use. Legal values are 'ts-ebml', 'ffmpeg.wasm'
// and 'ffmpeg.js'. Use an empty string '' to disable (default).
convertEngine: '',
// URL for the converter worker.
convertWorkerURL: '',
Expand Down
5 changes: 3 additions & 2 deletions src/js/engine/convert-engine.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,10 @@ const Component = videojs.getComponent('Component');
// supported convert plugin engines
const TSEBML = 'ts-ebml';
const FFMPEGJS = 'ffmpeg.js';
const FFMPEGWASM = 'ffmpeg.wasm';

// all convert plugins
const CONVERT_PLUGINS = [TSEBML, FFMPEGJS];
const CONVERT_PLUGINS = [TSEBML, FFMPEGJS, FFMPEGWASM];

/**
* Base class for converter backends.
Expand Down Expand Up @@ -76,5 +77,5 @@ videojs.ConvertEngine = ConvertEngine;
Component.registerComponent('ConvertEngine', ConvertEngine);

export {
ConvertEngine, CONVERT_PLUGINS, TSEBML, FFMPEGJS
ConvertEngine, CONVERT_PLUGINS, TSEBML, FFMPEGJS, FFMPEGWASM
};

0 comments on commit 9538f0a

Please sign in to comment.