Start · Sprachen · JavaScript · Referenz · HTMLMediaElement.currentSrc

HTMLMediaElement.currentSrc

Eigenschaft

Schreibgeschützte Eigenschaft, die die absolute URL der tatsächlich ausgewählten Medienressource eines <code>&lt;audio&gt;</code>- oder <code>&lt;video&gt;</code>-Elements liefert.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

HTMLMediaElement.currentSrc

Beschreibung

currentSrc gibt als String die absolute URL der Medienressource zurück, die der Browser für ein <audio>- oder <video>-Element ausgewählt hat. Wenn keine Ressource ausgewählt ist, enthält sie einen leeren String "".

Besonders nützlich wird die Eigenschaft, wenn mehrere <source>-Kindelemente angegeben sind. Der Browser prüft sie der Reihe nach anhand von type und media und nimmt die erste passende Quelle. currentSrc zeigt dann, welche Datei tatsächlich geladen wird, etwa WebM oder MP4. Die Eigenschaft src dagegen gibt nur den Wert des src-Attributs zurück und bleibt bei der Verwendung von <source>-Elementen leer.

Der Wert wird im Rahmen des Ressourcen-Auswahlalgorithmus gesetzt, also nach dem Einfügen des Elements oder nach einem Aufruf von load(). Frühestens ab dem Ereignis loadstart ist er verlässlich verfügbar. Die Eigenschaft eignet sich gut für Analyse und Protokollierung, für die Fehlersuche bei der Formatwahl und um die gewählte Qualitätsstufe in der Oberfläche anzuzeigen.

Wird die Ressource über srcObject gesetzt, etwa ein MediaStream oder ein MediaSource-Objekt, ist currentSrc ein leerer String.

Rückgabewert

Typ
string
Beschreibung
Die absolute URL der ausgewählten Medienressource oder "", wenn keine Ressource ausgewählt ist bzw. srcObject verwendet wird.

Beispiele

Gewählte Quelle bei mehreren <source>-Elementen ermitteln

// HTML:
// <video id="clip" controls>
//   <source src="/media/intro.webm" type="video/webm">
//   <source src="/media/intro.mp4" type="video/mp4">
// </video>

const video = document.querySelector('#clip');

video.addEventListener('loadstart', () => {
  console.log('src-Attribut:', JSON.stringify(video.src));
  console.log('Gewählte Quelle:', video.currentSrc);
});
src-Attribut: "" Gewählte Quelle: https://example.com/media/intro.webm

Relative src wird zu absoluter URL aufgelöst

const audio = new Audio('sounds/ping.mp3');

console.log('Sofort:', JSON.stringify(audio.currentSrc));

audio.addEventListener('loadedmetadata', () => {
  console.log('Nach dem Laden:', audio.currentSrc);
}, { once: true });
Sofort: "" Nach dem Laden: https://example.com/sounds/ping.mp3

Gewähltes Format für die Analyse protokollieren

const reportFormat = (media) => {
  const url = new URL(media.currentSrc);
  const extension = url.pathname.split('.').pop();
  console.log(`Format: ${extension}, Dauer: ${media.duration.toFixed(1)} s`);
};

const video = document.querySelector('video');

if (video.currentSrc && video.readyState >= HTMLMediaElement.HAVE_METADATA) {
  reportFormat(video);
} else {
  video.addEventListener('loadedmetadata', () => reportFormat(video), { once: true });
}
Format: webm, Dauer: 42.3 s

Leerer Wert bei srcObject

const video = document.querySelector('video');

const stream = await navigator.mediaDevices.getUserMedia({ video: true });
video.srcObject = stream;
await video.play();

console.log(JSON.stringify(video.currentSrc));
""

// Wichtig · Fallstricke

  • Nur lesbar: Eine Zuweisung an currentSrc hat keine Wirkung, im strikten Modus löst sie einen TypeError aus. Eine neue Quelle setzt man über src, srcObject oder geänderte <source>-Elemente mit anschließendem load().
  • Zeitpunkt: Direkt nach dem Erzeugen des Elements oder nach dem Ändern von src kann der Wert noch leer oder veraltet sein, weil die Ressourcenauswahl asynchron abläuft. Man sollte ihn deshalb erst in loadstart, loadedmetadata oder später auslesen.
  • Unterschied zu src: src spiegelt nur das Attribut wider. currentSrc ist das tatsächliche Ergebnis der Auswahl.
  • Kein Nachweis für erfolgreiches Laden: Auch wenn das Laden später scheitert, kann currentSrc gesetzt sein. Zur Prüfung dienen zusätzlich error, networkState oder das error-Ereignis.
  • Blob- und MSE-URLs: Bei URL.createObjectURL() steht dort eine blob:-URL. Bei srcObject ist der Wert leer.
  • Kompatibilität: Wird von allen modernen Browsern unterstützt, auch mobil, und ist seit HTML5 Standard.