mirror of
https://github.com/shaka-project/shaka-player.git
synced 2026-06-26 17:46:26 +03:00
6a02bd25d3
Closes #1342 Change-Id: I2cbb8933abe833afc74471efb6ad1e3e40bb1c28
159 lines
4.9 KiB
Markdown
159 lines
4.9 KiB
Markdown
# Shaka Upgrade Guide, v2.3 => v2.4
|
|
|
|
This is a detailed guide for upgrading from Shaka Player v2.3 to v2.4.
|
|
Feel free to skim or to search for the class and method names you are using in
|
|
your application.
|
|
|
|
|
|
#### What's New in v2.4?
|
|
|
|
Shaka v2.4 introduces several improvements over v2.3, including:
|
|
- Support for CEA captions in TS content
|
|
- Support for TTML and VTT regions
|
|
- A video element is no longer required when `Player` is constructed
|
|
- New `attach()` and `detach()` methods have been added to `Player` to manage
|
|
attachment to video elements
|
|
- Fetch is now preferred over XHR when available
|
|
- Network requests are now abortable
|
|
- Live stream playback can begin at a negative offset from the live edge
|
|
|
|
|
|
#### Promise polyfill for IE
|
|
|
|
Prior to v2.4, we had our own polyfill of `Promise` for IE 11 support. In v2.4,
|
|
we have dropped that polyfill. To support IE 11 in your application, you MUST
|
|
install a `Promise` polyfill separately. We recommend [es6-promise-polyfill][]
|
|
for that purpose.
|
|
|
|
[es6-promise-polyfill]: https://github.com/lahmatiy/es6-promise-polyfill
|
|
|
|
|
|
#### Text parser plugin API changes
|
|
|
|
The TextParser plugin API has changed.
|
|
|
|
The `segmentStart` attribute of `shakaExtern.TextParser.TimeContext` is now
|
|
nullable. Your plugin will receive a `segmentStart` of `null` if the
|
|
information is not available, as is the case in HLS.
|
|
|
|
Text-parsing plugins that produce region information will need to be updated to
|
|
use the new `shaka.text.CueRegion` class. The new structure allows for more
|
|
accurate representation of both TTML and VTT regions.
|
|
|
|
All application-specific text-parsing plugins MUST to be updated.
|
|
v2.4 does not have backward compatibility for this!
|
|
|
|
See {@link shakaExtern.TextParser.TimeContext} and {@link shaka.text.CueRegion}
|
|
for details.
|
|
|
|
|
|
#### Text displayer plugin API changes
|
|
|
|
The TextDisplayer plugin API has changed.
|
|
|
|
TextDisplayer plugins need to handle changes to the `shakaExtern.CueRegion`
|
|
structure. The new structure allows for more accurate representation of both
|
|
TTML and VTT regions.
|
|
|
|
All application-specific TextDisplayer plugins MUST to be updated.
|
|
v2.4 does not have backward compatibility for this!
|
|
|
|
See {@link shakaExtern.CueRegion} for details.
|
|
|
|
|
|
#### NetworkingEngine API changes
|
|
|
|
In v2.3, the `request()` method on `shaka.net.NetworkingEngine` returned a
|
|
Promise. Now, in v2.4, it returns an instance of
|
|
`shakaExtern.IAbortableOperation`, which contains a Promise.
|
|
|
|
All applications which make application-level requests via `NetworkingEngine`
|
|
SHOULD update to the new API. Support for the old API will be removed in v2.5.
|
|
|
|
```js
|
|
// v2.3:
|
|
player.getNetworkingEngine().request(type, request).then((response) => {
|
|
// ...
|
|
});
|
|
|
|
// v2.4:
|
|
let operation = player.getNetworkingEngine().request(type, request);
|
|
// Use operation.promise to get the response.
|
|
operation.promise.then((response) => {
|
|
// ...
|
|
});
|
|
// The operation can also be aborted on some condition.
|
|
onSomeOtherCondition(() => {
|
|
operation.abort();
|
|
});
|
|
```
|
|
|
|
Backward compatibility is provided in the v2.4 releases by adding `.then` and
|
|
`.catch` methods to the return value from `request()`.
|
|
|
|
|
|
#### Network scheme plugin API changes
|
|
|
|
In v2.4, we changed the API for network scheme plugins.
|
|
|
|
These plugins now return an instance of `shakaExtern.IAbortableOperation`.
|
|
We suggest using the utility `shaka.util.AbortableOperation` for convenience.
|
|
|
|
We also introduced an additional parameter for network scheme plugins to
|
|
identify the request type.
|
|
|
|
All applications which have application-level network scheme plugins SHOULD
|
|
update to the new API. Support for the old API will be removed in v2.5.
|
|
|
|
```js
|
|
// v2.3
|
|
function fooPlugin(uri, request) {
|
|
return new Promise((resolve, reject) => {
|
|
// ...
|
|
});
|
|
}
|
|
shaka.net.NetworkingEngine.registerScheme('foo', fooPlugin);
|
|
|
|
// v2.4
|
|
function fooPlugin(uri, request, requestType) {
|
|
let rejectCallback = null;
|
|
|
|
const promise = new Promise((resolve, reject) => {
|
|
rejectCallback = reject;
|
|
|
|
// Use this if you have a need for it. Ignore it otherwise.
|
|
if (requestType == shaka.net.NetworkingEngine.RequestType.MANIFEST) {
|
|
// ...
|
|
} else {
|
|
// ...
|
|
}
|
|
|
|
// ...
|
|
});
|
|
|
|
const abort = () => {
|
|
// Abort the operation.
|
|
// ...
|
|
|
|
// Reject the Promise.
|
|
rejectCallback(new shaka.util.Error(
|
|
shaka.util.Error.Severity.RECOVERABLE,
|
|
shaka.util.Error.Category.NETWORK,
|
|
shaka.util.Error.Code.OPERATION_ABORTED));
|
|
};
|
|
|
|
return new shaka.util.AbortableOperation(promise, abort);
|
|
}
|
|
shaka.net.NetworkingEngine.registerScheme('foo', fooPlugin);
|
|
```
|
|
|
|
|
|
#### Manifest parser plugin API changes
|
|
|
|
The API for `shaka.media.PresentationTimeline` has changed. `ManifestParser`
|
|
plugins that use these methods MUST be updated:
|
|
|
|
- `setAvailabilityStart()` was renamed to `setUserSeekStart()`.
|
|
- `notifySegments()` now takes a reference array and a boolean called
|
|
`isFirstPeriod`, instead of a period start time and a reference array.
|