shaka-player 3.1.3 → 3.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AUTHORS +3 -0
- package/CHANGELOG.md +175 -3
- package/CONTRIBUTORS +3 -0
- package/README.md +4 -4
- package/build/generateExterns.js +1 -1
- package/build/types/polyfill +1 -0
- package/demo/common/asset.js +9 -7
- package/demo/common/assets.js +11 -2
- package/demo/common/message_ids.js +2 -1
- package/demo/config.js +5 -2
- package/demo/index.html +1 -1
- package/demo/locales/en.json +2 -1
- package/demo/locales/source.json +8 -4
- package/demo/main.js +2 -1
- package/dist/controls.css +2 -2
- package/dist/controls.css.map +1 -1
- package/dist/demo.compiled.debug.js +15 -15
- package/dist/demo.compiled.debug.map +2 -2
- package/dist/demo.compiled.js +15 -15
- package/dist/demo.compiled.map +2 -2
- package/dist/deps.js +22 -21
- package/dist/locales.js +36 -36
- package/dist/receiver.compiled.debug.js +9 -9
- package/dist/receiver.compiled.debug.map +2 -2
- package/dist/receiver.compiled.js +9 -9
- package/dist/receiver.compiled.map +2 -2
- package/dist/shaka-player.compiled.d.ts +58 -10
- package/dist/shaka-player.compiled.debug.d.ts +58 -10
- package/dist/shaka-player.compiled.debug.externs.js +777 -717
- package/dist/shaka-player.compiled.debug.js +639 -607
- package/dist/shaka-player.compiled.debug.map +4 -4
- package/dist/shaka-player.compiled.externs.js +777 -717
- package/dist/shaka-player.compiled.js +826 -819
- package/dist/shaka-player.compiled.map +4 -4
- package/dist/shaka-player.ui.d.ts +58 -10
- package/dist/shaka-player.ui.debug.d.ts +58 -10
- package/dist/shaka-player.ui.debug.externs.js +529 -469
- package/dist/shaka-player.ui.debug.js +676 -645
- package/dist/shaka-player.ui.debug.map +4 -4
- package/dist/shaka-player.ui.externs.js +529 -469
- package/dist/shaka-player.ui.js +963 -955
- package/dist/shaka-player.ui.map +4 -4
- package/docs/tutorials/fairplay.md +1 -1
- package/docs/tutorials/ui.md +5 -5
- package/externs/aria.js +6 -0
- package/externs/shaka/ads.js +24 -1
- package/externs/shaka/manifest.js +6 -1
- package/externs/shaka/offline.js +5 -0
- package/externs/shaka/player.js +53 -9
- package/externs/shaka/text.js +10 -10
- package/externs/texttrack.js +3 -0
- package/karma.conf.js +1 -0
- package/lib/ads/ad_manager.js +16 -15
- package/lib/ads/client_side_ad_manager.js +52 -88
- package/lib/ads/server_side_ad_manager.js +26 -12
- package/lib/cast/cast_proxy.js +11 -2
- package/lib/cast/cast_receiver.js +2 -1
- package/lib/cast/cast_sender.js +2 -2
- package/lib/cast/cast_utils.js +6 -1
- package/lib/cea/cea608_data_channel.js +56 -56
- package/lib/cea/cea608_memory.js +33 -33
- package/lib/cea/cea708_service.js +43 -43
- package/lib/cea/cea708_window.js +38 -38
- package/lib/cea/cea_decoder.js +13 -14
- package/lib/cea/cea_utils.js +23 -23
- package/lib/cea/dtvcc_packet_builder.js +7 -7
- package/lib/cea/i_caption_decoder.js +2 -3
- package/lib/cea/i_cea_parser.js +2 -2
- package/lib/cea/mp4_cea_parser.js +6 -6
- package/lib/dash/dash_parser.js +98 -2
- package/lib/dash/segment_list.js +1 -1
- package/lib/dash/segment_template.js +1 -1
- package/lib/hls/hls_parser.js +159 -29
- package/lib/media/closed_caption_parser.js +1 -2
- package/lib/media/drm_engine.js +169 -192
- package/lib/media/gap_jumping_controller.js +4 -2
- package/lib/media/media_source_engine.js +1 -2
- package/lib/media/segment_index.js +3 -1
- package/lib/media/segment_reference.js +19 -2
- package/lib/media/streaming_engine.js +8 -7
- package/lib/net/networking_engine.js +3 -1
- package/lib/offline/download_manager.js +1 -2
- package/lib/offline/indexeddb/v1_storage_cell.js +1 -0
- package/lib/offline/indexeddb/v2_storage_cell.js +1 -0
- package/lib/offline/manifest_converter.js +3 -1
- package/lib/offline/storage.js +12 -14
- package/lib/player.js +437 -167
- package/lib/polyfill/aria.js +82 -0
- package/lib/polyfill/media_capabilities.js +7 -1
- package/lib/polyfill/mediasource.js +6 -0
- package/lib/polyfill/orientation.js +1 -1
- package/lib/polyfill/patchedmediakeys_apple.js +4 -4
- package/lib/polyfill/patchedmediakeys_ms.js +4 -4
- package/lib/polyfill/patchedmediakeys_webkit.js +4 -4
- package/lib/routing/walker.js +2 -3
- package/lib/text/mp4_ttml_parser.js +3 -0
- package/lib/text/srt_text_parser.js +4 -4
- package/lib/text/text_engine.js +16 -4
- package/lib/text/ttml_text_parser.js +5 -0
- package/lib/text/ui_text_displayer.js +85 -37
- package/lib/text/vtt_text_parser.js +2 -2
- package/lib/text/web_vtt_generator.js +55 -12
- package/lib/util/error.js +6 -0
- package/lib/util/fake_event.js +53 -7
- package/lib/util/manifest_parser_utils.js +1 -0
- package/lib/util/mp4_box_parsers.js +20 -20
- package/lib/util/multi_map.js +8 -0
- package/lib/util/periods.js +4 -1
- package/lib/util/platform.js +13 -1
- package/lib/util/player_configuration.js +13 -1
- package/lib/util/stream_utils.js +153 -85
- package/lib/util/xml_utils.js +31 -12
- package/package.json +1 -1
- package/roadmap.md +24 -22
- package/shaka-player.uncompiled.js +1 -0
- package/test/cast/cast_proxy_unit.js +12 -6
- package/test/cast/cast_utils_unit.js +2 -1
- package/test/cea/cea608_memory_unit.js +1 -1
- package/test/cea/cea708_service_unit.js +8 -8
- package/test/cea/cea708_window_unit.js +6 -6
- package/test/cea/cea_decoder_unit.js +1 -1
- package/test/cea/dtvcc_packet_builder_unit.js +2 -2
- package/test/dash/dash_parser_manifest_unit.js +230 -2
- package/test/hls/hls_parser_unit.js +255 -1
- package/test/media/closed_caption_parser_unit.js +6 -1
- package/test/media/drm_engine_integration.js +86 -12
- package/test/media/drm_engine_unit.js +353 -450
- package/test/offline/manifest_convert_unit.js +2 -0
- package/test/offline/storage_integration.js +9 -19
- package/test/player_integration.js +90 -0
- package/test/player_src_equals_integration.js +52 -0
- package/test/player_unit.js +11 -33
- package/test/test/assets/3675/chunk-stream0-00001.m4s +0 -0
- package/test/test/assets/3675/chunk-stream0-00002.m4s +0 -0
- package/test/test/assets/3675/chunk-stream0-00003.m4s +0 -0
- package/test/test/assets/3675/chunk-stream0-00004.m4s +0 -0
- package/test/test/assets/3675/chunk-stream0-00005.m4s +0 -0
- package/test/test/assets/3675/chunk-stream0-00006.m4s +0 -0
- package/test/test/assets/3675/chunk-stream0-00007.m4s +0 -0
- package/test/test/assets/3675/dash_0.mpd +30 -0
- package/test/test/assets/3675/dash_1.mpd +30 -0
- package/test/test/assets/3675/dash_2.mpd +30 -0
- package/test/test/assets/3675/dash_3.mpd +30 -0
- package/test/test/assets/3675/dash_4.mpd +30 -0
- package/test/test/assets/3675/dash_5.mpd +26 -0
- package/test/test/assets/3675/init-stream0.m4s +0 -0
- package/test/test/assets/chapters.srt +11 -0
- package/test/test/assets/chapters.vtt +10 -0
- package/test/test/util/cea_utils.js +12 -12
- package/test/test/util/fake_ad_manager.js +8 -1
- package/test/test/util/manifest_generator.js +2 -0
- package/test/test/util/manifest_parser_util.js +3 -1
- package/test/text/ttml_text_parser_unit.js +9 -0
- package/test/text/ui_text_displayer_unit.js +29 -17
- package/test/text/web_vtt_generator_unit.js +81 -7
- package/test/ui/localization_unit.js +15 -14
- package/test/ui/text_displayer_layout_unit.js +13 -1
- package/test/util/stream_utils_unit.js +153 -10
- package/ui/airplay_button.js +1 -1
- package/ui/audio_language_selection.js +2 -5
- package/ui/cast_button.js +6 -9
- package/ui/constants.js +0 -3
- package/ui/controls.js +4 -6
- package/ui/fast_forward_button.js +2 -3
- package/ui/fullscreen_button.js +1 -3
- package/ui/language_utils.js +1 -1
- package/ui/less/containers.less +3 -7
- package/ui/locales/ru.json +6 -6
- package/ui/localization.js +28 -51
- package/ui/loop_button.js +1 -3
- package/ui/mute_button.js +1 -3
- package/ui/overflow_menu.js +2 -3
- package/ui/pip_button.js +7 -10
- package/ui/playback_rate_selection.js +3 -6
- package/ui/presentation_time.js +1 -3
- package/ui/resolution_selection.js +4 -7
- package/ui/rewind_button.js +2 -3
- package/ui/seek_bar.js +2 -4
- package/ui/spacer.js +1 -1
- package/ui/text_selection.js +8 -11
- package/ui/ui_utils.js +1 -1
- package/ui/volume_bar.js +1 -3
|
@@ -138,7 +138,7 @@ shaka.ads.ClientSideAdManager = class {
|
|
|
138
138
|
// Remove ad breaks from the timeline
|
|
139
139
|
this.onEvent_(
|
|
140
140
|
new shaka.util.FakeEvent(shaka.ads.AdManager.CUEPOINTS_CHANGED,
|
|
141
|
-
|
|
141
|
+
(new Map()).set('cuepoints', [])));
|
|
142
142
|
}
|
|
143
143
|
|
|
144
144
|
|
|
@@ -151,30 +151,31 @@ shaka.ads.ClientSideAdManager = class {
|
|
|
151
151
|
|
|
152
152
|
const now = Date.now() / 1000;
|
|
153
153
|
const loadTime = now - this.requestAdsStartTime_;
|
|
154
|
-
this.onEvent_(
|
|
155
|
-
new
|
|
156
|
-
{'loadTime': loadTime}));
|
|
154
|
+
this.onEvent_(new shaka.util.FakeEvent(shaka.ads.AdManager.ADS_LOADED,
|
|
155
|
+
(new Map()).set('loadTime', loadTime)));
|
|
157
156
|
|
|
158
157
|
this.imaAdsManager_ = e.getAdsManager(this.video_);
|
|
159
158
|
|
|
160
159
|
this.onEvent_(new shaka.util.FakeEvent(
|
|
161
160
|
shaka.ads.AdManager.IMA_AD_MANAGER_LOADED,
|
|
162
|
-
|
|
163
|
-
'imaAdManager': this.imaAdsManager_,
|
|
164
|
-
}));
|
|
161
|
+
(new Map()).set('imaAdManager', this.imaAdsManager_)));
|
|
165
162
|
|
|
166
163
|
const cuePointStarts = this.imaAdsManager_.getCuePoints();
|
|
167
164
|
if (cuePointStarts.length) {
|
|
168
|
-
/** @type {!Array.<!shaka.
|
|
165
|
+
/** @type {!Array.<!shaka.extern.AdCuePoint>} */
|
|
169
166
|
const cuePoints = [];
|
|
170
167
|
for (const start of cuePointStarts) {
|
|
171
|
-
|
|
168
|
+
/** @type {shaka.extern.AdCuePoint} */
|
|
169
|
+
const shakaCuePoint = {
|
|
170
|
+
start: start,
|
|
171
|
+
end: null,
|
|
172
|
+
};
|
|
172
173
|
cuePoints.push(shakaCuePoint);
|
|
173
174
|
}
|
|
174
175
|
|
|
175
|
-
this.onEvent_(
|
|
176
|
-
|
|
177
|
-
|
|
176
|
+
this.onEvent_(new shaka.util.FakeEvent(
|
|
177
|
+
shaka.ads.AdManager.CUEPOINTS_CHANGED,
|
|
178
|
+
(new Map()).set('cuepoints', cuePoints)));
|
|
178
179
|
}
|
|
179
180
|
|
|
180
181
|
this.addImaEventListeners_();
|
|
@@ -224,6 +225,15 @@ shaka.ads.ClientSideAdManager = class {
|
|
|
224
225
|
* @private
|
|
225
226
|
*/
|
|
226
227
|
addImaEventListeners_() {
|
|
228
|
+
/**
|
|
229
|
+
* @param {!Event} e
|
|
230
|
+
* @param {string} type
|
|
231
|
+
*/
|
|
232
|
+
const convertEventAndSend = (e, type) => {
|
|
233
|
+
const data = (new Map()).set('originalEvent', e);
|
|
234
|
+
this.onEvent_(new shaka.util.FakeEvent(type, data));
|
|
235
|
+
};
|
|
236
|
+
|
|
227
237
|
this.eventManager_.listen(this.imaAdsManager_,
|
|
228
238
|
google.ima.AdErrorEvent.Type.AD_ERROR, (error) => {
|
|
229
239
|
this.onAdError_(/** @type {!google.ima.AdErrorEvent} */ (error));
|
|
@@ -241,30 +251,22 @@ shaka.ads.ClientSideAdManager = class {
|
|
|
241
251
|
|
|
242
252
|
this.eventManager_.listen(this.imaAdsManager_,
|
|
243
253
|
google.ima.AdEvent.Type.FIRST_QUARTILE, (e) => {
|
|
244
|
-
|
|
245
|
-
new shaka.util.FakeEvent(shaka.ads.AdManager.AD_FIRST_QUARTILE,
|
|
246
|
-
{'originalEvent': e}));
|
|
254
|
+
convertEventAndSend(e, shaka.ads.AdManager.AD_FIRST_QUARTILE);
|
|
247
255
|
});
|
|
248
256
|
|
|
249
257
|
this.eventManager_.listen(this.imaAdsManager_,
|
|
250
258
|
google.ima.AdEvent.Type.MIDPOINT, (e) => {
|
|
251
|
-
|
|
252
|
-
new shaka.util.FakeEvent(shaka.ads.AdManager.AD_MIDPOINT,
|
|
253
|
-
{'originalEvent': e}));
|
|
259
|
+
convertEventAndSend(e, shaka.ads.AdManager.AD_MIDPOINT);
|
|
254
260
|
});
|
|
255
261
|
|
|
256
262
|
this.eventManager_.listen(this.imaAdsManager_,
|
|
257
263
|
google.ima.AdEvent.Type.THIRD_QUARTILE, (e) => {
|
|
258
|
-
|
|
259
|
-
new shaka.util.FakeEvent(shaka.ads.AdManager.AD_THIRD_QUARTILE,
|
|
260
|
-
{'originalEvent': e}));
|
|
264
|
+
convertEventAndSend(e, shaka.ads.AdManager.AD_THIRD_QUARTILE);
|
|
261
265
|
});
|
|
262
266
|
|
|
263
267
|
this.eventManager_.listen(this.imaAdsManager_,
|
|
264
268
|
google.ima.AdEvent.Type.COMPLETE, (e) => {
|
|
265
|
-
|
|
266
|
-
new shaka.util.FakeEvent(shaka.ads.AdManager.AD_COMPLETE,
|
|
267
|
-
{'originalEvent': e}));
|
|
269
|
+
convertEventAndSend(e, shaka.ads.AdManager.AD_COMPLETE);
|
|
268
270
|
});
|
|
269
271
|
|
|
270
272
|
this.eventManager_.listen(this.imaAdsManager_,
|
|
@@ -279,140 +281,102 @@ shaka.ads.ClientSideAdManager = class {
|
|
|
279
281
|
|
|
280
282
|
this.eventManager_.listen(this.imaAdsManager_,
|
|
281
283
|
google.ima.AdEvent.Type.SKIPPED, (e) => {
|
|
282
|
-
|
|
283
|
-
new shaka.util.FakeEvent(shaka.ads.AdManager.AD_SKIPPED,
|
|
284
|
-
{'originalEvent': e}));
|
|
284
|
+
convertEventAndSend(e, shaka.ads.AdManager.AD_SKIPPED);
|
|
285
285
|
});
|
|
286
286
|
|
|
287
287
|
this.eventManager_.listen(this.imaAdsManager_,
|
|
288
288
|
google.ima.AdEvent.Type.VOLUME_CHANGED, (e) => {
|
|
289
|
-
|
|
290
|
-
new shaka.util.FakeEvent(shaka.ads.AdManager.AD_VOLUME_CHANGED,
|
|
291
|
-
{'originalEvent': e}));
|
|
289
|
+
convertEventAndSend(e, shaka.ads.AdManager.AD_VOLUME_CHANGED);
|
|
292
290
|
});
|
|
293
291
|
|
|
294
292
|
this.eventManager_.listen(this.imaAdsManager_,
|
|
295
293
|
google.ima.AdEvent.Type.VOLUME_MUTED, (e) => {
|
|
296
|
-
|
|
297
|
-
new shaka.util.FakeEvent(shaka.ads.AdManager.AD_MUTED,
|
|
298
|
-
{'originalEvent': e}));
|
|
294
|
+
convertEventAndSend(e, shaka.ads.AdManager.AD_MUTED);
|
|
299
295
|
});
|
|
300
296
|
|
|
301
297
|
this.eventManager_.listen(this.imaAdsManager_,
|
|
302
298
|
google.ima.AdEvent.Type.PAUSED, (e) => {
|
|
303
299
|
goog.asserts.assert(this.ad_ != null, 'Ad should not be null!');
|
|
304
300
|
this.ad_.setPaused(true);
|
|
305
|
-
|
|
306
|
-
new shaka.util.FakeEvent(shaka.ads.AdManager.AD_PAUSED,
|
|
307
|
-
{'originalEvent': e}));
|
|
301
|
+
convertEventAndSend(e, shaka.ads.AdManager.AD_PAUSED);
|
|
308
302
|
});
|
|
309
303
|
|
|
310
304
|
this.eventManager_.listen(this.imaAdsManager_,
|
|
311
305
|
google.ima.AdEvent.Type.RESUMED, (e) => {
|
|
312
306
|
goog.asserts.assert(this.ad_ != null, 'Ad should not be null!');
|
|
313
307
|
this.ad_.setPaused(false);
|
|
314
|
-
|
|
315
|
-
new shaka.util.FakeEvent(shaka.ads.AdManager.AD_RESUMED,
|
|
316
|
-
{'originalEvent': e}));
|
|
308
|
+
convertEventAndSend(e, shaka.ads.AdManager.AD_RESUMED);
|
|
317
309
|
});
|
|
318
310
|
|
|
319
311
|
this.eventManager_.listen(this.imaAdsManager_,
|
|
320
312
|
google.ima.AdEvent.Type.SKIPPABLE_STATE_CHANGED, (e) => {
|
|
321
313
|
goog.asserts.assert(this.ad_ != null, 'Ad should not be null!');
|
|
322
|
-
|
|
323
|
-
shaka.ads.AdManager.AD_SKIP_STATE_CHANGED,
|
|
324
|
-
{'originalEvent': e}));
|
|
314
|
+
convertEventAndSend(e, shaka.ads.AdManager.AD_SKIP_STATE_CHANGED);
|
|
325
315
|
});
|
|
326
316
|
|
|
327
317
|
this.eventManager_.listen(this.imaAdsManager_,
|
|
328
318
|
google.ima.AdEvent.Type.CLICK, (e) => {
|
|
329
|
-
|
|
330
|
-
shaka.ads.AdManager.AD_CLICKED,
|
|
331
|
-
{'originalEvent': e}));
|
|
319
|
+
convertEventAndSend(e, shaka.ads.AdManager.AD_CLICKED);
|
|
332
320
|
});
|
|
333
321
|
|
|
334
322
|
this.eventManager_.listen(this.imaAdsManager_,
|
|
335
323
|
google.ima.AdEvent.Type.AD_PROGRESS, (e) => {
|
|
336
|
-
|
|
337
|
-
shaka.ads.AdManager.AD_PROGRESS,
|
|
338
|
-
{'originalEvent': e}));
|
|
324
|
+
convertEventAndSend(e, shaka.ads.AdManager.AD_PROGRESS);
|
|
339
325
|
});
|
|
340
326
|
|
|
341
327
|
this.eventManager_.listen(this.imaAdsManager_,
|
|
342
328
|
google.ima.AdEvent.Type.AD_BUFFERING, (e) => {
|
|
343
|
-
|
|
344
|
-
shaka.ads.AdManager.AD_BUFFERING,
|
|
345
|
-
{'originalEvent': e}));
|
|
329
|
+
convertEventAndSend(e, shaka.ads.AdManager.AD_BUFFERING);
|
|
346
330
|
});
|
|
347
331
|
|
|
348
332
|
this.eventManager_.listen(this.imaAdsManager_,
|
|
349
333
|
google.ima.AdEvent.Type.IMPRESSION, (e) => {
|
|
350
|
-
|
|
351
|
-
shaka.ads.AdManager.AD_IMPRESSION,
|
|
352
|
-
{'originalEvent': e}));
|
|
334
|
+
convertEventAndSend(e, shaka.ads.AdManager.AD_IMPRESSION);
|
|
353
335
|
});
|
|
354
336
|
|
|
355
337
|
this.eventManager_.listen(this.imaAdsManager_,
|
|
356
338
|
google.ima.AdEvent.Type.DURATION_CHANGE, (e) => {
|
|
357
|
-
|
|
358
|
-
shaka.ads.AdManager.AD_DURATION_CHANGED,
|
|
359
|
-
{'originalEvent': e}));
|
|
339
|
+
convertEventAndSend(e, shaka.ads.AdManager.AD_DURATION_CHANGED);
|
|
360
340
|
});
|
|
361
341
|
|
|
362
342
|
this.eventManager_.listen(this.imaAdsManager_,
|
|
363
343
|
google.ima.AdEvent.Type.USER_CLOSE, (e) => {
|
|
364
|
-
|
|
365
|
-
shaka.ads.AdManager.AD_CLOSED,
|
|
366
|
-
{'originalEvent': e}));
|
|
344
|
+
convertEventAndSend(e, shaka.ads.AdManager.AD_CLOSED);
|
|
367
345
|
});
|
|
368
346
|
|
|
369
347
|
this.eventManager_.listen(this.imaAdsManager_,
|
|
370
348
|
google.ima.AdEvent.Type.LOADED, (e) => {
|
|
371
|
-
|
|
372
|
-
shaka.ads.AdManager.AD_LOADED,
|
|
373
|
-
{'originalEvent': e}));
|
|
349
|
+
convertEventAndSend(e, shaka.ads.AdManager.AD_LOADED);
|
|
374
350
|
});
|
|
375
351
|
|
|
376
352
|
this.eventManager_.listen(this.imaAdsManager_,
|
|
377
353
|
google.ima.AdEvent.Type.ALL_ADS_COMPLETED, (e) => {
|
|
378
|
-
|
|
379
|
-
shaka.ads.AdManager.ALL_ADS_COMPLETED,
|
|
380
|
-
{'originalEvent': e}));
|
|
354
|
+
convertEventAndSend(e, shaka.ads.AdManager.ALL_ADS_COMPLETED);
|
|
381
355
|
});
|
|
382
356
|
|
|
383
357
|
this.eventManager_.listen(this.imaAdsManager_,
|
|
384
358
|
google.ima.AdEvent.Type.LINEAR_CHANGED, (e) => {
|
|
385
|
-
|
|
386
|
-
shaka.ads.AdManager.AD_LINEAR_CHANGED,
|
|
387
|
-
{'originalEvent': e}));
|
|
359
|
+
convertEventAndSend(e, shaka.ads.AdManager.AD_LINEAR_CHANGED);
|
|
388
360
|
});
|
|
389
361
|
|
|
390
362
|
this.eventManager_.listen(this.imaAdsManager_,
|
|
391
363
|
google.ima.AdEvent.Type.AD_METADATA, (e) => {
|
|
392
|
-
|
|
393
|
-
shaka.ads.AdManager.AD_METADATA,
|
|
394
|
-
{'originalEvent': e}));
|
|
364
|
+
convertEventAndSend(e, shaka.ads.AdManager.AD_METADATA);
|
|
395
365
|
});
|
|
396
366
|
|
|
397
367
|
this.eventManager_.listen(this.imaAdsManager_,
|
|
398
368
|
google.ima.AdEvent.Type.LOG, (e) => {
|
|
399
|
-
|
|
400
|
-
shaka.ads.AdManager.AD_RECOVERABLE_ERROR,
|
|
401
|
-
{'originalEvent': e}));
|
|
369
|
+
convertEventAndSend(e, shaka.ads.AdManager.AD_RECOVERABLE_ERROR);
|
|
402
370
|
});
|
|
403
371
|
|
|
404
372
|
this.eventManager_.listen(this.imaAdsManager_,
|
|
405
373
|
google.ima.AdEvent.Type.AD_BREAK_READY, (e) => {
|
|
406
|
-
|
|
407
|
-
shaka.ads.AdManager.AD_BREAK_READY,
|
|
408
|
-
{'originalEvent': e}));
|
|
374
|
+
convertEventAndSend(e, shaka.ads.AdManager.AD_BREAK_READY);
|
|
409
375
|
});
|
|
410
376
|
|
|
411
377
|
this.eventManager_.listen(this.imaAdsManager_,
|
|
412
378
|
google.ima.AdEvent.Type.INTERACTION, (e) => {
|
|
413
|
-
|
|
414
|
-
shaka.ads.AdManager.AD_INTERACTION,
|
|
415
|
-
{'originalEvent': e}));
|
|
379
|
+
convertEventAndSend(e, shaka.ads.AdManager.AD_INTERACTION);
|
|
416
380
|
});
|
|
417
381
|
}
|
|
418
382
|
|
|
@@ -426,12 +390,12 @@ shaka.ads.ClientSideAdManager = class {
|
|
|
426
390
|
|
|
427
391
|
const imaAd = e.getAd();
|
|
428
392
|
this.ad_ = new shaka.ads.ClientSideAd(imaAd, this.imaAdsManager_);
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
393
|
+
const data = new Map()
|
|
394
|
+
.set('ad', this.ad_)
|
|
395
|
+
.set('sdkAdObject', imaAd)
|
|
396
|
+
.set('originalEvent', e);
|
|
397
|
+
this.onEvent_(new shaka.util.FakeEvent(
|
|
398
|
+
shaka.ads.AdManager.AD_STARTED, data));
|
|
435
399
|
this.adContainer_.setAttribute('ad-active', 'true');
|
|
436
400
|
this.video_.pause();
|
|
437
401
|
}
|
|
@@ -442,7 +406,7 @@ shaka.ads.ClientSideAdManager = class {
|
|
|
442
406
|
*/
|
|
443
407
|
onAdComplete_(e) {
|
|
444
408
|
this.onEvent_(new shaka.util.FakeEvent(shaka.ads.AdManager.AD_STOPPED,
|
|
445
|
-
|
|
409
|
+
(new Map()).set('originalEvent', e)));
|
|
446
410
|
this.adContainer_.removeAttribute('ad-active');
|
|
447
411
|
this.video_.play();
|
|
448
412
|
}
|
|
@@ -64,6 +64,9 @@ shaka.ads.ServerSideAdManager = class {
|
|
|
64
64
|
/** @private {string} */
|
|
65
65
|
this.backupUrl_ = '';
|
|
66
66
|
|
|
67
|
+
/** @private {!Array.<!shaka.extern.AdCuePoint>} */
|
|
68
|
+
this.currentCuePoints_ = [];
|
|
69
|
+
|
|
67
70
|
/** @private {shaka.util.EventManager} */
|
|
68
71
|
this.eventManager_ = new shaka.util.EventManager();
|
|
69
72
|
|
|
@@ -77,9 +80,7 @@ shaka.ads.ServerSideAdManager = class {
|
|
|
77
80
|
|
|
78
81
|
this.onEvent_(new shaka.util.FakeEvent(
|
|
79
82
|
shaka.ads.AdManager.IMA_STREAM_MANAGER_LOADED,
|
|
80
|
-
|
|
81
|
-
'imaStreamManager': this.streamManager_,
|
|
82
|
-
}));
|
|
83
|
+
(new Map()).set('imaStreamManager', this.streamManager_)));
|
|
83
84
|
|
|
84
85
|
// Events
|
|
85
86
|
this.eventManager_.listen(this.streamManager_,
|
|
@@ -214,6 +215,7 @@ shaka.ads.ServerSideAdManager = class {
|
|
|
214
215
|
// this.streamManager_.reset();
|
|
215
216
|
this.backupUrl_ = '';
|
|
216
217
|
this.snapForwardTime_ = null;
|
|
218
|
+
this.currentCuePoints_ = [];
|
|
217
219
|
}
|
|
218
220
|
|
|
219
221
|
/** @override */
|
|
@@ -251,6 +253,13 @@ shaka.ads.ServerSideAdManager = class {
|
|
|
251
253
|
}
|
|
252
254
|
}
|
|
253
255
|
|
|
256
|
+
/**
|
|
257
|
+
* @return {!Array.<!shaka.extern.AdCuePoint>}
|
|
258
|
+
*/
|
|
259
|
+
getCuePoints() {
|
|
260
|
+
return this.currentCuePoints_;
|
|
261
|
+
}
|
|
262
|
+
|
|
254
263
|
/**
|
|
255
264
|
* If a seek jumped over the ad break, return to the start of the
|
|
256
265
|
* ad break, then complete the seek after the ad played through.
|
|
@@ -298,7 +307,7 @@ shaka.ads.ServerSideAdManager = class {
|
|
|
298
307
|
}
|
|
299
308
|
|
|
300
309
|
this.onEvent_(new shaka.util.FakeEvent(shaka.ads.AdManager.AD_STARTED,
|
|
301
|
-
|
|
310
|
+
(new Map()).set('ad', this.ad_)));
|
|
302
311
|
this.adContainer_.setAttribute('ad-active', 'true');
|
|
303
312
|
}
|
|
304
313
|
|
|
@@ -324,9 +333,8 @@ shaka.ads.ServerSideAdManager = class {
|
|
|
324
333
|
onLoaded_(e) {
|
|
325
334
|
const now = Date.now() / 1000;
|
|
326
335
|
const loadTime = now - this.streamRequestStartTime_;
|
|
327
|
-
this.onEvent_(
|
|
328
|
-
new
|
|
329
|
-
{'loadTime': loadTime}));
|
|
336
|
+
this.onEvent_(new shaka.util.FakeEvent(shaka.ads.AdManager.ADS_LOADED,
|
|
337
|
+
(new Map()).set('loadTime', loadTime)));
|
|
330
338
|
|
|
331
339
|
const streamData = e.getStreamData();
|
|
332
340
|
const url = streamData.url;
|
|
@@ -379,15 +387,21 @@ shaka.ads.ServerSideAdManager = class {
|
|
|
379
387
|
onCuePointsChanged_(e) {
|
|
380
388
|
const streamData = e.getStreamData();
|
|
381
389
|
|
|
382
|
-
/** @type {!Array.<!shaka.
|
|
390
|
+
/** @type {!Array.<!shaka.extern.AdCuePoint>} */
|
|
383
391
|
const cuePoints = [];
|
|
384
392
|
for (const point of streamData.cuepoints) {
|
|
385
|
-
|
|
393
|
+
/** @type {shaka.extern.AdCuePoint} */
|
|
394
|
+
const shakaCuePoint = {
|
|
395
|
+
start: point.start,
|
|
396
|
+
end: point.end,
|
|
397
|
+
};
|
|
386
398
|
cuePoints.push(shakaCuePoint);
|
|
387
399
|
}
|
|
388
400
|
|
|
389
|
-
this.
|
|
390
|
-
|
|
391
|
-
|
|
401
|
+
this.currentCuePoints_ = cuePoints;
|
|
402
|
+
|
|
403
|
+
this.onEvent_(new shaka.util.FakeEvent(
|
|
404
|
+
shaka.ads.AdManager.CUEPOINTS_CHANGED,
|
|
405
|
+
(new Map()).set('cuepoints', cuePoints)));
|
|
392
406
|
}
|
|
393
407
|
};
|
package/lib/cast/cast_proxy.js
CHANGED
|
@@ -525,7 +525,8 @@ shaka.cast.CastProxy = class extends shaka.util.FakeEventTarget {
|
|
|
525
525
|
goog.asserts.assert(error instanceof shaka.util.Error,
|
|
526
526
|
'Wrong error type!');
|
|
527
527
|
const eventType = shaka.Player.EventName.Error;
|
|
528
|
-
const
|
|
528
|
+
const data = (new Map()).set('detail', error);
|
|
529
|
+
const event = new shaka.util.FakeEvent(eventType, data);
|
|
529
530
|
this.localPlayer_.dispatchEvent(event);
|
|
530
531
|
});
|
|
531
532
|
}
|
|
@@ -598,7 +599,7 @@ shaka.cast.CastProxy = class extends shaka.util.FakeEventTarget {
|
|
|
598
599
|
|
|
599
600
|
// Convert this real Event into a FakeEvent for dispatch from our
|
|
600
601
|
// FakeEventListener.
|
|
601
|
-
const fakeEvent =
|
|
602
|
+
const fakeEvent = shaka.util.FakeEvent.fromRealEvent(event);
|
|
602
603
|
this.videoEventTarget_.dispatchEvent(fakeEvent);
|
|
603
604
|
}
|
|
604
605
|
|
|
@@ -647,6 +648,14 @@ shaka.cast.CastProxy = class extends shaka.util.FakeEventTarget {
|
|
|
647
648
|
return () => this.localPlayer_.getNetworkingEngine();
|
|
648
649
|
}
|
|
649
650
|
|
|
651
|
+
if (name == 'getDrmEngine') {
|
|
652
|
+
// Always returns a local instance.
|
|
653
|
+
if (this.sender_.isCasting()) {
|
|
654
|
+
shaka.log.warning('NOTE: getDrmEngine() is always local!');
|
|
655
|
+
}
|
|
656
|
+
return () => this.localPlayer_.getDrmEngine();
|
|
657
|
+
}
|
|
658
|
+
|
|
650
659
|
if (name == 'getAdManager') {
|
|
651
660
|
// Always returns a local instance.
|
|
652
661
|
if (this.sender_.isCasting()) {
|
|
@@ -407,7 +407,8 @@ shaka.cast.CastReceiver = class extends shaka.util.FakeEventTarget {
|
|
|
407
407
|
goog.asserts.assert(error instanceof shaka.util.Error,
|
|
408
408
|
'Wrong error type!');
|
|
409
409
|
const eventType = shaka.Player.EventName.Error;
|
|
410
|
-
const
|
|
410
|
+
const data = (new Map()).set('detail', error);
|
|
411
|
+
const event = new shaka.util.FakeEvent(eventType, data);
|
|
411
412
|
// Only dispatch the event if the player still exists.
|
|
412
413
|
if (this.player_) {
|
|
413
414
|
this.player_.dispatchEvent(event);
|
package/lib/cast/cast_sender.js
CHANGED
|
@@ -647,7 +647,7 @@ shaka.cast.CastSender = class {
|
|
|
647
647
|
case 'event': {
|
|
648
648
|
const targetName = message['targetName'];
|
|
649
649
|
const event = message['event'];
|
|
650
|
-
const fakeEvent =
|
|
650
|
+
const fakeEvent = shaka.util.FakeEvent.fromRealEvent(event);
|
|
651
651
|
this.onRemoteEvent_(targetName, fakeEvent);
|
|
652
652
|
break;
|
|
653
653
|
}
|
|
@@ -725,7 +725,7 @@ shaka.cast.CastSender = class {
|
|
|
725
725
|
|
|
726
726
|
// Dispatch it through the Player proxy
|
|
727
727
|
const fakeEvent = new shaka.util.FakeEvent(
|
|
728
|
-
'error',
|
|
728
|
+
'error', (new Map()).set('detail', shakaError));
|
|
729
729
|
this.onRemoteEvent_('player', fakeEvent);
|
|
730
730
|
|
|
731
731
|
// Force this session to disconnect and transfer playback to the local
|
package/lib/cast/cast_utils.js
CHANGED
|
@@ -305,10 +305,11 @@ shaka.cast.CastUtils.PlayerGetterMethods = {
|
|
|
305
305
|
'getAssetUri': 2,
|
|
306
306
|
'getAudioLanguages': 4,
|
|
307
307
|
'getAudioLanguagesAndRoles': 4,
|
|
308
|
+
'getBufferFullness': 1,
|
|
308
309
|
'getBufferedInfo': 2,
|
|
309
310
|
// NOTE: The 'getSharedConfiguration' property is not proxied as it would
|
|
310
311
|
// not be possible to share a reference.
|
|
311
|
-
'getConfiguration':
|
|
312
|
+
'getConfiguration': 4,
|
|
312
313
|
'getExpiration': 2,
|
|
313
314
|
'getKeyStatuses': 2,
|
|
314
315
|
// NOTE: The 'getManifest' property is not proxied, as it is very large.
|
|
@@ -371,10 +372,13 @@ shaka.cast.CastUtils.PlayerInitAfterLoadState = [
|
|
|
371
372
|
* @const {!Array.<string>}
|
|
372
373
|
*/
|
|
373
374
|
shaka.cast.CastUtils.PlayerVoidMethods = [
|
|
375
|
+
'addChaptersTrack',
|
|
374
376
|
'addTextTrack',
|
|
375
377
|
'addTextTrackAsync',
|
|
376
378
|
'cancelTrickPlay',
|
|
377
379
|
'configure',
|
|
380
|
+
'getChapters',
|
|
381
|
+
'getChaptersTracks',
|
|
378
382
|
'resetConfiguration',
|
|
379
383
|
'retryStreaming',
|
|
380
384
|
'selectAudioLanguage',
|
|
@@ -384,6 +388,7 @@ shaka.cast.CastUtils.PlayerVoidMethods = [
|
|
|
384
388
|
'selectVariantsByLabel',
|
|
385
389
|
'setTextTrackVisibility',
|
|
386
390
|
'trickPlay',
|
|
391
|
+
'goToLive',
|
|
387
392
|
];
|
|
388
393
|
|
|
389
394
|
|