UNPKG

shaka-player

Version:
82 lines (71 loc) 2.69 kB
/** * @license * Copyright 2016 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ goog.provide('shaka.offline.OfflineScheme'); goog.require('shaka.net.NetworkingEngine'); goog.require('shaka.offline.OfflineUtils'); goog.require('shaka.util.Error'); /** * @namespace * @summary A plugin that handles requests for offline content. * @param {string} uri * @param {shakaExtern.Request} request * @return {!Promise.<shakaExtern.Response>} * @export */ shaka.offline.OfflineScheme = function(uri, request) { var manifestParts = /^offline:([0-9]+)$/.exec(uri); if (manifestParts) { /** @type {shakaExtern.Response} */ var response = { uri: uri, data: new ArrayBuffer(0), headers: {'content-type': 'application/x-offline-manifest'} }; return Promise.resolve(response); } var segmentParts = /^offline:[0-9]+\/[0-9]+\/([0-9]+)$/.exec(uri); if (segmentParts) { var segmentId = Number(segmentParts[1]); var scheme = shaka.offline.OfflineUtils.DB_SCHEME; var storageEngine = shaka.offline.OfflineUtils.createStorageEngine(); if (!storageEngine) { return Promise.reject(new shaka.util.Error( shaka.util.Error.Severity.CRITICAL, shaka.util.Error.Category.STORAGE, shaka.util.Error.Code.STORAGE_NOT_SUPPORTED)); } return storageEngine.init(scheme) .then(function() { return storageEngine.get('segment', segmentId); }) .then(function(segment) { return storageEngine.destroy().then(function() { if (!segment) { throw new shaka.util.Error( shaka.util.Error.Severity.CRITICAL, shaka.util.Error.Category.STORAGE, shaka.util.Error.Code.REQUESTED_ITEM_NOT_FOUND, segmentId); } return {uri: uri, data: segment.data, headers: {}}; }); }); } return Promise.reject(new shaka.util.Error( shaka.util.Error.Severity.CRITICAL, shaka.util.Error.Category.NETWORK, shaka.util.Error.Code.MALFORMED_OFFLINE_URI, uri)); }; shaka.net.NetworkingEngine.registerScheme( 'offline', shaka.offline.OfflineScheme);