web/libav: simplify reading probe data
This commit is contained in:
parent
3189857c77
commit
3232c4a51b
1 changed files with 4 additions and 20 deletions
|
@ -28,38 +28,22 @@ export default class LibAVWrapper {
|
||||||
if (!this.libav) throw new Error("LibAV wasn't initialized");
|
if (!this.libav) throw new Error("LibAV wasn't initialized");
|
||||||
const libav = await this.libav;
|
const libav = await this.libav;
|
||||||
|
|
||||||
const OUT_FILE = 'output.json';
|
|
||||||
await libav.mkreadaheadfile('input', blob);
|
await libav.mkreadaheadfile('input', blob);
|
||||||
await libav.mkwriterdev(OUT_FILE);
|
|
||||||
|
|
||||||
let writtenData = new Uint8Array(0);
|
|
||||||
|
|
||||||
libav.onwrite = (name, pos, data) => {
|
|
||||||
if (name !== OUT_FILE) return;
|
|
||||||
|
|
||||||
const newLen = Math.max(pos + data.length, writtenData.length);
|
|
||||||
if (newLen > writtenData.length) {
|
|
||||||
const newData = new Uint8Array(newLen);
|
|
||||||
newData.set(writtenData);
|
|
||||||
writtenData = newData;
|
|
||||||
}
|
|
||||||
writtenData.set(data, pos);
|
|
||||||
};
|
|
||||||
|
|
||||||
await libav.ffprobe([
|
await libav.ffprobe([
|
||||||
'-v', 'quiet',
|
'-v', 'quiet',
|
||||||
'-print_format', 'json',
|
'-print_format', 'json',
|
||||||
'-show_format',
|
'-show_format',
|
||||||
'-show_streams',
|
'-show_streams',
|
||||||
'input',
|
'input',
|
||||||
'-o', OUT_FILE
|
'-o', 'output.json'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
await libav.unlink(OUT_FILE);
|
|
||||||
await libav.unlinkreadaheadfile('input');
|
await libav.unlinkreadaheadfile('input');
|
||||||
|
|
||||||
const copy = new Uint8Array(writtenData);
|
const copy = await libav.readFile('output.json');
|
||||||
const text = new TextDecoder().decode(copy);
|
const text = new TextDecoder().decode(copy);
|
||||||
|
await libav.unlink('output.json');
|
||||||
|
|
||||||
return JSON.parse(text) as FfprobeData;
|
return JSON.parse(text) as FfprobeData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue