UNPKG

2.92 kBJavaScriptView Raw
1'use strict';
2
3exports.__esModule = true;
4/**
5 * Creates a representation object for the level
6 *
7 * @param {Function} enabledCallback
8 * Callback to call when the representation's enabled property is updated
9 * @param {Object} level
10 * The level to make a representation from
11 * @return {Object}
12 * The representation object for this level
13 */
14var createRepresentation = exports.createRepresentation = function createRepresentation(enabledCallback, level) {
15 var representation = {
16 id: level.index + '',
17 width: level.width,
18 height: level.height,
19 bandwidth: level.bitrate,
20 isEnabled_: true
21 };
22
23 representation.enabled = function (enable) {
24 if (typeof enable === 'undefined') {
25 return representation.isEnabled_;
26 }
27
28 if (enable === representation.isEnabled_) {
29 return;
30 }
31
32 if (enable === true || enable === false) {
33 representation.isEnabled_ = enable;
34 enabledCallback();
35 }
36 };
37
38 return representation;
39};
40
41/**
42 * Creates the list of representations and returns a function to use the api
43 *
44 * @param {Object} tech
45 * The flash tech
46 * @return {Function}
47 * Function used to get the list of representations
48 */
49var createRepresentations = exports.createRepresentations = function createRepresentations(tech) {
50 var representations = null;
51
52 var updateEnabled = function updateEnabled() {
53 var enabledRepresentations = representations.filter(function (rep) {
54 return rep.enabled();
55 });
56
57 // if all representations are enabled or all are disabled, enter auto mode and
58 // disable auto capping
59 if (enabledRepresentations.length === representations.length || enabledRepresentations.length === 0) {
60 tech.el_.vjs_setProperty('autoLevelCapping', -1);
61 tech.el_.vjs_setProperty('level', -1);
62 return;
63 }
64
65 // if only one representation is enabled, enter manual level mode
66 if (enabledRepresentations.length === 1) {
67 tech.el_.vjs_setProperty('level', parseInt(enabledRepresentations[0].id, 10));
68 tech.el_.vjs_setProperty('autoLevelCapping', -1);
69 return;
70 }
71
72 // otherwise enter auto mode and set auto level capping to highest bitrate
73 // representation
74 var autoCap = enabledRepresentations[enabledRepresentations.length - 1].id;
75
76 tech.el_.vjs_setProperty('autoLevelCapping', parseInt(autoCap, 10));
77 tech.el_.vjs_setProperty('level', -1);
78 };
79
80 return function () {
81 // populate representations on the first call
82 if (!representations) {
83 // FlasHLS returns levels pre-sorted by bitrate
84 var levels = tech.el_.vjs_getProperty('levels');
85
86 // filter out levels that are audio only before mapping to representation objects
87 representations = levels.filter(function (level) {
88 return !level.audio;
89 }).map(createRepresentation.bind(null, updateEnabled));
90 }
91
92 return representations;
93 };
94};
\No newline at end of file