/**
 * @file media-error.js
 * /
importiere {assign, isObject} aus '. /utils/obj ';

/**
 * Eine benutzerdefinierte `MediaError`-Klasse, die die standardmäßige HTML5-`MediaError`-Klasse nachahmt.
 *
 * @param {number|string|object|mediaError} -Wert
 * Dies kann von mehreren Typen sein:
 * - Zahl: sollte ein Standardfehlercode sein
 * - string: eine Fehlermeldung (der Code wird 0 sein)
 * - Objekt: beliebige Eigenschaften
 * - `MediaError` (native): Wird verwendet, um ein `MediaError`-Objekt von video.js zu füllen
 * - `MediaError` (video.js): gibt sich selbst zurück, wenn es bereits ein
 * video.js `MediaError`-Objekt.
 *
 * @see [MediaError-Spezifikation] {@link https://dev.w3.org/html5/spec-author-view/video.html#mediaerror}
 * @see [Verschlüsselte Medienfehlerspezifikation] {@link https://www.w3.org/TR/2013/WD-encrypted-media-20130510/#error-codes}
 *
 * @class Medienfehler
 * /
Funktion MediaError (Wert) {

  //Erlaube redundante Aufrufe an diesen Konstruktor, um `instanceof` zu vermeiden
  //Checks rund um den Code.
  if (Wert-Instanz von MediaError) {
    rückgabewert;
  }

  if (Werttyp === 'Zahl') {
    this.code = Wert;
  } sonst wenn (Wertetyp === 'Zeichenfolge') {
    //Der Standardcode ist Null, das ist also ein benutzerdefinierter Fehler
    this.message = Wert;
  } sonst wenn (isObject (value)) {

    //Wir weisen die Eigenschaft `code` manuell zu, da es sich um native `MediaError`-Objekte handelt
    //mache es nicht als eigene/aufzählbare Eigenschaft des Objekts verfügbar.
    if (typeof value.code === 'Zahl') {
      this.code = wert.code;
    }

    zuweisen (dies, Wert);
  }

  wenn (! diese.nachricht) {
    this.message = MediaError.defaultMessages [this.code] || „;
  }
}

/**
 * Der Fehlercode, der sich auf zwei der definierten `MediaError`-Typen bezieht
 *
 * @Typ {Zahl}
 * /
MediaError.prototype.code = 0;

/**
 * Eine optionale Meldung, die bei dem Fehler angezeigt werden soll. Nachricht ist nicht Teil des HTML5
 * Videospezifikation, ermöglicht jedoch informativere benutzerdefinierte Fehler.
 *
 * @type {Zeichenfolge}
 * /
mediaError.prototype.message = „;

/**
 * Ein optionaler Statuscode, der durch Plugins gesetzt werden kann, um noch mehr Details zu erhalten
 * der Fehler. Zum Beispiel könnte ein Plugin einen bestimmten HTTP-Statuscode und einen
 * Fehlermeldung für diesen Code. Wenn das Plugin dann diesen Fehler bekommt, wird diese Klasse
 * wissen, wie man dafür eine Fehlermeldung anzeigt. Dadurch kann eine benutzerdefinierte Nachricht angezeigt werden
 * oben auf dem `Player`-Fehler-Overlay.
 *
 * @Typ {Array}
 * /
MediaError.prototype.status = null;

/**
 * Nach dem W3C-Standard indexierte Fehler. Die Bestellung **KANN NICHT ÄNDERN**! Sehen Sie die
 * Die Spezifikation ist unter {@link MediaError} aufgeführt für weitere Informationen.
 *
 * @enum {array}
 * @readonly
 * @property {string} 0 - MEDIA_ERR_BENUTZERDEFINIERT
 * @property {string} 1 - MEDIA_ERR_ABORTED
 * @property {string} 2 - MEDIA_ERR_NETWORK
 * @property {string} 3 - MEDIA_ERR_DECODE
 * @property {string} 4 - MEDIA_ERR_SRC_NICHT UNTERSTÜTZT
 * @property {string} 5 - MEDIA_ERR_VERSCHLÜSSELT
 * /
mediaError.errorTypes = [
  'MEDIA_ERR_CUSTOM',
  'MEDIA_ERR_ABORTED',
  'MEDIA_ERR_NETWORK',
  'MEDIA_ERR_DECODE',
  'MEDIA_ERR_SRC_NOT_SUPPORTED',
  'MEDIA_ERR_VERSCHLÜSSELT'
];

/**
 * Die standardmäßigen `MediaError`-Meldungen basieren auf den {@link MediaError.errorTypes}.
 *
 * @Typ {Array}
 * @konstant
 * /
MediaError.defaultMessages = {
  1: 'Sie haben die Medienwiedergabe abgebrochen',
  2: 'Ein Netzwerkfehler führte dazu, dass der Mediendownload teilweise fehlschlug. ',
  3: 'Die Medienwiedergabe wurde aufgrund eines Korruptionsproblems oder weil die von Ihrem Browser verwendeten Medienfunktionen nicht unterstützt wurden, abgebrochen. ',
  4: 'Das Medium konnte nicht geladen werden, entweder weil der Server oder das Netzwerk ausgefallen ist oder weil das Format nicht unterstützt wird. ',
  5: „Die Medien sind verschlüsselt und wir haben nicht die Schlüssel, um sie zu entschlüsseln.“
};

//Füge Typen als Eigenschaften auf MediaError hinzu
//z. B. mediaError.media_err_src_not_supported = 4;
für (sei errNum = 0; errNum < mediaError.errorTypes.length; errNum++) {
  mediaError [MediaError.errorTypes [errNum]] = Fehlernummer;
  //Werte sollten sowohl in der Klasse als auch in der Instanz zugänglich sein
  mediaError.prototype [MediaError.errorTypes [errNum]] = Fehlernummer;
}

//jsdocs zum Instanz/statische Mitglieder wurden oben hinzugefügt
//Instanzmethoden verwenden `#` und statische Methoden verwenden ` . `
/**
 * W3C-Fehlercode für jeden benutzerdefinierten Fehler.
 *
 * @member Medienfehler #MEDIA_ERR_CUSTOM
 * @Konstante {Zahl}
 * @Standard 0
 * /
/**
 * W3C-Fehlercode für jeden benutzerdefinierten Fehler.
 *
 * @member MediaError.MEDIA_ERR_CUSTOM
 * @Konstante {Zahl}
 * @Standard 0
 * /

/**
 * W3C-Fehlercode für Medienfehler abgebrochen.
 *
 * @member Medienfehler #MEDIA_ERR_ABORTED
 * @Konstante {Zahl}
 * @Standard 1
 * /
/**
 * W3C-Fehlercode für Medienfehler abgebrochen.
 *
 * @member MediaError.MEDIA_ERR_ABORTED
 * @Konstante {Zahl}
 * @Standard 1
 * /

/**
 * W3C-Fehlercode für jeden Netzwerkfehler.
 *
 * @member Medienfehler #MEDIA_ERR_NETWORK
 * @Konstante {Zahl}
 * @Standard 2
 * /
/**
 * W3C-Fehlercode für jeden Netzwerkfehler.
 *
 * @member MediaError.media_err_network
 * @Konstante {Zahl}
 * @Standard 2
 * /

/**
 * W3C-Fehlercode für jeden Dekodierungsfehler.
 *
 * @member Medienfehler #MEDIA_ERR_DECODE
 * @Konstante {Zahl}
 * @Standard 3
 * /
/**
 * W3C-Fehlercode für jeden Dekodierungsfehler.
 *
 * @member MediaError.media_err_decode
 * @Konstante {Zahl}
 * @Standard 3
 * /

/**
 * W3C-Fehlercode für den Fall, dass eine Quelle nicht unterstützt wird.
 *
 * @member Medienfehler #MEDIA_ERR_SRC_NOT_SUPPORTED
 * @Konstante {Zahl}
 * @Standard 4
 * /
/**
 * W3C-Fehlercode für den Fall, dass eine Quelle nicht unterstützt wird.
 *
 * @member MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED
 * @Konstante {Zahl}
 * @Standard 4
 * /

/**
 * W3C-Fehlercode für den Fall, dass eine Quelle verschlüsselt ist.
 *
 * @member Medienfehler #MEDIA_ERR_ENCRYPTED
 * @Konstante {Zahl}
 * @Standard 5
 * /
/**
 * W3C-Fehlercode für den Fall, dass eine Quelle verschlüsselt ist.
 *
 * @member MediaError.MEDIA_ERR_ENCRYPTED
 * @Konstante {Zahl}
 * @Standard 5
 * /

exportiere den Standard-MediaError;