mirror of
https://github.com/shaka-project/shaka-player.git
synced 2026-06-24 17:35:10 +03:00
a18dc01874
We misinterpretted the EXT-X-START tag before. Now, we ignore this tag and parse segment times from the segments themselves. This is more robust for both VOD and live HLS content. We avoid segment parsing when updating normal, well-behaved live streams. For poorly-behaved live streams, we will fall back to segment parsing and recover. This also addresses the issue of VOD content which does not start at zero. Instead of using configuration to make this playable, we will now offset VOD content back to 0 automatically. Issue #740 Closes #1011 Change-Id: Ib3a59f87e3a050244cd39854409d8e3542c50b0a
105 lines
3.4 KiB
JavaScript
105 lines
3.4 KiB
JavaScript
/**
|
|
* @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.media.InitSegmentReference');
|
|
goog.provide('shaka.media.SegmentReference');
|
|
|
|
goog.require('goog.asserts');
|
|
|
|
|
|
|
|
/**
|
|
* Creates an InitSegmentReference, which provides the location to an
|
|
* initialization segment.
|
|
*
|
|
* @param {function():!Array.<string>} uris
|
|
* A function that creates the URIs of the resource containing the segment.
|
|
* @param {number} startByte The offset from the start of the resource to the
|
|
* start of the segment.
|
|
* @param {?number} endByte The offset from the start of the resource to the
|
|
* end of the segment, inclusive. null indicates that the segment extends
|
|
* to the end of the resource.
|
|
*
|
|
* @constructor
|
|
* @struct
|
|
* @export
|
|
*/
|
|
shaka.media.InitSegmentReference = function(uris, startByte, endByte) {
|
|
/** @type {function():!Array.<string>} */
|
|
this.getUris = uris;
|
|
|
|
/** @const {number} */
|
|
this.startByte = startByte;
|
|
|
|
/** @const {?number} */
|
|
this.endByte = endByte;
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
* Creates a SegmentReference, which provides the start time, end time, and
|
|
* location to a media segment.
|
|
*
|
|
* @param {number} position The segment's position within a particular Period.
|
|
* The following should hold true between any two SegmentReferences from the
|
|
* same Period, r1 and r2:
|
|
* IF r2.position > r1.position THEN
|
|
* [ (r2.startTime > r1.startTime) OR
|
|
* (r2.startTime == r1.startTime AND r2.endTime >= r1.endTime) ]
|
|
* @param {number} startTime The segment's start time in seconds, relative to
|
|
* the start of a particular Period.
|
|
* @param {number} endTime The segment's end time in seconds, relative to
|
|
* the start of a particular Period. The segment ends the instant before
|
|
* this time, so |endTime| must be strictly greater than |startTime|.
|
|
* @param {function():!Array.<string>} uris
|
|
* A function that creates the URIs of the resource containing the segment.
|
|
* @param {number} startByte The offset from the start of the resource to the
|
|
* start of the segment.
|
|
* @param {?number} endByte The offset from the start of the resource to the
|
|
* end of the segment, inclusive. null indicates that the segment extends
|
|
* to the end of the resource.
|
|
*
|
|
* @constructor
|
|
* @struct
|
|
* @export
|
|
*/
|
|
shaka.media.SegmentReference = function(
|
|
position, startTime, endTime, uris, startByte, endByte) {
|
|
goog.asserts.assert(startTime < endTime,
|
|
'startTime must be less than endTime');
|
|
goog.asserts.assert((startByte < endByte) || (endByte == null),
|
|
'startByte must be < endByte');
|
|
/** @const {number} */
|
|
this.position = position;
|
|
|
|
/** @type {number} */
|
|
this.startTime = startTime;
|
|
|
|
/** @type {number} */
|
|
this.endTime = endTime;
|
|
|
|
/** @type {function():!Array.<string>} */
|
|
this.getUris = uris;
|
|
|
|
/** @const {number} */
|
|
this.startByte = startByte;
|
|
|
|
/** @const {?number} */
|
|
this.endByte = endByte;
|
|
};
|