mirror of
https://github.com/arcodange-org/mediabunny.git
synced 2026-09-27 19:03:46 +02:00
* Add custom quality factors and quantizer bitrate mode (closes #327) * Fix quantizer mode fallback and per-frame quantizer edge cases * Clean up quantizer mode tests * Quantizer implementation * Add quality tests * Improve conversion codec error message, make test more lenient * Add quantizer support blog post --------- Co-authored-by: Vanilagy <[email protected]>
61 lines
1.5 KiB
TypeScript
61 lines
1.5 KiB
TypeScript
import { expect, test } from 'vitest';
|
|
import { Output } from '../../src/output.js';
|
|
import { HlsOutputFormat, MpegTsOutputFormat } from '../../src/output-format.js';
|
|
import { BufferTarget, PathedTarget } from '../../src/target.js';
|
|
import { CanvasSource } from '../../src/media-source.js';
|
|
import { Quality } from '../../src/encode.js';
|
|
|
|
test('HLS output, key frames aligning with segment boundaries by default', async () => {
|
|
let playlistText: string | null = null;
|
|
|
|
const output = new Output({
|
|
format: new HlsOutputFormat({
|
|
segmentFormat: new MpegTsOutputFormat(),
|
|
onPlaylist: (text) => { playlistText = text; },
|
|
}),
|
|
target: new PathedTarget('', () => new BufferTarget()),
|
|
});
|
|
|
|
const canvas = new OffscreenCanvas(640, 480);
|
|
const ctx = canvas.getContext('2d')!;
|
|
ctx.fillStyle = '#ff0000';
|
|
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
|
|
|
const videoSource = new CanvasSource(canvas, {
|
|
codec: 'avc',
|
|
quality: new Quality('high'),
|
|
});
|
|
output.addVideoTrack(videoSource);
|
|
|
|
await output.start();
|
|
|
|
const fps = 2;
|
|
const frameDuration = 1 / fps;
|
|
const totalFrames = 10 * fps;
|
|
for (let i = 0; i < totalFrames; i++) {
|
|
await videoSource.add(i * frameDuration, frameDuration);
|
|
}
|
|
|
|
await output.finalize();
|
|
|
|
expect(playlistText).toBe(`#EXTM3U
|
|
#EXT-X-VERSION:3
|
|
#EXT-X-PLAYLIST-TYPE:VOD
|
|
#EXT-X-TARGETDURATION:2
|
|
#EXT-X-INDEPENDENT-SEGMENTS
|
|
|
|
#EXTINF:2,
|
|
segment-1-1.ts
|
|
#EXTINF:2,
|
|
segment-1-2.ts
|
|
#EXTINF:2,
|
|
segment-1-3.ts
|
|
#EXTINF:2,
|
|
segment-1-4.ts
|
|
#EXTINF:2,
|
|
segment-1-5.ts
|
|
|
|
#EXT-X-ENDLIST
|
|
`);
|
|
});
|