Migration of htmlAudioPlayer to ES6 module
This commit is contained in:
parent
0ef8f3d038
commit
36f389e8f9
2 changed files with 173 additions and 170 deletions
|
@ -155,6 +155,7 @@
|
||||||
"src/components/refreshdialog/refreshdialog.js",
|
"src/components/refreshdialog/refreshdialog.js",
|
||||||
"src/components/sanatizefilename.js",
|
"src/components/sanatizefilename.js",
|
||||||
"src/components/scrollManager.js",
|
"src/components/scrollManager.js",
|
||||||
|
"src/plugins/htmlAudioPlayer/plugin.js",
|
||||||
"src/plugins/htmlVideoPlayer/plugin.js",
|
"src/plugins/htmlVideoPlayer/plugin.js",
|
||||||
"src/components/search/searchfields.js",
|
"src/components/search/searchfields.js",
|
||||||
"src/components/search/searchresults.js",
|
"src/components/search/searchresults.js",
|
||||||
|
|
|
@ -1,91 +1,94 @@
|
||||||
define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelper'], function (events, browser, require, appHost, appSettings, htmlMediaHelper) {
|
import events from 'events';
|
||||||
'use strict';
|
import browser from 'browser';
|
||||||
|
import appHost from 'apphost';
|
||||||
|
import * as htmlMediaHelper from 'htmlMediaHelper';
|
||||||
|
|
||||||
function getDefaultProfile() {
|
function getDefaultProfile() {
|
||||||
return new Promise(function (resolve, reject) {
|
return new Promise(function (resolve, reject) {
|
||||||
require(['browserdeviceprofile'], function (profileBuilder) {
|
import('browserdeviceprofile').then(({default: profileBuilder}) => {
|
||||||
resolve(profileBuilder({}));
|
resolve(profileBuilder({}));
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
let fadeTimeout;
|
||||||
|
function fade(instance, elem, startingVolume) {
|
||||||
|
instance._isFadingOut = true;
|
||||||
|
|
||||||
|
// Need to record the starting volume on each pass rather than querying elem.volume
|
||||||
|
// This is due to iOS safari not allowing volume changes and always returning the system volume value
|
||||||
|
const newVolume = Math.max(0, startingVolume - 0.15);
|
||||||
|
console.debug('fading volume to ' + newVolume);
|
||||||
|
elem.volume = newVolume;
|
||||||
|
|
||||||
|
if (newVolume <= 0) {
|
||||||
|
instance._isFadingOut = false;
|
||||||
|
return Promise.resolve();
|
||||||
}
|
}
|
||||||
|
|
||||||
var fadeTimeout;
|
return new Promise(function (resolve, reject) {
|
||||||
function fade(instance, elem, startingVolume) {
|
cancelFadeTimeout();
|
||||||
instance._isFadingOut = true;
|
fadeTimeout = setTimeout(function () {
|
||||||
|
fade(instance, elem, newVolume).then(resolve, reject);
|
||||||
|
}, 100);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Need to record the starting volume on each pass rather than querying elem.volume
|
function cancelFadeTimeout() {
|
||||||
// This is due to iOS safari not allowing volume changes and always returning the system volume value
|
const timeout = fadeTimeout;
|
||||||
var newVolume = Math.max(0, startingVolume - 0.15);
|
if (timeout) {
|
||||||
console.debug('fading volume to ' + newVolume);
|
clearTimeout(timeout);
|
||||||
elem.volume = newVolume;
|
fadeTimeout = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (newVolume <= 0) {
|
function supportsFade() {
|
||||||
instance._isFadingOut = false;
|
if (browser.tv) {
|
||||||
return Promise.resolve();
|
// Not working on tizen.
|
||||||
}
|
// We could possibly enable on other tv's, but all smart tv browsers tend to be pretty primitive
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return new Promise(function (resolve, reject) {
|
return true;
|
||||||
cancelFadeTimeout();
|
}
|
||||||
fadeTimeout = setTimeout(function () {
|
|
||||||
fade(instance, elem, newVolume).then(resolve, reject);
|
function requireHlsPlayer(callback) {
|
||||||
}, 100);
|
import('hlsjs').then(({default: hls}) => {
|
||||||
|
window.Hls = hls;
|
||||||
|
callback();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function enableHlsPlayer(url, item, mediaSource, mediaType) {
|
||||||
|
if (!htmlMediaHelper.enableHlsJsPlayer(mediaSource.RunTimeTicks, mediaType)) {
|
||||||
|
return Promise.reject();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (url.indexOf('.m3u8') !== -1) {
|
||||||
|
return Promise.resolve();
|
||||||
|
}
|
||||||
|
|
||||||
|
// issue head request to get content type
|
||||||
|
return new Promise(function (resolve, reject) {
|
||||||
|
import('fetchHelper').then(({default: fetchHelper}) => {
|
||||||
|
fetchHelper.ajax({
|
||||||
|
url: url,
|
||||||
|
type: 'HEAD'
|
||||||
|
}).then(function (response) {
|
||||||
|
const contentType = (response.headers.get('Content-Type') || '').toLowerCase();
|
||||||
|
if (contentType === 'application/x-mpegurl') {
|
||||||
|
resolve();
|
||||||
|
} else {
|
||||||
|
reject();
|
||||||
|
}
|
||||||
|
}, reject);
|
||||||
});
|
});
|
||||||
}
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function cancelFadeTimeout() {
|
class HtmlAudioPlayer {
|
||||||
var timeout = fadeTimeout;
|
constructor() {
|
||||||
if (timeout) {
|
const self = this;
|
||||||
clearTimeout(timeout);
|
|
||||||
fadeTimeout = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function supportsFade() {
|
|
||||||
if (browser.tv) {
|
|
||||||
// Not working on tizen.
|
|
||||||
// We could possibly enable on other tv's, but all smart tv browsers tend to be pretty primitive
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function requireHlsPlayer(callback) {
|
|
||||||
require(['hlsjs'], function (hls) {
|
|
||||||
window.Hls = hls;
|
|
||||||
callback();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function enableHlsPlayer(url, item, mediaSource, mediaType) {
|
|
||||||
if (!htmlMediaHelper.enableHlsJsPlayer(mediaSource.RunTimeTicks, mediaType)) {
|
|
||||||
return Promise.reject();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (url.indexOf('.m3u8') !== -1) {
|
|
||||||
return Promise.resolve();
|
|
||||||
}
|
|
||||||
|
|
||||||
// issue head request to get content type
|
|
||||||
return new Promise(function (resolve, reject) {
|
|
||||||
require(['fetchHelper'], function (fetchHelper) {
|
|
||||||
fetchHelper.ajax({
|
|
||||||
url: url,
|
|
||||||
type: 'HEAD'
|
|
||||||
}).then(function (response) {
|
|
||||||
var contentType = (response.headers.get('Content-Type') || '').toLowerCase();
|
|
||||||
if (contentType === 'application/x-mpegurl') {
|
|
||||||
resolve();
|
|
||||||
} else {
|
|
||||||
reject();
|
|
||||||
}
|
|
||||||
}, reject);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function HtmlAudioPlayer() {
|
|
||||||
var self = this;
|
|
||||||
|
|
||||||
self.name = 'Html Audio Player';
|
self.name = 'Html Audio Player';
|
||||||
self.type = 'mediaplayer';
|
self.type = 'mediaplayer';
|
||||||
|
@ -99,7 +102,7 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp
|
||||||
self._timeUpdated = false;
|
self._timeUpdated = false;
|
||||||
self._currentTime = null;
|
self._currentTime = null;
|
||||||
|
|
||||||
var elem = createMediaElement();
|
const elem = createMediaElement();
|
||||||
return setCurrentSrc(elem, options);
|
return setCurrentSrc(elem, options);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -109,11 +112,11 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp
|
||||||
unBindEvents(elem);
|
unBindEvents(elem);
|
||||||
bindEvents(elem);
|
bindEvents(elem);
|
||||||
|
|
||||||
var val = options.url;
|
let val = options.url;
|
||||||
console.debug('playing url: ' + val);
|
console.debug('playing url: ' + val);
|
||||||
|
|
||||||
// Convert to seconds
|
// Convert to seconds
|
||||||
var seconds = (options.playerStartPositionTicks || 0) / 10000000;
|
const seconds = (options.playerStartPositionTicks || 0) / 10000000;
|
||||||
if (seconds) {
|
if (seconds) {
|
||||||
val += '#t=' + seconds;
|
val += '#t=' + seconds;
|
||||||
}
|
}
|
||||||
|
@ -122,7 +125,7 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp
|
||||||
|
|
||||||
self._currentPlayOptions = options;
|
self._currentPlayOptions = options;
|
||||||
|
|
||||||
var crossOrigin = htmlMediaHelper.getCrossOriginValue(options.mediaSource);
|
const crossOrigin = htmlMediaHelper.getCrossOriginValue(options.mediaSource);
|
||||||
if (crossOrigin) {
|
if (crossOrigin) {
|
||||||
elem.crossOrigin = crossOrigin;
|
elem.crossOrigin = crossOrigin;
|
||||||
}
|
}
|
||||||
|
@ -130,9 +133,9 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp
|
||||||
return enableHlsPlayer(val, options.item, options.mediaSource, 'Audio').then(function () {
|
return enableHlsPlayer(val, options.item, options.mediaSource, 'Audio').then(function () {
|
||||||
return new Promise(function (resolve, reject) {
|
return new Promise(function (resolve, reject) {
|
||||||
requireHlsPlayer(function () {
|
requireHlsPlayer(function () {
|
||||||
var hls = new Hls({
|
const hls = new Hls({
|
||||||
manifestLoadingTimeOut: 20000,
|
manifestLoadingTimeOut: 20000,
|
||||||
xhrSetup: function(xhr, url) {
|
xhrSetup: function (xhr, url) {
|
||||||
xhr.withCredentials = true;
|
xhr.withCredentials = true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -183,8 +186,8 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp
|
||||||
self.stop = function (destroyPlayer) {
|
self.stop = function (destroyPlayer) {
|
||||||
cancelFadeTimeout();
|
cancelFadeTimeout();
|
||||||
|
|
||||||
var elem = self._mediaElement;
|
const elem = self._mediaElement;
|
||||||
var src = self._currentSrc;
|
const src = self._currentSrc;
|
||||||
|
|
||||||
if (elem && src) {
|
if (elem && src) {
|
||||||
if (!destroyPlayer || !supportsFade()) {
|
if (!destroyPlayer || !supportsFade()) {
|
||||||
|
@ -198,7 +201,7 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp
|
||||||
return Promise.resolve();
|
return Promise.resolve();
|
||||||
}
|
}
|
||||||
|
|
||||||
var originalVolume = elem.volume;
|
const originalVolume = elem.volume;
|
||||||
|
|
||||||
return fade(self, elem, elem.volume).then(function () {
|
return fade(self, elem, elem.volume).then(function () {
|
||||||
elem.pause();
|
elem.pause();
|
||||||
|
@ -219,7 +222,7 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp
|
||||||
};
|
};
|
||||||
|
|
||||||
function createMediaElement() {
|
function createMediaElement() {
|
||||||
var elem = self._mediaElement;
|
let elem = self._mediaElement;
|
||||||
|
|
||||||
if (elem) {
|
if (elem) {
|
||||||
return elem;
|
return elem;
|
||||||
|
@ -248,7 +251,7 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp
|
||||||
|
|
||||||
function onTimeUpdate() {
|
function onTimeUpdate() {
|
||||||
// Get the player position + the transcoding offset
|
// Get the player position + the transcoding offset
|
||||||
var time = this.currentTime;
|
const time = this.currentTime;
|
||||||
|
|
||||||
// Don't trigger events after user stop
|
// Don't trigger events after user stop
|
||||||
if (!self._isFadingOut) {
|
if (!self._isFadingOut) {
|
||||||
|
@ -287,11 +290,11 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp
|
||||||
}
|
}
|
||||||
|
|
||||||
function onError() {
|
function onError() {
|
||||||
var errorCode = this.error ? (this.error.code || 0) : 0;
|
const errorCode = this.error ? (this.error.code || 0) : 0;
|
||||||
var errorMessage = this.error ? (this.error.message || '') : '';
|
const errorMessage = this.error ? (this.error.message || '') : '';
|
||||||
console.error('media element error: ' + errorCode.toString() + ' ' + errorMessage);
|
console.error('media element error: ' + errorCode.toString() + ' ' + errorMessage);
|
||||||
|
|
||||||
var type;
|
let type;
|
||||||
|
|
||||||
switch (errorCode) {
|
switch (errorCode) {
|
||||||
case 1:
|
case 1:
|
||||||
|
@ -325,59 +328,59 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
HtmlAudioPlayer.prototype.currentSrc = function () {
|
currentSrc() {
|
||||||
return this._currentSrc;
|
return this._currentSrc;
|
||||||
};
|
}
|
||||||
|
|
||||||
HtmlAudioPlayer.prototype.canPlayMediaType = function (mediaType) {
|
canPlayMediaType(mediaType) {
|
||||||
return (mediaType || '').toLowerCase() === 'audio';
|
return (mediaType || '').toLowerCase() === 'audio';
|
||||||
};
|
}
|
||||||
|
|
||||||
HtmlAudioPlayer.prototype.getDeviceProfile = function (item) {
|
getDeviceProfile(item) {
|
||||||
if (appHost.getDeviceProfile) {
|
if (appHost.getDeviceProfile) {
|
||||||
return appHost.getDeviceProfile(item);
|
return appHost.getDeviceProfile(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
return getDefaultProfile();
|
return getDefaultProfile();
|
||||||
};
|
}
|
||||||
|
|
||||||
// Save this for when playback stops, because querying the time at that point might return 0
|
// Save this for when playback stops, because querying the time at that point might return 0
|
||||||
HtmlAudioPlayer.prototype.currentTime = function (val) {
|
currentTime(val) {
|
||||||
var mediaElement = this._mediaElement;
|
const mediaElement = this._mediaElement;
|
||||||
if (mediaElement) {
|
if (mediaElement) {
|
||||||
if (val != null) {
|
if (val != null) {
|
||||||
mediaElement.currentTime = val / 1000;
|
mediaElement.currentTime = val / 1000;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var currentTime = this._currentTime;
|
const currentTime = this._currentTime;
|
||||||
if (currentTime) {
|
if (currentTime) {
|
||||||
return currentTime * 1000;
|
return currentTime * 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (mediaElement.currentTime || 0) * 1000;
|
return (mediaElement.currentTime || 0) * 1000;
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
HtmlAudioPlayer.prototype.duration = function (val) {
|
duration(val) {
|
||||||
var mediaElement = this._mediaElement;
|
const mediaElement = this._mediaElement;
|
||||||
if (mediaElement) {
|
if (mediaElement) {
|
||||||
var duration = mediaElement.duration;
|
const duration = mediaElement.duration;
|
||||||
if (htmlMediaHelper.isValidDuration(duration)) {
|
if (htmlMediaHelper.isValidDuration(duration)) {
|
||||||
return duration * 1000;
|
return duration * 1000;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
};
|
}
|
||||||
|
|
||||||
HtmlAudioPlayer.prototype.seekable = function () {
|
seekable() {
|
||||||
var mediaElement = this._mediaElement;
|
const mediaElement = this._mediaElement;
|
||||||
if (mediaElement) {
|
if (mediaElement) {
|
||||||
var seekable = mediaElement.seekable;
|
const seekable = mediaElement.seekable;
|
||||||
if (seekable && seekable.length) {
|
if (seekable && seekable.length) {
|
||||||
var start = seekable.start(0);
|
let start = seekable.start(0);
|
||||||
var end = seekable.end(0);
|
let end = seekable.end(0);
|
||||||
|
|
||||||
if (!htmlMediaHelper.isValidDuration(start)) {
|
if (!htmlMediaHelper.isValidDuration(start)) {
|
||||||
start = 0;
|
start = 0;
|
||||||
|
@ -391,124 +394,123 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
HtmlAudioPlayer.prototype.getBufferedRanges = function () {
|
getBufferedRanges() {
|
||||||
var mediaElement = this._mediaElement;
|
const mediaElement = this._mediaElement;
|
||||||
if (mediaElement) {
|
if (mediaElement) {
|
||||||
return htmlMediaHelper.getBufferedRanges(this, mediaElement);
|
return htmlMediaHelper.getBufferedRanges(this, mediaElement);
|
||||||
}
|
}
|
||||||
|
|
||||||
return [];
|
return [];
|
||||||
};
|
}
|
||||||
|
|
||||||
HtmlAudioPlayer.prototype.pause = function () {
|
pause() {
|
||||||
var mediaElement = this._mediaElement;
|
const mediaElement = this._mediaElement;
|
||||||
if (mediaElement) {
|
if (mediaElement) {
|
||||||
mediaElement.pause();
|
mediaElement.pause();
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
// This is a retry after error
|
// This is a retry after error
|
||||||
HtmlAudioPlayer.prototype.resume = function () {
|
resume() {
|
||||||
var mediaElement = this._mediaElement;
|
const mediaElement = this._mediaElement;
|
||||||
if (mediaElement) {
|
if (mediaElement) {
|
||||||
mediaElement.play();
|
mediaElement.play();
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
HtmlAudioPlayer.prototype.unpause = function () {
|
unpause() {
|
||||||
var mediaElement = this._mediaElement;
|
const mediaElement = this._mediaElement;
|
||||||
if (mediaElement) {
|
if (mediaElement) {
|
||||||
mediaElement.play();
|
mediaElement.play();
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
HtmlAudioPlayer.prototype.paused = function () {
|
paused() {
|
||||||
var mediaElement = this._mediaElement;
|
const mediaElement = this._mediaElement;
|
||||||
if (mediaElement) {
|
if (mediaElement) {
|
||||||
return mediaElement.paused;
|
return mediaElement.paused;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
};
|
}
|
||||||
|
|
||||||
HtmlAudioPlayer.prototype.setPlaybackRate = function (value) {
|
setPlaybackRate(value) {
|
||||||
var mediaElement = this._mediaElement;
|
const mediaElement = this._mediaElement;
|
||||||
if (mediaElement) {
|
if (mediaElement) {
|
||||||
mediaElement.playbackRate = value;
|
mediaElement.playbackRate = value;
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
HtmlAudioPlayer.prototype.getPlaybackRate = function () {
|
getPlaybackRate() {
|
||||||
var mediaElement = this._mediaElement;
|
const mediaElement = this._mediaElement;
|
||||||
if (mediaElement) {
|
if (mediaElement) {
|
||||||
return mediaElement.playbackRate;
|
return mediaElement.playbackRate;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
};
|
}
|
||||||
|
|
||||||
HtmlAudioPlayer.prototype.setVolume = function (val) {
|
setVolume(val) {
|
||||||
var mediaElement = this._mediaElement;
|
const mediaElement = this._mediaElement;
|
||||||
if (mediaElement) {
|
if (mediaElement) {
|
||||||
mediaElement.volume = val / 100;
|
mediaElement.volume = val / 100;
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
HtmlAudioPlayer.prototype.getVolume = function () {
|
getVolume() {
|
||||||
var mediaElement = this._mediaElement;
|
const mediaElement = this._mediaElement;
|
||||||
if (mediaElement) {
|
if (mediaElement) {
|
||||||
return Math.min(Math.round(mediaElement.volume * 100), 100);
|
return Math.min(Math.round(mediaElement.volume * 100), 100);
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
HtmlAudioPlayer.prototype.volumeUp = function () {
|
volumeUp() {
|
||||||
this.setVolume(Math.min(this.getVolume() + 2, 100));
|
this.setVolume(Math.min(this.getVolume() + 2, 100));
|
||||||
};
|
}
|
||||||
|
|
||||||
HtmlAudioPlayer.prototype.volumeDown = function () {
|
volumeDown() {
|
||||||
this.setVolume(Math.max(this.getVolume() - 2, 0));
|
this.setVolume(Math.max(this.getVolume() - 2, 0));
|
||||||
};
|
}
|
||||||
|
|
||||||
HtmlAudioPlayer.prototype.setMute = function (mute) {
|
setMute(mute) {
|
||||||
var mediaElement = this._mediaElement;
|
const mediaElement = this._mediaElement;
|
||||||
if (mediaElement) {
|
if (mediaElement) {
|
||||||
mediaElement.muted = mute;
|
mediaElement.muted = mute;
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
HtmlAudioPlayer.prototype.isMuted = function () {
|
isMuted() {
|
||||||
var mediaElement = this._mediaElement;
|
const mediaElement = this._mediaElement;
|
||||||
if (mediaElement) {
|
if (mediaElement) {
|
||||||
return mediaElement.muted;
|
return mediaElement.muted;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
};
|
|
||||||
|
|
||||||
HtmlAudioPlayer.prototype.destroy = function () {
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
var supportedFeatures;
|
|
||||||
|
|
||||||
function getSupportedFeatures() {
|
|
||||||
var list = [];
|
|
||||||
var audio = document.createElement('audio');
|
|
||||||
|
|
||||||
if (typeof audio.playbackRate === 'number') {
|
|
||||||
list.push('PlaybackRate');
|
|
||||||
}
|
|
||||||
|
|
||||||
return list;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HtmlAudioPlayer.prototype.supports = function (feature) {
|
destroy() {
|
||||||
|
}
|
||||||
|
|
||||||
|
supports(feature) {
|
||||||
if (!supportedFeatures) {
|
if (!supportedFeatures) {
|
||||||
supportedFeatures = getSupportedFeatures();
|
supportedFeatures = getSupportedFeatures();
|
||||||
}
|
}
|
||||||
|
|
||||||
return supportedFeatures.indexOf(feature) !== -1;
|
return supportedFeatures.indexOf(feature) !== -1;
|
||||||
};
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return HtmlAudioPlayer;
|
let supportedFeatures;
|
||||||
});
|
|
||||||
|
function getSupportedFeatures() {
|
||||||
|
const list = [];
|
||||||
|
const audio = document.createElement('audio');
|
||||||
|
|
||||||
|
if (typeof audio.playbackRate === 'number') {
|
||||||
|
list.push('PlaybackRate');
|
||||||
|
}
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default HtmlAudioPlayer;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue