Signatur
Beschreibung
Die schreibgeschützte Eigenschaft startTime der Schnittstelle ChapterInformation gibt an, an welcher Stelle der Wiedergabe ein Kapitel beginnt. Der Wert ist eine Zahl in Sekunden, gemessen ab dem Anfang des Mediums, und kann Nachkommastellen haben (z. B. 90.5).
ChapterInformation-Objekte werden nicht direkt erzeugt. Sie entstehen, wenn Sie beim Konstruktor new MediaMetadata() im Feld chapterInfo ein Array von Kapitel-Beschreibungen ({ title, startTime, artwork }) übergeben. Über navigator.mediaSession.metadata.chapterInfo erhalten Sie anschließend ein eingefrorenes Array mit ChapterInformation-Instanzen, deren startTime Sie auslesen können.
Der Browser kann die Kapitel in seinen Medien-Bedienelementen anzeigen, etwa in der globalen Mediensteuerung oder auf dem Sperrbildschirm. In Ihrem eigenen Code brauchen Sie startTime meist, um zu einem Kapitel zu springen (audio.currentTime = chapter.startTime) oder um aus der aktuellen Position das gerade laufende Kapitel zu bestimmen.
Rückgabewert
startTime, ist der Wert 0.Beispiele
Kapitel anlegen und Startzeiten auslesen
const supportsChapters = 'mediaSession' in navigator &&
'chapterInfo' in MediaMetadata.prototype;
if (supportsChapters) {
navigator.mediaSession.metadata = new MediaMetadata({
title: 'Podcast #42: Web-APIs',
artist: 'programmierung.net',
chapterInfo: [
{ title: 'Intro', startTime: 0 },
{ title: 'Media Session API', startTime: 95.5 },
{ title: 'Fazit', startTime: 1720 }
]
});
for (const chapter of navigator.mediaSession.metadata.chapterInfo) {
console.log(`${chapter.title}: ${chapter.startTime} s`);
}
}
Kapitel-Navigation für einen Audio-Player bauen
const audio = document.querySelector('audio');
const list = document.querySelector('#kapitel');
const formatTime = (s) =>
`${Math.floor(s / 60)}:${String(Math.floor(s % 60)).padStart(2, '0')}`;
const { chapterInfo } = navigator.mediaSession.metadata;
for (const chapter of chapterInfo) {
const button = document.createElement('button');
button.textContent = `${formatTime(chapter.startTime)} – ${chapter.title}`;
button.addEventListener('click', () => {
audio.currentTime = chapter.startTime; // zum Kapitelanfang springen
audio.play();
});
list.append(button);
}
Aktuelles Kapitel anhand der Wiedergabeposition ermitteln
const audio = document.querySelector('audio');
const getCurrentChapter = (time) => {
const chapters = [...navigator.mediaSession.metadata.chapterInfo]
.sort((a, b) => a.startTime - b.startTime);
// letztes Kapitel, dessen Start vor oder auf der aktuellen Zeit liegt
return chapters.findLast((c) => c.startTime <= time) ?? null;
};
audio.addEventListener('timeupdate', () => {
const current = getCurrentChapter(audio.currentTime);
if (current) {
document.title = `▶ ${current.title}`;
}
});
// Wichtig · Fallstricke
- Experimentell:
chapterInfoundChapterInformationwerden bisher nur von Chromium-basierten Browsern (Chrome, Edge) unterstützt. Firefox und Safari unterstützen die Media Session API zwar, aber keine Kapitel. Prüfen Sie die Unterstützung vorher, z. B. mit'chapterInfo' in MediaMetadata.prototype. - Schreibgeschützt: Eine Zuweisung an
chapter.startTimewird stillschweigend ignoriert (im Strict Mode gibt es einenTypeError). Wollen Sie Kapitel ändern, weisen Sienavigator.mediaSession.metadataein neuesMediaMetadata-Objekt zu. - Der Browser sortiert die Kapitel nicht und prüft auch nicht, ob sie zur Mediendauer passen. Sortieren Sie selbst nach
startTimeund achten Sie darauf, dass kein Wert größer alsdurationdes Mediums ist. - Die Einheit ist Sekunden und nicht Millisekunden. Daher passt der Wert direkt zu
HTMLMediaElement.currentTime. - Kapitel in den Browser-Bedienelementen erscheinen nur, wenn eine aktive Media Session läuft, das Medium also gerade abgespielt wird.