/**
* @file text-track-list-converter.js 用於捕獲文本軌道狀態和
* 根據捕獲重新創建曲目。
*
* @module 文本軌道列表轉換器
*/
/**
* 檢查單個 {@link TextTrack} 並返回一個兼容 JSON 的 javascript 對象
* 表示 {@link TextTrack} 的狀態。
*
* @param {TextTrack} 軌道
* 要查詢的文本軌道。
*
* @return {對象}
* TextTrack 的可序列化 javascript 表示。
* @私人的
*/
const trackToJson_ = 函數(軌道){
const ret = [
'種類','標籤','語言','id',
'inBandMetadataTrackDispatchType', 'mode', 'src'
].reduce((acc, prop, i) => {
如果(軌道[道具]){
acc[prop] = track[prop];
}
返回帳戶;
},{
線索:track.cues && Array.prototype.map.call(track.cues, function(cue) {
返回 {
開始時間:cue.startTime,
結束時間:cue.endTime,
文本:cue.text,
id: cue.id
};
})
});
返還;
};
/**
* 檢查 {@link Tech} 並返回一個與 JSON 兼容的 javascript 數組,代表
* 當前配置的所有 {@link TextTrack} 的狀態。返回數組兼容
* {@link 文本軌道列表轉換器:JSONTO 文本軌道}。
*
* @param {技術}技術
* 要查詢的技術對象
*
* @return {數組}
* {@link Tech} 的可序列化 javascript 表示
* {@link TextTrackList}。
*/
const textTracksToJson = 函數(技術){
const trackEls = tech.$$('track');
const trackObjs = Array.prototype.map.call(trackEls, (t) => t.track);
const tracks = Array.prototype.map.call(trackEls, function(trackEl) {
const json = trackToJson_(trackEl.track);
如果(trackEl.src){
json.src = trackEl.src;
}
返回json;
});
返回 tracks.concat(Array.prototype.filter.call(tech.textTracks(), function(track) {
返回 trackObjs.indexOf(track) === -1;
}).map(trackToJson_));
};
/**
* 在基於 javascript 數組的 {@link Tech} 上創建一組遠程 {@link TextTrack}
* 對象 {@link TextTrack} 表示。
*
* @param {數組} json
* 一組 `TextTrack` 表示對象,就像那些將是
* 由 textTracksToJson 製作。
*
* @param {技術}技術
* 用於創建 TextTrack 的 Tech。
*/
const jsonToTextTracks = function(json, tech) {
json.forEach(函數(軌跡){
const addedTrack = tech.addRemoteTextTrack(track).track;
如果(!track.src && track.cues){
track.cues.forEach((cue) => addedTrack.addCue(cue));
}
});
返回 tech.textTracks();
};
導出默認 {textTracksToJson, jsonToTextTracks, trackToJson_};