syscycle's picture
Update index.html
e159372 verified
Raw
History Blame Contribute Delete
2.41 kB
<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>FLV Video Player (FFmpeg.wasm)</title>
<style>
body { font-family: sans-serif; text-align: center; padding: 20px; }
canvas { border: 1px solid #333; background: #000; max-width: 100%; }
</style>
</head>
<body>
<h2>FLV Video Oynatıcı</h2>
<input type="file" id="uploader" accept=".flv">
<br><br>
<canvas id="videoCanvas" width="640" height="360"></canvas>
<script type="module">
import { FFmpeg } from './index.js';
async function fetchFile(fileOrUrl) {
if (fileOrUrl instanceof File) {
return new Uint8Array(await fileOrUrl.arrayBuffer());
}
const response = await fetch(fileOrUrl);
return new Uint8Array(await response.arrayBuffer());
}
const canvas = document.getElementById('videoCanvas');
const ctx = canvas.getContext('2d');
const uploader = document.getElementById('uploader');
const ffmpeg = new FFmpeg();
uploader.addEventListener('change', async (e) => {
const file = e.target.files[0];
if (!file) return;
await ffmpeg.load({
coreURL: 'https://unpkg.com/@ffmpeg/core@0.12.6/dist/esm/ffmpeg-core.js',
wasmURL: 'https://unpkg.com/@ffmpeg/core@0.12.6/dist/esm/ffmpeg-core.wasm'
});
const data = await fetchFile(file);
await ffmpeg.writeFile('input.flv', data);
await ffmpeg.exec(['-i', 'input.flv', '-f', 'rawvideo', '-pix_fmt', 'rgba', '-r', '24', 'out_%04d.raw']);
playFrames();
});
async function playFrames() {
let frameIdx = 1;
const render = async () => {
const filename = `out_${String(frameIdx).padStart(4, '0')}.raw`;
try {
const data = await ffmpeg.readFile(filename);
const imageData = new ImageData(new Uint8ClampedArray(data.buffer), 640, 360);
ctx.putImageData(imageData, 0, 0);
frameIdx++;
setTimeout(render, 41);
} catch (e) { console.log("Bitti."); }
};
render();
}
</script>
</body>
</html>