Skip to content

Commit

Permalink
App: Create mkv player
Browse files Browse the repository at this point in the history
This uses a custom ffmpeg-wasm.core version to fix usage on iOS.

The custom version can be found here: ffmpegwasm/ffmpeg.wasm-core#15

Signed-off-by: kingbri <bdashore3@gmail.com>
  • Loading branch information
bdashore3 committed Jun 27, 2022
1 parent 248e707 commit c946ba6
Show file tree
Hide file tree
Showing 10 changed files with 11,769 additions and 15,198 deletions.
3 changes: 0 additions & 3 deletions .gitpod.yml

This file was deleted.

15,184 changes: 0 additions & 15,184 deletions package-lock.json

This file was deleted.

2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@
"version": "0.1.0",
"private": true,
"dependencies": {
"@ffmpeg/core": "^0.10.0",
"@ffmpeg/ffmpeg": "^0.9.3",
"@testing-library/jest-dom": "^4.2.4",
"@testing-library/react": "^9.3.2",
"@testing-library/user-event": "^7.1.2",
"react": "^16.13.1",
"react-dom": "^16.13.1",
"react-hook-videojs": "^2.1.0-beta.1",
"react-scripts": "3.4.1"
},
"scripts": {
Expand Down
254 changes: 254 additions & 0 deletions public/ffmpeg/ffmpeg-core.js

Large diffs are not rendered by default.

Binary file added public/ffmpeg/ffmpeg-core.wasm
Binary file not shown.
1 change: 1 addition & 0 deletions public/ffmpeg/ffmpeg-core.worker.js

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

Binary file removed public/flame.avi
Binary file not shown.
3 changes: 0 additions & 3 deletions public/robots.txt

This file was deleted.

64 changes: 56 additions & 8 deletions src/App.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,75 @@ import { createFFmpeg, fetchFile } from '@ffmpeg/ffmpeg';
import './App.css';

function App() {
const [showVideoPlayer, setShowVideoPlayer] = useState(false);
const [videoSrc, setVideoSrc] = useState('');
const [message, setMessage] = useState('Click Start to transcode');
const [subsSrc, setSubsSrc] = useState('');
const [message, setMessage] = useState('Add a URL and click start to remux to mp4');
const [url, setUrl] = useState('')
const ffmpeg = createFFmpeg({
corePath: '/ffmpeg/ffmpeg-core.js',
log: true,
progress: (p) => {
console.log(p)
}
});
const doTranscode = async () => {

async function doTranscode() {
setMessage('Loading ffmpeg-core.js');
await ffmpeg.load();
setMessage('Start transcoding');
ffmpeg.FS('writeFile', 'test.avi', await fetchFile('/flame.avi'));
await ffmpeg.run('-i', 'test.avi', 'test.mp4');
setMessage('Complete transcoding');

setMessage('FFmpeg loaded');
setMessage('Fetching your video file')
let file = await fetchFile(url)

ffmpeg.FS('writeFile', 'test.mkv', file);
setMessage('Remuxing started')
await ffmpeg.run(
'-i',
'test.mkv',
'-map',
'0:s',
'subs.vtt',
'-map',
'0:v',
'-map',
'0:a:0',
'-c',
'copy',
'test.mp4'
);

setMessage('Remuxing complete');

const data = ffmpeg.FS('readFile', 'test.mp4');
setVideoSrc(URL.createObjectURL(new Blob([data.buffer], { type: 'video/mp4' })));

const subs = ffmpeg.FS('readFile', 'subs.vtt');
setSubsSrc(URL.createObjectURL(new Blob([subs], { type: 'text/vtt' })));

setShowVideoPlayer(true)
};

function handleURLChange(e) {
setUrl(e.target.value)
}

return (
<div className="App">
<p/>
<video src={videoSrc} controls></video><br/>
<p />
<label>
Enter URL: <input type="text" value={url} onChange={handleURLChange}></input>
</label>
<button onClick={doTranscode}>Start</button>
<p>{message}</p>
{ showVideoPlayer &&
<div>
<br/>
<video src={videoSrc} controls>
<track label="English" kind="subtitles" srclang="en" src={subsSrc} default></track>
</video>
</div>
}
</div>
);
}
Expand Down
Loading

0 comments on commit c946ba6

Please sign in to comment.