import * as Url from '../utils/url.js';
/**
* 模仿類型
*
* @see https://www.iana.org/assignments/media-types/media-types.xhtml
* @typedef Mimetypes~種類
* @枚舉
*/
導出常量 MimetypesKind = {
opus: 'video/ogg',
ogv: '視頻/ogg',
mp4: '視頻/mp4',
mov: '視頻/mp4',
m4v: '視頻/mp4',
mkv: '視頻/x-matroska',
m4a: '音頻/mp4',
mp3: '音頻/mpeg',
aac: '音頻/aac',
caf: '音頻/x-caf',
flac: '音頻/flac',
oga: '音頻/ogg',
wav: '音頻/wav',
m3u8: '應用程序/x-mpegURL',
mpd: '應用程序/破折號+xml',
jpg: '圖像/jpeg',
jpeg: '圖像/jpeg',
gif: '圖像/gif',
png: '圖像/png',
svg: '圖像/svg+xml',
webp: '圖像/webp'
};
/**
* 如果可能,獲取給定 src url 的 mimetype
*
* @param {string} 源
* src 的 url
*
* @return {字符串}
* 如果已知則返回 mimetype,否則返回空字符串
*/
export const getMimetype = function(src = '') {
const ext = Url.getFileExtension(src);
const mimetype = MimetypesKind[ext.toLowerCase()];
返回 mimetype || '';
};
/**
* 如果可能,查找給定源字符串的 mime 類型。使用播放器
* 源緩存。
*
* @param {Player} 播放器
* 玩家對象
*
* @param {string} 源
* 源字符串
*
* @return {字符串}
* 找到的類型
*/
export const findMimetype = (player, src) => {
如果(!src){
返回 '';
}
// 1. 檢查 `source` 緩存中的類型
如果(player.cache_.source.src === src && player.cache_.source.type){
返回 player.cache_.source.type;
}
// 2. 查看我們的 `currentSources` 緩存中是否有這個源
const matchingSources = player.cache_.sources.filter((s) => s.src === src);
如果(matchingSources.length){
返回 matchingSources[0].type;
}
// 3. 在源元素中查找 src url 並使用那裡的類型
const sources = player.$$('來源');
為 (讓我 = 0; 我 < 來源. 長度; 我 ++) {
const s = 來源[i];
如果(s.type && s.src && s.src === src){
返回 s.類型;
}
}
// 4. 最後回退到我們基於 src url 擴展的 mime 類型列表
返回 getMimetype(src);
};