Signatur
Beschreibung
Die Eigenschaft duration eines EncodedAudioChunk gibt an, wie lange das enthaltene, kodierte Audio abgespielt wird. Die Angabe erfolgt in Mikrosekunden (1 Sekunde = 1 000 000 µs), genau wie bei timestamp.
Der Wert stammt aus dem Feld duration des Init-Objekts, das dem Konstruktor new EncodedAudioChunk(init) übergeben wurde. Chunks, die ein AudioEncoder erzeugt, bekommen die Dauer normalerweise automatisch vom Encoder. Wurde beim manuellen Erzeugen keine Dauer übergeben, ist der Wert null.
Praktisch brauchen Sie duration vor allem beim Muxen (z. B. in WebM- oder MP4-Container), wenn Sie Pufferlängen berechnen, Wiedergabe- und Fortschrittsanzeigen bauen oder die Lücke bis zum nächsten Chunk prüfen (timestamp + duration).
Rückgabewert
null, wenn beim Erzeugen keine Dauer angegeben wurde.Beispiele
Dauer eines manuell erzeugten Chunks auslesen
// 20 ms Opus-Frame (Dummy-Daten)
const chunk = new EncodedAudioChunk({
type: 'key',
timestamp: 0,
duration: 20_000, // Mikrosekunden
data: new Uint8Array([0xfc, 0xff, 0xfe])
});
console.log(chunk.duration); // Mikrosekunden
console.log(chunk.duration / 1000, 'ms'); // Millisekunden
Fehlende Dauer erkennen
const chunk = new EncodedAudioChunk({
type: 'key',
timestamp: 40_000,
data: new Uint8Array(16)
});
// Ohne Angabe im Init-Objekt ist duration null
const dauer = chunk.duration ?? 0;
console.log(chunk.duration, dauer);
Gesamtdauer der Chunks eines AudioEncoders summieren
let gesamtUs = 0;
const encoder = new AudioEncoder({
output: (chunk) => {
gesamtUs += chunk.duration ?? 0;
console.log(`Chunk @ ${chunk.timestamp} µs, Dauer ${chunk.duration} µs`);
},
error: (e) => console.error(e)
});
encoder.configure({
codec: 'opus',
sampleRate: 48000,
numberOfChannels: 1,
bitrate: 64000
});
// Eine Sekunde Stille als AudioData
const samples = new Float32Array(48000);
encoder.encode(new AudioData({
format: 'f32',
sampleRate: 48000,
numberOfFrames: samples.length,
numberOfChannels: 1,
timestamp: 0,
data: samples
}));
await encoder.flush();
console.log(`Gesamt: ${(gesamtUs / 1e6).toFixed(2)} s`);
// Wichtig · Fallstricke
- Einheit: Mikrosekunden, nicht Millisekunden. Für Anzeigen durch 1000 (ms) bzw. 1 000 000 (s) teilen.
nullmöglich: Prüfen Sie den Wert immer, z. B. mit?? 0, bevor Sie damit rechnen. Sonst entsteht beim AddierenNaNbzw. beinull + xein falsches Ergebnis.- Die Eigenschaft ist schreibgeschützt. Ein Chunk ist unveränderlich. Um eine andere Dauer zu setzen, müssen Sie einen neuen Chunk erzeugen.
- Die Dauer vom Encoder kann je nach Codec und Implementierung leicht abweichen, z. B. durch Vorlauf-Samples (Pre-Skip) bei Opus oder Priming bei AAC.
- Kompatibilität: WebCodecs gibt es nur im sicheren Kontext (HTTPS) und in Window- und Worker-Umgebungen. Die Unterstützung unterscheidet sich je nach Browser. Prüfen Sie vorher mit
'EncodedAudioChunk' in globalThis.