/**
* @file media-error.js
*/
從 './utils/obj' 導入 {assign, isObject};
/**
* 模仿標準 HTML5 MediaError 類的自定義 MediaError 類。
*
* @param {number|string|Object|MediaError} 值
* 這可以是多種類型:
* - 數字:應該是標準錯誤代碼
* - 字符串:錯誤消息(代碼將為 0)
* - 對象:任意屬性
* - `MediaError`(本機):用於填充 video.js `MediaError` 對象
* - `MediaError` (video.js): 如果它已經是
* video.js `MediaError` 對象。
*
* @see [MediaError 規範]{@link https://dev.w3.org/html5/spec-author-view/video.html#mediaerror}
* @see [加密媒體錯誤規範]{@link https://www.w3.org/TR/2013/WD-encrypted-media-20130510/#error-codes}
*
* @class 媒體錯誤
*/
函數 MediaError(值){
// 允許對該構造函數進行冗餘調用以避免出現 `instanceof`
//檢查代碼周圍。
如果(值 instanceof MediaError){
返回值;
}
如果(類型值==='數字'){
這個。代碼=值;
} else if (typeof value === 'string') {
// 默認代碼為零,所以這是一個自定義錯誤
this.message = 值;
} else if (isObject(value)) {
// 我們手動分配 `code` 屬性,因為原生 `MediaError` 對象
// 不要將其公開為對象的自有/可枚舉屬性。
if (typeof value.code === 'number') {
this.code = value.code;
}
賦值(這個,值);
}
如果(!this.message){
this.message = MediaError.defaultMessages[this.code] || '';
}
}
/**
* 引用兩個已定義的 MediaError 類型的錯誤代碼
*
* @type {數字}
*/
MediaError.prototype.code = 0;
/**
* 與錯誤一起顯示的可選消息。消息不是 HTML5 的一部分
* 視頻規範,但允許提供更多信息的自定義錯誤。
*
* @type {字符串}
*/
MediaError.prototype.message = '';
/**
* 一個可選的狀態代碼,可以由插件設置以允許更多詳細信息
* 錯誤。例如,一個插件可能會提供一個特定的 HTTP 狀態代碼和一個
* 該代碼的錯誤消息。然後當插件收到該錯誤時,此類將
* 知道如何為它顯示錯誤信息。這允許顯示自定義消息
* 在 `Player` 錯誤疊加層上。
*
* @type {數組}
*/
MediaError.prototype.status = null;
/**
* W3C 標準索引的錯誤。訂單**不能更改**!見
* {@link MediaError} 下列出的規範以獲取更多信息。
*
* @enum {數組}
* @只讀
* @property {string} 0 - MEDIA_ERR_CUSTOM
* @property {string} 1 - MEDIA_ERR_ABORTED
* @property {string} 2 - MEDIA_ERR_NETWORK
* @property {string} 3 - MEDIA_ERR_DECODE
* @property {string} 4 - MEDIA_ERR_SRC_NOT_SUPPORTED
* @property {string} 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'
];
/**
* 基於 {@link MediaError.errorTypes} 的默認 `MediaError` 消息。
*
* @type {數組}
* @持續的
*/
MediaError.defaultMessages = {
1:'你中止了媒體播放',
2:'網絡錯誤導致媒體下載中途失敗。',
3:'由於損壞問題或媒體使用了您的瀏覽器不支持的功能,媒體播放被中止。',
4:'無法加載媒體,可能是因為服務器或網絡出現故障,也可能是因為格式不受支持。',
5:“媒體已加密,我們沒有解密它的密鑰。”
};
// 添加類型作為 MediaError 的屬性
// 例如 MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED = 4;
for (let errNum = 0; errNum < MediaError.errorTypes.length; errNum++) {
MediaError[MediaError.errorTypes[errNum]] = errNum;
// 值應該在類和實例上都可以訪問
MediaError.prototype[MediaError.errorTypes[errNum]] = errNum;
}
// 上面添加的實例/靜態成員的 jsdocs
// 實例方法使用 `#`,靜態方法使用 `.`
/**
* 任何自定義錯誤的 W3C 錯誤代碼。
*
* @member MediaError#MEDIA_ERR_CUSTOM
* @constant {數字}
* @默認0
*/
/**
* 任何自定義錯誤的 W3C 錯誤代碼。
*
* @member MediaError.MEDIA_ERR_CUSTOM
* @constant {數字}
* @默認0
*/
/**
* 媒體錯誤的 W3C 錯誤代碼中止。
*
* @member MediaError#MEDIA_ERR_ABORTED
* @constant {數字}
* @默認1
*/
/**
* 媒體錯誤的 W3C 錯誤代碼中止。
*
* @member MediaError.MEDIA_ERR_ABORTED
* @constant {數字}
* @默認1
*/
/**
* 任何網絡錯誤的 W3C 錯誤代碼。
*
* @member MediaError#MEDIA_ERR_NETWORK
* @constant {數字}
* @默認2
*/
/**
* 任何網絡錯誤的 W3C 錯誤代碼。
*
* @member MediaError.MEDIA_ERR_NETWORK
* @constant {數字}
* @默認2
*/
/**
* 任何解碼錯誤的 W3C 錯誤代碼。
*
* @member MediaError#MEDIA_ERR_DECODE
* @constant {數字}
* @默認3
*/
/**
* 任何解碼錯誤的 W3C 錯誤代碼。
*
* @member MediaError.MEDIA_ERR_DECODE
* @constant {數字}
* @默認3
*/
/**
* 任何時候不支持源的 W3C 錯誤代碼。
*
* @member MediaError#MEDIA_ERR_SRC_NOT_SUPPORTED
* @constant {數字}
* @默認4
*/
/**
* 任何時候不支持源的 W3C 錯誤代碼。
*
* @member MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED
* @constant {數字}
* @默認4
*/
/**
* 任何時候源被加密的 W3C 錯誤代碼。
*
* @member MediaError#MEDIA_ERR_ENCRYPTED
* @constant {數字}
* @默認5
*/
/**
* 任何時候源被加密的 W3C 錯誤代碼。
*
* @member MediaError.MEDIA_ERR_ENCRYPTED
* @constant {數字}
* @默認5
*/
導出默認 MediaError;