/**
* @file media-error.js
* /
importar {asignar, isObject} desde './utils/obj';
/**
* Una clase `MediaError` personalizada que imita la clase `MediaError` estándar de HTML5.
*
* @param {número|cadena|Objeto|Error de medios} valor
* Esta puede ser de múltiples tipos:
* - número: debe ser un código de error estándar
* - cadena: un mensaje de error (el código será 0)
* - Objeto: propiedades arbitrarias
* - `MediaError` (nativo): se usa para completar un objeto video.js `MediaError`
* - `MediaError` (video.js): se devolverá si ya es un
* objeto video.js `MediaError`.
*
* @ver [Especificación de error de medios]{@enlace https://dev.w3.org/html5/spec-author-view/video.html#mediaerror}
* @ver [Especificación de error de medios cifrados]{@enlace https://www.w3.org/TR/2013/WD-encrypted-media-20130510/#error-codes}
*
* @clase MediaError
* /
function MediaError(valor) {
// Permitir llamadas redundantes a este constructor para evitar tener `instanceof`
// cheques salpicados alrededor del código.
if (valor instancia de MediaError) {
valor de retorno;
}
if (tipo de valor === 'número') {
este.código = valor;
} else if (tipo de valor === 'cadena') {
// el código predeterminado es cero, por lo que se trata de un error personalizado
este.mensaje = valor;
} más si (esObjeto(valor)) {
// Asignamos la propiedad `code` manualmente porque los objetos nativos `MediaError`
// no lo exponga como una propiedad propia/enumerable del objeto.
if (tipodevalor.código === 'número') {
este.código = valor.código;
}
asignar (esto, valor);
}
if (!este.mensaje) {
este.mensaje = MediaError.defaultMessages[este.código] || '';
}
}
/**
* El código de error que hace referencia a dos de los tipos `MediaError` definidos
*
* @teclea un número}
* /
MediaError.prototipo.código = 0;
/**
* Un mensaje opcional que mostrar con el error. El mensaje no es parte del HTML5
* especificaciones de video pero permite errores personalizados más informativos.
*
* @tipo {Cadena}
* /
MediaError.prototipo.mensaje = '';
/**
* Un código de estado opcional que se puede configurar mediante complementos para permitir aún más detalles sobre
* el error. Por ejemplo, un complemento puede proporcionar un código de estado HTTP específico y un
* mensaje de error para ese código. Luego, cuando el complemento recibe ese error, esta clase
* saber cómo mostrar un mensaje de error para ello. Esto permite que se muestre un mensaje personalizado
* arriba en la superposición de error `Player`.
*
* @tipo {Array}
* /
MediaError.prototype.status = nulo;
/**
* Errores indexados por el estándar W3C. ¡El pedido ** NO SE PUEDE CAMBIAR **! Ver el
* especificación enumerada en {@link MediaError} para obtener más información.
*
* @enum {matriz}
* @solo lectura
* @property {cadena} 0 - MEDIA_ERR_CUSTOM
* @propiedad {cadena} 1 - MEDIA_ERR_ABORTED
* @propiedad {cadena} 2 - MEDIA_ERR_NETWORK
* @propiedad {cadena} 3 - MEDIA_ERR_DECODE
* @property {cadena} 4 - MEDIA_ERR_SRC_NOT_SUPPORTED
* @propiedad {cadena} 5 - MEDIA_ERR_ENCRYPTED
* /
MediaError.errorTypes = [
'MEDIA_ERR_CUSTOM',
'MEDIA_ERR_ABORTED',
'MEDIA_ERR_NETWORK',
'MEDIA_ERR_DECODE',
'MEDIA_ERR_SRC_NOT_SUPPORTED',
'MEDIA_ERR_ENCRYPTED'
];
/**
* Los mensajes `MediaError` predeterminados basados en {@link MediaError.errorTypes}.
*
* @tipo {Array}
* @constante
* /
MediaError.defaultMessages = {
1: 'Usted canceló la reproducción de medios',
2: 'Un error de red provocó que la descarga de medios fallara parcialmente.',
3: 'La reproducción de medios se canceló debido a un problema de corrupción o porque los medios usaban características que su navegador no admitía.',
4: 'No se pudo cargar el medio, ya sea porque el servidor o la red fallaron o porque el formato no es compatible.',
5: "Los medios están cifrados y no tenemos las claves para descifrarlos".
};
// Agregar tipos como propiedades en MediaError
// por ejemplo, MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED = 4;
for (sea errNum = 0; errNum < MediaError.errorTypes.longitud; errNum++) {
MediaError[MediaError.errorTypes[errNum]] = errNum;
// los valores deben ser accesibles tanto en la clase como en la instancia
MediaError.prototype[MediaError.errorTypes[errNum]] = errNum;
}
// jsdocs para instancias/miembros estáticos agregados arriba
// los métodos de instancia usan `#` y los métodos estáticos usan `.`
/**
* Código de error W3C para cualquier error personalizado.
*
* @member MediaError#MEDIA_ERR_CUSTOM
* @constante {número}
* @predeterminado 0
* /
/**
* Código de error W3C para cualquier error personalizado.
*
* @miembro MediaError.MEDIA_ERR_CUSTOM
* @constante {número}
* @predeterminado 0
* /
/**
* Código de error W3C para error de medios abortado.
*
* @member MediaError#MEDIA_ERR_ABORTED
* @constante {número}
* @predeterminado 1
* /
/**
* Código de error W3C para error de medios abortado.
*
* @miembro MediaError.MEDIA_ERR_ABORTED
* @constante {número}
* @predeterminado 1
* /
/**
* Código de error W3C para cualquier error de red.
*
* @miembro MediaError#MEDIA_ERR_NETWORK
* @constante {número}
* @predeterminado 2
* /
/**
* Código de error W3C para cualquier error de red.
*
* @miembro MediaError.MEDIA_ERR_NETWORK
* @constante {número}
* @predeterminado 2
* /
/**
* Código de error W3C para cualquier error de decodificación.
*
* @miembro MediaError#MEDIA_ERR_DECODE
* @constante {número}
* @predeterminado 3
* /
/**
* Código de error W3C para cualquier error de decodificación.
*
* @miembro MediaError.MEDIA_ERR_DECODE
* @constante {número}
* @predeterminado 3
* /
/**
* Código de error W3C para cualquier momento en que una fuente no sea compatible.
*
* @member MediaError#MEDIA_ERR_SRC_NOT_SUPPORTED
* @constante {número}
* @predeterminado 4
* /
/**
* Código de error W3C para cualquier momento en que una fuente no sea compatible.
*
* @miembro MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED
* @constante {número}
* @predeterminado 4
* /
/**
* Código de error W3C para cualquier momento en que una fuente esté encriptada.
*
* @member MediaError#MEDIA_ERR_ENCRYPTED
* @constante {número}
* @predeterminado 5
* /
/**
* Código de error W3C para cualquier momento en que una fuente esté encriptada.
*
* @miembro MediaError.MEDIA_ERR_ENCRYPTED
* @constante {número}
* @predeterminado 5
* /
exportar MediaError predeterminado;