Start · Sprachen · JavaScript · Referenz · EncodedAudioChunk.duration

EncodedAudioChunk.duration

Eigenschaft

Schreibgeschützte Eigenschaft, die die Dauer eines kodierten Audio-Chunks in Mikrosekunden als ganze Zahl liefert, oder <code>null</code>, wenn keine Dauer angegeben wurde.

seit JavaScript WebCodecs API – Chrome/Edge 94+, Safari 26+, Firef Kategorie: webapi

Signatur

EncodedAudioChunk.duration

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

Typ
number | null
Beschreibung
Ganze Zahl (unsigned long long) mit der Dauer in Mikrosekunden oder 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
20000 20 ms

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);
null 0

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`);
Chunk @ 0 µs, Dauer 20000 µs … Gesamt: 1.00 s

// Wichtig · Fallstricke

  • Einheit: Mikrosekunden, nicht Millisekunden. Für Anzeigen durch 1000 (ms) bzw. 1 000 000 (s) teilen.
  • null möglich: Prüfen Sie den Wert immer, z. B. mit ?? 0, bevor Sie damit rechnen. Sonst entsteht beim Addieren NaN bzw. bei null + x ein 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.