{"version":3,"file":"static/js/main.1c7d6beb.js","mappings":"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MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAAC,MAAO,MACpE,CAAC,MAAO,MAAO,CAAC,MAAO,MAAO,CAA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","sources":["../node_modules/@mui/material/node_modules/react-is/cjs/react-is.production.min.js","../node_modules/@mui/material/node_modules/react-is/index.js","../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../node_modules/hoist-non-react-statics/node_modules/react-is/cjs/react-is.production.min.js","../node_modules/hoist-non-react-statics/node_modules/react-is/index.js","../node_modules/react-dom/cjs/react-dom.production.min.js","../node_modules/react-dom/client.js","../node_modules/react-dom/index.js","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/cjs/react.production.min.js","../node_modules/react/index.js","../node_modules/react/jsx-runtime.js","../node_modules/scheduler/cjs/scheduler.production.min.js","../node_modules/scheduler/index.js","../../node_modules/eme-encryption-scheme-polyfill/index.js","../../node_modules/google-closure-library/closure/goog/base.js","com/google/javascript/jscomp/js/es6/util/arrayiterator.js","com/google/javascript/jscomp/js/util/defineproperty.js","com/google/javascript/jscomp/js/util/global.js","com/google/javascript/jscomp/js/util/polyfill.js","com/google/javascript/jscomp/js/es6/symbol.js","com/google/javascript/jscomp/js/es6/util/makeiterator.js","com/google/javascript/jscomp/js/es6/util/arrayfromiterable.js","com/google/javascript/jscomp/js/es6/util/arrayfromiterator.js","com/google/javascript/jscomp/js/util/objectcreate.js","com/google/javascript/jscomp/js/es6/util/setprototypeof.js","com/google/javascript/jscomp/js/es6/util/inherits.js","com/google/javascript/jscomp/js/es6/generator_engine.js","com/google/javascript/jscomp/js/es6/execute_async_generator.js","com/google/javascript/jscomp/js/es6/util/restarguments.js","com/google/javascript/jscomp/js/util/owns.js","com/google/javascript/jscomp/js/es6/util/iteratorfromarray.js","com/google/javascript/jscomp/js/util/findinternal.js","com/google/javascript/jscomp/js/util/checkstringargs.js","com/google/javascript/jscomp/js/es6/promise/promise.js","com/google/javascript/jscomp/js/es6/weakmap.js","com/google/javascript/jscomp/js/es6/map.js","com/google/javascript/jscomp/js/es6/set.js","com/google/javascript/jscomp/js/es6/array/keys.js","com/google/javascript/jscomp/js/es6/array/findindex.js","com/google/javascript/jscomp/js/es6/array/from.js","com/google/javascript/jscomp/js/es6/array/values.js","com/google/javascript/jscomp/js/es6/object/is.js","com/google/javascript/jscomp/js/es6/array/includes.js","com/google/javascript/jscomp/js/es6/string/includes.js","com/google/javascript/jscomp/js/es6/string/fromcodepoint.js","com/google/javascript/jscomp/js/es6/weakset.js","com/google/javascript/jscomp/js/es6/array/find.js","com/google/javascript/jscomp/js/es6/string/startswith.js","com/google/javascript/jscomp/js/es6/object/entries.js","com/google/javascript/jscomp/js/es6/util/assign.js","com/google/javascript/jscomp/js/es6/object/assign.js","com/google/javascript/jscomp/js/es6/promise/finally.js","com/google/javascript/jscomp/js/es6/array/entries.js","com/google/javascript/jscomp/js/es6/number/isnan.js","com/google/javascript/jscomp/js/es6/string/repeat.js","com/google/javascript/jscomp/js/es6/number/constants.js","com/google/javascript/jscomp/js/es6/number/isfinite.js","com/google/javascript/jscomp/js/es6/object/values.js","com/google/javascript/jscomp/js/es6/math/log2.js","com/google/javascript/jscomp/js/es6/string/endswith.js","com/google/javascript/jscomp/js/es6/math/trunc.js","../node_modules/shaka-player/lib/debug/asserts.js","../node_modules/shaka-player/lib/abr/ewma.js","../node_modules/shaka-player/lib/abr/ewma_bandwidth_estimator.js","../node_modules/shaka-player/lib/debug/log.js","../node_modules/shaka-player/lib/util/multi_map.js","../node_modules/shaka-player/lib/util/event_manager.js","../node_modules/shaka-player/lib/media/media_source_capabilities.js","../node_modules/shaka-player/lib/deprecate/version.js","../node_modules/shaka-player/lib/deprecate/deprecate.js","../node_modules/shaka-player/lib/text/text_engine.js","../node_modules/shaka-player/lib/deprecate/enforcer.js","../node_modules/shaka-player/lib/cea/dummy_caption_decoder.js","../node_modules/shaka-player/lib/cea/dummy_cea_parser.js","../node_modules/shaka-player/lib/util/buffer_utils.js","../node_modules/shaka-player/lib/media/closed_caption_parser.js","../node_modules/shaka-player/lib/text/cue_region.js","../node_modules/shaka-player/lib/util/array_utils.js","../node_modules/shaka-player/lib/util/error.js","../node_modules/shaka-player/lib/util/lazy.js","../node_modules/shaka-player/lib/util/drm_utils.js","../node_modules/shaka-player/lib/util/delayed_tick.js","../node_modules/shaka-player/lib/util/timer.js","../node_modules/shaka-player/lib/util/platform.js","../node_modules/shaka-player/lib/util/string_utils.js","../node_modules/shaka-player/lib/util/text_parser.js","../node_modules/shaka-player/lib/util/object_utils.js","../node_modules/shaka-player/lib/util/tXml.js","../node_modules/shaka-player/lib/text/cue.js","../node_modules/shaka-player/lib/transmuxer/transmuxer_engine.js","../node_modules/shaka-player/third_party/closure-uri/utils.js","../node_modules/shaka-player/third_party/closure-uri/uri.js","../node_modules/shaka-player/lib/util/uint8array_utils.js","../node_modules/shaka-player/lib/util/manifest_parser_utils.js","../node_modules/shaka-player/lib/util/mime_utils.js","../node_modules/shaka-player/lib/util/functional.js","../node_modules/shaka-player/lib/util/language_utils.js","../node_modules/shaka-player/lib/util/stream_utils.js","../node_modules/shaka-player/lib/media/drm_engine.js","../node_modules/shaka-player/lib/media/segment_reference.js","../node_modules/shaka-player/lib/abr/simple_abr_manager.js","../node_modules/shaka-player/lib/media/adaptation_set.js","../node_modules/shaka-player/lib/media/adaptation_set_criteria.js","../node_modules/shaka-player/lib/media/buffering_observer.js","../node_modules/shaka-player/lib/player.js","../node_modules/shaka-player/lib/config/auto_show_text.js","../node_modules/shaka-player/lib/config/codec_switching_strategy.js","../node_modules/shaka-player/lib/net/backoff.js","../node_modules/shaka-player/lib/util/public_promise.js","../node_modules/shaka-player/lib/util/abortable_operation.js","../node_modules/shaka-player/lib/util/fake_event.js","../node_modules/shaka-player/lib/util/fake_event_target.js","../node_modules/shaka-player/lib/util/operation_manager.js","../node_modules/shaka-player/lib/net/networking_engine.js","../node_modules/shaka-player/lib/util/destroyer.js","../node_modules/shaka-player/lib/util/iterables.js","../node_modules/shaka-player/lib/util/map_utils.js","../node_modules/shaka-player/lib/util/data_view_reader.js","../node_modules/shaka-player/lib/util/mp4_parser.js","../node_modules/shaka-player/lib/util/pssh.js","../node_modules/shaka-player/lib/media/manifest_filterer.js","../node_modules/shaka-player/lib/media/manifest_parser.js","../node_modules/shaka-player/lib/media/content_workarounds.js","../node_modules/shaka-player/lib/media/time_ranges_utils.js","../node_modules/shaka-player/lib/util/dom_utils.js","../node_modules/shaka-player/lib/util/id3_utils.js","../node_modules/shaka-player/lib/util/mp4_box_parsers.js","../node_modules/shaka-player/lib/util/exp_golomb.js","../node_modules/shaka-player/lib/util/ts_parser.js","../node_modules/shaka-player/lib/lcevc/lcevc_dec.js","../node_modules/shaka-player/lib/media/media_source_engine.js","../node_modules/shaka-player/lib/media/segment_index.js","../node_modules/shaka-player/lib/media/presentation_timeline.js","../node_modules/shaka-player/lib/media/stall_detector.js","../node_modules/shaka-player/lib/media/gap_jumping_controller.js","../node_modules/shaka-player/lib/util/media_ready_state_utils.js","../node_modules/shaka-player/lib/media/video_wrapper.js","../node_modules/shaka-player/lib/media/playhead.js","../node_modules/shaka-player/lib/media/play_rate_controller.js","../node_modules/shaka-player/lib/media/playhead_observer.js","../node_modules/shaka-player/lib/util/state_history.js","../node_modules/shaka-player/lib/util/switch_history.js","../node_modules/shaka-player/lib/util/stats.js","../node_modules/shaka-player/lib/media/segment_prefetch.js","../node_modules/shaka-player/lib/media/region_timeline.js","../node_modules/shaka-player/lib/media/quality_observer.js","../node_modules/shaka-player/lib/media/segment_utils.js","../node_modules/shaka-player/lib/util/networking.js","../node_modules/shaka-player/lib/media/streaming_engine.js","../node_modules/shaka-player/lib/util/config_utils.js","../node_modules/shaka-player/lib/util/fairplay_utils.js","../node_modules/shaka-player/lib/util/player_configuration.js","../node_modules/shaka-player/lib/media/preload_manager.js","../node_modules/shaka-player/lib/media/region_observer.js","../node_modules/shaka-player/lib/net/networking_utils.js","../node_modules/shaka-player/lib/text/text_utils.js","../node_modules/shaka-player/lib/text/simple_text_displayer.js","../node_modules/shaka-player/lib/text/stub_text_displayer.js","../node_modules/shaka-player/lib/text/ui_text_displayer.js","../node_modules/shaka-player/lib/util/cmcd_manager.js","../node_modules/shaka-player/lib/text/web_vtt_generator.js","../node_modules/shaka-player/lib/util/cmsd_manager.js","../node_modules/shaka-player/lib/util/mutex.js","../node_modules/shaka-player/lib/util/number_utils.js","../node_modules/shaka-player/lib/ads/ads_stats.js","../node_modules/shaka-player/lib/ads/client_side_ad.js","../node_modules/shaka-player/lib/ads/ad_utils.js","../node_modules/shaka-player/lib/ads/client_side_ad_manager.js","../node_modules/shaka-player/lib/ads/interstitial_ad.js","../node_modules/shaka-player/lib/ads/interstitial_ad_manager.js","../node_modules/shaka-player/lib/ads/media_tailor_ad.js","../node_modules/shaka-player/lib/ads/media_tailor_ad_manager.js","../node_modules/shaka-player/lib/ads/server_side_ad.js","../node_modules/shaka-player/lib/ads/server_side_ad_manager.js","../node_modules/shaka-player/lib/ads/ad_manager.js","../node_modules/shaka-player/lib/cast/cast_utils.js","../node_modules/shaka-player/lib/cast/cast_sender.js","../node_modules/shaka-player/lib/cast/cast_proxy.js","../node_modules/shaka-player/lib/cast/cast_receiver.js","../node_modules/shaka-player/lib/cea/cea_utils.js","../node_modules/shaka-player/lib/cea/cea608_memory.js","../node_modules/shaka-player/lib/cea/cea608_data_channel.js","../node_modules/shaka-player/lib/cea/cea708_window.js","../node_modules/shaka-player/lib/cea/dtvcc_packet_builder.js","../node_modules/shaka-player/lib/cea/cea708_service.js","../node_modules/shaka-player/lib/cea/cea_decoder.js","../node_modules/shaka-player/lib/cea/sei_processor.js","../node_modules/shaka-player/lib/cea/mp4_cea_parser.js","../node_modules/shaka-player/lib/cea/ts_cea_parser.js","../node_modules/shaka-player/lib/dash/content_protection.js","../node_modules/shaka-player/lib/dash/mpd_utils.js","../node_modules/shaka-player/lib/media/mp4_segment_index_parser.js","../node_modules/shaka-player/lib/util/ebml_parser.js","../node_modules/shaka-player/lib/media/webm_segment_index_parser.js","../node_modules/shaka-player/lib/dash/segment_base.js","../node_modules/shaka-player/lib/dash/segment_list.js","../node_modules/shaka-player/lib/dash/segment_template.js","../node_modules/shaka-player/lib/util/content_steering_manager.js","../node_modules/shaka-player/lib/util/periods.js","../node_modules/shaka-player/lib/util/xml_utils.js","../node_modules/shaka-player/lib/dash/dash_parser.js","../node_modules/shaka-player/lib/dependencies/all.js","../node_modules/shaka-player/lib/hls/hls_classes.js","../node_modules/shaka-player/lib/hls/hls_utils.js","../node_modules/shaka-player/lib/hls/manifest_text_parser.js","../node_modules/shaka-player/lib/net/data_uri_plugin.js","../node_modules/shaka-player/lib/hls/hls_parser.js","../node_modules/shaka-player/lib/mss/content_protection.js","../node_modules/shaka-player/lib/util/mp4_generator.js","../node_modules/shaka-player/lib/mss/mss_parser.js","../node_modules/shaka-player/lib/net/http_plugin_utils.js","../node_modules/shaka-player/lib/net/http_fetch_plugin.js","../node_modules/shaka-player/lib/net/http_xhr_plugin.js","../node_modules/shaka-player/lib/offline/download_info.js","../node_modules/shaka-player/lib/offline/download_progress_estimator.js","../node_modules/shaka-player/lib/offline/download_manager.js","../node_modules/shaka-player/lib/offline/indexeddb/db_operation.js","../node_modules/shaka-player/lib/offline/indexeddb/db_connection.js","../node_modules/shaka-player/lib/offline/indexeddb/base_storage_cell.js","../node_modules/shaka-player/lib/offline/indexeddb/eme_session_storage_cell.js","../node_modules/shaka-player/lib/offline/storage_muxer.js","../node_modules/shaka-player/lib/offline/indexeddb/storage_mechanism.js","../node_modules/shaka-player/lib/offline/indexeddb/v1_storage_cell.js","../node_modules/shaka-player/lib/offline/indexeddb/v2_storage_cell.js","../node_modules/shaka-player/lib/offline/indexeddb/v5_storage_cell.js","../node_modules/shaka-player/lib/offline/offline_uri.js","../node_modules/shaka-player/lib/offline/manifest_converter.js","../node_modules/shaka-player/lib/offline/offline_manifest_parser.js","../node_modules/shaka-player/lib/offline/offline_scheme.js","../node_modules/shaka-player/lib/offline/session_deleter.js","../node_modules/shaka-player/lib/offline/stored_content_utils.js","../node_modules/shaka-player/lib/offline/stream_bandwidth_estimator.js","../node_modules/shaka-player/lib/offline/storage.js","../node_modules/shaka-player/lib/polyfill/all.js","../node_modules/shaka-player/lib/polyfill/aria.js","../node_modules/shaka-player/lib/polyfill/encryption_scheme.js","../node_modules/shaka-player/lib/polyfill/fullscreen.js","../node_modules/shaka-player/lib/polyfill/media_capabilities.js","../node_modules/shaka-player/lib/polyfill/patchedmediakeys_apple.js","../node_modules/shaka-player/lib/polyfill/mediasource.js","../node_modules/shaka-player/lib/polyfill/orientation.js","../node_modules/shaka-player/lib/polyfill/patchedmediakeys_cert.js","../node_modules/shaka-player/lib/polyfill/patchedmediakeys_nop.js","../node_modules/shaka-player/lib/polyfill/patchedmediakeys_webkit.js","../node_modules/shaka-player/lib/polyfill/pip_webkit.js","../node_modules/shaka-player/lib/polyfill/random_uuid.js","../node_modules/shaka-player/lib/polyfill/symbol.js","../node_modules/shaka-player/lib/polyfill/video_play_promise.js","../node_modules/shaka-player/lib/polyfill/videoplaybackquality.js","../node_modules/shaka-player/lib/polyfill/vttcue.js","../node_modules/shaka-player/lib/text/lrc_text_parser.js","../node_modules/shaka-player/lib/text/ttml_text_parser.js","../node_modules/shaka-player/lib/text/mp4_ttml_parser.js","../node_modules/shaka-player/lib/text/vtt_text_parser.js","../node_modules/shaka-player/lib/text/mp4_vtt_parser.js","../node_modules/shaka-player/lib/text/sbv_text_parser.js","../node_modules/shaka-player/lib/text/srt_text_parser.js","../node_modules/shaka-player/lib/text/ssa_text_parser.js","../node_modules/shaka-player/lib/transmuxer/adts.js","../node_modules/shaka-player/lib/transmuxer/aac_transmuxer.js","../node_modules/shaka-player/lib/transmuxer/ac3.js","../node_modules/shaka-player/lib/transmuxer/ac3_transmuxer.js","../node_modules/shaka-player/lib/transmuxer/ec3.js","../node_modules/shaka-player/lib/transmuxer/ec3_transmuxer.js","../node_modules/shaka-player/lib/transmuxer/h264.js","../node_modules/shaka-player/lib/transmuxer/h265.js","../node_modules/shaka-player/lib/transmuxer/mpeg_audio.js","../node_modules/shaka-player/lib/transmuxer/mp3_transmuxer.js","../node_modules/shaka-player/lib/transmuxer/mpeg_ts_transmuxer.js","../node_modules/shaka-player/lib/transmuxer/mss_transmuxer.js","../node_modules/shaka-player/lib/transmuxer/ts_transmuxer.js","../node_modules/shaka-player/lib/transmuxer/opus.js","../webpack/bootstrap","../webpack/runtime/create fake namespace object","../webpack/runtime/define property getters","../webpack/runtime/ensure chunk","../webpack/runtime/get javascript chunk filename","../webpack/runtime/get mini-css chunk filename","../webpack/runtime/global","../webpack/runtime/hasOwnProperty shorthand","../webpack/runtime/load script","../webpack/runtime/make namespace object","../webpack/runtime/publicPath","../webpack/runtime/jsonp chunk loading","../node_modules/clsx/dist/clsx.mjs","../node_modules/@mui/utils/esm/composeClasses/composeClasses.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","../node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js","../node_modules/@emotion/sheet/dist/emotion-sheet.esm.js","../node_modules/stylis/src/Utility.js","../node_modules/stylis/src/Tokenizer.js","../node_modules/stylis/src/Enum.js","../node_modules/stylis/src/Serializer.js","../node_modules/stylis/src/Parser.js","../node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js","../node_modules/stylis/src/Middleware.js","../node_modules/@emotion/unitless/dist/emotion-unitless.esm.js","../node_modules/@emotion/serialize/dist/emotion-serialize.esm.js","../node_modules/@emotion/hash/dist/emotion-hash.esm.js","../node_modules/@emotion/use-insertion-effect-with-fallbacks/dist/emotion-use-insertion-effect-with-fallbacks.browser.esm.js","../node_modules/@emotion/react/dist/emotion-element-5486c51c.browser.esm.js","../node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js","../node_modules/@emotion/styled/base/dist/emotion-styled-base.browser.esm.js","../node_modules/@emotion/styled/dist/emotion-styled.browser.esm.js","../node_modules/@mui/styled-engine/index.js","../node_modules/@mui/utils/esm/deepmerge/deepmerge.js","../node_modules/@mui/system/createBreakpoints/createBreakpoints.js","../node_modules/@mui/system/createTheme/shape.js","../node_modules/@mui/system/breakpoints/breakpoints.js","../node_modules/@mui/system/cssContainerQueries/cssContainerQueries.js","../node_modules/@mui/utils/esm/formatMuiErrorMessage/formatMuiErrorMessage.js","../node_modules/@mui/utils/esm/capitalize/capitalize.js","../node_modules/@mui/system/style/style.js","../node_modules/@mui/system/merge/merge.js","../node_modules/@mui/system/spacing/spacing.js","../node_modules/@mui/system/memoize/memoize.js","../node_modules/@mui/system/createTheme/createSpacing.js","../node_modules/@mui/system/compose/compose.js","../node_modules/@mui/system/borders/borders.js","../node_modules/@mui/system/cssGrid/cssGrid.js","../node_modules/@mui/system/palette/palette.js","../node_modules/@mui/system/sizing/sizing.js","../node_modules/@mui/system/styleFunctionSx/defaultSxConfig.js","../node_modules/@mui/system/styleFunctionSx/styleFunctionSx.js","../node_modules/@mui/system/createTheme/applyStyles.js","../node_modules/@mui/system/createTheme/createTheme.js","../node_modules/@mui/system/createStyled/createStyled.js","../node_modules/@mui/utils/esm/clamp/clamp.js","../node_modules/@mui/system/colorManipulator/colorManipulator.js","../node_modules/@mui/material/colors/common.js","../node_modules/@mui/material/colors/grey.js","../node_modules/@mui/material/colors/purple.js","../node_modules/@mui/material/colors/red.js","../node_modules/@mui/material/colors/orange.js","../node_modules/@mui/material/colors/blue.js","../node_modules/@mui/material/colors/lightBlue.js","../node_modules/@mui/material/colors/green.js","../node_modules/@mui/material/styles/createPalette.js","../node_modules/@mui/system/cssVars/createGetCssVar.js","../node_modules/@mui/system/cssVars/prepareTypographyVars.js","../node_modules/@mui/system/cssVars/cssVarsParser.js","../node_modules/@mui/system/cssVars/prepareCssVars.js","../node_modules/@mui/material/styles/createMixins.js","../node_modules/@mui/material/styles/createTypography.js","../node_modules/@mui/material/styles/shadows.js","../node_modules/@mui/material/styles/createTransitions.js","../node_modules/@mui/material/styles/zIndex.js","../node_modules/@mui/material/styles/createThemeNoVars.js","../node_modules/@mui/material/styles/getOverlayAlpha.js","../node_modules/@mui/material/styles/createColorScheme.js","../node_modules/@mui/material/styles/shouldSkipGeneratingVar.js","../node_modules/@mui/material/styles/excludeVariablesFromRoot.js","../node_modules/@mui/material/styles/createGetSelector.js","../node_modules/@mui/material/styles/stringifyTheme.js","../node_modules/@mui/material/styles/createThemeWithVars.js","../node_modules/@mui/system/cssVars/getColorSchemeSelector.js","../node_modules/@mui/material/styles/createTheme.js","../node_modules/@mui/material/styles/defaultTheme.js","../node_modules/@mui/material/styles/identifier.js","../node_modules/@mui/material/styles/slotShouldForwardProp.js","../node_modules/@mui/material/styles/rootShouldForwardProp.js","../node_modules/@mui/material/styles/styled.js","../node_modules/@mui/material/utils/memoTheme.js","../node_modules/@mui/utils/esm/resolveProps/resolveProps.js","../node_modules/@mui/system/DefaultPropsProvider/DefaultPropsProvider.js","../node_modules/@mui/material/DefaultPropsProvider/DefaultPropsProvider.js","../node_modules/@mui/material/utils/capitalize.js","../node_modules/@mui/material/utils/createSimplePaletteValueFilter.js","../node_modules/@mui/system/useThemeWithoutDefault/useThemeWithoutDefault.js","../node_modules/@mui/system/useTheme/useTheme.js","../node_modules/@mui/material/styles/useTheme.js","../node_modules/@mui/utils/esm/ClassNameGenerator/ClassNameGenerator.js","../node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js","../node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js","../node_modules/@mui/material/Paper/paperClasses.js","../node_modules/@mui/material/Paper/Paper.js","../node_modules/@mui/material/AppBar/appBarClasses.js","../node_modules/@mui/material/AppBar/AppBar.js","../node_modules/@mui/material/Toolbar/toolbarClasses.js","../node_modules/@mui/material/Toolbar/Toolbar.js","../node_modules/@mui/system/styleFunctionSx/extendSxProp.js","../node_modules/@mui/material/Box/boxClasses.js","../node_modules/@mui/material/Box/Box.js","../node_modules/@mui/system/createBox/createBox.js","../node_modules/@mui/material/SvgIcon/svgIconClasses.js","../node_modules/@mui/material/SvgIcon/SvgIcon.js","../node_modules/@mui/material/utils/createSvgIcon.js","../node_modules/@mui/material/internal/svg-icons/Person.js","../node_modules/@mui/material/Avatar/avatarClasses.js","../node_modules/@mui/utils/esm/setRef/setRef.js","../node_modules/@mui/utils/esm/useForkRef/useForkRef.js","../node_modules/@mui/utils/esm/isHostComponent/isHostComponent.js","../node_modules/@mui/utils/esm/appendOwnerState/appendOwnerState.js","../node_modules/@mui/utils/esm/resolveComponentProps/resolveComponentProps.js","../node_modules/@mui/utils/esm/extractEventHandlers/extractEventHandlers.js","../node_modules/@mui/utils/esm/omitEventHandlers/omitEventHandlers.js","../node_modules/@mui/utils/esm/mergeSlotProps/mergeSlotProps.js","../node_modules/@mui/material/utils/useSlot.js","../node_modules/@mui/material/Avatar/Avatar.js","../node_modules/@mui/utils/esm/isFocusVisible/isFocusVisible.js","../node_modules/@mui/material/utils/useForkRef.js","../node_modules/@mui/utils/esm/useEnhancedEffect/useEnhancedEffect.js","../node_modules/@mui/utils/esm/useEventCallback/useEventCallback.js","../node_modules/@mui/material/utils/useEventCallback.js","../node_modules/@mui/utils/esm/useLazyRef/useLazyRef.js","../node_modules/@mui/material/useLazyRipple/useLazyRipple.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../node_modules/react-transition-group/esm/TransitionGroupContext.js","../node_modules/react-transition-group/esm/utils/ChildMapping.js","../node_modules/react-transition-group/esm/TransitionGroup.js","../node_modules/@mui/utils/esm/useOnMount/useOnMount.js","../node_modules/@mui/utils/esm/useTimeout/useTimeout.js","../node_modules/@emotion/react/dist/emotion-react.browser.esm.js","../node_modules/@mui/material/ButtonBase/Ripple.js","../node_modules/@mui/material/ButtonBase/touchRippleClasses.js","../node_modules/@mui/material/ButtonBase/TouchRipple.js","../node_modules/@mui/material/ButtonBase/buttonBaseClasses.js","../node_modules/@mui/material/ButtonBase/ButtonBase.js","../node_modules/@mui/material/IconButton/iconButtonClasses.js","../node_modules/@mui/material/IconButton/IconButton.js","../node_modules/@mui/material/Button/buttonClasses.js","../node_modules/@mui/material/ButtonGroup/ButtonGroupContext.js","../node_modules/@mui/material/ButtonGroup/ButtonGroupButtonContext.js","../node_modules/@mui/material/Button/Button.js","../node_modules/@mui/system/RtlProvider/index.js","../node_modules/@mui/utils/esm/useSlotProps/useSlotProps.js","../node_modules/@mui/utils/esm/ownerDocument/ownerDocument.js","../node_modules/@mui/material/utils/ownerDocument.js","../node_modules/@mui/material/List/ListContext.js","../node_modules/@mui/material/List/listClasses.js","../node_modules/@mui/material/List/List.js","../node_modules/@mui/utils/esm/getScrollbarSize/getScrollbarSize.js","../node_modules/@mui/material/utils/getScrollbarSize.js","../node_modules/@mui/material/utils/useEnhancedEffect.js","../node_modules/@mui/material/MenuList/MenuList.js","../node_modules/@mui/material/utils/isHostComponent.js","../node_modules/@mui/utils/esm/debounce/debounce.js","../node_modules/@mui/material/utils/debounce.js","../node_modules/@mui/utils/esm/ownerWindow/ownerWindow.js","../node_modules/@mui/material/utils/ownerWindow.js","../node_modules/@mui/utils/esm/getReactNodeRef/getReactNodeRef.js","../node_modules/react-transition-group/esm/config.js","../node_modules/react-transition-group/esm/utils/reflow.js","../node_modules/react-transition-group/esm/Transition.js","../node_modules/@mui/material/transitions/utils.js","../node_modules/@mui/material/Grow/Grow.js","../node_modules/@mui/material/Unstable_TrapFocus/FocusTrap.js","../node_modules/@mui/material/Portal/Portal.js","../node_modules/@mui/material/Fade/Fade.js","../node_modules/@mui/material/Backdrop/backdropClasses.js","../node_modules/@mui/material/Backdrop/Backdrop.js","../node_modules/@mui/utils/esm/createChainedFunction/createChainedFunction.js","../node_modules/@mui/material/Modal/ModalManager.js","../node_modules/@mui/material/Modal/useModal.js","../node_modules/@mui/material/Modal/modalClasses.js","../node_modules/@mui/material/Modal/Modal.js","../node_modules/@mui/material/Popover/popoverClasses.js","../node_modules/@mui/material/Popover/Popover.js","../node_modules/@mui/material/Menu/menuClasses.js","../node_modules/@mui/material/Menu/Menu.js","../node_modules/@mui/material/Divider/dividerClasses.js","../node_modules/@mui/material/ListItemIcon/listItemIconClasses.js","../node_modules/@mui/material/ListItemText/listItemTextClasses.js","../node_modules/@mui/material/MenuItem/menuItemClasses.js","../node_modules/@mui/material/MenuItem/MenuItem.js","../node_modules/@mui/icons-material/esm/Menu.js","components/Navbar.js","../node_modules/@mui/system/useThemeProps/useThemeProps.js","../node_modules/@mui/system/useThemeProps/getThemeProps.js","../node_modules/@mui/system/styled/styled.js","../node_modules/@mui/system/Container/createContainer.js","../node_modules/@mui/material/styles/useThemeProps.js","../node_modules/@mui/material/Container/Container.js","../node_modules/@mui/styled-engine/GlobalStyles/GlobalStyles.js","../node_modules/@mui/system/GlobalStyles/GlobalStyles.js","../node_modules/@mui/material/GlobalStyles/GlobalStyles.js","../node_modules/@mui/material/Typography/typographyClasses.js","../node_modules/@mui/material/Typography/Typography.js","../node_modules/@mui/material/zero-styled/index.js","../node_modules/is-in-browser/dist/module.js","../node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../node_modules/@babel/runtime/helpers/esm/createClass.js","../node_modules/jss/dist/jss.esm.js","../node_modules/@mui/styles/mergeClasses/mergeClasses.js","../node_modules/@mui/styles/makeStyles/multiKeyStore.js","../node_modules/@mui/private-theming/useTheme/ThemeContext.js","../node_modules/@mui/private-theming/useTheme/useTheme.js","../node_modules/@mui/private-theming/ThemeProvider/nested.js","../node_modules/@mui/styles/createGenerateClassName/createGenerateClassName.js","../node_modules/jss-plugin-rule-value-function/dist/jss-plugin-rule-value-function.esm.js","../node_modules/jss-plugin-global/dist/jss-plugin-global.esm.js","../node_modules/jss-plugin-nested/dist/jss-plugin-nested.esm.js","../node_modules/hyphenate-style-name/index.js","../node_modules/jss-plugin-camel-case/dist/jss-plugin-camel-case.esm.js","../node_modules/jss-plugin-default-unit/dist/jss-plugin-default-unit.esm.js","../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../node_modules/css-vendor/dist/css-vendor.esm.js","../node_modules/jss-plugin-vendor-prefixer/dist/jss-plugin-vendor-prefixer.esm.js","../node_modules/jss-plugin-props-sort/dist/jss-plugin-props-sort.esm.js","../node_modules/@mui/styles/StylesProvider/StylesProvider.js","../node_modules/@mui/styles/jssPreset/jssPreset.js","../node_modules/@mui/styles/makeStyles/indexCounter.js","../node_modules/@mui/styles/propsToClassKey/propsToClassKey.js","../node_modules/@mui/styles/getStylesCreator/getStylesCreator.js","../node_modules/@mui/styles/getStylesCreator/noopTheme.js","../node_modules/@mui/styles/makeStyles/makeStyles.js","components/HeroSection.js","../node_modules/@mui/styles/useTheme/index.js","../node_modules/@mui/material/Grid/GridContext.js","../node_modules/@mui/material/Grid/gridClasses.js","../node_modules/@mui/material/Grid/Grid.js","../node_modules/@mui/material/Card/cardClasses.js","../node_modules/@mui/material/Card/Card.js","components/Services.js","../node_modules/@mui/material/CardContent/cardContentClasses.js","../node_modules/@mui/material/CardContent/CardContent.js","../node_modules/@mui/utils/esm/useId/useId.js","../node_modules/@mui/material/TextareaAutosize/TextareaAutosize.js","../node_modules/@mui/material/FormControl/formControlState.js","../node_modules/@mui/material/FormControl/FormControlContext.js","../node_modules/@mui/material/FormControl/useFormControl.js","../node_modules/@mui/material/InputBase/utils.js","../node_modules/@mui/material/InputBase/inputBaseClasses.js","../node_modules/@mui/material/InputBase/InputBase.js","../node_modules/@mui/material/Input/inputClasses.js","../node_modules/@mui/material/Input/Input.js","../node_modules/@mui/material/FilledInput/filledInputClasses.js","../node_modules/@mui/material/FilledInput/FilledInput.js","../node_modules/@mui/material/OutlinedInput/NotchedOutline.js","../node_modules/@mui/material/OutlinedInput/outlinedInputClasses.js","../node_modules/@mui/material/OutlinedInput/OutlinedInput.js","../node_modules/@mui/material/FormLabel/formLabelClasses.js","../node_modules/@mui/material/FormLabel/FormLabel.js","../node_modules/@mui/material/InputLabel/inputLabelClasses.js","../node_modules/@mui/material/InputLabel/InputLabel.js","../node_modules/@mui/material/utils/isMuiElement.js","../node_modules/@mui/utils/esm/isMuiElement/isMuiElement.js","../node_modules/@mui/material/FormControl/formControlClasses.js","../node_modules/@mui/material/FormControl/FormControl.js","../node_modules/@mui/material/FormHelperText/formHelperTextClasses.js","../node_modules/@mui/material/FormHelperText/FormHelperText.js","../node_modules/@mui/material/NativeSelect/nativeSelectClasses.js","../node_modules/@mui/material/NativeSelect/NativeSelectInput.js","../node_modules/@mui/material/utils/useControlled.js","../node_modules/@mui/utils/esm/useControlled/useControlled.js","../node_modules/@mui/material/Select/selectClasses.js","../node_modules/@mui/material/Select/SelectInput.js","../node_modules/@mui/material/internal/svg-icons/ArrowDropDown.js","../node_modules/@mui/material/Select/Select.js","../node_modules/@mui/material/TextField/textFieldClasses.js","../node_modules/@mui/material/TextField/TextField.js","components/Contact.js","components/Footer.js","components/Pricing.js","App.js","../node_modules/@mui/private-theming/ThemeProvider/ThemeProvider.js","../node_modules/@mui/system/ThemeProvider/ThemeProvider.js","../node_modules/@mui/material/styles/ThemeProviderNoVars.js","../node_modules/@mui/system/InitColorSchemeScript/InitColorSchemeScript.js","../node_modules/@mui/system/cssVars/useCurrentColorScheme.js","../node_modules/@mui/material/InitColorSchemeScript/InitColorSchemeScript.js","../node_modules/@mui/material/styles/ThemeProviderWithVars.js","../node_modules/@mui/system/cssVars/createCssVarsProvider.js","../node_modules/@mui/material/styles/ThemeProvider.js","theme.js","reportWebVitals.js","index.js"],"sourcesContent":["/**\n * @license React\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var b=Symbol.for(\"react.element\"),c=Symbol.for(\"react.portal\"),d=Symbol.for(\"react.fragment\"),e=Symbol.for(\"react.strict_mode\"),f=Symbol.for(\"react.profiler\"),g=Symbol.for(\"react.provider\"),h=Symbol.for(\"react.context\"),k=Symbol.for(\"react.server_context\"),l=Symbol.for(\"react.forward_ref\"),m=Symbol.for(\"react.suspense\"),n=Symbol.for(\"react.suspense_list\"),p=Symbol.for(\"react.memo\"),q=Symbol.for(\"react.lazy\"),t=Symbol.for(\"react.offscreen\"),u;u=Symbol.for(\"react.module.reference\");\nfunction v(a){if(\"object\"===typeof a&&null!==a){var r=a.$$typeof;switch(r){case b:switch(a=a.type,a){case d:case f:case e:case m:case n:return a;default:switch(a=a&&a.$$typeof,a){case k:case h:case l:case q:case p:case g:return a;default:return r}}case c:return r}}}exports.ContextConsumer=h;exports.ContextProvider=g;exports.Element=b;exports.ForwardRef=l;exports.Fragment=d;exports.Lazy=q;exports.Memo=p;exports.Portal=c;exports.Profiler=f;exports.StrictMode=e;exports.Suspense=m;\nexports.SuspenseList=n;exports.isAsyncMode=function(){return!1};exports.isConcurrentMode=function(){return!1};exports.isContextConsumer=function(a){return v(a)===h};exports.isContextProvider=function(a){return v(a)===g};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===b};exports.isForwardRef=function(a){return v(a)===l};exports.isFragment=function(a){return v(a)===d};exports.isLazy=function(a){return v(a)===q};exports.isMemo=function(a){return v(a)===p};\nexports.isPortal=function(a){return v(a)===c};exports.isProfiler=function(a){return v(a)===f};exports.isStrictMode=function(a){return v(a)===e};exports.isSuspense=function(a){return v(a)===m};exports.isSuspenseList=function(a){return v(a)===n};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===d||a===f||a===e||a===m||a===n||a===t||\"object\"===typeof a&&null!==a&&(a.$$typeof===q||a.$$typeof===p||a.$$typeof===g||a.$$typeof===h||a.$$typeof===l||a.$$typeof===u||void 0!==a.getModuleId)?!0:!1};exports.typeOf=v;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","/**\n * @license React\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),ca=require(\"scheduler\");function p(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cb}return!1}function v(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var z={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){z[a]=new v(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];z[b]=new v(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){z[a]=new v(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){z[a]=new v(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){z[a]=new v(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){z[a]=new v(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){z[a]=new v(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){z[a]=new v(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){z[a]=new v(a,5,!1,a.toLowerCase(),null,!1,!1)});var ra=/[\\-:]([a-z])/g;function sa(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(ra,\nsa);z[b]=new v(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!1,!1)});\nz.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction ta(a,b,c,d){var e=z.hasOwnProperty(b)?z[b]:null;if(null!==e?0!==e.type:d||!(2h||e[g]!==f[h]){var k=\"\\n\"+e[g].replace(\" at new \",\" at \");a.displayName&&k.includes(\"\")&&(k=k.replace(\"\",a.displayName));return k}while(1<=g&&0<=h)}break}}}finally{Na=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?Ma(a):\"\"}\nfunction Pa(a){switch(a.tag){case 5:return Ma(a.type);case 16:return Ma(\"Lazy\");case 13:return Ma(\"Suspense\");case 19:return Ma(\"SuspenseList\");case 0:case 2:case 15:return a=Oa(a.type,!1),a;case 11:return a=Oa(a.type.render,!1),a;case 1:return a=Oa(a.type,!0),a;default:return\"\"}}\nfunction Qa(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ya:return\"Fragment\";case wa:return\"Portal\";case Aa:return\"Profiler\";case za:return\"StrictMode\";case Ea:return\"Suspense\";case Fa:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Ca:return(a.displayName||\"Context\")+\".Consumer\";case Ba:return(a._context.displayName||\"Context\")+\".Provider\";case Da:var b=a.render;a=a.displayName;a||(a=b.displayName||\nb.name||\"\",a=\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");return a;case Ga:return b=a.displayName||null,null!==b?b:Qa(a.type)||\"Memo\";case Ha:b=a._payload;a=a._init;try{return Qa(a(b))}catch(c){}}return null}\nfunction Ra(a){var b=a.type;switch(a.tag){case 24:return\"Cache\";case 9:return(b.displayName||\"Context\")+\".Consumer\";case 10:return(b._context.displayName||\"Context\")+\".Provider\";case 18:return\"DehydratedFragment\";case 11:return a=b.render,a=a.displayName||a.name||\"\",b.displayName||(\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");case 7:return\"Fragment\";case 5:return b;case 4:return\"Portal\";case 3:return\"Root\";case 6:return\"Text\";case 16:return Qa(b);case 8:return b===za?\"StrictMode\":\"Mode\";case 22:return\"Offscreen\";\ncase 12:return\"Profiler\";case 21:return\"Scope\";case 13:return\"Suspense\";case 19:return\"SuspenseList\";case 25:return\"TracingMarker\";case 1:case 0:case 17:case 2:case 14:case 15:if(\"function\"===typeof b)return b.displayName||b.name||null;if(\"string\"===typeof b)return b}return null}function Sa(a){switch(typeof a){case \"boolean\":case \"number\":case \"string\":case \"undefined\":return a;case \"object\":return a;default:return\"\"}}\nfunction Ta(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ua(a){var b=Ta(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Ta(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Ya(a,b){var c=b.checked;return A({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function ab(a,b){b=b.checked;null!=b&&ta(a,\"checked\",b,!1)}\nfunction bb(a,b){ab(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?cb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&cb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction db(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction cb(a,b,c){if(\"number\"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}var eb=Array.isArray;\nfunction fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e\"+b.valueOf().toString()+\"\";for(b=mb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction ob(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar pb={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,\nzoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},qb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(pb).forEach(function(a){qb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);pb[b]=pb[a]})});function rb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||pb.hasOwnProperty(a)&&pb[a]?(\"\"+b).trim():b+\"px\"}\nfunction sb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=rb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var tb=A({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction ub(a,b){if(b){if(tb[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(p(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(p(60));if(\"object\"!==typeof b.dangerouslySetInnerHTML||!(\"__html\"in b.dangerouslySetInnerHTML))throw Error(p(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(p(62));}}\nfunction vb(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var wb=null;function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;\nfunction Bb(a){if(a=Cb(a)){if(\"function\"!==typeof yb)throw Error(p(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;a>>=0;return 0===a?32:31-(pc(a)/qc|0)|0}var rc=64,sc=4194304;\nfunction tc(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;\ndefault:return a}}function uc(a,b){var c=a.pendingLanes;if(0===c)return 0;var d=0,e=a.suspendedLanes,f=a.pingedLanes,g=c&268435455;if(0!==g){var h=g&~e;0!==h?d=tc(h):(f&=g,0!==f&&(d=tc(f)))}else g=c&~e,0!==g?d=tc(g):0!==f&&(d=tc(f));if(0===d)return 0;if(0!==b&&b!==d&&0===(b&e)&&(e=d&-d,f=b&-b,e>=f||16===e&&0!==(f&4194240)))return b;0!==(d&4)&&(d|=c&16);b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0c;c++)b.push(a);return b}\nfunction Ac(a,b,c){a.pendingLanes|=b;536870912!==b&&(a.suspendedLanes=0,a.pingedLanes=0);a=a.eventTimes;b=31-oc(b);a[b]=c}function Bc(a,b){var c=a.pendingLanes&~b;a.pendingLanes=b;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=b;a.mutableReadLanes&=b;a.entangledLanes&=b;b=a.entanglements;var d=a.eventTimes;for(a=a.expirationTimes;0=be),ee=String.fromCharCode(32),fe=!1;\nfunction ge(a,b){switch(a){case \"keyup\":return-1!==$d.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function he(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case \"compositionend\":return he(b);case \"keypress\":if(32!==b.which)return null;fe=!0;return ee;case \"textInput\":return a=b.data,a===ee&&fe?null:a;default:return null}}\nfunction ke(a,b){if(ie)return\"compositionend\"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Je(c)}}function Le(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Le(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Me(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Ne(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nfunction Oe(a){var b=Me(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&Le(c.ownerDocument.documentElement,c)){if(null!==d&&Ne(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=Ke(c,f);var g=Ke(c,\nd);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset),a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});\"function\"===typeof c.focus&&c.focus();for(c=0;c=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;\nfunction Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,\"selectionStart\"in d&&Ne(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Ie(Se,d)||(Se=d,d=oe(Re,\"onSelect\"),0Tf||(a.current=Sf[Tf],Sf[Tf]=null,Tf--)}function G(a,b){Tf++;Sf[Tf]=a.current;a.current=b}var Vf={},H=Uf(Vf),Wf=Uf(!1),Xf=Vf;function Yf(a,b){var c=a.type.contextTypes;if(!c)return Vf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}\nfunction Zf(a){a=a.childContextTypes;return null!==a&&void 0!==a}function $f(){E(Wf);E(H)}function ag(a,b,c){if(H.current!==Vf)throw Error(p(168));G(H,b);G(Wf,c)}function bg(a,b,c){var d=a.stateNode;b=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in b))throw Error(p(108,Ra(a)||\"Unknown\",e));return A({},c,d)}\nfunction cg(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Vf;Xf=H.current;G(H,a);G(Wf,Wf.current);return!0}function dg(a,b,c){var d=a.stateNode;if(!d)throw Error(p(169));c?(a=bg(a,b,Xf),d.__reactInternalMemoizedMergedChildContext=a,E(Wf),E(H),G(H,a)):E(Wf);G(Wf,c)}var eg=null,fg=!1,gg=!1;function hg(a){null===eg?eg=[a]:eg.push(a)}function ig(a){fg=!0;hg(a)}\nfunction jg(){if(!gg&&null!==eg){gg=!0;var a=0,b=C;try{var c=eg;for(C=1;a>=g;e-=g;rg=1<<32-oc(b)+e|c<w?(x=u,u=null):x=u.sibling;var n=r(e,u,h[w],k);if(null===n){null===u&&(u=x);break}a&&u&&null===n.alternate&&b(e,u);g=f(n,g,w);null===m?l=n:m.sibling=n;m=n;u=x}if(w===h.length)return c(e,u),I&&tg(e,w),l;if(null===u){for(;ww?(x=m,m=null):x=m.sibling;var t=r(e,m,n.value,k);if(null===t){null===m&&(m=x);break}a&&m&&null===t.alternate&&b(e,m);g=f(t,g,w);null===u?l=t:u.sibling=t;u=t;m=x}if(n.done)return c(e,\nm),I&&tg(e,w),l;if(null===m){for(;!n.done;w++,n=h.next())n=q(e,n.value,k),null!==n&&(g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);I&&tg(e,w);return l}for(m=d(e,m);!n.done;w++,n=h.next())n=y(m,e,w,n.value,k),null!==n&&(a&&null!==n.alternate&&m.delete(null===n.key?w:n.key),g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);a&&m.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function J(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===ya&&null===f.key&&(f=f.props.children);if(\"object\"===typeof f&&null!==f){switch(f.$$typeof){case va:a:{for(var k=\nf.key,l=d;null!==l;){if(l.key===k){k=f.type;if(k===ya){if(7===l.tag){c(a,l.sibling);d=e(l,f.props.children);d.return=a;a=d;break a}}else if(l.elementType===k||\"object\"===typeof k&&null!==k&&k.$$typeof===Ha&&Ng(k)===l.type){c(a,l.sibling);d=e(l,f.props);d.ref=Lg(a,l,f);d.return=a;a=d;break a}c(a,l);break}else b(a,l);l=l.sibling}f.type===ya?(d=Tg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Rg(f.type,f.key,f.props,null,a.mode,h),h.ref=Lg(a,d,f),h.return=a,a=h)}return g(a);case wa:a:{for(l=f.key;null!==\nd;){if(d.key===l)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=Sg(f,a.mode,h);d.return=a;a=d}return g(a);case Ha:return l=f._init,J(a,d,l(f._payload),h)}if(eb(f))return n(a,d,f,h);if(Ka(f))return t(a,d,f,h);Mg(a,f)}return\"string\"===typeof f&&\"\"!==f||\"number\"===typeof f?(f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):\n(c(a,d),d=Qg(f,a.mode,h),d.return=a,a=d),g(a)):c(a,d)}return J}var Ug=Og(!0),Vg=Og(!1),Wg=Uf(null),Xg=null,Yg=null,Zg=null;function $g(){Zg=Yg=Xg=null}function ah(a){var b=Wg.current;E(Wg);a._currentValue=b}function bh(a,b,c){for(;null!==a;){var d=a.alternate;(a.childLanes&b)!==b?(a.childLanes|=b,null!==d&&(d.childLanes|=b)):null!==d&&(d.childLanes&b)!==b&&(d.childLanes|=b);if(a===c)break;a=a.return}}\nfunction ch(a,b){Xg=a;Zg=Yg=null;a=a.dependencies;null!==a&&null!==a.firstContext&&(0!==(a.lanes&b)&&(dh=!0),a.firstContext=null)}function eh(a){var b=a._currentValue;if(Zg!==a)if(a={context:a,memoizedValue:b,next:null},null===Yg){if(null===Xg)throw Error(p(308));Yg=a;Xg.dependencies={lanes:0,firstContext:a}}else Yg=Yg.next=a;return b}var fh=null;function gh(a){null===fh?fh=[a]:fh.push(a)}\nfunction hh(a,b,c,d){var e=b.interleaved;null===e?(c.next=c,gh(b)):(c.next=e.next,e.next=c);b.interleaved=c;return ih(a,d)}function ih(a,b){a.lanes|=b;var c=a.alternate;null!==c&&(c.lanes|=b);c=a;for(a=a.return;null!==a;)a.childLanes|=b,c=a.alternate,null!==c&&(c.childLanes|=b),c=a,a=a.return;return 3===c.tag?c.stateNode:null}var jh=!1;function kh(a){a.updateQueue={baseState:a.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}\nfunction lh(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,firstBaseUpdate:a.firstBaseUpdate,lastBaseUpdate:a.lastBaseUpdate,shared:a.shared,effects:a.effects})}function mh(a,b){return{eventTime:a,lane:b,tag:0,payload:null,callback:null,next:null}}\nfunction nh(a,b,c){var d=a.updateQueue;if(null===d)return null;d=d.shared;if(0!==(K&2)){var e=d.pending;null===e?b.next=b:(b.next=e.next,e.next=b);d.pending=b;return ih(a,c)}e=d.interleaved;null===e?(b.next=b,gh(d)):(b.next=e.next,e.next=b);d.interleaved=b;return ih(a,c)}function oh(a,b,c){b=b.updateQueue;if(null!==b&&(b=b.shared,0!==(c&4194240))){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nfunction ph(a,b){var c=a.updateQueue,d=a.alternate;if(null!==d&&(d=d.updateQueue,c===d)){var e=null,f=null;c=c.firstBaseUpdate;if(null!==c){do{var g={eventTime:c.eventTime,lane:c.lane,tag:c.tag,payload:c.payload,callback:c.callback,next:null};null===f?e=f=g:f=f.next=g;c=c.next}while(null!==c);null===f?e=f=b:f=f.next=b}else e=f=b;c={baseState:d.baseState,firstBaseUpdate:e,lastBaseUpdate:f,shared:d.shared,effects:d.effects};a.updateQueue=c;return}a=c.lastBaseUpdate;null===a?c.firstBaseUpdate=b:a.next=\nb;c.lastBaseUpdate=b}\nfunction qh(a,b,c,d){var e=a.updateQueue;jh=!1;var f=e.firstBaseUpdate,g=e.lastBaseUpdate,h=e.shared.pending;if(null!==h){e.shared.pending=null;var k=h,l=k.next;k.next=null;null===g?f=l:g.next=l;g=k;var m=a.alternate;null!==m&&(m=m.updateQueue,h=m.lastBaseUpdate,h!==g&&(null===h?m.firstBaseUpdate=l:h.next=l,m.lastBaseUpdate=k))}if(null!==f){var q=e.baseState;g=0;m=l=k=null;h=f;do{var r=h.lane,y=h.eventTime;if((d&r)===r){null!==m&&(m=m.next={eventTime:y,lane:0,tag:h.tag,payload:h.payload,callback:h.callback,\nnext:null});a:{var n=a,t=h;r=b;y=c;switch(t.tag){case 1:n=t.payload;if(\"function\"===typeof n){q=n.call(y,q,r);break a}q=n;break a;case 3:n.flags=n.flags&-65537|128;case 0:n=t.payload;r=\"function\"===typeof n?n.call(y,q,r):n;if(null===r||void 0===r)break a;q=A({},q,r);break a;case 2:jh=!0}}null!==h.callback&&0!==h.lane&&(a.flags|=64,r=e.effects,null===r?e.effects=[h]:r.push(h))}else y={eventTime:y,lane:r,tag:h.tag,payload:h.payload,callback:h.callback,next:null},null===m?(l=m=y,k=q):m=m.next=y,g|=r;\nh=h.next;if(null===h)if(h=e.shared.pending,null===h)break;else r=h,h=r.next,r.next=null,e.lastBaseUpdate=r,e.shared.pending=null}while(1);null===m&&(k=q);e.baseState=k;e.firstBaseUpdate=l;e.lastBaseUpdate=m;b=e.shared.interleaved;if(null!==b){e=b;do g|=e.lane,e=e.next;while(e!==b)}else null===f&&(e.shared.lanes=0);rh|=g;a.lanes=g;a.memoizedState=q}}\nfunction sh(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;bc?c:4;a(!0);var d=Gh.transition;Gh.transition={};try{a(!1),b()}finally{C=c,Gh.transition=d}}function wi(){return Uh().memoizedState}\nfunction xi(a,b,c){var d=yi(a);c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(zi(a))Ai(b,c);else if(c=hh(a,b,c,d),null!==c){var e=R();gi(c,a,d,e);Bi(c,b,d)}}\nfunction ii(a,b,c){var d=yi(a),e={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(zi(a))Ai(b,e);else{var f=a.alternate;if(0===a.lanes&&(null===f||0===f.lanes)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.hasEagerState=!0;e.eagerState=h;if(He(h,g)){var k=b.interleaved;null===k?(e.next=e,gh(b)):(e.next=k.next,k.next=e);b.interleaved=e;return}}catch(l){}finally{}c=hh(a,b,e,d);null!==c&&(e=R(),gi(c,a,d,e),Bi(c,b,d))}}\nfunction zi(a){var b=a.alternate;return a===M||null!==b&&b===M}function Ai(a,b){Jh=Ih=!0;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}function Bi(a,b,c){if(0!==(c&4194240)){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nvar Rh={readContext:eh,useCallback:P,useContext:P,useEffect:P,useImperativeHandle:P,useInsertionEffect:P,useLayoutEffect:P,useMemo:P,useReducer:P,useRef:P,useState:P,useDebugValue:P,useDeferredValue:P,useTransition:P,useMutableSource:P,useSyncExternalStore:P,useId:P,unstable_isNewReconciler:!1},Oh={readContext:eh,useCallback:function(a,b){Th().memoizedState=[a,void 0===b?null:b];return a},useContext:eh,useEffect:mi,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return ki(4194308,\n4,pi.bind(null,b,a),c)},useLayoutEffect:function(a,b){return ki(4194308,4,a,b)},useInsertionEffect:function(a,b){return ki(4,2,a,b)},useMemo:function(a,b){var c=Th();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=Th();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};d.queue=a;a=a.dispatch=xi.bind(null,M,a);return[d.memoizedState,a]},useRef:function(a){var b=\nTh();a={current:a};return b.memoizedState=a},useState:hi,useDebugValue:ri,useDeferredValue:function(a){return Th().memoizedState=a},useTransition:function(){var a=hi(!1),b=a[0];a=vi.bind(null,a[1]);Th().memoizedState=a;return[b,a]},useMutableSource:function(){},useSyncExternalStore:function(a,b,c){var d=M,e=Th();if(I){if(void 0===c)throw Error(p(407));c=c()}else{c=b();if(null===Q)throw Error(p(349));0!==(Hh&30)||di(d,b,c)}e.memoizedState=c;var f={value:c,getSnapshot:b};e.queue=f;mi(ai.bind(null,d,\nf,a),[a]);d.flags|=2048;bi(9,ci.bind(null,d,f,c,b),void 0,null);return c},useId:function(){var a=Th(),b=Q.identifierPrefix;if(I){var c=sg;var d=rg;c=(d&~(1<<32-oc(d)-1)).toString(32)+c;b=\":\"+b+\"R\"+c;c=Kh++;0\\x3c/script>\",a=a.removeChild(a.firstChild)):\n\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[Of]=b;a[Pf]=d;zj(a,b,!1,!1);b.stateNode=a;a:{g=vb(c,d);switch(c){case \"dialog\":D(\"cancel\",a);D(\"close\",a);e=d;break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;eGj&&(b.flags|=128,d=!0,Dj(f,!1),b.lanes=4194304)}else{if(!d)if(a=Ch(g),null!==a){if(b.flags|=128,d=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Dj(f,!0),null===f.tail&&\"hidden\"===f.tailMode&&!g.alternate&&!I)return S(b),null}else 2*B()-f.renderingStartTime>Gj&&1073741824!==c&&(b.flags|=128,d=!0,Dj(f,!1),b.lanes=4194304);f.isBackwards?(g.sibling=b.child,b.child=g):(c=f.last,null!==c?c.sibling=g:b.child=g,f.last=g)}if(null!==f.tail)return b=f.tail,f.rendering=\nb,f.tail=b.sibling,f.renderingStartTime=B(),b.sibling=null,c=L.current,G(L,d?c&1|2:c&1),b;S(b);return null;case 22:case 23:return Hj(),d=null!==b.memoizedState,null!==a&&null!==a.memoizedState!==d&&(b.flags|=8192),d&&0!==(b.mode&1)?0!==(fj&1073741824)&&(S(b),b.subtreeFlags&6&&(b.flags|=8192)):S(b),null;case 24:return null;case 25:return null}throw Error(p(156,b.tag));}\nfunction Ij(a,b){wg(b);switch(b.tag){case 1:return Zf(b.type)&&$f(),a=b.flags,a&65536?(b.flags=a&-65537|128,b):null;case 3:return zh(),E(Wf),E(H),Eh(),a=b.flags,0!==(a&65536)&&0===(a&128)?(b.flags=a&-65537|128,b):null;case 5:return Bh(b),null;case 13:E(L);a=b.memoizedState;if(null!==a&&null!==a.dehydrated){if(null===b.alternate)throw Error(p(340));Ig()}a=b.flags;return a&65536?(b.flags=a&-65537|128,b):null;case 19:return E(L),null;case 4:return zh(),null;case 10:return ah(b.type._context),null;case 22:case 23:return Hj(),\nnull;case 24:return null;default:return null}}var Jj=!1,U=!1,Kj=\"function\"===typeof WeakSet?WeakSet:Set,V=null;function Lj(a,b){var c=a.ref;if(null!==c)if(\"function\"===typeof c)try{c(null)}catch(d){W(a,b,d)}else c.current=null}function Mj(a,b,c){try{c()}catch(d){W(a,b,d)}}var Nj=!1;\nfunction Oj(a,b){Cf=dd;a=Me();if(Ne(a)){if(\"selectionStart\"in a)var c={start:a.selectionStart,end:a.selectionEnd};else a:{c=(c=a.ownerDocument)&&c.defaultView||window;var d=c.getSelection&&c.getSelection();if(d&&0!==d.rangeCount){c=d.anchorNode;var e=d.anchorOffset,f=d.focusNode;d=d.focusOffset;try{c.nodeType,f.nodeType}catch(F){c=null;break a}var g=0,h=-1,k=-1,l=0,m=0,q=a,r=null;b:for(;;){for(var y;;){q!==c||0!==e&&3!==q.nodeType||(h=g+e);q!==f||0!==d&&3!==q.nodeType||(k=g+d);3===q.nodeType&&(g+=\nq.nodeValue.length);if(null===(y=q.firstChild))break;r=q;q=y}for(;;){if(q===a)break b;r===c&&++l===e&&(h=g);r===f&&++m===d&&(k=g);if(null!==(y=q.nextSibling))break;q=r;r=q.parentNode}q=y}c=-1===h||-1===k?null:{start:h,end:k}}else c=null}c=c||{start:0,end:0}}else c=null;Df={focusedElem:a,selectionRange:c};dd=!1;for(V=b;null!==V;)if(b=V,a=b.child,0!==(b.subtreeFlags&1028)&&null!==a)a.return=b,V=a;else for(;null!==V;){b=V;try{var n=b.alternate;if(0!==(b.flags&1024))switch(b.tag){case 0:case 11:case 15:break;\ncase 1:if(null!==n){var t=n.memoizedProps,J=n.memoizedState,x=b.stateNode,w=x.getSnapshotBeforeUpdate(b.elementType===b.type?t:Ci(b.type,t),J);x.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var u=b.stateNode.containerInfo;1===u.nodeType?u.textContent=\"\":9===u.nodeType&&u.documentElement&&u.removeChild(u.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(p(163));}}catch(F){W(b,b.return,F)}a=b.sibling;if(null!==a){a.return=b.return;V=a;break}V=b.return}n=Nj;Nj=!1;return n}\nfunction Pj(a,b,c){var d=b.updateQueue;d=null!==d?d.lastEffect:null;if(null!==d){var e=d=d.next;do{if((e.tag&a)===a){var f=e.destroy;e.destroy=void 0;void 0!==f&&Mj(b,c,f)}e=e.next}while(e!==d)}}function Qj(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}function Rj(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:a=c;break;default:a=c}\"function\"===typeof b?b(a):b.current=a}}\nfunction Sj(a){var b=a.alternate;null!==b&&(a.alternate=null,Sj(b));a.child=null;a.deletions=null;a.sibling=null;5===a.tag&&(b=a.stateNode,null!==b&&(delete b[Of],delete b[Pf],delete b[of],delete b[Qf],delete b[Rf]));a.stateNode=null;a.return=null;a.dependencies=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.stateNode=null;a.updateQueue=null}function Tj(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Uj(a){a:for(;;){for(;null===a.sibling;){if(null===a.return||Tj(a.return))return null;a=a.return}a.sibling.return=a.return;for(a=a.sibling;5!==a.tag&&6!==a.tag&&18!==a.tag;){if(a.flags&2)continue a;if(null===a.child||4===a.tag)continue a;else a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}\nfunction Vj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=Bf));else if(4!==d&&(a=a.child,null!==a))for(Vj(a,b,c),a=a.sibling;null!==a;)Vj(a,b,c),a=a.sibling}\nfunction Wj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Wj(a,b,c),a=a.sibling;null!==a;)Wj(a,b,c),a=a.sibling}var X=null,Xj=!1;function Yj(a,b,c){for(c=c.child;null!==c;)Zj(a,b,c),c=c.sibling}\nfunction Zj(a,b,c){if(lc&&\"function\"===typeof lc.onCommitFiberUnmount)try{lc.onCommitFiberUnmount(kc,c)}catch(h){}switch(c.tag){case 5:U||Lj(c,b);case 6:var d=X,e=Xj;X=null;Yj(a,b,c);X=d;Xj=e;null!==X&&(Xj?(a=X,c=c.stateNode,8===a.nodeType?a.parentNode.removeChild(c):a.removeChild(c)):X.removeChild(c.stateNode));break;case 18:null!==X&&(Xj?(a=X,c=c.stateNode,8===a.nodeType?Kf(a.parentNode,c):1===a.nodeType&&Kf(a,c),bd(a)):Kf(X,c.stateNode));break;case 4:d=X;e=Xj;X=c.stateNode.containerInfo;Xj=!0;\nYj(a,b,c);X=d;Xj=e;break;case 0:case 11:case 14:case 15:if(!U&&(d=c.updateQueue,null!==d&&(d=d.lastEffect,null!==d))){e=d=d.next;do{var f=e,g=f.destroy;f=f.tag;void 0!==g&&(0!==(f&2)?Mj(c,b,g):0!==(f&4)&&Mj(c,b,g));e=e.next}while(e!==d)}Yj(a,b,c);break;case 1:if(!U&&(Lj(c,b),d=c.stateNode,\"function\"===typeof d.componentWillUnmount))try{d.props=c.memoizedProps,d.state=c.memoizedState,d.componentWillUnmount()}catch(h){W(c,b,h)}Yj(a,b,c);break;case 21:Yj(a,b,c);break;case 22:c.mode&1?(U=(d=U)||null!==\nc.memoizedState,Yj(a,b,c),U=d):Yj(a,b,c);break;default:Yj(a,b,c)}}function ak(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Kj);b.forEach(function(b){var d=bk.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction ck(a,b){var c=b.deletions;if(null!==c)for(var d=0;de&&(e=g);d&=~f}d=e;d=B()-d;d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*lk(d/1960))-d;if(10a?16:a;if(null===wk)var d=!1;else{a=wk;wk=null;xk=0;if(0!==(K&6))throw Error(p(331));var e=K;K|=4;for(V=a.current;null!==V;){var f=V,g=f.child;if(0!==(V.flags&16)){var h=f.deletions;if(null!==h){for(var k=0;kB()-fk?Kk(a,0):rk|=c);Dk(a,b)}function Yk(a,b){0===b&&(0===(a.mode&1)?b=1:(b=sc,sc<<=1,0===(sc&130023424)&&(sc=4194304)));var c=R();a=ih(a,b);null!==a&&(Ac(a,b,c),Dk(a,c))}function uj(a){var b=a.memoizedState,c=0;null!==b&&(c=b.retryLane);Yk(a,c)}\nfunction bk(a,b){var c=0;switch(a.tag){case 13:var d=a.stateNode;var e=a.memoizedState;null!==e&&(c=e.retryLane);break;case 19:d=a.stateNode;break;default:throw Error(p(314));}null!==d&&d.delete(b);Yk(a,c)}var Vk;\nVk=function(a,b,c){if(null!==a)if(a.memoizedProps!==b.pendingProps||Wf.current)dh=!0;else{if(0===(a.lanes&c)&&0===(b.flags&128))return dh=!1,yj(a,b,c);dh=0!==(a.flags&131072)?!0:!1}else dh=!1,I&&0!==(b.flags&1048576)&&ug(b,ng,b.index);b.lanes=0;switch(b.tag){case 2:var d=b.type;ij(a,b);a=b.pendingProps;var e=Yf(b,H.current);ch(b,c);e=Nh(null,b,d,a,e,c);var f=Sh();b.flags|=1;\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof?(b.tag=1,b.memoizedState=null,b.updateQueue=\nnull,Zf(d)?(f=!0,cg(b)):f=!1,b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null,kh(b),e.updater=Ei,b.stateNode=e,e._reactInternals=b,Ii(b,d,a,c),b=jj(null,b,d,!0,f,c)):(b.tag=0,I&&f&&vg(b),Xi(null,b,e,c),b=b.child);return b;case 16:d=b.elementType;a:{ij(a,b);a=b.pendingProps;e=d._init;d=e(d._payload);b.type=d;e=b.tag=Zk(d);a=Ci(d,a);switch(e){case 0:b=cj(null,b,d,a,c);break a;case 1:b=hj(null,b,d,a,c);break a;case 11:b=Yi(null,b,d,a,c);break a;case 14:b=$i(null,b,d,Ci(d.type,a),c);break a}throw Error(p(306,\nd,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),cj(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),hj(a,b,d,e,c);case 3:a:{kj(b);if(null===a)throw Error(p(387));d=b.pendingProps;f=b.memoizedState;e=f.element;lh(a,b);qh(b,d,null,c);var g=b.memoizedState;d=g.element;if(f.isDehydrated)if(f={element:d,isDehydrated:!1,cache:g.cache,pendingSuspenseBoundaries:g.pendingSuspenseBoundaries,transitions:g.transitions},b.updateQueue.baseState=\nf,b.memoizedState=f,b.flags&256){e=Ji(Error(p(423)),b);b=lj(a,b,d,c,e);break a}else if(d!==e){e=Ji(Error(p(424)),b);b=lj(a,b,d,c,e);break a}else for(yg=Lf(b.stateNode.containerInfo.firstChild),xg=b,I=!0,zg=null,c=Vg(b,null,d,c),b.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{Ig();if(d===e){b=Zi(a,b,c);break a}Xi(a,b,d,c)}b=b.child}return b;case 5:return Ah(b),null===a&&Eg(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,Ef(d,e)?g=null:null!==f&&Ef(d,f)&&(b.flags|=32),\ngj(a,b),Xi(a,b,g,c),b.child;case 6:return null===a&&Eg(b),null;case 13:return oj(a,b,c);case 4:return yh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Ug(b,null,d,c):Xi(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),Yi(a,b,d,e,c);case 7:return Xi(a,b,b.pendingProps,c),b.child;case 8:return Xi(a,b,b.pendingProps.children,c),b.child;case 12:return Xi(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;f=b.memoizedProps;\ng=e.value;G(Wg,d._currentValue);d._currentValue=g;if(null!==f)if(He(f.value,g)){if(f.children===e.children&&!Wf.current){b=Zi(a,b,c);break a}}else for(f=b.child,null!==f&&(f.return=b);null!==f;){var h=f.dependencies;if(null!==h){g=f.child;for(var k=h.firstContext;null!==k;){if(k.context===d){if(1===f.tag){k=mh(-1,c&-c);k.tag=2;var l=f.updateQueue;if(null!==l){l=l.shared;var m=l.pending;null===m?k.next=k:(k.next=m.next,m.next=k);l.pending=k}}f.lanes|=c;k=f.alternate;null!==k&&(k.lanes|=c);bh(f.return,\nc,b);h.lanes|=c;break}k=k.next}}else if(10===f.tag)g=f.type===b.type?null:f.child;else if(18===f.tag){g=f.return;if(null===g)throw Error(p(341));g.lanes|=c;h=g.alternate;null!==h&&(h.lanes|=c);bh(g,c,b);g=f.sibling}else g=f.child;if(null!==g)g.return=f;else for(g=f;null!==g;){if(g===b){g=null;break}f=g.sibling;if(null!==f){f.return=g.return;g=f;break}g=g.return}f=g}Xi(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,d=b.pendingProps.children,ch(b,c),e=eh(e),d=d(e),b.flags|=1,Xi(a,b,d,c),\nb.child;case 14:return d=b.type,e=Ci(d,b.pendingProps),e=Ci(d.type,e),$i(a,b,d,e,c);case 15:return bj(a,b,b.type,b.pendingProps,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),ij(a,b),b.tag=1,Zf(d)?(a=!0,cg(b)):a=!1,ch(b,c),Gi(b,d,e),Ii(b,d,e,c),jj(null,b,d,!0,a,c);case 19:return xj(a,b,c);case 22:return dj(a,b,c)}throw Error(p(156,b.tag));};function Fk(a,b){return ac(a,b)}\nfunction $k(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.subtreeFlags=this.flags=0;this.deletions=null;this.childLanes=this.lanes=0;this.alternate=null}function Bg(a,b,c,d){return new $k(a,b,c,d)}function aj(a){a=a.prototype;return!(!a||!a.isReactComponent)}\nfunction Zk(a){if(\"function\"===typeof a)return aj(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Da)return 11;if(a===Ga)return 14}return 2}\nfunction Pg(a,b){var c=a.alternate;null===c?(c=Bg(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null);c.flags=a.flags&14680064;c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction Rg(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)aj(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ya:return Tg(c.children,e,f,b);case za:g=8;e|=8;break;case Aa:return a=Bg(12,c,b,e|2),a.elementType=Aa,a.lanes=f,a;case Ea:return a=Bg(13,c,b,e),a.elementType=Ea,a.lanes=f,a;case Fa:return a=Bg(19,c,b,e),a.elementType=Fa,a.lanes=f,a;case Ia:return pj(c,e,f,b);default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case Ba:g=10;break a;case Ca:g=9;break a;case Da:g=11;\nbreak a;case Ga:g=14;break a;case Ha:g=16;d=null;break a}throw Error(p(130,null==a?a:typeof a,\"\"));}b=Bg(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function Tg(a,b,c,d){a=Bg(7,a,d,b);a.lanes=c;return a}function pj(a,b,c,d){a=Bg(22,a,d,b);a.elementType=Ia;a.lanes=c;a.stateNode={isHidden:!1};return a}function Qg(a,b,c){a=Bg(6,a,null,b);a.lanes=c;return a}\nfunction Sg(a,b,c){b=Bg(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction al(a,b,c,d,e){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.callbackNode=this.pendingContext=this.context=null;this.callbackPriority=0;this.eventTimes=zc(0);this.expirationTimes=zc(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=zc(0);this.identifierPrefix=d;this.onRecoverableError=e;this.mutableSourceEagerHydrationData=\nnull}function bl(a,b,c,d,e,f,g,h,k){a=new al(a,b,c,h,k);1===b?(b=1,!0===f&&(b|=8)):b=0;f=Bg(3,null,null,b);a.current=f;f.stateNode=a;f.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null,pendingSuspenseBoundaries:null};kh(f);return a}function cl(a,b,c){var d=3>>1,e=a[d];if(0>>1;dg(C,c))ng(x,C)?(a[d]=x,a[n]=c,d=n):(a[d]=C,a[m]=c,d=m);else if(ng(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}\nfunction g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D=\"function\"===typeof setTimeout?setTimeout:null,E=\"function\"===typeof clearTimeout?clearTimeout:null,F=\"undefined\"!==typeof setImmediate?setImmediate:null;\n\"undefined\"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}\nfunction J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if(\"function\"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;\nfunction M(){return exports.unstable_now()-Qa||125d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('goog.asserts');\n\n\n/**\n * @summary An assertion framework which is compiled out for deployment.\n * NOTE: this is not the closure library version. This uses the same name so\n * the closure compiler will be able to use the conditions to assist type\n * checking.\n */\ngoog.asserts = class {\n /**\n * @param {*} val\n * @param {string} message\n */\n static assert(val, message) {}\n};\n\n\n/**\n * @define {boolean} true to enable asserts, false otherwise.\n */\ngoog.asserts.ENABLE_ASSERTS = goog.DEBUG;\n\n\n// Install assert functions.\nif (goog.asserts.ENABLE_ASSERTS) {\n if (console.assert && console.assert.bind) {\n // eslint-disable-next-line no-restricted-syntax\n goog.asserts.assert = console.assert.bind(console);\n }\n}\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.abr.Ewma');\n\ngoog.require('goog.asserts');\n\n\n/**\n * @summary\n * This class computes an exponentionally-weighted moving average.\n */\nshaka.abr.Ewma = class {\n /**\n * @param {number} halfLife The quantity of prior samples (by weight) used\n * when creating a new estimate. Those prior samples make up half of the\n * new estimate.\n */\n constructor(halfLife) {\n goog.asserts.assert(halfLife > 0, 'expected halfLife to be positive');\n\n /**\n * Larger values of alpha expire historical data more slowly.\n * @private {number}\n */\n this.alpha_ = Math.exp(Math.log(0.5) / halfLife);\n\n /** @private {number} */\n this.estimate_ = 0;\n\n /** @private {number} */\n this.totalWeight_ = 0;\n }\n\n\n /**\n * Update the alpha with a new halfLife value.\n *\n * @param {number} halfLife The quantity of prior samples (by weight) used\n * when creating a new estimate. Those prior samples make up half of the\n * new estimate.\n */\n updateAlpha(halfLife) {\n goog.asserts.assert(halfLife > 0, 'expected halfLife to be positive');\n this.alpha_ = Math.exp(Math.log(0.5) / halfLife);\n }\n\n\n /**\n * Takes a sample.\n *\n * @param {number} weight\n * @param {number} value\n */\n sample(weight, value) {\n const adjAlpha = Math.pow(this.alpha_, weight);\n const newEstimate = value * (1 - adjAlpha) + adjAlpha * this.estimate_;\n\n if (!isNaN(newEstimate)) {\n this.estimate_ = newEstimate;\n this.totalWeight_ += weight;\n }\n }\n\n\n /**\n * @return {number}\n */\n getEstimate() {\n const zeroFactor = 1 - Math.pow(this.alpha_, this.totalWeight_);\n return this.estimate_ / zeroFactor;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.abr.EwmaBandwidthEstimator');\n\ngoog.require('shaka.abr.Ewma');\n\n\n/**\n * @summary\n * This class tracks bandwidth samples and estimates available bandwidth.\n * Based on the minimum of two exponentially-weighted moving averages with\n * different half-lives.\n *\n */\nshaka.abr.EwmaBandwidthEstimator = class {\n /** */\n constructor() {\n /**\n * A fast-moving average.\n * Half of the estimate is based on the last 2 seconds of sample history.\n * @private {!shaka.abr.Ewma}\n */\n this.fast_ = new shaka.abr.Ewma(2);\n\n /**\n * A slow-moving average.\n * Half of the estimate is based on the last 5 seconds of sample history.\n * @private {!shaka.abr.Ewma}\n */\n this.slow_ = new shaka.abr.Ewma(5);\n\n /**\n * Number of bytes sampled.\n * @private {number}\n */\n this.bytesSampled_ = 0;\n\n\n /**\n * Minimum number of bytes sampled before we trust the estimate. If we have\n * not sampled much data, our estimate may not be accurate enough to trust.\n * If bytesSampled_ is less than minTotalBytes_, we use defaultEstimate_.\n * This specific value is based on experimentation.\n *\n * @private {number}\n */\n this.minTotalBytes_ = 128e3; // 128kB\n\n /**\n * Minimum number of bytes, under which samples are discarded. Our models\n * do not include latency information, so connection startup time (time to\n * first byte) is considered part of the download time. Because of this, we\n * should ignore very small downloads which would cause our estimate to be\n * too low.\n * This specific value is based on experimentation.\n *\n * @private {number}\n */\n this.minBytes_ = 16e3; // 16kB\n }\n\n\n /**\n * Called by the Player to provide an updated configuration any time it\n * changes.\n * Must be called at least once before init().\n *\n * @param {shaka.extern.AdvancedAbrConfiguration} config\n */\n configure(config) {\n this.minTotalBytes_ = config.minTotalBytes;\n this.minBytes_ = config.minBytes;\n this.fast_.updateAlpha(config.fastHalfLife);\n this.slow_.updateAlpha(config.slowHalfLife);\n }\n\n\n /**\n * Takes a bandwidth sample.\n *\n * @param {number} durationMs The amount of time, in milliseconds, for a\n * particular request.\n * @param {number} numBytes The total number of bytes transferred in that\n * request.\n */\n sample(\n durationMs, numBytes) {\n if (numBytes < this.minBytes_) {\n return;\n }\n\n const bandwidth = 8000 * numBytes / durationMs;\n const weight = durationMs / 1000;\n\n this.bytesSampled_ += numBytes;\n this.fast_.sample(weight, bandwidth);\n this.slow_.sample(weight, bandwidth);\n }\n\n\n /**\n * Gets the current bandwidth estimate.\n *\n * @param {number} defaultEstimate\n * @return {number} The bandwidth estimate in bits per second.\n */\n getBandwidthEstimate(defaultEstimate) {\n if (this.bytesSampled_ < this.minTotalBytes_) {\n return defaultEstimate;\n }\n\n // Take the minimum of these two estimates. This should have the effect\n // of adapting down quickly, but up more slowly.\n return Math.min(this.fast_.getEstimate(), this.slow_.getEstimate());\n }\n\n\n /**\n * @return {boolean} True if there is enough data to produce a meaningful\n * estimate.\n */\n hasGoodEstimate() {\n return this.bytesSampled_ >= this.minTotalBytes_;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.log');\n\ngoog.require('goog.asserts');\n\n/**\n * @summary\n * A console logging framework which is compiled out for deployment. This is\n * only available when using the uncompiled version.\n * @exportDoc\n */\nshaka.log = class {\n /**\n * This always logs to the console, even in Release mode. This should only be\n * used for deprecation messages and things the app should never ignore.\n *\n * @param {...*} args\n */\n static alwaysError(...args) {}\n\n /**\n * This always logs to the console, even in Release mode. This should only be\n * used for deprecation messages and things the app should never ignore.\n *\n * @param {...*} args\n */\n static alwaysWarn(...args) {}\n\n /**\n * This always logs to the console, even in Release mode. This should only be\n * used for deprecation messages and things the app should never ignore.\n *\n * @param {string} id\n * @param {...*} args\n */\n static warnOnce(id, ...args) {\n if (shaka.log.oneTimeWarningIssued_.has(id)) {\n return;\n }\n\n shaka.log.oneTimeWarningIssued_.add(id);\n shaka.log.alwaysWarn(...args);\n }\n\n /**\n * This log is for when an error occurs. This should always be accompanied\n * with an error event, thrown exception, or rejected Promise. Logs are\n * disabled in Release mode, so there should be other methods of detecting the\n * error.\n *\n * @param {...*} args\n */\n static error(...args) {}\n\n /**\n * This log is for possible errors or things that may be surprising to a user.\n * For example, if we work around unusual or bad content, we should warn that\n * they should fix their content. Deprecation messages and messages the app\n * shouldn't ignore should use alwaysWarn instead.\n *\n * @param {...*} args\n */\n static warning(...args) {}\n\n /**\n * This log is for messages to the user about what is happening. For example,\n * when we update a manifest or install a polyfill.\n *\n * @param {...*} args\n */\n static info(...args) {}\n\n /**\n * This log is to aid *users* in debugging their content. This should be for\n * logs about the content and what we do with it. For example, when we change\n * streams or what we are choosing.\n *\n * @param {...*} args\n */\n static debug(...args) {}\n\n /**\n * This log is for debugging Shaka Player itself. This may be logs about\n * internal states or events. This may also be for more verbose logs about\n * content, such as for segment appends.\n *\n * @param {...*} args\n */\n static v1(...args) {}\n\n /**\n * This log is for tracing and debugging Shaka Player. These logs will happen\n * a lot, for example, logging every segment append or every update check.\n * These are mostly used for tracking which calls happen through the code.\n *\n * @param {...*} args\n */\n static v2(...args) {}\n};\n\n\n/**\n * Log levels.\n * @enum {number}\n * @exportDoc\n */\nshaka.log.Level = {\n NONE: 0,\n ERROR: 1,\n WARNING: 2,\n INFO: 3,\n DEBUG: 4,\n V1: 5,\n V2: 6,\n};\n\n\n/**\n * @define {number} the maximum log level.\n */\nshaka.log.MAX_LOG_LEVEL = 3;\n\n\n/**\n * A Set to indicate which one-time warnings have been issued.\n *\n * @private {!Set.}\n */\nshaka.log.oneTimeWarningIssued_ = new Set();\n\n\nif (window.console) {\n /** @private {!Object.} */\n shaka.log.logMap_ = {\n [shaka.log.Level.ERROR]: (...args) => console.error(...args),\n [shaka.log.Level.WARNING]: (...args) => console.warn(...args),\n [shaka.log.Level.INFO]: (...args) => console.info(...args),\n [shaka.log.Level.DEBUG]: (...args) => console.log(...args),\n [shaka.log.Level.V1]: (...args) => console.debug(...args),\n [shaka.log.Level.V2]: (...args) => console.debug(...args),\n };\n\n shaka.log.alwaysWarn = (...args) => console.warn(...args);\n shaka.log.alwaysError = (...args) => console.error(...args);\n\n if (goog.DEBUG) {\n // Since we don't want to export shaka.log in production builds, we don't\n // use the @export annotation. But the module wrapper (used in debug builds\n // since v2.5.11) hides anything non-exported. This is a debug-only,\n // API-based export to make sure logging is available in debug builds.\n goog.exportSymbol('shaka.log', shaka.log);\n\n /** @type {number} */\n shaka.log.currentLevel;\n\n /**\n * Change the log level. Useful for debugging in uncompiled mode.\n *\n * @param {number} level\n * @exportDoc\n */\n shaka.log.setLevel = (level) => {\n const getLog = (curLevel) => {\n if (curLevel <= level) {\n goog.asserts.assert(\n shaka.log.logMap_[curLevel], 'Unexpected log level');\n return shaka.log.logMap_[curLevel];\n } else {\n return () => {};\n }\n };\n\n shaka.log.currentLevel = level;\n shaka.log.error = getLog(shaka.log.Level.ERROR);\n shaka.log.warning = getLog(shaka.log.Level.WARNING);\n shaka.log.info = getLog(shaka.log.Level.INFO);\n shaka.log.debug = getLog(shaka.log.Level.DEBUG);\n shaka.log.v1 = getLog(shaka.log.Level.V1);\n shaka.log.v2 = getLog(shaka.log.Level.V2);\n };\n\n shaka.log.setLevel(shaka.log.MAX_LOG_LEVEL);\n } else {\n if (shaka.log.MAX_LOG_LEVEL >= shaka.log.Level.ERROR) {\n shaka.log.error = shaka.log.logMap_[shaka.log.Level.ERROR];\n }\n if (shaka.log.MAX_LOG_LEVEL >= shaka.log.Level.WARNING) {\n shaka.log.warning = shaka.log.logMap_[shaka.log.Level.WARNING];\n }\n if (shaka.log.MAX_LOG_LEVEL >= shaka.log.Level.INFO) {\n shaka.log.info = shaka.log.logMap_[shaka.log.Level.INFO];\n }\n if (shaka.log.MAX_LOG_LEVEL >= shaka.log.Level.DEBUG) {\n shaka.log.debug = shaka.log.logMap_[shaka.log.Level.DEBUG];\n }\n if (shaka.log.MAX_LOG_LEVEL >= shaka.log.Level.V1) {\n shaka.log.v1 = shaka.log.logMap_[shaka.log.Level.V1];\n }\n if (shaka.log.MAX_LOG_LEVEL >= shaka.log.Level.V2) {\n shaka.log.v2 = shaka.log.logMap_[shaka.log.Level.V2];\n }\n }\n}\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.MultiMap');\n\n\n/**\n * @summary A simple multimap template.\n * @template T\n */\nshaka.util.MultiMap = class {\n /** */\n constructor() {\n /** @private {!Object.>} */\n this.map_ = {};\n }\n\n\n /**\n * Add a key, value pair to the map.\n * @param {string} key\n * @param {T} value\n */\n push(key, value) {\n // eslint-disable-next-line no-prototype-builtins\n if (this.map_.hasOwnProperty(key)) {\n this.map_[key].push(value);\n } else {\n this.map_[key] = [value];\n }\n }\n\n\n /**\n * Get a list of values by key.\n * @param {string} key\n * @return {Array.} or null if no such key exists.\n */\n get(key) {\n const list = this.map_[key];\n // slice() clones the list so that it and the map can each be modified\n // without affecting the other.\n return list ? list.slice() : null;\n }\n\n\n /**\n * Get a list of all values.\n * @return {!Array.}\n */\n getAll() {\n const list = [];\n for (const key in this.map_) {\n list.push(...this.map_[key]);\n }\n return list;\n }\n\n\n /**\n * Remove a specific value, if it exists.\n * @param {string} key\n * @param {T} value\n */\n remove(key, value) {\n if (!(key in this.map_)) {\n return;\n }\n this.map_[key] = this.map_[key].filter((i) => i != value);\n if (this.map_[key].length == 0) {\n // Delete the array if it's empty, so that |get| will reliably return null\n // \"if no such key exists\", instead of sometimes returning an empty array.\n delete this.map_[key];\n }\n }\n\n\n /**\n * Clear all keys and values from the multimap.\n */\n clear() {\n this.map_ = {};\n }\n\n\n /**\n * @param {function(string, !Array.)} callback\n */\n forEach(callback) {\n for (const key in this.map_) {\n callback(key, this.map_[key]);\n }\n }\n\n /**\n * Returns the number of elements in the multimap.\n * @return {number}\n */\n size() {\n return Object.keys(this.map_).length;\n }\n\n /**\n * Get a list of all the keys.\n * @return {!Array.}\n */\n keys() {\n return Object.keys(this.map_);\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.EventManager');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.util.IReleasable');\ngoog.require('shaka.util.MultiMap');\n\n\n/**\n * @summary\n * An EventManager maintains a collection of \"event\n * bindings\" between event targets and event listeners.\n *\n * @implements {shaka.util.IReleasable}\n * @export\n */\nshaka.util.EventManager = class {\n /** */\n constructor() {\n /**\n * Maps an event type to an array of event bindings.\n * @private {shaka.util.MultiMap.}\n */\n this.bindingMap_ = new shaka.util.MultiMap();\n }\n\n\n /**\n * Detaches all event listeners.\n * @override\n * @export\n */\n release() {\n this.removeAll();\n this.bindingMap_ = null;\n }\n\n\n /**\n * Attaches an event listener to an event target.\n * @param {EventTarget} target The event target.\n * @param {string} type The event type.\n * @param {shaka.util.EventManager.ListenerType} listener The event listener.\n * @param {(boolean|!AddEventListenerOptions)=} options An object that\n * specifies characteristics about the event listener.\n * The passive option, if true, indicates that this function will never\n * call preventDefault(), which improves scrolling performance.\n * @export\n */\n listen(target, type, listener, options) {\n if (!this.bindingMap_) {\n return;\n }\n\n const binding =\n new shaka.util.EventManager.Binding_(target, type, listener, options);\n this.bindingMap_.push(type, binding);\n }\n\n\n /**\n * Attaches an event listener to an event target. The listener will be\n * removed when the first instance of the event is fired.\n * @param {EventTarget} target The event target.\n * @param {string} type The event type.\n * @param {shaka.util.EventManager.ListenerType} listener The event listener.\n * @param {(boolean|!AddEventListenerOptions)=} options An object that\n * specifies characteristics about the event listener.\n * The passive option, if true, indicates that this function will never\n * call preventDefault(), which improves scrolling performance.\n * @export\n */\n listenOnce(target, type, listener, options) {\n // Install a shim listener that will stop listening after the first event.\n const shim = (event) => {\n // Stop listening to this event.\n this.unlisten(target, type, shim);\n // Call the original listener.\n listener(event);\n };\n this.listen(target, type, shim, options);\n }\n\n\n /**\n * Detaches an event listener from an event target.\n * @param {EventTarget} target The event target.\n * @param {string} type The event type.\n * @param {shaka.util.EventManager.ListenerType=} listener The event listener.\n * @export\n */\n unlisten(target, type, listener) {\n if (!this.bindingMap_) {\n return;\n }\n\n const list = this.bindingMap_.get(type) || [];\n\n for (const binding of list) {\n if (binding.target == target) {\n if (listener == binding.listener || !listener) {\n binding.unlisten();\n this.bindingMap_.remove(type, binding);\n }\n }\n }\n }\n\n\n /**\n * Detaches all event listeners from all targets.\n * @export\n */\n removeAll() {\n if (!this.bindingMap_) {\n return;\n }\n\n const list = this.bindingMap_.getAll();\n\n for (const binding of list) {\n binding.unlisten();\n }\n\n this.bindingMap_.clear();\n }\n};\n\n\n/**\n * @typedef {function(!Event)}\n * @export\n */\nshaka.util.EventManager.ListenerType;\n\n\n/**\n * Creates a new Binding_ and attaches the event listener to the event target.\n *\n * @private\n */\nshaka.util.EventManager.Binding_ = class {\n /**\n * @param {EventTarget} target The event target.\n * @param {string} type The event type.\n * @param {shaka.util.EventManager.ListenerType} listener The event listener.\n * @param {(boolean|!AddEventListenerOptions)=} options An object that\n * specifies characteristics about the event listener.\n * The passive option, if true, indicates that this function will never\n * call preventDefault(), which improves scrolling performance.\n */\n constructor(target, type, listener, options) {\n /** @type {EventTarget} */\n this.target = target;\n\n /** @type {string} */\n this.type = type;\n\n /** @type {?shaka.util.EventManager.ListenerType} */\n this.listener = listener;\n\n /** @type {(boolean|!AddEventListenerOptions)} */\n this.options =\n shaka.util.EventManager.Binding_.convertOptions_(target, options);\n\n this.target.addEventListener(type, listener, this.options);\n }\n\n\n /**\n * Detaches the event listener from the event target. This does nothing if\n * the event listener is already detached.\n */\n unlisten() {\n goog.asserts.assert(this.target, 'Missing target');\n this.target.removeEventListener(this.type, this.listener, this.options);\n\n this.target = null;\n this.listener = null;\n this.options = false;\n }\n\n /**\n * Converts the provided options value into a value accepted by the browser.\n * Some browsers (e.g. Tizen) don't support passing options as an\n * object. So this detects this case and converts it.\n *\n * @param {EventTarget} target\n * @param {(boolean|!AddEventListenerOptions)=} value\n * @return {(boolean|!AddEventListenerOptions)}\n * @private\n */\n static convertOptions_(target, value) {\n if (value == undefined) {\n return false;\n } else if (typeof value == 'boolean') {\n return value;\n } else {\n // Ignore the 'passive' option since it is just an optimization and\n // doesn't affect behavior. Assert there aren't any other settings to\n // ensure we don't have different behavior on different browsers by\n // ignoring an important option.\n const ignored = new Set(['passive', 'capture']);\n const keys = Object.keys(value).filter((k) => !ignored.has(k));\n goog.asserts.assert(\n keys.length == 0,\n 'Unsupported flag(s) to addEventListener: ' + keys.join(','));\n\n const supports =\n shaka.util.EventManager.Binding_.doesSupportObject_(target);\n if (supports) {\n return value;\n } else {\n return value['capture'] || false;\n }\n }\n }\n\n /**\n * Checks whether the browser supports passing objects as the third argument\n * to addEventListener. This caches the result value in a static field to\n * avoid a bunch of checks.\n *\n * @param {EventTarget} target\n * @return {boolean}\n * @private\n */\n static doesSupportObject_(target) {\n // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n let supports = shaka.util.EventManager.Binding_.supportsObject_;\n if (supports == undefined) {\n supports = false;\n try {\n const options = {};\n // This defines a getter that will set this variable if called. So if\n // the browser gets this property, it supports using an object. If the\n // browser doesn't get these fields, it won't support objects.\n const prop = {\n get: () => {\n supports = true;\n return false;\n },\n };\n Object.defineProperty(options, 'passive', prop);\n Object.defineProperty(options, 'capture', prop);\n\n const call = () => {};\n target.addEventListener('test', call, options);\n target.removeEventListener('test', call, options);\n } catch (e) {\n supports = false;\n }\n shaka.util.EventManager.Binding_.supportsObject_ = supports;\n }\n return supports || false; // \"false\" fallback needed for compiler.\n }\n};\n\n/** @private {(boolean|undefined)} */\nshaka.util.EventManager.Binding_.supportsObject_ = undefined;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.Capabilities');\n\n/**\n * @summary\n * This is for capturing all media source capabilities on current platform.\n * And this is for static check and can not be constructed.\n */\nshaka.media.Capabilities = class {\n /**\n * Cache browser engine call to improve performance on some poor platforms\n *\n * @param {string} type\n * @return {boolean}\n */\n static isTypeSupported(type) {\n const supportMap = shaka.media.Capabilities.MediaSourceTypeSupportMap;\n if (supportMap.has(type)) {\n return supportMap.get(type);\n }\n const mediaSource = window.ManagedMediaSource || window.MediaSource;\n if (mediaSource) {\n const currentSupport = mediaSource.isTypeSupported(type);\n supportMap.set(type, currentSupport);\n return currentSupport;\n }\n return false;\n }\n\n /**\n * Determine support for SourceBuffer.changeType\n * @return {boolean}\n */\n static isChangeTypeSupported() {\n const sourceBuffer = window.ManagedSourceBuffer || window.SourceBuffer;\n return !!sourceBuffer &&\n // eslint-disable-next-line no-restricted-syntax\n !!sourceBuffer.prototype && !!sourceBuffer.prototype.changeType;\n }\n};\n\n/**\n * Public it for unit test, and developer could also check the support map.\n * @type {!Map.}\n */\nshaka.media.Capabilities.MediaSourceTypeSupportMap = new Map();\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.deprecate.Version');\n\n/**\n * A class that defines what a library version is within the deprecation\n * system. Within deprecation we only care about the major and minor versions.\n *\n * @final\n */\nshaka.deprecate.Version = class {\n /**\n * @param {number} major\n * @param {number} minor\n */\n constructor(major, minor) {\n this.major_ = major;\n this.minor_ = minor;\n }\n\n /** @return {number} */\n major() { return this.major_; }\n\n /** @return {number} */\n minor() { return this.minor_; }\n\n /**\n * Returns:\n * - positive if |this| > |other|\n * - zero if |this| == |other|\n * - negative if |this| < |other|\n *\n * @param {!shaka.deprecate.Version} other\n * @return {number}\n */\n compareTo(other) {\n const majorCheck = this.major_ - other.major_;\n const minorCheck = this.minor_ - other.minor_;\n\n return majorCheck || minorCheck;\n }\n\n /** @override */\n toString() {\n return 'v' + this.major_ + '.' + this.minor_;\n }\n\n /**\n * Parse the major and minor values out of a version string that is assumed\n * to follow the grammar: \"vMAJOR.MINOR.\". What comes after the last \".\" we\n * will ignore.\n *\n * @param {string} versionString\n * @return {!shaka.deprecate.Version}\n */\n static parse(versionString) {\n // Make sure to drop the \"v\" from the front. We limit the number of splits\n // to two as we don't care what happens after the minor version number.\n // For example: 'a.b.c.d'.split('.', 2) == ['a', 'b']\n const components = versionString.substring(1).split('.', /* limit= */ 2);\n\n return new shaka.deprecate.Version(\n Number(components[0]),\n Number(components[1]));\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.Deprecate');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.deprecate.Enforcer');\ngoog.require('shaka.deprecate.Version');\ngoog.require('shaka.log');\n\n\n/**\n * |shaka.Deprecate| is the front-end of the deprecation system, allowing for\n * any part of the code to say that \"this block of code should be removed by\n * version X\".\n *\n * @final\n */\nshaka.Deprecate = class {\n /**\n * Initialize the system. This must happen before any calls to |enforce|. In\n * our code base, |shaka.Player| will be the only one to call this (it has the\n * version string).\n *\n * If the |Deprecate| called |Player.version| to initialize itself, it would\n * mean that |Player| could not use |Deprecate| because it would create a\n * circular dependency. To work around this, we provide this method so that\n * |Player| can give us the version without us needing to know about |Player|.\n *\n * This will initialize the system to:\n * - print warning messages when the feature is scheduled to be removed in a\n * later version\n * - print errors and fail assertions when the feature should be removed now\n *\n * @param {string} versionString\n */\n static init(versionString) {\n goog.asserts.assert(\n shaka.Deprecate.enforcer_ == null,\n 'Deprecate.init should only be called once.');\n\n shaka.Deprecate.enforcer_ = new shaka.deprecate.Enforcer(\n shaka.deprecate.Version.parse(versionString),\n shaka.Deprecate.onPending_,\n shaka.Deprecate.onExpired_);\n }\n\n /**\n * Ask the deprecation system to require this feature to be removed by the\n * given version.\n *\n * @param {number} major\n * @param {string} name\n * @param {string} description\n */\n static deprecateFeature(major, name, description) {\n const enforcer = shaka.Deprecate.enforcer_;\n goog.asserts.assert(\n enforcer,\n 'Missing deprecation enforcer. Was |init| called?');\n\n const expiresAt = new shaka.deprecate.Version(major, 0);\n enforcer.enforce(expiresAt, name, description);\n }\n\n /**\n * @param {!shaka.deprecate.Version} libraryVersion\n * @param {!shaka.deprecate.Version} featureVersion\n * @param {string} name\n * @param {string} description\n * @private\n */\n static onPending_(libraryVersion, featureVersion, name, description) {\n // If we were to pass each value to the log call, it would be printed as\n // a comma-separated list. To make the print state appear more natural to\n // the reader, create one string for the message.\n shaka.log.alwaysWarn([\n name,\n 'has been deprecated and will be removed in',\n featureVersion,\n '. We are currently at version',\n libraryVersion,\n '. Additional information:',\n description,\n ].join(' '));\n }\n\n /**\n * @param {!shaka.deprecate.Version} libraryVersion\n * @param {!shaka.deprecate.Version} featureVersion\n * @param {string} name\n * @param {string} description\n * @private\n */\n static onExpired_(libraryVersion, featureVersion, name, description) {\n // If we were to pass each value to the log call, it would be printed as\n // a comma-separated list. To make the print state appear more natural to\n // the reader, create one string for the message.\n const errorMessage = [\n name,\n 'has been deprecated and has been removed in',\n featureVersion,\n '. We are now at version',\n libraryVersion,\n '. Additional information:',\n description,\n ].join(' ');\n\n shaka.log.alwaysError(errorMessage);\n goog.asserts.assert(false, errorMessage);\n }\n};\n\n/**\n * The global deprecation enforcer that will be set by the player (because the\n * player knows the version) when it calls |init|. This may appear a little\n * round-about to you, because it is. Since player uses |Deprecate|, it means\n * that |Deprecate| can't depend on Player directly.\n *\n * @private {shaka.deprecate.Enforcer}\n */\nshaka.Deprecate.enforcer_ = null;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.text.TextEngine');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.Deprecate');\ngoog.require('shaka.media.ClosedCaptionParser');\ngoog.require('shaka.text.Cue');\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.IDestroyable');\ngoog.require('shaka.util.MimeUtils');\n\n\n// TODO: revisit this when Closure Compiler supports partially-exported classes.\n/**\n * @summary Manages text parsers and cues.\n * @implements {shaka.util.IDestroyable}\n * @export\n */\nshaka.text.TextEngine = class {\n /** @param {shaka.extern.TextDisplayer} displayer */\n constructor(displayer) {\n /** @private {?shaka.extern.TextParser} */\n this.parser_ = null;\n\n /** @private {shaka.extern.TextDisplayer} */\n this.displayer_ = displayer;\n\n /** @private {boolean} */\n this.segmentRelativeVttTiming_ = false;\n\n /** @private {number} */\n this.timestampOffset_ = 0;\n\n /** @private {number} */\n this.appendWindowStart_ = 0;\n\n /** @private {number} */\n this.appendWindowEnd_ = Infinity;\n\n /** @private {?number} */\n this.bufferStart_ = null;\n\n /** @private {?number} */\n this.bufferEnd_ = null;\n\n /** @private {string} */\n this.selectedClosedCaptionId_ = '';\n\n /** @private {shaka.extern.TextParser.ModifyCueCallback} */\n this.modifyCueCallback_ = (cue, uri) => {};\n\n /**\n * The closed captions map stores the CEA closed captions by closed captions\n * id and start and end time.\n * It's used as the buffer of closed caption text streams, to show captions\n * when we start displaying captions or switch caption tracks, we need to be\n * able to get the cues for the other language and display them without\n * re-fetching the video segments they were embedded in.\n * Structure of closed caption map:\n * closed caption id -> {start and end time -> cues}\n * @private {!Map.>>} */\n this.closedCaptionsMap_ = new Map();\n }\n\n /**\n * @param {string} mimeType\n * @param {!shaka.extern.TextParserPlugin} plugin\n * @export\n */\n static registerParser(mimeType, plugin) {\n shaka.text.TextEngine.parserMap_[mimeType] = plugin;\n }\n\n /**\n * @param {string} mimeType\n * @export\n */\n static unregisterParser(mimeType) {\n delete shaka.text.TextEngine.parserMap_[mimeType];\n }\n\n /**\n * @return {?shaka.extern.TextParserPlugin}\n * @export\n */\n static findParser(mimeType) {\n return shaka.text.TextEngine.parserMap_[mimeType];\n }\n\n /**\n * @param {string} mimeType\n * @return {boolean}\n */\n static isTypeSupported(mimeType) {\n if (shaka.text.TextEngine.parserMap_[mimeType]) {\n // An actual parser is available.\n return true;\n }\n if (mimeType == shaka.util.MimeUtils.CEA608_CLOSED_CAPTION_MIMETYPE ||\n mimeType == shaka.util.MimeUtils.CEA708_CLOSED_CAPTION_MIMETYPE ) {\n return !!shaka.media.ClosedCaptionParser.findDecoder();\n }\n return false;\n }\n\n // TODO: revisit this when the compiler supports partially-exported classes.\n /**\n * @override\n * @export\n */\n destroy() {\n this.parser_ = null;\n this.displayer_ = null;\n this.closedCaptionsMap_.clear();\n\n return Promise.resolve();\n }\n\n /**\n * @param {!shaka.extern.TextDisplayer} displayer\n */\n setDisplayer(displayer) {\n this.displayer_ = displayer;\n }\n\n /**\n * Initialize the parser. This can be called multiple times, but must be\n * called at least once before appendBuffer.\n *\n * @param {string} mimeType\n * @param {boolean} sequenceMode\n * @param {boolean} segmentRelativeVttTiming\n * @param {string} manifestType\n */\n initParser(mimeType, sequenceMode, segmentRelativeVttTiming, manifestType) {\n // No parser for CEA, which is extracted from video and side-loaded\n // into TextEngine and TextDisplayer.\n if (mimeType == shaka.util.MimeUtils.CEA608_CLOSED_CAPTION_MIMETYPE ||\n mimeType == shaka.util.MimeUtils.CEA708_CLOSED_CAPTION_MIMETYPE) {\n this.parser_ = null;\n return;\n }\n\n const factory = shaka.text.TextEngine.parserMap_[mimeType];\n goog.asserts.assert(\n factory, 'Text type negotiation should have happened already');\n this.parser_ = factory();\n if (this.parser_.setSequenceMode) {\n this.parser_.setSequenceMode(sequenceMode);\n } else {\n shaka.Deprecate.deprecateFeature(5,\n 'Text parsers w/ setSequenceMode',\n 'Text parsers should have a \"setSequenceMode\" method!');\n }\n if (this.parser_.setManifestType) {\n this.parser_.setManifestType(manifestType);\n } else {\n shaka.Deprecate.deprecateFeature(5,\n 'Text parsers w/ setManifestType',\n 'Text parsers should have a \"setManifestType\" method!');\n }\n this.segmentRelativeVttTiming_ = segmentRelativeVttTiming;\n }\n\n /** @param {shaka.extern.TextParser.ModifyCueCallback} modifyCueCallback */\n setModifyCueCallback(modifyCueCallback) {\n this.modifyCueCallback_ = modifyCueCallback;\n }\n\n /**\n * @param {BufferSource} buffer\n * @param {?number} startTime relative to the start of the presentation\n * @param {?number} endTime relative to the start of the presentation\n * @param {?string=} uri\n * @return {!Promise}\n */\n async appendBuffer(buffer, startTime, endTime, uri) {\n goog.asserts.assert(\n this.parser_, 'The parser should already be initialized');\n\n // Start the operation asynchronously to avoid blocking the caller.\n await Promise.resolve();\n\n // Check that TextEngine hasn't been destroyed.\n if (!this.parser_ || !this.displayer_) {\n return;\n }\n\n if (startTime == null || endTime == null) {\n this.parser_.parseInit(shaka.util.BufferUtils.toUint8(buffer));\n return;\n }\n\n const vttOffset = this.segmentRelativeVttTiming_ ?\n startTime : this.timestampOffset_;\n\n /** @type {shaka.extern.TextParser.TimeContext} **/\n const time = {\n periodStart: this.timestampOffset_,\n segmentStart: startTime,\n segmentEnd: endTime,\n vttOffset: vttOffset,\n };\n\n // Parse the buffer and add the new cues.\n const allCues = this.parser_.parseMedia(\n shaka.util.BufferUtils.toUint8(buffer), time, uri, /* images= */ []);\n for (const cue of allCues) {\n this.modifyCueCallback_(cue, uri || null, time);\n }\n const cuesToAppend = allCues.filter((cue) => {\n return cue.startTime >= this.appendWindowStart_ &&\n cue.startTime < this.appendWindowEnd_;\n });\n\n this.displayer_.append(cuesToAppend);\n\n // NOTE: We update the buffered range from the start and end times\n // passed down from the segment reference, not with the start and end\n // times of the parsed cues. This is important because some segments\n // may contain no cues, but we must still consider those ranges\n // buffered.\n if (this.bufferStart_ == null) {\n this.bufferStart_ = Math.max(startTime, this.appendWindowStart_);\n } else {\n // We already had something in buffer, and we assume we are extending\n // the range from the end.\n goog.asserts.assert(\n this.bufferEnd_ != null,\n 'There should already be a buffered range end.');\n goog.asserts.assert(\n (startTime - this.bufferEnd_) <= 1,\n 'There should not be a gap in text references >1s');\n }\n this.bufferEnd_ = Math.min(endTime, this.appendWindowEnd_);\n }\n\n /**\n * @param {number} startTime relative to the start of the presentation\n * @param {number} endTime relative to the start of the presentation\n * @return {!Promise}\n */\n async remove(startTime, endTime) {\n // Start the operation asynchronously to avoid blocking the caller.\n await Promise.resolve();\n\n if (this.displayer_ && this.displayer_.remove(startTime, endTime)) {\n if (this.bufferStart_ == null) {\n goog.asserts.assert(\n this.bufferEnd_ == null, 'end must be null if startTime is null');\n } else {\n goog.asserts.assert(\n this.bufferEnd_ != null,\n 'end must be non-null if startTime is non-null');\n\n // Update buffered range.\n if (endTime <= this.bufferStart_ || startTime >= this.bufferEnd_) {\n // No intersection. Nothing was removed.\n } else if (startTime <= this.bufferStart_ &&\n endTime >= this.bufferEnd_) {\n // We wiped out everything.\n this.bufferStart_ = this.bufferEnd_ = null;\n } else if (startTime <= this.bufferStart_ &&\n endTime < this.bufferEnd_) {\n // We removed from the beginning of the range.\n this.bufferStart_ = endTime;\n } else if (startTime > this.bufferStart_ &&\n endTime >= this.bufferEnd_) {\n // We removed from the end of the range.\n this.bufferEnd_ = startTime;\n } else {\n // We removed from the middle? StreamingEngine isn't supposed to.\n goog.asserts.assert(\n false, 'removal from the middle is not supported by TextEngine');\n }\n }\n }\n }\n\n /** @param {number} timestampOffset */\n setTimestampOffset(timestampOffset) {\n this.timestampOffset_ = timestampOffset;\n }\n\n /**\n * @param {number} appendWindowStart\n * @param {number} appendWindowEnd\n */\n setAppendWindow(appendWindowStart, appendWindowEnd) {\n this.appendWindowStart_ = appendWindowStart;\n this.appendWindowEnd_ = appendWindowEnd;\n }\n\n /**\n * @return {?number} Time in seconds of the beginning of the buffered range,\n * or null if nothing is buffered.\n */\n bufferStart() {\n return this.bufferStart_;\n }\n\n /**\n * @return {?number} Time in seconds of the end of the buffered range,\n * or null if nothing is buffered.\n */\n bufferEnd() {\n return this.bufferEnd_;\n }\n\n /**\n * @param {number} t A timestamp\n * @return {boolean}\n */\n isBuffered(t) {\n if (this.bufferStart_ == null || this.bufferEnd_ == null) {\n return false;\n }\n return t >= this.bufferStart_ && t < this.bufferEnd_;\n }\n\n /**\n * @param {number} t A timestamp\n * @return {number} Number of seconds ahead of 't' we have buffered\n */\n bufferedAheadOf(t) {\n if (this.bufferEnd_ == null || this.bufferEnd_ < t) {\n return 0;\n }\n\n goog.asserts.assert(\n this.bufferStart_ != null,\n 'start should not be null if end is not null');\n\n return this.bufferEnd_ - Math.max(t, this.bufferStart_);\n }\n\n /**\n * Set the selected closed captions id.\n * Append the cues stored in the closed captions map until buffer end time.\n * This is to fill the gap between buffered and unbuffered captions, and to\n * avoid duplicates that would be caused by any future video segments parsed\n * for captions.\n *\n * @param {string} id\n * @param {number} bufferEndTime Load any stored cues up to this time.\n */\n setSelectedClosedCaptionId(id, bufferEndTime) {\n this.selectedClosedCaptionId_ = id;\n\n const captionsMap = this.closedCaptionsMap_.get(id);\n if (captionsMap) {\n for (const startAndEndTime of captionsMap.keys()) {\n /** @type {Array.} */\n const cues = captionsMap.get(startAndEndTime)\n .filter((c) => c.endTime <= bufferEndTime);\n if (cues) {\n this.displayer_.append(cues);\n }\n }\n }\n }\n\n /**\n * @param {!shaka.text.Cue} cue the cue to apply the timestamp to recursively\n * @param {number} videoTimestampOffset the timestamp offset of the video\n * @private\n */\n applyVideoTimestampOffsetRecursive_(cue, videoTimestampOffset) {\n cue.startTime += videoTimestampOffset;\n cue.endTime += videoTimestampOffset;\n for (const nested of cue.nestedCues) {\n this.applyVideoTimestampOffsetRecursive_(nested, videoTimestampOffset);\n }\n }\n\n /**\n * Store the closed captions in the text engine, and append the cues to the\n * text displayer. This is a side-channel used for embedded text only.\n *\n * @param {!Array} closedCaptions\n * @param {?number} startTime relative to the start of the presentation\n * @param {?number} endTime relative to the start of the presentation\n * @param {number} videoTimestampOffset the timestamp offset of the video\n * stream in which these captions were embedded\n */\n storeAndAppendClosedCaptions(\n closedCaptions, startTime, endTime, videoTimestampOffset) {\n const startAndEndTime = startTime + ' ' + endTime;\n /** @type {!Map.>>} */\n const captionsMap = new Map();\n\n for (const caption of closedCaptions) {\n const id = caption.stream;\n const cue = caption.cue;\n if (!captionsMap.has(id)) {\n captionsMap.set(id, new Map());\n }\n if (!captionsMap.get(id).has(startAndEndTime)) {\n captionsMap.get(id).set(startAndEndTime, []);\n }\n\n // Adjust CEA captions with respect to the timestamp offset of the video\n // stream in which they were embedded.\n this.applyVideoTimestampOffsetRecursive_(cue, videoTimestampOffset);\n\n const keepThisCue =\n cue.startTime >= this.appendWindowStart_ &&\n cue.startTime < this.appendWindowEnd_;\n if (!keepThisCue) {\n continue;\n }\n\n captionsMap.get(id).get(startAndEndTime).push(cue);\n if (id == this.selectedClosedCaptionId_) {\n this.displayer_.append([cue]);\n }\n }\n\n for (const id of captionsMap.keys()) {\n if (!this.closedCaptionsMap_.has(id)) {\n this.closedCaptionsMap_.set(id, new Map());\n }\n for (const startAndEndTime of captionsMap.get(id).keys()) {\n const cues = captionsMap.get(id).get(startAndEndTime);\n this.closedCaptionsMap_.get(id).set(startAndEndTime, cues);\n }\n }\n\n if (this.bufferStart_ == null) {\n this.bufferStart_ = Math.max(startTime, this.appendWindowStart_);\n } else {\n this.bufferStart_ = Math.min(\n this.bufferStart_, Math.max(startTime, this.appendWindowStart_));\n }\n\n this.bufferEnd_ = Math.max(\n this.bufferEnd_, Math.min(endTime, this.appendWindowEnd_));\n }\n\n /**\n * Get the number of closed caption channels.\n *\n * This function is for TESTING ONLY. DO NOT USE in the library.\n *\n * @return {number}\n */\n getNumberOfClosedCaptionChannels() {\n return this.closedCaptionsMap_.size;\n }\n\n /**\n * Get the number of closed caption cues for a given channel. If there is\n * no channel for the given channel id, this will return 0.\n *\n * This function is for TESTING ONLY. DO NOT USE in the library.\n *\n * @param {string} channelId\n * @return {number}\n */\n getNumberOfClosedCaptionsInChannel(channelId) {\n const channel = this.closedCaptionsMap_.get(channelId);\n return channel ? channel.size : 0;\n }\n};\n\n/** @private {!Object.} */\nshaka.text.TextEngine.parserMap_ = {};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.deprecate.Enforcer');\n\ngoog.require('shaka.deprecate.Version');\n\n\n/**\n * The enforcer's job is to call the correct callback when a feature will need\n * to be removed later or removed now.\n *\n * The \"what should be done\" is not part of the enforcer, that must be provided\n * to the enforcer when it is created. This separation was created so that\n * testing and production could be equal users of the enforcer.\n *\n * @final\n */\nshaka.deprecate.Enforcer = class {\n /**\n * @param {!shaka.deprecate.Version} libraryVersion\n * @param {shaka.deprecate.Listener} onPending\n * @param {shaka.deprecate.Listener} onExpired\n */\n constructor(libraryVersion, onPending, onExpired) {\n /** @private {!shaka.deprecate.Version} */\n this.libraryVersion_ = libraryVersion;\n\n /** @private {shaka.deprecate.Listener} */\n this.onPending_ = onPending;\n /** @private {shaka.deprecate.Listener} */\n this.onExpired_ = onExpired;\n }\n\n /**\n * Tell the enforcer that a feature will expire on |expiredOn| and that it\n * should notify the listeners if it is pending or expired.\n *\n * @param {!shaka.deprecate.Version} expiresOn\n * @param {string} name\n * @param {string} description\n */\n enforce(expiresOn, name, description) {\n // If the expiration version is larger than the library version\n // (compareTo > 0), it means the expiration is in the future, and is still\n // pending.\n const isPending = expiresOn.compareTo(this.libraryVersion_) > 0;\n\n // Find the right callback (pending or expired) for this enforcement request\n // call it to handle this features pending/expired removal.\n const callback = isPending ? this.onPending_ : this.onExpired_;\n callback(this.libraryVersion_, expiresOn, name, description);\n }\n};\n\n/**\n * A callback for listening to deprecation events.\n *\n * Parameters:\n * libraryVersion: !shaka.deprecate.Version\n * featureVersion: !shaka.deprecate.Version\n * name: string\n * description: string\n *\n * libraryVersion: The current version of the library.\n * featureVersion: The version of the library when the feature should be\n * removed.\n * name: The name of the feature that will/should be removed.\n * description: A description of what is changing.\n *\n * @typedef {function(\n * !shaka.deprecate.Version,\n * !shaka.deprecate.Version,\n * string,\n * string)}\n */\nshaka.deprecate.Listener;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.cea.DummyCaptionDecoder');\n\n/** @implements {shaka.extern.ICaptionDecoder} */\nshaka.cea.DummyCaptionDecoder = class {\n /** @override */\n extract(userDataSeiMessage, pts) {}\n\n /** @override */\n decode() {\n return [];\n }\n\n /** @override */\n clear() {}\n\n /** @override */\n getStreams() {\n return [];\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.cea.DummyCeaParser');\n\n/**\n * Dummy CEA parser.\n * @implements {shaka.extern.ICeaParser}\n */\nshaka.cea.DummyCeaParser = class {\n /**\n * @override\n */\n init(initSegment) {\n }\n\n /**\n * @override\n */\n parse(mediaSegment) {\n return /* captionPackets= */ [];\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.BufferUtils');\n\n\n/**\n * @summary A set of BufferSource utility functions.\n * @export\n */\nshaka.util.BufferUtils = class {\n /**\n * Compare two buffers for equality. For buffers of different types, this\n * compares the underlying buffers as binary data.\n *\n * @param {?BufferSource} arr1\n * @param {?BufferSource} arr2\n * @return {boolean}\n * @export\n * @suppress {strictMissingProperties}\n */\n static equal(arr1, arr2) {\n const BufferUtils = shaka.util.BufferUtils;\n if (!arr1 && !arr2) {\n return true;\n }\n if (!arr1 || !arr2) {\n return false;\n }\n if (arr1.byteLength != arr2.byteLength) {\n return false;\n }\n\n // Quickly check if these are views of the same buffer. An ArrayBuffer can\n // be passed but doesn't have a byteOffset field, so default to 0.\n if (BufferUtils.unsafeGetArrayBuffer_(arr1) ==\n BufferUtils.unsafeGetArrayBuffer_(arr2) &&\n (arr1.byteOffset || 0) == (arr2.byteOffset || 0)) {\n return true;\n }\n\n const uint8A = shaka.util.BufferUtils.toUint8(arr1);\n const uint8B = shaka.util.BufferUtils.toUint8(arr2);\n for (let i = 0; i < arr1.byteLength; i++) {\n if (uint8A[i] != uint8B[i]) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Gets the underlying ArrayBuffer of the given view. The caller needs to\n * ensure it uses the \"byteOffset\" and \"byteLength\" fields of the view to\n * only use the same \"view\" of the data.\n *\n * @param {BufferSource} view\n * @return {!ArrayBuffer}\n * @private\n */\n static unsafeGetArrayBuffer_(view) {\n if (!ArrayBuffer.isView(view)) {\n return /** @type {!ArrayBuffer} */(view);\n } else {\n return /** @type {!ArrayBufferView} */(view).buffer;\n }\n }\n\n /**\n * Gets an ArrayBuffer that contains the data from the given TypedArray. Note\n * this will allocate a new ArrayBuffer if the object is a partial view of\n * the data.\n *\n * @param {!BufferSource} view\n * @return {!ArrayBuffer}\n * @export\n */\n static toArrayBuffer(view) {\n if (!ArrayBuffer.isView(view)) {\n return /** @type {!ArrayBuffer} */(view);\n } else {\n const aView = /** @type {!ArrayBufferView} */(view);\n if (aView.byteOffset == 0 &&\n aView.byteLength == aView.buffer.byteLength) {\n // This is a TypedArray over the whole buffer.\n return aView.buffer;\n }\n // This is a \"view\" on the buffer. Create a new buffer that only contains\n // the data. Note that since this isn't an ArrayBuffer, the \"new\" call\n // will allocate a new buffer to hold the copy.\n return new Uint8Array(aView).buffer;\n }\n }\n\n /**\n * Creates a new Uint8Array view on the same buffer. This clamps the values\n * to be within the same view (i.e. you can't use this to move past the end\n * of the view, even if the underlying buffer is larger). However, you can\n * pass a negative offset to access the data before the view.\n *\n * @param {BufferSource} data\n * @param {number=} offset The offset from the beginning of this data's view\n * to start the new view at.\n * @param {number=} length The byte length of the new view.\n * @return {!Uint8Array}\n * @export\n */\n static toUint8(data, offset = 0, length = Infinity) {\n return shaka.util.BufferUtils.view_(data, offset, length, Uint8Array);\n }\n\n /**\n * Creates a new Uint16Array view on the same buffer. This clamps the values\n * to be within the same view (i.e. you can't use this to move past the end\n * of the view, even if the underlying buffer is larger). However, you can\n * pass a negative offset to access the data before the view.\n *\n * @param {BufferSource} data\n * @param {number=} offset The offset from the beginning of this data's view\n * to start the new view at.\n * @param {number=} length The byte length of the new view.\n * @return {!Uint16Array}\n * @export\n */\n static toUint16(data, offset = 0, length = Infinity) {\n return shaka.util.BufferUtils.view_(data, offset, length, Uint16Array);\n }\n\n /**\n * Creates a DataView over the given buffer.\n *\n * @see toUint8\n * @param {BufferSource} buffer\n * @param {number=} offset\n * @param {number=} length\n * @return {!DataView}\n * @export\n */\n static toDataView(buffer, offset = 0, length = Infinity) {\n return shaka.util.BufferUtils.view_(buffer, offset, length, DataView);\n }\n\n /**\n * @param {BufferSource} data\n * @param {number} offset\n * @param {number} length\n * @param {function(new:T, ArrayBuffer, number, number)} Type\n * @return {!T}\n * @template T\n * @private\n */\n static view_(data, offset, length, Type) {\n const buffer = shaka.util.BufferUtils.unsafeGetArrayBuffer_(data);\n let bytesPerElement = 1;\n if ('BYTES_PER_ELEMENT' in Type) {\n bytesPerElement = Type.BYTES_PER_ELEMENT;\n }\n // Absolute end of the |data| view within |buffer|.\n /** @suppress {strictMissingProperties} */\n const dataEnd = ((data.byteOffset || 0) + data.byteLength) /\n bytesPerElement;\n // Absolute start of the result within |buffer|.\n /** @suppress {strictMissingProperties} */\n const rawStart = ((data.byteOffset || 0) + offset) / bytesPerElement;\n const start = Math.floor(Math.max(0, Math.min(rawStart, dataEnd)));\n // Absolute end of the result within |buffer|.\n const end = Math.floor(Math.min(start + Math.max(length, 0), dataEnd));\n return new Type(buffer, start, end - start);\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.ClosedCaptionParser');\ngoog.provide('shaka.media.IClosedCaptionParser');\n\ngoog.require('shaka.cea.DummyCaptionDecoder');\ngoog.require('shaka.cea.DummyCeaParser');\ngoog.require('shaka.log');\ngoog.require('shaka.util.BufferUtils');\n\n\n/**\n * The IClosedCaptionParser defines the interface to provide all operations for\n * parsing the closed captions embedded in Dash videos streams.\n * TODO: Remove this interface and move method definitions\n * directly to ClosedCaptonParser.\n * @interface\n * @export\n */\nshaka.media.IClosedCaptionParser = class {\n /**\n * Initialize the caption parser. This should be called whenever new init\n * segment arrives.\n * @param {BufferSource} initSegment\n * @param {boolean=} adaptation True if we just automatically switched active\n * variant(s).\n */\n init(initSegment, adaptation = false) {}\n\n /**\n * Parses embedded CEA closed captions and interacts with the underlying\n * CaptionStream, and calls the callback function when there are closed\n * captions.\n *\n * @param {BufferSource} mediaFragment\n * @return {!Array}\n * An array of parsed closed captions.\n */\n parseFrom(mediaFragment) {}\n\n /**\n * Resets the CaptionStream.\n */\n reset() {}\n\n /**\n * Returns the streams that the CEA decoder found.\n * @return {!Array.}\n */\n getStreams() {}\n};\n\n/**\n * Closed Caption Parser provides all operations for parsing the closed captions\n * embedded in Dash videos streams.\n *\n * @implements {shaka.media.IClosedCaptionParser}\n * @final\n * @export\n */\nshaka.media.ClosedCaptionParser = class {\n /**\n * @param {string} mimeType\n */\n constructor(mimeType) {\n /** @private {!shaka.extern.ICeaParser} */\n this.ceaParser_ = new shaka.cea.DummyCeaParser();\n\n const parserFactory =\n shaka.media.ClosedCaptionParser.findParser(mimeType.toLowerCase());\n if (parserFactory) {\n this.ceaParser_ = parserFactory();\n }\n\n /**\n * Decoder for decoding CEA-X08 data from closed caption packets.\n * @private {!shaka.extern.ICaptionDecoder}\n */\n this.ceaDecoder_ = new shaka.cea.DummyCaptionDecoder();\n\n const decoderFactory = shaka.media.ClosedCaptionParser.findDecoder();\n if (decoderFactory) {\n this.ceaDecoder_ = decoderFactory();\n }\n }\n\n /**\n * @override\n */\n init(initSegment, adaptation = false) {\n shaka.log.debug('Passing new init segment to CEA parser');\n if (!adaptation) {\n // Reset underlying decoder when new init segment arrives\n // to clear stored pts values.\n // This is necessary when a new Period comes in DASH or a discontinuity\n // in HLS.\n this.reset();\n }\n this.ceaParser_.init(initSegment);\n }\n\n /**\n * @override\n */\n parseFrom(mediaFragment) {\n // Parse the fragment.\n const captionPackets = this.ceaParser_.parse(mediaFragment);\n\n // Extract the caption packets for decoding.\n for (const captionPacket of captionPackets) {\n const uint8ArrayData =\n shaka.util.BufferUtils.toUint8(captionPacket.packet);\n if (uint8ArrayData.length > 0) {\n this.ceaDecoder_.extract(uint8ArrayData, captionPacket.pts);\n }\n }\n\n // Decode and return the parsed captions.\n return this.ceaDecoder_.decode();\n }\n\n /**\n * @override\n */\n reset() {\n this.ceaDecoder_.clear();\n }\n\n /**\n * @override\n */\n getStreams() {\n return this.ceaDecoder_.getStreams();\n }\n\n /**\n * @param {string} mimeType\n * @param {!shaka.extern.CeaParserPlugin} plugin\n * @export\n */\n static registerParser(mimeType, plugin) {\n shaka.media.ClosedCaptionParser.parserMap_[mimeType] = plugin;\n }\n\n /**\n * @param {string} mimeType\n * @export\n */\n static unregisterParser(mimeType) {\n delete shaka.media.ClosedCaptionParser.parserMap_[mimeType];\n }\n\n /**\n * @param {string} mimeType\n * @return {?shaka.extern.CeaParserPlugin}\n * @export\n */\n static findParser(mimeType) {\n return shaka.media.ClosedCaptionParser.parserMap_[mimeType];\n }\n\n /**\n * @param {!shaka.extern.CaptionDecoderPlugin} plugin\n * @export\n */\n static registerDecoder(plugin) {\n shaka.media.ClosedCaptionParser.decoderFactory_ = plugin;\n }\n\n /**\n * @export\n */\n static unregisterDecoder() {\n shaka.media.ClosedCaptionParser.decoderFactory_ = null;\n }\n\n /**\n * @return {?shaka.extern.CaptionDecoderPlugin}\n * @export\n */\n static findDecoder() {\n return shaka.media.ClosedCaptionParser.decoderFactory_;\n }\n};\n\n/** @private {!Object} */\nshaka.media.ClosedCaptionParser.parserMap_ = {};\n\n/** @private {?shaka.extern.CaptionDecoderPlugin} */\nshaka.media.ClosedCaptionParser.decoderFactory_ = null;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.text.CueRegion');\n\n\n/**\n * @export\n */\nshaka.text.CueRegion = class {\n /** */\n constructor() {\n const CueRegion = shaka.text.CueRegion;\n\n /**\n * Region identifier.\n * @type {string}\n * @export\n */\n this.id = '';\n\n /**\n * The X offset to start the rendering area in viewportAnchorUnits of the\n * video width.\n * @type {number}\n * @export\n */\n this.viewportAnchorX = 0;\n\n /**\n * The X offset to start the rendering area in viewportAnchorUnits of the\n * video height.\n * @type {number}\n * @export\n */\n this.viewportAnchorY = 0;\n\n /**\n * The X offset to start the rendering area in percentage (0-100) of this\n * region width.\n * @type {number}\n * @export\n */\n this.regionAnchorX = 0;\n\n /**\n * The Y offset to start the rendering area in percentage (0-100) of the\n * region height.\n * @type {number}\n * @export\n */\n this.regionAnchorY = 0;\n\n /**\n * The width of the rendering area in widthUnits.\n * @type {number}\n * @export\n */\n this.width = 100;\n\n /**\n * The width of the rendering area in heightUnits.\n * @type {number}\n * @export\n */\n this.height = 100;\n\n /**\n * The units (percentage, pixels or lines) the region height is in.\n * @type {shaka.text.CueRegion.units}\n * @export\n */\n this.heightUnits = CueRegion.units.PERCENTAGE;\n\n /**\n * The units (percentage or pixels) the region width is in.\n * @type {shaka.text.CueRegion.units}\n * @export\n */\n this.widthUnits = CueRegion.units.PERCENTAGE;\n\n /**\n * The units (percentage or pixels) the region viewportAnchors are in.\n * @type {shaka.text.CueRegion.units}\n * @export\n */\n this.viewportAnchorUnits = CueRegion.units.PERCENTAGE;\n\n /**\n * If scroll=UP, it means that cues in the region will be added to the\n * bottom of the region and will push any already displayed cues in the\n * region up. Otherwise (scroll=NONE) cues will stay fixed at the location\n * they were first painted in.\n * @type {shaka.text.CueRegion.scrollMode}\n * @export\n */\n this.scroll = CueRegion.scrollMode.NONE;\n }\n};\n\n\n/**\n * @enum {number}\n * @export\n */\nshaka.text.CueRegion.units = {\n 'PX': 0,\n 'PERCENTAGE': 1,\n 'LINES': 2,\n};\n\n\n/**\n * @enum {string}\n * @export\n */\nshaka.text.CueRegion.scrollMode = {\n 'NONE': '',\n 'UP': 'up',\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.ArrayUtils');\n\n\n/**\n * @namespace shaka.util.ArrayUtils\n * @summary Array utility functions.\n */\n\n\nshaka.util.ArrayUtils = class {\n /**\n * Returns whether the two values contain the same value. This correctly\n * handles comparisons involving NaN.\n * @param {T} a\n * @param {T} b\n * @return {boolean}\n * @template T\n */\n static defaultEquals(a, b) {\n // NaN !== NaN, so we need to special case it.\n if (typeof a === 'number' &&\n typeof b === 'number' && isNaN(a) && isNaN(b)) {\n return true;\n }\n return a === b;\n }\n\n\n /**\n * Remove given element from array (assumes no duplicates).\n * @param {!Array.} array\n * @param {T} element\n * @template T\n */\n static remove(array, element) {\n const index = array.indexOf(element);\n if (index > -1) {\n array.splice(index, 1);\n }\n }\n\n\n /**\n * Count the number of items in the list that pass the check function.\n * @param {!Array.} array\n * @param {function(T):boolean} check\n * @return {number}\n * @template T\n */\n static count(array, check) {\n let count = 0;\n\n for (const element of array) {\n count += check(element) ? 1 : 0;\n }\n\n return count;\n }\n\n\n /**\n * Determines if the given arrays contain equal elements in any order.\n *\n * @param {!Array.} a\n * @param {!Array.} b\n * @param {function(T, T):boolean=} compareFn\n * @return {boolean}\n * @template T\n */\n static hasSameElements(a, b, compareFn) {\n if (!compareFn) {\n compareFn = shaka.util.ArrayUtils.defaultEquals;\n }\n if (a.length != b.length) {\n return false;\n }\n\n const copy = b.slice();\n for (const item of a) {\n const idx = copy.findIndex((other) => compareFn(item, other));\n if (idx == -1) {\n return false;\n }\n // Since order doesn't matter, just swap the last element with\n // this one and then drop the last element.\n copy[idx] = copy[copy.length - 1];\n copy.pop();\n }\n\n return copy.length == 0;\n }\n\n\n /**\n * Determines if the given arrays contain equal elements in the same order.\n *\n * @param {!Array.} a\n * @param {!Array.} b\n * @param {function(T, T):boolean=} compareFn\n * @return {boolean}\n * @template T\n */\n static equal(a, b, compareFn) {\n if (!compareFn) {\n compareFn = shaka.util.ArrayUtils.defaultEquals;\n }\n if (a.length != b.length) {\n return false;\n }\n\n for (let i = 0; i < a.length; i++) {\n if (!compareFn(a[i], b[i])) {\n return false;\n }\n }\n return true;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.Error');\n\n\n/**\n * @summary\n * Describes an error that happened.\n *\n * @description\n * This uses numerical codes to describe\n * which error happened.\n *\n * Some error are caused by errors from the browser. In these cases, the error\n * object is provided as part of the data field. System codes come\n * from the browser and may or may not be documented. Here are some places\n * where the errors may be documented:\n * \n *\n * @export\n * @implements {shaka.extern.Error}\n * @extends {Error}\n */\nshaka.util.Error = class {\n /**\n * @param {shaka.util.Error.Severity} severity\n * @param {shaka.util.Error.Category} category\n * @param {shaka.util.Error.Code} code\n * @param {...*} varArgs\n */\n constructor(severity, category, code, ...varArgs) {\n /**\n * @override\n * @exportInterface\n */\n this.severity = severity;\n /**\n * @override\n * @exportInterface\n */\n this.category = category;\n /**\n * @override\n * @exportInterface\n */\n this.code = code;\n /**\n * @override\n * @exportInterface\n */\n this.data = varArgs;\n /**\n * @override\n * @exportInterface\n */\n this.handled = false;\n\n // A basic message for compiled mode.\n let formattedMessage = 'Shaka Error ' + this.code;\n if (goog.DEBUG) {\n // This improves the formatting of Errors in failure messages in the\n // tests in debug mode.\n let categoryName = 'UNKNOWN';\n let codeName = 'UNKNOWN';\n\n for (const k in shaka.util.Error.Category) {\n if (shaka.util.Error.Category[k] == this.category) {\n categoryName = k;\n }\n }\n for (const k in shaka.util.Error.Code) {\n if (shaka.util.Error.Code[k] == this.code) {\n codeName = k;\n }\n }\n\n formattedMessage = 'Shaka Error ' + categoryName + '.' + codeName +\n ' (' + this.data.toString() + ')';\n }\n\n /**\n * In compiled mode, contains a basic message string with the error code.\n * In uncompiled and debug modes, contains a human-readable version of the\n * category and code as enums.\n *\n * @const {string}\n * @exportDoc\n */\n this.message = formattedMessage;\n\n if (shaka.util.Error.createStack) {\n try {\n throw new Error(this.message || 'Shaka Error');\n } catch (e) {\n /**\n * A stack-trace showing where the error occurred.\n *\n * @const {string}\n * @exportDoc\n */\n this.stack = e.stack;\n }\n }\n }\n\n\n /**\n * @return {string}\n * @override\n */\n toString() {\n return 'shaka.util.Error ' + JSON.stringify(this, null, ' ');\n }\n};\n\n\n/**\n * If true, create a stack trace in Error objects.\n *\n * Disabled in tests to avoid issues with karma-jasmine.\n * See comments in test/test/boot.js for details.\n *\n * @type {boolean}\n */\nshaka.util.Error.createStack = true;\n\n/**\n * @enum {number}\n * @export\n */\nshaka.util.Error.Severity = {\n /**\n * An error occurred, but the Player is attempting to recover from the error.\n *\n * If the Player cannot ultimately recover, it still may not throw a CRITICAL\n * error. For example, retrying for a media segment will never result in\n * a CRITICAL error (the Player will just retry forever).\n */\n 'RECOVERABLE': 1,\n\n /**\n * A critical error that the library cannot recover from. These usually cause\n * the Player to stop loading or updating. A new manifest must be loaded\n * to reset the library.\n */\n 'CRITICAL': 2,\n};\n\n\n/**\n * @enum {number}\n * @export\n */\nshaka.util.Error.Category = {\n /** Errors from the network stack. */\n 'NETWORK': 1,\n\n /** Errors parsing text streams. */\n 'TEXT': 2,\n\n /** Errors parsing or processing audio or video streams. */\n 'MEDIA': 3,\n\n /** Errors parsing the Manifest. */\n 'MANIFEST': 4,\n\n /** Errors related to streaming. */\n 'STREAMING': 5,\n\n /** Errors related to DRM. */\n 'DRM': 6,\n\n /** Miscellaneous errors from the player. */\n 'PLAYER': 7,\n\n /** Errors related to cast. */\n 'CAST': 8,\n\n /** Errors in the database storage (offline). */\n 'STORAGE': 9,\n\n /** Errors related to ad insertion. */\n 'ADS': 10,\n};\n\n\n/**\n * @enum {number}\n * @export\n */\nshaka.util.Error.Code = {\n /**\n * A network request was made using an unsupported URI scheme.\n *
error.data[0] is the URI.\n */\n 'UNSUPPORTED_SCHEME': 1000,\n\n /**\n * An HTTP network request returned an HTTP status that indicated a failure.\n *
error.data[0] is the URI.\n *
error.data[1] is the status code.\n *
error.data[2] is the response text, or null if the response could not\n * be interpretted as text.\n *
error.data[3] is the map of response headers.\n *
error.data[4] is the NetworkingEngine.RequestType of the request,\n * if one was provided.\n *
error.data[5] is the final URI. This may be different if the initial\n * URI (error.data[0]) issued a redirect.\n */\n 'BAD_HTTP_STATUS': 1001,\n\n /**\n * An HTTP network request failed with an error, but not from the server.\n *
error.data[0] is the URI.\n *
error.data[1] is the original error.\n *
error.data[2] is the NetworkingEngine.RequestType of the request.\n */\n 'HTTP_ERROR': 1002,\n\n /**\n * A network request timed out.\n *
error.data[0] is the URI.\n *
error.data[1] is the NetworkingEngine.RequestType of the request,\n * if one was provided.\n */\n 'TIMEOUT': 1003,\n\n /**\n * A network request was made with a malformed data URI.\n *
error.data[0] is the URI.\n */\n 'MALFORMED_DATA_URI': 1004,\n\n // RETIRED: 'UNKNOWN_DATA_URI_ENCODING': 1005,\n\n /**\n * A request filter threw an error.\n *
error.data[0] is the original error.\n */\n 'REQUEST_FILTER_ERROR': 1006,\n\n /**\n * A response filter threw an error.\n *
error.data[0] is the original error.\n */\n 'RESPONSE_FILTER_ERROR': 1007,\n\n /**\n * A testing network request was made with a malformed URI.\n * This error is only used by unit and integration tests.\n */\n 'MALFORMED_TEST_URI': 1008,\n\n /**\n * An unexpected network request was made to the FakeNetworkingEngine.\n * This error is only used by unit and integration tests.\n */\n 'UNEXPECTED_TEST_REQUEST': 1009,\n\n /**\n * The number of retry attempts have run out.\n * This is an internal error and shouldn't be propagated.\n */\n 'ATTEMPTS_EXHAUSTED': 1010,\n\n /**\n * The segment is missing.\n *
error.data[0] is the URI.\n */\n 'SEGMENT_MISSING': 1011,\n\n\n /** The text parser failed to parse a text stream due to an invalid header. */\n 'INVALID_TEXT_HEADER': 2000,\n\n /**\n * The text parser failed to parse a text stream due to an invalid cue.\n *
error.data[0] is extra context, if available.\n */\n 'INVALID_TEXT_CUE': 2001,\n\n // RETIRED: 'INVALID_TEXT_SETTINGS': 2002,\n\n /**\n * Was unable to detect the encoding of the response text. Suggest adding\n * byte-order-markings to the response data.\n */\n 'UNABLE_TO_DETECT_ENCODING': 2003,\n\n /** The response data contains invalid Unicode character encoding. */\n 'BAD_ENCODING': 2004,\n\n /**\n * The XML parser failed to parse an xml stream, or the XML lacks mandatory\n * elements for TTML.\n *
error.data[0] is extra context, if available.\n */\n 'INVALID_XML': 2005,\n\n // RETIRED: 'INVALID_TTML': 2006,\n\n /**\n * MP4 segment does not contain TTML.\n */\n 'INVALID_MP4_TTML': 2007,\n\n /**\n * MP4 segment does not contain VTT.\n */\n 'INVALID_MP4_VTT': 2008,\n\n /**\n * When examining media in advance, we were unable to extract the cue time.\n * This should only be possible with HLS, where we do not have explicit\n * segment start times.\n *
error.data[0] is the underlying exception or Error object.\n */\n 'UNABLE_TO_EXTRACT_CUE_START_TIME': 2009,\n\n /**\n * MP4 segment for CEA data is invalid.\n */\n 'INVALID_MP4_CEA': 2010,\n\n /**\n * Unable to guess mime type of the text.\n *
error.data[0] is the text file's uri.\n */\n 'TEXT_COULD_NOT_GUESS_MIME_TYPE': 2011,\n\n /**\n * External text tracks cannot be added in src= because native platform\n * doesn't support it.\n */\n 'CANNOT_ADD_EXTERNAL_TEXT_TO_SRC_EQUALS': 2012,\n\n /**\n * Only WebVTT is supported when using src=.\n *
error.data[0] is the text MIME type.\n */\n 'TEXT_ONLY_WEBVTT_SRC_EQUALS': 2013,\n\n /**\n * The compilation does not contain a required text plugin for this\n * operation.\n *
error.data[0] is the text MIME type.\n */\n 'MISSING_TEXT_PLUGIN': 2014,\n\n /**\n * The chapters track failed to load. The browser does not provide any\n * information in this case to identify why it failed, but there may be\n * details in the JavaScript console.\n */\n 'CHAPTERS_TRACK_FAILED': 2015,\n\n // RETIRED: 'CANNOT_ADD_EXTERNAL_THUMBNAILS_TO_SRC_EQUALS': 2016,\n\n /**\n * Only external urls of WebVTT type are supported.\n *
error.data[0] is the uri.\n */\n 'UNSUPPORTED_EXTERNAL_THUMBNAILS_URI': 2017,\n\n /**\n * Some component tried to read past the end of a buffer. The segment index,\n * init segment, or PSSH may be malformed.\n */\n 'BUFFER_READ_OUT_OF_BOUNDS': 3000,\n\n /**\n * Some component tried to parse an integer that was too large to fit in a\n * JavaScript number without rounding error. JavaScript can only natively\n * represent integers up to 53 bits.\n */\n 'JS_INTEGER_OVERFLOW': 3001,\n\n /**\n * The EBML parser used to parse the WebM container encountered an integer,\n * ID, or other field larger than the maximum supported by the parser.\n */\n 'EBML_OVERFLOW': 3002,\n\n /**\n * The EBML parser used to parse the WebM container encountered a floating-\n * point field of a size not supported by the parser.\n */\n 'EBML_BAD_FLOATING_POINT_SIZE': 3003,\n\n /**\n * The MP4 SIDX parser found the wrong box type.\n * Either the segment index range is incorrect or the data is corrupt.\n */\n 'MP4_SIDX_WRONG_BOX_TYPE': 3004,\n\n /**\n * The MP4 SIDX parser encountered an invalid timescale.\n * The segment index data may be corrupt.\n */\n 'MP4_SIDX_INVALID_TIMESCALE': 3005,\n\n /** The MP4 SIDX parser encountered a type of SIDX that is not supported. */\n 'MP4_SIDX_TYPE_NOT_SUPPORTED': 3006,\n\n /**\n * The WebM Cues parser was unable to locate the Cues element.\n * The segment index data may be corrupt.\n */\n 'WEBM_CUES_ELEMENT_MISSING': 3007,\n\n /**\n * The WebM header parser was unable to locate the Ebml element.\n * The init segment data may be corrupt.\n */\n 'WEBM_EBML_HEADER_ELEMENT_MISSING': 3008,\n\n /**\n * The WebM header parser was unable to locate the Segment element.\n * The init segment data may be corrupt.\n */\n 'WEBM_SEGMENT_ELEMENT_MISSING': 3009,\n\n /**\n * The WebM header parser was unable to locate the Info element.\n * The init segment data may be corrupt.\n */\n 'WEBM_INFO_ELEMENT_MISSING': 3010,\n\n /**\n * The WebM header parser was unable to locate the Duration element.\n * The init segment data may be corrupt or may have been incorrectly encoded.\n * Shaka requires a duration in WebM DASH content.\n */\n 'WEBM_DURATION_ELEMENT_MISSING': 3011,\n\n /**\n * The WebM Cues parser was unable to locate the Cue Track Positions element.\n * The segment index data may be corrupt.\n */\n 'WEBM_CUE_TRACK_POSITIONS_ELEMENT_MISSING': 3012,\n\n /**\n * The WebM Cues parser was unable to locate the Cue Time element.\n * The segment index data may be corrupt.\n */\n 'WEBM_CUE_TIME_ELEMENT_MISSING': 3013,\n\n /**\n * A MediaSource operation failed.\n *
error.data[0] is a MediaError code from the video element.\n *
error.data[1] is the segment URI that triggered the error, if any.\n */\n 'MEDIA_SOURCE_OPERATION_FAILED': 3014,\n\n /**\n * A MediaSource operation threw an exception.\n *
error.data[0] is the exception that was thrown.\n *
error.data[1] is the error object from the video element.\n *
error.data[2] is the segment URI that triggered the error, if any.\n */\n 'MEDIA_SOURCE_OPERATION_THREW': 3015,\n\n /**\n * The video element reported an error.\n *
error.data[0] is a MediaError code from the video element.\n *
On Edge, error.data[1] is a Microsoft extended error code in hex.\n *
On Chrome, error.data[2] is a string with details on the error.\n *
See top of file for links to browser error codes.\n */\n 'VIDEO_ERROR': 3016,\n\n /**\n * A MediaSource operation threw QuotaExceededError and recovery failed. The\n * content cannot be played correctly because the segments are too large for\n * the browser/platform. This may occur when attempting to play very high\n * quality, very high bitrate content on low-end devices.\n *
error.data[0] is the type of content which caused the error.\n */\n 'QUOTA_EXCEEDED_ERROR': 3017,\n\n /**\n * Transmuxing with our internal transmuxer failed.\n *
error.data[0] is the segment URI that triggered the error, if any.\n */\n 'TRANSMUXING_FAILED': 3018,\n\n /**\n * Content transformations required by the platform could not be performed for\n * some reason (unsupported container, etc.)\n *
@see https://github.com/shaka-project/shaka-player/issues/2759\n *
error.data[0] is the segment URI that triggered the error, if any.\n */\n 'CONTENT_TRANSFORMATION_FAILED': 3019,\n\n /**\n * Important data is missing to be able to do the transmuxing of MSS.\n *
error.data[0] is the segment URI that triggered the error, if any.\n */\n 'MSS_MISSING_DATA_FOR_TRANSMUXING': 3020,\n\n // RETIRED: 'MSS_TRANSMUXING_CODEC_UNKNOWN': 3021,\n\n /**\n * MSS transmuing failed for unknown reason.\n *
error.data[0] is the segment URI that triggered the error, if any.\n */\n 'MSS_TRANSMUXING_FAILED': 3022,\n\n /**\n * An internal error which indicates that transmuxing operation has no video\n * data. This should not be seen by applications.\n *
error.data[0] is the segment URI that triggered the error, if any.\n */\n 'TRANSMUXING_NO_VIDEO_DATA': 3023,\n\n\n /**\n * The Player was unable to guess the manifest type based on file extension\n * or MIME type. To fix, try one of the following:\n *
    \n *
  • Rename the manifest so that the URI ends in a well-known extension.\n *
  • Configure the server to send a recognizable Content-Type header.\n *
  • Configure the server to accept a HEAD request for the manifest.\n *
\n *
error.data[0] is the manifest URI.\n *
error.data[1] is the detected or specified MIME type.\n */\n 'UNABLE_TO_GUESS_MANIFEST_TYPE': 4000,\n\n /**\n * The DASH Manifest contained invalid XML markup.\n *
error.data[0] is the URI associated with the XML.\n */\n 'DASH_INVALID_XML': 4001,\n\n /**\n * The DASH Manifest contained a Representation with insufficient segment\n * information.\n */\n 'DASH_NO_SEGMENT_INFO': 4002,\n\n /** The DASH Manifest contained an AdaptationSet with no Representations. */\n 'DASH_EMPTY_ADAPTATION_SET': 4003,\n\n /** The DASH Manifest contained an Period with no AdaptationSets. */\n 'DASH_EMPTY_PERIOD': 4004,\n\n /**\n * The DASH Manifest does not specify an init segment with a WebM container.\n */\n 'DASH_WEBM_MISSING_INIT': 4005,\n\n /** The DASH Manifest contained an unsupported container format. */\n 'DASH_UNSUPPORTED_CONTAINER': 4006,\n\n /** The embedded PSSH data has invalid encoding. */\n 'DASH_PSSH_BAD_ENCODING': 4007,\n\n /**\n * There is an AdaptationSet whose Representations do not have any common\n * key-systems.\n */\n 'DASH_NO_COMMON_KEY_SYSTEM': 4008,\n\n /** Having multiple key IDs per Representation is not supported. */\n 'DASH_MULTIPLE_KEY_IDS_NOT_SUPPORTED': 4009,\n\n /** The DASH Manifest specifies conflicting key IDs. */\n 'DASH_CONFLICTING_KEY_IDS': 4010,\n\n // RETIRED: 'UNPLAYABLE_PERIOD': 4011,\n\n /**\n * There exist some streams that could be decoded, but restrictions imposed\n * by the application or the key system prevent us from playing. This may\n * happen under the following conditions:\n *
    \n *
  • The application has given restrictions to the Player that restrict\n * at least one content type completely (e.g. no playable audio).\n *
  • The manifest specifies different keys than were given to us from the\n * license server.\n *
  • The key system has imposed output restrictions that cannot be met\n * (such as HDCP) and there are no unrestricted alternatives.\n *
\n *
error.data[0] is a {@link shaka.extern.RestrictionInfo} object\n * describing the kinds of restrictions that caused this error.\n */\n 'RESTRICTIONS_CANNOT_BE_MET': 4012,\n\n // RETIRED: 'INTERNAL_ERROR_KEY_STATUS': 4013,\n\n // RETIRED: 'NO_PERIODS': 4014,\n\n /**\n * HLS playlist doesn't start with a mandory #EXTM3U tag.\n */\n 'HLS_PLAYLIST_HEADER_MISSING': 4015,\n\n /**\n * HLS tag has an invalid name that doesn't start with '#EXT'\n *
error.data[0] is the invalid tag.\n */\n 'INVALID_HLS_TAG': 4016,\n\n /**\n * HLS playlist has both Master and Media/Segment tags.\n */\n 'HLS_INVALID_PLAYLIST_HIERARCHY': 4017,\n\n /**\n * A Representation has an id that is the same as another Representation in\n * the same Period. This makes manifest updates impossible since we cannot\n * map the updated Representation to the old one.\n */\n 'DASH_DUPLICATE_REPRESENTATION_ID': 4018,\n\n // RETIRED: 'HLS_MEDIA_INIT_SECTION_INFO_MISSING': 4019,\n\n /**\n * HLS manifest has several #EXT-X-MAP tags. We can only\n * support one at the moment.\n */\n 'HLS_MULTIPLE_MEDIA_INIT_SECTIONS_FOUND': 4020,\n\n // RETIRED: 'HLS_COULD_NOT_GUESS_MIME_TYPE': 4021,\n\n // RETIRED: 'HLS_MASTER_PLAYLIST_NOT_PROVIDED': 4022,\n\n /**\n * One of the required attributes was not provided, so the\n * HLS manifest is invalid.\n *
error.data[0] is the missing attribute's name.\n */\n 'HLS_REQUIRED_ATTRIBUTE_MISSING': 4023,\n\n /**\n * One of the required tags was not provided, so the\n * HLS manifest is invalid.\n *
error.data[0] is the missing tag's name.\n */\n 'HLS_REQUIRED_TAG_MISSING': 4024,\n\n /**\n * The HLS parser was unable to guess codecs of a stream.\n *
error.data[0] is the list of all codecs for the variant.\n */\n 'HLS_COULD_NOT_GUESS_CODECS': 4025,\n\n /**\n * The HLS parser has encountered encrypted content with unsupported\n * KEYFORMAT attributes.\n */\n 'HLS_KEYFORMATS_NOT_SUPPORTED': 4026,\n\n /**\n * The manifest parser only supports xlink links with xlink:actuate=\"onLoad\".\n */\n 'DASH_UNSUPPORTED_XLINK_ACTUATE': 4027,\n\n /**\n * The manifest parser has hit its depth limit on xlink link chains.\n */\n 'DASH_XLINK_DEPTH_LIMIT': 4028,\n\n // RETIRED: 'HLS_LIVE_CONTENT_NOT_SUPPORTED': 4029,\n\n // RETIRED: 'HLS_COULD_NOT_PARSE_SEGMENT_START_TIME': 4030,\n\n // RETIRED: 'HLS_MEDIA_SEQUENCE_REQUIRED_IN_LIVE_STREAMS': 4031,\n\n /**\n * The content container or codecs are not supported by this browser. For\n * example, this could happen if the content is WebM, but your browser does\n * not support the WebM container, or if the content uses HEVC, but your\n * browser does not support the HEVC codec. This can also occur for\n * multicodec or multicontainer manifests if none of the codecs or containers\n * are supported by the browser.\n *\n * To see what your browser supports, you can check the JSON data dumped by\n * http://support.shaka-player-demo.appspot.com/\n */\n 'CONTENT_UNSUPPORTED_BY_BROWSER': 4032,\n\n /**\n * External text tracks cannot be added to live streams.\n */\n 'CANNOT_ADD_EXTERNAL_TEXT_TO_LIVE_STREAM': 4033,\n\n // RETIRED: 'HLS_AES_128_ENCRYPTION_NOT_SUPPORTED': 4034,\n // RETIRED: 'HLS_INTERNAL_SKIP_STREAM': 4035,\n\n /** The Manifest contained no Variants. */\n 'NO_VARIANTS': 4036,\n\n /**\n * We failed to find matching streams across DASH Periods, and the\n * period-flattening aglorithm introduced in v3.0 has failed.\n */\n 'PERIOD_FLATTENING_FAILED': 4037,\n\n /**\n * We failed to find matching streams across DASH Periods due to inconsistent\n * DRM systems across periods.\n */\n 'INCONSISTENT_DRM_ACROSS_PERIODS': 4038,\n\n /**\n * The HLS manifest refers to an undeclared variables.\n *
error.data[0] is the variable undeclared.\n */\n 'HLS_VARIABLE_NOT_FOUND': 4039,\n\n /**\n * We do not support playing encrypted mp2t with MSE\n */\n 'HLS_MSE_ENCRYPTED_MP2T_NOT_SUPPORTED': 4040,\n\n /**\n * We do not support playing encrypted content (different than mp2t) with MSE\n * and legacy Apple MediaKeys API.\n */\n 'HLS_MSE_ENCRYPTED_LEGACY_APPLE_MEDIA_KEYS_NOT_SUPPORTED': 4041,\n\n /**\n * Web Crypto API is not available (to decrypt AES-128 streams). Web Crypto\n * only exists in secure origins like https.\n */\n 'NO_WEB_CRYPTO_API': 4042,\n\n // RETIRED: 'HLS_AES_128_INVALID_IV_LENGTH': 4043,\n // RETIRED: 'HLS_AES_128_INVALID_KEY_LENGTH': 4044,\n\n /**\n * External thumbnails tracks cannot be added to live streams.\n */\n 'CANNOT_ADD_EXTERNAL_THUMBNAILS_TO_LIVE_STREAM': 4045,\n\n /**\n * The MSS Manifest contained invalid XML markup.\n *
error.data[0] is the URI associated with the XML.\n */\n 'MSS_INVALID_XML': 4046,\n\n /**\n * MSS parser encountered a live playlist.\n */\n 'MSS_LIVE_CONTENT_NOT_SUPPORTED': 4047,\n\n /**\n * AES-128 iv length should be 16 bytes.\n */\n 'AES_128_INVALID_IV_LENGTH': 4048,\n\n /**\n * AES-128 encryption key length should be 16 bytes.\n */\n 'AES_128_INVALID_KEY_LENGTH': 4049,\n\n /**\n * The DASH Manifest specifies conflicting AES-128 keys.\n */\n 'DASH_CONFLICTING_AES_128': 4050,\n\n /**\n * The DASH Manifest specifies a unsupported AES-128 encryption.\n */\n 'DASH_UNSUPPORTED_AES_128': 4051,\n\n /**\n * Patch requested during an update did not match original manifest.\n */\n 'DASH_INVALID_PATCH': 4052,\n\n /**\n * The media playlist has not segments or all segments are gap.\n */\n 'HLS_EMPTY_MEDIA_PLAYLIST': 4053,\n\n /**\n * We do not support playing encrypted content with MSE\n * and legacy Apple MediaKeys API.\n */\n 'DASH_MSE_ENCRYPTED_LEGACY_APPLE_MEDIA_KEYS_NOT_SUPPORTED': 4054,\n\n // RETIRED: 'INCONSISTENT_BUFFER_STATE': 5000,\n // RETIRED: 'INVALID_SEGMENT_INDEX': 5001,\n // RETIRED: 'SEGMENT_DOES_NOT_EXIST': 5002,\n // RETIRED: 'CANNOT_SATISFY_BYTE_LIMIT': 5003,\n // RETIRED: 'BAD_SEGMENT': 5004,\n // RETIRED: 'INVALID_STREAMS_CHOSEN': 5005,\n\n /**\n * This would only happen if StreamingEngine were not started correctly, and\n * should not be seen in production.\n */\n 'STREAMING_ENGINE_STARTUP_INVALID_STATE': 5006,\n\n\n /**\n * The manifest indicated protected content, but the manifest parser was\n * unable to determine what key systems should be used.\n */\n 'NO_RECOGNIZED_KEY_SYSTEMS': 6000,\n\n /**\n * None of the requested key system configurations are available. This may\n * happen under the following conditions:\n *
    \n *
  • The key system is not supported.\n *
  • The key system does not support the features requested (e.g.\n * persistent state).\n *
  • A user prompt was shown and the user denied access.\n *
  • The key system is not available from unsecure contexts. (i.e.\n requires HTTPS) See https://bit.ly/2K9X1nY\n *
\n */\n 'REQUESTED_KEY_SYSTEM_CONFIG_UNAVAILABLE': 6001,\n\n /**\n * The browser found one of the requested key systems, but it failed to\n * create an instance of the CDM for some unknown reason.\n *
error.data[0] is an error message string from the browser.\n */\n 'FAILED_TO_CREATE_CDM': 6002,\n\n /**\n * The browser found one of the requested key systems and created an instance\n * of the CDM, but it failed to attach the CDM to the video for some unknown\n * reason.\n *
error.data[0] is an error message string from the browser.\n */\n 'FAILED_TO_ATTACH_TO_VIDEO': 6003,\n\n /**\n * The CDM rejected the server certificate supplied by the application.\n * The certificate may be malformed or in an unsupported format.\n *
error.data[0] is an error message string from the browser.\n */\n 'INVALID_SERVER_CERTIFICATE': 6004,\n\n /**\n * The CDM refused to create a session for some unknown reason.\n *
error.data[0] is an error message string from the browser.\n */\n 'FAILED_TO_CREATE_SESSION': 6005,\n\n /**\n * The CDM was unable to generate a license request for the init data it was\n * given. The init data may be malformed or in an unsupported format.\n *
error.data[0] is an error message string from the browser.\n *
error.data[1] is the error object from the browser.\n *
error.data[2] is a string with the extended error code, if available.\n *
See top of file for links to browser error codes.\n */\n 'FAILED_TO_GENERATE_LICENSE_REQUEST': 6006,\n\n /**\n * The license request failed. This could be a timeout, a network failure, or\n * a rejection by the server.\n *
error.data[0] is a shaka.util.Error from the networking engine.\n */\n 'LICENSE_REQUEST_FAILED': 6007,\n\n /**\n * The license response was rejected by the CDM. The server's response may be\n * invalid or malformed for this CDM.\n *
error.data[0] is an error message string from the browser.\n *
See top of file for links to browser error codes.\n */\n 'LICENSE_RESPONSE_REJECTED': 6008,\n\n // RETIRED: 'NO_LICENSE_SERVER_SPECIFIED': 6009,\n\n /**\n * The manifest does not specify any DRM info, but the content is encrypted.\n * Either the manifest or the manifest parser are broken.\n */\n 'ENCRYPTED_CONTENT_WITHOUT_DRM_INFO': 6010,\n\n // RETIRED: 'WRONG_KEYS': 6011,\n\n /**\n * No license server was given for the key system signaled by the manifest.\n * A license server URI is required for every key system.\n *
error.data[0] is the key system identifier.\n */\n 'NO_LICENSE_SERVER_GIVEN': 6012,\n\n /**\n * A required offline session was removed. The content might not be playable\n * depending of the playback context.\n */\n 'OFFLINE_SESSION_REMOVED': 6013,\n\n /**\n * The license has expired. This is triggered when all keys in the key\n * status map have a status of 'expired'.\n */\n 'EXPIRED': 6014,\n\n /**\n * A server certificate wasn't given when it is required. FairPlay requires\n * setting an explicit server certificate in the configuration.\n */\n 'SERVER_CERTIFICATE_REQUIRED': 6015,\n\n /**\n * An error was thrown while executing the init data transformation.\n *
error.data[0] is the original error.\n */\n 'INIT_DATA_TRANSFORM_ERROR': 6016,\n\n /**\n * The server certificate request failed.\n *
error.data[0] is a shaka.util.Error from the networking engine.\n */\n 'SERVER_CERTIFICATE_REQUEST_FAILED': 6017,\n\n /**\n * The HDCP version does not meet the requirements.\n */\n 'MIN_HDCP_VERSION_NOT_MATCH': 6018,\n\n /**\n * Error when checking HDCP version.\n *
error.data[0] is an error message string from the browser.\n */\n 'ERROR_CHECKING_HDCP_VERSION': 6019,\n\n\n /**\n * The call to Player.load() was interrupted by a call to Player.unload()\n * or another call to Player.load().\n */\n 'LOAD_INTERRUPTED': 7000,\n\n /**\n * An internal error which indicates that an operation was aborted. This\n * should not be seen by applications.\n */\n 'OPERATION_ABORTED': 7001,\n\n /**\n * The call to Player.load() failed because the Player does not have a video\n * element. The video element must either be provided to the constructor or\n * to Player.attach() before Player.load() is called.\n */\n 'NO_VIDEO_ELEMENT': 7002,\n\n /**\n * The operation failed because the object has been destroyed.\n */\n 'OBJECT_DESTROYED': 7003,\n\n /**\n * The content has not been loaded in the Player.\n */\n 'CONTENT_NOT_LOADED': 7004,\n\n /**\n * The call to preload failed, due to being called on src= content.\n */\n 'SRC_EQUALS_PRELOAD_NOT_SUPPORTED': 7005,\n\n /**\n * The Cast API is unavailable. This may be because of one of the following:\n * 1. The browser may not have Cast support\n * 2. The browser may be missing a necessary Cast extension\n * 3. The Cast sender library may not be loaded in your app\n */\n 'CAST_API_UNAVAILABLE': 8000,\n\n /**\n * No cast receivers are available at this time.\n */\n 'NO_CAST_RECEIVERS': 8001,\n\n /**\n * The library is already casting.\n */\n 'ALREADY_CASTING': 8002,\n\n /**\n * A Cast SDK error that we did not explicitly plan for has occurred.\n * Check data[0] and refer to the Cast SDK documentation for details.\n *
error.data[0] is an error object from the Cast SDK.\n */\n 'UNEXPECTED_CAST_ERROR': 8003,\n\n /**\n * The cast operation was canceled by the user.\n *
error.data[0] is an error object from the Cast SDK.\n */\n 'CAST_CANCELED_BY_USER': 8004,\n\n /**\n * The cast connection timed out.\n *
error.data[0] is an error object from the Cast SDK.\n */\n 'CAST_CONNECTION_TIMED_OUT': 8005,\n\n /**\n * The requested receiver app ID does not exist or is unavailable.\n * Check the requested app ID for typos.\n *
error.data[0] is an error object from the Cast SDK.\n */\n 'CAST_RECEIVER_APP_UNAVAILABLE': 8006,\n\n\n // RETIRED: CAST_RECEIVER_APP_ID_MISSING': 8007,\n\n\n /**\n * Offline storage is not supported on this browser; it is required for\n * offline support.\n */\n 'STORAGE_NOT_SUPPORTED': 9000,\n\n /**\n * An unknown error occurred in the IndexedDB.\n *
On Firefox, one common source for UnknownError calls is reverting\n * Firefox to an old version. This makes the IndexedDB storage inaccessible\n * for older versions. The only way to fix this is to delete the storage\n * data in your profile. See https://mzl.la/2yCGWCm\n *
error.data[0] is the error object.\n */\n 'INDEXED_DB_ERROR': 9001,\n\n /**\n * The storage operation was aborted. Deprecated in favor of more general\n * OPERATION_ABORTED.\n */\n 'DEPRECATED_OPERATION_ABORTED': 9002,\n\n /**\n * The specified item was not found in the IndexedDB.\n *
error.data[0] is the offline URI.\n */\n 'REQUESTED_ITEM_NOT_FOUND': 9003,\n\n /**\n * A network request was made with a malformed offline URI.\n *
error.data[0] is the URI.\n */\n 'MALFORMED_OFFLINE_URI': 9004,\n\n /**\n * The specified content is live or in-progress.\n * Live and in-progress streams cannot be stored offline.\n *
error.data[0] is the URI.\n */\n 'CANNOT_STORE_LIVE_OFFLINE': 9005,\n\n // RETIRED: 'STORE_ALREADY_IN_PROGRESS': 9006,\n\n /**\n * There was no init data available for offline storage. This happens when\n * there is no init data in the manifest nor could we find any in the\n * segments. We currently only support searching MP4 init segments for init\n * data.\n */\n 'NO_INIT_DATA_FOR_OFFLINE': 9007,\n\n /**\n * shaka.offline.Storage was constructed with a Player proxy instead of a\n * local player instance. To fix this, use Player directly with Storage\n * instead of the results of CastProxy.prototype.getPlayer().\n */\n 'LOCAL_PLAYER_INSTANCE_REQUIRED': 9008,\n\n // RETIRED/MOVED TO 4000's: 'CONTENT_UNSUPPORTED_BY_BROWSER': 9009,\n\n // RETIRED: 'UNSUPPORTED_UPGRADE_REQUEST': 9010,\n\n /**\n * The storage cell does not allow new operations that require new keys.\n */\n 'NEW_KEY_OPERATION_NOT_SUPPORTED': 9011,\n\n /**\n * A key was not found in a storage cell.\n */\n 'KEY_NOT_FOUND': 9012,\n\n /**\n * A storage cell was not found.\n */\n 'MISSING_STORAGE_CELL': 9013,\n\n /**\n * The storage limit defined in downloadSizeCallback has been\n * reached.\n */\n 'STORAGE_LIMIT_REACHED': 9014,\n\n /**\n * downloadSizeCallback has produced an unexpected error.\n */\n 'DOWNLOAD_SIZE_CALLBACK_ERROR': 9015,\n\n /**\n * The storage cell does not allow new operations that significantly change\n * existing data.\n */\n 'MODIFY_OPERATION_NOT_SUPPORTED': 9016,\n\n /**\n * When attempting to open an indexedDB instance, nothing happened for long\n * enough for us to time out. This keeps the storage mechanism from hanging\n * indefinitely, if neither the success nor error callbacks are called.\n */\n 'INDEXED_DB_INIT_TIMED_OUT': 9017,\n\n /**\n * CS IMA SDK, required for ad insertion, has not been included on the page.\n */\n 'CS_IMA_SDK_MISSING': 10000,\n\n /**\n * Client Side Ad Manager needs to be initialized to enable Client Side\n * Ad Insertion. Call adManager.initClientSide() to do it.\n */\n 'CS_AD_MANAGER_NOT_INITIALIZED': 10001,\n\n /**\n * SS IMA SDK, required for ad insertion, has not been included on the page.\n */\n 'SS_IMA_SDK_MISSING': 10002,\n\n /**\n * Server Side Ad Manager needs to be initialized to enable Server Side\n * Ad Insertion. Call adManager.initServerSide() to do it.\n */\n 'SS_AD_MANAGER_NOT_INITIALIZED': 10003,\n\n /**\n * A new DAI steam was requested before the previous request had been\n * resolved. Only one stream request at a time is supported. Please wait\n * for the previous request to complete before initiating a new one.\n */\n 'CURRENT_DAI_REQUEST_NOT_FINISHED': 10004,\n\n /**\n * MediaTailor Ad Manager needs to be initialized to enable MediaTailor\n * Ad Insertion. Call adManager.initMediaTailor() to do it.\n */\n 'MT_AD_MANAGER_NOT_INITIALIZED': 10005,\n\n /**\n * Interstitial Ad Manager needs to be initialized to enable interstitial\n * Ad Insertion. Call adManager.initInterstitial() to do it.\n */\n 'INTERSTITIAL_AD_MANAGER_NOT_INITIALIZED': 10006,\n\n /**\n * The VAST contained invalid XML markup.\n */\n 'VAST_INVALID_XML': 10007,\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.Lazy');\n\ngoog.require('goog.asserts');\n\n\n/**\n * @summary\n * This contains a single value that is lazily generated when it is first\n * requested. This can store any value except \"undefined\".\n *\n * @template T\n */\nshaka.util.Lazy = class {\n /** @param {function():T} gen */\n constructor(gen) {\n /** @private {function():T} */\n this.gen_ = gen;\n\n /** @private {T|undefined} */\n this.value_ = undefined;\n }\n\n /** @return {T} */\n value() {\n if (this.value_ == undefined) {\n // Compiler complains about unknown fields without this cast.\n this.value_ = /** @type {*} */ (this.gen_());\n goog.asserts.assert(\n this.value_ != undefined, 'Unable to create lazy value');\n }\n return this.value_;\n }\n\n /** Resets the value of the lazy function, so it has to be remade. */\n reset() {\n this.value_ = undefined;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.DrmUtils');\n\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.Lazy');\n\n\nshaka.util.DrmUtils = class {\n /**\n * Returns true if the browser has recent EME APIs.\n *\n * @return {boolean}\n */\n static isBrowserSupported() {\n const basic =\n !!window.MediaKeys &&\n !!window.navigator &&\n !!window.navigator.requestMediaKeySystemAccess &&\n !!window.MediaKeySystemAccess &&\n // eslint-disable-next-line no-restricted-syntax\n !!window.MediaKeySystemAccess.prototype.getConfiguration;\n\n return basic;\n }\n\n /**\n * Checks if two DrmInfos can be decrypted using the same key system.\n * Clear content is considered compatible with every key system.\n *\n * @param {!Array} drms1\n * @param {!Array} drms2\n * @return {boolean}\n */\n static areDrmCompatible(drms1, drms2) {\n if (!drms1.length || !drms2.length) {\n return true;\n }\n\n if (drms1 === drms2) {\n return true;\n }\n\n return shaka.util.DrmUtils.getCommonDrmInfos(\n drms1, drms2).length > 0;\n }\n\n /**\n * Returns an array of drm infos that are present in both input arrays.\n * If one of the arrays is empty, returns the other one since clear\n * content is considered compatible with every drm info.\n *\n * @param {!Array} drms1\n * @param {!Array} drms2\n * @return {!Array}\n */\n static getCommonDrmInfos(drms1, drms2) {\n if (!drms1.length) {\n return drms2;\n }\n if (!drms2.length) {\n return drms1;\n }\n\n const commonDrms = [];\n\n for (const drm1 of drms1) {\n for (const drm2 of drms2) {\n if (drm1.keySystem == drm2.keySystem) {\n const initDataMap = new Map();\n const bothInitDatas = (drm1.initData || [])\n .concat(drm2.initData || []);\n for (const d of bothInitDatas) {\n initDataMap.set(d.keyId, d);\n }\n const initData = Array.from(initDataMap.values());\n\n const keyIds = drm1.keyIds && drm2.keyIds ?\n new Set([...drm1.keyIds, ...drm2.keyIds]) :\n drm1.keyIds || drm2.keyIds;\n const mergedDrm = {\n keySystem: drm1.keySystem,\n licenseServerUri: drm1.licenseServerUri || drm2.licenseServerUri,\n distinctiveIdentifierRequired: drm1.distinctiveIdentifierRequired ||\n drm2.distinctiveIdentifierRequired,\n persistentStateRequired: drm1.persistentStateRequired ||\n drm2.persistentStateRequired,\n videoRobustness: drm1.videoRobustness || drm2.videoRobustness,\n audioRobustness: drm1.audioRobustness || drm2.audioRobustness,\n serverCertificate: drm1.serverCertificate || drm2.serverCertificate,\n serverCertificateUri: drm1.serverCertificateUri ||\n drm2.serverCertificateUri,\n initData,\n keyIds,\n };\n commonDrms.push(mergedDrm);\n break;\n }\n }\n }\n\n return commonDrms;\n }\n\n /**\n * @param {?shaka.extern.DrmInfo} drmInfo\n * @return {string} */\n static keySystem(drmInfo) {\n return drmInfo ? drmInfo.keySystem : '';\n }\n\n /**\n * @param {?string} keySystem\n * @return {boolean}\n */\n static isClearKeySystem(keySystem) {\n return keySystem === 'org.w3.clearkey';\n }\n\n /**\n * @param {?string} keySystem\n * @return {boolean}\n */\n static isWidevineKeySystem(keySystem) {\n if (keySystem) {\n return !!keySystem.match(/^com\\.widevine\\.alpha/);\n }\n\n return false;\n }\n\n /**\n * @param {?string} keySystem\n * @return {boolean}\n */\n static isPlayReadyKeySystem(keySystem) {\n if (keySystem) {\n return !!keySystem.match(/^com\\.(microsoft|chromecast)\\.playready/);\n }\n\n return false;\n }\n\n /**\n * @param {?string} keySystem\n * @return {boolean}\n */\n static isFairPlayKeySystem(keySystem) {\n if (keySystem) {\n return !!keySystem.match(/^com\\.apple\\.fps/);\n }\n\n return false;\n }\n\n /**\n * A method for generating a key for the MediaKeySystemAccessRequests cache.\n *\n * @param {string} videoCodec\n * @param {string} audioCodec\n * @param {string} keySystem\n * @return {string}\n * @private\n */\n static generateKeySystemCacheKey_(videoCodec, audioCodec, keySystem) {\n return `${videoCodec}#${audioCodec}#${keySystem}`;\n }\n\n /**\n * Check does MediaKeySystemAccess cache contains something for following\n * attributes.\n *\n * @param {string} videoCodec\n * @param {string} audioCodec\n * @param {string} keySystem\n * @return {boolean}\n */\n static hasMediaKeySystemAccess(videoCodec, audioCodec, keySystem) {\n const DrmUtils = shaka.util.DrmUtils;\n const key = DrmUtils.generateKeySystemCacheKey_(\n videoCodec, audioCodec, keySystem);\n return DrmUtils.memoizedMediaKeySystemAccessRequests_.has(key);\n }\n\n /**\n * Get MediaKeySystemAccess object for following attributes.\n *\n * @param {string} videoCodec\n * @param {string} audioCodec\n * @param {string} keySystem\n * @return {?MediaKeySystemAccess}\n */\n static getMediaKeySystemAccess(videoCodec, audioCodec, keySystem) {\n const DrmUtils = shaka.util.DrmUtils;\n const key = DrmUtils.generateKeySystemCacheKey_(\n videoCodec, audioCodec, keySystem);\n return DrmUtils.memoizedMediaKeySystemAccessRequests_.get(key) || null;\n }\n\n /**\n * Store MediaKeySystemAccess object associated with specified attributes.\n *\n * @param {string} videoCodec\n * @param {string} audioCodec\n * @param {string} keySystem\n * @param {!MediaKeySystemAccess} mksa\n */\n static setMediaKeySystemAccess(videoCodec, audioCodec, keySystem, mksa) {\n const DrmUtils = shaka.util.DrmUtils;\n const key = DrmUtils.generateKeySystemCacheKey_(\n videoCodec, audioCodec, keySystem);\n return DrmUtils.memoizedMediaKeySystemAccessRequests_.set(key, mksa);\n }\n\n /**\n * Clears underlying cache.\n */\n static clearMediaKeySystemAccessMap() {\n const DrmUtils = shaka.util.DrmUtils;\n DrmUtils.memoizedMediaKeySystemAccessRequests_.clear();\n }\n};\n\n\n/**\n * Contains the suggested \"default\" key ID used by EME polyfills that do not\n * have a per-key key status. See w3c/encrypted-media#32.\n * @type {!shaka.util.Lazy}\n */\nshaka.util.DrmUtils.DUMMY_KEY_ID = new shaka.util.Lazy(\n () => shaka.util.BufferUtils.toArrayBuffer(new Uint8Array([0])));\n\n\n/**\n * A cache that stores the MediaKeySystemAccess result of calling\n * `navigator.requestMediaKeySystemAccess` by a key combination of\n * video/audio codec and key system string.\n *\n * @private {!Map}\n */\nshaka.util.DrmUtils.memoizedMediaKeySystemAccessRequests_ = new Map();\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.DelayedTick');\n\n\n/**\n * @summary\n * This class wraps a function so that we can defer executing the function by X\n * seconds.\n *\n * @final\n */\nshaka.util.DelayedTick = class {\n /**\n * @param {function()} onTick\n */\n constructor(onTick) {\n /** @private {function()} */\n this.onTick_ = onTick;\n\n /** @private {?function()} */\n this.cancelPending_ = null;\n }\n\n /**\n * Call |onTick| after |delayInSeconds| has elapsed. If there is already a\n * pending call to |onTick|, the pending call will be canceled.\n *\n * @param {number} delayInSeconds\n * @return {!shaka.util.DelayedTick}\n */\n tickAfter(delayInSeconds) {\n // We only want one timeout set at a time, so make sure no other timeouts\n // are running.\n this.stop();\n\n // We will wrap these values in a function to allow us to cancel the timeout\n // we are about to create.\n let alive = true;\n let timeoutId = null;\n\n this.cancelPending_ = () => {\n window.clearTimeout(timeoutId);\n alive = false;\n };\n\n // For some reason, a timeout may still execute after we have cleared it in\n // our tests. We will wrap the callback so that we can double-check our\n // |alive| flag.\n const onTick = () => {\n if (alive) {\n this.onTick_();\n }\n };\n\n timeoutId = window.setTimeout(onTick, delayInSeconds * 1000);\n\n return this;\n }\n\n /**\n * Cancel any pending calls to |onTick|. If there are no pending calls to\n * |onTick|, this will be a no-op.\n */\n stop() {\n if (this.cancelPending_) {\n this.cancelPending_();\n this.cancelPending_ = null;\n }\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.Timer');\n\ngoog.require('shaka.util.DelayedTick');\n\n\n/**\n * A timer allows a single function to be executed at a later time or at\n * regular intervals.\n *\n * @final\n * @export\n */\nshaka.util.Timer = class {\n /**\n * Create a new timer. A timer is committed to a single callback function.\n * While there is no technical reason to do this, it is far easier to\n * understand and use timers when they are connected to one functional idea.\n *\n * @param {function()} onTick\n */\n constructor(onTick) {\n /**\n * Each time our timer \"does work\", we call that a \"tick\". The name comes\n * from old analog clocks.\n *\n * @private {function()}\n */\n this.onTick_ = onTick;\n\n /** @private {shaka.util.DelayedTick} */\n this.ticker_ = null;\n }\n\n /**\n * Have the timer call |onTick| now.\n *\n * @return {!shaka.util.Timer}\n * @export\n */\n tickNow() {\n this.stop();\n this.onTick_();\n\n return this;\n }\n\n /**\n * Have the timer call |onTick| after |seconds| has elapsed unless |stop| is\n * called first.\n *\n * @param {number} seconds\n * @return {!shaka.util.Timer}\n * @export\n */\n tickAfter(seconds) {\n this.stop();\n\n this.ticker_ = new shaka.util.DelayedTick(() => {\n this.onTick_();\n }).tickAfter(seconds);\n\n return this;\n }\n\n /**\n * Have the timer call |onTick| every |seconds| until |stop| is called.\n *\n * @param {number} seconds\n * @return {!shaka.util.Timer}\n * @export\n */\n tickEvery(seconds) {\n this.stop();\n\n if (goog.DEBUG) {\n // Capture the stack trace by making a fake error.\n const stackTrace = Error('Timer created').stack;\n shaka.util.Timer.activeTimers.set(this, stackTrace);\n }\n this.ticker_ = new shaka.util.DelayedTick(() => {\n // Schedule the timer again first. |onTick_| could cancel the timer and\n // rescheduling first simplifies the implementation.\n this.ticker_.tickAfter(seconds);\n this.onTick_();\n }).tickAfter(seconds);\n\n return this;\n }\n\n /**\n * Stop the timer and clear the previous behaviour. The timer is still usable\n * after calling |stop|.\n *\n * @export\n */\n stop() {\n if (this.ticker_) {\n this.ticker_.stop();\n this.ticker_ = null;\n }\n if (goog.DEBUG) {\n shaka.util.Timer.activeTimers.delete(this);\n }\n }\n};\n\nif (goog.DEBUG) {\n /**\n * Tracks all active timer instances, along with the stack trace that created\n * that timer.\n * @type {!Map.}\n */\n shaka.util.Timer.activeTimers = new Map();\n}\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.Platform');\n\ngoog.require('shaka.log');\ngoog.require('shaka.util.DrmUtils');\ngoog.require('shaka.util.Timer');\n\n\n/**\n * A wrapper for platform-specific functions.\n *\n * @final\n */\nshaka.util.Platform = class {\n /**\n * Check if the current platform supports media source. We assume that if\n * the current platform supports media source, then we can use media source\n * as per its design.\n *\n * @return {boolean}\n */\n static supportsMediaSource() {\n const mediaSource = window.ManagedMediaSource || window.MediaSource;\n // Browsers that lack a media source implementation will have no reference\n // to |window.MediaSource|. Platforms that we see having problematic media\n // source implementations will have this reference removed via a polyfill.\n if (!mediaSource) {\n return false;\n }\n\n // Some very old MediaSource implementations didn't have isTypeSupported.\n if (!mediaSource.isTypeSupported) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Returns true if the media type is supported natively by the platform.\n *\n * @param {string} mimeType\n * @return {boolean}\n */\n static supportsMediaType(mimeType) {\n const video = shaka.util.Platform.anyMediaElement();\n return video.canPlayType(mimeType) != '';\n }\n\n /**\n * Check if the current platform is MS Edge.\n *\n * @return {boolean}\n */\n static isEdge() {\n // Legacy Edge contains \"Edge/version\".\n // Chromium-based Edge contains \"Edg/version\" (no \"e\").\n if (navigator.userAgent.match(/Edge?\\//)) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Check if the current platform is Legacy Edge.\n *\n * @return {boolean}\n */\n static isLegacyEdge() {\n // Legacy Edge contains \"Edge/version\".\n // Chromium-based Edge contains \"Edg/version\" (no \"e\").\n if (navigator.userAgent.match(/Edge\\//)) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Check if the current platform is MS IE.\n *\n * @return {boolean}\n */\n static isIE() {\n return shaka.util.Platform.userAgentContains_('Trident/');\n }\n\n /**\n * Check if the current platform is an Xbox One.\n *\n * @return {boolean}\n */\n static isXboxOne() {\n return shaka.util.Platform.userAgentContains_('Xbox One');\n }\n\n /**\n * Check if the current platform is a Tizen TV.\n *\n * @return {boolean}\n */\n static isTizen() {\n return shaka.util.Platform.userAgentContains_('Tizen');\n }\n\n /**\n * Check if the current platform is a Tizen 6 TV.\n *\n * @return {boolean}\n */\n static isTizen6() {\n return shaka.util.Platform.userAgentContains_('Tizen 6');\n }\n\n /**\n * Check if the current platform is a Tizen 5.0 TV.\n *\n * @return {boolean}\n */\n static isTizen5_0() {\n return shaka.util.Platform.userAgentContains_('Tizen 5.0');\n }\n\n /**\n * Check if the current platform is a Tizen 5 TV.\n *\n * @return {boolean}\n */\n static isTizen5() {\n return shaka.util.Platform.userAgentContains_('Tizen 5');\n }\n\n /**\n * Check if the current platform is a Tizen 4 TV.\n *\n * @return {boolean}\n */\n static isTizen4() {\n return shaka.util.Platform.userAgentContains_('Tizen 4');\n }\n\n /**\n * Check if the current platform is a Tizen 3 TV.\n *\n * @return {boolean}\n */\n static isTizen3() {\n return shaka.util.Platform.userAgentContains_('Tizen 3');\n }\n\n /**\n * Check if the current platform is a Tizen 2 TV.\n *\n * @return {boolean}\n */\n static isTizen2() {\n return shaka.util.Platform.userAgentContains_('Tizen 2');\n }\n\n /**\n * Check if the current platform is a WebOS.\n *\n * @return {boolean}\n */\n static isWebOS() {\n return shaka.util.Platform.userAgentContains_('Web0S');\n }\n\n /**\n * Check if the current platform is a WebOS 3.\n *\n * @return {boolean}\n */\n static isWebOS3() {\n // See: https://webostv.developer.lge.com/develop/specifications/web-api-and-web-engine#useragent-string\n return shaka.util.Platform.isWebOS() &&\n shaka.util.Platform.chromeVersion() === 38;\n }\n\n /**\n * Check if the current platform is a WebOS 4.\n *\n * @return {boolean}\n */\n static isWebOS4() {\n // See: https://webostv.developer.lge.com/develop/specifications/web-api-and-web-engine#useragent-string\n return shaka.util.Platform.isWebOS() &&\n shaka.util.Platform.chromeVersion() === 53;\n }\n\n /**\n * Check if the current platform is a WebOS 5.\n *\n * @return {boolean}\n */\n static isWebOS5() {\n // See: https://webostv.developer.lge.com/develop/specifications/web-api-and-web-engine#useragent-string\n return shaka.util.Platform.isWebOS() &&\n shaka.util.Platform.chromeVersion() === 68;\n }\n\n /**\n * Check if the current platform is a WebOS 6.\n *\n * @return {boolean}\n */\n static isWebOS6() {\n // See: https://webostv.developer.lge.com/develop/specifications/web-api-and-web-engine#useragent-string\n return shaka.util.Platform.isWebOS() &&\n shaka.util.Platform.chromeVersion() === 79;\n }\n\n /**\n * Check if the current platform is a Google Chromecast.\n *\n * @return {boolean}\n */\n static isChromecast() {\n return shaka.util.Platform.userAgentContains_('CrKey');\n }\n\n /**\n * Check if the current platform is a Google Chromecast with Android\n * (i.e. Chromecast with GoogleTV).\n *\n * @return {boolean}\n */\n static isAndroidCastDevice() {\n const Platform = shaka.util.Platform;\n return Platform.isChromecast() && Platform.isAndroid();\n }\n\n /**\n * Check if the current platform is a Google Chromecast with Fuchsia\n * (i.e. Google Nest Hub).\n *\n * @return {boolean}\n */\n static isFuchsiaCastDevice() {\n const Platform = shaka.util.Platform;\n return Platform.isChromecast() && Platform.isFuchsia();\n }\n\n /**\n * Returns a major version number for Chrome, or Chromium-based browsers.\n *\n * For example:\n * - Chrome 106.0.5249.61 returns 106.\n * - Edge 106.0.1370.34 returns 106 (since this is based on Chromium).\n * - Safari returns null (since this is independent of Chromium).\n *\n * @return {?number} A major version number or null if not Chromium-based.\n */\n static chromeVersion() {\n if (!shaka.util.Platform.isChrome()) {\n return null;\n }\n\n // Looking for something like \"Chrome/106.0.0.0\".\n const match = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n if (match) {\n return parseInt(match[1], /* base= */ 10);\n }\n\n return null;\n }\n\n /**\n * Check if the current platform is Google Chrome.\n *\n * @return {boolean}\n */\n static isChrome() {\n // The Edge Legacy user agent will also contain the \"Chrome\" keyword, so we\n // need to make sure this is not Edge Legacy.\n return shaka.util.Platform.userAgentContains_('Chrome') &&\n !shaka.util.Platform.isLegacyEdge();\n }\n\n /**\n * Check if the current platform is Firefox.\n *\n * @return {boolean}\n */\n static isFirefox() {\n return shaka.util.Platform.userAgentContains_('Firefox');\n }\n\n /**\n * Check if the current platform is from Apple.\n *\n * Returns true on all iOS browsers and on desktop Safari.\n *\n * Returns false for non-Safari browsers on macOS, which are independent of\n * Apple.\n *\n * @return {boolean}\n */\n static isApple() {\n return !!navigator.vendor && navigator.vendor.includes('Apple') &&\n !shaka.util.Platform.isTizen() &&\n !shaka.util.Platform.isEOS() &&\n !shaka.util.Platform.isAPL() &&\n !shaka.util.Platform.isVirginMedia() &&\n !shaka.util.Platform.isOrange() &&\n !shaka.util.Platform.isPS4() &&\n !shaka.util.Platform.isAmazonFireTV() &&\n !shaka.util.Platform.isComcastX1() &&\n !shaka.util.Platform.isZenterio() &&\n !shaka.util.Platform.isSkyQ();\n }\n\n /**\n * Check if the current platform is Playstation 5.\n *\n * Returns true on Playstation 5 browsers.\n *\n * Returns false for Playstation 5 browsers\n *\n * @return {boolean}\n */\n static isPS5() {\n return shaka.util.Platform.userAgentContains_('PlayStation 5');\n }\n\n /**\n * Check if the current platform is Playstation 4.\n */\n static isPS4() {\n return shaka.util.Platform.userAgentContains_('PlayStation 4');\n }\n\n /**\n * Check if the current platform is Hisense.\n */\n static isHisense() {\n return shaka.util.Platform.userAgentContains_('Hisense') ||\n shaka.util.Platform.userAgentContains_('VIDAA');\n }\n\n /**\n * Check if the current platform is Virgin Media device.\n */\n static isVirginMedia() {\n return shaka.util.Platform.userAgentContains_('VirginMedia');\n }\n\n /**\n * Check if the current platform is Orange.\n */\n static isOrange() {\n return shaka.util.Platform.userAgentContains_('SOPOpenBrowser');\n }\n\n /**\n * Check if the current platform is SkyQ STB.\n */\n static isSkyQ() {\n return shaka.util.Platform.userAgentContains_('Sky_STB');\n }\n\n /**\n * Check if the current platform is Amazon Fire TV.\n * https://developer.amazon.com/docs/fire-tv/identify-amazon-fire-tv-devices.html\n *\n * @return {boolean}\n */\n static isAmazonFireTV() {\n return shaka.util.Platform.userAgentContains_('AFT');\n }\n\n /**\n * Check if the current platform is Comcast X1.\n * @return {boolean}\n */\n static isComcastX1() {\n return shaka.util.Platform.userAgentContains_('WPE');\n }\n\n /**\n * Check if the current platform is Deutsche Telecom Zenterio STB.\n * @return {boolean}\n */\n static isZenterio() {\n return shaka.util.Platform.userAgentContains_('DT_STB_BCM');\n }\n\n /**\n * Returns a major version number for Safari, or Safari-based iOS browsers.\n *\n * For example:\n * - Safari 13.0.4 on macOS returns 13.\n * - Safari on iOS 13.3.1 returns 13.\n * - Chrome on iOS 13.3.1 returns 13 (since this is based on Safari/WebKit).\n * - Chrome on macOS returns null (since this is independent of Apple).\n *\n * Returns null on Firefox on iOS, where this version information is not\n * available.\n *\n * @return {?number} A major version number or null if not iOS.\n */\n static safariVersion() {\n // All iOS browsers and desktop Safari will return true for isApple().\n if (!shaka.util.Platform.isApple()) {\n return null;\n }\n\n // This works for iOS Safari and desktop Safari, which contain something\n // like \"Version/13.0\" indicating the major Safari or iOS version.\n let match = navigator.userAgent.match(/Version\\/(\\d+)/);\n if (match) {\n return parseInt(match[1], /* base= */ 10);\n }\n\n // This works for all other browsers on iOS, which contain something like\n // \"OS 13_3\" indicating the major & minor iOS version.\n match = navigator.userAgent.match(/OS (\\d+)(?:_\\d+)?/);\n if (match) {\n return parseInt(match[1], /* base= */ 10);\n }\n\n return null;\n }\n\n /**\n * Check if the current platform is Apple Safari\n * or Safari-based iOS browsers.\n *\n * @return {boolean}\n */\n static isSafari() {\n return !!shaka.util.Platform.safariVersion();\n }\n\n /**\n * Check if the current platform is an EOS set-top box.\n *\n * @return {boolean}\n */\n static isEOS() {\n return shaka.util.Platform.userAgentContains_('PC=EOS');\n }\n\n /**\n * Check if the current platform is an APL set-top box.\n *\n * @return {boolean}\n */\n static isAPL() {\n return shaka.util.Platform.userAgentContains_('PC=APL');\n }\n\n /**\n * Guesses if the platform is a mobile one (iOS or Android).\n *\n * @return {boolean}\n */\n static isMobile() {\n if (/(?:iPhone|iPad|iPod|Android)/.test(navigator.userAgent)) {\n // This is Android, iOS, or iPad < 13.\n return true;\n }\n\n // Starting with iOS 13 on iPad, the user agent string no longer has the\n // word \"iPad\" in it. It looks very similar to desktop Safari. This seems\n // to be intentional on Apple's part.\n // See: https://forums.developer.apple.com/thread/119186\n //\n // So if it's an Apple device with multi-touch support, assume it's a mobile\n // device. If some future iOS version starts masking their user agent on\n // both iPhone & iPad, this clause should still work. If a future\n // multi-touch desktop Mac is released, this will need some adjustment.\n //\n // As of January 2020, this is mainly used to adjust the default UI config\n // for mobile devices, so it's low risk if something changes to break this\n // detection.\n return shaka.util.Platform.isApple() && navigator.maxTouchPoints > 1;\n }\n\n /**\n * Return true if the platform is a Mac, regardless of the browser.\n *\n * @return {boolean}\n */\n static isMac() {\n // Try the newer standard first.\n if (navigator.userAgentData && navigator.userAgentData.platform) {\n return navigator.userAgentData.platform.toLowerCase() == 'macos';\n }\n // Fall back to the old API, with less strict matching.\n if (!navigator.platform) {\n return false;\n }\n return navigator.platform.toLowerCase().includes('mac');\n }\n\n /**\n * Return true if the platform is a VisionOS.\n *\n * @return {boolean}\n */\n static isVisionOS() {\n if (!shaka.util.Platform.isMac()) {\n return false;\n }\n if (!('xr' in navigator)) {\n return false;\n }\n return true;\n }\n\n /**\n * Return true if the platform is a Windows, regardless of the browser.\n *\n * @return {boolean}\n */\n static isWindows() {\n // Try the newer standard first.\n if (navigator.userAgentData && navigator.userAgentData.platform) {\n return navigator.userAgentData.platform.toLowerCase() == 'windows';\n }\n // Fall back to the old API, with less strict matching.\n if (!navigator.platform) {\n return false;\n }\n return navigator.platform.toLowerCase().includes('win32');\n }\n\n /**\n * Return true if the platform is a Android, regardless of the browser.\n *\n * @return {boolean}\n */\n static isAndroid() {\n return shaka.util.Platform.userAgentContains_('Android');\n }\n\n /**\n * Return true if the platform is a Fuchsia, regardless of the browser.\n *\n * @return {boolean}\n */\n static isFuchsia() {\n return shaka.util.Platform.userAgentContains_('Fuchsia');\n }\n\n /**\n * Return true if the platform is controlled by a remote control.\n *\n * @return {boolean}\n */\n static isSmartTV() {\n const Platform = shaka.util.Platform;\n if (Platform.isTizen() || Platform.isWebOS() ||\n Platform.isXboxOne() || Platform.isPS4() ||\n Platform.isPS5() || Platform.isAmazonFireTV() ||\n Platform.isEOS() || Platform.isAPL() ||\n Platform.isVirginMedia() || Platform.isOrange() ||\n Platform.isComcastX1() || Platform.isChromecast() ||\n Platform.isHisense() || Platform.isZenterio()) {\n return true;\n }\n return false;\n }\n\n /**\n * Check if the user agent contains a key. This is the best way we know of\n * right now to detect platforms. If there is a better way, please send a\n * PR.\n *\n * @param {string} key\n * @return {boolean}\n * @private\n */\n static userAgentContains_(key) {\n const userAgent = navigator.userAgent || '';\n return userAgent.includes(key);\n }\n\n /**\n * For canPlayType queries, we just need any instance.\n *\n * First, use a cached element from a previous query.\n * Second, search the page for one.\n * Third, create a temporary one.\n *\n * Cached elements expire in one second so that they can be GC'd or removed.\n *\n * @return {!HTMLMediaElement}\n */\n static anyMediaElement() {\n const Platform = shaka.util.Platform;\n if (Platform.cachedMediaElement_) {\n return Platform.cachedMediaElement_;\n }\n\n if (!Platform.cacheExpirationTimer_) {\n Platform.cacheExpirationTimer_ = new shaka.util.Timer(() => {\n Platform.cachedMediaElement_ = null;\n });\n }\n\n Platform.cachedMediaElement_ = /** @type {HTMLMediaElement} */(\n document.getElementsByTagName('video')[0] ||\n document.getElementsByTagName('audio')[0]);\n\n if (!Platform.cachedMediaElement_) {\n Platform.cachedMediaElement_ = /** @type {!HTMLMediaElement} */(\n document.createElement('video'));\n }\n\n Platform.cacheExpirationTimer_.tickAfter(/* seconds= */ 1);\n return Platform.cachedMediaElement_;\n }\n\n /**\n * Returns true if the platform requires encryption information in all init\n * segments. For such platforms, MediaSourceEngine will attempt to work\n * around a lack of such info by inserting fake encryption information into\n * initialization segments.\n *\n * @param {?string} keySystem\n * @return {boolean}\n * @see https://github.com/shaka-project/shaka-player/issues/2759\n */\n static requiresEncryptionInfoInAllInitSegments(keySystem) {\n const Platform = shaka.util.Platform;\n const isPlayReady = shaka.util.DrmUtils.isPlayReadyKeySystem(keySystem);\n return Platform.isTizen() || Platform.isXboxOne() || Platform.isOrange() ||\n (Platform.isEdge() && Platform.isWindows() && isPlayReady);\n }\n\n /**\n * Returns true if the platform supports SourceBuffer \"sequence mode\".\n *\n * @return {boolean}\n */\n static supportsSequenceMode() {\n const Platform = shaka.util.Platform;\n if (Platform.isTizen3() || Platform.isTizen2() ||\n Platform.isWebOS3() || Platform.isPS4()) {\n return false;\n }\n return true;\n }\n\n /**\n * Returns if codec switching SMOOTH is known reliable device support.\n *\n * Some devices are known not to support SourceBuffer.changeType\n * well. These devices should use the reload strategy. If a device\n * reports that it supports but supports it unreliably\n * it should be disallowed in this method.\n *\n * @return {boolean}\n */\n static supportsSmoothCodecSwitching() {\n const Platform = shaka.util.Platform;\n // All Tizen versions (up to Tizen 8) do not support SMOOTH so far.\n // webOS seems to support SMOOTH from webOS 22.\n if (Platform.isTizen() || Platform.isPS4() || Platform.isPS5() ||\n Platform.isWebOS6()) {\n return false;\n }\n // Older chromecasts without GoogleTV seem to not support SMOOTH properly.\n if (Platform.isChromecast() && !Platform.isAndroidCastDevice() &&\n !Platform.isFuchsiaCastDevice()) {\n return false;\n }\n // See: https://chromium-review.googlesource.com/c/chromium/src/+/4577759\n if (Platform.isWindows() && Platform.isEdge()) {\n return false;\n }\n return true;\n }\n\n /**\n * On some platforms, such as v1 Chromecasts, the act of seeking can take a\n * significant amount of time.\n *\n * @return {boolean}\n */\n static isSeekingSlow() {\n const Platform = shaka.util.Platform;\n if (Platform.isChromecast()) {\n if (Platform.isAndroidCastDevice()) {\n // Android-based Chromecasts are new enough to not be a problem.\n return false;\n } else {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Returns true if MediaKeys is polyfilled\n *\n * @param {string=} polyfillType\n * @return {boolean}\n */\n static isMediaKeysPolyfilled(polyfillType) {\n if (polyfillType) {\n return polyfillType === window.shakaMediaKeysPolyfill;\n }\n return !!window.shakaMediaKeysPolyfill;\n }\n\n\n /**\n * Detect the maximum resolution that the platform's hardware can handle.\n *\n * @return {!Promise.}\n */\n static async detectMaxHardwareResolution() {\n const Platform = shaka.util.Platform;\n\n /** @type {shaka.extern.Resolution} */\n const maxResolution = {\n width: Infinity,\n height: Infinity,\n };\n\n if (Platform.isChromecast()) {\n // In our tests, the original Chromecast seems to have trouble decoding\n // above 1080p. It would be a waste to select a higher res anyway, given\n // that the device only outputs 1080p to begin with.\n // Chromecast has an extension to query the device/display's resolution.\n const hasCanDisplayType = window.cast && cast.__platform__ &&\n cast.__platform__.canDisplayType;\n\n // Some hub devices can only do 720p. Default to that.\n maxResolution.width = 1280;\n maxResolution.height = 720;\n\n try {\n if (hasCanDisplayType && await cast.__platform__.canDisplayType(\n 'video/mp4; codecs=\"avc1.640028\"; width=3840; height=2160')) {\n // The device and display can both do 4k. Assume a 4k limit.\n maxResolution.width = 3840;\n maxResolution.height = 2160;\n } else if (hasCanDisplayType && await cast.__platform__.canDisplayType(\n 'video/mp4; codecs=\"avc1.640028\"; width=1920; height=1080')) {\n // Most Chromecasts can do 1080p.\n maxResolution.width = 1920;\n maxResolution.height = 1080;\n }\n } catch (error) {\n // This shouldn't generally happen. Log the error.\n shaka.log.alwaysError('Failed to check canDisplayType:', error);\n // Now ignore the error and let the 720p default stand.\n }\n } else if (Platform.isTizen()) {\n maxResolution.width = 1920;\n maxResolution.height = 1080;\n try {\n if (webapis.systeminfo && webapis.systeminfo.getMaxVideoResolution) {\n const maxVideoResolution =\n webapis.systeminfo.getMaxVideoResolution();\n maxResolution.width = maxVideoResolution.width;\n maxResolution.height = maxVideoResolution.height;\n } else {\n if (webapis.productinfo.is8KPanelSupported &&\n webapis.productinfo.is8KPanelSupported()) {\n maxResolution.width = 7680;\n maxResolution.height = 4320;\n } else if (webapis.productinfo.isUdPanelSupported &&\n webapis.productinfo.isUdPanelSupported()) {\n maxResolution.width = 3840;\n maxResolution.height = 2160;\n }\n }\n } catch (e) {\n shaka.log.alwaysWarn('Tizen: Error detecting screen size, default ' +\n 'screen size 1920x1080.');\n }\n } else if (Platform.isWebOS()) {\n try {\n const deviceInfo =\n /** @type {{screenWidth: number, screenHeight: number}} */(\n JSON.parse(window.PalmSystem.deviceInfo));\n // WebOS has always been able to do 1080p. Assume a 1080p limit.\n maxResolution.width = Math.max(1920, deviceInfo['screenWidth']);\n maxResolution.height = Math.max(1080, deviceInfo['screenHeight']);\n } catch (e) {\n shaka.log.alwaysWarn('WebOS: Error detecting screen size, default ' +\n 'screen size 1920x1080.');\n maxResolution.width = 1920;\n maxResolution.height = 1080;\n }\n } else if (Platform.isHisense()) {\n // eslint-disable-next-line new-cap\n if (window.Hisense_Get4KSupportState &&\n // eslint-disable-next-line new-cap\n window.Hisense_Get4KSupportState()) {\n maxResolution.width = 3840;\n maxResolution.height = 2160;\n } else {\n maxResolution.width = 1920;\n maxResolution.height = 1080;\n }\n } else if (Platform.isPS4() || Platform.isPS5()) {\n let supports4K = false;\n try {\n const result = await window.msdk.device.getDisplayInfo();\n supports4K = result.resolution === '4K';\n } catch (e) {\n try {\n const result = await window.msdk.device.getDisplayInfoImmediate();\n supports4K = result.resolution === '4K';\n } catch (e) {\n shaka.log.alwaysWarn(\n 'PlayStation: Failed to get the display info:', e);\n }\n }\n if (supports4K) {\n maxResolution.width = 3840;\n maxResolution.height = 2160;\n } else {\n maxResolution.width = 1920;\n maxResolution.height = 1080;\n }\n } else {\n // For Xbox and UWP apps.\n let winRT = undefined;\n try {\n // Try to access to WinRT for WebView, if it's not defined,\n // try to access to WinRT for WebView2, if it's not defined either,\n // let it throw.\n if (typeof Windows !== 'undefined') {\n winRT = Windows;\n } else {\n winRT = chrome.webview.hostObjects.sync.Windows;\n }\n } catch (e) {}\n if (winRT) {\n maxResolution.width = 1920;\n maxResolution.height = 1080;\n try {\n const protectionCapabilities =\n new winRT.Media.Protection.ProtectionCapabilities();\n const protectionResult =\n winRT.Media.Protection.ProtectionCapabilityResult;\n // isTypeSupported may return \"maybe\", which means the operation\n // is not completed. This means we need to retry\n // https://learn.microsoft.com/en-us/uwp/api/windows.media.protection.protectioncapabilityresult?view=winrt-22621\n let result = null;\n const type =\n 'video/mp4;codecs=\"hvc1,mp4a\";features=\"decode-res-x=3840,' +\n 'decode-res-y=2160,decode-bitrate=20000,decode-fps=30,' +\n 'decode-bpc=10,display-res-x=3840,display-res-y=2160,' +\n 'display-bpc=8\"';\n const keySystem = 'com.microsoft.playready.recommendation';\n do {\n result = protectionCapabilities.isTypeSupported(type, keySystem);\n } while (result === protectionResult.maybe);\n if (result === protectionResult.probably) {\n maxResolution.width = 3840;\n maxResolution.height = 2160;\n }\n } catch (e) {\n shaka.log.alwaysWarn('Xbox: Error detecting screen size, default ' +\n 'screen size 1920x1080.');\n }\n } else if (Platform.isXboxOne()) {\n maxResolution.width = 1920;\n maxResolution.height = 1080;\n shaka.log.alwaysWarn('Xbox: Error detecting screen size, default ' +\n 'screen size 1920x1080.');\n }\n }\n return maxResolution;\n }\n};\n\n/** @private {shaka.util.Timer} */\nshaka.util.Platform.cacheExpirationTimer_ = null;\n\n/** @private {HTMLMediaElement} */\nshaka.util.Platform.cachedMediaElement_ = null;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.StringUtils');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.Lazy');\ngoog.require('shaka.util.Platform');\n\n\n/**\n * @namespace shaka.util.StringUtils\n * @summary A set of string utility functions.\n * @export\n */\nshaka.util.StringUtils = class {\n /**\n * Creates a string from the given buffer as UTF-8 encoding.\n *\n * @param {?BufferSource} data\n * @return {string}\n * @export\n */\n static fromUTF8(data) {\n if (!data) {\n return '';\n }\n\n let uint8 = shaka.util.BufferUtils.toUint8(data);\n // If present, strip off the UTF-8 BOM.\n if (uint8[0] == 0xef && uint8[1] == 0xbb && uint8[2] == 0xbf) {\n uint8 = uint8.subarray(3);\n }\n\n if (window.TextDecoder && !shaka.util.Platform.isPS4()) {\n // Use the TextDecoder interface to decode the text. This has the\n // advantage compared to the previously-standard decodeUriComponent that\n // it will continue parsing even if it finds an invalid UTF8 character,\n // rather than stop and throw an error.\n const utf8decoder = new TextDecoder();\n const decoded = utf8decoder.decode(uint8);\n if (decoded.includes('\\uFFFD')) {\n shaka.log.alwaysError('Decoded string contains an \"unknown character' +\n '\" codepoint. That probably means the UTF8 ' +\n 'encoding was incorrect!');\n }\n return decoded;\n } else {\n // Homebrewed UTF-8 decoder based on\n // https://en.wikipedia.org/wiki/UTF-8#Encoding\n // Unlike decodeURIComponent, won't throw on bad encoding.\n // In this way, it is similar to TextDecoder.\n\n let decoded = '';\n for (let i = 0; i < uint8.length; ++i) {\n // By default, the \"replacement character\" codepoint.\n let codePoint = 0xFFFD;\n\n // Top bit is 0, 1-byte encoding.\n if ((uint8[i] & 0x80) == 0) {\n codePoint = uint8[i];\n\n // Top 3 bits of byte 0 are 110, top 2 bits of byte 1 are 10,\n // 2-byte encoding.\n } else if (uint8.length >= i + 2 &&\n (uint8[i] & 0xe0) == 0xc0 &&\n (uint8[i + 1] & 0xc0) == 0x80) {\n codePoint = ((uint8[i] & 0x1f) << 6) |\n ((uint8[i + 1] & 0x3f));\n i += 1; // Consume one extra byte.\n\n // Top 4 bits of byte 0 are 1110, top 2 bits of byte 1 and 2 are 10,\n // 3-byte encoding.\n } else if (uint8.length >= i + 3 &&\n (uint8[i] & 0xf0) == 0xe0 &&\n (uint8[i + 1] & 0xc0) == 0x80 &&\n (uint8[i + 2] & 0xc0) == 0x80) {\n codePoint = ((uint8[i] & 0x0f) << 12) |\n ((uint8[i + 1] & 0x3f) << 6) |\n ((uint8[i + 2] & 0x3f));\n i += 2; // Consume two extra bytes.\n\n // Top 5 bits of byte 0 are 11110, top 2 bits of byte 1, 2 and 3 are 10,\n // 4-byte encoding.\n } else if (uint8.length >= i + 4 &&\n (uint8[i] & 0xf1) == 0xf0 &&\n (uint8[i + 1] & 0xc0) == 0x80 &&\n (uint8[i + 2] & 0xc0) == 0x80 &&\n (uint8[i + 3] & 0xc0) == 0x80) {\n codePoint = ((uint8[i] & 0x07) << 18) |\n ((uint8[i + 1] & 0x3f) << 12) |\n ((uint8[i + 2] & 0x3f) << 6) |\n ((uint8[i + 3] & 0x3f));\n i += 3; // Consume three extra bytes.\n }\n\n // JavaScript strings are a series of UTF-16 characters.\n if (codePoint <= 0xffff) {\n decoded += String.fromCharCode(codePoint);\n } else {\n // UTF-16 surrogate-pair encoding, based on\n // https://en.wikipedia.org/wiki/UTF-16#Description\n const baseCodePoint = codePoint - 0x10000;\n const highPart = baseCodePoint >> 10;\n const lowPart = baseCodePoint & 0x3ff;\n decoded += String.fromCharCode(0xd800 + highPart);\n decoded += String.fromCharCode(0xdc00 + lowPart);\n }\n }\n\n return decoded;\n }\n }\n\n\n /**\n * Creates a string from the given buffer as UTF-16 encoding.\n *\n * @param {?BufferSource} data\n * @param {boolean} littleEndian\n true to read little endian, false to read big.\n * @param {boolean=} noThrow true to avoid throwing in cases where we may\n * expect invalid input. If noThrow is true and the data has an odd\n * length,it will be truncated.\n * @return {string}\n * @export\n */\n static fromUTF16(data, littleEndian, noThrow) {\n if (!data) {\n return '';\n }\n\n if (!noThrow && data.byteLength % 2 != 0) {\n shaka.log.error('Data has an incorrect length, must be even.');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL, shaka.util.Error.Category.TEXT,\n shaka.util.Error.Code.BAD_ENCODING);\n }\n\n // Use a DataView to ensure correct endianness.\n const length = Math.floor(data.byteLength / 2);\n const arr = new Uint16Array(length);\n const dataView = shaka.util.BufferUtils.toDataView(data);\n for (let i = 0; i < length; i++) {\n arr[i] = dataView.getUint16(i * 2, littleEndian);\n }\n return shaka.util.StringUtils.fromCharCode(arr);\n }\n\n\n /**\n * Creates a string from the given buffer, auto-detecting the encoding that is\n * being used. If it cannot detect the encoding, it will throw an exception.\n *\n * @param {?BufferSource} data\n * @return {string}\n * @export\n */\n static fromBytesAutoDetect(data) {\n const StringUtils = shaka.util.StringUtils;\n if (!data) {\n return '';\n }\n\n const uint8 = shaka.util.BufferUtils.toUint8(data);\n if (uint8[0] == 0xef && uint8[1] == 0xbb && uint8[2] == 0xbf) {\n return StringUtils.fromUTF8(uint8);\n } else if (uint8[0] == 0xfe && uint8[1] == 0xff) {\n return StringUtils.fromUTF16(\n uint8.subarray(2), /* littleEndian= */ false);\n } else if (uint8[0] == 0xff && uint8[1] == 0xfe) {\n return StringUtils.fromUTF16(uint8.subarray(2), /* littleEndian= */ true);\n }\n\n const isAscii = (i) => {\n // arr[i] >= ' ' && arr[i] <= '~';\n return uint8.byteLength <= i || (uint8[i] >= 0x20 && uint8[i] <= 0x7e);\n };\n\n shaka.log.debug(\n 'Unable to find byte-order-mark, making an educated guess.');\n if (uint8[0] == 0 && uint8[2] == 0) {\n return StringUtils.fromUTF16(data, /* littleEndian= */ false);\n } else if (uint8[1] == 0 && uint8[3] == 0) {\n return StringUtils.fromUTF16(data, /* littleEndian= */ true);\n } else if (isAscii(0) && isAscii(1) && isAscii(2) && isAscii(3)) {\n return StringUtils.fromUTF8(data);\n }\n\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.TEXT,\n shaka.util.Error.Code.UNABLE_TO_DETECT_ENCODING);\n }\n\n\n /**\n * Creates a ArrayBuffer from the given string, converting to UTF-8 encoding.\n *\n * @param {string} str\n * @return {!ArrayBuffer}\n * @export\n */\n static toUTF8(str) {\n if (window.TextEncoder && !shaka.util.Platform.isPS4()) {\n const utf8Encoder = new TextEncoder();\n return shaka.util.BufferUtils.toArrayBuffer(utf8Encoder.encode(str));\n } else {\n // http://stackoverflow.com/a/13691499\n // Converts the given string to a URI encoded string. If a character\n // falls in the ASCII range, it is not converted; otherwise it will be\n // converted to a series of URI escape sequences according to UTF-8.\n // Example: 'g#€' -> 'g#%E3%82%AC'\n const encoded = encodeURIComponent(str);\n // Convert each escape sequence individually into a character. Each\n // escape sequence is interpreted as a code-point, so if an escape\n // sequence happens to be part of a multi-byte sequence, each byte will\n // be converted to a single character.\n // Example: 'g#%E3%82%AC' -> '\\x67\\x35\\xe3\\x82\\xac'\n const utf8 = unescape(encoded);\n\n const result = new Uint8Array(utf8.length);\n for (let i = 0; i < utf8.length; i++) {\n const item = utf8[i];\n result[i] = item.charCodeAt(0);\n }\n return shaka.util.BufferUtils.toArrayBuffer(result);\n }\n }\n\n\n /**\n * Creates a ArrayBuffer from the given string, converting to UTF-16 encoding.\n *\n * @param {string} str\n * @param {boolean} littleEndian\n * @return {!ArrayBuffer}\n * @export\n */\n static toUTF16(str, littleEndian) {\n const result = new ArrayBuffer(str.length * 2);\n const view = new DataView(result);\n for (let i = 0; i < str.length; ++i) {\n const value = str.charCodeAt(i);\n view.setUint16(/* position= */ i * 2, value, littleEndian);\n }\n return result;\n }\n\n\n /**\n * Creates a new string from the given array of char codes.\n *\n * Using String.fromCharCode.apply is risky because you can trigger stack\n * errors on very large arrays. This breaks up the array into several pieces\n * to avoid this.\n *\n * @param {!TypedArray} array\n * @return {string}\n */\n static fromCharCode(array) {\n return shaka.util.StringUtils.fromCharCodeImpl_.value()(array);\n }\n\n /**\n * Resets the fromCharCode method's implementation.\n * For debug use.\n * @export\n */\n static resetFromCharCode() {\n shaka.util.StringUtils.fromCharCodeImpl_.reset();\n }\n\n /**\n * This method converts the HTML entities &, <, >, ", ',\n *  , ‎ and ‏ in string to their corresponding characters.\n *\n * @param {!string} input\n * @return {string}\n */\n static htmlUnescape(input) {\n // Used to map HTML entities to characters.\n const htmlUnescapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': '\\'',\n ' ': '\\u{a0}',\n '‎': '\\u{200e}',\n '‏': '\\u{200f}',\n };\n\n // Used to match HTML entities and HTML characters.\n const reEscapedHtml =\n /&(?:amp|lt|gt|quot|apos|nbsp|lrm|rlm|#[xX]?[0-9a-fA-F]+);/g;\n const reHasEscapedHtml = RegExp(reEscapedHtml.source);\n // This check is an optimization, since replace always makes a copy\n if (input && reHasEscapedHtml.test(input)) {\n return input.replace(reEscapedHtml, (entity) => {\n if (entity[1] == '#') {\n // Translate this into an HTML character.\n let code = 0;\n if (entity[2] == 'x' || entity[2] == 'X') {\n // It's hex.\n code = parseInt(entity.substring(3), 16);\n } else {\n // It's decimal.\n code = parseInt(entity.substring(2), 10);\n }\n // Ignore it if it's an invalid code point.\n if (code >= 0 && code <= 0x10FFFF) {\n return String.fromCodePoint(code);\n } else {\n return '';\n }\n }\n // The only thing that might not match the dictionary above is the\n // single quote, which can be matched by many strings in the regex, but\n // only has a single entry in the dictionary.\n return htmlUnescapes[entity] || '\\'';\n });\n }\n return input || '';\n }\n};\n\n\n/** @private {!shaka.util.Lazy.} */\nshaka.util.StringUtils.fromCharCodeImpl_ = new shaka.util.Lazy(() => {\n /** @param {number} size @return {boolean} */\n const supportsChunkSize = (size) => {\n try {\n // The compiler will complain about suspicious value if this isn't\n // stored in a variable and used.\n const buffer = new Uint8Array(size);\n\n // This can't use the spread operator, or it blows up on Xbox One.\n // So we use apply() instead, which is normally not allowed.\n // See issue #2186 for more details.\n // eslint-disable-next-line no-restricted-syntax\n const foo = String.fromCharCode.apply(null, buffer);\n goog.asserts.assert(foo, 'Should get value');\n return foo.length > 0; // Actually use \"foo\", so it's not compiled out.\n } catch (error) {\n return false;\n }\n };\n\n // Different browsers support different chunk sizes; find out the largest\n // this browser supports so we can use larger chunks on supported browsers\n // but still support lower-end devices that require small chunks.\n // 64k is supported on all major desktop browsers.\n for (let size = 64 * 1024; size > 0; size /= 2) {\n if (supportsChunkSize(size)) {\n return (buffer) => {\n let ret = '';\n for (let i = 0; i < buffer.length; i += size) {\n const subArray = buffer.subarray(i, i + size);\n\n // This can't use the spread operator, or it blows up on Xbox One.\n // So we use apply() instead, which is normally not allowed.\n // See issue #2186 for more details.\n // eslint-disable-next-line no-restricted-syntax\n ret += String.fromCharCode.apply(null, subArray); // Issue #2186\n }\n return ret;\n };\n }\n }\n goog.asserts.assert(false, 'Unable to create a fromCharCode method');\n return null;\n});\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.TextParser');\n\ngoog.require('goog.asserts');\n\n\n/**\n * Reads elements from strings.\n */\nshaka.util.TextParser = class {\n /**\n * @param {string} data\n */\n constructor(data) {\n /**\n * @const\n * @private {string}\n */\n this.data_ = data || '';\n\n /** @private {number} */\n this.position_ = 0;\n }\n\n\n /** @return {boolean} Whether it is at the end of the string. */\n atEnd() {\n return this.position_ == this.data_.length;\n }\n\n\n /**\n * Reads a line from the parser. This will read but not return the newline.\n * Returns null at the end.\n *\n * @return {?string}\n */\n readLine() {\n return this.readRegexReturnCapture_(/(.*?)(\\n|$)/gm, 1);\n }\n\n\n /**\n * Reads a word from the parser. This will not read or return any whitespace\n * before or after the word (including newlines). Returns null at the end.\n *\n * @return {?string}\n */\n readWord() {\n return this.readRegexReturnCapture_(/[^ \\t\\n]*/gm, 0);\n }\n\n\n /**\n * Skips any continuous whitespace from the parser. Returns null at the end.\n */\n skipWhitespace() {\n this.readRegex(/[ \\t]+/gm);\n }\n\n\n /**\n * Reads the given regular expression from the parser. This requires the\n * match to be at the current position; there is no need to include a head\n * anchor.\n * This requires that the regex have the global flag to be set so that it can\n * set lastIndex to start the search at the current position. Returns null at\n * the end or if the regex does not match the current position.\n *\n * @param {!RegExp} regex\n * @return {Array.}\n */\n readRegex(regex) {\n const index = this.indexOf_(regex);\n if (this.atEnd() || index == null || index.position != this.position_) {\n return null;\n }\n\n this.position_ += index.length;\n return index.results;\n }\n\n\n /**\n * Reads a regex from the parser and returns the given capture.\n *\n * @param {!RegExp} regex\n * @param {number} index\n * @return {?string}\n * @private\n */\n readRegexReturnCapture_(regex, index) {\n if (this.atEnd()) {\n return null;\n }\n\n const ret = this.readRegex(regex);\n if (!ret) {\n return null;\n } else {\n return ret[index];\n }\n }\n\n\n /**\n * Returns the index info about a regular expression match.\n *\n * @param {!RegExp} regex\n * @return {?{position: number, length: number, results: !Array.}}\n * @private\n */\n indexOf_(regex) {\n // The global flag is required to use lastIndex.\n goog.asserts.assert(regex.global, 'global flag should be set');\n\n regex.lastIndex = this.position_;\n const results = regex.exec(this.data_);\n if (results == null) {\n return null;\n } else {\n return {\n position: results.index,\n length: results[0].length,\n results: results,\n };\n }\n }\n\n /**\n * Parses a time.\n *\n * @return {?number}\n */\n parseTime() {\n const results = this.readRegex(shaka.util.TextParser.timeFormat_);\n if (results == null) {\n return null;\n }\n // This capture is optional, but will still be in the array as undefined,\n // in which case it is 0.\n const hours = Number(results[1]) || 0;\n const minutes = Number(results[2]);\n const seconds = Number(results[3]);\n const milliseconds = Number(results[6]) || 0;\n if (minutes > 59 || seconds > 59) {\n return null;\n }\n\n return (milliseconds / 1000) + seconds + (minutes * 60) + (hours * 3600);\n }\n\n /**\n * Parses a time from string.\n *\n * @param {?string} time\n * @return {?number}\n */\n static parseTime(time) {\n if (!time) {\n return null;\n }\n const parser = new shaka.util.TextParser(time);\n return parser.parseTime();\n }\n};\n\n/**\n * @const\n * @private {!RegExp}\n * @example 00:00.000 or 00:00:00.000 or 0:00:00.000 or\n * 00:00.00 or 00:00:00.00 or 0:00:00.00 or 00:00:00\n */\nshaka.util.TextParser.timeFormat_ =\n /(?:(\\d{1,}):)?(\\d{2}):(\\d{2})((\\.(\\d{1,3})))?/g;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.ObjectUtils');\n\n\nshaka.util.ObjectUtils = class {\n /**\n * Performs a deep clone of the given simple object. This does not copy\n * prototypes, custom properties (e.g. read-only), or multiple references to\n * the same object. If the caller needs these fields, it will need to set\n * them after this returns.\n *\n * @template T\n * @param {T} arg\n * @return {T}\n */\n static cloneObject(arg) {\n const seenObjects = new WeakSet();\n // This recursively clones the value |val|, using the captured variable\n // |seenObjects| to track the objects we have already cloned.\n /** @suppress {strictMissingProperties} */\n const clone = (val) => {\n switch (typeof val) {\n case 'undefined':\n case 'boolean':\n case 'number':\n case 'string':\n case 'symbol':\n case 'function':\n return val;\n case 'object':\n default: {\n // typeof null === 'object'\n if (!val) {\n return val;\n }\n\n // This covers Uint8Array and friends, even without a TypedArray\n // base-class constructor.\n const isTypedArray = ArrayBuffer.isView(val);\n if (isTypedArray) {\n return val;\n }\n\n if (seenObjects.has(val)) {\n return null;\n }\n\n const isArray = val.constructor == Array;\n if (val.constructor != Object && !isArray) {\n return null;\n }\n\n seenObjects.add(val);\n const ret = isArray ? [] : {};\n // Note |name| will equal a number for arrays.\n for (const name in val) {\n ret[name] = clone(val[name]);\n }\n\n // Length is a non-enumerable property, but we should copy it over in\n // case it is not the default.\n if (isArray) {\n ret.length = val.length;\n }\n return ret;\n }\n }\n };\n return clone(arg);\n }\n\n /**\n * Performs a shallow clone of the given simple object. This does not copy\n * prototypes or custom properties (e.g. read-only).\n *\n * @template T\n * @param {T} original\n * @return {T}\n */\n static shallowCloneObject(original) {\n const clone = /** @type {?} */({});\n for (const k in original) {\n clone[k] = original[k];\n }\n return clone;\n }\n\n\n /**\n * Constructs a string out of a value, similar to the JSON.stringify method.\n * Unlike that method, this guarantees that the order of the keys in an\n * object is alphabetical, so it can be used as a way to reliably compare two\n * objects.\n *\n * @param {?} value\n * @return {string}\n */\n static alphabeticalKeyOrderStringify(value) {\n if (Array.isArray(value)) {\n return shaka.util.ObjectUtils.arrayStringify_(value);\n } else if (typeof value == 'function') {\n // For safety, skip functions. For function x,\n // x.prototype.constructor.prototype === x.prototype, so all functions\n // contain circular references if treated like Objects.\n return '';\n } else if (value instanceof Object) {\n return shaka.util.ObjectUtils.objectStringify_(value);\n } else {\n return JSON.stringify(value);\n }\n }\n\n\n /**\n * Helper for alphabeticalKeyOrderStringify for objects.\n *\n * @param {!Object} obj\n * @return {string}\n * @private\n */\n static objectStringify_(obj) {\n // NOTE: This excludes prototype chain keys. For now, this is intended for\n // anonymous objects only, so we don't care. If that changes, go back to a\n // for-in loop.\n const keys = Object.keys(obj);\n // Alphabetically sort the keys, so they will be in a reliable order.\n keys.sort();\n\n const terms = [];\n for (const key of keys) {\n const escapedKey = JSON.stringify(key);\n const value = obj[key];\n if (value !== undefined) {\n const escapedValue =\n shaka.util.ObjectUtils.alphabeticalKeyOrderStringify(value);\n if (escapedValue) {\n terms.push(escapedKey + ':' + escapedValue);\n }\n }\n }\n return '{' + terms.join(',') + '}';\n }\n\n\n /**\n * Helper for alphabeticalKeyOrderStringify for arrays.\n *\n * This could itself be JSON.stringify, except we want objects within the\n * array to go through our own stringifiers.\n *\n * @param {!Array} arr\n * @return {string}\n * @private\n */\n static arrayStringify_(arr) {\n const terms = [];\n for (let index = 0; index < arr.length; index++) {\n const escapedKey = index.toString();\n const value = arr[index];\n if (value !== undefined) {\n const escapedValue =\n shaka.util.ObjectUtils.alphabeticalKeyOrderStringify(value);\n if (escapedValue) {\n terms.push(escapedKey + ':' + escapedValue);\n }\n }\n }\n return '[' + terms.join(',') + ']';\n }\n};\n","/*! @license\n * tXml\n * Copyright 2015 Tobias Nickel\n * SPDX-License-Identifier: MIT\n */\n\ngoog.provide('shaka.util.TXml');\n\ngoog.require('shaka.util.ObjectUtils');\ngoog.require('shaka.util.StringUtils');\ngoog.require('shaka.log');\n\n/**\n * This code is a modified version of the tXml library.\n *\n * @author: Tobias Nickel\n * created: 06.04.2015\n * https://github.com/TobiasNickel/tXml\n */\n\n/**\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n\nshaka.util.TXml = class {\n /**\n * Parse some data\n * @param {BufferSource} data\n * @param {string=} expectedRootElemName\n * @param {boolean=} includeParent\n * @return {shaka.extern.xml.Node | null}\n */\n static parseXml(data, expectedRootElemName, includeParent = false) {\n const xmlString = shaka.util.StringUtils.fromBytesAutoDetect(data);\n return shaka.util.TXml.parseXmlString(\n xmlString, expectedRootElemName, includeParent);\n }\n\n /**\n * Parse some data\n * @param {string} xmlString\n * @param {string=} expectedRootElemName\n * @return {shaka.extern.xml.Node | null}\n */\n static parseXmlString(xmlString, expectedRootElemName,\n includeParent = false) {\n const result = shaka.util.TXml.parse(xmlString, includeParent);\n if (!expectedRootElemName && result.length) {\n return result[0];\n }\n const rootNode = result.find((n) =>\n expectedRootElemName.split(',').includes(n.tagName));\n if (rootNode) {\n return rootNode;\n }\n\n shaka.log.error('parseXml root element not found!');\n return null;\n }\n\n /**\n * Get namespace based on schema\n * @param {string} schema\n * @return {string}\n */\n static getKnownNameSpace(schema) {\n if (shaka.util.TXml.uriToNameSpace_.has(schema)) {\n return shaka.util.TXml.uriToNameSpace_.get(schema);\n }\n return '';\n }\n\n /**\n * Get schema based on namespace\n * @param {string} NS\n * @return {string}\n */\n static getKnownSchema(NS) {\n if (shaka.util.TXml.nameSpaceToUri_.has(NS)) {\n return shaka.util.TXml.nameSpaceToUri_.get(NS);\n }\n return '';\n }\n\n /**\n * Sets NS <-> schema bidirectional mapping\n * @param {string} schema\n * @param {string} NS\n */\n static setKnownNameSpace(schema, NS) {\n shaka.util.TXml.uriToNameSpace_.set(schema, NS);\n shaka.util.TXml.nameSpaceToUri_.set(NS, schema);\n }\n\n /**\n * parseXML / html into a DOM Object,\n * with no validation and some failure tolerance\n * @param {string} S your XML to parse\n * @param {boolean} includeParent\n * @return {Array.}\n */\n static parse(S, includeParent) {\n let pos = 0;\n\n const openBracket = '<';\n const openBracketCC = '<'.charCodeAt(0);\n const closeBracket = '>';\n const closeBracketCC = '>'.charCodeAt(0);\n const minusCC = '-'.charCodeAt(0);\n const slashCC = '/'.charCodeAt(0);\n const exclamationCC = '!'.charCodeAt(0);\n const singleQuoteCC = '\\''.charCodeAt(0);\n const doubleQuoteCC = '\"'.charCodeAt(0);\n const openCornerBracketCC = '['.charCodeAt(0);\n\n /**\n * parsing a list of entries\n */\n function parseChildren(tagName, preserveSpace = false) {\n /** @type {Array.} */\n const children = [];\n while (S[pos]) {\n if (S.charCodeAt(pos) == openBracketCC) {\n if (S.charCodeAt(pos + 1) === slashCC) {\n const closeStart = pos + 2;\n pos = S.indexOf(closeBracket, pos);\n\n const closeTag = S.substring(closeStart, pos);\n let indexOfCloseTag = closeTag.indexOf(tagName);\n if (indexOfCloseTag == -1) {\n // handle VTT closing tags like \n const indexOfPeriod = tagName.indexOf('.');\n if (indexOfPeriod > 0) {\n const shortTag = tagName.substring(0, indexOfPeriod);\n indexOfCloseTag = closeTag.indexOf(shortTag);\n }\n }\n // eslint-disable-next-line no-restricted-syntax\n if (indexOfCloseTag == -1) {\n const parsedText = S.substring(0, pos).split('\\n');\n throw new Error(\n 'Unexpected close tag\\nLine: ' + (parsedText.length - 1) +\n '\\nColumn: ' +\n (parsedText[parsedText.length - 1].length + 1) +\n '\\nChar: ' + S[pos],\n );\n }\n\n if (pos + 1) {\n pos += 1;\n }\n\n return children;\n } else if (S.charCodeAt(pos + 1) === exclamationCC) {\n if (S.charCodeAt(pos + 2) == minusCC) {\n while (pos !== -1 && !(S.charCodeAt(pos) === closeBracketCC &&\n S.charCodeAt(pos - 1) == minusCC &&\n S.charCodeAt(pos - 2) == minusCC &&\n pos != -1)) {\n pos = S.indexOf(closeBracket, pos + 1);\n }\n if (pos === -1) {\n pos = S.length;\n }\n } else if (\n S.charCodeAt(pos + 2) === openCornerBracketCC &&\n S.charCodeAt(pos + 8) === openCornerBracketCC &&\n S.substr(pos + 3, 5).toLowerCase() === 'cdata'\n ) {\n // cdata\n const cdataEndIndex = S.indexOf(']]>', pos);\n if (cdataEndIndex == -1) {\n children.push(S.substr(pos + 9));\n pos = S.length;\n } else {\n children.push(S.substring(pos + 9, cdataEndIndex));\n pos = cdataEndIndex + 3;\n }\n continue;\n }\n pos++;\n continue;\n }\n const node = parseNode(preserveSpace);\n children.push(node);\n if (typeof node === 'string') {\n return children;\n }\n if (node.tagName[0] === '?' && node.children) {\n children.push(...node.children);\n node.children = [];\n }\n } else {\n const text = parseText();\n if (preserveSpace) {\n if (text.length > 0) {\n children.push(text);\n }\n } else if (children.length &&\n text.length == 1 && text[0] == '\\n') {\n children.push(text);\n } else {\n const trimmed = text.trim();\n if (trimmed.length > 0) {\n children.push(text);\n }\n }\n pos++;\n }\n }\n return children;\n }\n\n /**\n * returns the text outside of texts until the first '<'\n */\n function parseText() {\n const start = pos;\n pos = S.indexOf(openBracket, pos) - 1;\n if (pos === -2) {\n pos = S.length;\n }\n return S.slice(start, pos + 1);\n }\n /**\n * returns text until the first nonAlphabetic letter\n */\n const nameSpacer = '\\r\\n\\t>/= ';\n\n /**\n * Parse text in current context\n * @return {string}\n */\n function parseName() {\n const start = pos;\n while (nameSpacer.indexOf(S[pos]) === -1 && S[pos]) {\n pos++;\n }\n return S.slice(start, pos);\n }\n\n /**\n * Parse text in current context\n * @param {boolean} preserveSpace Preserve the space between nodes\n * @return {shaka.extern.xml.Node | string}\n */\n function parseNode(preserveSpace) {\n pos++;\n const tagName = parseName();\n const attributes = {};\n let children = [];\n\n // parsing attributes\n while (S.charCodeAt(pos) !== closeBracketCC && S[pos]) {\n const c = S.charCodeAt(pos);\n // abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'\n if ((c > 64 && c < 91) || (c > 96 && c < 123)) {\n const name = parseName();\n // search beginning of the string\n let code = S.charCodeAt(pos);\n while (code && code !== singleQuoteCC && code !== doubleQuoteCC &&\n !((code > 64 && code < 91) || (code > 96 && code < 123)) &&\n code !== closeBracketCC) {\n pos++;\n code = S.charCodeAt(pos);\n }\n let value = parseString();\n if (code === singleQuoteCC || code === doubleQuoteCC) {\n if (pos === -1) {\n /** @type {shaka.extern.xml.Node} */\n const node = {\n tagName,\n attributes,\n children,\n parent: null,\n };\n if (includeParent) {\n for (let i = 0; i < children.length; i++) {\n if (typeof children[i] !== 'string') {\n children[i].parent = node;\n }\n }\n }\n return node;\n }\n } else {\n value = null;\n pos--;\n }\n if (name.startsWith('xmlns:')) {\n const segs = name.split(':');\n shaka.util.TXml.setKnownNameSpace(\n /** @type {string} */ (value), segs[1]);\n }\n if (tagName === 'tt' &&\n name === 'xml:space' &&\n value === 'preserve') {\n preserveSpace = true;\n }\n attributes[name] = value;\n }\n pos++;\n }\n\n if (S.charCodeAt(pos - 1) !== slashCC) {\n pos++;\n const contents = parseChildren(tagName, preserveSpace);\n children = contents;\n } else {\n pos++;\n }\n /** @type {shaka.extern.xml.Node} */\n const node = {\n tagName,\n attributes,\n children,\n parent: null,\n };\n const childrenLength = children.length;\n for (let i = 0; i < childrenLength; i++) {\n const childrenValue = children[i];\n if (typeof childrenValue !== 'string') {\n if (includeParent) {\n childrenValue.parent = node;\n }\n } else if (i == childrenLength - 1 && childrenValue == '\\n') {\n children.pop();\n }\n }\n return node;\n }\n\n /**\n * Parse string in current context\n * @return {string}\n */\n function parseString() {\n const startChar = S[pos];\n const startpos = pos + 1;\n pos = S.indexOf(startChar, startpos);\n return S.slice(startpos, pos);\n }\n\n return parseChildren('');\n }\n\n /**\n * Verifies if the element is a TXml node.\n * @param {!shaka.extern.xml.Node} elem The XML element.\n * @return {!boolean} Is the element a TXml node\n */\n static isNode(elem) {\n return !!(elem.tagName);\n }\n\n /**\n * Checks if a node is of type text.\n * @param {!shaka.extern.xml.Node | string} elem The XML element.\n * @return {boolean} True if it is a text node.\n */\n static isText(elem) {\n return typeof elem === 'string';\n }\n\n /**\n * gets child XML elements.\n * @param {!shaka.extern.xml.Node} elem The parent XML element.\n * @return {!Array.} The child XML elements.\n */\n static getChildNodes(elem) {\n const found = [];\n if (!elem.children) {\n return [];\n }\n for (const child of elem.children) {\n if (typeof child !== 'string') {\n found.push(child);\n }\n }\n return found;\n }\n\n /**\n * Finds child XML elements.\n * @param {!shaka.extern.xml.Node} elem The parent XML element.\n * @param {string} name The child XML element's tag name.\n * @return {!Array.} The child XML elements.\n */\n static findChildren(elem, name) {\n const found = [];\n if (!elem.children) {\n return [];\n }\n for (const child of elem.children) {\n if (child.tagName === name) {\n found.push(child);\n }\n }\n return found;\n }\n\n /**\n * Gets inner text.\n * @param {!shaka.extern.xml.Node | string} node The XML element.\n * @return {?string} The text contents, or null if there are none.\n */\n static getTextContents(node) {\n const StringUtils = shaka.util.StringUtils;\n if (typeof node === 'string') {\n return StringUtils.htmlUnescape(node);\n }\n const textContent = node.children.reduce(\n (acc, curr) => (typeof curr === 'string' ? acc + curr : acc),\n '',\n );\n if (textContent === '') {\n return null;\n }\n return StringUtils.htmlUnescape(textContent);\n }\n\n /**\n * Gets the text contents of a node.\n * @param {!shaka.extern.xml.Node} node The XML element.\n * @return {?string} The text contents, or null if there are none.\n */\n static getContents(node) {\n if (!Array.from(node.children).every(\n (n) => typeof n === 'string' )) {\n return null;\n }\n\n // Read merged text content from all text nodes.\n let text = shaka.util.TXml.getTextContents(node);\n if (text) {\n text = text.trim();\n }\n return text;\n }\n\n /**\n * Finds child XML elements recursively.\n * @param {!shaka.extern.xml.Node} elem The parent XML element.\n * @param {string} name The child XML element's tag name.\n * @param {!Array.} found accumulator for found nodes\n * @return {!Array.} The child XML elements.\n */\n static getElementsByTagName(elem, name, found = []) {\n if (elem.tagName === name) {\n found.push(elem);\n }\n if (elem.children) {\n for (const child of elem.children) {\n shaka.util.TXml.getElementsByTagName(child, name, found);\n }\n }\n return found;\n }\n\n /**\n * Finds a child XML element.\n * @param {!shaka.extern.xml.Node} elem The parent XML element.\n * @param {string} name The child XML element's tag name.\n * @return {shaka.extern.xml.Node | null} The child XML element,\n * or null if a child XML element\n * does not exist with the given tag name OR if there exists more than one\n * child XML element with the given tag name.\n */\n static findChild(elem, name) {\n const children = shaka.util.TXml.findChildren(elem, name);\n if (children.length != 1) {\n return null;\n }\n return children[0];\n }\n\n /**\n * Finds a namespace-qualified child XML element.\n * @param {!shaka.extern.xml.Node} elem The parent XML element.\n * @param {string} ns The child XML element's namespace URI.\n * @param {string} name The child XML element's local name.\n * @return {shaka.extern.xml.Node | null} The child XML element, or null\n * if a child XML element\n * does not exist with the given tag name OR if there exists more than one\n * child XML element with the given tag name.\n */\n static findChildNS(elem, ns, name) {\n const children = shaka.util.TXml.findChildrenNS(elem, ns, name);\n if (children.length != 1) {\n return null;\n }\n return children[0];\n }\n\n /**\n * Parses an attribute by its name.\n * @param {!shaka.extern.xml.Node} elem The XML element.\n * @param {string} name The attribute name.\n * @param {function(string): (T|null)} parseFunction A function that parses\n * the attribute.\n * @param {(T|null)=} defaultValue The attribute's default value, if not\n * specified, the attibute's default value is null.\n * @return {(T|null)} The parsed attribute on success, or the attribute's\n * default value if the attribute does not exist or could not be parsed.\n * @template T\n */\n static parseAttr(elem, name, parseFunction, defaultValue = null) {\n let parsedValue = null;\n\n const value = elem.attributes[name];\n if (value != null) {\n parsedValue = parseFunction(value);\n }\n return parsedValue == null ? defaultValue : parsedValue;\n }\n\n /**\n * Gets a namespace-qualified attribute.\n * @param {!shaka.extern.xml.Node} elem The element to get from.\n * @param {string} ns The namespace URI.\n * @param {string} name The local name of the attribute.\n * @return {?string} The attribute's value, or null if not present.\n */\n static getAttributeNS(elem, ns, name) {\n const schemaNS = shaka.util.TXml.getKnownNameSpace(ns);\n // Think this is equivalent\n const attribute = elem.attributes[`${schemaNS}:${name}`];\n return attribute || null;\n }\n\n /**\n * Finds namespace-qualified child XML elements.\n * @param {!shaka.extern.xml.Node} elem The parent XML element.\n * @param {string} ns The child XML element's namespace URI.\n * @param {string} name The child XML element's local name.\n * @return {!Array.} The child XML elements.\n */\n static findChildrenNS(elem, ns, name) {\n const schemaNS = shaka.util.TXml.getKnownNameSpace(ns);\n const found = [];\n if (elem.children) {\n for (const child of elem.children) {\n if (child && child.tagName === `${schemaNS}:${name}`) {\n found.push(child);\n }\n }\n }\n return found;\n }\n\n /**\n * Gets a namespace-qualified attribute.\n * @param {!shaka.extern.xml.Node} elem The element to get from.\n * @param {!Array.} nsList The lis of namespace URIs.\n * @param {string} name The local name of the attribute.\n * @return {?string} The attribute's value, or null if not present.\n */\n static getAttributeNSList(elem, nsList, name) {\n for (const ns of nsList) {\n const attr = shaka.util.TXml.getAttributeNS(\n elem, ns, name,\n );\n if (attr) {\n return attr;\n }\n }\n return null;\n }\n\n\n /**\n * Parses an XML date string.\n * @param {string} dateString\n * @return {?number} The parsed date in seconds on success; otherwise, return\n * null.\n */\n static parseDate(dateString) {\n if (!dateString) {\n return null;\n }\n\n // Times in the manifest should be in UTC. If they don't specify a timezone,\n // Date.parse() will use the local timezone instead of UTC. So manually add\n // the timezone if missing ('Z' indicates the UTC timezone).\n // Format: YYYY-MM-DDThh:mm:ss.ssssss\n if (/^\\d+-\\d+-\\d+T\\d+:\\d+:\\d+(\\.\\d+)?$/.test(dateString)) {\n dateString += 'Z';\n }\n\n const result = Date.parse(dateString);\n return isNaN(result) ? null : (result / 1000.0);\n }\n\n\n /**\n * Parses an XML duration string.\n * Negative values are not supported. Years and months are treated as exactly\n * 365 and 30 days respectively.\n * @param {string} durationString The duration string, e.g., \"PT1H3M43.2S\",\n * which means 1 hour, 3 minutes, and 43.2 seconds.\n * @return {?number} The parsed duration in seconds on success; otherwise,\n * return null.\n * @see {@link http://www.datypic.com/sc/xsd/t-xsd_duration.html}\n */\n static parseDuration(durationString) {\n if (!durationString) {\n return null;\n }\n\n const re = '^P(?:([0-9]*)Y)?(?:([0-9]*)M)?(?:([0-9]*)D)?' +\n '(?:T(?:([0-9]*)H)?(?:([0-9]*)M)?(?:([0-9.]*)S)?)?$';\n const matches = new RegExp(re).exec(durationString);\n\n if (!matches) {\n shaka.log.warning('Invalid duration string:', durationString);\n return null;\n }\n\n // Note: Number(null) == 0 but Number(undefined) == NaN.\n const years = Number(matches[1] || null);\n const months = Number(matches[2] || null);\n const days = Number(matches[3] || null);\n const hours = Number(matches[4] || null);\n const minutes = Number(matches[5] || null);\n const seconds = Number(matches[6] || null);\n\n // Assume a year always has 365 days and a month always has 30 days.\n const d = (60 * 60 * 24 * 365) * years +\n (60 * 60 * 24 * 30) * months +\n (60 * 60 * 24) * days +\n (60 * 60) * hours +\n 60 * minutes +\n seconds;\n return isFinite(d) ? d : null;\n }\n\n\n /**\n * Parses a range string.\n * @param {string} rangeString The range string, e.g., \"101-9213\".\n * @return {?{start: number, end: number}} The parsed range on success;\n * otherwise, return null.\n */\n static parseRange(rangeString) {\n const matches = /([0-9]+)-([0-9]+)/.exec(rangeString);\n\n if (!matches) {\n return null;\n }\n\n const start = Number(matches[1]);\n if (!isFinite(start)) {\n return null;\n }\n\n const end = Number(matches[2]);\n if (!isFinite(end)) {\n return null;\n }\n\n return {start: start, end: end};\n }\n\n\n /**\n * Parses an integer.\n * @param {string} intString The integer string.\n * @return {?number} The parsed integer on success; otherwise, return null.\n */\n static parseInt(intString) {\n const n = Number(intString);\n return (n % 1 === 0) ? n : null;\n }\n\n\n /**\n * Parses a positive integer.\n * @param {string} intString The integer string.\n * @return {?number} The parsed positive integer on success; otherwise,\n * return null.\n */\n static parsePositiveInt(intString) {\n const n = Number(intString);\n return (n % 1 === 0) && (n > 0) ? n : null;\n }\n\n\n /**\n * Parses a non-negative integer.\n * @param {string} intString The integer string.\n * @return {?number} The parsed non-negative integer on success; otherwise,\n * return null.\n */\n static parseNonNegativeInt(intString) {\n const n = Number(intString);\n return (n % 1 === 0) && (n >= 0) ? n : null;\n }\n\n\n /**\n * Parses a floating point number.\n * @param {string} floatString The floating point number string.\n * @return {?number} The parsed floating point number on success; otherwise,\n * return null. May return -Infinity or Infinity.\n */\n static parseFloat(floatString) {\n const n = Number(floatString);\n return !isNaN(n) ? n : null;\n }\n\n\n /**\n * Parses a boolean.\n * @param {string} booleanString The boolean string.\n * @return {boolean} The boolean\n */\n static parseBoolean(booleanString) {\n if (!booleanString) {\n return false;\n }\n return booleanString.toLowerCase() === 'true';\n }\n\n\n /**\n * Evaluate a division expressed as a string.\n * @param {string} exprString\n * The expression to evaluate, e.g. \"200/2\". Can also be a single number.\n * @return {?number} The evaluated expression as floating point number on\n * success; otherwise return null.\n */\n static evalDivision(exprString) {\n let res;\n let n;\n if ((res = exprString.match(/^(\\d+)\\/(\\d+)$/))) {\n n = Number(res[1]) / Number(res[2]);\n } else {\n n = Number(exprString);\n }\n return !isNaN(n) ? n : null;\n }\n\n\n /**\n * Parse xPath strings for segments and id targets.\n * @param {string} exprString\n * @return {!Array}\n */\n static parseXpath(exprString) {\n const StringUtils = shaka.util.StringUtils;\n const returnPaths = [];\n // Split string by paths but ignore '/' in quotes\n const paths = StringUtils.htmlUnescape(exprString)\n .split(/\\/+(?=(?:[^'\"]*['\"][^'\"]*['\"])*[^'\"]*$)/);\n for (const path of paths) {\n const nodeName = path.match(/^([\\w]+)/);\n\n if (nodeName) {\n // We only want the id attribute in which case\n // /'(.*?)'/ will suffice to get it.\n const idAttr = path.match(/(@id='(.*?)')/);\n const tAttr = path.match(/(@t='(\\d+)')/);\n const numberIndex = path.match(/(@n='(\\d+)')/);\n const position = path.match(/\\[(\\d+)\\]/);\n returnPaths.push({\n name: nodeName[0],\n id: idAttr ?\n idAttr[0].match(/'(.*?)'/)[0].replace(/'/gm, '') : null,\n t: tAttr ?\n Number(tAttr[0].match(/'(.*?)'/)[0].replace(/'/gm, '')) : null,\n n: numberIndex ?\n Number(numberIndex[0].match(/'(.*?)'/)[0].replace(/'/gm, '')):\n null,\n // position is counted from 1, so make it readable for devs\n position: position ? Number(position[1]) - 1 : null,\n attribute: path.split('/@')[1] || null,\n });\n } else if (path.startsWith('@') && returnPaths.length) {\n returnPaths[returnPaths.length - 1].attribute = path.slice(1);\n }\n }\n return returnPaths;\n }\n\n\n /**\n * Modifies nodes in specified array by adding or removing nodes\n * and updating attributes.\n * @param {!Array} nodes\n * @param {!shaka.extern.xml.Node} patchNode\n */\n static modifyNodes(nodes, patchNode) {\n const TXml = shaka.util.TXml;\n\n const paths = TXml.parseXpath(patchNode.attributes['sel'] || '');\n if (!paths.length) {\n return;\n }\n const lastNode = paths[paths.length - 1];\n const position = patchNode.attributes['pos'] || null;\n\n let index = lastNode.position;\n if (index == null) {\n if (lastNode.t !== null) {\n index = TXml.nodePositionByAttribute_(nodes, 't', lastNode.t);\n }\n if (lastNode.n !== null) {\n index = TXml.nodePositionByAttribute_(nodes, 'n', lastNode.n);\n }\n }\n if (index === null) {\n index = position === 'prepend' ? 0 : nodes.length;\n } else if (position === 'prepend') {\n --index;\n } else if (position === 'after') {\n ++index;\n }\n const action = patchNode.tagName;\n const attribute = lastNode.attribute;\n\n // Modify attribute\n if (attribute && nodes[index]) {\n TXml.modifyNodeAttribute(nodes[index], action, attribute,\n TXml.getContents(patchNode) || '');\n // Rearrange nodes\n } else {\n if (action === 'remove' || action === 'replace') {\n nodes.splice(index, 1);\n }\n if (action === 'add' || action === 'replace') {\n const newNodes = patchNode.children;\n nodes.splice(index, 0, ...newNodes);\n }\n }\n }\n\n\n /**\n * Search the node index by the t attribute\n * and return the index. if not found return null\n * @param {!Array} nodes\n * @param {!string} attribute\n * @param {!number} value\n * @private\n */\n static nodePositionByAttribute_(nodes, attribute, value) {\n let index = 0;\n for (const node of nodes) {\n const attrs = node.attributes;\n const val = Number(attrs[attribute]);\n if (val === value) {\n return index;\n }\n index++;\n }\n return null;\n }\n\n\n /**\n * @param {!shaka.extern.xml.Node} node\n * @param {string} action\n * @param {string} attribute\n * @param {string} value\n */\n static modifyNodeAttribute(node, action, attribute, value) {\n if (action === 'remove') {\n delete node.attributes[attribute];\n } else if (action === 'add' || action === 'replace') {\n node.attributes[attribute] = value;\n }\n }\n\n\n /**\n * Converts a tXml node to DOM element.\n * @param {shaka.extern.xml.Node} node\n * @return {!Element}\n */\n static txmlNodeToDomElement(node) {\n const TXml = shaka.util.TXml;\n let namespace = '';\n const parts = node.tagName.split(':');\n if (parts.length > 0) {\n namespace = TXml.getKnownSchema(parts[0]);\n }\n const element = document.createElementNS(namespace, node.tagName);\n\n for (const k in node.attributes) {\n const v = node.attributes[k];\n element.setAttribute(k, v);\n }\n\n for (const child of node.children) {\n let childElement;\n if (typeof child == 'string') {\n childElement = new Text(child);\n } else {\n childElement = TXml.txmlNodeToDomElement(child);\n }\n element.appendChild(childElement);\n }\n\n return element;\n }\n\n /**\n * Clones node and its children recursively. Skips parent.\n * @param {?shaka.extern.xml.Node} node\n * @return {?shaka.extern.xml.Node}\n */\n static cloneNode(node) {\n if (!node) {\n return null;\n }\n /** @type {!shaka.extern.xml.Node} */\n const clone = {\n tagName: node.tagName,\n attributes: shaka.util.ObjectUtils.shallowCloneObject(node.attributes),\n children: [],\n parent: null,\n };\n for (const child of node.children) {\n if (typeof child === 'string') {\n clone.children.push(child);\n } else {\n const clonedChild = shaka.util.TXml.cloneNode(child);\n clonedChild.parent = clone;\n clone.children.push(clonedChild);\n }\n }\n return clone;\n }\n};\n\n/** @private {!Map} */\nshaka.util.TXml.uriToNameSpace_ = new Map();\n\n/** @private {!Map} */\nshaka.util.TXml.nameSpaceToUri_ = new Map();\n\n\n/**\n * @typedef {{\n * name: string,\n * id: ?string,\n * t: ?number,\n * n: ?number,\n * position: ?number,\n * attribute: ?string\n * }}\n */\nshaka.util.TXml.PathNode;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.text.Cue');\n\ngoog.require('shaka.log');\ngoog.require('shaka.text.CueRegion');\ngoog.require('shaka.util.ArrayUtils');\ngoog.require('shaka.util.StringUtils');\ngoog.require('shaka.util.TextParser');\ngoog.require('shaka.util.TXml');\n\n\n/**\n * @export\n */\nshaka.text.Cue = class {\n /**\n * @param {number} startTime\n * @param {number} endTime\n * @param {string} payload\n */\n constructor(startTime, endTime, payload) {\n const Cue = shaka.text.Cue;\n\n /**\n * The start time of the cue in seconds, relative to the start of the\n * presentation.\n * @type {number}\n * @export\n */\n this.startTime = startTime;\n\n /**\n * The end time of the cue in seconds, relative to the start of the\n * presentation.\n * @type {number}\n * @export\n */\n this.endTime = endTime;\n\n /**\n * The text payload of the cue. If nestedCues is non-empty, this should be\n * empty. Top-level block containers should have no payload of their own.\n * @type {string}\n * @export\n */\n this.payload = payload;\n\n /**\n * The region to render the cue into. Only supported on top-level cues,\n * because nested cues are inline elements.\n * @type {shaka.text.CueRegion}\n * @export\n */\n this.region = new shaka.text.CueRegion();\n\n /**\n * The indent (in percent) of the cue box in the direction defined by the\n * writing direction.\n * @type {?number}\n * @export\n */\n this.position = null;\n\n /**\n * Position alignment of the cue.\n * @type {shaka.text.Cue.positionAlign}\n * @export\n */\n this.positionAlign = Cue.positionAlign.AUTO;\n\n /**\n * Size of the cue box (in percents), where 0 means \"auto\".\n * @type {number}\n * @export\n */\n this.size = 0;\n\n /**\n * Alignment of the text inside the cue box.\n * @type {shaka.text.Cue.textAlign}\n * @export\n */\n this.textAlign = Cue.textAlign.CENTER;\n\n /**\n * Text direction of the cue.\n * @type {shaka.text.Cue.direction}\n * @export\n */\n this.direction = Cue.direction.HORIZONTAL_LEFT_TO_RIGHT;\n\n /**\n * Text writing mode of the cue.\n * @type {shaka.text.Cue.writingMode}\n * @export\n */\n this.writingMode = Cue.writingMode.HORIZONTAL_TOP_TO_BOTTOM;\n\n /**\n * The way to interpret line field. (Either as an integer line number or\n * percentage from the display box).\n * @type {shaka.text.Cue.lineInterpretation}\n * @export\n */\n this.lineInterpretation = Cue.lineInterpretation.LINE_NUMBER;\n\n /**\n * The offset from the display box in either number of lines or\n * percentage depending on the value of lineInterpretation.\n * @type {?number}\n * @export\n */\n this.line = null;\n\n /**\n * Separation between line areas inside the cue box in px or em\n * (e.g. '100px'/'100em'). If not specified, this should be no less than\n * the largest font size applied to the text in the cue.\n * @type {string}.\n * @export\n */\n this.lineHeight = '';\n\n /**\n * Line alignment of the cue box.\n * Start alignment means the cue box’s top side (for horizontal cues), left\n * side (for vertical growing right), or right side (for vertical growing\n * left) is aligned at the line.\n * Center alignment means the cue box is centered at the line.\n * End alignment The cue box’s bottom side (for horizontal cues), right side\n * (for vertical growing right), or left side (for vertical growing left) is\n * aligned at the line.\n * @type {shaka.text.Cue.lineAlign}\n * @export\n */\n this.lineAlign = Cue.lineAlign.START;\n\n /**\n * Vertical alignments of the cues within their extents.\n * 'BEFORE' means displaying the captions at the top of the text display\n * container box, 'CENTER' means in the middle, 'AFTER' means at the bottom.\n * @type {shaka.text.Cue.displayAlign}\n * @export\n */\n this.displayAlign = Cue.displayAlign.AFTER;\n\n /**\n * Text color as a CSS color, e.g. \"#FFFFFF\" or \"white\".\n * @type {string}\n * @export\n */\n this.color = '';\n\n /**\n * Text background color as a CSS color, e.g. \"#FFFFFF\" or \"white\".\n * @type {string}\n * @export\n */\n this.backgroundColor = '';\n\n /**\n * The URL of the background image, e.g. \"data:[mime type];base64,[data]\".\n * @type {string}\n * @export\n */\n this.backgroundImage = '';\n\n /**\n * The border around this cue as a CSS border.\n * @type {string}\n * @export\n */\n this.border = '';\n\n /**\n * Text font size in px or em (e.g. '100px'/'100em').\n * @type {string}\n * @export\n */\n this.fontSize = '';\n\n /**\n * Text font weight. Either normal or bold.\n * @type {shaka.text.Cue.fontWeight}\n * @export\n */\n this.fontWeight = Cue.fontWeight.NORMAL;\n\n /**\n * Text font style. Normal, italic or oblique.\n * @type {shaka.text.Cue.fontStyle}\n * @export\n */\n this.fontStyle = Cue.fontStyle.NORMAL;\n\n /**\n * Text font family.\n * @type {string}\n * @export\n */\n this.fontFamily = '';\n\n /**\n * Text letter spacing as a CSS letter-spacing value.\n * @type {string}\n * @export\n */\n this.letterSpacing = '';\n\n /**\n * Text line padding as a CSS line-padding value.\n * @type {string}\n * @export\n */\n this.linePadding = '';\n\n /**\n * Opacity of the cue element, from 0-1.\n * @type {number}\n * @export\n */\n this.opacity = 1;\n\n /**\n * Text combine upright as a CSS text-combine-upright value.\n * @type {string}\n * @export\n */\n this.textCombineUpright = '';\n\n /**\n * Text decoration. A combination of underline, overline\n * and line through. Empty array means no decoration.\n * @type {!Array.}\n * @export\n */\n this.textDecoration = [];\n\n /**\n * Text shadow color as a CSS text-shadow value.\n * @type {string}\n * @export\n */\n this.textShadow = '';\n\n /**\n * Text stroke color as a CSS color, e.g. \"#FFFFFF\" or \"white\".\n * @type {string}\n * @export\n */\n this.textStrokeColor = '';\n\n /**\n * Text stroke width as a CSS stroke-width value.\n * @type {string}\n * @export\n */\n this.textStrokeWidth = '';\n\n /**\n * Whether or not line wrapping should be applied to the cue.\n * @type {boolean}\n * @export\n */\n this.wrapLine = true;\n\n /**\n * Id of the cue.\n * @type {string}\n * @export\n */\n this.id = '';\n\n /**\n * Nested cues, which should be laid out horizontally in one block.\n * Top-level cues are blocks, and nested cues are inline elements.\n * Cues can be nested arbitrarily deeply.\n * @type {!Array.}\n * @export\n */\n this.nestedCues = [];\n\n /**\n * If true, this represents a container element that is \"above\" the main\n * cues. For example, the and
tags that contain the

tags\n * in a TTML file. This controls the flow of the final cues; any nested cues\n * within an \"isContainer\" cue will be laid out as separate lines.\n * @type {boolean}\n * @export\n */\n this.isContainer = false;\n\n /**\n * Whether or not the cue only acts as a line break between two nested cues.\n * Should only appear in nested cues.\n * @type {boolean}\n * @export\n */\n this.lineBreak = false;\n\n /**\n * Used to indicate the type of ruby tag that should be used when rendering\n * the cue. Valid values: ruby, rp, rt.\n * @type {?string}\n * @export\n */\n this.rubyTag = null;\n\n /**\n * The number of horizontal and vertical cells into which the Root Container\n * Region area is divided.\n *\n * @type {{ columns: number, rows: number }}\n * @export\n */\n this.cellResolution = {\n columns: 32,\n rows: 15,\n };\n }\n\n /**\n * @param {number} start\n * @param {number} end\n * @return {!shaka.text.Cue}\n */\n static lineBreak(start, end) {\n const cue = new shaka.text.Cue(start, end, '');\n cue.lineBreak = true;\n return cue;\n }\n\n /**\n * Create a copy of the cue with the same properties.\n * @return {!shaka.text.Cue}\n * @suppress {checkTypes} since we must use [] and \"in\" with a struct type.\n * @export\n */\n clone() {\n const clone = new shaka.text.Cue(0, 0, '');\n\n for (const k in this) {\n clone[k] = this[k];\n\n // Make copies of array fields, but only one level deep. That way, if we\n // change, for instance, textDecoration on the clone, we don't affect the\n // original.\n if (clone[k] && clone[k].constructor == Array) {\n clone[k] = /** @type {!Array} */(clone[k]).slice();\n }\n }\n\n return clone;\n }\n\n /**\n * Check if two Cues have all the same values in all properties.\n * @param {!shaka.text.Cue} cue1\n * @param {!shaka.text.Cue} cue2\n * @return {boolean}\n * @suppress {checkTypes} since we must use [] and \"in\" with a struct type.\n * @export\n */\n static equal(cue1, cue2) {\n // Compare the start time, end time and payload of the cues first for\n // performance optimization. We can avoid the more expensive recursive\n // checks if the top-level properties don't match.\n // See: https://github.com/shaka-project/shaka-player/issues/3018\n if (cue1.startTime != cue2.startTime || cue1.endTime != cue2.endTime ||\n cue1.payload != cue2.payload) {\n return false;\n }\n for (const k in cue1) {\n if (k == 'startTime' || k == 'endTime' || k == 'payload') {\n // Already compared.\n } else if (k == 'nestedCues') {\n // This uses shaka.text.Cue.equal rather than just this.equal, since\n // otherwise recursing here will unbox the method and cause \"this\" to be\n // undefined in deeper recursion.\n if (!shaka.util.ArrayUtils.equal(\n cue1.nestedCues, cue2.nestedCues, shaka.text.Cue.equal)) {\n return false;\n }\n } else if (k == 'region' || k == 'cellResolution') {\n for (const k2 in cue1[k]) {\n if (cue1[k][k2] != cue2[k][k2]) {\n return false;\n }\n }\n } else if (Array.isArray(cue1[k])) {\n if (!shaka.util.ArrayUtils.equal(cue1[k], cue2[k])) {\n return false;\n }\n } else {\n if (cue1[k] != cue2[k]) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n /**\n * Parses cue payload, searches for styling entities and, if needed,\n * modifies original payload and creates nested cues to better represent\n * styling found in payload. All changes are done in-place.\n * @param {!shaka.text.Cue} cue\n * @param {!Map=} styles\n * @export\n */\n static parseCuePayload(cue, styles = new Map()) {\n const StringUtils = shaka.util.StringUtils;\n const TXml = shaka.util.TXml;\n let payload = cue.payload;\n if (!payload.includes('<')) {\n cue.payload = StringUtils.htmlUnescape(payload);\n return;\n }\n if (styles.size === 0) {\n shaka.text.Cue.addDefaultTextColor(styles);\n }\n payload = shaka.text.Cue.replaceKaraokeStylePayload_(payload);\n payload = shaka.text.Cue.replaceVoiceStylePayload_(payload);\n payload = shaka.text.Cue.escapeInvalidChevrons_(payload);\n\n cue.payload = '';\n\n const xmlPayload = '' + payload + '';\n let element;\n try {\n element = TXml.parseXmlString(xmlPayload, 'span');\n } catch (e) {\n shaka.log.warning('cue parse fail: ', e);\n }\n if (element) {\n const childNodes = element.children;\n if (childNodes.length == 1) {\n const childNode = childNodes[0];\n if (!TXml.isNode(childNode)) {\n cue.payload = StringUtils.htmlUnescape(payload);\n return;\n }\n }\n for (const childNode of childNodes) {\n shaka.text.Cue.generateCueFromElement_(childNode, cue, styles);\n }\n } else {\n shaka.log.warning('The cue\\'s markup could not be parsed: ', payload);\n cue.payload = StringUtils.htmlUnescape(payload);\n }\n }\n\n /**\n * Add default color\n *\n * @param {!Map} styles\n */\n static addDefaultTextColor(styles) {\n const textColor = shaka.text.Cue.defaultTextColor;\n for (const [key, value] of Object.entries(textColor)) {\n const cue = new shaka.text.Cue(0, 0, '');\n cue.color = value;\n styles.set('.' + key, cue);\n }\n\n const bgColor = shaka.text.Cue.defaultTextBackgroundColor;\n for (const [key, value] of Object.entries(bgColor)) {\n const cue = new shaka.text.Cue(0, 0, '');\n cue.backgroundColor = value;\n styles.set('.' + key, cue);\n }\n }\n\n /**\n * Converts karaoke style tag to be valid for xml parsing\n * For example,\n * input: Text <00:00:00.450> time <00:00:01.450> 1\n * output: Text

time\n *
1
\n *\n * @param {string} payload\n * @return {string} processed payload\n * @private\n */\n static replaceKaraokeStylePayload_(payload) {\n const names = [];\n let nameStart = -1;\n for (let i = 0; i < payload.length; i++) {\n if (payload[i] === '<') {\n nameStart = i + 1;\n } else if (payload[i] === '>') {\n if (nameStart > 0) {\n const name = payload.substr(nameStart, i - nameStart);\n if (name.match(shaka.text.Cue.timeFormat_)) {\n names.push(name);\n }\n nameStart = -1;\n }\n }\n }\n let newPayload = payload;\n for (const name of names) {\n const replaceTag = '<' + name + '>';\n const startTag = '
';\n const endTag = '
';\n newPayload = newPayload.replace(replaceTag, startTag);\n newPayload += endTag;\n }\n return newPayload;\n }\n\n /**\n * Converts voice style tag to be valid for xml parsing\n * For example,\n * input: Test\n * output: Test\n *\n * @param {string} payload\n * @return {string} processed payload\n * @private\n */\n static replaceVoiceStylePayload_(payload) {\n const voiceTag = 'v';\n const names = [];\n let nameStart = -1;\n let newPayload = '';\n let hasVoiceEndTag = false;\n for (let i = 0; i < payload.length; i++) {\n // This condition is used to manage tags that have end tags.\n if (payload[i] === '/') {\n const end = payload.indexOf('>', i);\n if (end === -1) {\n return payload;\n }\n const tagEnd = payload.substring(i + 1, end);\n if (!tagEnd || tagEnd != voiceTag) {\n newPayload += payload[i];\n continue;\n }\n hasVoiceEndTag = true;\n let tagStart = null;\n if (names.length) {\n tagStart = names[names.length -1];\n }\n if (!tagStart) {\n newPayload += payload[i];\n } else if (tagStart === tagEnd) {\n newPayload += '/' + tagEnd + '>';\n i += tagEnd.length + 1;\n } else {\n if (!tagStart.startsWith(voiceTag)) {\n newPayload += payload[i];\n continue;\n }\n newPayload += '/' + tagStart + '>';\n i += tagEnd.length + 1;\n }\n } else {\n // Here we only want the tag name, not any other payload.\n if (payload[i] === '<') {\n nameStart = i + 1;\n if (payload[nameStart] != voiceTag) {\n nameStart = -1;\n }\n } else if (payload[i] === '>') {\n if (nameStart > 0) {\n names.push(payload.substr(nameStart, i - nameStart));\n nameStart = -1;\n }\n }\n newPayload += payload[i];\n }\n }\n for (const name of names) {\n const newName = name.replace(' ', '.voice-');\n newPayload = newPayload.replace(`<${name}>`, `<${newName}>`);\n newPayload = newPayload.replace(``, ``);\n if (!hasVoiceEndTag) {\n newPayload += ``;\n }\n }\n return newPayload;\n }\n\n /**\n * This method converts invalid > chevrons to HTML entities.\n * It also removes < chevrons as per spec.\n *\n * @param {!string} input\n * @return {string}\n * @private\n */\n static escapeInvalidChevrons_(input) {\n // Used to map HTML entities to characters.\n const htmlEscapes = {\n '< ': '',\n ' >': ' >',\n };\n\n const reEscapedHtml = /(< +>|<\\s|\\s>)/g;\n const reHasEscapedHtml = RegExp(reEscapedHtml.source);\n // This check is an optimization, since replace always makes a copy\n if (input && reHasEscapedHtml.test(input)) {\n return input.replace(reEscapedHtml, (entity) => {\n return htmlEscapes[entity] || '';\n });\n }\n return input || '';\n }\n\n /**\n * @param {!shaka.extern.xml.Node} element\n * @param {!shaka.text.Cue} rootCue\n * @param {!Map} styles\n * @private\n */\n static generateCueFromElement_(element, rootCue, styles) {\n const TXml = shaka.util.TXml;\n const nestedCue = rootCue.clone();\n // We don't want propagate some properties.\n nestedCue.nestedCues = [];\n nestedCue.payload = '';\n nestedCue.rubyTag = '';\n // We don't want propagate some position settings\n nestedCue.line = null;\n nestedCue.region = new shaka.text.CueRegion();\n nestedCue.position = null;\n nestedCue.size = 0;\n nestedCue.textAlign = shaka.text.Cue.textAlign.CENTER;\n\n if (TXml.isNode(element)) {\n const bold = shaka.text.Cue.fontWeight.BOLD;\n const italic = shaka.text.Cue.fontStyle.ITALIC;\n const underline = shaka.text.Cue.textDecoration.UNDERLINE;\n const tags = element.tagName.split(/(?=[ .])+/g);\n for (const tag of tags) {\n let styleTag = tag;\n // White blanks at start indicate that the style is a voice\n if (styleTag.startsWith('.voice-')) {\n const voice = styleTag.split('-').pop();\n styleTag = `v[voice=\"${voice}\"]`;\n // The specification allows to have quotes and not, so we check to\n // see which one is being used.\n if (!styles.has(styleTag)) {\n styleTag = `v[voice=${voice}]`;\n }\n }\n if (styles.has(styleTag)) {\n shaka.text.Cue.mergeStyle_(nestedCue, styles.get(styleTag));\n }\n switch (tag) {\n case 'br': {\n const lineBreakCue = shaka.text.Cue.lineBreak(\n nestedCue.startTime, nestedCue.endTime);\n rootCue.nestedCues.push(lineBreakCue);\n return;\n }\n case 'b':\n nestedCue.fontWeight = bold;\n break;\n case 'i':\n nestedCue.fontStyle = italic;\n break;\n case 'u':\n nestedCue.textDecoration.push(underline);\n break;\n case 'font': {\n const color = element.attributes['color'];\n if (color) {\n nestedCue.color = color;\n }\n break;\n }\n case 'div': {\n const time = element.attributes['time'];\n if (!time) {\n break;\n }\n const cueTime = shaka.util.TextParser.parseTime(time);\n if (cueTime) {\n nestedCue.startTime = cueTime;\n }\n break;\n }\n case 'ruby':\n case 'rp':\n case 'rt':\n nestedCue.rubyTag = tag;\n break;\n default:\n break;\n }\n }\n }\n\n const isTextNode = (item) => TXml.isText(item);\n const childNodes = element.children;\n if (isTextNode(element) ||\n (childNodes.length == 1 && isTextNode(childNodes[0]))) {\n // Trailing line breaks may lost when convert cue to HTML tag\n // Need to insert line break cue to preserve line breaks\n const textArr = TXml.getTextContents(element).split('\\n');\n let isFirst = true;\n for (const text of textArr) {\n if (!isFirst) {\n const lineBreakCue = shaka.text.Cue.lineBreak(\n nestedCue.startTime, nestedCue.endTime);\n rootCue.nestedCues.push(lineBreakCue);\n }\n if (text.length > 0) {\n const textCue = nestedCue.clone();\n textCue.payload = shaka.util.StringUtils.htmlUnescape(text);\n rootCue.nestedCues.push(textCue);\n }\n isFirst = false;\n }\n } else {\n rootCue.nestedCues.push(nestedCue);\n for (const childNode of childNodes) {\n shaka.text.Cue.generateCueFromElement_(childNode, nestedCue, styles);\n }\n }\n }\n\n /**\n * Merges values created in parseStyle_\n * @param {!shaka.text.Cue} cue\n * @param {shaka.text.Cue} refCue\n * @private\n */\n static mergeStyle_(cue, refCue) {\n if (!refCue) {\n return;\n }\n\n // Overwrites if new value string length > 0\n cue.backgroundColor = shaka.text.Cue.getOrDefault_(\n refCue.backgroundColor, cue.backgroundColor);\n cue.color = shaka.text.Cue.getOrDefault_(\n refCue.color, cue.color);\n cue.fontFamily = shaka.text.Cue.getOrDefault_(\n refCue.fontFamily, cue.fontFamily);\n cue.fontSize = shaka.text.Cue.getOrDefault_(\n refCue.fontSize, cue.fontSize);\n cue.textShadow = shaka.text.Cue.getOrDefault_(\n refCue.textShadow, cue.textShadow);\n\n // Overwrite with new values as unable to determine\n // if new value is set or not\n cue.fontWeight = refCue.fontWeight;\n cue.fontStyle = refCue.fontStyle;\n cue.opacity = refCue.opacity;\n cue.rubyTag = refCue.rubyTag;\n cue.textCombineUpright = refCue.textCombineUpright;\n cue.wrapLine = refCue.wrapLine;\n }\n\n /**\n * @param {string} value\n * @param {string} defaultValue\n * @private\n */\n static getOrDefault_(value, defaultValue) {\n if (value && value.length > 0) {\n return value;\n }\n return defaultValue;\n }\n};\n\n\n/**\n * @enum {string}\n * @export\n */\nshaka.text.Cue.positionAlign = {\n 'LEFT': 'line-left',\n 'RIGHT': 'line-right',\n 'CENTER': 'center',\n 'AUTO': 'auto',\n};\n\n\n/**\n * @enum {string}\n * @export\n */\nshaka.text.Cue.textAlign = {\n 'LEFT': 'left',\n 'RIGHT': 'right',\n 'CENTER': 'center',\n 'START': 'start',\n 'END': 'end',\n};\n\n\n/**\n * Vertical alignments of the cues within their extents.\n * 'BEFORE' means displaying at the top of the captions container box, 'CENTER'\n * means in the middle, 'AFTER' means at the bottom.\n * @enum {string}\n * @export\n */\nshaka.text.Cue.displayAlign = {\n 'BEFORE': 'before',\n 'CENTER': 'center',\n 'AFTER': 'after',\n};\n\n\n/**\n * @enum {string}\n * @export\n */\nshaka.text.Cue.direction = {\n 'HORIZONTAL_LEFT_TO_RIGHT': 'ltr',\n 'HORIZONTAL_RIGHT_TO_LEFT': 'rtl',\n};\n\n\n/**\n * @enum {string}\n * @export\n */\nshaka.text.Cue.writingMode = {\n 'HORIZONTAL_TOP_TO_BOTTOM': 'horizontal-tb',\n 'VERTICAL_LEFT_TO_RIGHT': 'vertical-lr',\n 'VERTICAL_RIGHT_TO_LEFT': 'vertical-rl',\n};\n\n\n/**\n * @enum {number}\n * @export\n */\nshaka.text.Cue.lineInterpretation = {\n 'LINE_NUMBER': 0,\n 'PERCENTAGE': 1,\n};\n\n\n/**\n * @enum {string}\n * @export\n */\nshaka.text.Cue.lineAlign = {\n 'CENTER': 'center',\n 'START': 'start',\n 'END': 'end',\n};\n\n\n/**\n * Default text color according to\n * https://w3c.github.io/webvtt/#default-text-color\n * @enum {string}\n * @export\n */\nshaka.text.Cue.defaultTextColor = {\n 'white': 'white',\n 'lime': 'lime',\n 'cyan': 'cyan',\n 'red': 'red',\n 'yellow': 'yellow',\n 'magenta': 'magenta',\n 'blue': 'blue',\n 'black': 'black',\n};\n\n\n/**\n * Default text background color according to\n * https://w3c.github.io/webvtt/#default-text-background\n * @enum {string}\n * @export\n */\nshaka.text.Cue.defaultTextBackgroundColor = {\n 'bg_white': 'white',\n 'bg_lime': 'lime',\n 'bg_cyan': 'cyan',\n 'bg_red': 'red',\n 'bg_yellow': 'yellow',\n 'bg_magenta': 'magenta',\n 'bg_blue': 'blue',\n 'bg_black': 'black',\n};\n\n\n/**\n * In CSS font weight can be a number, where 400 is normal and 700 is bold.\n * Use these values for the enum for consistency.\n * @enum {number}\n * @export\n */\nshaka.text.Cue.fontWeight = {\n 'NORMAL': 400,\n 'BOLD': 700,\n};\n\n\n/**\n * @enum {string}\n * @export\n */\nshaka.text.Cue.fontStyle = {\n 'NORMAL': 'normal',\n 'ITALIC': 'italic',\n 'OBLIQUE': 'oblique',\n};\n\n\n/**\n * @enum {string}\n * @export\n */\nshaka.text.Cue.textDecoration = {\n 'UNDERLINE': 'underline',\n 'LINE_THROUGH': 'lineThrough',\n 'OVERLINE': 'overline',\n};\n\n/** @private */\nshaka.text.Cue.timeFormat_ = /(?:(\\d{1,}):)?(\\d{2}):(\\d{2})\\.(\\d{2,3})/g;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.transmuxer.TransmuxerEngine');\n\ngoog.require('shaka.util.IDestroyable');\n\n\n// TODO: revisit this when Closure Compiler supports partially-exported classes.\n/**\n * @summary Manages transmuxer plugins.\n * @implements {shaka.util.IDestroyable}\n * @export\n */\nshaka.transmuxer.TransmuxerEngine = class {\n // TODO: revisit this when the compiler supports partially-exported classes.\n /**\n * @override\n * @export\n */\n destroy() {}\n\n /**\n * @param {string} mimeType\n * @param {!shaka.extern.TransmuxerPlugin} plugin\n * @param {number} priority\n * @export\n */\n static registerTransmuxer(mimeType, plugin, priority) {\n const TransmuxerEngine = shaka.transmuxer.TransmuxerEngine;\n const normalizedMimetype = TransmuxerEngine.normalizeMimeType_(mimeType);\n const key = normalizedMimetype + '-' + priority;\n TransmuxerEngine.transmuxerMap_[key] = {\n priority: priority,\n plugin: plugin,\n };\n }\n\n /**\n * @param {string} mimeType\n * @param {number} priority\n * @export\n */\n static unregisterTransmuxer(mimeType, priority) {\n const TransmuxerEngine = shaka.transmuxer.TransmuxerEngine;\n const normalizedMimetype = TransmuxerEngine.normalizeMimeType_(mimeType);\n const key = normalizedMimetype + '-' + priority;\n delete TransmuxerEngine.transmuxerMap_[key];\n }\n\n /**\n * @param {string} mimeType\n * @param {string=} contentType\n * @return {?shaka.extern.TransmuxerPlugin}\n * @export\n */\n static findTransmuxer(mimeType, contentType) {\n const TransmuxerEngine = shaka.transmuxer.TransmuxerEngine;\n const normalizedMimetype = TransmuxerEngine.normalizeMimeType_(mimeType);\n const priorities = [\n TransmuxerEngine.PluginPriority.APPLICATION,\n TransmuxerEngine.PluginPriority.PREFERRED,\n TransmuxerEngine.PluginPriority.PREFERRED_SECONDARY,\n TransmuxerEngine.PluginPriority.FALLBACK,\n ];\n for (const priority of priorities) {\n const key = normalizedMimetype + '-' + priority;\n const object = TransmuxerEngine.transmuxerMap_[key];\n if (object) {\n const transmuxer = object.plugin();\n const isSupported = transmuxer.isSupported(mimeType, contentType);\n transmuxer.destroy();\n if (isSupported) {\n return object.plugin;\n }\n }\n }\n return null;\n }\n\n /**\n * @param {string} mimeType\n * @return {string}\n * @private\n */\n static normalizeMimeType_(mimeType) {\n return mimeType.toLowerCase().split(';')[0];\n }\n\n /**\n * Check if the mime type and the content type is supported.\n * @param {string} mimeType\n * @param {string=} contentType\n * @return {boolean}\n */\n static isSupported(mimeType, contentType) {\n const TransmuxerEngine = shaka.transmuxer.TransmuxerEngine;\n const transmuxerPlugin = TransmuxerEngine.findTransmuxer(mimeType);\n if (!transmuxerPlugin) {\n return false;\n }\n return true;\n }\n\n /**\n * For any stream, convert its codecs to MP4 codecs.\n * @param {string} contentType\n * @param {string} mimeType\n * @return {string}\n */\n static convertCodecs(contentType, mimeType) {\n const TransmuxerEngine = shaka.transmuxer.TransmuxerEngine;\n const transmuxerPlugin = TransmuxerEngine.findTransmuxer(mimeType);\n if (!transmuxerPlugin) {\n return mimeType;\n }\n const transmuxer = transmuxerPlugin();\n const codecs = transmuxer.convertCodecs(contentType, mimeType);\n transmuxer.destroy();\n return codecs;\n }\n};\n\n\n/**\n * @typedef {{\n * plugin: shaka.extern.TransmuxerPlugin,\n * priority: number\n * }}\n * @property {shaka.extern.TransmuxerPlugin} plugin\n * The associated plugin.\n * @property {number} priority\n * The plugin's priority.\n */\nshaka.transmuxer.TransmuxerEngine.PluginObject;\n\n\n/**\n * @private {!Object.}\n */\nshaka.transmuxer.TransmuxerEngine.transmuxerMap_ = {};\n\n\n/**\n * Priority level for transmuxer plugins.\n * If multiple plugins are provided for the same mime type, only the\n * highest-priority one is used.\n *\n * @enum {number}\n * @export\n */\nshaka.transmuxer.TransmuxerEngine.PluginPriority = {\n 'FALLBACK': 1,\n 'PREFERRED_SECONDARY': 2,\n 'PREFERRED': 3,\n 'APPLICATION': 4,\n};\n\n","/*! @license\n * Copyright 2008 The Closure Library Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Simple utilities for splitting URI strings.\n *\n * Uses features of RFC 3986 for parsing/formatting URIs:\n * http://www.ietf.org/rfc/rfc3986.txt\n *\n * @author gboyer@google.com (Garrett Boyer) - The \"lightened\" design.\n * @author msamuel@google.com (Mike Samuel) - Domain knowledge and regexes.\n */\n\ngoog.provide('goog.uri.utils');\ngoog.provide('goog.uri.utils.ComponentIndex');\n\n\n/**\n * A regular expression for breaking a URI into its component parts.\n *\n * {@link http://www.ietf.org/rfc/rfc3986.txt} says in Appendix B\n * As the \"first-match-wins\" algorithm is identical to the \"greedy\"\n * disambiguation method used by POSIX regular expressions, it is natural and\n * commonplace to use a regular expression for parsing the potential five\n * components of a URI reference.\n *\n * The following line is the regular expression for breaking-down a\n * well-formed URI reference into its components.\n *\n *
\n * ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?\n *  12            3  4          5       6  7        8 9\n * 
\n *\n * The numbers in the second line above are only to assist readability; they\n * indicate the reference points for each subexpression (i.e., each paired\n * parenthesis). We refer to the value matched for subexpression as $.\n * For example, matching the above expression to\n *
\n *     http://www.ics.uci.edu/pub/ietf/uri/#Related\n * 
\n * results in the following subexpression matches:\n *
\n *    $1 = http:\n *    $2 = http\n *    $3 = //www.ics.uci.edu\n *    $4 = www.ics.uci.edu\n *    $5 = /pub/ietf/uri/\n *    $6 = \n *    $7 = \n *    $8 = #Related\n *    $9 = Related\n * 
\n * where indicates that the component is not present, as is the\n * case for the query component in the above example. Therefore, we can\n * determine the value of the five components as\n *
\n *    scheme    = $2\n *    authority = $4\n *    path      = $5\n *    query     = $7\n *    fragment  = $9\n * 
\n *\n * The regular expression has been modified slightly to expose the\n * userInfo, domain, and port separately from the authority.\n * The modified version yields\n *
\n *    $1 = http              scheme\n *    $2 =        userInfo -\\\n *    $3 = www.ics.uci.edu   domain     | authority\n *    $4 =        port     -/\n *    $5 = /pub/ietf/uri/    path\n *    $6 =        query without ?\n *    $7 = Related           fragment without #\n * 
\n * @type {!RegExp}\n * @private\n */\ngoog.uri.utils.splitRe_ = new RegExp(\n '^' +\n '(?:' +\n '([^:/?#.]+)' + // scheme - ignore special characters\n // used by other URL parts such as :,\n // ?, /, #, and .\n ':)?' +\n '(?://' +\n '(?:([^/?#]*)@)?' + // userInfo\n '([^/#?]*?)' + // domain\n '(?::([0-9]+))?' + // port\n '(?=[/#?]|$)' + // authority-terminating character\n ')?' +\n '([^?#]+)?' + // path\n '(?:\\\\?([^#]*))?' + // query\n '(?:#(.*))?' + // fragment\n '$');\n\n\n/**\n * The index of each URI component in the return value of goog.uri.utils.split.\n * @enum {number}\n */\ngoog.uri.utils.ComponentIndex = {\n SCHEME: 1,\n USER_INFO: 2,\n DOMAIN: 3,\n PORT: 4,\n PATH: 5,\n QUERY_DATA: 6,\n FRAGMENT: 7\n};\n\n\n/**\n * Splits a URI into its component parts.\n *\n * Each component can be accessed via the component indices; for example:\n *
\n * goog.uri.utils.split(someStr)[goog.uri.utils.CompontentIndex.QUERY_DATA];\n * 
\n *\n * @param {string} uri The URI string to examine.\n * @return {!Array.} Each component still URI-encoded.\n * Each component that is present will contain the encoded value, whereas\n * components that are not present will be undefined or empty, depending\n * on the browser's regular expression implementation. Never null, since\n * arbitrary strings may still look like path names.\n */\ngoog.uri.utils.split = function(uri) {\n // See @return comment -- never null.\n return /** @type {!Array.} */ (\n uri.match(goog.uri.utils.splitRe_));\n};\n","/*! @license\n * Copyright 2006 The Closure Library Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Class for parsing and formatting URIs.\n *\n * Use new goog.Uri(string) to parse a URI string.\n *\n * e.g.: var myUri = new goog.Uri(window.location);\n *\n * Implements RFC 3986 for parsing/formatting URIs.\n * http://www.ietf.org/rfc/rfc3986.txt\n *\n * Some changes have been made to the interface (more like .NETs), though the\n * internal representation is now of un-encoded parts, this will change the\n * behavior slightly.\n *\n */\n\ngoog.provide('goog.Uri');\ngoog.provide('goog.Uri.QueryData');\n\ngoog.require('goog.asserts');\ngoog.require('goog.uri.utils');\ngoog.require('goog.uri.utils.ComponentIndex');\n\n\n\n/**\n * This class contains setters and getters for the parts of the URI.\n * The getXyz/setXyz methods return the decoded part\n * -- sonew goog.Uri('/foo%20bar').getPath() will return the\n * decoded path, /foo bar.\n *\n * Reserved characters (see RFC 3986 section 2.2) can be present in\n * their percent-encoded form in scheme, domain, and path URI components and\n * will not be auto-decoded. For example:\n * new goog.Uri('rel%61tive/path%2fto/resource').getPath() will\n * return relative/path%2fto/resource.\n *\n * The constructor accepts an optional unparsed, raw URI string. The parser\n * is relaxed, so special characters that aren't escaped but don't cause\n * ambiguities will not cause parse failures.\n *\n * All setters return this and so may be chained, a la\n * new goog.Uri('/foo').setFragment('part').toString().\n *\n * @param {*=} uri Optional string URI to parse, or if a goog.Uri is\n * passed, a clone is created.\n *\n * @constructor\n */\ngoog.Uri = function(uri) {\n // Parse in the uri string\n var m;\n if (uri instanceof goog.Uri) {\n this.setScheme(uri.getScheme());\n this.setUserInfo(uri.getUserInfo());\n this.setDomain(uri.getDomain());\n this.setPort(uri.getPort());\n this.setPath(uri.getPath());\n this.setQueryData(uri.getQueryData().clone());\n this.setFragment(uri.getFragment());\n } else if (uri && (m = goog.uri.utils.split(String(uri)))) {\n // Set the parts -- decoding as we do so.\n // COMPATABILITY NOTE - In IE, unmatched fields may be empty strings,\n // whereas in other browsers they will be undefined.\n this.setScheme(m[goog.uri.utils.ComponentIndex.SCHEME] || '', true);\n this.setUserInfo(m[goog.uri.utils.ComponentIndex.USER_INFO] || '', true);\n this.setDomain(m[goog.uri.utils.ComponentIndex.DOMAIN] || '', true);\n this.setPort(m[goog.uri.utils.ComponentIndex.PORT]);\n this.setPath(m[goog.uri.utils.ComponentIndex.PATH] || '', true);\n this.setQueryData(m[goog.uri.utils.ComponentIndex.QUERY_DATA] || '', true);\n this.setFragment(m[goog.uri.utils.ComponentIndex.FRAGMENT] || '', true);\n } else {\n this.queryData_ = new goog.Uri.QueryData(null, null);\n }\n};\n\n\n/**\n * Scheme such as \"http\".\n * @type {string}\n * @private\n */\ngoog.Uri.prototype.scheme_ = '';\n\n\n/**\n * User credentials in the form \"username:password\".\n * @type {string}\n * @private\n */\ngoog.Uri.prototype.userInfo_ = '';\n\n\n/**\n * Domain part, e.g. \"www.google.com\".\n * @type {string}\n * @private\n */\ngoog.Uri.prototype.domain_ = '';\n\n\n/**\n * Port, e.g. 8080.\n * @type {?number}\n * @private\n */\ngoog.Uri.prototype.port_ = null;\n\n\n/**\n * Path, e.g. \"/tests/img.png\".\n * @type {string}\n * @private\n */\ngoog.Uri.prototype.path_ = '';\n\n\n/**\n * Object representing query data.\n * @type {!goog.Uri.QueryData}\n * @private\n */\ngoog.Uri.prototype.queryData_;\n\n\n/**\n * The fragment without the #.\n * @type {string}\n * @private\n */\ngoog.Uri.prototype.fragment_ = '';\n\n\n/**\n * @return {string} The string form of the url.\n * @override\n */\ngoog.Uri.prototype.toString = function() {\n var out = [];\n\n var scheme = this.getScheme();\n if (scheme) {\n out.push(goog.Uri.encodeSpecialChars_(\n scheme, goog.Uri.reDisallowedInSchemeOrUserInfo_, true), ':');\n }\n\n var domain = this.getDomain();\n if (domain) {\n out.push('//');\n\n var userInfo = this.getUserInfo();\n if (userInfo) {\n out.push(goog.Uri.encodeSpecialChars_(\n userInfo, goog.Uri.reDisallowedInSchemeOrUserInfo_, true), '@');\n }\n\n out.push(goog.Uri.removeDoubleEncoding_(encodeURIComponent(domain)));\n\n var port = this.getPort();\n if (port != null) {\n out.push(':', String(port));\n }\n }\n\n var path = this.getPath();\n if (path) {\n if (this.hasDomain() && path.charAt(0) != '/') {\n out.push('/');\n }\n out.push(goog.Uri.encodeSpecialChars_(\n path,\n path.charAt(0) == '/' ?\n goog.Uri.reDisallowedInAbsolutePath_ :\n goog.Uri.reDisallowedInRelativePath_,\n true));\n }\n\n var query = this.getEncodedQuery();\n if (query) {\n out.push('?', query);\n }\n\n var fragment = this.getFragment();\n if (fragment) {\n out.push('#', goog.Uri.encodeSpecialChars_(\n fragment, goog.Uri.reDisallowedInFragment_));\n }\n return out.join('');\n};\n\n\n/**\n * Resolves the given relative URI (a goog.Uri object), using the URI\n * represented by this instance as the base URI.\n *\n * There are several kinds of relative URIs:
\n * 1. foo - replaces the last part of the path, the whole query and fragment
\n * 2. /foo - replaces the the path, the query and fragment
\n * 3. //foo - replaces everything from the domain on. foo is a domain name
\n * 4. ?foo - replace the query and fragment
\n * 5. #foo - replace the fragment only\n *\n * Additionally, if relative URI has a non-empty path, all \"..\" and \".\"\n * segments will be resolved, as described in RFC 3986.\n *\n * @param {goog.Uri} relativeUri The relative URI to resolve.\n * @return {!goog.Uri} The resolved URI.\n */\ngoog.Uri.prototype.resolve = function(relativeUri) {\n\n var absoluteUri = this.clone();\n if (absoluteUri.scheme_ === 'data') {\n // Cannot have a relative URI to a data URI.\n absoluteUri = new goog.Uri();\n }\n\n // we satisfy these conditions by looking for the first part of relativeUri\n // that is not blank and applying defaults to the rest\n\n var overridden = relativeUri.hasScheme();\n\n if (overridden) {\n absoluteUri.setScheme(relativeUri.getScheme());\n } else {\n overridden = relativeUri.hasUserInfo();\n }\n\n if (overridden) {\n absoluteUri.setUserInfo(relativeUri.getUserInfo());\n } else {\n overridden = relativeUri.hasDomain();\n }\n\n if (overridden) {\n absoluteUri.setDomain(relativeUri.getDomain());\n } else {\n overridden = relativeUri.hasPort();\n }\n\n var path = relativeUri.getPath();\n if (overridden) {\n absoluteUri.setPort(relativeUri.getPort());\n } else {\n overridden = relativeUri.hasPath();\n if (overridden) {\n // resolve path properly\n if (path.charAt(0) != '/') {\n // path is relative\n if (this.hasDomain() && !this.hasPath()) {\n // RFC 3986, section 5.2.3, case 1\n path = '/' + path;\n } else {\n // RFC 3986, section 5.2.3, case 2\n var lastSlashIndex = absoluteUri.getPath().lastIndexOf('/');\n if (lastSlashIndex != -1) {\n path = absoluteUri.getPath().substr(0, lastSlashIndex + 1) + path;\n }\n }\n }\n path = goog.Uri.removeDotSegments(path);\n }\n }\n\n if (overridden) {\n absoluteUri.setPath(path);\n } else {\n overridden = relativeUri.hasQuery();\n }\n\n if (overridden) {\n absoluteUri.setQueryData(relativeUri.getQueryData().clone());\n } else {\n overridden = relativeUri.hasFragment();\n }\n\n if (overridden) {\n absoluteUri.setFragment(relativeUri.getFragment());\n }\n\n return absoluteUri;\n};\n\n\n/**\n * Clones the URI instance.\n * @return {!goog.Uri} New instance of the URI object.\n */\ngoog.Uri.prototype.clone = function() {\n return new goog.Uri(this);\n};\n\n\n/**\n * @return {string} The encoded scheme/protocol for the URI.\n */\ngoog.Uri.prototype.getScheme = function() {\n return this.scheme_;\n};\n\n\n/**\n * Sets the scheme/protocol.\n * @param {string} newScheme New scheme value.\n * @param {boolean=} decode Optional param for whether to decode new value.\n * @return {!goog.Uri} Reference to this URI object.\n */\ngoog.Uri.prototype.setScheme = function(newScheme, decode) {\n this.scheme_ = decode ? goog.Uri.decodeOrEmpty_(newScheme, true) :\n newScheme;\n\n // remove an : at the end of the scheme so somebody can pass in\n // window.location.protocol\n if (this.scheme_) {\n this.scheme_ = this.scheme_.replace(/:$/, '');\n }\n return this;\n};\n\n\n/**\n * @return {boolean} Whether the scheme has been set.\n */\ngoog.Uri.prototype.hasScheme = function() {\n return !!this.scheme_;\n};\n\n\n/**\n * @return {string} The decoded user info.\n */\ngoog.Uri.prototype.getUserInfo = function() {\n return this.userInfo_;\n};\n\n\n/**\n * Sets the userInfo.\n * @param {string} newUserInfo New userInfo value.\n * @param {boolean=} decode Optional param for whether to decode new value.\n * @return {!goog.Uri} Reference to this URI object.\n */\ngoog.Uri.prototype.setUserInfo = function(newUserInfo, decode) {\n this.userInfo_ = decode ? goog.Uri.decodeOrEmpty_(newUserInfo) :\n newUserInfo;\n return this;\n};\n\n\n/**\n * @return {boolean} Whether the user info has been set.\n */\ngoog.Uri.prototype.hasUserInfo = function() {\n return !!this.userInfo_;\n};\n\n\n/**\n * @return {string} The decoded domain.\n */\ngoog.Uri.prototype.getDomain = function() {\n return this.domain_;\n};\n\n\n/**\n * Sets the domain.\n * @param {string} newDomain New domain value.\n * @param {boolean=} decode Optional param for whether to decode new value.\n * @return {!goog.Uri} Reference to this URI object.\n */\ngoog.Uri.prototype.setDomain = function(newDomain, decode) {\n this.domain_ = decode ? goog.Uri.decodeOrEmpty_(newDomain, true) :\n newDomain;\n return this;\n};\n\n\n/**\n * @return {boolean} Whether the domain has been set.\n */\ngoog.Uri.prototype.hasDomain = function() {\n return !!this.domain_;\n};\n\n\n/**\n * @return {?number} The port number.\n */\ngoog.Uri.prototype.getPort = function() {\n return this.port_;\n};\n\n\n/**\n * Sets the port number.\n * @param {*} newPort Port number. Will be explicitly casted to a number.\n * @return {!goog.Uri} Reference to this URI object.\n */\ngoog.Uri.prototype.setPort = function(newPort) {\n if (newPort) {\n newPort = Number(newPort);\n if (isNaN(newPort) || newPort < 0) {\n throw Error('Bad port number ' + newPort);\n }\n this.port_ = newPort;\n } else {\n this.port_ = null;\n }\n\n return this;\n};\n\n\n/**\n * @return {boolean} Whether the port has been set.\n */\ngoog.Uri.prototype.hasPort = function() {\n return this.port_ != null;\n};\n\n\n/**\n * @return {string} The decoded path.\n */\ngoog.Uri.prototype.getPath = function() {\n return this.path_;\n};\n\n\n/**\n * Sets the path.\n * @param {string} newPath New path value.\n * @param {boolean=} decode Optional param for whether to decode new value.\n * @return {!goog.Uri} Reference to this URI object.\n */\ngoog.Uri.prototype.setPath = function(newPath, decode) {\n this.path_ = decode ? goog.Uri.decodeOrEmpty_(newPath, true) : newPath;\n return this;\n};\n\n\n/**\n * @return {boolean} Whether the path has been set.\n */\ngoog.Uri.prototype.hasPath = function() {\n return !!this.path_;\n};\n\n\n/**\n * @return {boolean} Whether the query string has been set.\n */\ngoog.Uri.prototype.hasQuery = function() {\n return this.queryData_.toString() !== '';\n};\n\n\n/**\n * Sets the query data.\n * @param {goog.Uri.QueryData|string|undefined} queryData QueryData object.\n * @param {boolean=} decode Optional param for whether to decode new value.\n * Applies only if queryData is a string.\n * @return {!goog.Uri} Reference to this URI object.\n */\ngoog.Uri.prototype.setQueryData = function(queryData, decode) {\n if (queryData instanceof goog.Uri.QueryData) {\n this.queryData_ = queryData;\n } else {\n if (!decode) {\n // QueryData accepts encoded query string, so encode it if\n // decode flag is not true.\n queryData = goog.Uri.encodeSpecialChars_(queryData,\n goog.Uri.reDisallowedInQuery_);\n }\n this.queryData_ = new goog.Uri.QueryData(queryData, null);\n }\n\n return this;\n};\n\n\n/**\n * @return {string} The encoded URI query, not including the ?.\n */\ngoog.Uri.prototype.getEncodedQuery = function() {\n return this.queryData_.toString();\n};\n\n\n/**\n * @return {string} The decoded URI query, not including the ?.\n */\ngoog.Uri.prototype.getDecodedQuery = function() {\n return this.queryData_.toDecodedString();\n};\n\n\n/**\n * Returns the query data.\n * @return {!goog.Uri.QueryData} QueryData object.\n */\ngoog.Uri.prototype.getQueryData = function() {\n return this.queryData_;\n};\n\n\n/**\n * @return {string} The URI fragment, not including the #.\n */\ngoog.Uri.prototype.getFragment = function() {\n return this.fragment_;\n};\n\n\n/**\n * Sets the URI fragment.\n * @param {string} newFragment New fragment value.\n * @param {boolean=} decode Optional param for whether to decode new value.\n * @return {!goog.Uri} Reference to this URI object.\n */\ngoog.Uri.prototype.setFragment = function(newFragment, decode) {\n this.fragment_ = decode ? goog.Uri.decodeOrEmpty_(newFragment) :\n newFragment;\n return this;\n};\n\n\n/**\n * @return {boolean} Whether the URI has a fragment set.\n */\ngoog.Uri.prototype.hasFragment = function() {\n return !!this.fragment_;\n};\n\n\n//==============================================================================\n// Static members\n//==============================================================================\n\n\n/**\n * Removes dot segments in given path component, as described in\n * RFC 3986, section 5.2.4.\n *\n * @param {string} path A non-empty path component.\n * @return {string} Path component with removed dot segments.\n */\ngoog.Uri.removeDotSegments = function(path) {\n if (path == '..' || path == '.') {\n return '';\n\n } else if (path.indexOf('./') == -1 &&\n path.indexOf('/.') == -1) {\n // This optimization detects uris which do not contain dot-segments,\n // and as a consequence do not require any processing.\n return path;\n\n } else {\n var leadingSlash = (path.lastIndexOf('/', 0) == 0);\n var segments = path.split('/');\n var out = [];\n\n for (var pos = 0; pos < segments.length; ) {\n var segment = segments[pos++];\n\n if (segment == '.') {\n if (leadingSlash && pos == segments.length) {\n out.push('');\n }\n } else if (segment == '..') {\n if (out.length > 1 || out.length == 1 && out[0] != '') {\n out.pop();\n }\n if (leadingSlash && pos == segments.length) {\n out.push('');\n }\n } else {\n out.push(segment);\n leadingSlash = true;\n }\n }\n\n return out.join('/');\n }\n};\n\n\n/**\n * Decodes a value or returns the empty string if it isn't defined or empty.\n * @param {string|undefined} val Value to decode.\n * @param {boolean=} preserveReserved If true, restricted characters will\n * not be decoded.\n * @return {string} Decoded value.\n * @private\n */\ngoog.Uri.decodeOrEmpty_ = function(val, preserveReserved) {\n // Don't use UrlDecode() here because val is not a query parameter.\n if (!val) {\n return '';\n }\n\n return preserveReserved ? decodeURI(val) : decodeURIComponent(val);\n};\n\n\n/**\n * If unescapedPart is non null, then escapes any characters in it that aren't\n * valid characters in a url and also escapes any special characters that\n * appear in extra.\n *\n * @param {(?string|undefined)} unescapedPart The string to encode.\n * @param {RegExp} extra A character set of characters in [\\01-\\177].\n * @param {boolean=} removeDoubleEncoding If true, remove double percent\n * encoding.\n * @return {?string} null iff unescapedPart == null.\n * @private\n */\ngoog.Uri.encodeSpecialChars_ = function(unescapedPart, extra,\n removeDoubleEncoding) {\n if (unescapedPart != null) {\n var encoded = encodeURI(unescapedPart).\n replace(extra, goog.Uri.encodeChar_);\n if (removeDoubleEncoding) {\n // encodeURI double-escapes %XX sequences used to represent restricted\n // characters in some URI components, remove the double escaping here.\n encoded = goog.Uri.removeDoubleEncoding_(encoded);\n }\n return encoded;\n }\n return null;\n};\n\n\n/**\n * Converts a character in [\\01-\\177] to its unicode character equivalent.\n * @param {string} ch One character string.\n * @return {string} Encoded string.\n * @private\n */\ngoog.Uri.encodeChar_ = function(ch) {\n var n = ch.charCodeAt(0);\n return '%' + ((n >> 4) & 0xf).toString(16) + (n & 0xf).toString(16);\n};\n\n\n/**\n * Removes double percent-encoding from a string.\n * @param {string} doubleEncodedString String\n * @return {string} String with double encoding removed.\n * @private\n */\ngoog.Uri.removeDoubleEncoding_ = function(doubleEncodedString) {\n return doubleEncodedString.replace(/%25([0-9a-fA-F]{2})/g, '%$1');\n};\n\n\n/**\n * Regular expression for characters that are disallowed in the scheme or\n * userInfo part of the URI.\n * @type {RegExp}\n * @private\n */\ngoog.Uri.reDisallowedInSchemeOrUserInfo_ = /[#\\/\\?@]/g;\n\n\n/**\n * Regular expression for characters that are disallowed in a relative path.\n * Colon is included due to RFC 3986 3.3.\n * @type {RegExp}\n * @private\n */\ngoog.Uri.reDisallowedInRelativePath_ = /[\\#\\?:]/g;\n\n\n/**\n * Regular expression for characters that are disallowed in an absolute path.\n * @type {RegExp}\n * @private\n */\ngoog.Uri.reDisallowedInAbsolutePath_ = /[\\#\\?]/g;\n\n\n/**\n * Regular expression for characters that are disallowed in the query.\n * @type {RegExp}\n * @private\n */\ngoog.Uri.reDisallowedInQuery_ = /[\\#\\?@]/g;\n\n\n/**\n * Regular expression for characters that are disallowed in the fragment.\n * @type {RegExp}\n * @private\n */\ngoog.Uri.reDisallowedInFragment_ = /#/g;\n\n\n\n/**\n * Class used to represent URI query parameters. It is essentially a hash of\n * name-value pairs, though a name can be present more than once.\n *\n * Has the same interface as the collections in goog.structs.\n *\n * @param {?string=} query Optional encoded query string to parse into\n * the object.\n * @param {goog.Uri=} uri Optional uri object that should have its\n * cache invalidated when this object updates. Deprecated -- this\n * is no longer required.\n * @constructor\n * @final\n */\ngoog.Uri.QueryData = function(query, uri) {\n /**\n * Encoded query string, or null if it requires computing from the key map.\n * @type {?string}\n * @private\n */\n this.encodedQuery_ = query || null;\n};\n\n\n/**\n * If the underlying key map is not yet initialized, it parses the\n * query string and fills the map with parsed data.\n * @private\n */\ngoog.Uri.QueryData.prototype.ensureKeyMapInitialized_ = function() {\n if (!this.keyMap_) {\n this.keyMap_ = {};\n this.count_ = 0;\n\n if (this.encodedQuery_) {\n var pairs = this.encodedQuery_.split('&');\n for (var i = 0; i < pairs.length; i++) {\n var indexOfEquals = pairs[i].indexOf('=');\n var name = null;\n var value = null;\n if (indexOfEquals >= 0) {\n name = pairs[i].substring(0, indexOfEquals);\n value = pairs[i].substring(indexOfEquals + 1);\n } else {\n name = pairs[i];\n }\n name = decodeURIComponent(name.replace(/\\+/g, ' '));\n value = value || '';\n this.add(name, decodeURIComponent(value.replace(/\\+/g, ' ')));\n }\n }\n }\n};\n\n\n/**\n * The map containing name/value or name/array-of-values pairs.\n * May be null if it requires parsing from the query string.\n *\n * We need to use a Map because we cannot guarantee that the key names will\n * not be problematic for IE.\n *\n * @type {Object.>}\n * @private\n */\ngoog.Uri.QueryData.prototype.keyMap_ = null;\n\n\n/**\n * The number of params, or null if it requires computing.\n * @type {?number}\n * @private\n */\ngoog.Uri.QueryData.prototype.count_ = null;\n\n\n/**\n * @return {?number} The number of parameters.\n */\ngoog.Uri.QueryData.prototype.getCount = function() {\n this.ensureKeyMapInitialized_();\n return this.count_;\n};\n\n\n/**\n * Adds a key value pair.\n * @param {string} key Name.\n * @param {string} value Value.\n * @return {!goog.Uri.QueryData} Instance of this object.\n */\ngoog.Uri.QueryData.prototype.add = function(key, value) {\n this.ensureKeyMapInitialized_();\n // Invalidate the cache.\n this.encodedQuery_ = null;\n\n var values = this.keyMap_.hasOwnProperty(key) ? this.keyMap_[key] : null;\n if (!values) {\n this.keyMap_[key] = (values = []);\n }\n values.push(value);\n goog.asserts.assert(this.count_ != null, 'Should not be null.');\n this.count_++;\n return this;\n};\n\n/**\n * Sets a key value pair and removes all other keys with the same value.\n *\n * @param {string} key Name.\n * @param {string} value Value.\n * @return {!goog.Uri.QueryData} Instance of this object.\n */\n goog.Uri.QueryData.prototype.set = function(key, value) {\n this.ensureKeyMapInitialized_();\n // Invalidate the cache.\n this.encodedQuery_ = null;\n\n if (!this.keyMap_.hasOwnProperty(key)) {\n this.add(key, value);\n } else {\n this.keyMap_[key] = [value];\n }\n\n return this;\n};\n\n\n/**\n * Get the values from a key.\n *\n * @param {string} key Name.\n * @return {Array.}\n */\n goog.Uri.QueryData.prototype.get = function(key) {\n this.ensureKeyMapInitialized_();\n return this.keyMap_[key] || [];\n};\n\n\n/**\n * @return {string} Encoded query string.\n * @override\n */\ngoog.Uri.QueryData.prototype.toString = function() {\n if (this.encodedQuery_) {\n return this.encodedQuery_;\n }\n\n if (!this.keyMap_) {\n return '';\n }\n\n var sb = [];\n\n for (var key in this.keyMap_) {\n var encodedKey = encodeURIComponent(key);\n var val = this.keyMap_[key];\n for (var j = 0; j < val.length; j++) {\n var param = encodedKey;\n // Ensure that null and undefined are encoded into the url as\n // literal strings.\n if (val[j] !== '') {\n param += '=' + encodeURIComponent(val[j]);\n }\n sb.push(param);\n }\n }\n\n return this.encodedQuery_ = sb.join('&');\n};\n\n\n/**\n * @return {string} Decoded query string.\n */\ngoog.Uri.QueryData.prototype.toDecodedString = function() {\n return goog.Uri.decodeOrEmpty_(this.toString());\n};\n\n\n/**\n * Clone the query data instance.\n * @return {!goog.Uri.QueryData} New instance of the QueryData object.\n */\ngoog.Uri.QueryData.prototype.clone = function() {\n var rv = new goog.Uri.QueryData();\n rv.encodedQuery_ = this.encodedQuery_;\n if (this.keyMap_) {\n var cloneMap = {};\n for (var key in this.keyMap_) {\n cloneMap[key] = this.keyMap_[key].concat();\n }\n rv.keyMap_ = cloneMap;\n rv.count_ = this.count_;\n }\n return rv;\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.Uint8ArrayUtils');\n\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.StringUtils');\n\n\n// TODO: revisit this when Closure Compiler supports partially-exported classes.\n/**\n * @summary A set of Uint8Array utility functions.\n * @export\n */\nshaka.util.Uint8ArrayUtils = class {\n /**\n * Convert a buffer to a base64 string. The output will be standard\n * alphabet as opposed to base64url safe alphabet.\n * @param {BufferSource} data\n * @return {string}\n * @export\n */\n static toStandardBase64(data) {\n const bytes = shaka.util.StringUtils.fromCharCode(\n shaka.util.BufferUtils.toUint8(data));\n return btoa(bytes);\n }\n\n /**\n * Convert a buffer to a base64 string. The output will always use the\n * alternate encoding/alphabet also known as \"base64url\".\n * @param {BufferSource} data\n * @param {boolean=} padding If true, pad the output with equals signs.\n * Defaults to true.\n * @return {string}\n * @export\n */\n static toBase64(data, padding) {\n padding = (padding == undefined) ? true : padding;\n const base64 = shaka.util.Uint8ArrayUtils.toStandardBase64(data)\n .replace(/\\+/g, '-').replace(/\\//g, '_');\n return padding ? base64 : base64.replace(/[=]*$/, '');\n }\n\n /**\n * Convert a base64 string to a Uint8Array. Accepts either the standard\n * alphabet or the alternate \"base64url\" alphabet.\n * @param {string} str\n * @return {!Uint8Array}\n * @export\n */\n static fromBase64(str) {\n // atob creates a \"raw string\" where each character is interpreted as a\n // byte.\n const bytes = window.atob(str.replace(/-/g, '+').replace(/_/g, '/'));\n const result = new Uint8Array(bytes.length);\n for (let i = 0; i < bytes.length; ++i) {\n result[i] = bytes.charCodeAt(i);\n }\n return result;\n }\n\n\n /**\n * Convert a hex string to a Uint8Array.\n * @param {string} str\n * @return {!Uint8Array}\n * @export\n */\n static fromHex(str) {\n const size = str.length / 2;\n const arr = new Uint8Array(size);\n for (let i = 0; i < size; i++) {\n arr[i] = window.parseInt(str.substr(i * 2, 2), 16);\n }\n return arr;\n }\n\n\n /**\n * Convert a buffer to a hex string.\n * @param {BufferSource} data\n * @return {string}\n * @export\n */\n static toHex(data) {\n const arr = shaka.util.BufferUtils.toUint8(data);\n let hex = '';\n for (let value of arr) {\n value = value.toString(16);\n if (value.length == 1) {\n value = '0' + value;\n }\n hex += value;\n }\n return hex;\n }\n\n\n /**\n * Concatenate buffers.\n * @param {...BufferSource} varArgs\n * @return {!Uint8Array}\n * @export\n */\n static concat(...varArgs) {\n const BufferUtils = shaka.util.BufferUtils;\n let totalLength = 0;\n for (let i = 0; i < varArgs.length; ++i) {\n const value = varArgs[i];\n totalLength += value.byteLength;\n }\n\n const result = new Uint8Array(totalLength);\n let offset = 0;\n\n for (let i = 0; i < varArgs.length; ++i) {\n const value = varArgs[i];\n if (ArrayBuffer.isView(value) &&\n /** @type {TypedArray} */ (value).BYTES_PER_ELEMENT === 1) {\n result.set(/** @type {!Uint8Array} */(value), offset);\n } else {\n result.set(BufferUtils.toUint8(value), offset);\n }\n offset += value.byteLength;\n }\n\n return result;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.ManifestParserUtils');\n\ngoog.require('goog.Uri');\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.StringUtils');\ngoog.require('shaka.util.Uint8ArrayUtils');\n\n\n/**\n * @summary Utility functions for manifest parsing.\n */\nshaka.util.ManifestParserUtils = class {\n /**\n * Resolves an array of relative URIs to the given base URIs. This will result\n * in M*N number of URIs.\n *\n * Note: This method is slow in SmartTVs and Consoles. It should only be\n * called when necessary.\n *\n * @param {!Array.} baseUris\n * @param {!Array.} relativeUris\n * @param {string=} extraQueryParams\n * @return {!Array.}\n */\n static resolveUris(baseUris, relativeUris, extraQueryParams = '') {\n if (relativeUris.length == 0) {\n return baseUris;\n }\n\n if (baseUris.length == 1 && relativeUris.length == 1) {\n const baseUri = new goog.Uri(baseUris[0]);\n const relativeUri = new goog.Uri(relativeUris[0]);\n const resolvedUri = baseUri.resolve(relativeUri);\n if (extraQueryParams) {\n resolvedUri.setQueryData(extraQueryParams);\n }\n return [resolvedUri.toString()];\n }\n\n const relativeAsGoog = relativeUris.map((uri) => new goog.Uri(uri));\n\n // For each base URI, this code resolves it with every relative URI.\n // The result is a single array containing all the resolved URIs.\n const resolvedUris = [];\n for (const baseStr of baseUris) {\n const base = new goog.Uri(baseStr);\n for (const relative of relativeAsGoog) {\n const resolvedUri = base.resolve(relative);\n if (extraQueryParams) {\n resolvedUri.setQueryData(extraQueryParams);\n }\n resolvedUris.push(resolvedUri.toString());\n }\n }\n\n return resolvedUris;\n }\n\n\n /**\n * Creates a DrmInfo object from the given info.\n *\n * @param {string} keySystem\n * @param {string} encryptionScheme\n * @param {Array.} initData\n * @param {string} [keySystemUri]\n * @return {shaka.extern.DrmInfo}\n */\n static createDrmInfo(keySystem, encryptionScheme, initData, keySystemUri) {\n const drmInfo = {\n keySystem,\n encryptionScheme,\n licenseServerUri: '',\n distinctiveIdentifierRequired: false,\n persistentStateRequired: false,\n audioRobustness: '',\n videoRobustness: '',\n serverCertificate: null,\n serverCertificateUri: '',\n sessionType: '',\n initData: initData || [],\n keyIds: new Set(),\n };\n\n if (keySystemUri) {\n drmInfo.keySystemUris = new Set([keySystemUri]);\n }\n\n return drmInfo;\n }\n\n /**\n * Creates a DrmInfo object from ClearKeys.\n *\n * @param {!Map.} clearKeys\n * @param {string=} encryptionScheme\n * @return {shaka.extern.DrmInfo}\n */\n static createDrmInfoFromClearKeys(clearKeys, encryptionScheme = 'cenc') {\n const StringUtils = shaka.util.StringUtils;\n const Uint8ArrayUtils = shaka.util.Uint8ArrayUtils;\n const keys = [];\n const keyIds = [];\n const originalKeyIds = [];\n\n clearKeys.forEach((key, keyId) => {\n let kid = keyId;\n if (kid.length != 22) {\n kid = Uint8ArrayUtils.toBase64(\n Uint8ArrayUtils.fromHex(keyId), false);\n }\n let k = key;\n if (k.length != 22) {\n k = Uint8ArrayUtils.toBase64(\n Uint8ArrayUtils.fromHex(key), false);\n }\n const keyObj = {\n kty: 'oct',\n kid: kid,\n k: k,\n };\n\n keys.push(keyObj);\n keyIds.push(keyObj.kid);\n originalKeyIds.push(keyId);\n });\n\n const jwkSet = {keys: keys};\n const license = JSON.stringify(jwkSet);\n\n // Use the keyids init data since is suggested by EME.\n // Suggestion: https://bit.ly/2JYcNTu\n // Format: https://www.w3.org/TR/eme-initdata-keyids/\n const initDataStr = JSON.stringify({'kids': keyIds});\n const initData =\n shaka.util.BufferUtils.toUint8(StringUtils.toUTF8(initDataStr));\n const initDatas = [{initData: initData, initDataType: 'keyids'}];\n\n return {\n keySystem: 'org.w3.clearkey',\n encryptionScheme,\n licenseServerUri: 'data:application/json;base64,' + window.btoa(license),\n distinctiveIdentifierRequired: false,\n persistentStateRequired: false,\n audioRobustness: '',\n videoRobustness: '',\n serverCertificate: null,\n serverCertificateUri: '',\n sessionType: '',\n initData: initDatas,\n keyIds: new Set(originalKeyIds),\n };\n }\n\n\n /**\n * Attempts to guess which codecs from the codecs list belong to a given\n * content type.\n * Assumes that at least one codec is correct, and throws if none are.\n *\n * @param {string} contentType\n * @param {!Array.} codecs\n * @return {string}\n */\n static guessCodecs(contentType, codecs) {\n if (codecs.length == 1) {\n return codecs[0];\n }\n\n const match = shaka.util.ManifestParserUtils.guessCodecsSafe(\n contentType, codecs);\n // A failure is specifically denoted by null; an empty string represents a\n // valid match of no codec.\n if (match != null) {\n return match;\n }\n\n // Unable to guess codecs.\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.HLS_COULD_NOT_GUESS_CODECS,\n codecs);\n }\n\n\n /**\n * Attempts to guess which codecs from the codecs list belong to a given\n * content type. Does not assume a single codec is anything special, and does\n * not throw if it fails to match.\n *\n * @param {string} contentType\n * @param {!Array.} codecs\n * @return {?string} or null if no match is found\n */\n static guessCodecsSafe(contentType, codecs) {\n const formats = shaka.util.ManifestParserUtils\n .CODEC_REGEXPS_BY_CONTENT_TYPE_[contentType];\n for (const format of formats) {\n for (const codec of codecs) {\n if (format.test(codec.trim())) {\n return codec.trim();\n }\n }\n }\n\n // Text does not require a codec string.\n if (contentType == shaka.util.ManifestParserUtils.ContentType.TEXT) {\n return '';\n }\n\n return null;\n }\n\n\n /**\n * Attempts to guess which codecs from the codecs list belong to a given\n * content.\n *\n * @param {string} contentType\n * @param {!Array.} codecs\n * @return {!Array.}\n */\n static guessAllCodecsSafe(contentType, codecs) {\n const allCodecs = [];\n const formats = shaka.util.ManifestParserUtils\n .CODEC_REGEXPS_BY_CONTENT_TYPE_[contentType];\n for (const format of formats) {\n for (const codec of codecs) {\n if (format.test(codec.trim())) {\n allCodecs.push(codec.trim());\n }\n }\n }\n\n return allCodecs;\n }\n};\n\n\n/**\n * @enum {string}\n */\nshaka.util.ManifestParserUtils.ContentType = {\n VIDEO: 'video',\n AUDIO: 'audio',\n TEXT: 'text',\n IMAGE: 'image',\n APPLICATION: 'application',\n};\n\n\n/**\n * @enum {string}\n */\nshaka.util.ManifestParserUtils.TextStreamKind = {\n SUBTITLE: 'subtitle',\n CLOSED_CAPTION: 'caption',\n};\n\n\n/**\n * Specifies how tolerant the player is of inaccurate segment start times and\n * end times within a manifest. For example, gaps or overlaps between segments\n * in a SegmentTimeline which are greater than or equal to this value will\n * result in a warning message.\n *\n * @const {number}\n */\nshaka.util.ManifestParserUtils.GAP_OVERLAP_TOLERANCE_SECONDS = 1 / 15;\n\n\n/**\n * A list of regexps to detect well-known video codecs.\n *\n * @const {!Array.}\n * @private\n */\nshaka.util.ManifestParserUtils.VIDEO_CODEC_REGEXPS_ = [\n /^avc/,\n /^hev/,\n /^hvc/,\n /^vvc/,\n /^vvi/,\n /^vp0?[89]/,\n /^av01/,\n /^dvh/, // Dolby Vision based in HEVC\n /^dva/, // Dolby Vision based in AVC\n /^dav/, // Dolby Vision based in AV1\n];\n\n\n/**\n * A list of regexps to detect well-known audio codecs.\n *\n * @const {!Array.}\n * @private\n */\nshaka.util.ManifestParserUtils.AUDIO_CODEC_REGEXPS_ = [\n /^vorbis$/,\n /^Opus$/, // correct codec string according to RFC 6381 section 3.3\n /^opus$/, // some manifests wrongfully use this\n /^fLaC$/, // correct codec string according to RFC 6381 section 3.3\n /^flac$/, // some manifests wrongfully use this\n /^mp4a/,\n /^[ae]c-3$/,\n /^ac-4/,\n /^dts[cex]$/, // DTS Digital Surround (dtsc), DTS Express (dtse), DTS:X (dtsx)\n /^iamf/,\n /^mhm[12]/, // MPEG-H Audio LC\n];\n\n\n/**\n * A list of regexps to detect well-known text codecs.\n *\n * @const {!Array.}\n * @private\n */\nshaka.util.ManifestParserUtils.TEXT_CODEC_REGEXPS_ = [\n /^vtt$/,\n /^wvtt/,\n /^stpp/,\n];\n\n\n/**\n * @const {!Object.>}\n */\nshaka.util.ManifestParserUtils.CODEC_REGEXPS_BY_CONTENT_TYPE_ = {\n 'audio': shaka.util.ManifestParserUtils.AUDIO_CODEC_REGEXPS_,\n 'video': shaka.util.ManifestParserUtils.VIDEO_CODEC_REGEXPS_,\n 'text': shaka.util.ManifestParserUtils.TEXT_CODEC_REGEXPS_,\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.MimeUtils');\n\ngoog.require('shaka.transmuxer.TransmuxerEngine');\ngoog.require('shaka.util.ManifestParserUtils');\n\n/**\n * @summary A set of utility functions for dealing with MIME types.\n * @export\n */\nshaka.util.MimeUtils = class {\n /**\n * Takes a MIME type and optional codecs string and produces the full MIME\n * type. Also remove the codecs for raw formats.\n *\n * @param {string} mimeType\n * @param {string=} codecs\n * @return {string}\n * @export\n */\n static getFullType(mimeType, codecs) {\n let fullMimeType = mimeType;\n if (codecs && !shaka.util.MimeUtils.RAW_FORMATS.includes(mimeType)) {\n fullMimeType += '; codecs=\"' + codecs + '\"';\n }\n return fullMimeType;\n }\n\n /**\n * Takes a MIME type and optional codecs string and produces the full MIME\n * type.\n *\n * @param {string} mimeType\n * @param {string=} codecs\n * @return {string}\n * @export\n */\n static getFullTypeWithAllCodecs(mimeType, codecs) {\n let fullMimeType = mimeType;\n if (codecs) {\n fullMimeType += '; codecs=\"' + codecs + '\"';\n }\n return fullMimeType;\n }\n\n /**\n * Takes a MIME type and a codecs string and produces the full MIME\n * type. If it's a transport stream, convert its codecs to MP4 codecs.\n * Otherwise for multiplexed content, convert the video MIME types to\n * their audio equivalents if the content type is audio.\n *\n * @param {string} mimeType\n * @param {string} codecs\n * @param {string} contentType\n * @return {string}\n */\n static getFullOrConvertedType(mimeType, codecs, contentType) {\n const MimeUtils = shaka.util.MimeUtils;\n const fullMimeType = MimeUtils.getFullType(mimeType, codecs);\n const fullMimeTypeWithAllCodecs = MimeUtils.getFullTypeWithAllCodecs(\n mimeType, codecs);\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const TransmuxerEngine = shaka.transmuxer.TransmuxerEngine;\n\n if (TransmuxerEngine.isSupported(fullMimeTypeWithAllCodecs, contentType)) {\n return TransmuxerEngine.convertCodecs(\n contentType, fullMimeTypeWithAllCodecs);\n } else if (mimeType != 'video/mp2t' && contentType == ContentType.AUDIO) {\n // video/mp2t is the correct mime type for TS audio, so only replace the\n // word \"video\" with \"audio\" for non-TS audio content.\n return fullMimeType.replace('video', 'audio');\n }\n return fullMimeType;\n }\n\n\n /**\n * Takes a Stream object and produces an extended MIME type with information\n * beyond the container and codec type, when available.\n *\n * @param {shaka.extern.Stream} stream\n * @param {string} mimeType\n * @param {string} codecs\n * @return {string}\n */\n static getExtendedType(stream, mimeType, codecs) {\n const components = [mimeType];\n\n const extendedMimeParams = shaka.util.MimeUtils.EXTENDED_MIME_PARAMETERS_;\n extendedMimeParams.forEach((mimeKey, streamKey) => {\n const value = stream[streamKey];\n if (streamKey == 'codecs') {\n if (shaka.util.MimeUtils.RAW_FORMATS.includes(stream.mimeType)) {\n // Skip codecs for raw formats\n } else {\n components.push('codecs=\"' + codecs + '\"');\n }\n } else if (value) {\n components.push(mimeKey + '=\"' + value + '\"');\n }\n });\n if (stream.hdr == 'PQ') {\n components.push('eotf=\"smpte2084\"');\n }\n\n return components.join(';');\n }\n\n /**\n * Takes a full MIME type (with codecs) or basic MIME type (without codecs)\n * and returns a container type string (\"mp2t\", \"mp4\", \"webm\", etc.)\n *\n * @param {string} mimeType\n * @return {string}\n */\n static getContainerType(mimeType) {\n return mimeType.split(';')[0].split('/')[1];\n }\n\n /**\n * Split a list of codecs encoded in a string into a list of codecs.\n * @param {string} codecs\n * @return {!Array.}\n */\n static splitCodecs(codecs) {\n return codecs.split(',');\n }\n\n /**\n * Get the normalized codec from a codec string,\n * independently of their container.\n *\n * @param {string} codecString\n * @return {string}\n */\n static getNormalizedCodec(codecString) {\n const parts =\n shaka.util.MimeUtils.getCodecParts_(codecString);\n const base = parts[0];\n const profile = parts[1].toLowerCase();\n switch (true) {\n case base === 'mp4a' && profile === '69':\n case base === 'mp4a' && profile === '6b':\n case base === 'mp4a' && profile === '40.34':\n return 'mp3';\n case base === 'mp4a' && profile === '66':\n case base === 'mp4a' && profile === '67':\n case base === 'mp4a' && profile === '68':\n case base === 'mp4a' && profile === '40.2':\n case base === 'mp4a' && profile === '40.02':\n case base === 'mp4a' && profile === '40.5':\n case base === 'mp4a' && profile === '40.05':\n case base === 'mp4a' && profile === '40.29':\n case base === 'mp4a' && profile === '40.42': // Extended HE-AAC\n return 'aac';\n case base === 'mp4a' && profile === 'a5':\n return 'ac-3'; // Dolby Digital\n case base === 'mp4a' && profile === 'a6':\n return 'ec-3'; // Dolby Digital Plus\n case base === 'mp4a' && profile === 'b2':\n return 'dtsx'; // DTS:X\n case base === 'mp4a' && profile === 'a9':\n return 'dtsc'; // DTS Digital Surround\n case base === 'vp09':\n return 'vp9';\n case base === 'avc1':\n case base === 'avc3':\n return 'avc'; // H264\n case base === 'hvc1':\n case base === 'hev1':\n return 'hevc'; // H265\n case base === 'vvc1':\n case base === 'vvi1':\n return 'vvc'; // H266\n case base === 'dvh1':\n case base === 'dvhe':\n if (profile && profile.startsWith('05')) {\n return 'dovi-p5'; // Dolby Vision profile 5\n }\n return 'dovi-hevc'; // Dolby Vision based in HEVC\n case base === 'dvav':\n case base === 'dva1':\n return 'dovi-avc'; // Dolby Vision based in AVC\n case base === 'dav1':\n return 'dovi-av1'; // Dolby Vision based in AV1\n case base === 'dvc1':\n case base === 'dvi1':\n return 'dovi-vvc'; // Dolby Vision based in VVC\n }\n return base;\n }\n\n /**\n * Get the base codec from a codec string.\n *\n * @param {string} codecString\n * @return {string}\n */\n static getCodecBase(codecString) {\n const codecsBase = [];\n for (const codec of codecString.split(',')) {\n const parts = shaka.util.MimeUtils.getCodecParts_(codec);\n codecsBase.push(parts[0]);\n }\n return codecsBase.sort().join(',');\n }\n\n /**\n * Takes a full MIME type (with codecs) or basic MIME type (without codecs)\n * and returns a basic MIME type (without codecs or other parameters).\n *\n * @param {string} mimeType\n * @return {string}\n */\n static getBasicType(mimeType) {\n return mimeType.split(';')[0];\n }\n\n /**\n * Takes a MIME type and returns the codecs parameter, or an empty string if\n * there is no codecs parameter.\n *\n * @param {string} mimeType\n * @return {string}\n */\n static getCodecs(mimeType) {\n // Parse the basic MIME type from its parameters.\n const pieces = mimeType.split(/ *; */);\n pieces.shift(); // Remove basic MIME type from pieces.\n\n const codecs = pieces.find((piece) => piece.startsWith('codecs='));\n if (!codecs) {\n return '';\n }\n\n // The value may be quoted, so remove quotes at the beginning or end.\n const value = codecs.split('=')[1].replace(/^\"|\"$/g, '');\n return value;\n }\n\n /**\n * Checks if the given MIME type is HLS MIME type.\n *\n * @param {string} mimeType\n * @return {boolean}\n */\n static isHlsType(mimeType) {\n return mimeType === 'application/x-mpegurl' ||\n mimeType === 'application/vnd.apple.mpegurl';\n }\n\n /**\n * Get the base and profile of a codec string. Where [0] will be the codec\n * base and [1] will be the profile.\n * @param {string} codecString\n * @return {!Array.}\n * @private\n */\n static getCodecParts_(codecString) {\n const parts = codecString.split('.');\n\n const base = parts[0];\n\n parts.shift();\n const profile = parts.join('.');\n\n // Make sure that we always return a \"base\" and \"profile\".\n return [base, profile];\n }\n};\n\n\n/**\n * A map from Stream object keys to MIME type parameters. These should be\n * ignored by platforms that do not recognize them.\n *\n * This initial set of parameters are all recognized by Chromecast.\n *\n * @const {!Map.}\n * @private\n */\nshaka.util.MimeUtils.EXTENDED_MIME_PARAMETERS_ = new Map()\n .set('codecs', 'codecs')\n .set('frameRate', 'framerate') // Ours is camelCase, theirs is lowercase.\n .set('bandwidth', 'bitrate') // They are in the same units: bits/sec.\n .set('width', 'width')\n .set('height', 'height')\n .set('channelsCount', 'channels');\n\n\n/**\n * A mimetype created for CEA-608 closed captions.\n * @const {string}\n */\nshaka.util.MimeUtils.CEA608_CLOSED_CAPTION_MIMETYPE = 'application/cea-608';\n\n/**\n * A mimetype created for CEA-708 closed captions.\n * @const {string}\n */\nshaka.util.MimeUtils.CEA708_CLOSED_CAPTION_MIMETYPE = 'application/cea-708';\n\n/**\n * MIME types of raw formats.\n *\n * @const {!Array.}\n */\nshaka.util.MimeUtils.RAW_FORMATS = [\n 'audio/aac',\n 'audio/ac3',\n 'audio/ec3',\n 'audio/mpeg',\n];\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.Functional');\n\ngoog.require('shaka.util.Timer');\n\n/**\n * @summary A set of functional utility functions.\n */\nshaka.util.Functional = class {\n /**\n * Creates a promise chain that calls the given callback for each element in\n * the array in a catch of a promise.\n *\n * e.g.:\n * Promise.reject().catch(callback(array[0])).catch(callback(array[1]));\n *\n * @param {!Array.} array\n * @param {function(ELEM):!Promise.} callback\n * @return {!Promise.}\n * @template ELEM,RESULT\n */\n static createFallbackPromiseChain(array, callback) {\n return array.reduce((promise, elem) => {\n return promise.catch(() => callback(elem));\n }, Promise.reject());\n }\n\n\n /**\n * Returns the first array concatenated to the second; used to collapse an\n * array of arrays into a single array.\n *\n * @param {!Array.} all\n * @param {!Array.} part\n * @return {!Array.}\n * @template T\n */\n static collapseArrays(all, part) {\n return all.concat(part);\n }\n\n /**\n * A no-op function that ignores its arguments. This is used to suppress\n * unused variable errors.\n * @param {...*} args\n */\n static ignored(...args) {}\n\n\n /**\n * A no-op function. Useful in promise chains.\n */\n static noop() {}\n\n\n /**\n * Returns if the given value is not null; useful for filtering out null\n * values.\n *\n * @param {T} value\n * @return {boolean}\n * @template T\n */\n static isNotNull(value) {\n return value != null;\n }\n\n /**\n * Returns a Promise which is resolved only if |asyncProcess| is resolved, and\n * only if it is resolved in less than |seconds| seconds.\n *\n * If the returned Promise is resolved, it returns the same value as\n * |asyncProcess|.\n *\n * If |asyncProcess| fails, the returned Promise is rejected.\n * If |asyncProcess| takes too long, the returned Promise is rejected, but\n * |asyncProcess| is still allowed to complete.\n *\n * @param {number} seconds\n * @param {!Promise.} asyncProcess\n * @return {!Promise.}\n * @template T\n */\n static promiseWithTimeout(seconds, asyncProcess) {\n return Promise.race([\n asyncProcess,\n new Promise(((_, reject) => {\n new shaka.util.Timer(reject).tickAfter(seconds);\n })),\n ]);\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.LanguageUtils');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.util.ManifestParserUtils');\n\n\n/**\n * @summary A set of language utility functions.\n * @final\n * @export\n */\nshaka.util.LanguageUtils = class {\n /**\n * Check if |locale1| and |locale2| are locale-compatible.\n *\n * Locale-compatible is defined as all components in each locale match. Since\n * we only respect the language and region components, we only check that\n * the language and region components match.\n *\n * Examples:\n * Locale A | Locale B | Locale Compatible\n * ---------------------------------------\n * en-US | en-US | true\n * en | en-US | false\n * en-US | en-CA | false\n *\n * @param {string} locale1\n * @param {string} locale2\n * @return {boolean}\n * @export\n */\n static areLocaleCompatible(locale1, locale2) {\n const LanguageUtils = shaka.util.LanguageUtils;\n\n // Even through they SHOULD already be normalized, let's just be safe and\n // do it again.\n locale1 = LanguageUtils.normalize(locale1);\n locale2 = LanguageUtils.normalize(locale2);\n\n return locale1 == locale2;\n }\n\n /**\n * Check if |locale1| and |locale2| are language-compatible.\n *\n * Language compatible is when the language component of each locale matches.\n * This means that no matter what region they have (or don't have) as long as\n * the language components match, they are language-compatible.\n *\n * Examples:\n * Locale A | Locale B | Language-Compatible\n * -----------------------------------------\n * en-US | en-US | true\n * en-US | en | true\n * en-US | en-CA | true\n * en-CA | fr-CA | false\n *\n * @param {string} locale1\n * @param {string} locale2\n * @return {boolean}\n * @export\n */\n static areLanguageCompatible(locale1, locale2) {\n const LanguageUtils = shaka.util.LanguageUtils;\n\n // Even through they SHOULD already be normalized, let's just be safe and\n // do it again.\n locale1 = LanguageUtils.normalize(locale1);\n locale2 = LanguageUtils.normalize(locale2);\n\n // Get all components. This should only be language and region\n // since we do not support dialect.\n /** @type {!Array.} */\n const locale1Components = LanguageUtils.disassembleLocale_(locale1);\n /** @type {!Array.} */\n const locale2Components = LanguageUtils.disassembleLocale_(locale2);\n\n // We are language compatible if we have the same language.\n return locale1Components[0] == locale2Components[0];\n }\n\n /**\n * Check if |possibleParent| is the parent locale of |possibleChild|. Because\n * we do not support dialects, the parent-child relationship is a lot simpler.\n * In a parent child relationship:\n * - The parent and child have the same language-component\n * - The parent has no region-component\n * - The child has a region-component\n *\n * Example:\n * Locale A | Locale B | Is A The parent of B?\n * --------------------------------------------\n * en-US | en-US | no\n * en-US | en | no\n * en | en-US | yes\n * en | en | no\n * en | fr | no\n *\n * @param {string} possibleParent\n * @param {string} possibleChild\n * @return {boolean}\n * @export\n */\n static isParentOf(possibleParent, possibleChild) {\n const LanguageUtils = shaka.util.LanguageUtils;\n\n // Even through they SHOULD already be normalized, let's just be safe and\n // do it again.\n possibleParent = LanguageUtils.normalize(possibleParent);\n possibleChild = LanguageUtils.normalize(possibleChild);\n\n // Get all components. This should only be language and region\n // since we do not support dialect.\n /** @type {!Array.} */\n const possibleParentComponents =\n LanguageUtils.disassembleLocale_(possibleParent);\n /** @type {!Array.} */\n const possibleChildComponents =\n LanguageUtils.disassembleLocale_(possibleChild);\n\n return possibleParentComponents[0] == possibleChildComponents[0] &&\n possibleParentComponents.length == 1 &&\n possibleChildComponents.length == 2;\n }\n\n /**\n * Check if |localeA| shares the same parent with |localeB|. Since we don't\n * support dialect, we will only look at language and region. For two locales\n * to be siblings:\n * - Both must have language-components\n * - Both must have region-components\n * - Both must have the same language-component\n *\n * Example:\n * Locale A | Locale B | Siblings?\n * --------------------------------------------\n * en-US | en-US | yes\n * en-US | en-CA | yes\n * en-US | en | no\n * en | en-US | no\n * en | en | no\n * en | fr | no\n *\n * @param {string} localeA\n * @param {string} localeB\n * @return {boolean}\n * @export\n */\n static isSiblingOf(localeA, localeB) {\n const LanguageUtils = shaka.util.LanguageUtils;\n\n // Even through they SHOULD already be normalized, let's just be safe and\n // do it again.\n localeA = LanguageUtils.normalize(localeA);\n localeB = LanguageUtils.normalize(localeB);\n\n // Get all components. This should only be language and region\n // since we do not support dialect.\n /** @type {!Array.} */\n const localeAComponents = LanguageUtils.disassembleLocale_(localeA);\n /** @type {!Array.} */\n const localeBComponents = LanguageUtils.disassembleLocale_(localeB);\n\n return localeAComponents.length == 2 &&\n localeBComponents.length == 2 &&\n localeAComponents[0] == localeBComponents[0];\n }\n\n /**\n * Normalize a locale. This will take a locale and canonicalize it to a state\n * that we are prepared to work with.\n *\n * We only support with:\n * - language\n * - language-REGION\n *\n * If given a dialect, we will discard it. We will convert any 3-character\n * codes to 2-character codes. We will force language codes to lowercase and\n * region codes to uppercase.\n *\n * @param {string} locale\n * @return {string}\n * @export\n */\n static normalize(locale) {\n const LanguageUtils = shaka.util.LanguageUtils;\n\n const privateusePrefix = 'x-';\n const [languageRegion = '', privateuseSuffix = ''] =\n locale.split(`-${privateusePrefix}`);\n const [languageCode = '', regionCode = ''] = languageRegion.split('-');\n\n // We are only going to use the language, the region and the \"privateuse\" part (as per https://datatracker.ietf.org/doc/html/rfc5646).\n // Anything else is thrown away.\n const privateuse = privateuseSuffix ?\n `${privateusePrefix}${privateuseSuffix}` : '';\n\n // Convert the language to lower case. It is standard for the language code\n // to be in lower case, but it will also make the map look-up easier.\n let language = languageCode.toLowerCase();\n language = LanguageUtils.isoMap_.get(language) || language;\n\n // Convert the region to upper case. It is standard for the region to be in\n // upper case. If there is no upper code, then it will be an empty string\n // and this will be a no-op.\n const region = regionCode.toUpperCase();\n\n return `${region ? `${language}-${region}` : language}${\n privateuse ? `-${privateuse}` : ''}`;\n }\n\n /**\n * Check if two language codes are siblings. Language codes are siblings if\n * they share the same base language while neither one is the base language.\n *\n * For example, \"en-US\" and \"en-CA\" are siblings but \"en-US\" and \"en\" are not\n * siblings.\n *\n * @param {string} a\n * @param {string} b\n * @return {boolean}\n * @export\n */\n static areSiblings(a, b) {\n const LanguageUtils = shaka.util.LanguageUtils;\n\n const baseA = LanguageUtils.getBase(a);\n const baseB = LanguageUtils.getBase(b);\n\n return a != baseA && b != baseB && baseA == baseB;\n }\n\n /**\n * Compute a numerical relatedness for language codes. Language codes with a\n * higher relatedness are a better match. Unrelated language codes have a\n * relatedness score of 0.\n *\n * @param {string} target\n * @param {string} candidate\n * @return {number}\n * @export\n */\n static relatedness(target, candidate) {\n const LanguageUtils = shaka.util.LanguageUtils;\n\n target = LanguageUtils.normalize(target);\n candidate = LanguageUtils.normalize(candidate);\n\n // An exact match is the top score.\n if (candidate == target) {\n return 4;\n }\n\n // Next is a parent of the target language.\n if (LanguageUtils.isParentOf(candidate, target)) {\n return 3;\n }\n\n // Next is a sibling of the target language.\n if (LanguageUtils.isSiblingOf(candidate, target)) {\n return 2;\n }\n\n // Next is a child of the target language.\n if (LanguageUtils.isParentOf(target, candidate)) {\n return 1;\n }\n\n // Otherwise, they are unrelated.\n return 0;\n }\n\n /**\n * Get the normalized base language for a language code.\n *\n * @param {string} lang\n * @return {string}\n * @export\n */\n static getBase(lang) {\n const LanguageUtils = shaka.util.LanguageUtils;\n\n const splitAt = lang.indexOf('-');\n let major;\n\n if (splitAt >= 0) {\n major = lang.substring(0, splitAt);\n } else {\n major = lang;\n }\n\n // Convert the major code to lower case. It is standard for the major code\n // to be in lower case, but it will also make the map look-up easier.\n major = major.toLowerCase();\n major = LanguageUtils.isoMap_.get(major) || major;\n\n return major;\n }\n\n /**\n * Get the normalized language of the given text stream. Will return 'und' if\n * a language is not found on the text stream.\n *\n * This should always be used to get the language from a text stream.\n *\n * @param {shaka.extern.Stream} stream\n * @return {string}\n * @export\n */\n static getLocaleForText(stream) {\n const LanguageUtils = shaka.util.LanguageUtils;\n\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n goog.asserts.assert(\n stream.type == ContentType.TEXT,\n 'Can only get language from text streams');\n\n const language = stream.language || 'und';\n return LanguageUtils.normalize(language);\n }\n\n /**\n * Get the normalized locale for the given variant. This will look through\n * the variant to find the locale that represents the content in the variant.\n * This will return 'und' if no language can be found.\n *\n * This should always be used to get the locale from a variant.\n *\n * @param {shaka.extern.Variant} variant\n * @return {string}\n * @export\n */\n static getLocaleForVariant(variant) {\n const LanguageUtils = shaka.util.LanguageUtils;\n\n // Our preference order is:\n // 1. Variant\n // 2. Audio Stream\n // 3. Video Stream\n //\n // We are going to consider all falsy strings to be invalid locales, this\n // will include empty strings.\n if (variant.language) {\n return LanguageUtils.normalize(variant.language);\n }\n\n if (variant.audio && variant.audio.language) {\n return LanguageUtils.normalize(variant.audio.language);\n }\n\n if (variant.video && variant.video.language) {\n return LanguageUtils.normalize(variant.video.language);\n }\n\n // No language was found, but we still want to return a valid string.\n return 'und';\n }\n\n /**\n * Find the locale in |searchSpace| that comes closest to |target|. If no\n * locale is found to be close to |target|, then |null| will be returned.\n *\n * @param {string} target\n * @param {!Iterable.} searchSpace\n * @return {?string}\n * @export\n */\n static findClosestLocale(target, searchSpace) {\n const LanguageUtils = shaka.util.LanguageUtils;\n\n /** @type {string} */\n const safeTarget = LanguageUtils.normalize(target);\n /** @type {!Set.} */\n const safeSearchSpace = new Set();\n for (const option of searchSpace) {\n safeSearchSpace.add(LanguageUtils.normalize(option));\n }\n\n // Preference 1 - The option is an exact match. For example, \"en-US\" is an\n // exact match of \"en-US\". So if there is an option that is an exact\n // match, it would be the best match possible.\n for (const option of safeSearchSpace) {\n if (option == safeTarget) {\n return option;\n }\n }\n\n // Preference 2 - The option is the parent of the target. For example,\n // \"en\" is the parent of \"en-US\". So if there is an option with\n // \"en\", it should be good enough when our preference is \"en-US\".\n for (const option of safeSearchSpace) {\n if (LanguageUtils.isParentOf(option, safeTarget)) {\n return option;\n }\n }\n\n // Preference 3 - The option is a sibling of the target. For example,\n // \"en-US\" is a sibling of \"en-CA\". So if there is an option with\n // \"en_CA\", it should be good enough when our preference is \"en-US\".\n for (const option of safeSearchSpace) {\n if (LanguageUtils.isSiblingOf(option, safeTarget)) {\n return option;\n }\n }\n\n // Preference 4 - The option is a child of the target. For example,\n // \"en-US\" is the child of \"en\". SO it there is an option with\n // \"en-US\", it should be good enough when our preference is \"en\".\n for (const option of safeSearchSpace) {\n if (LanguageUtils.isParentOf(safeTarget, option)) {\n return option;\n }\n }\n\n // Failed to find anything.\n return null;\n }\n\n /**\n * Take a locale string and break it into its component. Check that each\n * component matches what we would expect internally for locales. This\n * should ONLY be used to verify locales that have been normalized.\n *\n * @param {string} locale\n * @return {!Array.}\n * @private\n */\n static disassembleLocale_(locale) {\n const components = locale.split('-');\n\n goog.asserts.assert(\n components.length <= 2,\n [\n 'Locales should not have more than 2 components. ',\n locale,\n ' has too many components.',\n ].join());\n\n return components;\n }\n};\n\n\n/**\n * A map from 3-letter language codes (ISO 639-2) to 2-letter language codes\n * (ISO 639-1) for all languages which have both in the registry.\n *\n * @const {!Map.}\n * @private\n */\nshaka.util.LanguageUtils.isoMap_ = new Map([\n ['aar', 'aa'], ['abk', 'ab'], ['afr', 'af'], ['aka', 'ak'], ['alb', 'sq'],\n ['amh', 'am'], ['ara', 'ar'], ['arg', 'an'], ['arm', 'hy'], ['asm', 'as'],\n ['ava', 'av'], ['ave', 'ae'], ['aym', 'ay'], ['aze', 'az'], ['bak', 'ba'],\n ['bam', 'bm'], ['baq', 'eu'], ['bel', 'be'], ['ben', 'bn'], ['bih', 'bh'],\n ['bis', 'bi'], ['bod', 'bo'], ['bos', 'bs'], ['bre', 'br'], ['bul', 'bg'],\n ['bur', 'my'], ['cat', 'ca'], ['ces', 'cs'], ['cha', 'ch'], ['che', 'ce'],\n ['chi', 'zh'], ['chu', 'cu'], ['chv', 'cv'], ['cor', 'kw'], ['cos', 'co'],\n ['cre', 'cr'], ['cym', 'cy'], ['cze', 'cs'], ['dan', 'da'], ['deu', 'de'],\n ['div', 'dv'], ['dut', 'nl'], ['dzo', 'dz'], ['ell', 'el'], ['eng', 'en'],\n ['epo', 'eo'], ['est', 'et'], ['eus', 'eu'], ['ewe', 'ee'], ['fao', 'fo'],\n ['fas', 'fa'], ['fij', 'fj'], ['fin', 'fi'], ['fra', 'fr'], ['fre', 'fr'],\n ['fry', 'fy'], ['ful', 'ff'], ['geo', 'ka'], ['ger', 'de'], ['gla', 'gd'],\n ['gle', 'ga'], ['glg', 'gl'], ['glv', 'gv'], ['gre', 'el'], ['grn', 'gn'],\n ['guj', 'gu'], ['hat', 'ht'], ['hau', 'ha'], ['heb', 'he'], ['her', 'hz'],\n ['hin', 'hi'], ['hmo', 'ho'], ['hrv', 'hr'], ['hun', 'hu'], ['hye', 'hy'],\n ['ibo', 'ig'], ['ice', 'is'], ['ido', 'io'], ['iii', 'ii'], ['iku', 'iu'],\n ['ile', 'ie'], ['ina', 'ia'], ['ind', 'id'], ['ipk', 'ik'], ['isl', 'is'],\n ['ita', 'it'], ['jav', 'jv'], ['jpn', 'ja'], ['kal', 'kl'], ['kan', 'kn'],\n ['kas', 'ks'], ['kat', 'ka'], ['kau', 'kr'], ['kaz', 'kk'], ['khm', 'km'],\n ['kik', 'ki'], ['kin', 'rw'], ['kir', 'ky'], ['kom', 'kv'], ['kon', 'kg'],\n ['kor', 'ko'], ['kua', 'kj'], ['kur', 'ku'], ['lao', 'lo'], ['lat', 'la'],\n ['lav', 'lv'], ['lim', 'li'], ['lin', 'ln'], ['lit', 'lt'], ['ltz', 'lb'],\n ['lub', 'lu'], ['lug', 'lg'], ['mac', 'mk'], ['mah', 'mh'], ['mal', 'ml'],\n ['mao', 'mi'], ['mar', 'mr'], ['may', 'ms'], ['mkd', 'mk'], ['mlg', 'mg'],\n ['mlt', 'mt'], ['mon', 'mn'], ['mri', 'mi'], ['msa', 'ms'], ['mya', 'my'],\n ['nau', 'na'], ['nav', 'nv'], ['nbl', 'nr'], ['nde', 'nd'], ['ndo', 'ng'],\n ['nep', 'ne'], ['nld', 'nl'], ['nno', 'nn'], ['nob', 'nb'], ['nor', 'no'],\n ['nya', 'ny'], ['oci', 'oc'], ['oji', 'oj'], ['ori', 'or'], ['orm', 'om'],\n ['oss', 'os'], ['pan', 'pa'], ['per', 'fa'], ['pli', 'pi'], ['pol', 'pl'],\n ['por', 'pt'], ['pus', 'ps'], ['que', 'qu'], ['roh', 'rm'], ['ron', 'ro'],\n ['rum', 'ro'], ['run', 'rn'], ['rus', 'ru'], ['sag', 'sg'], ['san', 'sa'],\n ['sin', 'si'], ['slk', 'sk'], ['slo', 'sk'], ['slv', 'sl'], ['sme', 'se'],\n ['smo', 'sm'], ['sna', 'sn'], ['snd', 'sd'], ['som', 'so'], ['sot', 'st'],\n ['spa', 'es'], ['sqi', 'sq'], ['srd', 'sc'], ['srp', 'sr'], ['ssw', 'ss'],\n ['sun', 'su'], ['swa', 'sw'], ['swe', 'sv'], ['tah', 'ty'], ['tam', 'ta'],\n ['tat', 'tt'], ['tel', 'te'], ['tgk', 'tg'], ['tgl', 'tl'], ['tha', 'th'],\n ['tib', 'bo'], ['tir', 'ti'], ['ton', 'to'], ['tsn', 'tn'], ['tso', 'ts'],\n ['tuk', 'tk'], ['tur', 'tr'], ['twi', 'tw'], ['uig', 'ug'], ['ukr', 'uk'],\n ['urd', 'ur'], ['uzb', 'uz'], ['ven', 've'], ['vie', 'vi'], ['vol', 'vo'],\n ['wel', 'cy'], ['wln', 'wa'], ['wol', 'wo'], ['xho', 'xh'], ['yid', 'yi'],\n ['yor', 'yo'], ['zha', 'za'], ['zho', 'zh'], ['zul', 'zu'],\n]);\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.StreamUtils');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.media.Capabilities');\ngoog.require('shaka.text.TextEngine');\ngoog.require('shaka.util.Functional');\ngoog.require('shaka.util.LanguageUtils');\ngoog.require('shaka.util.ManifestParserUtils');\ngoog.require('shaka.util.MimeUtils');\ngoog.require('shaka.util.MultiMap');\ngoog.require('shaka.util.ObjectUtils');\ngoog.require('shaka.util.Platform');\ngoog.requireType('shaka.media.DrmEngine');\n\n\n/**\n * @summary A set of utility functions for dealing with Streams and Manifests.\n * @export\n */\nshaka.util.StreamUtils = class {\n /**\n * In case of multiple usable codecs, choose one based on lowest average\n * bandwidth and filter out the rest.\n * Also filters out variants that have too many audio channels.\n * @param {!shaka.extern.Manifest} manifest\n * @param {!Array.} preferredVideoCodecs\n * @param {!Array.} preferredAudioCodecs\n * @param {!Array.} preferredDecodingAttributes\n * @param {!Array.} preferredTextFormats\n */\n static chooseCodecsAndFilterManifest(manifest, preferredVideoCodecs,\n preferredAudioCodecs, preferredDecodingAttributes, preferredTextFormats) {\n const StreamUtils = shaka.util.StreamUtils;\n const MimeUtils = shaka.util.MimeUtils;\n\n if (preferredTextFormats.length) {\n let subset = manifest.textStreams;\n for (const textFormat of preferredTextFormats) {\n const filtered = subset.filter((textStream) => {\n if (textStream.codecs.startsWith(textFormat) ||\n textStream.mimeType.startsWith(textFormat)) {\n return true;\n }\n return false;\n });\n if (filtered.length) {\n subset = filtered;\n break;\n }\n }\n manifest.textStreams = subset;\n }\n\n let variants = manifest.variants;\n // To start, choose the codecs based on configured preferences if available.\n if (preferredVideoCodecs.length || preferredAudioCodecs.length) {\n variants = StreamUtils.choosePreferredCodecs(variants,\n preferredVideoCodecs, preferredAudioCodecs);\n }\n\n if (preferredDecodingAttributes.length) {\n // group variants by resolution and choose preferred variants only\n /** @type {!shaka.util.MultiMap.} */\n const variantsByResolutionMap = new shaka.util.MultiMap();\n for (const variant of variants) {\n variantsByResolutionMap\n .push(String(variant.video.width || 0), variant);\n }\n const bestVariants = [];\n variantsByResolutionMap.forEach((width, variantsByResolution) => {\n let highestMatch = 0;\n let matchingVariants = [];\n for (const variant of variantsByResolution) {\n const matchCount = preferredDecodingAttributes.filter(\n (attribute) => variant.decodingInfos[0][attribute],\n ).length;\n if (matchCount > highestMatch) {\n highestMatch = matchCount;\n matchingVariants = [variant];\n } else if (matchCount == highestMatch) {\n matchingVariants.push(variant);\n }\n }\n bestVariants.push(...matchingVariants);\n });\n variants = bestVariants;\n }\n\n const audioStreamsSet = new Set();\n const videoStreamsSet = new Set();\n for (const variant of variants) {\n if (variant.audio) {\n audioStreamsSet.add(variant.audio);\n }\n if (variant.video) {\n videoStreamsSet.add(variant.video);\n }\n }\n\n const audioStreams = Array.from(audioStreamsSet).sort((v1, v2) => {\n return v1.bandwidth - v2.bandwidth;\n });\n const validAudioIds = [];\n const validAudioStreamsMap = new Map();\n const getAudioId = (stream) => {\n return stream.language + (stream.channelsCount || 0) +\n (stream.audioSamplingRate || 0) + stream.roles.join(',') +\n stream.label + stream.groupId + stream.fastSwitching;\n };\n for (const stream of audioStreams) {\n const groupId = getAudioId(stream);\n const validAudioStreams = validAudioStreamsMap.get(groupId) || [];\n if (!validAudioStreams.length) {\n validAudioStreams.push(stream);\n validAudioIds.push(stream.id);\n } else {\n const previousStream = validAudioStreams[validAudioStreams.length - 1];\n const previousCodec =\n MimeUtils.getNormalizedCodec(previousStream.codecs);\n const currentCodec =\n MimeUtils.getNormalizedCodec(stream.codecs);\n if (previousCodec == currentCodec) {\n if (!stream.bandwidth || !previousStream.bandwidth ||\n stream.bandwidth > previousStream.bandwidth) {\n validAudioStreams.push(stream);\n validAudioIds.push(stream.id);\n }\n }\n }\n validAudioStreamsMap.set(groupId, validAudioStreams);\n }\n\n // Keys based in MimeUtils.getNormalizedCodec. Lower is better\n const videoCodecPreference = {\n 'vp8': 1,\n 'avc': 1,\n 'dovi-avc': 0.95,\n 'vp9': 0.9,\n 'vp09': 0.9,\n 'hevc': 0.85,\n 'dovi-hevc': 0.8,\n 'dovi-p5': 0.75,\n 'av01': 0.7,\n 'dovi-av1': 0.65,\n 'vvc': 0.6,\n };\n\n const videoStreams = Array.from(videoStreamsSet)\n .sort((v1, v2) => {\n if (!v1.bandwidth || !v2.bandwidth || v1.bandwidth == v2.bandwidth) {\n if (v1.codecs && v2.codecs && v1.codecs != v2.codecs &&\n v1.width == v2.width) {\n const v1Codecs = MimeUtils.getNormalizedCodec(v1.codecs);\n const v2Codecs = MimeUtils.getNormalizedCodec(v2.codecs);\n if (v1Codecs != v2Codecs) {\n const indexV1 = videoCodecPreference[v1Codecs] || 1;\n const indexV2 = videoCodecPreference[v2Codecs] || 1;\n return indexV1 - indexV2;\n }\n }\n return v1.width - v2.width;\n }\n return v1.bandwidth - v2.bandwidth;\n });\n\n const isChangeTypeSupported =\n shaka.media.Capabilities.isChangeTypeSupported();\n\n const validVideoIds = [];\n const validVideoStreamsMap = new Map();\n const getVideoGroupId = (stream) => {\n return Math.round(stream.frameRate || 0) + (stream.hdr || '') +\n stream.fastSwitching;\n };\n for (const stream of videoStreams) {\n const groupId = getVideoGroupId(stream);\n const validVideoStreams = validVideoStreamsMap.get(groupId) || [];\n if (!validVideoStreams.length) {\n validVideoStreams.push(stream);\n validVideoIds.push(stream.id);\n } else {\n const previousStream = validVideoStreams[validVideoStreams.length - 1];\n if (!isChangeTypeSupported) {\n const previousCodec =\n MimeUtils.getNormalizedCodec(previousStream.codecs);\n const currentCodec =\n MimeUtils.getNormalizedCodec(stream.codecs);\n if (previousCodec !== currentCodec) {\n continue;\n }\n }\n if (stream.width > previousStream.width ||\n stream.height > previousStream.height) {\n validVideoStreams.push(stream);\n validVideoIds.push(stream.id);\n } else if (stream.width == previousStream.width &&\n stream.height == previousStream.height) {\n const previousCodec =\n MimeUtils.getNormalizedCodec(previousStream.codecs);\n const currentCodec =\n MimeUtils.getNormalizedCodec(stream.codecs);\n if (previousCodec == currentCodec) {\n if (!stream.bandwidth || !previousStream.bandwidth ||\n stream.bandwidth > previousStream.bandwidth) {\n validVideoStreams.push(stream);\n validVideoIds.push(stream.id);\n }\n }\n }\n }\n validVideoStreamsMap.set(groupId, validVideoStreams);\n }\n\n // Filter out any variants that don't match, forcing AbrManager to choose\n // from a single video codec and a single audio codec possible.\n manifest.variants = manifest.variants.filter((variant) => {\n const audio = variant.audio;\n const video = variant.video;\n if (audio) {\n if (!validAudioIds.includes(audio.id)) {\n shaka.log.debug('Dropping Variant (better codec available)', variant);\n return false;\n }\n }\n if (video) {\n if (!validVideoIds.includes(video.id)) {\n shaka.log.debug('Dropping Variant (better codec available)', variant);\n return false;\n }\n }\n return true;\n });\n }\n\n /**\n * Choose the codecs by configured preferred audio and video codecs.\n *\n * @param {!Array} variants\n * @param {!Array.} preferredVideoCodecs\n * @param {!Array.} preferredAudioCodecs\n * @return {!Array}\n */\n static choosePreferredCodecs(variants, preferredVideoCodecs,\n preferredAudioCodecs) {\n let subset = variants;\n for (const videoCodec of preferredVideoCodecs) {\n const filtered = subset.filter((variant) => {\n return variant.video && variant.video.codecs.startsWith(videoCodec);\n });\n if (filtered.length) {\n subset = filtered;\n break;\n }\n }\n\n for (const audioCodec of preferredAudioCodecs) {\n const filtered = subset.filter((variant) => {\n return variant.audio && variant.audio.codecs.startsWith(audioCodec);\n });\n if (filtered.length) {\n subset = filtered;\n break;\n }\n }\n return subset;\n }\n\n /**\n * Filter the variants in |manifest| to only include the variants that meet\n * the given restrictions.\n *\n * @param {!shaka.extern.Manifest} manifest\n * @param {shaka.extern.Restrictions} restrictions\n * @param {shaka.extern.Resolution} maxHwResolution\n */\n static filterByRestrictions(manifest, restrictions, maxHwResolution) {\n manifest.variants = manifest.variants.filter((variant) => {\n return shaka.util.StreamUtils.meetsRestrictions(\n variant, restrictions, maxHwResolution);\n });\n }\n\n /**\n * @param {shaka.extern.Variant} variant\n * @param {shaka.extern.Restrictions} restrictions\n * Configured restrictions from the user.\n * @param {shaka.extern.Resolution} maxHwRes\n * The maximum resolution the hardware can handle.\n * This is applied separately from user restrictions because the setting\n * should not be easily replaced by the user's configuration.\n * @return {boolean}\n * @export\n */\n static meetsRestrictions(variant, restrictions, maxHwRes) {\n /** @type {function(number, number, number):boolean} */\n const inRange = (x, min, max) => {\n return x >= min && x <= max;\n };\n\n const video = variant.video;\n\n // |video.width| and |video.height| can be undefined, which breaks\n // the math, so make sure they are there first.\n if (video && video.width && video.height) {\n let videoWidth = video.width;\n let videoHeight = video.height;\n if (videoHeight > videoWidth) {\n // Vertical video.\n [videoWidth, videoHeight] = [videoHeight, videoWidth];\n }\n\n if (!inRange(videoWidth,\n restrictions.minWidth,\n Math.min(restrictions.maxWidth, maxHwRes.width))) {\n return false;\n }\n\n if (!inRange(videoHeight,\n restrictions.minHeight,\n Math.min(restrictions.maxHeight, maxHwRes.height))) {\n return false;\n }\n\n if (!inRange(video.width * video.height,\n restrictions.minPixels,\n restrictions.maxPixels)) {\n return false;\n }\n }\n\n // |variant.video.frameRate| can be undefined, which breaks\n // the math, so make sure they are there first.\n if (variant && variant.video && variant.video.frameRate) {\n if (!inRange(variant.video.frameRate,\n restrictions.minFrameRate,\n restrictions.maxFrameRate)) {\n return false;\n }\n }\n\n // |variant.audio.channelsCount| can be undefined, which breaks\n // the math, so make sure they are there first.\n if (variant && variant.audio && variant.audio.channelsCount) {\n if (!inRange(variant.audio.channelsCount,\n restrictions.minChannelsCount,\n restrictions.maxChannelsCount)) {\n return false;\n }\n }\n\n if (!inRange(variant.bandwidth,\n restrictions.minBandwidth,\n restrictions.maxBandwidth)) {\n return false;\n }\n\n return true;\n }\n\n\n /**\n * @param {!Array.} variants\n * @param {shaka.extern.Restrictions} restrictions\n * @param {shaka.extern.Resolution} maxHwRes\n * @return {boolean} Whether the tracks changed.\n */\n static applyRestrictions(variants, restrictions, maxHwRes) {\n let tracksChanged = false;\n\n for (const variant of variants) {\n const originalAllowed = variant.allowedByApplication;\n variant.allowedByApplication = shaka.util.StreamUtils.meetsRestrictions(\n variant, restrictions, maxHwRes);\n\n if (originalAllowed != variant.allowedByApplication) {\n tracksChanged = true;\n }\n }\n\n return tracksChanged;\n }\n\n\n /**\n * Alters the given Manifest to filter out any unplayable streams.\n *\n * @param {shaka.media.DrmEngine} drmEngine\n * @param {shaka.extern.Manifest} manifest\n * @param {!Array=} preferredKeySystems\n * @param {!Object.=} keySystemsMapping\n */\n static async filterManifest(drmEngine, manifest, preferredKeySystems = [],\n keySystemsMapping = {}) {\n await shaka.util.StreamUtils.filterManifestByMediaCapabilities(\n drmEngine, manifest, manifest.offlineSessionIds.length > 0,\n preferredKeySystems, keySystemsMapping);\n shaka.util.StreamUtils.filterTextStreams_(manifest);\n await shaka.util.StreamUtils.filterImageStreams_(manifest);\n }\n\n\n /**\n * Alters the given Manifest to filter out any streams unsupported by the\n * platform via MediaCapabilities.decodingInfo() API.\n *\n * @param {shaka.media.DrmEngine} drmEngine\n * @param {shaka.extern.Manifest} manifest\n * @param {boolean} usePersistentLicenses\n * @param {!Array} preferredKeySystems\n * @param {!Object.} keySystemsMapping\n */\n static async filterManifestByMediaCapabilities(\n drmEngine, manifest, usePersistentLicenses, preferredKeySystems,\n keySystemsMapping) {\n goog.asserts.assert(navigator.mediaCapabilities,\n 'MediaCapabilities should be valid.');\n\n if (shaka.util.Platform.isXboxOne()) {\n shaka.util.StreamUtils.overrideDolbyVisionCodecs(manifest.variants);\n }\n await shaka.util.StreamUtils.getDecodingInfosForVariants(\n manifest.variants, usePersistentLicenses, /* srcEquals= */ false,\n preferredKeySystems);\n\n let keySystem = null;\n if (drmEngine) {\n const drmInfo = drmEngine.getDrmInfo();\n if (drmInfo) {\n keySystem = drmInfo.keySystem;\n }\n }\n\n const StreamUtils = shaka.util.StreamUtils;\n\n manifest.variants = manifest.variants.filter((variant) => {\n const supported = StreamUtils.checkVariantSupported_(\n variant, keySystem, keySystemsMapping);\n // Filter out all unsupported variants.\n if (!supported) {\n shaka.log.debug('Dropping variant - not compatible with platform',\n StreamUtils.getVariantSummaryString_(variant));\n }\n return supported;\n });\n }\n\n\n /**\n * Maps Dolby Vision codecs to H.264 and H.265 equivalents as a workaround\n * to make Dolby Vision playback work on some platforms.\n *\n * Mapping is done according to the relevant Dolby documentation found here:\n * https://professionalsupport.dolby.com/s/article/How-to-signal-Dolby-Vision-in-MPEG-DASH?language=en_US\n * @param {!Array} variants\n */\n static overrideDolbyVisionCodecs(variants) {\n /** @type {!Object} */\n const codecMap = {\n 'dvav': 'avc3',\n 'dva1': 'avc1',\n 'dvhe': 'hev1',\n 'dvh1': 'hvc1',\n 'dvc1': 'vvc1',\n 'dvi1': 'vvi1',\n };\n /** @type {!Set} */\n const streams = new Set();\n for (const variant of variants) {\n if (variant.video) {\n streams.add(variant.video);\n }\n }\n for (const video of streams) {\n for (const dvCodec of Object.keys(codecMap)) {\n if (video.codecs.includes(dvCodec)) {\n video.codecs = video.codecs.replace(dvCodec, codecMap[dvCodec]);\n break;\n }\n }\n }\n }\n\n\n /**\n * @param {!shaka.extern.Variant} variant\n * @param {?string} keySystem\n * @param {!Object.} keySystemsMapping\n * @return {boolean}\n * @private\n */\n static checkVariantSupported_(variant, keySystem, keySystemsMapping) {\n const variantSupported = variant.decodingInfos.some((decodingInfo) => {\n if (!decodingInfo.supported) {\n return false;\n }\n if (keySystem) {\n const keySystemAccess = decodingInfo.keySystemAccess;\n if (keySystemAccess) {\n const currentKeySystem =\n keySystemsMapping[keySystemAccess.keySystem] ||\n keySystemAccess.keySystem;\n if (currentKeySystem != keySystem) {\n return false;\n }\n }\n }\n return true;\n });\n if (!variantSupported) {\n return false;\n }\n\n const isXboxOne = shaka.util.Platform.isXboxOne();\n const isFirefoxAndroid = shaka.util.Platform.isFirefox() &&\n shaka.util.Platform.isAndroid();\n\n // See: https://github.com/shaka-project/shaka-player/issues/3860\n const video = variant.video;\n const videoWidth = (video && video.width) || 0;\n const videoHeight = (video && video.height) || 0;\n\n // See: https://github.com/shaka-project/shaka-player/issues/3380\n // Note: it makes sense to drop early\n if (isXboxOne && video && (videoWidth > 1920 || videoHeight > 1080) &&\n (video.codecs.includes('avc1.') || video.codecs.includes('avc3.'))) {\n return false;\n }\n\n const audio = variant.audio;\n\n // See: https://github.com/shaka-project/shaka-player/issues/6111\n // It seems that Firefox Android reports that it supports\n // Opus + Widevine, but it is not actually supported.\n // It makes sense to drop early.\n if (isFirefoxAndroid && audio && audio.encrypted &&\n audio.codecs.toLowerCase().includes('opus')) {\n return false;\n }\n\n return true;\n }\n\n\n /**\n * Queries mediaCapabilities for the decoding info for that decoding config,\n * and assigns it to the given variant.\n * If that query has been done before, instead return a cached result.\n * @param {!shaka.extern.Variant} variant\n * @param {!Array.} decodingConfigs\n * @private\n */\n static async getDecodingInfosForVariant_(variant, decodingConfigs) {\n /**\n * @param {?MediaCapabilitiesDecodingInfo} a\n * @param {!MediaCapabilitiesDecodingInfo} b\n * @return {!MediaCapabilitiesDecodingInfo}\n */\n const merge = (a, b) => {\n if (!a) {\n return b;\n } else {\n const res = shaka.util.ObjectUtils.shallowCloneObject(a);\n res.supported = a.supported && b.supported;\n res.powerEfficient = a.powerEfficient && b.powerEfficient;\n res.smooth = a.smooth && b.smooth;\n if (b.keySystemAccess && !res.keySystemAccess) {\n res.keySystemAccess = b.keySystemAccess;\n }\n return res;\n }\n };\n\n const StreamUtils = shaka.util.StreamUtils;\n /** @type {?MediaCapabilitiesDecodingInfo} */\n let finalResult = null;\n const promises = [];\n for (const decodingConfig of decodingConfigs) {\n const cacheKey =\n shaka.util.ObjectUtils.alphabeticalKeyOrderStringify(decodingConfig);\n\n const cache = StreamUtils.decodingConfigCache_;\n if (cache[cacheKey]) {\n shaka.log.v2('Using cached results of mediaCapabilities.decodingInfo',\n 'for key', cacheKey);\n finalResult = merge(finalResult, cache[cacheKey]);\n } else {\n // Do a final pass-over of the decoding config: if a given stream has\n // multiple codecs, that suggests that it switches between those codecs\n // at points of the go-through.\n // mediaCapabilities by itself will report \"not supported\" when you\n // put in multiple different codecs, so each has to be checked\n // individually. So check each and take the worst result, to determine\n // overall variant compatibility.\n promises.push(StreamUtils\n .checkEachDecodingConfigCombination_(decodingConfig).then((res) => {\n /** @type {?MediaCapabilitiesDecodingInfo} */\n let acc = null;\n for (const result of (res || [])) {\n acc = merge(acc, result);\n }\n if (acc) {\n cache[cacheKey] = acc;\n finalResult = merge(finalResult, acc);\n }\n }));\n }\n }\n await Promise.all(promises);\n if (finalResult) {\n variant.decodingInfos.push(finalResult);\n }\n }\n\n /**\n * @param {!MediaDecodingConfiguration} decodingConfig\n * @return {!Promise.>}\n * @private\n */\n static checkEachDecodingConfigCombination_(decodingConfig) {\n let videoCodecs = [''];\n if (decodingConfig.video) {\n videoCodecs = shaka.util.MimeUtils.getCodecs(\n decodingConfig.video.contentType).split(',');\n }\n let audioCodecs = [''];\n if (decodingConfig.audio) {\n audioCodecs = shaka.util.MimeUtils.getCodecs(\n decodingConfig.audio.contentType).split(',');\n }\n const promises = [];\n for (const videoCodec of videoCodecs) {\n for (const audioCodec of audioCodecs) {\n const copy = shaka.util.ObjectUtils.cloneObject(decodingConfig);\n if (decodingConfig.video) {\n const mimeType = shaka.util.MimeUtils.getBasicType(\n copy.video.contentType);\n copy.video.contentType = shaka.util.MimeUtils.getFullType(\n mimeType, videoCodec);\n }\n if (decodingConfig.audio) {\n const mimeType = shaka.util.MimeUtils.getBasicType(\n copy.audio.contentType);\n copy.audio.contentType = shaka.util.MimeUtils.getFullType(\n mimeType, audioCodec);\n }\n promises.push(new Promise((resolve, reject) => {\n // On some (Android) WebView environments, decodingInfo will\n // not resolve or reject, at least if RESOURCE_PROTECTED_MEDIA_ID\n // is not set. This is a workaround for that issue.\n const TIMEOUT_FOR_DECODING_INFO_IN_SECONDS = 1;\n shaka.util.Functional.promiseWithTimeout(\n TIMEOUT_FOR_DECODING_INFO_IN_SECONDS,\n navigator.mediaCapabilities.decodingInfo(copy),\n ).then((res) => {\n resolve(res);\n }).catch(reject);\n }));\n }\n }\n return Promise.all(promises).catch((e) => {\n shaka.log.info('MediaCapabilities.decodingInfo() failed.',\n JSON.stringify(decodingConfig), e);\n return null;\n });\n }\n\n\n /**\n * Get the decodingInfo results of the variants via MediaCapabilities.\n * This should be called after the DrmEngine is created and configured, and\n * before DrmEngine sets the mediaKeys.\n *\n * @param {!Array.} variants\n * @param {boolean} usePersistentLicenses\n * @param {boolean} srcEquals\n * @param {!Array} preferredKeySystems\n * @exportDoc\n */\n static async getDecodingInfosForVariants(variants, usePersistentLicenses,\n srcEquals, preferredKeySystems) {\n const gotDecodingInfo = variants.some((variant) =>\n variant.decodingInfos.length);\n if (gotDecodingInfo) {\n shaka.log.debug('Already got the variants\\' decodingInfo.');\n return;\n }\n\n // Try to get preferred key systems first to avoid unneeded calls to CDM.\n for (const preferredKeySystem of preferredKeySystems) {\n let keySystemSatisfied = false;\n for (const variant of variants) {\n /** @type {!Array.>} */\n const decodingConfigs = shaka.util.StreamUtils.getDecodingConfigs_(\n variant, usePersistentLicenses, srcEquals)\n .filter((configs) => {\n // All configs in a batch will have the same keySystem.\n const config = configs[0];\n const keySystem = config.keySystemConfiguration &&\n config.keySystemConfiguration.keySystem;\n return keySystem === preferredKeySystem;\n });\n\n // The reason we are performing this await in a loop rather than\n // batching into a `promise.all` is performance related.\n // https://github.com/shaka-project/shaka-player/pull/4708#discussion_r1022581178\n for (const configs of decodingConfigs) {\n // eslint-disable-next-line no-await-in-loop\n await shaka.util.StreamUtils.getDecodingInfosForVariant_(\n variant, configs);\n }\n if (variant.decodingInfos.length) {\n keySystemSatisfied = true;\n }\n } // for (const variant of variants)\n if (keySystemSatisfied) {\n // Return if any preferred key system is already satisfied.\n return;\n }\n } // for (const preferredKeySystem of preferredKeySystems)\n\n for (const variant of variants) {\n /** @type {!Array.>} */\n const decodingConfigs = shaka.util.StreamUtils.getDecodingConfigs_(\n variant, usePersistentLicenses, srcEquals)\n .filter((configs) => {\n // All configs in a batch will have the same keySystem.\n const config = configs[0];\n const keySystem = config.keySystemConfiguration &&\n config.keySystemConfiguration.keySystem;\n // Avoid checking preferred systems twice.\n return !keySystem || !preferredKeySystems.includes(keySystem);\n });\n\n // The reason we are performing this await in a loop rather than\n // batching into a `promise.all` is performance related.\n // https://github.com/shaka-project/shaka-player/pull/4708#discussion_r1022581178\n for (const configs of decodingConfigs) {\n // eslint-disable-next-line no-await-in-loop\n await shaka.util.StreamUtils.getDecodingInfosForVariant_(\n variant, configs);\n }\n }\n }\n\n\n /**\n * Generate a batch of MediaDecodingConfiguration objects to get the\n * decodingInfo results for each variant.\n * Each batch shares the same DRM information, and represents the various\n * fullMimeType combinations of the streams.\n * @param {!shaka.extern.Variant} variant\n * @param {boolean} usePersistentLicenses\n * @param {boolean} srcEquals\n * @return {!Array.>}\n * @private\n */\n static getDecodingConfigs_(variant, usePersistentLicenses, srcEquals) {\n const audio = variant.audio;\n const video = variant.video;\n\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const ManifestParserUtils = shaka.util.ManifestParserUtils;\n const MimeUtils = shaka.util.MimeUtils;\n const StreamUtils = shaka.util.StreamUtils;\n\n const videoConfigs = [];\n const audioConfigs = [];\n if (video) {\n for (const fullMimeType of video.fullMimeTypes) {\n let videoCodecs = MimeUtils.getCodecs(fullMimeType);\n\n // For multiplexed streams with audio+video codecs, the config should\n // have AudioConfiguration and VideoConfiguration.\n // We ignore the multiplexed audio when there is normal audio also.\n if (videoCodecs.includes(',') && !audio) {\n const allCodecs = videoCodecs.split(',');\n const baseMimeType = MimeUtils.getBasicType(fullMimeType);\n\n videoCodecs = ManifestParserUtils.guessCodecs(\n ContentType.VIDEO, allCodecs);\n\n let audioCodecs = ManifestParserUtils.guessCodecs(\n ContentType.AUDIO, allCodecs);\n audioCodecs = StreamUtils.getCorrectAudioCodecs(\n audioCodecs, baseMimeType);\n\n const audioFullType = MimeUtils.getFullOrConvertedType(\n baseMimeType, audioCodecs, ContentType.AUDIO);\n\n audioConfigs.push({\n contentType: audioFullType,\n channels: 2,\n bitrate: variant.bandwidth || 1,\n samplerate: 1,\n spatialRendering: false,\n });\n }\n\n videoCodecs = StreamUtils.getCorrectVideoCodecs(videoCodecs);\n const fullType = MimeUtils.getFullOrConvertedType(\n MimeUtils.getBasicType(fullMimeType), videoCodecs,\n ContentType.VIDEO);\n\n // VideoConfiguration\n const videoConfig = {\n contentType: fullType,\n\n // NOTE: Some decoders strictly check the width and height fields and\n // won't decode smaller than 64x64. So if we don't have this info (as\n // is the case in some of our simpler tests), assume a 64x64\n // resolution to fill in this required field for MediaCapabilities.\n //\n // This became an issue specifically on Firefox on M1 Macs.\n width: video.width || 64,\n height: video.height || 64,\n\n bitrate: video.bandwidth || variant.bandwidth || 1,\n // framerate must be greater than 0, otherwise the config is invalid.\n framerate: video.frameRate || 1,\n };\n if (video.hdr) {\n switch (video.hdr) {\n case 'SDR':\n videoConfig.transferFunction = 'srgb';\n break;\n case 'PQ':\n videoConfig.transferFunction = 'pq';\n break;\n case 'HLG':\n videoConfig.transferFunction = 'hlg';\n break;\n }\n }\n if (video.colorGamut) {\n videoConfig.colorGamut = video.colorGamut;\n }\n videoConfigs.push(videoConfig);\n }\n }\n if (audio) {\n for (const fullMimeType of audio.fullMimeTypes) {\n const baseMimeType = MimeUtils.getBasicType(fullMimeType);\n const codecs = StreamUtils.getCorrectAudioCodecs(\n MimeUtils.getCodecs(fullMimeType), baseMimeType);\n const fullType = MimeUtils.getFullOrConvertedType(\n baseMimeType, codecs, ContentType.AUDIO);\n\n // AudioConfiguration\n audioConfigs.push({\n contentType: fullType,\n channels: audio.channelsCount || 2,\n bitrate: audio.bandwidth || variant.bandwidth || 1,\n samplerate: audio.audioSamplingRate || 1,\n spatialRendering: audio.spatialAudio,\n });\n }\n }\n\n // Generate each combination of video and audio config as a separate\n // MediaDecodingConfiguration, inside the main \"batch\".\n /** @type {!Array.} */\n const mediaDecodingConfigBatch = [];\n if (videoConfigs.length == 0) {\n videoConfigs.push(null);\n }\n if (audioConfigs.length == 0) {\n audioConfigs.push(null);\n }\n for (const videoConfig of videoConfigs) {\n for (const audioConfig of audioConfigs) {\n /** @type {!MediaDecodingConfiguration} */\n const mediaDecodingConfig = {\n type: srcEquals ? 'file' : 'media-source',\n };\n if (videoConfig) {\n mediaDecodingConfig.video = videoConfig;\n }\n if (audioConfig) {\n mediaDecodingConfig.audio = audioConfig;\n }\n mediaDecodingConfigBatch.push(mediaDecodingConfig);\n }\n }\n\n const videoDrmInfos = variant.video ? variant.video.drmInfos : [];\n const audioDrmInfos = variant.audio ? variant.audio.drmInfos : [];\n const allDrmInfos = videoDrmInfos.concat(audioDrmInfos);\n\n // Return a list containing the mediaDecodingConfig for unencrypted variant.\n if (!allDrmInfos.length) {\n return [mediaDecodingConfigBatch];\n }\n\n // A list of MediaDecodingConfiguration objects created for the variant.\n const configs = [];\n\n // Get all the drm info so that we can avoid using nested loops when we\n // just need the drm info.\n const drmInfoByKeySystems = new Map();\n for (const info of allDrmInfos) {\n if (!drmInfoByKeySystems.get(info.keySystem)) {\n drmInfoByKeySystems.set(info.keySystem, []);\n }\n drmInfoByKeySystems.get(info.keySystem).push(info);\n }\n\n const persistentState =\n usePersistentLicenses ? 'required' : 'optional';\n const sessionTypes =\n usePersistentLicenses ? ['persistent-license'] : ['temporary'];\n\n for (const keySystem of drmInfoByKeySystems.keys()) {\n const modifiedMediaDecodingConfigBatch = [];\n for (const base of mediaDecodingConfigBatch) {\n // Create a copy of the mediaDecodingConfig.\n const config = /** @type {!MediaDecodingConfiguration} */\n (Object.assign({}, base));\n\n const drmInfos = drmInfoByKeySystems.get(keySystem);\n\n /** @type {!MediaCapabilitiesKeySystemConfiguration} */\n const keySystemConfig = {\n keySystem: keySystem,\n initDataType: 'cenc',\n persistentState: persistentState,\n distinctiveIdentifier: 'optional',\n sessionTypes: sessionTypes,\n };\n\n for (const info of drmInfos) {\n if (info.initData && info.initData.length) {\n const initDataTypes = new Set();\n for (const initData of info.initData) {\n initDataTypes.add(initData.initDataType);\n }\n if (initDataTypes.size > 1) {\n shaka.log.v2('DrmInfo contains more than one initDataType,',\n 'and we use the initDataType of the first initData.',\n info);\n }\n keySystemConfig.initDataType = info.initData[0].initDataType;\n }\n\n if (info.distinctiveIdentifierRequired) {\n keySystemConfig.distinctiveIdentifier = 'required';\n }\n if (info.persistentStateRequired) {\n keySystemConfig.persistentState = 'required';\n }\n if (info.sessionType) {\n keySystemConfig.sessionTypes = [info.sessionType];\n }\n\n if (audio) {\n if (!keySystemConfig.audio) {\n // KeySystemTrackConfiguration\n keySystemConfig.audio = {\n robustness: info.audioRobustness,\n };\n if (info.encryptionScheme) {\n keySystemConfig.audio.encryptionScheme = info.encryptionScheme;\n }\n } else {\n if (info.encryptionScheme) {\n keySystemConfig.audio.encryptionScheme =\n keySystemConfig.audio.encryptionScheme ||\n info.encryptionScheme;\n }\n keySystemConfig.audio.robustness =\n keySystemConfig.audio.robustness ||\n info.audioRobustness;\n }\n // See: https://github.com/shaka-project/shaka-player/issues/4659\n if (keySystemConfig.audio.robustness == '') {\n delete keySystemConfig.audio.robustness;\n }\n }\n\n if (video) {\n if (!keySystemConfig.video) {\n // KeySystemTrackConfiguration\n keySystemConfig.video = {\n robustness: info.videoRobustness,\n };\n if (info.encryptionScheme) {\n keySystemConfig.video.encryptionScheme = info.encryptionScheme;\n }\n } else {\n if (info.encryptionScheme) {\n keySystemConfig.video.encryptionScheme =\n keySystemConfig.video.encryptionScheme ||\n info.encryptionScheme;\n }\n keySystemConfig.video.robustness =\n keySystemConfig.video.robustness ||\n info.videoRobustness;\n }\n // See: https://github.com/shaka-project/shaka-player/issues/4659\n if (keySystemConfig.video.robustness == '') {\n delete keySystemConfig.video.robustness;\n }\n }\n }\n config.keySystemConfiguration = keySystemConfig;\n modifiedMediaDecodingConfigBatch.push(config);\n }\n configs.push(modifiedMediaDecodingConfigBatch);\n }\n return configs;\n }\n\n\n /**\n * Generates the correct audio codec for MediaDecodingConfiguration and\n * for MediaSource.isTypeSupported.\n * @param {string} codecs\n * @param {string} mimeType\n * @return {string}\n */\n static getCorrectAudioCodecs(codecs, mimeType) {\n // According to RFC 6381 section 3.3, 'fLaC' is actually the correct\n // codec string. We still need to map it to 'flac', as some browsers\n // currently don't support 'fLaC', while 'flac' is supported by most\n // major browsers.\n // See https://bugs.chromium.org/p/chromium/issues/detail?id=1422728\n if (codecs.toLowerCase() == 'flac') {\n if (!shaka.util.Platform.isSafari()) {\n return 'flac';\n } else {\n return 'fLaC';\n }\n }\n\n // The same is true for 'Opus'.\n if (codecs.toLowerCase() === 'opus') {\n if (!shaka.util.Platform.isSafari()) {\n return 'opus';\n } else {\n if (shaka.util.MimeUtils.getContainerType(mimeType) == 'mp4') {\n return 'Opus';\n } else {\n return 'opus';\n }\n }\n }\n\n return codecs;\n }\n\n\n /**\n * Generates the correct video codec for MediaDecodingConfiguration and\n * for MediaSource.isTypeSupported.\n * @param {string} codec\n * @return {string}\n */\n static getCorrectVideoCodecs(codec) {\n if (codec.includes('avc1')) {\n // Convert avc1 codec string from RFC-4281 to RFC-6381 for\n // MediaSource.isTypeSupported\n // Example, convert avc1.66.30 to avc1.42001e (0x42 == 66 and 0x1e == 30)\n const avcdata = codec.split('.');\n if (avcdata.length == 3) {\n let result = avcdata.shift() + '.';\n result += parseInt(avcdata.shift(), 10).toString(16);\n result +=\n ('000' + parseInt(avcdata.shift(), 10).toString(16)).slice(-4);\n return result;\n }\n } else if (codec == 'vp9') {\n // MediaCapabilities supports 'vp09...' codecs, but not 'vp9'. Translate\n // vp9 codec strings into 'vp09...', to allow such content to play with\n // mediaCapabilities enabled.\n // This means profile 0, level 4.1, 8-bit color. This supports 1080p @\n // 60Hz. See https://en.wikipedia.org/wiki/VP9#Levels\n //\n // If we don't have more detailed codec info, assume this profile and\n // level because it's high enough to likely accommodate the parameters we\n // do have, such as width and height. If an implementation is checking\n // the profile and level very strictly, we want older VP9 content to\n // still work to some degree. But we don't want to set a level so high\n // that it is rejected by a hardware decoder that can't handle the\n // maximum requirements of the level.\n //\n // This became an issue specifically on Firefox on M1 Macs.\n return 'vp09.00.41.08';\n }\n return codec;\n }\n\n\n /**\n * Alters the given Manifest to filter out any streams uncompatible with the\n * current variant.\n *\n * @param {?shaka.extern.Variant} currentVariant\n * @param {shaka.extern.Manifest} manifest\n */\n static filterManifestByCurrentVariant(currentVariant, manifest) {\n const StreamUtils = shaka.util.StreamUtils;\n manifest.variants = manifest.variants.filter((variant) => {\n const audio = variant.audio;\n const video = variant.video;\n if (audio && currentVariant && currentVariant.audio) {\n if (!StreamUtils.areStreamsCompatible_(audio, currentVariant.audio)) {\n shaka.log.debug('Dropping variant - not compatible with active audio',\n 'active audio',\n StreamUtils.getStreamSummaryString_(currentVariant.audio),\n 'variant.audio',\n StreamUtils.getStreamSummaryString_(audio));\n return false;\n }\n }\n\n if (video && currentVariant && currentVariant.video) {\n if (!StreamUtils.areStreamsCompatible_(video, currentVariant.video)) {\n shaka.log.debug('Dropping variant - not compatible with active video',\n 'active video',\n StreamUtils.getStreamSummaryString_(currentVariant.video),\n 'variant.video',\n StreamUtils.getStreamSummaryString_(video));\n return false;\n }\n }\n\n return true;\n });\n }\n\n /**\n * Alters the given Manifest to filter out any unsupported text streams.\n *\n * @param {shaka.extern.Manifest} manifest\n * @private\n */\n static filterTextStreams_(manifest) {\n // Filter text streams.\n manifest.textStreams = manifest.textStreams.filter((stream) => {\n const fullMimeType = shaka.util.MimeUtils.getFullType(\n stream.mimeType, stream.codecs);\n const keep = shaka.text.TextEngine.isTypeSupported(fullMimeType);\n\n if (!keep) {\n shaka.log.debug('Dropping text stream. Is not supported by the ' +\n 'platform.', stream);\n }\n\n return keep;\n });\n }\n\n\n /**\n * Alters the given Manifest to filter out any unsupported image streams.\n *\n * @param {shaka.extern.Manifest} manifest\n * @private\n */\n static async filterImageStreams_(manifest) {\n const imageStreams = [];\n for (const stream of manifest.imageStreams) {\n let mimeType = stream.mimeType;\n if (mimeType == 'application/mp4' && stream.codecs == 'mjpg') {\n mimeType = 'image/jpg';\n }\n if (!shaka.util.StreamUtils.supportedImageMimeTypes_.has(mimeType)) {\n const minImage = shaka.util.StreamUtils.minImage_.get(mimeType);\n if (minImage) {\n // eslint-disable-next-line no-await-in-loop\n const res = await shaka.util.StreamUtils.isImageSupported_(minImage);\n shaka.util.StreamUtils.supportedImageMimeTypes_.set(mimeType, res);\n } else {\n shaka.util.StreamUtils.supportedImageMimeTypes_.set(mimeType, false);\n }\n }\n\n const keep =\n shaka.util.StreamUtils.supportedImageMimeTypes_.get(mimeType);\n\n if (!keep) {\n shaka.log.debug('Dropping image stream. Is not supported by the ' +\n 'platform.', stream);\n } else {\n imageStreams.push(stream);\n }\n }\n manifest.imageStreams = imageStreams;\n }\n\n /**\n * @param {string} minImage\n * @return {!Promise.}\n * @private\n */\n static isImageSupported_(minImage) {\n return new Promise((resolve) => {\n const imageElement = /** @type {HTMLImageElement} */(new Image());\n imageElement.src = minImage;\n if ('decode' in imageElement) {\n imageElement.decode().then(() => {\n resolve(true);\n }).catch(() => {\n resolve(false);\n });\n } else {\n imageElement.onload = imageElement.onerror = () => {\n resolve(imageElement.height === 2);\n };\n }\n });\n }\n\n /**\n * @param {shaka.extern.Stream} s0\n * @param {shaka.extern.Stream} s1\n * @return {boolean}\n * @private\n */\n static areStreamsCompatible_(s0, s1) {\n // Basic mime types and basic codecs need to match.\n // For example, we can't adapt between WebM and MP4,\n // nor can we adapt between mp4a.* to ec-3.\n // We can switch between text types on the fly,\n // so don't run this check on text.\n if (s0.mimeType != s1.mimeType) {\n return false;\n }\n\n if (s0.codecs.split('.')[0] != s1.codecs.split('.')[0]) {\n return false;\n }\n\n return true;\n }\n\n\n /**\n * @param {shaka.extern.Variant} variant\n * @return {shaka.extern.Track}\n */\n static variantToTrack(variant) {\n /** @type {?shaka.extern.Stream} */\n const audio = variant.audio;\n /** @type {?shaka.extern.Stream} */\n const video = variant.video;\n\n /** @type {?string} */\n const audioMimeType = audio ? audio.mimeType : null;\n /** @type {?string} */\n const videoMimeType = video ? video.mimeType : null;\n\n /** @type {?string} */\n const audioCodec = audio ? audio.codecs : null;\n /** @type {?string} */\n const videoCodec = video ? video.codecs : null;\n\n /** @type {!Array.} */\n const codecs = [];\n if (videoCodec) {\n codecs.push(videoCodec);\n }\n if (audioCodec) {\n codecs.push(audioCodec);\n }\n\n /** @type {!Array.} */\n const mimeTypes = [];\n if (video) {\n mimeTypes.push(video.mimeType);\n }\n if (audio) {\n mimeTypes.push(audio.mimeType);\n }\n /** @type {?string} */\n const mimeType = mimeTypes[0] || null;\n\n /** @type {!Array.} */\n const kinds = [];\n if (audio) {\n kinds.push(audio.kind);\n }\n if (video) {\n kinds.push(video.kind);\n }\n /** @type {?string} */\n const kind = kinds[0] || null;\n\n /** @type {!Set.} */\n const roles = new Set();\n if (audio) {\n for (const role of audio.roles) {\n roles.add(role);\n }\n }\n if (video) {\n for (const role of video.roles) {\n roles.add(role);\n }\n }\n\n /** @type {shaka.extern.Track} */\n const track = {\n id: variant.id,\n active: false,\n type: 'variant',\n bandwidth: variant.bandwidth,\n language: variant.language,\n label: null,\n kind: kind,\n width: null,\n height: null,\n frameRate: null,\n pixelAspectRatio: null,\n hdr: null,\n colorGamut: null,\n videoLayout: null,\n mimeType: mimeType,\n audioMimeType: audioMimeType,\n videoMimeType: videoMimeType,\n codecs: codecs.join(', '),\n audioCodec: audioCodec,\n videoCodec: videoCodec,\n primary: variant.primary,\n roles: Array.from(roles),\n audioRoles: null,\n forced: false,\n videoId: null,\n audioId: null,\n channelsCount: null,\n audioSamplingRate: null,\n spatialAudio: false,\n tilesLayout: null,\n audioBandwidth: null,\n videoBandwidth: null,\n originalVideoId: null,\n originalAudioId: null,\n originalTextId: null,\n originalImageId: null,\n accessibilityPurpose: null,\n originalLanguage: null,\n };\n\n if (video) {\n track.videoId = video.id;\n track.originalVideoId = video.originalId;\n track.width = video.width || null;\n track.height = video.height || null;\n track.frameRate = video.frameRate || null;\n track.pixelAspectRatio = video.pixelAspectRatio || null;\n track.videoBandwidth = video.bandwidth || null;\n track.hdr = video.hdr || null;\n track.colorGamut = video.colorGamut || null;\n track.videoLayout = video.videoLayout || null;\n\n if (videoCodec.includes(',')) {\n track.channelsCount = video.channelsCount;\n track.audioSamplingRate = video.audioSamplingRate;\n track.spatialAudio = video.spatialAudio;\n track.originalLanguage = video.originalLanguage;\n }\n }\n\n if (audio) {\n track.audioId = audio.id;\n track.originalAudioId = audio.originalId;\n track.channelsCount = audio.channelsCount;\n track.audioSamplingRate = audio.audioSamplingRate;\n track.audioBandwidth = audio.bandwidth || null;\n track.spatialAudio = audio.spatialAudio;\n track.label = audio.label;\n track.audioRoles = audio.roles;\n track.accessibilityPurpose = audio.accessibilityPurpose;\n track.originalLanguage = audio.originalLanguage;\n }\n\n return track;\n }\n\n\n /**\n * @param {shaka.extern.Stream} stream\n * @return {shaka.extern.Track}\n */\n static textStreamToTrack(stream) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n /** @type {shaka.extern.Track} */\n const track = {\n id: stream.id,\n active: false,\n type: ContentType.TEXT,\n bandwidth: 0,\n language: stream.language,\n label: stream.label,\n kind: stream.kind || null,\n width: null,\n height: null,\n frameRate: null,\n pixelAspectRatio: null,\n hdr: null,\n colorGamut: null,\n videoLayout: null,\n mimeType: stream.mimeType,\n audioMimeType: null,\n videoMimeType: null,\n codecs: stream.codecs || null,\n audioCodec: null,\n videoCodec: null,\n primary: stream.primary,\n roles: stream.roles,\n audioRoles: null,\n forced: stream.forced,\n videoId: null,\n audioId: null,\n channelsCount: null,\n audioSamplingRate: null,\n spatialAudio: false,\n tilesLayout: null,\n audioBandwidth: null,\n videoBandwidth: null,\n originalVideoId: null,\n originalAudioId: null,\n originalTextId: stream.originalId,\n originalImageId: null,\n accessibilityPurpose: stream.accessibilityPurpose,\n originalLanguage: stream.originalLanguage,\n };\n\n return track;\n }\n\n\n /**\n * @param {shaka.extern.Stream} stream\n * @return {shaka.extern.Track}\n */\n static imageStreamToTrack(stream) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n let width = stream.width || null;\n let height = stream.height || null;\n\n // The stream width and height represent the size of the entire thumbnail\n // sheet, so divide by the layout.\n let reference = null;\n // Note: segmentIndex is built by default for HLS, but not for DASH, but\n // in DASH this information comes at the stream level and not at the\n // segment level.\n if (stream.segmentIndex) {\n reference = stream.segmentIndex.earliestReference();\n }\n let layout = stream.tilesLayout;\n if (reference) {\n layout = reference.getTilesLayout() || layout;\n }\n if (layout && width != null) {\n width /= Number(layout.split('x')[0]);\n }\n if (layout && height != null) {\n height /= Number(layout.split('x')[1]);\n }\n // TODO: What happens if there are multiple grids, with different\n // layout sizes, inside this image stream?\n\n /** @type {shaka.extern.Track} */\n const track = {\n id: stream.id,\n active: false,\n type: ContentType.IMAGE,\n bandwidth: stream.bandwidth || 0,\n language: '',\n label: null,\n kind: null,\n width,\n height,\n frameRate: null,\n pixelAspectRatio: null,\n hdr: null,\n colorGamut: null,\n videoLayout: null,\n mimeType: stream.mimeType,\n audioMimeType: null,\n videoMimeType: null,\n codecs: stream.codecs || null,\n audioCodec: null,\n videoCodec: null,\n primary: false,\n roles: [],\n audioRoles: null,\n forced: false,\n videoId: null,\n audioId: null,\n channelsCount: null,\n audioSamplingRate: null,\n spatialAudio: false,\n tilesLayout: layout || null,\n audioBandwidth: null,\n videoBandwidth: null,\n originalVideoId: null,\n originalAudioId: null,\n originalTextId: null,\n originalImageId: stream.originalId,\n accessibilityPurpose: null,\n originalLanguage: null,\n };\n\n return track;\n }\n\n\n /**\n * Generate and return an ID for this track, since the ID field is optional.\n *\n * @param {TextTrack|AudioTrack} html5Track\n * @return {number} The generated ID.\n */\n static html5TrackId(html5Track) {\n if (!html5Track['__shaka_id']) {\n html5Track['__shaka_id'] = shaka.util.StreamUtils.nextTrackId_++;\n }\n return html5Track['__shaka_id'];\n }\n\n\n /**\n * @param {TextTrack} textTrack\n * @return {shaka.extern.Track}\n */\n static html5TextTrackToTrack(textTrack) {\n const StreamUtils = shaka.util.StreamUtils;\n\n /** @type {shaka.extern.Track} */\n const track = StreamUtils.html5TrackToGenericShakaTrack_(textTrack);\n track.active = textTrack.mode != 'disabled';\n track.type = 'text';\n track.originalTextId = textTrack.id;\n if (textTrack.kind == 'captions') {\n // See: https://github.com/shaka-project/shaka-player/issues/6233\n track.mimeType = 'unknown';\n }\n if (textTrack.kind == 'subtitles') {\n track.mimeType = 'text/vtt';\n }\n if (textTrack.kind) {\n track.roles = [textTrack.kind];\n }\n if (textTrack.kind == 'forced') {\n track.forced = true;\n }\n\n return track;\n }\n\n\n /**\n * @param {AudioTrack} audioTrack\n * @return {shaka.extern.Track}\n */\n static html5AudioTrackToTrack(audioTrack) {\n const StreamUtils = shaka.util.StreamUtils;\n\n /** @type {shaka.extern.Track} */\n const track = StreamUtils.html5TrackToGenericShakaTrack_(audioTrack);\n track.active = audioTrack.enabled;\n track.type = 'variant';\n track.originalAudioId = audioTrack.id;\n\n if (audioTrack.kind == 'main') {\n track.primary = true;\n }\n if (audioTrack.kind) {\n track.roles = [audioTrack.kind];\n track.audioRoles = [audioTrack.kind];\n track.label = audioTrack.label;\n }\n\n return track;\n }\n\n\n /**\n * Creates a Track object with non-type specific fields filled out. The\n * caller is responsible for completing the Track object with any\n * type-specific information (audio or text).\n *\n * @param {TextTrack|AudioTrack} html5Track\n * @return {shaka.extern.Track}\n * @private\n */\n static html5TrackToGenericShakaTrack_(html5Track) {\n const language = html5Track.language;\n\n /** @type {shaka.extern.Track} */\n const track = {\n id: shaka.util.StreamUtils.html5TrackId(html5Track),\n active: false,\n type: '',\n bandwidth: 0,\n language: shaka.util.LanguageUtils.normalize(language || 'und'),\n label: html5Track.label,\n kind: html5Track.kind,\n width: null,\n height: null,\n frameRate: null,\n pixelAspectRatio: null,\n hdr: null,\n colorGamut: null,\n videoLayout: null,\n mimeType: null,\n audioMimeType: null,\n videoMimeType: null,\n codecs: null,\n audioCodec: null,\n videoCodec: null,\n primary: false,\n roles: [],\n forced: false,\n audioRoles: null,\n videoId: null,\n audioId: null,\n channelsCount: null,\n audioSamplingRate: null,\n spatialAudio: false,\n tilesLayout: null,\n audioBandwidth: null,\n videoBandwidth: null,\n originalVideoId: null,\n originalAudioId: null,\n originalTextId: null,\n originalImageId: null,\n accessibilityPurpose: null,\n originalLanguage: language,\n };\n\n return track;\n }\n\n\n /**\n * Determines if the given variant is playable.\n * @param {!shaka.extern.Variant} variant\n * @return {boolean}\n */\n static isPlayable(variant) {\n return variant.allowedByApplication &&\n variant.allowedByKeySystem &&\n variant.disabledUntilTime == 0;\n }\n\n\n /**\n * Filters out unplayable variants.\n * @param {!Array.} variants\n * @return {!Array.}\n */\n static getPlayableVariants(variants) {\n return variants.filter((variant) => {\n return shaka.util.StreamUtils.isPlayable(variant);\n });\n }\n\n\n /**\n * Chooses streams according to the given config.\n * Works both for Stream and Track types due to their similarities.\n *\n * @param {!Array|!Array} streams\n * @param {string} preferredLanguage\n * @param {string} preferredRole\n * @param {boolean} preferredForced\n * @return {!Array|!Array}\n */\n static filterStreamsByLanguageAndRole(\n streams, preferredLanguage, preferredRole, preferredForced) {\n const LanguageUtils = shaka.util.LanguageUtils;\n\n /** @type {!Array|!Array} */\n let chosen = streams;\n\n // Start with the set of primary streams.\n /** @type {!Array|!Array} */\n const primary = streams.filter((stream) => {\n return stream.primary;\n });\n\n if (primary.length) {\n chosen = primary;\n }\n\n // Now reduce the set to one language. This covers both arbitrary language\n // choice and the reduction of the \"primary\" stream set to one language.\n const firstLanguage = chosen.length ? chosen[0].language : '';\n chosen = chosen.filter((stream) => {\n return stream.language == firstLanguage;\n });\n\n // Find the streams that best match our language preference. This will\n // override previous selections.\n if (preferredLanguage) {\n const closestLocale = LanguageUtils.findClosestLocale(\n LanguageUtils.normalize(preferredLanguage),\n streams.map((stream) => stream.language));\n\n // Only replace |chosen| if we found a locale that is close to our\n // preference.\n if (closestLocale) {\n chosen = streams.filter((stream) => {\n const locale = LanguageUtils.normalize(stream.language);\n return locale == closestLocale;\n });\n }\n }\n\n // Filter by forced preference\n chosen = chosen.filter((stream) => {\n return stream.forced == preferredForced;\n });\n\n // Now refine the choice based on role preference.\n if (preferredRole) {\n const roleMatches = shaka.util.StreamUtils.filterStreamsByRole_(\n chosen, preferredRole);\n if (roleMatches.length) {\n return roleMatches;\n } else {\n shaka.log.warning('No exact match for the text role could be found.');\n }\n } else {\n // Prefer text streams with no roles, if they exist.\n const noRoleMatches = chosen.filter((stream) => {\n return stream.roles.length == 0;\n });\n if (noRoleMatches.length) {\n return noRoleMatches;\n }\n }\n\n // Either there was no role preference, or it could not be satisfied.\n // Choose an arbitrary role, if there are any, and filter out any other\n // roles. This ensures we never adapt between roles.\n\n const allRoles = chosen.map((stream) => {\n return stream.roles;\n }).reduce(shaka.util.Functional.collapseArrays, []);\n\n if (!allRoles.length) {\n return chosen;\n }\n return shaka.util.StreamUtils.filterStreamsByRole_(chosen, allRoles[0]);\n }\n\n\n /**\n * Filter Streams by role.\n * Works both for Stream and Track types due to their similarities.\n *\n * @param {!Array|!Array} streams\n * @param {string} preferredRole\n * @return {!Array|!Array}\n * @private\n */\n static filterStreamsByRole_(streams, preferredRole) {\n return streams.filter((stream) => {\n return stream.roles.includes(preferredRole);\n });\n }\n\n\n /**\n * Checks if the given stream is an audio stream.\n *\n * @param {shaka.extern.Stream} stream\n * @return {boolean}\n */\n static isAudio(stream) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n return stream.type == ContentType.AUDIO;\n }\n\n\n /**\n * Checks if the given stream is a video stream.\n *\n * @param {shaka.extern.Stream} stream\n * @return {boolean}\n */\n static isVideo(stream) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n return stream.type == ContentType.VIDEO;\n }\n\n\n /**\n * Get all non-null streams in the variant as an array.\n *\n * @param {shaka.extern.Variant} variant\n * @return {!Array.}\n */\n static getVariantStreams(variant) {\n const streams = [];\n\n if (variant.audio) {\n streams.push(variant.audio);\n }\n if (variant.video) {\n streams.push(variant.video);\n }\n\n return streams;\n }\n\n\n /**\n * Indicates if some of the variant's streams are fastSwitching.\n *\n * @param {shaka.extern.Variant} variant\n * @return {boolean}\n */\n static isFastSwitching(variant) {\n if (variant.audio && variant.audio.fastSwitching) {\n return true;\n }\n if (variant.video && variant.video.fastSwitching) {\n return true;\n }\n return false;\n }\n\n\n /**\n * Set the best iframe stream to the original stream.\n *\n * @param {!shaka.extern.Stream} stream\n * @param {!Array.} iFrameStreams\n */\n static setBetterIFrameStream(stream, iFrameStreams) {\n if (!iFrameStreams.length) {\n return;\n }\n const validStreams = iFrameStreams.filter((iFrameStream) =>\n shaka.util.MimeUtils.getNormalizedCodec(stream.codecs) ==\n shaka.util.MimeUtils.getNormalizedCodec(iFrameStream.codecs))\n .sort((a, b) => {\n if (!a.bandwidth || !b.bandwidth || a.bandwidth == b.bandwidth) {\n return (a.width || 0) - (b.width || 0);\n }\n return a.bandwidth - b.bandwidth;\n });\n stream.trickModeVideo = validStreams[0];\n if (validStreams.length > 1) {\n const sameResolutionStream = validStreams.find((iFrameStream) =>\n stream.width == iFrameStream.width &&\n stream.height == iFrameStream.height);\n if (sameResolutionStream) {\n stream.trickModeVideo = sameResolutionStream;\n }\n }\n }\n\n\n /**\n * Returns a string of a variant, with the attribute values of its audio\n * and/or video streams for log printing.\n * @param {shaka.extern.Variant} variant\n * @return {string}\n * @private\n */\n static getVariantSummaryString_(variant) {\n const summaries = [];\n if (variant.audio) {\n summaries.push(shaka.util.StreamUtils.getStreamSummaryString_(\n variant.audio));\n }\n if (variant.video) {\n summaries.push(shaka.util.StreamUtils.getStreamSummaryString_(\n variant.video));\n }\n return summaries.join(', ');\n }\n\n /**\n * Returns a string of an audio or video stream for log printing.\n * @param {shaka.extern.Stream} stream\n * @return {string}\n * @private\n */\n static getStreamSummaryString_(stream) {\n // Accepted parameters for Chromecast can be found (internally) at\n // go/cast-mime-params\n\n if (shaka.util.StreamUtils.isAudio(stream)) {\n return 'type=audio' +\n ' codecs=' + stream.codecs +\n ' bandwidth='+ stream.bandwidth +\n ' channelsCount=' + stream.channelsCount +\n ' audioSamplingRate=' + stream.audioSamplingRate;\n }\n\n if (shaka.util.StreamUtils.isVideo(stream)) {\n return 'type=video' +\n ' codecs=' + stream.codecs +\n ' bandwidth=' + stream.bandwidth +\n ' frameRate=' + stream.frameRate +\n ' width=' + stream.width +\n ' height=' + stream.height;\n }\n\n return 'unexpected stream type';\n }\n\n\n /**\n * Clears underlying decoding config cache.\n */\n static clearDecodingConfigCache() {\n shaka.util.StreamUtils.decodingConfigCache_ = {};\n }\n};\n\n\n/**\n * A cache of results from mediaCapabilities.decodingInfo, indexed by the\n * (stringified) decodingConfig.\n *\n * @type {Object.<(!string), (!MediaCapabilitiesDecodingInfo)>}\n * @private\n */\nshaka.util.StreamUtils.decodingConfigCache_ = {};\n\n\n/** @private {number} */\nshaka.util.StreamUtils.nextTrackId_ = 0;\n\n/**\n * @enum {string}\n */\nshaka.util.StreamUtils.DecodingAttributes = {\n SMOOTH: 'smooth',\n POWER: 'powerEfficient',\n};\n\n/**\n * @private {!Map.}\n */\nshaka.util.StreamUtils.supportedImageMimeTypes_ = new Map()\n .set('image/svg+xml', true)\n .set('image/png', true)\n .set('image/jpeg', true)\n .set('image/jpg', true);\n\n/**\n * @const {string}\n * @private\n */\nshaka.util.StreamUtils.minWebPImage_ = 'data:image/webp;base64,UklGRjoAAABXRU' +\n 'JQVlA4IC4AAACyAgCdASoCAAIALmk0mk0iIiIiIgBoSygABc6WWgAA/veff/0PP8bA//LwY' +\n 'AAA';\n\n/**\n * @const {string}\n * @private\n */\nshaka.util.StreamUtils.minAvifImage_ = 'data:image/avif;base64,AAAAIGZ0eXBhdm' +\n 'lmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljd' +\n 'AAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEA' +\n 'AAABAAABGgAAAB0AAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAA' +\n 'AamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAIAAAACAAAAEHBpeGkAAAAAAwgICAAAAA' +\n 'xhdjFDgQ0MAAAAABNjb2xybmNseAACAAIAAYAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAA' +\n 'CVtZGF0EgAKCBgANogQEAwgMg8f8D///8WfhwB8+ErK42A=';\n\n/**\n * @const {!Map.}\n * @private\n */\nshaka.util.StreamUtils.minImage_ = new Map()\n .set('image/webp', shaka.util.StreamUtils.minWebPImage_)\n .set('image/avif', shaka.util.StreamUtils.minAvifImage_);\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.DrmEngine');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.net.NetworkingEngine');\ngoog.require('shaka.util.ArrayUtils');\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.Destroyer');\ngoog.require('shaka.util.DrmUtils');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.Functional');\ngoog.require('shaka.util.IDestroyable');\ngoog.require('shaka.util.Iterables');\ngoog.require('shaka.util.ManifestParserUtils');\ngoog.require('shaka.util.MapUtils');\ngoog.require('shaka.util.ObjectUtils');\ngoog.require('shaka.util.Platform');\ngoog.require('shaka.util.Pssh');\ngoog.require('shaka.util.PublicPromise');\ngoog.require('shaka.util.StreamUtils');\ngoog.require('shaka.util.StringUtils');\ngoog.require('shaka.util.Timer');\ngoog.require('shaka.util.TXml');\ngoog.require('shaka.util.Uint8ArrayUtils');\n\n\n/** @implements {shaka.util.IDestroyable} */\nshaka.media.DrmEngine = class {\n /**\n * @param {shaka.media.DrmEngine.PlayerInterface} playerInterface\n */\n constructor(playerInterface) {\n /** @private {?shaka.media.DrmEngine.PlayerInterface} */\n this.playerInterface_ = playerInterface;\n\n /** @private {MediaKeys} */\n this.mediaKeys_ = null;\n\n /** @private {HTMLMediaElement} */\n this.video_ = null;\n\n /** @private {boolean} */\n this.initialized_ = false;\n\n /** @private {boolean} */\n this.initializedForStorage_ = false;\n\n /** @private {number} */\n this.licenseTimeSeconds_ = 0;\n\n /** @private {?shaka.extern.DrmInfo} */\n this.currentDrmInfo_ = null;\n\n /** @private {shaka.util.EventManager} */\n this.eventManager_ = new shaka.util.EventManager();\n\n /**\n * @private {!Map.}\n */\n this.activeSessions_ = new Map();\n\n /** @private {!Array.} */\n this.activeRequests_ = [];\n\n /**\n * @private {!Map}\n */\n this.storedPersistentSessions_ = new Map();\n\n /** @private {boolean} */\n this.hasInitData_ = false;\n\n /** @private {!shaka.util.PublicPromise} */\n this.allSessionsLoaded_ = new shaka.util.PublicPromise();\n\n /** @private {?shaka.extern.DrmConfiguration} */\n this.config_ = null;\n\n /** @private {function(!shaka.util.Error)} */\n this.onError_ = (err) => {\n if (err.severity == shaka.util.Error.Severity.CRITICAL) {\n this.allSessionsLoaded_.reject(err);\n }\n\n playerInterface.onError(err);\n };\n\n /**\n * The most recent key status information we have.\n * We may not have announced this information to the outside world yet,\n * which we delay to batch up changes and avoid spurious \"missing key\"\n * errors.\n * @private {!Map.}\n */\n this.keyStatusByKeyId_ = new Map();\n\n /**\n * The key statuses most recently announced to other classes.\n * We may have more up-to-date information being collected in\n * this.keyStatusByKeyId_, which has not been batched up and released yet.\n * @private {!Map.}\n */\n this.announcedKeyStatusByKeyId_ = new Map();\n\n /** @private {shaka.util.Timer} */\n this.keyStatusTimer_ =\n new shaka.util.Timer(() => this.processKeyStatusChanges_());\n\n /** @private {boolean} */\n this.usePersistentLicenses_ = false;\n\n /** @private {!Array.} */\n this.mediaKeyMessageEvents_ = [];\n\n /** @private {boolean} */\n this.initialRequestsSent_ = false;\n\n /** @private {?shaka.util.Timer} */\n this.expirationTimer_ = new shaka.util.Timer(() => {\n this.pollExpiration_();\n });\n\n // Add a catch to the Promise to avoid console logs about uncaught errors.\n const noop = () => {};\n this.allSessionsLoaded_.catch(noop);\n\n /** @const {!shaka.util.Destroyer} */\n this.destroyer_ = new shaka.util.Destroyer(() => this.destroyNow_());\n\n /** @private {boolean} */\n this.srcEquals_ = false;\n\n /** @private {Promise} */\n this.mediaKeysAttached_ = null;\n\n /** @private {?shaka.extern.InitDataOverride} */\n this.manifestInitData_ = null;\n\n /** @private {function():boolean} */\n this.isPreload_ = () => false;\n }\n\n /** @override */\n destroy() {\n return this.destroyer_.destroy();\n }\n\n /**\n * Destroy this instance of DrmEngine. This assumes that all other checks\n * about \"if it should\" have passed.\n *\n * @private\n */\n async destroyNow_() {\n // |eventManager_| should only be |null| after we call |destroy|. Destroy it\n // first so that we will stop responding to events.\n this.eventManager_.release();\n this.eventManager_ = null;\n\n // Since we are destroying ourselves, we don't want to react to the \"all\n // sessions loaded\" event.\n this.allSessionsLoaded_.reject();\n\n // Stop all timers. This will ensure that they do not start any new work\n // while we are destroying ourselves.\n this.expirationTimer_.stop();\n this.expirationTimer_ = null;\n\n this.keyStatusTimer_.stop();\n this.keyStatusTimer_ = null;\n\n // Close all open sessions.\n await this.closeOpenSessions_();\n\n // |video_| will be |null| if we never attached to a video element.\n if (this.video_) {\n // Webkit EME implementation requires the src to be defined to clear\n // the MediaKeys.\n if (!shaka.util.Platform.isMediaKeysPolyfilled('webkit')) {\n goog.asserts.assert(\n !this.video_.src &&\n !this.video_.getElementsByTagName('source').length,\n 'video src must be removed first!');\n }\n\n try {\n await this.video_.setMediaKeys(null);\n } catch (error) {\n // Ignore any failures while removing media keys from the video element.\n shaka.log.debug(`DrmEngine.destroyNow_ exception`, error);\n }\n\n this.video_ = null;\n }\n\n // Break references to everything else we hold internally.\n this.currentDrmInfo_ = null;\n this.mediaKeys_ = null;\n this.storedPersistentSessions_ = new Map();\n this.config_ = null;\n this.onError_ = () => {};\n this.playerInterface_ = null;\n this.srcEquals_ = false;\n this.mediaKeysAttached_ = null;\n }\n\n /**\n * Called by the Player to provide an updated configuration any time it\n * changes.\n * Must be called at least once before init().\n *\n * @param {shaka.extern.DrmConfiguration} config\n * @param {(function():boolean)=} isPreload\n */\n configure(config, isPreload) {\n this.config_ = config;\n if (isPreload) {\n this.isPreload_ = isPreload;\n }\n if (this.expirationTimer_) {\n this.expirationTimer_.tickEvery(\n /* seconds= */ this.config_.updateExpirationTime);\n }\n }\n\n /**\n * @param {!boolean} value\n */\n setSrcEquals(value) {\n this.srcEquals_ = value;\n }\n\n /**\n * Initialize the drm engine for storing and deleting stored content.\n *\n * @param {!Array.} variants\n * The variants that are going to be stored.\n * @param {boolean} usePersistentLicenses\n * Whether or not persistent licenses should be requested and stored for\n * |manifest|.\n * @return {!Promise}\n */\n initForStorage(variants, usePersistentLicenses) {\n this.initializedForStorage_ = true;\n // There are two cases for this call:\n // 1. We are about to store a manifest - in that case, there are no offline\n // sessions and therefore no offline session ids.\n // 2. We are about to remove the offline sessions for this manifest - in\n // that case, we don't need to know about them right now either as\n // we will be told which ones to remove later.\n this.storedPersistentSessions_ = new Map();\n\n // What we really need to know is whether or not they are expecting to use\n // persistent licenses.\n this.usePersistentLicenses_ = usePersistentLicenses;\n\n return this.init_(variants);\n }\n\n /**\n * Initialize the drm engine for playback operations.\n *\n * @param {!Array.} variants\n * The variants that we want to support playing.\n * @param {!Array.} offlineSessionIds\n * @return {!Promise}\n */\n initForPlayback(variants, offlineSessionIds) {\n this.storedPersistentSessions_ = new Map();\n\n for (const sessionId of offlineSessionIds) {\n this.storedPersistentSessions_.set(\n sessionId, {initData: null, initDataType: null});\n }\n\n for (const metadata of this.config_.persistentSessionsMetadata) {\n this.storedPersistentSessions_.set(\n metadata.sessionId,\n {initData: metadata.initData, initDataType: metadata.initDataType});\n }\n\n this.usePersistentLicenses_ = this.storedPersistentSessions_.size > 0;\n\n return this.init_(variants);\n }\n\n /**\n * Initializes the drm engine for removing persistent sessions. Only the\n * removeSession(s) methods will work correctly, creating new sessions may not\n * work as desired.\n *\n * @param {string} keySystem\n * @param {string} licenseServerUri\n * @param {Uint8Array} serverCertificate\n * @param {!Array.} audioCapabilities\n * @param {!Array.} videoCapabilities\n * @return {!Promise}\n */\n initForRemoval(keySystem, licenseServerUri, serverCertificate,\n audioCapabilities, videoCapabilities) {\n /** @type {!Map.} */\n const configsByKeySystem = new Map();\n\n /** @type {MediaKeySystemConfiguration} */\n const config = {\n audioCapabilities: audioCapabilities,\n videoCapabilities: videoCapabilities,\n distinctiveIdentifier: 'optional',\n persistentState: 'required',\n sessionTypes: ['persistent-license'],\n label: keySystem, // Tracked by us, ignored by EME.\n };\n\n // TODO: refactor, don't stick drmInfos onto MediaKeySystemConfiguration\n config['drmInfos'] = [{ // Non-standard attribute, ignored by EME.\n keySystem: keySystem,\n licenseServerUri: licenseServerUri,\n distinctiveIdentifierRequired: false,\n persistentStateRequired: true,\n audioRobustness: '', // Not required by queryMediaKeys_\n videoRobustness: '', // Same\n serverCertificate: serverCertificate,\n serverCertificateUri: '',\n initData: null,\n keyIds: null,\n }];\n\n configsByKeySystem.set(keySystem, config);\n return this.queryMediaKeys_(configsByKeySystem,\n /* variants= */ []);\n }\n\n /**\n * Negotiate for a key system and set up MediaKeys.\n * This will assume that both |usePersistentLicences_| and\n * |storedPersistentSessions_| have been properly set.\n *\n * @param {!Array.} variants\n * The variants that we expect to operate with during the drm engine's\n * lifespan of the drm engine.\n * @return {!Promise} Resolved if/when a key system has been chosen.\n * @private\n */\n async init_(variants) {\n goog.asserts.assert(this.config_,\n 'DrmEngine configure() must be called before init()!');\n\n // ClearKey config overrides the manifest DrmInfo if present. The variants\n // are modified so that filtering in Player still works.\n // This comes before hadDrmInfo because it influences the value of that.\n /** @type {?shaka.extern.DrmInfo} */\n const clearKeyDrmInfo = this.configureClearKey_();\n if (clearKeyDrmInfo) {\n for (const variant of variants) {\n if (variant.video) {\n variant.video.drmInfos = [clearKeyDrmInfo];\n }\n if (variant.audio) {\n variant.audio.drmInfos = [clearKeyDrmInfo];\n }\n }\n }\n\n const hadDrmInfo = variants.some((variant) => {\n if (variant.video && variant.video.drmInfos.length) {\n return true;\n }\n if (variant.audio && variant.audio.drmInfos.length) {\n return true;\n }\n return false;\n });\n\n // When preparing to play live streams, it is possible that we won't know\n // about some upcoming encrypted content. If we initialize the drm engine\n // with no key systems, we won't be able to play when the encrypted content\n // comes.\n //\n // To avoid this, we will set the drm engine up to work with as many key\n // systems as possible so that we will be ready.\n if (!hadDrmInfo) {\n const servers = shaka.util.MapUtils.asMap(this.config_.servers);\n shaka.media.DrmEngine.replaceDrmInfo_(variants, servers);\n }\n\n /** @type {!Set} */\n const drmInfos = new Set();\n for (const variant of variants) {\n const variantDrmInfos = this.getVariantDrmInfos_(variant);\n for (const info of variantDrmInfos) {\n drmInfos.add(info);\n }\n }\n\n for (const info of drmInfos) {\n shaka.media.DrmEngine.fillInDrmInfoDefaults_(\n info,\n shaka.util.MapUtils.asMap(this.config_.servers),\n shaka.util.MapUtils.asMap(this.config_.advanced || {}),\n this.config_.keySystemsMapping);\n }\n\n /** @type {!Map.} */\n let configsByKeySystem;\n\n // We should get the decodingInfo results for the variants after we filling\n // in the drm infos, and before queryMediaKeys_().\n await shaka.util.StreamUtils.getDecodingInfosForVariants(variants,\n this.usePersistentLicenses_, this.srcEquals_,\n this.config_.preferredKeySystems);\n this.destroyer_.ensureNotDestroyed();\n\n const hasDrmInfo = hadDrmInfo || Object.keys(this.config_.servers).length;\n // An unencrypted content is initialized.\n if (!hasDrmInfo) {\n this.initialized_ = true;\n return Promise.resolve();\n }\n\n const p = this.queryMediaKeys_(configsByKeySystem, variants);\n\n // TODO(vaage): Look into the assertion below. If we do not have any drm\n // info, we create drm info so that content can play if it has drm info\n // later.\n // However it is okay if we fail to initialize? If we fail to initialize,\n // it means we won't be able to play the later-encrypted content, which is\n // not okay.\n\n // If the content did not originally have any drm info, then it doesn't\n // matter if we fail to initialize the drm engine, because we won't need it\n // anyway.\n return hadDrmInfo ? p : p.catch(() => {});\n }\n\n /**\n * Attach MediaKeys to the video element\n * @return {Promise}\n * @private\n */\n async attachMediaKeys_() {\n if (this.video_.mediaKeys) {\n return;\n }\n\n // An attach process has already started, let's wait it out\n if (this.mediaKeysAttached_) {\n await this.mediaKeysAttached_;\n\n this.destroyer_.ensureNotDestroyed();\n return;\n }\n\n try {\n this.mediaKeysAttached_ = this.video_.setMediaKeys(this.mediaKeys_);\n\n await this.mediaKeysAttached_;\n } catch (exception) {\n goog.asserts.assert(exception instanceof Error, 'Wrong error type!');\n\n this.onError_(new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.FAILED_TO_ATTACH_TO_VIDEO,\n exception.message));\n }\n\n this.destroyer_.ensureNotDestroyed();\n }\n\n /**\n * Processes encrypted event and start licence challenging\n * @return {!Promise}\n * @private\n */\n async onEncryptedEvent_(event) {\n /**\n * MediaKeys should be added when receiving an encrypted event. Setting\n * mediaKeys before could result into encrypted event not being fired on\n * some browsers\n */\n await this.attachMediaKeys_();\n\n this.newInitData(\n event.initDataType,\n shaka.util.BufferUtils.toUint8(event.initData));\n }\n\n /**\n * Start processing events.\n * @param {HTMLMediaElement} video\n * @return {!Promise}\n */\n async attach(video) {\n if (!this.mediaKeys_) {\n // Unencrypted, or so we think. We listen for encrypted events in order\n // to warn when the stream is encrypted, even though the manifest does\n // not know it.\n // Don't complain about this twice, so just listenOnce().\n // FIXME: This is ineffective when a prefixed event is translated by our\n // polyfills, since those events are only caught and translated by a\n // MediaKeys instance. With clear content and no polyfilled MediaKeys\n // instance attached, you'll never see the 'encrypted' event on those\n // platforms (Safari).\n this.eventManager_.listenOnce(video, 'encrypted', (event) => {\n this.onError_(new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.ENCRYPTED_CONTENT_WITHOUT_DRM_INFO));\n });\n return;\n }\n\n this.video_ = video;\n\n this.eventManager_.listenOnce(this.video_, 'play', () => this.onPlay_());\n if (this.video_.remote) {\n this.eventManager_.listen(this.video_.remote, 'connect',\n () => this.closeOpenSessions_());\n this.eventManager_.listen(this.video_.remote, 'connecting',\n () => this.closeOpenSessions_());\n this.eventManager_.listen(this.video_.remote, 'disconnect',\n () => this.closeOpenSessions_());\n } else if ('webkitCurrentPlaybackTargetIsWireless' in this.video_) {\n this.eventManager_.listen(this.video_,\n 'webkitcurrentplaybacktargetiswirelesschanged',\n () => this.closeOpenSessions_());\n }\n\n this.manifestInitData_ = this.currentDrmInfo_ ?\n (this.currentDrmInfo_.initData.find(\n (initDataOverride) => initDataOverride.initData.length > 0,\n ) || null) : null;\n\n /**\n * We can attach media keys before the playback actually begins when:\n * - If we are not using FairPlay Modern EME\n * - Some initData already has been generated (through the manifest)\n * - In case of an offline session\n */\n if (this.manifestInitData_ ||\n this.currentDrmInfo_.keySystem !== 'com.apple.fps' ||\n this.storedPersistentSessions_.size) {\n await this.attachMediaKeys_();\n }\n\n this.createOrLoad().catch(() => {\n // Silence errors\n // createOrLoad will run async, errors are triggered through onError_\n });\n\n // Explicit init data for any one stream or an offline session is\n // sufficient to suppress 'encrypted' events for all streams.\n // Also suppress 'encrypted' events when parsing in-band ppsh\n // from media segments because that serves the same purpose as the\n // 'encrypted' events.\n if (!this.manifestInitData_ && !this.storedPersistentSessions_.size &&\n !this.config_.parseInbandPsshEnabled) {\n this.eventManager_.listen(\n this.video_, 'encrypted', (e) => this.onEncryptedEvent_(e));\n }\n }\n\n /**\n * Returns true if the manifest has init data.\n *\n * @return {boolean}\n */\n hasManifestInitData() {\n return !!this.manifestInitData_;\n }\n\n /**\n * Sets the server certificate based on the current DrmInfo.\n *\n * @return {!Promise}\n */\n async setServerCertificate() {\n goog.asserts.assert(this.initialized_,\n 'Must call init() before setServerCertificate');\n\n if (!this.mediaKeys_ || !this.currentDrmInfo_) {\n return;\n }\n\n if (this.currentDrmInfo_.serverCertificateUri &&\n (!this.currentDrmInfo_.serverCertificate ||\n !this.currentDrmInfo_.serverCertificate.length)) {\n const request = shaka.net.NetworkingEngine.makeRequest(\n [this.currentDrmInfo_.serverCertificateUri],\n this.config_.retryParameters);\n\n try {\n const operation = this.playerInterface_.netEngine.request(\n shaka.net.NetworkingEngine.RequestType.SERVER_CERTIFICATE,\n request, {isPreload: this.isPreload_()});\n const response = await operation.promise;\n\n this.currentDrmInfo_.serverCertificate =\n shaka.util.BufferUtils.toUint8(response.data);\n } catch (error) {\n // Request failed!\n goog.asserts.assert(error instanceof shaka.util.Error,\n 'Wrong NetworkingEngine error type!');\n\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.SERVER_CERTIFICATE_REQUEST_FAILED,\n error);\n }\n\n if (this.destroyer_.destroyed()) {\n return;\n }\n }\n\n if (!this.currentDrmInfo_.serverCertificate ||\n !this.currentDrmInfo_.serverCertificate.length) {\n return;\n }\n\n try {\n const supported = await this.mediaKeys_.setServerCertificate(\n this.currentDrmInfo_.serverCertificate);\n\n if (!supported) {\n shaka.log.warning('Server certificates are not supported by the ' +\n 'key system. The server certificate has been ' +\n 'ignored.');\n }\n } catch (exception) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.INVALID_SERVER_CERTIFICATE,\n exception.message);\n }\n }\n\n /**\n * Remove an offline session and delete it's data. This can only be called\n * after a successful call to |init|. This will wait until the\n * 'license-release' message is handled. The returned Promise will be rejected\n * if there is an error releasing the license.\n *\n * @param {string} sessionId\n * @return {!Promise}\n */\n async removeSession(sessionId) {\n goog.asserts.assert(this.mediaKeys_,\n 'Must call init() before removeSession');\n\n const session = await this.loadOfflineSession_(\n sessionId, {initData: null, initDataType: null});\n\n // This will be null on error, such as session not found.\n if (!session) {\n shaka.log.v2('Ignoring attempt to remove missing session', sessionId);\n return;\n }\n\n // TODO: Consider adding a timeout to get the 'message' event.\n // Note that the 'message' event will get raised after the remove()\n // promise resolves.\n const tasks = [];\n\n const found = this.activeSessions_.get(session);\n if (found) {\n // This will force us to wait until the 'license-release' message has been\n // handled.\n found.updatePromise = new shaka.util.PublicPromise();\n tasks.push(found.updatePromise);\n }\n\n shaka.log.v2('Attempting to remove session', sessionId);\n tasks.push(session.remove());\n\n await Promise.all(tasks);\n this.activeSessions_.delete(session);\n }\n\n /**\n * Creates the sessions for the init data and waits for them to become ready.\n *\n * @return {!Promise}\n */\n async createOrLoad() {\n if (this.storedPersistentSessions_.size) {\n this.storedPersistentSessions_.forEach((metadata, sessionId) => {\n this.loadOfflineSession_(sessionId, metadata);\n });\n\n await this.allSessionsLoaded_;\n\n const keyIds = (this.currentDrmInfo_ && this.currentDrmInfo_.keyIds) ||\n new Set([]);\n\n // All the needed keys are already loaded, we don't need another license\n // Therefore we prevent starting a new session\n if (keyIds.size > 0 && this.areAllKeysUsable_()) {\n return this.allSessionsLoaded_;\n }\n\n // Reset the promise for the next sessions to come if key needs aren't\n // satisfied with persistent sessions\n this.hasInitData_ = false;\n this.allSessionsLoaded_ = new shaka.util.PublicPromise();\n this.allSessionsLoaded_.catch(() => {});\n }\n\n // Create sessions.\n const initDatas =\n (this.currentDrmInfo_ ? this.currentDrmInfo_.initData : []) || [];\n for (const initDataOverride of initDatas) {\n this.newInitData(\n initDataOverride.initDataType, initDataOverride.initData);\n }\n\n // If there were no sessions to load, we need to resolve the promise right\n // now or else it will never get resolved.\n // We determine this by checking areAllSessionsLoaded_, rather than checking\n // the number of initDatas, since the newInitData method can reject init\n // datas in some circumstances.\n if (this.areAllSessionsLoaded_()) {\n this.allSessionsLoaded_.resolve();\n }\n\n return this.allSessionsLoaded_;\n }\n\n /**\n * Called when new initialization data is encountered. If this data hasn't\n * been seen yet, this will create a new session for it.\n *\n * @param {string} initDataType\n * @param {!Uint8Array} initData\n */\n newInitData(initDataType, initData) {\n if (!initData.length) {\n return;\n }\n\n // Suppress duplicate init data.\n // Note that some init data are extremely large and can't portably be used\n // as keys in a dictionary.\n\n if (this.config_.ignoreDuplicateInitData) {\n const metadatas = this.activeSessions_.values();\n for (const metadata of metadatas) {\n if (shaka.util.BufferUtils.equal(initData, metadata.initData)) {\n shaka.log.debug('Ignoring duplicate init data.');\n return;\n }\n }\n let duplicate = false;\n this.storedPersistentSessions_.forEach((metadata, sessionId) => {\n if (!duplicate &&\n shaka.util.BufferUtils.equal(initData, metadata.initData)) {\n duplicate = true;\n }\n });\n if (duplicate) {\n shaka.log.debug('Ignoring duplicate init data.');\n return;\n }\n }\n\n // Mark that there is init data, so that the preloader will know to wait\n // for sessions to be loaded.\n this.hasInitData_ = true;\n\n // If there are pre-existing sessions that have all been loaded\n // then reset the allSessionsLoaded_ promise, which can now be\n // used to wait for new sesssions to be loaded\n if (this.activeSessions_.size > 0 && this.areAllSessionsLoaded_()) {\n this.allSessionsLoaded_.resolve();\n this.hasInitData_ = false;\n this.allSessionsLoaded_ = new shaka.util.PublicPromise();\n this.allSessionsLoaded_.catch(() => {});\n }\n this.createSession(initDataType, initData,\n this.currentDrmInfo_.sessionType);\n }\n\n /** @return {boolean} */\n initialized() {\n return this.initialized_;\n }\n\n /**\n * Returns the ID of the sessions currently active.\n *\n * @return {!Array.}\n */\n getSessionIds() {\n const sessions = this.activeSessions_.keys();\n const ids = shaka.util.Iterables.map(sessions, (s) => s.sessionId);\n\n // TODO: Make |getSessionIds| return |Iterable| instead of |Array|.\n return Array.from(ids);\n }\n\n /**\n * Returns the active sessions metadata\n *\n * @return {!Array.}\n */\n getActiveSessionsMetadata() {\n const sessions = this.activeSessions_.keys();\n\n const metadata = shaka.util.Iterables.map(sessions, (session) => {\n const metadata = this.activeSessions_.get(session);\n\n return {\n sessionId: session.sessionId,\n sessionType: metadata.type,\n initData: metadata.initData,\n initDataType: metadata.initDataType,\n };\n });\n\n return Array.from(metadata);\n }\n\n /**\n * Returns the next expiration time, or Infinity.\n * @return {number}\n */\n getExpiration() {\n // This will equal Infinity if there are no entries.\n let min = Infinity;\n\n const sessions = this.activeSessions_.keys();\n for (const session of sessions) {\n if (!isNaN(session.expiration)) {\n min = Math.min(min, session.expiration);\n }\n }\n\n return min;\n }\n\n /**\n * Returns the time spent on license requests during this session, or NaN.\n *\n * @return {number}\n */\n getLicenseTime() {\n if (this.licenseTimeSeconds_) {\n return this.licenseTimeSeconds_;\n }\n return NaN;\n }\n\n /**\n * Returns the DrmInfo that was used to initialize the current key system.\n *\n * @return {?shaka.extern.DrmInfo}\n */\n getDrmInfo() {\n return this.currentDrmInfo_;\n }\n\n /**\n * Return the media keys created from the current mediaKeySystemAccess.\n * @return {MediaKeys}\n */\n getMediaKeys() {\n return this.mediaKeys_;\n }\n\n /**\n * Returns the current key statuses.\n *\n * @return {!Object.}\n */\n getKeyStatuses() {\n return shaka.util.MapUtils.asObject(this.announcedKeyStatusByKeyId_);\n }\n\n /**\n * Returns the current media key sessions.\n *\n * @return {!Array.}\n */\n getMediaKeySessions() {\n return Array.from(this.activeSessions_.keys());\n }\n\n /**\n * @param {!Map.} configsByKeySystem\n * A dictionary of configs, indexed by key system, with an iteration order\n * (insertion order) that reflects the preference for the application.\n * @param {!Array.} variants\n * @return {!Promise} Resolved if/when a key system has been chosen.\n * @private\n */\n async queryMediaKeys_(configsByKeySystem, variants) {\n const drmInfosByKeySystem = new Map();\n\n const mediaKeySystemAccess = variants.length ?\n this.getKeySystemAccessFromVariants_(variants, drmInfosByKeySystem) :\n await this.getKeySystemAccessByConfigs_(configsByKeySystem);\n\n if (!mediaKeySystemAccess) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.REQUESTED_KEY_SYSTEM_CONFIG_UNAVAILABLE);\n }\n this.destroyer_.ensureNotDestroyed();\n\n try {\n // Store the capabilities of the key system.\n const realConfig = mediaKeySystemAccess.getConfiguration();\n\n shaka.log.v2(\n 'Got MediaKeySystemAccess with configuration',\n realConfig);\n\n const keySystem =\n this.config_.keySystemsMapping[mediaKeySystemAccess.keySystem] ||\n mediaKeySystemAccess.keySystem;\n\n if (variants.length) {\n this.currentDrmInfo_ = this.createDrmInfoByInfos_(\n keySystem, drmInfosByKeySystem.get(keySystem));\n } else {\n this.currentDrmInfo_ = shaka.media.DrmEngine.createDrmInfoByConfigs_(\n keySystem, configsByKeySystem.get(keySystem));\n }\n if (!this.currentDrmInfo_.licenseServerUri) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.NO_LICENSE_SERVER_GIVEN,\n this.currentDrmInfo_.keySystem);\n }\n\n const mediaKeys = await mediaKeySystemAccess.createMediaKeys();\n this.destroyer_.ensureNotDestroyed();\n shaka.log.info('Created MediaKeys object for key system',\n this.currentDrmInfo_.keySystem);\n\n this.mediaKeys_ = mediaKeys;\n if (this.config_.minHdcpVersion != '' &&\n 'getStatusForPolicy' in this.mediaKeys_) {\n try {\n const status = await this.mediaKeys_.getStatusForPolicy({\n minHdcpVersion: this.config_.minHdcpVersion,\n });\n if (status != 'usable') {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.MIN_HDCP_VERSION_NOT_MATCH);\n }\n this.destroyer_.ensureNotDestroyed();\n } catch (e) {\n if (e instanceof shaka.util.Error) {\n throw e;\n }\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.ERROR_CHECKING_HDCP_VERSION,\n e.message);\n }\n }\n this.initialized_ = true;\n\n await this.setServerCertificate();\n this.destroyer_.ensureNotDestroyed();\n } catch (exception) {\n this.destroyer_.ensureNotDestroyed(exception);\n\n // Don't rewrap a shaka.util.Error from earlier in the chain:\n this.currentDrmInfo_ = null;\n if (exception instanceof shaka.util.Error) {\n throw exception;\n }\n\n // We failed to create MediaKeys. This generally shouldn't happen.\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.FAILED_TO_CREATE_CDM,\n exception.message);\n }\n }\n\n /**\n * Get the MediaKeySystemAccess from the decodingInfos of the variants.\n * @param {!Array.} variants\n * @param {!Map.>} drmInfosByKeySystem\n * A dictionary of drmInfos, indexed by key system.\n * @return {MediaKeySystemAccess}\n * @private\n */\n getKeySystemAccessFromVariants_(variants, drmInfosByKeySystem) {\n for (const variant of variants) {\n // Get all the key systems in the variant that shouldHaveLicenseServer.\n const drmInfos = this.getVariantDrmInfos_(variant);\n for (const info of drmInfos) {\n if (!drmInfosByKeySystem.has(info.keySystem)) {\n drmInfosByKeySystem.set(info.keySystem, []);\n }\n drmInfosByKeySystem.get(info.keySystem).push(info);\n }\n }\n\n if (drmInfosByKeySystem.size == 1 && drmInfosByKeySystem.has('')) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.NO_RECOGNIZED_KEY_SYSTEMS);\n }\n\n // If we have configured preferredKeySystems, choose a preferred keySystem\n // if available.\n for (const preferredKeySystem of this.config_.preferredKeySystems) {\n for (const variant of variants) {\n const decodingInfo = variant.decodingInfos.find((decodingInfo) => {\n return decodingInfo.supported &&\n decodingInfo.keySystemAccess != null &&\n decodingInfo.keySystemAccess.keySystem == preferredKeySystem;\n });\n if (decodingInfo) {\n return decodingInfo.keySystemAccess;\n }\n }\n }\n\n // Try key systems with configured license servers first. We only have to\n // try key systems without configured license servers for diagnostic\n // reasons, so that we can differentiate between \"none of these key\n // systems are available\" and \"some are available, but you did not\n // configure them properly.\" The former takes precedence.\n for (const shouldHaveLicenseServer of [true, false]) {\n for (const variant of variants) {\n for (const decodingInfo of variant.decodingInfos) {\n if (!decodingInfo.supported || !decodingInfo.keySystemAccess) {\n continue;\n }\n const originalKeySystem = decodingInfo.keySystemAccess.keySystem;\n let drmInfos = drmInfosByKeySystem.get(originalKeySystem);\n if (!drmInfos && this.config_.keySystemsMapping[originalKeySystem]) {\n drmInfos = drmInfosByKeySystem.get(\n this.config_.keySystemsMapping[originalKeySystem]);\n }\n for (const info of drmInfos) {\n if (!!info.licenseServerUri == shouldHaveLicenseServer) {\n return decodingInfo.keySystemAccess;\n }\n }\n }\n }\n }\n return null;\n }\n\n /**\n * Get the MediaKeySystemAccess by querying requestMediaKeySystemAccess.\n * @param {!Map.} configsByKeySystem\n * A dictionary of configs, indexed by key system, with an iteration order\n * (insertion order) that reflects the preference for the application.\n * @return {!Promise.} Resolved if/when a\n * mediaKeySystemAccess has been chosen.\n * @private\n */\n async getKeySystemAccessByConfigs_(configsByKeySystem) {\n /** @type {MediaKeySystemAccess} */\n let mediaKeySystemAccess;\n\n if (configsByKeySystem.size == 1 && configsByKeySystem.has('')) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.NO_RECOGNIZED_KEY_SYSTEMS);\n }\n\n // If there are no tracks of a type, these should be not present.\n // Otherwise the query will fail.\n for (const config of configsByKeySystem.values()) {\n if (config.audioCapabilities.length == 0) {\n delete config.audioCapabilities;\n }\n if (config.videoCapabilities.length == 0) {\n delete config.videoCapabilities;\n }\n }\n\n // If we have configured preferredKeySystems, choose the preferred one if\n // available.\n for (const keySystem of this.config_.preferredKeySystems) {\n if (configsByKeySystem.has(keySystem)) {\n const config = configsByKeySystem.get(keySystem);\n try {\n mediaKeySystemAccess = // eslint-disable-next-line no-await-in-loop\n await navigator.requestMediaKeySystemAccess(keySystem, [config]);\n return mediaKeySystemAccess;\n } catch (error) {\n // Suppress errors.\n shaka.log.v2(\n 'Requesting', keySystem, 'failed with config', config, error);\n }\n this.destroyer_.ensureNotDestroyed();\n }\n }\n\n // Try key systems with configured license servers first. We only have to\n // try key systems without configured license servers for diagnostic\n // reasons, so that we can differentiate between \"none of these key\n // systems are available\" and \"some are available, but you did not\n // configure them properly.\" The former takes precedence.\n // TODO: once MediaCap implementation is complete, this part can be\n // simplified or removed.\n for (const shouldHaveLicenseServer of [true, false]) {\n for (const keySystem of configsByKeySystem.keys()) {\n const config = configsByKeySystem.get(keySystem);\n // TODO: refactor, don't stick drmInfos onto\n // MediaKeySystemConfiguration\n const hasLicenseServer = config['drmInfos'].some((info) => {\n return !!info.licenseServerUri;\n });\n if (hasLicenseServer != shouldHaveLicenseServer) {\n continue;\n }\n\n try {\n mediaKeySystemAccess = // eslint-disable-next-line no-await-in-loop\n await navigator.requestMediaKeySystemAccess(keySystem, [config]);\n return mediaKeySystemAccess;\n } catch (error) {\n // Suppress errors.\n shaka.log.v2(\n 'Requesting', keySystem, 'failed with config', config, error);\n }\n this.destroyer_.ensureNotDestroyed();\n }\n }\n return mediaKeySystemAccess;\n }\n\n /**\n * Create a DrmInfo using configured clear keys.\n * The server URI will be a data URI which decodes to a clearkey license.\n * @return {?shaka.extern.DrmInfo} or null if clear keys are not configured.\n * @private\n * @see https://bit.ly/2K8gOnv for the spec on the clearkey license format.\n */\n configureClearKey_() {\n const clearKeys = shaka.util.MapUtils.asMap(this.config_.clearKeys);\n if (clearKeys.size == 0) {\n return null;\n }\n\n const ManifestParserUtils = shaka.util.ManifestParserUtils;\n return ManifestParserUtils.createDrmInfoFromClearKeys(clearKeys);\n }\n\n /**\n * Resolves the allSessionsLoaded_ promise when all the sessions are loaded\n *\n * @private\n */\n checkSessionsLoaded_() {\n if (this.areAllSessionsLoaded_()) {\n this.allSessionsLoaded_.resolve();\n }\n }\n\n /**\n * In case there are no key statuses, consider this session loaded\n * after a reasonable timeout. It should definitely not take 5\n * seconds to process a license.\n * @param {!shaka.media.DrmEngine.SessionMetaData} metadata\n * @private\n */\n setLoadSessionTimeoutTimer_(metadata) {\n const timer = new shaka.util.Timer(() => {\n metadata.loaded = true;\n this.checkSessionsLoaded_();\n });\n\n timer.tickAfter(\n /* seconds= */ shaka.media.DrmEngine.SESSION_LOAD_TIMEOUT_);\n }\n\n /**\n * @param {string} sessionId\n * @param {{initData: ?Uint8Array, initDataType: ?string}} sessionMetadata\n * @return {!Promise.}\n * @private\n */\n async loadOfflineSession_(sessionId, sessionMetadata) {\n let session;\n\n const sessionType = 'persistent-license';\n\n try {\n shaka.log.v1('Attempting to load an offline session', sessionId);\n session = this.mediaKeys_.createSession(sessionType);\n } catch (exception) {\n const error = new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.FAILED_TO_CREATE_SESSION,\n exception.message);\n this.onError_(error);\n return Promise.reject(error);\n }\n\n this.eventManager_.listen(session, 'message',\n /** @type {shaka.util.EventManager.ListenerType} */(\n (event) => this.onSessionMessage_(event)));\n this.eventManager_.listen(session, 'keystatuseschange',\n (event) => this.onKeyStatusesChange_(event));\n\n const metadata = {\n initData: sessionMetadata.initData,\n initDataType: sessionMetadata.initDataType,\n loaded: false,\n oldExpiration: Infinity,\n updatePromise: null,\n type: sessionType,\n };\n this.activeSessions_.set(session, metadata);\n\n try {\n const present = await session.load(sessionId);\n this.destroyer_.ensureNotDestroyed();\n shaka.log.v2('Loaded offline session', sessionId, present);\n\n if (!present) {\n this.activeSessions_.delete(session);\n\n const severity = this.config_.persistentSessionOnlinePlayback ?\n shaka.util.Error.Severity.RECOVERABLE :\n shaka.util.Error.Severity.CRITICAL;\n\n this.onError_(new shaka.util.Error(\n severity,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.OFFLINE_SESSION_REMOVED));\n\n metadata.loaded = true;\n }\n\n this.setLoadSessionTimeoutTimer_(metadata);\n this.checkSessionsLoaded_();\n\n return session;\n } catch (error) {\n this.destroyer_.ensureNotDestroyed(error);\n\n this.activeSessions_.delete(session);\n\n const severity = this.config_.persistentSessionOnlinePlayback ?\n shaka.util.Error.Severity.RECOVERABLE :\n shaka.util.Error.Severity.CRITICAL;\n\n this.onError_(new shaka.util.Error(\n severity,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.FAILED_TO_CREATE_SESSION,\n error.message));\n\n metadata.loaded = true;\n\n this.checkSessionsLoaded_();\n }\n\n return Promise.resolve();\n }\n\n /**\n * @param {string} initDataType\n * @param {!Uint8Array} initData\n * @param {string} sessionType\n */\n createSession(initDataType, initData, sessionType) {\n goog.asserts.assert(this.mediaKeys_,\n 'mediaKeys_ should be valid when creating temporary session.');\n\n let session;\n\n try {\n shaka.log.info('Creating new', sessionType, 'session');\n\n session = this.mediaKeys_.createSession(sessionType);\n } catch (exception) {\n this.onError_(new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.FAILED_TO_CREATE_SESSION,\n exception.message));\n return;\n }\n\n this.eventManager_.listen(session, 'message',\n /** @type {shaka.util.EventManager.ListenerType} */(\n (event) => this.onSessionMessage_(event)));\n this.eventManager_.listen(session, 'keystatuseschange',\n (event) => this.onKeyStatusesChange_(event));\n\n const metadata = {\n initData: initData,\n initDataType: initDataType,\n loaded: false,\n oldExpiration: Infinity,\n updatePromise: null,\n type: sessionType,\n };\n this.activeSessions_.set(session, metadata);\n\n try {\n initData = this.config_.initDataTransform(\n initData, initDataType, this.currentDrmInfo_);\n } catch (error) {\n let shakaError = error;\n if (!(error instanceof shaka.util.Error)) {\n shakaError = new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.INIT_DATA_TRANSFORM_ERROR,\n error);\n }\n this.onError_(shakaError);\n return;\n }\n\n if (this.config_.logLicenseExchange) {\n const str = shaka.util.Uint8ArrayUtils.toBase64(initData);\n shaka.log.info('EME init data: type=', initDataType, 'data=', str);\n }\n\n session.generateRequest(initDataType, initData).catch((error) => {\n if (this.destroyer_.destroyed()) {\n return;\n }\n goog.asserts.assert(error instanceof Error, 'Wrong error type!');\n\n this.activeSessions_.delete(session);\n\n // This may be supplied by some polyfills.\n /** @type {MediaKeyError} */\n const errorCode = error['errorCode'];\n\n let extended;\n if (errorCode && errorCode.systemCode) {\n extended = errorCode.systemCode;\n if (extended < 0) {\n extended += Math.pow(2, 32);\n }\n extended = '0x' + extended.toString(16);\n }\n\n this.onError_(new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.FAILED_TO_GENERATE_LICENSE_REQUEST,\n error.message, error, extended));\n });\n }\n\n /**\n * @param {!MediaKeyMessageEvent} event\n * @private\n */\n onSessionMessage_(event) {\n if (this.delayLicenseRequest_()) {\n this.mediaKeyMessageEvents_.push(event);\n } else {\n this.sendLicenseRequest_(event);\n }\n }\n\n /**\n * @return {boolean}\n * @private\n */\n delayLicenseRequest_() {\n if (!this.video_) {\n // If there's no video, don't delay the license request; i.e., in the case\n // of offline storage.\n return false;\n }\n return (this.config_.delayLicenseRequestUntilPlayed &&\n this.video_.paused && !this.initialRequestsSent_);\n }\n\n /** @return {!Promise} */\n async waitForActiveRequests() {\n if (this.hasInitData_) {\n await this.allSessionsLoaded_;\n await Promise.all(this.activeRequests_.map((req) => req.promise));\n }\n }\n\n /**\n * Sends a license request.\n * @param {!MediaKeyMessageEvent} event\n * @private\n */\n async sendLicenseRequest_(event) {\n /** @type {!MediaKeySession} */\n const session = event.target;\n shaka.log.v1(\n 'Sending license request for session', session.sessionId, 'of type',\n event.messageType);\n if (this.config_.logLicenseExchange) {\n const str = shaka.util.Uint8ArrayUtils.toBase64(event.message);\n shaka.log.info('EME license request', str);\n }\n\n const metadata = this.activeSessions_.get(session);\n\n let url = this.currentDrmInfo_.licenseServerUri;\n const advancedConfig =\n this.config_.advanced[this.currentDrmInfo_.keySystem];\n\n if (event.messageType == 'individualization-request' && advancedConfig &&\n advancedConfig.individualizationServer) {\n url = advancedConfig.individualizationServer;\n }\n\n const requestType = shaka.net.NetworkingEngine.RequestType.LICENSE;\n const request = shaka.net.NetworkingEngine.makeRequest(\n [url], this.config_.retryParameters);\n request.body = event.message;\n request.method = 'POST';\n request.licenseRequestType = event.messageType;\n request.sessionId = session.sessionId;\n request.drmInfo = this.currentDrmInfo_;\n if (metadata) {\n request.initData = metadata.initData;\n request.initDataType = metadata.initDataType;\n }\n if (advancedConfig && advancedConfig.headers) {\n // Add these to the existing headers. Do not clobber them!\n // For PlayReady, there will already be headers in the request.\n for (const header in advancedConfig.headers) {\n request.headers[header] = advancedConfig.headers[header];\n }\n }\n // NOTE: allowCrossSiteCredentials can be set in a request filter.\n\n if (shaka.util.DrmUtils.isClearKeySystem(\n this.currentDrmInfo_.keySystem)) {\n this.fixClearKeyRequest_(request, this.currentDrmInfo_);\n }\n\n if (shaka.util.DrmUtils.isPlayReadyKeySystem(\n this.currentDrmInfo_.keySystem)) {\n this.unpackPlayReadyRequest_(request);\n }\n\n const startTimeRequest = Date.now();\n\n let response;\n try {\n const req = this.playerInterface_.netEngine.request(\n requestType, request, {isPreload: this.isPreload_()});\n this.activeRequests_.push(req);\n response = await req.promise;\n shaka.util.ArrayUtils.remove(this.activeRequests_, req);\n } catch (error) {\n if (this.destroyer_.destroyed()) {\n return;\n }\n // Request failed!\n goog.asserts.assert(error instanceof shaka.util.Error,\n 'Wrong NetworkingEngine error type!');\n const shakaErr = new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.LICENSE_REQUEST_FAILED,\n error);\n if (this.activeSessions_.size == 1) {\n this.onError_(shakaErr);\n if (metadata && metadata.updatePromise) {\n metadata.updatePromise.reject(shakaErr);\n }\n } else {\n if (metadata && metadata.updatePromise) {\n metadata.updatePromise.reject(shakaErr);\n }\n this.activeSessions_.delete(session);\n if (this.areAllSessionsLoaded_()) {\n this.allSessionsLoaded_.resolve();\n this.keyStatusTimer_.tickAfter(/* seconds= */ 0.1);\n }\n }\n return;\n }\n if (this.destroyer_.destroyed()) {\n return;\n }\n\n this.licenseTimeSeconds_ += (Date.now() - startTimeRequest) / 1000;\n\n if (this.config_.logLicenseExchange) {\n const str = shaka.util.Uint8ArrayUtils.toBase64(response.data);\n shaka.log.info('EME license response', str);\n }\n\n // Request succeeded, now pass the response to the CDM.\n try {\n shaka.log.v1('Updating session', session.sessionId);\n await session.update(response.data);\n } catch (error) {\n // Session update failed!\n const shakaErr = new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.LICENSE_RESPONSE_REJECTED,\n error.message);\n this.onError_(shakaErr);\n if (metadata && metadata.updatePromise) {\n metadata.updatePromise.reject(shakaErr);\n }\n return;\n }\n if (this.destroyer_.destroyed()) {\n return;\n }\n\n const updateEvent = new shaka.util.FakeEvent('drmsessionupdate');\n this.playerInterface_.onEvent(updateEvent);\n\n if (metadata) {\n if (metadata.updatePromise) {\n metadata.updatePromise.resolve();\n }\n\n this.setLoadSessionTimeoutTimer_(metadata);\n }\n }\n\n /**\n * Unpacks PlayReady license requests. Modifies the request object.\n * @param {shaka.extern.Request} request\n * @private\n */\n unpackPlayReadyRequest_(request) {\n // On Edge, the raw license message is UTF-16-encoded XML. We need\n // to unpack the Challenge element (base64-encoded string containing the\n // actual license request) and any HttpHeader elements (sent as request\n // headers).\n\n // Example XML:\n\n // \n // \n // {Base64Data}\n // \n // \n // Content-Type\n // text/xml; charset=utf-8\n // \n // \n // SOAPAction\n // http://schemas.microsoft.com/DRM/etc/etc\n // \n // \n // \n // \n const TXml = shaka.util.TXml;\n\n const xml = shaka.util.StringUtils.fromUTF16(\n request.body, /* littleEndian= */ true, /* noThrow= */ true);\n if (!xml.includes('PlayReadyKeyMessage')) {\n // This does not appear to be a wrapped message as on Edge. Some\n // clients do not need this unwrapping, so we will assume this is one of\n // them. Note that \"xml\" at this point probably looks like random\n // garbage, since we interpreted UTF-8 as UTF-16.\n shaka.log.debug('PlayReady request is already unwrapped.');\n request.headers['Content-Type'] = 'text/xml; charset=utf-8';\n return;\n }\n shaka.log.debug('Unwrapping PlayReady request.');\n const dom = TXml.parseXmlString(xml, 'PlayReadyKeyMessage');\n goog.asserts.assert(dom, 'Failed to parse PlayReady XML!');\n\n // Set request headers.\n const headers = TXml.getElementsByTagName(dom, 'HttpHeader');\n for (const header of headers) {\n const name = TXml.getElementsByTagName(header, 'name')[0];\n const value = TXml.getElementsByTagName(header, 'value')[0];\n goog.asserts.assert(name && value, 'Malformed PlayReady headers!');\n request.headers[\n /** @type {string} */(shaka.util.TXml.getTextContents(name))] =\n /** @type {string} */(shaka.util.TXml.getTextContents(value));\n }\n\n // Unpack the base64-encoded challenge.\n const challenge = TXml.getElementsByTagName(dom, 'Challenge')[0];\n goog.asserts.assert(challenge,\n 'Malformed PlayReady challenge!');\n goog.asserts.assert(challenge.attributes['encoding'] == 'base64encoded',\n 'Unexpected PlayReady challenge encoding!');\n request.body = shaka.util.Uint8ArrayUtils.fromBase64(\n /** @type{string} */(shaka.util.TXml.getTextContents(challenge)));\n }\n\n /**\n * Some old ClearKey CDMs don't include the type in the body request.\n *\n * @param {shaka.extern.Request} request\n * @param {shaka.extern.DrmInfo} drmInfo\n * @private\n */\n fixClearKeyRequest_(request, drmInfo) {\n try {\n const body = shaka.util.StringUtils.fromBytesAutoDetect(request.body);\n if (body) {\n const licenseBody =\n /** @type {shaka.media.DrmEngine.ClearKeyLicenceRequestFormat} */ (\n JSON.parse(body));\n if (!licenseBody.type) {\n licenseBody.type = drmInfo.sessionType;\n request.body =\n shaka.util.StringUtils.toUTF8(JSON.stringify(licenseBody));\n }\n }\n } catch (e) {\n shaka.log.info('Error unpacking ClearKey license', e);\n }\n }\n\n /**\n * @param {!Event} event\n * @private\n * @suppress {invalidCasts} to swap keyId and status\n */\n onKeyStatusesChange_(event) {\n const session = /** @type {!MediaKeySession} */(event.target);\n shaka.log.v2('Key status changed for session', session.sessionId);\n\n const found = this.activeSessions_.get(session);\n const keyStatusMap = session.keyStatuses;\n let hasExpiredKeys = false;\n\n keyStatusMap.forEach((status, keyId) => {\n // The spec has changed a few times on the exact order of arguments here.\n // As of 2016-06-30, Edge has the order reversed compared to the current\n // EME spec. Given the back and forth in the spec, it may not be the only\n // one. Try to detect this and compensate:\n if (typeof keyId == 'string') {\n const tmp = keyId;\n keyId = /** @type {!ArrayBuffer} */(status);\n status = /** @type {string} */(tmp);\n }\n\n // Microsoft's implementation in Edge seems to present key IDs as\n // little-endian UUIDs, rather than big-endian or just plain array of\n // bytes.\n // standard: 6e 5a 1d 26 - 27 57 - 47 d7 - 80 46 ea a5 d1 d3 4b 5a\n // on Edge: 26 1d 5a 6e - 57 27 - d7 47 - 80 46 ea a5 d1 d3 4b 5a\n // Bug filed: https://bit.ly/2thuzXu\n\n // NOTE that we skip this if byteLength != 16. This is used for Edge\n // which uses single-byte dummy key IDs.\n // However, unlike Edge and Chromecast, Tizen doesn't have this problem.\n if (shaka.util.DrmUtils.isPlayReadyKeySystem(\n this.currentDrmInfo_.keySystem) &&\n keyId.byteLength == 16 &&\n (shaka.util.Platform.isEdge() || shaka.util.Platform.isPS4())) {\n // Read out some fields in little-endian:\n const dataView = shaka.util.BufferUtils.toDataView(keyId);\n const part0 = dataView.getUint32(0, /* LE= */ true);\n const part1 = dataView.getUint16(4, /* LE= */ true);\n const part2 = dataView.getUint16(6, /* LE= */ true);\n // Write it back in big-endian:\n dataView.setUint32(0, part0, /* BE= */ false);\n dataView.setUint16(4, part1, /* BE= */ false);\n dataView.setUint16(6, part2, /* BE= */ false);\n }\n\n if (status != 'status-pending') {\n found.loaded = true;\n }\n\n if (!found) {\n // We can get a key status changed for a closed session after it has\n // been removed from |activeSessions_|. If it is closed, none of its\n // keys should be usable.\n goog.asserts.assert(\n status != 'usable', 'Usable keys found in closed session');\n }\n\n if (status == 'expired') {\n hasExpiredKeys = true;\n }\n\n const keyIdHex = shaka.util.Uint8ArrayUtils.toHex(keyId).slice(0, 32);\n\n this.keyStatusByKeyId_.set(keyIdHex, status);\n });\n\n // If the session has expired, close it.\n // Some CDMs do not have sub-second time resolution, so the key status may\n // fire with hundreds of milliseconds left until the stated expiration time.\n const msUntilExpiration = session.expiration - Date.now();\n if (msUntilExpiration < 0 || (hasExpiredKeys && msUntilExpiration < 1000)) {\n // If this is part of a remove(), we don't want to close the session until\n // the update is complete. Otherwise, we will orphan the session.\n if (found && !found.updatePromise) {\n shaka.log.debug('Session has expired', session.sessionId);\n this.activeSessions_.delete(session);\n session.close().catch(() => {}); // Silence uncaught rejection errors\n }\n }\n\n if (!this.areAllSessionsLoaded_()) {\n // Don't announce key statuses or resolve the \"all loaded\" promise until\n // everything is loaded.\n return;\n }\n\n this.allSessionsLoaded_.resolve();\n\n // Batch up key status changes before checking them or notifying Player.\n // This handles cases where the statuses of multiple sessions are set\n // simultaneously by the browser before dispatching key status changes for\n // each of them. By batching these up, we only send one status change event\n // and at most one EXPIRED error on expiration.\n this.keyStatusTimer_.tickAfter(\n /* seconds= */ shaka.media.DrmEngine.KEY_STATUS_BATCH_TIME);\n }\n\n /** @private */\n processKeyStatusChanges_() {\n const privateMap = this.keyStatusByKeyId_;\n const publicMap = this.announcedKeyStatusByKeyId_;\n\n // Copy the latest key statuses into the publicly-accessible map.\n publicMap.clear();\n privateMap.forEach((status, keyId) => publicMap.set(keyId, status));\n\n // If all keys are expired, fire an error. |every| is always true for an\n // empty array but we shouldn't fire an error for a lack of key status info.\n const statuses = Array.from(publicMap.values());\n const allExpired = statuses.length &&\n statuses.every((status) => status == 'expired');\n\n if (allExpired) {\n this.onError_(new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.EXPIRED));\n }\n\n this.playerInterface_.onKeyStatus(shaka.util.MapUtils.asObject(publicMap));\n }\n\n /**\n * Returns a Promise to a map of EME support for well-known key systems.\n *\n * @return {!Promise.>}\n */\n static async probeSupport() {\n goog.asserts.assert(shaka.util.DrmUtils.isBrowserSupported(),\n 'Must have basic EME support');\n\n const testKeySystems = [\n 'org.w3.clearkey',\n 'com.widevine.alpha',\n 'com.widevine.alpha.experiment', // Widevine L1 in Windows\n 'com.microsoft.playready',\n 'com.microsoft.playready.hardware',\n 'com.microsoft.playready.recommendation',\n 'com.chromecast.playready',\n 'com.apple.fps.1_0',\n 'com.apple.fps',\n ];\n\n const widevineRobustness = [\n 'SW_SECURE_CRYPTO',\n 'SW_SECURE_DECODE',\n 'HW_SECURE_CRYPTO',\n 'HW_SECURE_DECODE',\n 'HW_SECURE_ALL',\n ];\n\n const playreadyRobustness = [\n '150',\n '2000',\n '3000',\n ];\n\n const testRobustness = {\n 'com.widevine.alpha': widevineRobustness,\n 'com.widevine.alpha.experiment': widevineRobustness,\n 'com.microsoft.playready.recommendation': playreadyRobustness,\n };\n\n const basicVideoCapabilities = [\n {contentType: 'video/mp4; codecs=\"avc1.42E01E\"'},\n {contentType: 'video/webm; codecs=\"vp8\"'},\n ];\n\n const basicAudioCapabilities = [\n {contentType: 'audio/mp4; codecs=\"mp4a.40.2\"'},\n {contentType: 'audio/webm; codecs=\"opus\"'},\n ];\n\n const basicConfigTemplate = {\n videoCapabilities: basicVideoCapabilities,\n audioCapabilities: basicAudioCapabilities,\n initDataTypes: ['cenc', 'sinf', 'skd', 'keyids'],\n };\n\n const testEncryptionSchemes = [\n null,\n 'cenc',\n 'cbcs',\n 'cbcs-1-9',\n ];\n\n /** @type {!Map.} */\n const support = new Map();\n\n /**\n * @param {string} keySystem\n * @param {MediaKeySystemAccess} access\n * @return {!Promise}\n */\n const processMediaKeySystemAccess = async (keySystem, access) => {\n try {\n await access.createMediaKeys();\n } catch (error) {\n // In some cases, we can get a successful access object but fail to\n // create a MediaKeys instance. When this happens, don't update the\n // support structure. If a previous test succeeded, we won't overwrite\n // any of the results.\n return;\n }\n\n // If sessionTypes is missing, assume no support for persistent-license.\n const sessionTypes = access.getConfiguration().sessionTypes;\n let persistentState = sessionTypes ?\n sessionTypes.includes('persistent-license') : false;\n\n // Tizen 3.0 doesn't support persistent licenses, but reports that it\n // does. It doesn't fail until you call update() with a license\n // response, which is way too late.\n // This is a work-around for #894.\n if (shaka.util.Platform.isTizen3()) {\n persistentState = false;\n }\n\n const videoCapabilities = access.getConfiguration().videoCapabilities;\n const audioCapabilities = access.getConfiguration().audioCapabilities;\n\n let supportValue = {\n persistentState,\n encryptionSchemes: [],\n videoRobustnessLevels: [],\n audioRobustnessLevels: [],\n };\n if (support.has(keySystem) && support.get(keySystem)) {\n // Update the existing non-null value.\n supportValue = support.get(keySystem);\n } else {\n // Set a new one.\n support.set(keySystem, supportValue);\n }\n\n // If the returned config doesn't mention encryptionScheme, the field\n // is not supported. If installed, our polyfills should make sure this\n // doesn't happen.\n const returnedScheme = videoCapabilities[0].encryptionScheme;\n if (returnedScheme &&\n !supportValue.encryptionSchemes.includes(returnedScheme)) {\n supportValue.encryptionSchemes.push(returnedScheme);\n }\n\n const videoRobustness = videoCapabilities[0].robustness;\n if (videoRobustness &&\n !supportValue.videoRobustnessLevels.includes(videoRobustness)) {\n supportValue.videoRobustnessLevels.push(videoRobustness);\n }\n\n const audioRobustness = audioCapabilities[0].robustness;\n if (audioRobustness &&\n !supportValue.audioRobustnessLevels.includes(audioRobustness)) {\n supportValue.audioRobustnessLevels.push(audioRobustness);\n }\n };\n\n const testSystemEme = async (keySystem, encryptionScheme,\n videoRobustness, audioRobustness) => {\n try {\n const basicConfig =\n shaka.util.ObjectUtils.cloneObject(basicConfigTemplate);\n for (const cap of basicConfig.videoCapabilities) {\n cap.encryptionScheme = encryptionScheme;\n cap.robustness = videoRobustness;\n }\n for (const cap of basicConfig.audioCapabilities) {\n cap.encryptionScheme = encryptionScheme;\n cap.robustness = audioRobustness;\n }\n\n const offlineConfig = shaka.util.ObjectUtils.cloneObject(basicConfig);\n offlineConfig.persistentState = 'required';\n offlineConfig.sessionTypes = ['persistent-license'];\n\n const configs = [offlineConfig, basicConfig];\n // On some (Android) WebView environments,\n // requestMediaKeySystemAccess will\n // not resolve or reject, at least if RESOURCE_PROTECTED_MEDIA_ID\n // is not set. This is a workaround for that issue.\n const TIMEOUT_FOR_CHECKACCESS_IN_SECONDS = 1;\n const access =\n await shaka.util.Functional.promiseWithTimeout(\n TIMEOUT_FOR_CHECKACCESS_IN_SECONDS,\n navigator.requestMediaKeySystemAccess(keySystem, configs),\n );\n await processMediaKeySystemAccess(keySystem, access);\n } catch (error) {} // Ignore errors.\n };\n\n const testSystemMcap = async (keySystem, encryptionScheme,\n videoRobustness, audioRobustness) => {\n try {\n const decodingConfig = {\n type: 'media-source',\n video: {\n contentType: basicVideoCapabilities[0].contentType,\n width: 640,\n height: 480,\n bitrate: 1,\n framerate: 1,\n },\n audio: {\n contentType: basicAudioCapabilities[0].contentType,\n channels: 2,\n bitrate: 1,\n samplerate: 1,\n },\n keySystemConfiguration: {\n keySystem,\n video: {\n encryptionScheme,\n robustness: videoRobustness,\n },\n audio: {\n encryptionScheme,\n robustness: audioRobustness,\n },\n },\n };\n // On some (Android) WebView environments, decodingInfo will\n // not resolve or reject, at least if RESOURCE_PROTECTED_MEDIA_ID\n // is not set. This is a workaround for that issue.\n const TIMEOUT_FOR_DECODING_INFO_IN_SECONDS = 1;\n const decodingInfo =\n await shaka.util.Functional.promiseWithTimeout(\n TIMEOUT_FOR_DECODING_INFO_IN_SECONDS,\n navigator.mediaCapabilities.decodingInfo(decodingConfig),\n );\n\n const access = decodingInfo.keySystemAccess;\n await processMediaKeySystemAccess(keySystem, access);\n } catch (error) {\n // Ignore errors.\n shaka.log.v2('Failed to probe support for', keySystem, error);\n }\n };\n\n // Initialize the support structure for each key system.\n for (const keySystem of testKeySystems) {\n support.set(keySystem, null);\n }\n\n // Test each key system and encryption scheme.\n const tests = [];\n for (const encryptionScheme of testEncryptionSchemes) {\n for (const keySystem of testKeySystems) {\n // Our Polyfill will reject anything apart com.apple.fps key systems.\n // It seems the Safari modern EME API will allow to request a\n // MediaKeySystemAccess for the ClearKey CDM, create and update a key\n // session but playback will never start\n // Safari bug: https://bugs.webkit.org/show_bug.cgi?id=231006\n if (keySystem === 'org.w3.clearkey' &&\n shaka.util.Platform.isSafari()) {\n continue;\n }\n tests.push(testSystemEme(keySystem, encryptionScheme, '', ''));\n tests.push(testSystemMcap(keySystem, encryptionScheme, '', ''));\n }\n }\n\n for (const keySystem of testKeySystems) {\n for (const robustness of (testRobustness[keySystem] || [])) {\n tests.push(testSystemEme(keySystem, null, robustness, ''));\n tests.push(testSystemEme(keySystem, null, '', robustness));\n tests.push(testSystemMcap(keySystem, null, robustness, ''));\n tests.push(testSystemMcap(keySystem, null, '', robustness));\n }\n }\n\n await Promise.all(tests);\n return shaka.util.MapUtils.asObject(support);\n }\n\n /** @private */\n onPlay_() {\n for (const event of this.mediaKeyMessageEvents_) {\n this.sendLicenseRequest_(event);\n }\n\n this.initialRequestsSent_ = true;\n this.mediaKeyMessageEvents_ = [];\n }\n\n /**\n * Close a drm session while accounting for a bug in Chrome. Sometimes the\n * Promise returned by close() never resolves.\n *\n * See issue #2741 and http://crbug.com/1108158.\n * @param {!MediaKeySession} session\n * @return {!Promise}\n * @private\n */\n async closeSession_(session) {\n try {\n await shaka.util.Functional.promiseWithTimeout(\n shaka.media.DrmEngine.CLOSE_TIMEOUT_,\n Promise.all([session.close(), session.closed]));\n } catch (e) {\n shaka.log.warning('Timeout waiting for session close');\n }\n }\n\n /** @private */\n async closeOpenSessions_() {\n // Close all open sessions.\n const openSessions = Array.from(this.activeSessions_.entries());\n this.activeSessions_.clear();\n\n // Close all sessions before we remove media keys from the video element.\n await Promise.all(openSessions.map(async ([session, metadata]) => {\n try {\n /**\n * Special case when a persistent-license session has been initiated,\n * without being registered in the offline sessions at start-up.\n * We should remove the session to prevent it from being orphaned after\n * the playback session ends\n */\n if (!this.initializedForStorage_ &&\n !this.storedPersistentSessions_.has(session.sessionId) &&\n metadata.type === 'persistent-license' &&\n !this.config_.persistentSessionOnlinePlayback) {\n shaka.log.v1('Removing session', session.sessionId);\n\n await session.remove();\n } else {\n shaka.log.v1('Closing session', session.sessionId, metadata);\n\n await this.closeSession_(session);\n }\n } catch (error) {\n // Ignore errors when closing the sessions. Closing a session that\n // generated no key requests will throw an error.\n\n shaka.log.error('Failed to close or remove the session', error);\n }\n }));\n }\n\n /**\n * Concat the audio and video drmInfos in a variant.\n * @param {shaka.extern.Variant} variant\n * @return {!Array.}\n * @private\n */\n getVariantDrmInfos_(variant) {\n const videoDrmInfos = variant.video ? variant.video.drmInfos : [];\n const audioDrmInfos = variant.audio ? variant.audio.drmInfos : [];\n return videoDrmInfos.concat(audioDrmInfos);\n }\n\n /**\n * Called in an interval timer to poll the expiration times of the sessions.\n * We don't get an event from EME when the expiration updates, so we poll it\n * so we can fire an event when it happens.\n * @private\n */\n pollExpiration_() {\n this.activeSessions_.forEach((metadata, session) => {\n const oldTime = metadata.oldExpiration;\n let newTime = session.expiration;\n if (isNaN(newTime)) {\n newTime = Infinity;\n }\n\n if (newTime != oldTime) {\n this.playerInterface_.onExpirationUpdated(session.sessionId, newTime);\n metadata.oldExpiration = newTime;\n }\n });\n }\n\n /**\n * @return {boolean}\n * @private\n */\n areAllSessionsLoaded_() {\n const metadatas = this.activeSessions_.values();\n return shaka.util.Iterables.every(metadatas, (data) => data.loaded);\n }\n\n /**\n * @return {boolean}\n * @private\n */\n areAllKeysUsable_() {\n const keyIds = (this.currentDrmInfo_ && this.currentDrmInfo_.keyIds) ||\n new Set([]);\n\n for (const keyId of keyIds) {\n const status = this.keyStatusByKeyId_.get(keyId);\n\n if (status !== 'usable') {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Replace the drm info used in each variant in |variants| to reflect each\n * key service in |keySystems|.\n *\n * @param {!Array.} variants\n * @param {!Map.} keySystems\n * @private\n */\n static replaceDrmInfo_(variants, keySystems) {\n const drmInfos = [];\n\n keySystems.forEach((uri, keySystem) => {\n drmInfos.push({\n keySystem: keySystem,\n licenseServerUri: uri,\n distinctiveIdentifierRequired: false,\n persistentStateRequired: false,\n audioRobustness: '',\n videoRobustness: '',\n serverCertificate: null,\n serverCertificateUri: '',\n initData: [],\n keyIds: new Set(),\n });\n });\n\n for (const variant of variants) {\n if (variant.video) {\n variant.video.drmInfos = drmInfos;\n }\n if (variant.audio) {\n variant.audio.drmInfos = drmInfos;\n }\n }\n }\n\n\n /**\n * Creates a DrmInfo object describing the settings used to initialize the\n * engine.\n *\n * @param {string} keySystem\n * @param {!Array.} drmInfos\n * @return {shaka.extern.DrmInfo}\n *\n * @private\n */\n createDrmInfoByInfos_(keySystem, drmInfos) {\n /** @type {!Array.} */\n const encryptionSchemes = [];\n\n /** @type {!Array.} */\n const licenseServers = [];\n\n /** @type {!Array.} */\n const serverCertificateUris = [];\n\n /** @type {!Array.} */\n const serverCerts = [];\n\n /** @type {!Array.} */\n const initDatas = [];\n\n /** @type {!Set.} */\n const keyIds = new Set();\n\n /** @type {!Set.} */\n const keySystemUris = new Set();\n\n shaka.media.DrmEngine.processDrmInfos_(\n drmInfos, encryptionSchemes, licenseServers, serverCerts,\n serverCertificateUris, initDatas, keyIds, keySystemUris);\n\n if (encryptionSchemes.length > 1) {\n shaka.log.warning('Multiple unique encryption schemes found! ' +\n 'Only the first will be used.');\n }\n\n if (serverCerts.length > 1) {\n shaka.log.warning('Multiple unique server certificates found! ' +\n 'Only the first will be used.');\n }\n\n if (licenseServers.length > 1) {\n shaka.log.warning('Multiple unique license server URIs found! ' +\n 'Only the first will be used.');\n }\n\n if (serverCertificateUris.length > 1) {\n shaka.log.warning('Multiple unique server certificate URIs found! ' +\n 'Only the first will be used.');\n }\n\n const defaultSessionType =\n this.usePersistentLicenses_ ? 'persistent-license' : 'temporary';\n\n /** @type {shaka.extern.DrmInfo} */\n const res = {\n keySystem,\n encryptionScheme: encryptionSchemes[0],\n licenseServerUri: licenseServers[0],\n distinctiveIdentifierRequired: drmInfos[0].distinctiveIdentifierRequired,\n persistentStateRequired: drmInfos[0].persistentStateRequired,\n sessionType: drmInfos[0].sessionType || defaultSessionType,\n audioRobustness: drmInfos[0].audioRobustness || '',\n videoRobustness: drmInfos[0].videoRobustness || '',\n serverCertificate: serverCerts[0],\n serverCertificateUri: serverCertificateUris[0],\n initData: initDatas,\n keyIds,\n };\n\n if (keySystemUris.size > 0) {\n res.keySystemUris = keySystemUris;\n }\n\n for (const info of drmInfos) {\n if (info.distinctiveIdentifierRequired) {\n res.distinctiveIdentifierRequired = info.distinctiveIdentifierRequired;\n }\n\n if (info.persistentStateRequired) {\n res.persistentStateRequired = info.persistentStateRequired;\n }\n }\n\n return res;\n }\n\n /**\n * Creates a DrmInfo object describing the settings used to initialize the\n * engine.\n *\n * @param {string} keySystem\n * @param {MediaKeySystemConfiguration} config\n * @return {shaka.extern.DrmInfo}\n *\n * @private\n */\n static createDrmInfoByConfigs_(keySystem, config) {\n /** @type {!Array.} */\n const encryptionSchemes = [];\n\n /** @type {!Array.} */\n const licenseServers = [];\n\n /** @type {!Array.} */\n const serverCertificateUris = [];\n\n /** @type {!Array.} */\n const serverCerts = [];\n\n /** @type {!Array.} */\n const initDatas = [];\n\n /** @type {!Set.} */\n const keyIds = new Set();\n\n // TODO: refactor, don't stick drmInfos onto MediaKeySystemConfiguration\n shaka.media.DrmEngine.processDrmInfos_(\n config['drmInfos'], encryptionSchemes, licenseServers, serverCerts,\n serverCertificateUris, initDatas, keyIds);\n\n if (encryptionSchemes.length > 1) {\n shaka.log.warning('Multiple unique encryption schemes found! ' +\n 'Only the first will be used.');\n }\n\n if (serverCerts.length > 1) {\n shaka.log.warning('Multiple unique server certificates found! ' +\n 'Only the first will be used.');\n }\n\n if (serverCertificateUris.length > 1) {\n shaka.log.warning('Multiple unique server certificate URIs found! ' +\n 'Only the first will be used.');\n }\n\n if (licenseServers.length > 1) {\n shaka.log.warning('Multiple unique license server URIs found! ' +\n 'Only the first will be used.');\n }\n\n // TODO: This only works when all DrmInfo have the same robustness.\n const audioRobustness =\n config.audioCapabilities ? config.audioCapabilities[0].robustness : '';\n const videoRobustness =\n config.videoCapabilities ? config.videoCapabilities[0].robustness : '';\n\n const distinctiveIdentifier = config.distinctiveIdentifier;\n return {\n keySystem,\n encryptionScheme: encryptionSchemes[0],\n licenseServerUri: licenseServers[0],\n distinctiveIdentifierRequired: (distinctiveIdentifier == 'required'),\n persistentStateRequired: (config.persistentState == 'required'),\n sessionType: config.sessionTypes[0] || 'temporary',\n audioRobustness: audioRobustness || '',\n videoRobustness: videoRobustness || '',\n serverCertificate: serverCerts[0],\n serverCertificateUri: serverCertificateUris[0],\n initData: initDatas,\n keyIds,\n };\n }\n\n /**\n * Extract license server, server cert, and init data from |drmInfos|, taking\n * care to eliminate duplicates.\n *\n * @param {!Array.} drmInfos\n * @param {!Array.} licenseServers\n * @param {!Array.} encryptionSchemes\n * @param {!Array.} serverCerts\n * @param {!Array.} serverCertificateUris\n * @param {!Array.} initDatas\n * @param {!Set.} keyIds\n * @param {!Set.} [keySystemUris]\n * @private\n */\n static processDrmInfos_(\n drmInfos, encryptionSchemes, licenseServers, serverCerts,\n serverCertificateUris, initDatas, keyIds, keySystemUris) {\n /** @type {function(shaka.extern.InitDataOverride,\n * shaka.extern.InitDataOverride):boolean} */\n const initDataOverrideEqual = (a, b) => {\n if (a.keyId && a.keyId == b.keyId) {\n // Two initDatas with the same keyId are considered to be the same,\n // unless that \"same keyId\" is null.\n return true;\n }\n return a.initDataType == b.initDataType &&\n shaka.util.BufferUtils.equal(a.initData, b.initData);\n };\n\n const clearkeyDataStart = 'data:application/json;base64,';\n const clearKeyLicenseServers = [];\n\n for (const drmInfo of drmInfos) {\n // Build an array of unique encryption schemes.\n if (!encryptionSchemes.includes(drmInfo.encryptionScheme)) {\n encryptionSchemes.push(drmInfo.encryptionScheme);\n }\n\n // Build an array of unique license servers.\n if (drmInfo.keySystem == 'org.w3.clearkey' &&\n drmInfo.licenseServerUri.startsWith(clearkeyDataStart)) {\n if (!clearKeyLicenseServers.includes(drmInfo.licenseServerUri)) {\n clearKeyLicenseServers.push(drmInfo.licenseServerUri);\n }\n } else if (!licenseServers.includes(drmInfo.licenseServerUri)) {\n licenseServers.push(drmInfo.licenseServerUri);\n }\n\n // Build an array of unique license servers.\n if (!serverCertificateUris.includes(drmInfo.serverCertificateUri)) {\n serverCertificateUris.push(drmInfo.serverCertificateUri);\n }\n\n // Build an array of unique server certs.\n if (drmInfo.serverCertificate) {\n const found = serverCerts.some(\n (cert) => shaka.util.BufferUtils.equal(\n cert, drmInfo.serverCertificate));\n if (!found) {\n serverCerts.push(drmInfo.serverCertificate);\n }\n }\n\n // Build an array of unique init datas.\n if (drmInfo.initData) {\n for (const initDataOverride of drmInfo.initData) {\n const found = initDatas.some(\n (initData) =>\n initDataOverrideEqual(initData, initDataOverride));\n if (!found) {\n initDatas.push(initDataOverride);\n }\n }\n }\n\n if (drmInfo.keyIds) {\n for (const keyId of drmInfo.keyIds) {\n keyIds.add(keyId);\n }\n }\n\n if (drmInfo.keySystemUris && keySystemUris) {\n for (const keySystemUri of drmInfo.keySystemUris) {\n keySystemUris.add(keySystemUri);\n }\n }\n }\n\n if (clearKeyLicenseServers.length == 1) {\n licenseServers.push(clearKeyLicenseServers[0]);\n } else if (clearKeyLicenseServers.length > 0) {\n const keys = [];\n for (const clearKeyLicenseServer of clearKeyLicenseServers) {\n const license = window.atob(\n clearKeyLicenseServer.split(clearkeyDataStart).pop());\n const jwkSet = /** @type {{keys: !Array}} */(JSON.parse(license));\n keys.push(...jwkSet.keys);\n }\n const newJwkSet = {keys: keys};\n const newLicense = JSON.stringify(newJwkSet);\n licenseServers.push(clearkeyDataStart + window.btoa(newLicense));\n }\n }\n\n /**\n * Use |servers| and |advancedConfigs| to fill in missing values in drmInfo\n * that the parser left blank. Before working with any drmInfo, it should be\n * passed through here as it is uncommon for drmInfo to be complete when\n * fetched from a manifest because most manifest formats do not have the\n * required information. Also applies the key systems mapping.\n *\n * @param {shaka.extern.DrmInfo} drmInfo\n * @param {!Map.} servers\n * @param {!Map.}\n * advancedConfigs\n * @param {!Object.} keySystemsMapping\n * @private\n */\n static fillInDrmInfoDefaults_(drmInfo, servers, advancedConfigs,\n keySystemsMapping) {\n const originalKeySystem = drmInfo.keySystem;\n\n if (!originalKeySystem) {\n // This is a placeholder from the manifest parser for an unrecognized key\n // system. Skip this entry, to avoid logging nonsensical errors.\n return;\n }\n\n // The order of preference for drmInfo:\n // 1. Clear Key config, used for debugging, should override everything else.\n // (The application can still specify a clearkey license server.)\n // 2. Application-configured servers, if present, override\n // anything from the manifest.\n // 3. Manifest-provided license servers are only used if nothing else is\n // specified.\n // This is important because it allows the application a clear way to\n // indicate which DRM systems should be ignored on platforms with multiple\n // DRM systems.\n // Alternatively, use config.preferredKeySystems to specify the preferred\n // key system.\n\n if (originalKeySystem == 'org.w3.clearkey' && drmInfo.licenseServerUri) {\n // Preference 1: Clear Key with pre-configured keys will have a data URI\n // assigned as its license server. Don't change anything.\n return;\n } else if (servers.size && servers.get(originalKeySystem)) {\n // Preference 2: If a license server for this keySystem is configured at\n // the application level, override whatever was in the manifest.\n const server = servers.get(originalKeySystem);\n\n drmInfo.licenseServerUri = server;\n } else {\n // Preference 3: Keep whatever we had in drmInfo.licenseServerUri, which\n // comes from the manifest.\n }\n\n if (!drmInfo.keyIds) {\n drmInfo.keyIds = new Set();\n }\n\n const advancedConfig = advancedConfigs.get(originalKeySystem);\n\n if (advancedConfig) {\n if (!drmInfo.distinctiveIdentifierRequired) {\n drmInfo.distinctiveIdentifierRequired =\n advancedConfig.distinctiveIdentifierRequired;\n }\n\n if (!drmInfo.persistentStateRequired) {\n drmInfo.persistentStateRequired =\n advancedConfig.persistentStateRequired;\n }\n\n if (!drmInfo.videoRobustness) {\n drmInfo.videoRobustness = advancedConfig.videoRobustness;\n }\n\n if (!drmInfo.audioRobustness) {\n drmInfo.audioRobustness = advancedConfig.audioRobustness;\n }\n\n if (!drmInfo.serverCertificate) {\n drmInfo.serverCertificate = advancedConfig.serverCertificate;\n }\n\n if (advancedConfig.sessionType) {\n drmInfo.sessionType = advancedConfig.sessionType;\n }\n\n if (!drmInfo.serverCertificateUri) {\n drmInfo.serverCertificateUri = advancedConfig.serverCertificateUri;\n }\n }\n\n if (keySystemsMapping[originalKeySystem]) {\n drmInfo.keySystem = keySystemsMapping[originalKeySystem];\n }\n\n // Chromecast has a variant of PlayReady that uses a different key\n // system ID. Since manifest parsers convert the standard PlayReady\n // UUID to the standard PlayReady key system ID, here we will switch\n // to the Chromecast version if we are running on that platform.\n // Note that this must come after fillInDrmInfoDefaults_, since the\n // player config uses the standard PlayReady ID for license server\n // configuration.\n if (window.cast && window.cast.__platform__) {\n if (originalKeySystem == 'com.microsoft.playready') {\n drmInfo.keySystem = 'com.chromecast.playready';\n }\n }\n }\n\n /**\n * Parse pssh from a media segment and announce new initData\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {!BufferSource} mediaSegment\n * @return {!Promise}\n */\n parseInbandPssh(contentType, mediaSegment) {\n if (!this.config_.parseInbandPsshEnabled || this.manifestInitData_) {\n return Promise.resolve();\n }\n\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n if (![ContentType.AUDIO, ContentType.VIDEO].includes(contentType)) {\n return Promise.resolve();\n }\n\n const pssh = new shaka.util.Pssh(\n shaka.util.BufferUtils.toUint8(mediaSegment));\n\n let totalLength = 0;\n for (const data of pssh.data) {\n totalLength += data.length;\n }\n if (totalLength == 0) {\n return Promise.resolve();\n }\n const combinedData = new Uint8Array(totalLength);\n let pos = 0;\n for (const data of pssh.data) {\n combinedData.set(data, pos);\n pos += data.length;\n }\n this.newInitData('cenc', combinedData);\n return this.allSessionsLoaded_;\n }\n};\n\n\n/**\n * @typedef {{\n * loaded: boolean,\n * initData: Uint8Array,\n * initDataType: ?string,\n * oldExpiration: number,\n * type: string,\n * updatePromise: shaka.util.PublicPromise\n * }}\n *\n * @description A record to track sessions and suppress duplicate init data.\n * @property {boolean} loaded\n * True once the key status has been updated (to a non-pending state). This\n * does not mean the session is 'usable'.\n * @property {Uint8Array} initData\n * The init data used to create the session.\n * @property {?string} initDataType\n * The init data type used to create the session.\n * @property {!MediaKeySession} session\n * The session object.\n * @property {number} oldExpiration\n * The expiration of the session on the last check. This is used to fire\n * an event when it changes.\n * @property {string} type\n * The session type\n * @property {shaka.util.PublicPromise} updatePromise\n * An optional Promise that will be resolved/rejected on the next update()\n * call. This is used to track the 'license-release' message when calling\n * remove().\n */\nshaka.media.DrmEngine.SessionMetaData;\n\n\n/**\n * @typedef {{\n * netEngine: !shaka.net.NetworkingEngine,\n * onError: function(!shaka.util.Error),\n * onKeyStatus: function(!Object.),\n * onExpirationUpdated: function(string,number),\n * onEvent: function(!Event)\n * }}\n *\n * @property {shaka.net.NetworkingEngine} netEngine\n * The NetworkingEngine instance to use. The caller retains ownership.\n * @property {function(!shaka.util.Error)} onError\n * Called when an error occurs. If the error is recoverable (see\n * {@link shaka.util.Error}) then the caller may invoke either\n * StreamingEngine.switch*() or StreamingEngine.seeked() to attempt recovery.\n * @property {function(!Object.)} onKeyStatus\n * Called when key status changes. The argument is a map of hex key IDs to\n * statuses.\n * @property {function(string,number)} onExpirationUpdated\n * Called when the session expiration value changes.\n * @property {function(!Event)} onEvent\n * Called when an event occurs that should be sent to the app.\n */\nshaka.media.DrmEngine.PlayerInterface;\n\n/**\n * @typedef {{\n * kids: !Array.,\n * type: string\n * }}\n *\n * @property {!Array.} kids\n * An array of key IDs. Each element of the array is the base64url encoding of\n * the octet sequence containing the key ID value.\n * @property {string} type\n * The requested MediaKeySessionType.\n * @see https://www.w3.org/TR/encrypted-media/#clear-key-request-format\n */\nshaka.media.DrmEngine.ClearKeyLicenceRequestFormat;\n\n/**\n * The amount of time, in seconds, we wait to consider a session closed.\n * This allows us to work around Chrome bug https://crbug.com/1108158.\n * @private {number}\n */\nshaka.media.DrmEngine.CLOSE_TIMEOUT_ = 1;\n\n\n/**\n * The amount of time, in seconds, we wait to consider session loaded even if no\n * key status information is available. This allows us to support browsers/CDMs\n * without key statuses.\n * @private {number}\n */\nshaka.media.DrmEngine.SESSION_LOAD_TIMEOUT_ = 5;\n\n\n/**\n * The amount of time, in seconds, we wait to batch up rapid key status changes.\n * This allows us to avoid multiple expiration events in most cases.\n * @type {number}\n */\nshaka.media.DrmEngine.KEY_STATUS_BATCH_TIME = 0.5;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.InitSegmentReference');\ngoog.provide('shaka.media.SegmentReference');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.util.ArrayUtils');\ngoog.require('shaka.util.BufferUtils');\n\n\n/**\n * Creates an InitSegmentReference, which provides the location to an\n * initialization segment.\n *\n * @export\n */\nshaka.media.InitSegmentReference = class {\n /**\n * @param {function():!Array.} uris A function that creates the URIs\n * of the resource containing the segment.\n * @param {number} startByte The offset from the start of the resource to the\n * start of the segment.\n * @param {?number} endByte The offset from the start of the resource\n * to the end of the segment, inclusive. A value of null indicates that the\n * segment extends to the end of the resource.\n * @param {null|shaka.extern.MediaQualityInfo=} mediaQuality Information about\n * the quality of the media associated with this init segment.\n * @param {(null|number)=} timescale\n * @param {(null|BufferSource)=} segmentData\n * @param {?shaka.extern.aesKey=} aesKey\n * The segment's AES-128-CBC full segment encryption key and iv.\n */\n constructor(uris, startByte, endByte, mediaQuality = null, timescale = null,\n segmentData = null, aesKey = null) {\n /** @type {function():!Array.} */\n this.getUris = uris;\n\n /** @const {number} */\n this.startByte = startByte;\n\n /** @const {?number} */\n this.endByte = endByte;\n\n /** @type {shaka.extern.MediaQualityInfo|null} */\n this.mediaQuality = mediaQuality;\n\n /** @type {number|null} */\n this.timescale = timescale;\n\n /** @type {BufferSource|null} */\n this.segmentData = segmentData;\n\n /** @type {?shaka.extern.aesKey} */\n this.aesKey = aesKey;\n\n /** @type {?string} */\n this.codecs = null;\n\n /** @type {?string} */\n this.mimeType = null;\n }\n\n /**\n * Returns the offset from the start of the resource to the\n * start of the segment.\n *\n * @return {number}\n * @export\n */\n getStartByte() {\n return this.startByte;\n }\n\n /**\n * Returns the offset from the start of the resource to the end of the\n * segment, inclusive. A value of null indicates that the segment extends\n * to the end of the resource.\n *\n * @return {?number}\n * @export\n */\n getEndByte() {\n return this.endByte;\n }\n\n /**\n * Returns the size of the init segment.\n * @return {?number}\n */\n getSize() {\n if (this.endByte) {\n return this.endByte - this.startByte;\n } else {\n return null;\n }\n }\n\n /**\n * Returns media quality information for the segments associated with\n * this init segment.\n *\n * @return {?shaka.extern.MediaQualityInfo}\n */\n getMediaQuality() {\n return this.mediaQuality;\n }\n\n /**\n * Return the segment data.\n *\n * @return {?BufferSource}\n */\n getSegmentData() {\n return this.segmentData;\n }\n\n\n /**\n * Check if two initSegmentReference have all the same values.\n * @param {?shaka.media.InitSegmentReference} reference1\n * @param {?shaka.media.InitSegmentReference} reference2\n * @return {boolean}\n */\n static equal(reference1, reference2) {\n const ArrayUtils = shaka.util.ArrayUtils;\n const BufferUtils = shaka.util.BufferUtils;\n\n if (reference1 === reference2) {\n return true;\n } else if (!reference1 || !reference2) {\n return reference1 == reference2;\n } else {\n return reference1.getStartByte() == reference2.getStartByte() &&\n reference1.getEndByte() == reference2.getEndByte() &&\n ArrayUtils.equal(\n reference1.getUris().sort(), reference2.getUris().sort()) &&\n BufferUtils.equal(reference1.getSegmentData(),\n reference2.getSegmentData());\n }\n }\n};\n\n\n/**\n * SegmentReference provides the start time, end time, and location to a media\n * segment.\n *\n * @export\n */\nshaka.media.SegmentReference = class {\n /**\n * @param {number} startTime The segment's start time in seconds.\n * @param {number} endTime The segment's end time in seconds. The segment\n * ends the instant before this time, so |endTime| must be strictly greater\n * than |startTime|.\n * @param {function():!Array.} uris\n * A function that creates the URIs of the resource containing the segment.\n * @param {number} startByte The offset from the start of the resource to the\n * start of the segment.\n * @param {?number} endByte The offset from the start of the resource to the\n * end of the segment, inclusive. A value of null indicates that the\n * segment extends to the end of the resource.\n * @param {shaka.media.InitSegmentReference} initSegmentReference\n * The segment's initialization segment metadata, or null if the segments\n * are self-initializing.\n * @param {number} timestampOffset\n * The amount of time, in seconds, that must be added to the segment's\n * internal timestamps to align it to the presentation timeline.\n *
\n * For DASH, this value should equal the Period start time minus the first\n * presentation timestamp of the first frame/sample in the Period. For\n * example, for MP4 based streams, this value should equal Period start\n * minus the first segment's tfdt box's 'baseMediaDecodeTime' field (after\n * it has been converted to seconds).\n *
\n * For HLS, this value should be the start time of the most recent\n * discontinuity, or 0 if there is no preceding discontinuity. Only used\n * in segments mode.\n * @param {number} appendWindowStart\n * The start of the append window for this reference, relative to the\n * presentation. Any content from before this time will be removed by\n * MediaSource.\n * @param {number} appendWindowEnd\n * The end of the append window for this reference, relative to the\n * presentation. Any content from after this time will be removed by\n * MediaSource.\n * @param {!Array.=} partialReferences\n * A list of SegmentReferences for the partial segments.\n * @param {?string=} tilesLayout\n * The value is a grid-item-dimension consisting of two positive decimal\n * integers in the format: column-x-row ('4x3'). It describes the\n * arrangement of Images in a Grid. The minimum valid LAYOUT is '1x1'.\n * @param {?number=} tileDuration\n * The explicit duration of an individual tile within the tiles grid.\n * If not provided, the duration should be automatically calculated based on\n * the duration of the reference.\n * @param {?number=} syncTime\n * A time value, expressed in seconds since 1970, which is used to\n * synchronize between streams. Both produced and consumed by the HLS\n * parser. Other components should not need this value.\n * @param {shaka.media.SegmentReference.Status=} status\n * The segment status is used to indicate that a segment does not exist or is\n * not available.\n * @param {?shaka.extern.aesKey=} aesKey\n * The segment's AES-128-CBC full segment encryption key and iv.\n * @param {boolean=} allPartialSegments\n * Indicate if the segment has all partial segments\n */\n constructor(\n startTime, endTime, uris, startByte, endByte, initSegmentReference,\n timestampOffset, appendWindowStart, appendWindowEnd,\n partialReferences = [], tilesLayout = '', tileDuration = null,\n syncTime = null, status = shaka.media.SegmentReference.Status.AVAILABLE,\n aesKey = null, allPartialSegments = false) {\n // A preload hinted Partial Segment has the same startTime and endTime.\n goog.asserts.assert(startTime <= endTime,\n 'startTime must be less than or equal to endTime');\n goog.asserts.assert((endByte == null) || (startByte < endByte),\n 'startByte must be < endByte');\n\n /** @type {number} */\n this.startTime = startTime;\n\n /** @type {number} */\n this.endTime = endTime;\n\n /**\n * The \"true\" end time of the segment, without considering the period end\n * time. This is necessary for thumbnail segments, where timing requires us\n * to know the original segment duration as described in the manifest.\n * @type {number}\n */\n this.trueEndTime = endTime;\n\n /** @type {function():!Array.} */\n this.getUrisInner = uris;\n\n /** @const {number} */\n this.startByte = startByte;\n\n /** @const {?number} */\n this.endByte = endByte;\n\n /** @type {shaka.media.InitSegmentReference} */\n this.initSegmentReference = initSegmentReference;\n\n /** @type {number} */\n this.timestampOffset = timestampOffset;\n\n /** @type {number} */\n this.appendWindowStart = appendWindowStart;\n\n /** @type {number} */\n this.appendWindowEnd = appendWindowEnd;\n\n /** @type {!Array.} */\n this.partialReferences = partialReferences;\n\n /** @type {?string} */\n this.tilesLayout = tilesLayout;\n\n /** @type {?number} */\n this.tileDuration = tileDuration;\n\n /**\n * A time value, expressed in seconds since 1970, which is used to\n * synchronize between streams. Both produced and consumed by the HLS\n * parser. Other components should not need this value.\n *\n * @type {?number}\n */\n this.syncTime = syncTime;\n\n /** @type {shaka.media.SegmentReference.Status} */\n this.status = status;\n\n /** @type {boolean} */\n this.preload = false;\n\n /** @type {boolean} */\n this.independent = true;\n\n /** @type {boolean} */\n this.byterangeOptimization = false;\n\n /** @type {?shaka.extern.aesKey} */\n this.aesKey = aesKey;\n\n /** @type {?shaka.extern.ThumbnailSprite} */\n this.thumbnailSprite = null;\n\n /** @type {number} */\n this.discontinuitySequence = -1;\n\n /** @type {boolean} */\n this.allPartialSegments = allPartialSegments;\n\n /** @type {boolean} */\n this.partial = false;\n\n /** @type {boolean} */\n this.lastPartial = false;\n\n for (const partial of this.partialReferences) {\n partial.markAsPartial();\n }\n if (this.allPartialSegments && this.partialReferences.length) {\n const lastPartial =\n this.partialReferences[this.partialReferences.length - 1];\n lastPartial.markAsLastPartial();\n }\n\n /** @type {?string} */\n this.codecs = null;\n\n /** @type {?string} */\n this.mimeType = null;\n\n /** @type {?number} */\n this.bandwidth = null;\n\n /** @type {BufferSource|null} */\n this.segmentData = null;\n }\n\n /**\n * Creates and returns the URIs of the resource containing the segment.\n *\n * @return {!Array.}\n * @export\n */\n getUris() {\n return this.getUrisInner();\n }\n\n /**\n * Returns the segment's start time in seconds.\n *\n * @return {number}\n * @export\n */\n getStartTime() {\n return this.startTime;\n }\n\n /**\n * Returns the segment's end time in seconds.\n *\n * @return {number}\n * @export\n */\n getEndTime() {\n return this.endTime;\n }\n\n /**\n * Returns the offset from the start of the resource to the\n * start of the segment.\n *\n * @return {number}\n * @export\n */\n getStartByte() {\n return this.startByte;\n }\n\n /**\n * Returns the offset from the start of the resource to the end of the\n * segment, inclusive. A value of null indicates that the segment extends to\n * the end of the resource.\n *\n * @return {?number}\n * @export\n */\n getEndByte() {\n return this.endByte;\n }\n\n /**\n * Returns the size of the segment.\n * @return {?number}\n */\n getSize() {\n if (this.endByte) {\n return this.endByte - this.startByte;\n } else {\n return null;\n }\n }\n\n /**\n * Returns true if it contains partial SegmentReferences.\n * @return {boolean}\n */\n hasPartialSegments() {\n return this.partialReferences.length > 0;\n }\n\n /**\n * Returns true if it contains all partial SegmentReferences.\n * @return {boolean}\n */\n hasAllPartialSegments() {\n return this.allPartialSegments;\n }\n\n /**\n * Returns the segment's tiles layout. Only defined in image segments.\n *\n * @return {?string}\n * @export\n */\n getTilesLayout() {\n return this.tilesLayout;\n }\n\n /**\n * Returns the segment's explicit tile duration.\n * Only defined in image segments.\n *\n * @return {?number}\n * @export\n */\n getTileDuration() {\n return this.tileDuration;\n }\n\n /**\n * Returns the segment's status.\n *\n * @return {shaka.media.SegmentReference.Status}\n * @export\n */\n getStatus() {\n return this.status;\n }\n\n /**\n * Mark the reference as unavailable.\n *\n * @export\n */\n markAsUnavailable() {\n this.status = shaka.media.SegmentReference.Status.UNAVAILABLE;\n }\n\n /**\n * Mark the reference as preload.\n *\n * @export\n */\n markAsPreload() {\n this.preload = true;\n }\n\n /**\n * Returns true if the segment is preloaded.\n *\n * @return {boolean}\n * @export\n */\n isPreload() {\n return this.preload;\n }\n\n /**\n * Mark the reference as non-independent.\n *\n * @export\n */\n markAsNonIndependent() {\n this.independent = false;\n }\n\n /**\n * Returns true if the segment is independent.\n *\n * @return {boolean}\n * @export\n */\n isIndependent() {\n return this.independent;\n }\n\n /**\n * Mark the reference as partial.\n *\n * @export\n */\n markAsPartial() {\n this.partial = true;\n }\n\n /**\n * Returns true if the segment is partial.\n *\n * @return {boolean}\n * @export\n */\n isPartial() {\n return this.partial;\n }\n\n /**\n * Mark the reference as being the last part of the full segment\n *\n * @export\n */\n markAsLastPartial() {\n this.lastPartial = true;\n }\n\n /**\n * Returns true if reference as being the last part of the full segment.\n *\n * @return {boolean}\n * @export\n */\n isLastPartial() {\n return this.lastPartial;\n }\n\n /**\n * Mark the reference as byterange optimization.\n *\n * The \"byterange optimization\" means that it is playable using MP4 low\n * latency streaming with chunked data.\n *\n * @export\n */\n markAsByterangeOptimization() {\n this.byterangeOptimization = true;\n }\n\n /**\n * Returns true if the segment has a byterange optimization.\n *\n * @return {boolean}\n * @export\n */\n hasByterangeOptimization() {\n return this.byterangeOptimization;\n }\n\n /**\n * Set the segment's thumbnail sprite.\n *\n * @param {shaka.extern.ThumbnailSprite} thumbnailSprite\n * @export\n */\n setThumbnailSprite(thumbnailSprite) {\n this.thumbnailSprite = thumbnailSprite;\n }\n\n /**\n * Returns the segment's thumbnail sprite.\n *\n * @return {?shaka.extern.ThumbnailSprite}\n * @export\n */\n getThumbnailSprite() {\n return this.thumbnailSprite;\n }\n\n /**\n * Offset the segment reference by a fixed amount.\n *\n * @param {number} offset The amount to add to the segment's start and end\n * times.\n * @export\n */\n offset(offset) {\n this.startTime += offset;\n this.endTime += offset;\n this.trueEndTime += offset;\n\n for (const partial of this.partialReferences) {\n partial.startTime += offset;\n partial.endTime += offset;\n partial.trueEndTime += offset;\n }\n }\n\n /**\n * Sync this segment against a particular sync time that will serve as \"0\" in\n * the presentation timeline.\n *\n * @param {number} lowestSyncTime\n * @export\n */\n syncAgainst(lowestSyncTime) {\n if (this.syncTime == null) {\n shaka.log.alwaysError('Sync attempted without sync time!');\n return;\n }\n const desiredStart = this.syncTime - lowestSyncTime;\n const offset = desiredStart - this.startTime;\n if (Math.abs(offset) >= 0.001) {\n this.offset(offset);\n }\n }\n\n /**\n * Set the segment data.\n *\n * @param {!BufferSource} segmentData\n * @export\n */\n setSegmentData(segmentData) {\n this.segmentData = segmentData;\n }\n\n /**\n * Return the segment data.\n *\n * @return {?BufferSource}\n * @export\n */\n getSegmentData() {\n return this.segmentData;\n }\n\n /**\n * Updates the init segment reference and propagates the update to all partial\n * references.\n * @param {shaka.media.InitSegmentReference} initSegmentReference\n */\n updateInitSegmentReference(initSegmentReference) {\n this.initSegmentReference = initSegmentReference;\n for (const partialReference of this.partialReferences) {\n partialReference.updateInitSegmentReference(initSegmentReference);\n }\n }\n};\n\n\n/**\n * Rather than using booleans to communicate what the state of the reference,\n * we have this enum.\n *\n * @enum {number}\n * @export\n */\nshaka.media.SegmentReference.Status = {\n AVAILABLE: 0,\n UNAVAILABLE: 1,\n MISSING: 2,\n};\n\n\n/**\n * A convenient typedef for when either type of reference is acceptable.\n *\n * @typedef {shaka.media.InitSegmentReference|shaka.media.SegmentReference}\n */\nshaka.media.AnySegmentReference;\n\n\n/**\n * @typedef {{\n * height: number,\n * positionX: number,\n * positionY: number,\n * width: number\n * }}\n *\n * @property {number} height\n * The thumbnail height in px.\n * @property {number} positionX\n * The thumbnail left position in px.\n * @property {number} positionY\n * The thumbnail top position in px.\n * @property {number} width\n * The thumbnail width in px.\n * @export\n */\nshaka.media.SegmentReference.ThumbnailSprite;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.abr.SimpleAbrManager');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.abr.EwmaBandwidthEstimator');\ngoog.require('shaka.log');\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.IReleasable');\ngoog.require('shaka.util.StreamUtils');\ngoog.require('shaka.util.Timer');\n\ngoog.requireType('shaka.util.CmsdManager');\n\n\n/**\n * @summary\n *

\n * This defines the default ABR manager for the Player. An instance of this\n * class is used when no ABR manager is given.\n *

\n *

\n * The behavior of this class is to take throughput samples using\n * segmentDownloaded to estimate the current network bandwidth. Then it will\n * use that to choose the streams that best fit the current bandwidth. It will\n * always pick the highest bandwidth variant it thinks can be played.\n *

\n *

\n * After initial choices are made, this class will call switchCallback() when\n * there is a better choice. switchCallback() will not be called more than once\n * per ({@link shaka.abr.SimpleAbrManager.SWITCH_INTERVAL_MS}).\n *

\n *\n * @implements {shaka.extern.AbrManager}\n * @implements {shaka.util.IReleasable}\n * @export\n */\nshaka.abr.SimpleAbrManager = class {\n /** */\n constructor() {\n /** @private {?shaka.extern.AbrManager.SwitchCallback} */\n this.switch_ = null;\n\n /** @private {boolean} */\n this.enabled_ = false;\n\n /** @private {shaka.abr.EwmaBandwidthEstimator} */\n this.bandwidthEstimator_ = new shaka.abr.EwmaBandwidthEstimator();\n\n /** @private {!shaka.util.EventManager} */\n this.eventManager_ = new shaka.util.EventManager();\n\n // Some browsers implement the Network Information API, which allows\n // retrieving information about a user's network connection. We listen\n // to the change event to be able to make quick changes in case the type\n // of connectivity changes.\n if (navigator.connection && navigator.connection.addEventListener) {\n this.eventManager_.listen(\n /** @type {EventTarget} */(navigator.connection),\n 'change',\n () => {\n if (this.enabled_ && this.config_.useNetworkInformation) {\n this.bandwidthEstimator_ = new shaka.abr.EwmaBandwidthEstimator();\n if (this.config_) {\n this.bandwidthEstimator_.configure(this.config_.advanced);\n }\n const chosenVariant = this.chooseVariant();\n if (chosenVariant && navigator.onLine) {\n this.switch_(chosenVariant, this.config_.clearBufferSwitch,\n this.config_.safeMarginSwitch);\n }\n }\n });\n }\n\n /**\n * A filtered list of Variants to choose from.\n * @private {!Array.}\n */\n this.variants_ = [];\n\n /** @private {number} */\n this.playbackRate_ = 1;\n\n /** @private {boolean} */\n this.startupComplete_ = false;\n\n /**\n * The last wall-clock time, in milliseconds, when streams were chosen.\n *\n * @private {?number}\n */\n this.lastTimeChosenMs_ = null;\n\n /** @private {?shaka.extern.AbrConfiguration} */\n this.config_ = null;\n\n /** @private {HTMLMediaElement} */\n this.mediaElement_ = null;\n\n /** @private {ResizeObserver} */\n this.resizeObserver_ = null;\n\n /** @private {shaka.util.Timer} */\n this.resizeObserverTimer_ = new shaka.util.Timer(() => {\n if (this.enabled_ && this.config_.restrictToElementSize) {\n const chosenVariant = this.chooseVariant();\n if (chosenVariant) {\n this.switch_(chosenVariant, this.config_.clearBufferSwitch,\n this.config_.safeMarginSwitch);\n }\n }\n });\n\n /** @private {?shaka.util.CmsdManager} */\n this.cmsdManager_ = null;\n }\n\n\n /**\n * @override\n * @export\n */\n stop() {\n this.switch_ = null;\n this.enabled_ = false;\n this.variants_ = [];\n this.playbackRate_ = 1;\n this.lastTimeChosenMs_ = null;\n this.mediaElement_ = null;\n\n if (this.resizeObserver_) {\n this.resizeObserver_.disconnect();\n this.resizeObserver_ = null;\n }\n\n this.resizeObserverTimer_.stop();\n\n this.cmsdManager_ = null;\n\n // Don't reset |startupComplete_|: if we've left the startup interval, we\n // can start using bandwidth estimates right away after init() is called.\n }\n\n /**\n * @override\n * @export\n */\n release() {\n // stop() should already have been called for unload\n this.eventManager_.release();\n this.resizeObserverTimer_ = null;\n }\n\n\n /**\n * @override\n * @export\n */\n init(switchCallback) {\n this.switch_ = switchCallback;\n }\n\n\n /**\n * @return {shaka.extern.Variant}\n * @override\n * @export\n */\n chooseVariant() {\n let maxHeight = Infinity;\n let maxWidth = Infinity;\n\n if (this.config_.restrictToScreenSize) {\n const devicePixelRatio =\n this.config_.ignoreDevicePixelRatio ? 1 : window.devicePixelRatio;\n maxHeight = window.screen.height * devicePixelRatio;\n maxWidth = window.screen.width * devicePixelRatio;\n }\n\n if (this.resizeObserver_ && this.config_.restrictToElementSize) {\n const devicePixelRatio =\n this.config_.ignoreDevicePixelRatio ? 1 : window.devicePixelRatio;\n maxHeight = Math.min(\n maxHeight, this.mediaElement_.clientHeight * devicePixelRatio);\n maxWidth = Math.min(\n maxWidth, this.mediaElement_.clientWidth * devicePixelRatio);\n }\n\n let normalVariants = this.variants_.filter((variant) => {\n return variant && !shaka.util.StreamUtils.isFastSwitching(variant);\n });\n if (!normalVariants.length) {\n normalVariants = this.variants_;\n }\n\n let variants = normalVariants;\n if (normalVariants.length != this.variants_.length) {\n variants = this.variants_.filter((variant) => {\n return variant && shaka.util.StreamUtils.isFastSwitching(variant);\n });\n }\n\n // Get sorted Variants.\n let sortedVariants = this.filterAndSortVariants_(\n this.config_.restrictions, variants,\n /* maxHeight= */ Infinity, /* maxWidth= */ Infinity);\n\n if (maxHeight != Infinity || maxWidth != Infinity) {\n const resolutions = this.getResolutionList_(sortedVariants);\n for (const resolution of resolutions) {\n if (resolution.height >= maxHeight && resolution.width >= maxWidth) {\n maxHeight = resolution.height;\n maxWidth = resolution.width;\n break;\n }\n }\n\n sortedVariants = this.filterAndSortVariants_(\n this.config_.restrictions, variants, maxHeight, maxWidth);\n }\n\n const currentBandwidth = this.getBandwidthEstimate();\n\n if (variants.length && !sortedVariants.length) {\n // If we couldn't meet the ABR restrictions, we should still play\n // something.\n // These restrictions are not \"hard\" restrictions in the way that\n // top-level or DRM-based restrictions are. Sort the variants without\n // restrictions and keep just the first (lowest-bandwidth) one.\n shaka.log.warning('No variants met the ABR restrictions. ' +\n 'Choosing a variant by lowest bandwidth.');\n sortedVariants = this.filterAndSortVariants_(\n /* restrictions= */ null, variants,\n /* maxHeight= */ Infinity, /* maxWidth= */ Infinity);\n sortedVariants = [sortedVariants[0]];\n }\n\n // Start by assuming that we will use the first Stream.\n let chosen = sortedVariants[0] || null;\n\n for (let i = 0; i < sortedVariants.length; i++) {\n const item = sortedVariants[i];\n const playbackRate =\n !isNaN(this.playbackRate_) ? Math.abs(this.playbackRate_) : 1;\n const itemBandwidth = playbackRate * item.bandwidth;\n const minBandwidth =\n itemBandwidth / this.config_.bandwidthDowngradeTarget;\n let next = {bandwidth: Infinity};\n for (let j = i + 1; j < sortedVariants.length; j++) {\n if (item.bandwidth != sortedVariants[j].bandwidth) {\n next = sortedVariants[j];\n break;\n }\n }\n const nextBandwidth = playbackRate * next.bandwidth;\n const maxBandwidth = nextBandwidth / this.config_.bandwidthUpgradeTarget;\n shaka.log.v2('Bandwidth ranges:',\n (itemBandwidth / 1e6).toFixed(3),\n (minBandwidth / 1e6).toFixed(3),\n (maxBandwidth / 1e6).toFixed(3));\n\n if (currentBandwidth >= minBandwidth &&\n currentBandwidth <= maxBandwidth &&\n (chosen.bandwidth != item.bandwidth ||\n this.isSameBandwidthAndHigherResolution_(chosen, item))) {\n chosen = item;\n }\n }\n\n this.lastTimeChosenMs_ = Date.now();\n return chosen;\n }\n\n\n /**\n * @override\n * @export\n */\n enable() {\n this.enabled_ = true;\n }\n\n\n /**\n * @override\n * @export\n */\n disable() {\n this.enabled_ = false;\n }\n\n\n /**\n * @param {number} deltaTimeMs The duration, in milliseconds, that the request\n * took to complete.\n * @param {number} numBytes The total number of bytes transferred.\n * @param {boolean} allowSwitch Indicate if the segment is allowed to switch\n * to another stream.\n * @param {shaka.extern.Request=} request\n * A reference to the request\n * @override\n * @export\n */\n segmentDownloaded(deltaTimeMs, numBytes, allowSwitch, request) {\n if (deltaTimeMs < this.config_.cacheLoadThreshold) {\n // The time indicates that it could be a cache response, so we should\n // ignore this value.\n return;\n }\n shaka.log.v2('Segment downloaded:',\n 'contentType=' + (request && request.contentType),\n 'deltaTimeMs=' + deltaTimeMs,\n 'numBytes=' + numBytes,\n 'lastTimeChosenMs=' + this.lastTimeChosenMs_,\n 'enabled=' + this.enabled_);\n goog.asserts.assert(deltaTimeMs >= 0, 'expected a non-negative duration');\n this.bandwidthEstimator_.sample(deltaTimeMs, numBytes);\n\n if (allowSwitch && (this.lastTimeChosenMs_ != null) && this.enabled_) {\n this.suggestStreams_();\n }\n }\n\n\n /**\n * @override\n * @export\n */\n trySuggestStreams() {\n if ((this.lastTimeChosenMs_ != null) && this.enabled_) {\n this.suggestStreams_();\n }\n }\n\n\n /**\n * @override\n * @export\n */\n getBandwidthEstimate() {\n const defaultBandwidthEstimate = this.getDefaultBandwidth_();\n if (navigator.connection && navigator.connection.downlink &&\n this.config_.useNetworkInformation &&\n this.config_.preferNetworkInformationBandwidth) {\n return defaultBandwidthEstimate;\n }\n const bandwidthEstimate = this.bandwidthEstimator_.getBandwidthEstimate(\n defaultBandwidthEstimate);\n if (this.cmsdManager_) {\n return this.cmsdManager_.getBandwidthEstimate(bandwidthEstimate);\n }\n return bandwidthEstimate;\n }\n\n\n /**\n * @override\n * @export\n */\n setVariants(variants) {\n this.variants_ = variants;\n }\n\n\n /**\n * @override\n * @export\n */\n playbackRateChanged(rate) {\n this.playbackRate_ = rate;\n }\n\n\n /**\n * @override\n * @export\n */\n setMediaElement(mediaElement) {\n this.mediaElement_ = mediaElement;\n if (this.resizeObserver_) {\n this.resizeObserver_.disconnect();\n this.resizeObserver_ = null;\n }\n if (this.mediaElement_ && 'ResizeObserver' in window) {\n this.resizeObserver_ = new ResizeObserver(() => {\n const SimpleAbrManager = shaka.abr.SimpleAbrManager;\n // Batch up resize changes before checking them.\n this.resizeObserverTimer_.tickAfter(\n /* seconds= */ SimpleAbrManager.RESIZE_OBSERVER_BATCH_TIME);\n });\n this.resizeObserver_.observe(this.mediaElement_);\n }\n }\n\n\n /**\n * @override\n * @export\n */\n setCmsdManager(cmsdManager) {\n this.cmsdManager_ = cmsdManager;\n }\n\n\n /**\n * @override\n * @export\n */\n configure(config) {\n this.config_ = config;\n if (this.bandwidthEstimator_ && this.config_) {\n this.bandwidthEstimator_.configure(this.config_.advanced);\n }\n }\n\n\n /**\n * Calls switch_() with the variant chosen by chooseVariant().\n *\n * @private\n */\n suggestStreams_() {\n shaka.log.v2('Suggesting Streams...');\n goog.asserts.assert(this.lastTimeChosenMs_ != null,\n 'lastTimeChosenMs_ should not be null');\n\n if (!this.startupComplete_) {\n // Check if we've got enough data yet.\n if (!this.bandwidthEstimator_.hasGoodEstimate()) {\n shaka.log.v2('Still waiting for a good estimate...');\n return;\n }\n this.startupComplete_ = true;\n\n this.lastTimeChosenMs_ -=\n (this.config_.switchInterval - this.config_.minTimeToSwitch) * 1000;\n }\n\n // Check if we've left the switch interval.\n const now = Date.now();\n const delta = now - this.lastTimeChosenMs_;\n if (delta < this.config_.switchInterval * 1000) {\n shaka.log.v2('Still within switch interval...');\n return;\n }\n\n const chosenVariant = this.chooseVariant();\n const bandwidthEstimate = this.getBandwidthEstimate();\n const currentBandwidthKbps = Math.round(bandwidthEstimate / 1000.0);\n\n if (chosenVariant) {\n shaka.log.debug(\n 'Calling switch_(), bandwidth=' + currentBandwidthKbps + ' kbps');\n // If any of these chosen streams are already chosen, Player will filter\n // them out before passing the choices on to StreamingEngine.\n this.switch_(chosenVariant, this.config_.clearBufferSwitch,\n this.config_.safeMarginSwitch);\n }\n }\n\n\n /**\n * @private\n */\n getDefaultBandwidth_() {\n let defaultBandwidthEstimate = this.config_.defaultBandwidthEstimate;\n\n // Some browsers implement the Network Information API, which allows\n // retrieving information about a user's network connection. Tizen 3 has\n // NetworkInformation, but not the downlink attribute.\n if (navigator.connection && navigator.connection.downlink &&\n this.config_.useNetworkInformation) {\n // If it's available, get the bandwidth estimate from the browser (in\n // megabits per second) and use it as defaultBandwidthEstimate.\n defaultBandwidthEstimate = navigator.connection.downlink * 1e6;\n }\n return defaultBandwidthEstimate;\n }\n\n\n /**\n * @param {?shaka.extern.Restrictions} restrictions\n * @param {!Array.} variants\n * @param {!number} maxHeight\n * @param {!number} maxWidth\n * @return {!Array.} variants filtered according to\n * |restrictions| and sorted in ascending order of bandwidth.\n * @private\n */\n filterAndSortVariants_(restrictions, variants, maxHeight, maxWidth) {\n if (this.cmsdManager_) {\n const maxBitrate = this.cmsdManager_.getMaxBitrate();\n if (maxBitrate) {\n variants = variants.filter((variant) => {\n if (!variant.bandwidth || !maxBitrate) {\n return true;\n }\n return variant.bandwidth <= maxBitrate;\n });\n }\n }\n\n if (restrictions) {\n variants = variants.filter((variant) => {\n // This was already checked in another scope, but the compiler doesn't\n // seem to understand that.\n goog.asserts.assert(restrictions, 'Restrictions should exist!');\n\n return shaka.util.StreamUtils.meetsRestrictions(\n variant, restrictions,\n /* maxHwRes= */ {width: maxWidth, height: maxHeight});\n });\n }\n\n return variants.sort((v1, v2) => {\n return v1.bandwidth - v2.bandwidth;\n });\n }\n\n /**\n * @param {!Array.} variants\n * @return {!Array.<{height: number, width: number}>}\n * @private\n */\n getResolutionList_(variants) {\n const resolutions = [];\n for (const variant of variants) {\n const video = variant.video;\n if (!video || !video.height || !video.width) {\n continue;\n }\n resolutions.push({\n height: video.height,\n width: video.width,\n });\n }\n\n return resolutions.sort((v1, v2) => {\n return v1.width - v2.width;\n });\n }\n\n /**\n * @param {shaka.extern.Variant} chosenVariant\n * @param {shaka.extern.Variant} newVariant\n * @return {boolean}\n * @private\n */\n isSameBandwidthAndHigherResolution_(chosenVariant, newVariant) {\n if (chosenVariant.bandwidth != newVariant.bandwidth) {\n return false;\n }\n if (!chosenVariant.video || !newVariant.video) {\n return false;\n }\n return chosenVariant.video.width < newVariant.video.width ||\n chosenVariant.video.height < newVariant.video.height;\n }\n};\n\n\n/**\n * The amount of time, in seconds, we wait to batch up rapid resize changes.\n * This allows us to avoid multiple resize events in most cases.\n * @type {number}\n */\nshaka.abr.SimpleAbrManager.RESIZE_OBSERVER_BATCH_TIME = 1;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.AdaptationSet');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.util.MimeUtils');\n\n\n/**\n * A set of variants that we want to adapt between.\n *\n * @final\n */\nshaka.media.AdaptationSet = class {\n /**\n * @param {shaka.extern.Variant} root\n * The variant that all other variants will be tested against when being\n * added to the adaptation set. If a variant is not compatible with the\n * root, it will not be added.\n * @param {!Iterable.=} candidates\n * Variants that may be compatible with the root and should be added if\n * compatible. If a candidate is not compatible, it will not end up in the\n * adaptation set.\n * @param {boolean=} compareCodecs\n */\n constructor(root, candidates, compareCodecs = true) {\n /** @private {shaka.extern.Variant} */\n this.root_ = root;\n /** @private {!Set.} */\n this.variants_ = new Set([root]);\n\n // Try to add all the candidates. If they cannot be added (because they\n // are not compatible with the root, they will be rejected by |add|.\n candidates = candidates || [];\n for (const candidate of candidates) {\n this.add(candidate, compareCodecs);\n }\n }\n\n /**\n * @param {shaka.extern.Variant} variant\n * @param {boolean} compareCodecs\n * @return {boolean}\n */\n add(variant, compareCodecs) {\n if (this.canInclude(variant, compareCodecs)) {\n this.variants_.add(variant);\n return true;\n }\n\n // To be nice, issue a warning if someone is trying to add something that\n // they shouldn't.\n shaka.log.warning('Rejecting variant - not compatible with root.');\n return false;\n }\n\n /**\n * Check if |variant| can be included with the set. If |canInclude| returns\n * |false|, calling |add| will result in it being ignored.\n *\n * @param {shaka.extern.Variant} variant\n * @param {boolean=} compareCodecs\n * @return {boolean}\n */\n canInclude(variant, compareCodecs = true) {\n return shaka.media.AdaptationSet\n .areAdaptable(this.root_, variant, compareCodecs);\n }\n\n /**\n * @param {shaka.extern.Variant} a\n * @param {shaka.extern.Variant} b\n * @param {boolean} compareCodecs\n * @return {boolean}\n */\n static areAdaptable(a, b, compareCodecs) {\n const AdaptationSet = shaka.media.AdaptationSet;\n\n // All variants should have audio or should all not have audio.\n if (!!a.audio != !!b.audio) {\n return false;\n }\n\n // All variants should have video or should all not have video.\n if (!!a.video != !!b.video) {\n return false;\n }\n\n // If the languages don't match, we should not adapt between them.\n if (a.language != b.language) {\n return false;\n }\n\n goog.asserts.assert(\n !!a.audio == !!b.audio,\n 'Both should either have audio or not have audio.');\n if (a.audio && b.audio &&\n !AdaptationSet.areAudiosCompatible_(a.audio, b.audio, compareCodecs)) {\n return false;\n }\n\n goog.asserts.assert(\n !!a.video == !!b.video,\n 'Both should either have video or not have video.');\n if (a.video && b.video &&\n !AdaptationSet.areVideosCompatible_(a.video, b.video, compareCodecs)) {\n return false;\n }\n\n return true;\n }\n\n /**\n * @return {!Iterable.}\n */\n values() {\n return this.variants_.values();\n }\n\n /**\n * Check if we can switch between two audio streams.\n *\n * @param {shaka.extern.Stream} a\n * @param {shaka.extern.Stream} b\n * @param {boolean} compareCodecs\n * @return {boolean}\n * @private\n */\n static areAudiosCompatible_(a, b, compareCodecs) {\n const AdaptationSet = shaka.media.AdaptationSet;\n\n // Don't adapt between channel counts, which could annoy the user\n // due to volume changes on downmixing. An exception is made for\n // stereo and mono, which should be fine to adapt between.\n if (!a.channelsCount || !b.channelsCount ||\n a.channelsCount > 2 || b.channelsCount > 2) {\n if (a.channelsCount != b.channelsCount) {\n return false;\n }\n }\n\n // Don't adapt between spatial and non spatial audio, which may\n // annoy the user.\n if (a.spatialAudio !== b.spatialAudio) {\n return false;\n }\n\n // We can only adapt between base-codecs.\n if (compareCodecs && !AdaptationSet.canTransitionBetween_(a, b)) {\n return false;\n }\n\n // Audio roles must not change between adaptations.\n if (!AdaptationSet.areRolesEqual_(a.roles, b.roles)) {\n return false;\n }\n\n // We can only adapt between the same groupId.\n if (a.groupId !== b.groupId) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Check if we can switch between two video streams.\n *\n * @param {shaka.extern.Stream} a\n * @param {shaka.extern.Stream} b\n * @param {boolean} compareCodecs\n * @return {boolean}\n * @private\n */\n static areVideosCompatible_(a, b, compareCodecs) {\n const AdaptationSet = shaka.media.AdaptationSet;\n\n // We can only adapt between base-codecs.\n if (compareCodecs && !AdaptationSet.canTransitionBetween_(a, b)) {\n return false;\n }\n\n // Video roles must not change between adaptations.\n if (!AdaptationSet.areRolesEqual_(a.roles, b.roles)) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Check if we can switch between two streams based on their codec and mime\n * type.\n *\n * @param {shaka.extern.Stream} a\n * @param {shaka.extern.Stream} b\n * @return {boolean}\n * @private\n */\n static canTransitionBetween_(a, b) {\n if (a.mimeType != b.mimeType) {\n return false;\n }\n\n\n // Get the base codec of each codec in each stream.\n const codecsA = shaka.util.MimeUtils.splitCodecs(a.codecs).map((codec) => {\n return shaka.util.MimeUtils.getCodecBase(codec);\n });\n const codecsB = shaka.util.MimeUtils.splitCodecs(b.codecs).map((codec) => {\n return shaka.util.MimeUtils.getCodecBase(codec);\n });\n\n // We don't want to allow switching between transmuxed and non-transmuxed\n // content so the number of codecs should be the same.\n //\n // To avoid the case where an codec is used for audio and video we will\n // codecs using arrays (not sets). While at this time, there are no codecs\n // that work for audio and video, it is possible for \"raw\" codecs to be\n // which would share the same name.\n if (codecsA.length != codecsB.length) {\n return false;\n }\n\n // Sort them so that we can walk through them and compare them\n // element-by-element.\n codecsA.sort();\n codecsB.sort();\n\n for (let i = 0; i < codecsA.length; i++) {\n if (codecsA[i] != codecsB[i]) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Check if two role lists are the equal. This will take into account all\n * unique behaviours when comparing roles.\n *\n * @param {!Iterable.} a\n * @param {!Iterable.} b\n * @return {boolean}\n * @private\n */\n static areRolesEqual_(a, b) {\n const aSet = new Set(a);\n const bSet = new Set(b);\n\n // Remove the main role from the role lists (we expect to see them only\n // in dash manifests).\n const mainRole = 'main';\n aSet.delete(mainRole);\n bSet.delete(mainRole);\n\n // Make sure that we have the same number roles in each list. Make sure to\n // do it after correcting for 'main'.\n if (aSet.size != bSet.size) {\n return false;\n }\n\n // Because we know the two sets are the same size, if any item is missing\n // if means that they are not the same.\n for (const x of aSet) {\n if (!bSet.has(x)) {\n return false;\n }\n }\n\n return true;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.AdaptationSetCriteria');\ngoog.provide('shaka.media.ExampleBasedCriteria');\ngoog.provide('shaka.media.PreferenceBasedCriteria');\n\ngoog.require('shaka.config.CodecSwitchingStrategy');\ngoog.require('shaka.log');\ngoog.require('shaka.media.AdaptationSet');\ngoog.require('shaka.media.Capabilities');\ngoog.require('shaka.util.LanguageUtils');\n\n\n/**\n * An adaptation set criteria is a unit of logic that can take a set of\n * variants and return a subset of variants that should (and can) be\n * adapted between.\n *\n * @interface\n */\nshaka.media.AdaptationSetCriteria = class {\n /**\n * Take a set of variants, and return a subset of variants that can be\n * adapted between.\n *\n * @param {!Array.} variants\n * @return {!shaka.media.AdaptationSet}\n */\n create(variants) {}\n};\n\n\n/**\n * @implements {shaka.media.AdaptationSetCriteria}\n * @final\n */\nshaka.media.ExampleBasedCriteria = class {\n /**\n * @param {shaka.extern.Variant} example\n * @param {shaka.config.CodecSwitchingStrategy} codecSwitchingStrategy\n */\n constructor(example, codecSwitchingStrategy) {\n // We can't know if role and label are really important, so we don't use\n // role and label for this.\n const role = '';\n const audioLabel = '';\n const videoLabel = '';\n const hdrLevel = example.video && example.video.hdr ?\n example.video.hdr : '';\n const spatialAudio = example.audio && example.audio.spatialAudio ?\n example.audio.spatialAudio : false;\n const videoLayout = example.video && example.video.videoLayout ?\n example.video.videoLayout : '';\n const channelCount = example.audio && example.audio.channelsCount ?\n example.audio.channelsCount : 0;\n const audioCodec = example.audio && example.audio.codecs ?\n example.audio.codecs : '';\n\n /** @private {!shaka.media.AdaptationSetCriteria} */\n this.preferenceBasedCriteria_ = new shaka.media.PreferenceBasedCriteria(\n example.language, role, channelCount, hdrLevel, spatialAudio,\n videoLayout, audioLabel, videoLabel,\n codecSwitchingStrategy, audioCodec);\n }\n\n /** @override */\n create(variants) {\n return this.preferenceBasedCriteria_.create(variants);\n }\n};\n\n\n/**\n * @implements {shaka.media.AdaptationSetCriteria}\n * @final\n */\nshaka.media.PreferenceBasedCriteria = class {\n /**\n * @param {string} language\n * @param {string} role\n * @param {number} channelCount\n * @param {string} hdrLevel\n * @param {boolean} spatialAudio\n * @param {string} videoLayout\n * @param {string} audioLabel\n * @param {string} videoLabel\n * @param {shaka.config.CodecSwitchingStrategy} codecSwitchingStrategy\n * @param {string} audioCodec\n */\n constructor(language, role, channelCount, hdrLevel, spatialAudio,\n videoLayout, audioLabel, videoLabel, codecSwitchingStrategy, audioCodec) {\n /** @private {string} */\n this.language_ = language;\n /** @private {string} */\n this.role_ = role;\n /** @private {number} */\n this.channelCount_ = channelCount;\n /** @private {string} */\n this.hdrLevel_ = hdrLevel;\n /** @private {boolean} */\n this.spatialAudio_ = spatialAudio;\n /** @private {string} */\n this.videoLayout_ = videoLayout;\n /** @private {string} */\n this.audioLabel_ = audioLabel;\n /** @private {string} */\n this.videoLabel_ = videoLabel;\n /** @private {shaka.config.CodecSwitchingStrategy} */\n this.codecSwitchingStrategy_ = codecSwitchingStrategy;\n /** @private {string} */\n this.audioCodec_ = audioCodec;\n }\n\n /** @override */\n create(variants) {\n const Class = shaka.media.PreferenceBasedCriteria;\n\n let current = [];\n\n const byLanguage = Class.filterByLanguage_(variants, this.language_);\n const byPrimary = variants.filter((variant) => variant.primary);\n\n if (byLanguage.length) {\n current = byLanguage;\n } else if (byPrimary.length) {\n current = byPrimary;\n } else {\n current = variants;\n }\n\n // Now refine the choice based on role preference. Even the empty string\n // works here, and will match variants without any roles.\n const byRole = Class.filterVariantsByRole_(current, this.role_);\n if (byRole.length) {\n current = byRole;\n } else {\n shaka.log.warning('No exact match for variant role could be found.');\n }\n\n if (this.videoLayout_) {\n const byVideoLayout = Class.filterVariantsByVideoLayout_(\n current, this.videoLayout_);\n if (byVideoLayout.length) {\n current = byVideoLayout;\n } else {\n shaka.log.warning(\n 'No exact match for the video layout could be found.');\n }\n }\n\n if (this.hdrLevel_) {\n const byHdrLevel = Class.filterVariantsByHDRLevel_(\n current, this.hdrLevel_);\n if (byHdrLevel.length) {\n current = byHdrLevel;\n } else {\n shaka.log.warning(\n 'No exact match for the hdr level could be found.');\n }\n }\n\n if (this.channelCount_) {\n const byChannel = Class.filterVariantsByAudioChannelCount_(\n current, this.channelCount_);\n if (byChannel.length) {\n current = byChannel;\n } else {\n shaka.log.warning(\n 'No exact match for the channel count could be found.');\n }\n }\n\n if (this.audioLabel_) {\n const byLabel = Class.filterVariantsByAudioLabel_(\n current, this.audioLabel_);\n if (byLabel.length) {\n current = byLabel;\n } else {\n shaka.log.warning('No exact match for audio label could be found.');\n }\n }\n\n if (this.videoLabel_) {\n const byLabel = Class.filterVariantsByVideoLabel_(\n current, this.videoLabel_);\n if (byLabel.length) {\n current = byLabel;\n } else {\n shaka.log.warning('No exact match for video label could be found.');\n }\n }\n\n const bySpatialAudio = Class.filterVariantsBySpatialAudio_(\n current, this.spatialAudio_);\n if (bySpatialAudio.length) {\n current = bySpatialAudio;\n } else {\n shaka.log.warning('No exact match for spatial audio could be found.');\n }\n\n if (this.audioCodec_) {\n const byAudioCodec = Class.filterVariantsByAudioCodec_(\n current, this.audioCodec_);\n if (byAudioCodec.length) {\n current = byAudioCodec;\n } else {\n shaka.log.warning('No exact match for audio codec could be found.');\n }\n }\n\n const supportsSmoothCodecTransitions = this.codecSwitchingStrategy_ ==\n shaka.config.CodecSwitchingStrategy.SMOOTH &&\n shaka.media.Capabilities.isChangeTypeSupported();\n\n return new shaka.media.AdaptationSet(current[0], current,\n !supportsSmoothCodecTransitions);\n }\n\n /**\n * @param {!Array.} variants\n * @param {string} preferredLanguage\n * @return {!Array.}\n * @private\n */\n static filterByLanguage_(variants, preferredLanguage) {\n const LanguageUtils = shaka.util.LanguageUtils;\n\n /** @type {string} */\n const preferredLocale = LanguageUtils.normalize(preferredLanguage);\n\n /** @type {?string} */\n const closestLocale = LanguageUtils.findClosestLocale(\n preferredLocale,\n variants.map((variant) => LanguageUtils.getLocaleForVariant(variant)));\n\n // There were no locales close to what we preferred.\n if (!closestLocale) {\n return [];\n }\n\n // Find the variants that use the closest variant.\n return variants.filter((variant) => {\n return closestLocale == LanguageUtils.getLocaleForVariant(variant);\n });\n }\n\n /**\n * Filter Variants by role.\n *\n * @param {!Array.} variants\n * @param {string} preferredRole\n * @return {!Array.}\n * @private\n */\n static filterVariantsByRole_(variants, preferredRole) {\n return variants.filter((variant) => {\n if (!variant.audio) {\n return false;\n }\n\n if (preferredRole) {\n return variant.audio.roles.includes(preferredRole);\n } else {\n return variant.audio.roles.length == 0;\n }\n });\n }\n\n /**\n * Filter Variants by audio label.\n *\n * @param {!Array.} variants\n * @param {string} preferredLabel\n * @return {!Array.}\n * @private\n */\n static filterVariantsByAudioLabel_(variants, preferredLabel) {\n return variants.filter((variant) => {\n if (!variant.audio || !variant.audio.label) {\n return false;\n }\n\n const label1 = variant.audio.label.toLowerCase();\n const label2 = preferredLabel.toLowerCase();\n return label1 == label2;\n });\n }\n\n /**\n * Filter Variants by video label.\n *\n * @param {!Array.} variants\n * @param {string} preferredLabel\n * @return {!Array.}\n * @private\n */\n static filterVariantsByVideoLabel_(variants, preferredLabel) {\n return variants.filter((variant) => {\n if (!variant.video || !variant.video.label) {\n return false;\n }\n\n const label1 = variant.video.label.toLowerCase();\n const label2 = preferredLabel.toLowerCase();\n return label1 == label2;\n });\n }\n\n /**\n * Filter Variants by channelCount.\n *\n * @param {!Array.} variants\n * @param {number} channelCount\n * @return {!Array.}\n * @private\n */\n static filterVariantsByAudioChannelCount_(variants, channelCount) {\n return variants.filter((variant) => {\n if (variant.audio && variant.audio.channelsCount &&\n variant.audio.channelsCount != channelCount) {\n return false;\n }\n return true;\n });\n }\n\n /**\n * Filters variants according to the given hdr level config.\n *\n * @param {!Array.} variants\n * @param {string} hdrLevel\n * @private\n */\n static filterVariantsByHDRLevel_(variants, hdrLevel) {\n if (hdrLevel == 'AUTO') {\n // Auto detect the ideal HDR level.\n if (window.matchMedia('(color-gamut: p3)').matches) {\n const someHLG = variants.some((variant) => {\n if (variant.video && variant.video.hdr &&\n variant.video.hdr == 'HLG') {\n return true;\n }\n return false;\n });\n hdrLevel = someHLG ? 'HLG' : 'PQ';\n } else {\n hdrLevel = 'SDR';\n }\n }\n return variants.filter((variant) => {\n if (variant.video && variant.video.hdr && variant.video.hdr != hdrLevel) {\n return false;\n }\n return true;\n });\n }\n\n\n /**\n * Filters variants according to the given video layout config.\n *\n * @param {!Array.} variants\n * @param {string} videoLayout\n * @private\n */\n static filterVariantsByVideoLayout_(variants, videoLayout) {\n return variants.filter((variant) => {\n if (variant.video && variant.video.videoLayout &&\n variant.video.videoLayout != videoLayout) {\n return false;\n }\n return true;\n });\n }\n\n\n /**\n * Filters variants according to the given spatial audio config.\n *\n * @param {!Array.} variants\n * @param {boolean} spatialAudio\n * @private\n */\n static filterVariantsBySpatialAudio_(variants, spatialAudio) {\n return variants.filter((variant) => {\n if (variant.audio && variant.audio.spatialAudio != spatialAudio) {\n return false;\n }\n return true;\n });\n }\n\n\n /**\n * Filters variants according to the given audio codec.\n *\n * @param {!Array} variants\n * @param {string} audioCodec\n * @private\n */\n static filterVariantsByAudioCodec_(variants, audioCodec) {\n return variants.filter((variant) => {\n if (variant.audio && variant.audio.codecs != audioCodec) {\n return false;\n }\n return true;\n });\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.BufferingObserver');\n\n\n/**\n * The buffering observer watches how much content has been buffered and raises\n * events when the state changes (enough => not enough or vice versa).\n *\n * @final\n */\nshaka.media.BufferingObserver = class {\n /**\n * @param {number} thresholdWhenStarving\n * @param {number} thresholdWhenSatisfied\n */\n constructor(thresholdWhenStarving, thresholdWhenSatisfied) {\n const State = shaka.media.BufferingObserver.State;\n\n /** @private {shaka.media.BufferingObserver.State} */\n this.previousState_ = State.SATISFIED;\n\n /** @private {!Map.} */\n this.thresholds_ = new Map()\n .set(State.SATISFIED, thresholdWhenSatisfied)\n .set(State.STARVING, thresholdWhenStarving);\n\n /** @private {number} */\n this.lastRebufferTime_ = 0;\n }\n\n /**\n * @param {number} thresholdWhenStarving\n * @param {number} thresholdWhenSatisfied\n */\n setThresholds(thresholdWhenStarving, thresholdWhenSatisfied) {\n const State = shaka.media.BufferingObserver.State;\n this.thresholds_\n .set(State.SATISFIED, thresholdWhenSatisfied)\n .set(State.STARVING, thresholdWhenStarving);\n }\n\n /**\n * Update the observer by telling it how much content has been buffered (in\n * seconds) and if we are buffered to the end of the presentation. If the\n * controller believes the state has changed, it will return |true|.\n *\n * @param {number} bufferLead\n * @param {boolean} bufferedToEnd\n * @return {boolean}\n */\n update(bufferLead, bufferedToEnd) {\n const State = shaka.media.BufferingObserver.State;\n\n /**\n * Our threshold for how much we need before we declare ourselves as\n * starving is based on whether or not we were just starving. If we\n * were just starving, we are more likely to starve again, so we require\n * more content to be buffered than if we were not just starving.\n *\n * @type {number}\n */\n const threshold = this.thresholds_.get(this.previousState_);\n\n const oldState = this.previousState_;\n const newState = (bufferedToEnd || bufferLead >= threshold) ?\n (State.SATISFIED) :\n (State.STARVING);\n\n // Save the new state now so that calls to |getState| from any callbacks\n // will be accurate.\n this.previousState_ = newState;\n\n // Return |true| only when the state has changed.\n const stateChanged = oldState != newState;\n\n if (stateChanged && newState === State.SATISFIED) {\n this.lastRebufferTime_ = Date.now();\n }\n\n return stateChanged;\n }\n\n /**\n * Set which state that the observer should think playback was in.\n *\n * @param {shaka.media.BufferingObserver.State} state\n */\n setState(state) {\n this.previousState_ = state;\n }\n\n /**\n * Get the state that the observer last thought playback was in.\n *\n * @return {shaka.media.BufferingObserver.State}\n */\n getState() {\n return this.previousState_;\n }\n\n /**\n * Return the last time that the state went from |STARVING| to |SATISFIED|.\n * @return {number}\n */\n getLastRebufferTime() {\n return this.lastRebufferTime_;\n }\n\n /**\n * Reset the last rebuffer time to zero.\n */\n resetLastRebufferTime() {\n this.lastRebufferTime_ = 0;\n }\n};\n\n/**\n * Rather than using booleans to communicate what state we are in, we have this\n * enum.\n *\n * @enum {number}\n */\nshaka.media.BufferingObserver.State = {\n STARVING: 0,\n SATISFIED: 1,\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.Player');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.config.AutoShowText');\ngoog.require('shaka.Deprecate');\ngoog.require('shaka.log');\ngoog.require('shaka.media.AdaptationSetCriteria');\ngoog.require('shaka.media.BufferingObserver');\ngoog.require('shaka.media.DrmEngine');\ngoog.require('shaka.media.ExampleBasedCriteria');\ngoog.require('shaka.media.ManifestFilterer');\ngoog.require('shaka.media.ManifestParser');\ngoog.require('shaka.media.MediaSourceEngine');\ngoog.require('shaka.media.MediaSourcePlayhead');\ngoog.require('shaka.media.MetaSegmentIndex');\ngoog.require('shaka.media.PlayRateController');\ngoog.require('shaka.media.Playhead');\ngoog.require('shaka.media.PlayheadObserverManager');\ngoog.require('shaka.media.PreferenceBasedCriteria');\ngoog.require('shaka.media.PreloadManager');\ngoog.require('shaka.media.QualityObserver');\ngoog.require('shaka.media.RegionObserver');\ngoog.require('shaka.media.RegionTimeline');\ngoog.require('shaka.media.SegmentIndex');\ngoog.require('shaka.media.SegmentPrefetch');\ngoog.require('shaka.media.SegmentReference');\ngoog.require('shaka.media.SrcEqualsPlayhead');\ngoog.require('shaka.media.StreamingEngine');\ngoog.require('shaka.media.TimeRangesUtils');\ngoog.require('shaka.net.NetworkingEngine');\ngoog.require('shaka.net.NetworkingUtils');\ngoog.require('shaka.text.SimpleTextDisplayer');\ngoog.require('shaka.text.StubTextDisplayer');\ngoog.require('shaka.text.TextEngine');\ngoog.require('shaka.text.Utils');\ngoog.require('shaka.text.UITextDisplayer');\ngoog.require('shaka.text.WebVttGenerator');\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.CmcdManager');\ngoog.require('shaka.util.CmsdManager');\ngoog.require('shaka.util.ConfigUtils');\ngoog.require('shaka.util.Dom');\ngoog.require('shaka.util.DrmUtils');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.FakeEventTarget');\ngoog.require('shaka.util.Functional');\ngoog.require('shaka.util.IDestroyable');\ngoog.require('shaka.util.LanguageUtils');\ngoog.require('shaka.util.ManifestParserUtils');\ngoog.require('shaka.util.MediaReadyState');\ngoog.require('shaka.util.MimeUtils');\ngoog.require('shaka.util.Mutex');\ngoog.require('shaka.util.NumberUtils');\ngoog.require('shaka.util.ObjectUtils');\ngoog.require('shaka.util.Platform');\ngoog.require('shaka.util.PlayerConfiguration');\ngoog.require('shaka.util.PublicPromise');\ngoog.require('shaka.util.Stats');\ngoog.require('shaka.util.StreamUtils');\ngoog.require('shaka.util.Timer');\ngoog.require('shaka.lcevc.Dec');\ngoog.requireType('shaka.media.PresentationTimeline');\n\n\n/**\n * @event shaka.Player.ErrorEvent\n * @description Fired when a playback error occurs.\n * @property {string} type\n * 'error'\n * @property {!shaka.util.Error} detail\n * An object which contains details on the error. The error's\n * category and code properties will identify the\n * specific error that occurred. In an uncompiled build, you can also use the\n * message and stack properties to debug.\n * @exportDoc\n */\n\n/**\n * @event shaka.Player.StateChangeEvent\n * @description Fired when the player changes load states.\n * @property {string} type\n * 'onstatechange'\n * @property {string} state\n * The name of the state that the player just entered.\n * @exportDoc\n */\n\n/**\n * @event shaka.Player.EmsgEvent\n * @description Fired when an emsg box is found in a segment.\n * If the application calls preventDefault() on this event, further parsing\n * will not happen, and no 'metadata' event will be raised for ID3 payloads.\n * @property {string} type\n * 'emsg'\n * @property {shaka.extern.EmsgInfo} detail\n * An object which contains the content of the emsg box.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.DownloadFailed\n * @description Fired when a download has failed, for any reason.\n * 'downloadfailed'\n * @property {!shaka.extern.Request} request\n * @property {?shaka.util.Error} error\n * @property {number} httpResponseCode\n * @property {boolean} aborted\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.DownloadHeadersReceived\n * @description Fired when the networking engine has received the headers for\n * a download, but before the body has been downloaded.\n * If the HTTP plugin being used does not track this information, this event\n * will default to being fired when the body is received, instead.\n * @property {!Object.} headers\n * @property {!shaka.extern.Request} request\n * @property {!shaka.net.NetworkingEngine.RequestType} type\n * 'downloadheadersreceived'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.DrmSessionUpdateEvent\n * @description Fired when the CDM has accepted the license response.\n * @property {string} type\n * 'drmsessionupdate'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.TimelineRegionAddedEvent\n * @description Fired when a media timeline region is added.\n * @property {string} type\n * 'timelineregionadded'\n * @property {shaka.extern.TimelineRegionInfo} detail\n * An object which contains a description of the region.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.TimelineRegionEnterEvent\n * @description Fired when the playhead enters a timeline region.\n * @property {string} type\n * 'timelineregionenter'\n * @property {shaka.extern.TimelineRegionInfo} detail\n * An object which contains a description of the region.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.TimelineRegionExitEvent\n * @description Fired when the playhead exits a timeline region.\n * @property {string} type\n * 'timelineregionexit'\n * @property {shaka.extern.TimelineRegionInfo} detail\n * An object which contains a description of the region.\n * @exportDoc\n */\n\n/**\n * @event shaka.Player.MediaQualityChangedEvent\n * @description Fired when the media quality changes at the playhead.\n * That may be caused by an adaptation change or a DASH period transition.\n * Separate events are emitted for audio and video contentTypes.\n * @property {string} type\n * 'mediaqualitychanged'\n * @property {shaka.extern.MediaQualityInfo} mediaQuality\n * Information about media quality at the playhead position.\n * @property {number} position\n * The playhead position.\n * @exportDoc\n */\n\n/**\n * @event shaka.Player.MediaSourceRecoveredEvent\n * @description Fired when MediaSource has been successfully recovered\n * after occurrence of video error.\n * @property {string} type\n * 'mediasourcerecovered'\n * @exportDoc\n */\n\n/**\n * @event shaka.Player.AudioTrackChangedEvent\n * @description Fired when the audio track changes at the playhead.\n * That may be caused by a user requesting to chang audio tracks.\n * @property {string} type\n * 'audiotrackchanged'\n * @property {shaka.extern.MediaQualityInfo} mediaQuality\n * Information about media quality at the playhead position.\n * @property {number} position\n * The playhead position.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.BufferingEvent\n * @description Fired when the player's buffering state changes.\n * @property {string} type\n * 'buffering'\n * @property {boolean} buffering\n * True when the Player enters the buffering state.\n * False when the Player leaves the buffering state.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.LoadingEvent\n * @description Fired when the player begins loading. The start of loading is\n * defined as when the user has communicated intent to load content (i.e.\n * Player.load has been called).\n * @property {string} type\n * 'loading'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.LoadedEvent\n * @description Fired when the player ends the load.\n * @property {string} type\n * 'loaded'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.UnloadingEvent\n * @description Fired when the player unloads or fails to load.\n * Used by the Cast receiver to determine idle state.\n * @property {string} type\n * 'unloading'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.TextTrackVisibilityEvent\n * @description Fired when text track visibility changes.\n * An app may want to look at getStats() or\n * getVariantTracks() to see what happened.\n * @property {string} type\n * 'texttrackvisibility'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.TracksChangedEvent\n * @description Fired when the list of tracks changes. For example, this will\n * happen when new tracks are added/removed or when track restrictions change.\n * An app may want to look at getVariantTracks() to see what\n * happened.\n * @property {string} type\n * 'trackschanged'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.AdaptationEvent\n * @description Fired when an automatic adaptation causes the active tracks\n * to change. Does not fire when the application calls\n * selectVariantTrack(), selectTextTrack(),\n * selectAudioLanguage(), or selectTextLanguage().\n * @property {string} type\n * 'adaptation'\n * @property {shaka.extern.Track} oldTrack\n * @property {shaka.extern.Track} newTrack\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.VariantChangedEvent\n * @description Fired when a call from the application caused a variant change.\n * Can be triggered by calls to selectVariantTrack() or\n * selectAudioLanguage(). Does not fire when an automatic\n * adaptation causes a variant change.\n * An app may want to look at getStats() or\n * getVariantTracks() to see what happened.\n * @property {string} type\n * 'variantchanged'\n * @property {shaka.extern.Track} oldTrack\n * @property {shaka.extern.Track} newTrack\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.TextChangedEvent\n * @description Fired when a call from the application caused a text stream\n * change. Can be triggered by calls to selectTextTrack() or\n * selectTextLanguage().\n * An app may want to look at getStats() or\n * getTextTracks() to see what happened.\n * @property {string} type\n * 'textchanged'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.ExpirationUpdatedEvent\n * @description Fired when there is a change in the expiration times of an\n * EME session.\n * @property {string} type\n * 'expirationupdated'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.ManifestParsedEvent\n * @description Fired after the manifest has been parsed, but before anything\n * else happens. The manifest may contain streams that will be filtered out,\n * at this stage of the loading process.\n * @property {string} type\n * 'manifestparsed'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.ManifestUpdatedEvent\n * @description Fired after the manifest has been updated (live streams).\n * @property {string} type\n * 'manifestupdated'\n * @property {boolean} isLive\n * True when the playlist is live. Useful to detect transition from live\n * to static playlist..\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.MetadataEvent\n * @description Triggers after metadata associated with the stream is found.\n * Usually they are metadata of type ID3.\n * @property {string} type\n * 'metadata'\n * @property {number} startTime\n * The time that describes the beginning of the range of the metadata to\n * which the cue applies.\n * @property {?number} endTime\n * The time that describes the end of the range of the metadata to which\n * the cue applies.\n * @property {string} metadataType\n * Type of metadata. Eg: 'org.id3' or 'com.apple.quicktime.HLS'\n * @property {shaka.extern.MetadataFrame} payload\n * The metadata itself\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.StreamingEvent\n * @description Fired after the manifest has been parsed and track information\n * is available, but before streams have been chosen and before any segments\n * have been fetched. You may use this event to configure the player based on\n * information found in the manifest.\n * @property {string} type\n * 'streaming'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.AbrStatusChangedEvent\n * @description Fired when the state of abr has been changed.\n * (Enabled or disabled).\n * @property {string} type\n * 'abrstatuschanged'\n * @property {boolean} newStatus\n * The new status of the application. True for 'is enabled' and\n * false otherwise.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.RateChangeEvent\n * @description Fired when the video's playback rate changes.\n * This allows the PlayRateController to update it's internal rate field,\n * before the UI updates playback button with the newest playback rate.\n * @property {string} type\n * 'ratechange'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.SegmentAppended\n * @description Fired when a segment is appended to the media element.\n * @property {string} type\n * 'segmentappended'\n * @property {number} start\n * The start time of the segment.\n * @property {number} end\n * The end time of the segment.\n * @property {string} contentType\n * The content type of the segment. E.g. 'video', 'audio', or 'text'.\n * @property {boolean} isMuxed\n * Indicates if the segment is muxed (audio + video).\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.SessionDataEvent\n * @description Fired when the manifest parser find info about session data.\n * Specification: https://tools.ietf.org/html/rfc8216#section-4.3.4.4\n * @property {string} type\n * 'sessiondata'\n * @property {string} id\n * The id of the session data.\n * @property {string} uri\n * The uri with the session data info.\n * @property {string} language\n * The language of the session data.\n * @property {string} value\n * The value of the session data.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.StallDetectedEvent\n * @description Fired when a stall in playback is detected by the StallDetector.\n * Not all stalls are caused by gaps in the buffered ranges.\n * An app may want to look at getStats() to see what happened.\n * @property {string} type\n * 'stalldetected'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.GapJumpedEvent\n * @description Fired when the GapJumpingController jumps over a gap in the\n * buffered ranges.\n * An app may want to look at getStats() to see what happened.\n * @property {string} type\n * 'gapjumped'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.KeyStatusChanged\n * @description Fired when the key status changed.\n * @property {string} type\n * 'keystatuschanged'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.StateChanged\n * @description Fired when player state is changed.\n * @property {string} type\n * 'statechanged'\n * @property {string} newstate\n * The new state.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.Started\n * @description Fires when the content starts playing.\n * Only for VoD.\n * @property {string} type\n * 'started'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.FirstQuartile\n * @description Fires when the content playhead crosses first quartile.\n * Only for VoD.\n * @property {string} type\n * 'firstquartile'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.Midpoint\n * @description Fires when the content playhead crosses midpoint.\n * Only for VoD.\n * @property {string} type\n * 'midpoint'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.ThirdQuartile\n * @description Fires when the content playhead crosses third quartile.\n * Only for VoD.\n * @property {string} type\n * 'thirdquartile'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.Complete\n * @description Fires when the content completes playing.\n * Only for VoD.\n * @property {string} type\n * 'complete'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.SpatialVideoInfoEvent\n * @description Fired when the video has spatial video info. If a previous\n * event was fired, this include the new info.\n * @property {string} type\n * 'spatialvideoinfo'\n * @property {shaka.extern.SpatialVideoInfo} detail\n * An object which contains the content of the emsg box.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.NoSpatialVideoInfoEvent\n * @description Fired when the video no longer has spatial video information.\n * For it to be fired, the shaka.Player.SpatialVideoInfoEvent event must\n * have been previously fired.\n * @property {string} type\n * 'nospatialvideoinfo'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.Player.ProducerReferenceTimeEvent\n * @description Fired when the content includes ProducerReferenceTime (PRFT)\n * info.\n * @property {string} type\n * 'prft'\n * @property {shaka.extern.ProducerReferenceTime} detail\n * An object which contains the content of the PRFT box.\n * @exportDoc\n */\n\n\n/**\n * @summary The main player object for Shaka Player.\n *\n * @implements {shaka.util.IDestroyable}\n * @export\n */\nshaka.Player = class extends shaka.util.FakeEventTarget {\n /**\n * @param {HTMLMediaElement=} mediaElement\n * When provided, the player will attach to mediaElement,\n * similar to calling attach. When not provided, the player\n * will remain detached.\n * @param {HTMLElement=} videoContainer\n * The videoContainer to construct UITextDisplayer\n * @param {function(shaka.Player)=} dependencyInjector Optional callback\n * which is called to inject mocks into the Player. Used for testing.\n */\n constructor(mediaElement, videoContainer = null, dependencyInjector) {\n super();\n\n /** @private {shaka.Player.LoadMode} */\n this.loadMode_ = shaka.Player.LoadMode.NOT_LOADED;\n\n /** @private {HTMLMediaElement} */\n this.video_ = null;\n\n /** @private {HTMLElement} */\n this.videoContainer_ = videoContainer;\n\n /**\n * Since we may not always have a text displayer created (e.g. before |load|\n * is called), we need to track what text visibility SHOULD be so that we\n * can ensure that when we create the text displayer. When we create our\n * text displayer, we will use this to show (or not show) text as per the\n * user's requests.\n *\n * @private {boolean}\n */\n this.isTextVisible_ = false;\n\n /**\n * For listeners scoped to the lifetime of the Player instance.\n * @private {shaka.util.EventManager}\n */\n this.globalEventManager_ = new shaka.util.EventManager();\n\n /**\n * For listeners scoped to the lifetime of the media element attachment.\n * @private {shaka.util.EventManager}\n */\n this.attachEventManager_ = new shaka.util.EventManager();\n\n /**\n * For listeners scoped to the lifetime of the loaded content.\n * @private {shaka.util.EventManager}\n */\n this.loadEventManager_ = new shaka.util.EventManager();\n\n /**\n * For listeners scoped to the lifetime of the loaded content.\n * @private {shaka.util.EventManager}\n */\n this.trickPlayEventManager_ = new shaka.util.EventManager();\n\n /**\n * For listeners scoped to the lifetime of the ad manager.\n * @private {shaka.util.EventManager}\n */\n this.adManagerEventManager_ = new shaka.util.EventManager();\n\n /** @private {shaka.net.NetworkingEngine} */\n this.networkingEngine_ = null;\n\n /** @private {shaka.media.DrmEngine} */\n this.drmEngine_ = null;\n\n /** @private {shaka.media.MediaSourceEngine} */\n this.mediaSourceEngine_ = null;\n\n /** @private {shaka.media.Playhead} */\n this.playhead_ = null;\n\n /**\n * Incremented whenever a top-level operation (load, attach, etc) is\n * performed.\n * Used to determine if a load operation has been interrupted.\n * @private {number}\n */\n this.operationId_ = 0;\n\n /** @private {!shaka.util.Mutex} */\n this.mutex_ = new shaka.util.Mutex();\n\n /**\n * The playhead observers are used to monitor the position of the playhead\n * and some other source of data (e.g. buffered content), and raise events.\n *\n * @private {shaka.media.PlayheadObserverManager}\n */\n this.playheadObservers_ = null;\n\n /**\n * This is our control over the playback rate of the media element. This\n * provides the missing functionality that we need to provide trick play,\n * for example a negative playback rate.\n *\n * @private {shaka.media.PlayRateController}\n */\n this.playRateController_ = null;\n\n // We use the buffering observer and timer to track when we move from having\n // enough buffered content to not enough. They only exist when content has\n // been loaded and are not re-used between loads.\n /** @private {shaka.util.Timer} */\n this.bufferPoller_ = null;\n\n /** @private {shaka.media.BufferingObserver} */\n this.bufferObserver_ = null;\n\n /** @private {shaka.media.RegionTimeline} */\n this.regionTimeline_ = null;\n\n /** @private {shaka.util.CmcdManager} */\n this.cmcdManager_ = null;\n\n /** @private {shaka.util.CmsdManager} */\n this.cmsdManager_ = null;\n\n // This is the canvas element that will be used for rendering LCEVC\n // enhanced frames.\n /** @private {?HTMLCanvasElement} */\n this.lcevcCanvas_ = null;\n\n // This is the LCEVC Decoder object to decode LCEVC.\n /** @private {?shaka.lcevc.Dec} */\n this.lcevcDec_ = null;\n\n /** @private {shaka.media.QualityObserver} */\n this.qualityObserver_ = null;\n\n /** @private {shaka.media.StreamingEngine} */\n this.streamingEngine_ = null;\n\n /** @private {shaka.extern.ManifestParser} */\n this.parser_ = null;\n\n /** @private {?shaka.extern.ManifestParser.Factory} */\n this.parserFactory_ = null;\n\n /** @private {?shaka.extern.Manifest} */\n this.manifest_ = null;\n\n /** @private {?string} */\n this.assetUri_ = null;\n\n /** @private {?string} */\n this.mimeType_ = null;\n\n /** @private {?number} */\n this.startTime_ = null;\n\n /** @private {boolean} */\n this.fullyLoaded_ = false;\n\n /** @private {shaka.extern.AbrManager} */\n this.abrManager_ = null;\n\n /**\n * The factory that was used to create the abrManager_ instance.\n * @private {?shaka.extern.AbrManager.Factory}\n */\n this.abrManagerFactory_ = null;\n\n /**\n * Contains an ID for use with creating streams. The manifest parser should\n * start with small IDs, so this starts with a large one.\n * @private {number}\n */\n this.nextExternalStreamId_ = 1e9;\n\n /** @private {!Array.} */\n this.externalSrcEqualsThumbnailsStreams_ = [];\n\n /** @private {number} */\n this.completionPercent_ = -1;\n\n /** @private {?shaka.extern.PlayerConfiguration} */\n this.config_ = this.defaultConfig_();\n\n /** @private {?number} */\n this.currentTargetLatency_ = null;\n\n /** @private {number} */\n this.rebufferingCount_ = -1;\n\n /** @private {?number} */\n this.targetLatencyReached_ = null;\n\n /**\n * The TextDisplayerFactory that was last used to make a text displayer.\n * Stored so that we can tell if a new type of text displayer is desired.\n * @private {?shaka.extern.TextDisplayer.Factory}\n */\n this.lastTextFactory_;\n\n /** @private {shaka.extern.Resolution} */\n this.maxHwRes_ = {width: Infinity, height: Infinity};\n\n /** @private {!shaka.media.ManifestFilterer} */\n this.manifestFilterer_ = new shaka.media.ManifestFilterer(\n this.config_, this.maxHwRes_, null);\n\n /** @private {!Array.} */\n this.createdPreloadManagers_ = [];\n\n /** @private {shaka.util.Stats} */\n this.stats_ = null;\n\n /** @private {!shaka.media.AdaptationSetCriteria} */\n this.currentAdaptationSetCriteria_ =\n new shaka.media.PreferenceBasedCriteria(\n this.config_.preferredAudioLanguage,\n this.config_.preferredVariantRole,\n this.config_.preferredAudioChannelCount,\n this.config_.preferredVideoHdrLevel,\n this.config_.preferSpatialAudio,\n this.config_.preferredVideoLayout,\n this.config_.preferredAudioLabel,\n this.config_.preferredVideoLabel,\n this.config_.mediaSource.codecSwitchingStrategy,\n /* audioCodec= */ '');\n\n /** @private {string} */\n this.currentTextLanguage_ = this.config_.preferredTextLanguage;\n\n /** @private {string} */\n this.currentTextRole_ = this.config_.preferredTextRole;\n\n /** @private {boolean} */\n this.currentTextForced_ = this.config_.preferForcedSubs;\n\n /** @private {!Array.} */\n this.cleanupOnUnload_ = [];\n\n if (dependencyInjector) {\n dependencyInjector(this);\n }\n\n\n // Create the CMCD manager so client data can be attached to all requests\n this.cmcdManager_ = this.createCmcd_();\n\n this.cmsdManager_ = this.createCmsd_();\n\n this.networkingEngine_ = this.createNetworkingEngine();\n this.networkingEngine_.setForceHTTP(this.config_.streaming.forceHTTP);\n this.networkingEngine_.setForceHTTPS(this.config_.streaming.forceHTTPS);\n this.networkingEngine_.setMinBytesForProgressEvents(\n this.config_.streaming.minBytesForProgressEvents);\n\n /** @private {shaka.extern.IAdManager} */\n this.adManager_ = null;\n\n /** @private {?shaka.media.PreloadManager} */\n this.preloadDueAdManager_ = null;\n\n /** @private {HTMLMediaElement} */\n this.preloadDueAdManagerVideo_ = null;\n\n /** @private {boolean} */\n this.preloadDueAdManagerVideoEnded_ = false;\n\n /** @private {shaka.util.Timer} */\n this.preloadDueAdManagerTimer_ = new shaka.util.Timer(async () => {\n if (this.preloadDueAdManager_) {\n goog.asserts.assert(this.preloadDueAdManagerVideo_, 'Must have video');\n await this.attach(\n this.preloadDueAdManagerVideo_, /* initializeMediaSource= */ true);\n await this.load(this.preloadDueAdManager_);\n if (!this.preloadDueAdManagerVideoEnded_) {\n this.preloadDueAdManagerVideo_.play();\n } else {\n this.preloadDueAdManagerVideo_.pause();\n }\n this.preloadDueAdManager_ = null;\n this.preloadDueAdManagerVideoEnded_ = false;\n }\n });\n\n if (shaka.Player.adManagerFactory_) {\n this.adManager_ = shaka.Player.adManagerFactory_();\n this.adManager_.configure(this.config_.ads);\n\n // Note: we don't use shaka.ads.Utils.AD_CONTENT_PAUSE_REQUESTED to\n // avoid add a optional module in the player.\n this.adManagerEventManager_.listen(\n this.adManager_, 'ad-content-pause-requested', async (e) => {\n this.preloadDueAdManagerTimer_.stop();\n if (!this.preloadDueAdManager_) {\n this.preloadDueAdManagerVideo_ = this.video_;\n this.preloadDueAdManagerVideoEnded_ = this.isEnded();\n const saveLivePosition = /** @type {boolean} */(\n e['saveLivePosition']) || false;\n this.preloadDueAdManager_ = await this.detachAndSavePreload(\n /* keepAdManager= */ true, saveLivePosition);\n }\n });\n\n // Note: we don't use shaka.ads.Utils.AD_CONTENT_RESUME_REQUESTED to\n // avoid add a optional module in the player.\n this.adManagerEventManager_.listen(\n this.adManager_, 'ad-content-resume-requested', (e) => {\n const offset = /** @type {number} */(e['offset']) || 0;\n if (this.preloadDueAdManager_) {\n this.preloadDueAdManager_.setOffsetToStartTime(offset);\n }\n this.preloadDueAdManagerTimer_.tickAfter(0.1);\n });\n\n // Note: we don't use shaka.ads.Utils.AD_CONTENT_ATTACH_REQUESTED to\n // avoid add a optional module in the player.\n this.adManagerEventManager_.listen(\n this.adManager_, 'ad-content-attach-requested', async (e) => {\n if (!this.video_ && this.preloadDueAdManagerVideo_) {\n goog.asserts.assert(this.preloadDueAdManagerVideo_,\n 'Must have video');\n await this.attach(this.preloadDueAdManagerVideo_,\n /* initializeMediaSource= */ true);\n }\n });\n }\n\n // If the browser comes back online after being offline, then try to play\n // again.\n this.globalEventManager_.listen(window, 'online', () => {\n this.restoreDisabledVariants_();\n this.retryStreaming();\n });\n\n /** @private {shaka.util.Timer} */\n this.checkVariantsTimer_ =\n new shaka.util.Timer(() => this.checkVariants_());\n\n /** @private {?shaka.media.PreloadManager} */\n this.preloadNextUrl_ = null;\n\n // Even though |attach| will start in later interpreter cycles, it should be\n // the LAST thing we do in the constructor because conceptually it relies on\n // player having been initialized.\n if (mediaElement) {\n shaka.Deprecate.deprecateFeature(5,\n 'Player w/ mediaElement',\n 'Please migrate from initializing Player with a mediaElement; ' +\n 'use the attach method instead.');\n this.attach(mediaElement, /* initializeMediaSource= */ true);\n }\n\n /** @private {?shaka.extern.TextDisplayer} */\n this.textDisplayer_ = null;\n }\n\n /**\n * Create a shaka.lcevc.Dec object\n * @param {shaka.extern.LcevcConfiguration} config\n * @private\n */\n createLcevcDec_(config) {\n if (this.lcevcDec_ == null) {\n this.lcevcDec_ = new shaka.lcevc.Dec(\n /** @type {HTMLVideoElement} */ (this.video_),\n this.lcevcCanvas_,\n config,\n );\n if (this.mediaSourceEngine_) {\n this.mediaSourceEngine_.updateLcevcDec(this.lcevcDec_);\n }\n }\n }\n\n /**\n * Close a shaka.lcevc.Dec object if present and hide the canvas.\n * @private\n */\n closeLcevcDec_() {\n if (this.lcevcDec_ != null) {\n this.lcevcDec_.hideCanvas();\n this.lcevcDec_.release();\n this.lcevcDec_ = null;\n }\n }\n\n /**\n * Setup shaka.lcevc.Dec object\n * @param {?shaka.extern.PlayerConfiguration} config\n * @private\n */\n setupLcevc_(config) {\n if (config.lcevc.enabled) {\n this.closeLcevcDec_();\n this.createLcevcDec_(config.lcevc);\n } else {\n this.closeLcevcDec_();\n }\n }\n\n /**\n * @param {!shaka.util.FakeEvent.EventName} name\n * @param {Map.=} data\n * @return {!shaka.util.FakeEvent}\n * @private\n */\n static makeEvent_(name, data) {\n return new shaka.util.FakeEvent(name, data);\n }\n\n /**\n * After destruction, a Player object cannot be used again.\n *\n * @override\n * @export\n */\n async destroy() {\n // Make sure we only execute the destroy logic once.\n if (this.loadMode_ == shaka.Player.LoadMode.DESTROYED) {\n return;\n }\n\n // If LCEVC Decoder exists close it.\n this.closeLcevcDec_();\n\n const detachPromise = this.detach();\n\n // Mark as \"dead\". This should stop external-facing calls from changing our\n // internal state any more. This will stop calls to |attach|, |detach|, etc.\n // from interrupting our final move to the detached state.\n this.loadMode_ = shaka.Player.LoadMode.DESTROYED;\n\n await detachPromise;\n\n // A PreloadManager can only be used with the Player instance that created\n // it, so all PreloadManagers this Player has created are now useless.\n // Destroy any remaining managers now, to help prevent memory leaks.\n await this.destroyAllPreloads();\n\n // Tear-down the event managers to ensure handlers stop firing.\n if (this.globalEventManager_) {\n this.globalEventManager_.release();\n this.globalEventManager_ = null;\n }\n if (this.attachEventManager_) {\n this.attachEventManager_.release();\n this.attachEventManager_ = null;\n }\n if (this.loadEventManager_) {\n this.loadEventManager_.release();\n this.loadEventManager_ = null;\n }\n if (this.trickPlayEventManager_) {\n this.trickPlayEventManager_.release();\n this.trickPlayEventManager_ = null;\n }\n if (this.adManagerEventManager_) {\n this.adManagerEventManager_.release();\n this.adManagerEventManager_ = null;\n }\n\n this.abrManagerFactory_ = null;\n this.config_ = null;\n this.stats_ = null;\n this.videoContainer_ = null;\n this.cmcdManager_ = null;\n this.cmsdManager_ = null;\n\n if (this.networkingEngine_) {\n await this.networkingEngine_.destroy();\n this.networkingEngine_ = null;\n }\n\n if (this.abrManager_) {\n this.abrManager_.release();\n this.abrManager_ = null;\n }\n\n // FakeEventTarget implements IReleasable\n super.release();\n }\n\n /**\n * Registers a plugin callback that will be called with\n * support(). The callback will return the value that will be\n * stored in the return value from support().\n *\n * @param {string} name\n * @param {function():*} callback\n * @export\n */\n static registerSupportPlugin(name, callback) {\n shaka.Player.supportPlugins_[name] = callback;\n }\n\n /**\n * Set a factory to create an ad manager during player construction time.\n * This method needs to be called bafore instantiating the Player class.\n *\n * @param {!shaka.extern.IAdManager.Factory} factory\n * @export\n */\n static setAdManagerFactory(factory) {\n shaka.Player.adManagerFactory_ = factory;\n }\n\n /**\n * Return whether the browser provides basic support. If this returns false,\n * Shaka Player cannot be used at all. In this case, do not construct a\n * Player instance and do not use the library.\n *\n * @return {boolean}\n * @export\n */\n static isBrowserSupported() {\n if (!window.Promise) {\n shaka.log.alwaysWarn('A Promise implementation or polyfill is required');\n }\n\n // Basic features needed for the library to be usable.\n const basicSupport = !!window.Promise && !!window.Uint8Array &&\n // eslint-disable-next-line no-restricted-syntax\n !!Array.prototype.forEach;\n if (!basicSupport) {\n return false;\n }\n\n // We do not support IE\n if (shaka.util.Platform.isIE()) {\n return false;\n }\n\n const safariVersion = shaka.util.Platform.safariVersion();\n if (safariVersion && safariVersion < 9) {\n return false;\n }\n\n // DRM support is not strictly necessary, but the APIs at least need to be\n // there. Our no-op DRM polyfill should handle that.\n // TODO(#1017): Consider making even DrmEngine optional.\n const drmSupport = shaka.util.DrmUtils.isBrowserSupported();\n if (!drmSupport) {\n return false;\n }\n\n // If we have MediaSource (MSE) support, we should be able to use Shaka.\n if (shaka.util.Platform.supportsMediaSource()) {\n return true;\n }\n\n // If we don't have MSE, we _may_ be able to use Shaka. Look for native HLS\n // support, and call this platform usable if we have it.\n return shaka.util.Platform.supportsMediaType('application/x-mpegurl');\n }\n\n /**\n * Probes the browser to determine what features are supported. This makes a\n * number of requests to EME/MSE/etc which may result in user prompts. This\n * should only be used for diagnostics.\n *\n *

\n * NOTE: This may show a request to the user for permission.\n *\n * @see https://bit.ly/2ywccmH\n * @param {boolean=} promptsOkay\n * @return {!Promise.}\n * @export\n */\n static async probeSupport(promptsOkay=true) {\n goog.asserts.assert(shaka.Player.isBrowserSupported(),\n 'Must have basic support');\n let drm = {};\n if (promptsOkay) {\n drm = await shaka.media.DrmEngine.probeSupport();\n }\n const manifest = shaka.media.ManifestParser.probeSupport();\n const media = shaka.media.MediaSourceEngine.probeSupport();\n const hardwareResolution =\n await shaka.util.Platform.detectMaxHardwareResolution();\n\n /** @type {shaka.extern.SupportType} */\n const ret = {\n manifest,\n media,\n drm,\n hardwareResolution,\n };\n\n const plugins = shaka.Player.supportPlugins_;\n for (const name in plugins) {\n ret[name] = plugins[name]();\n }\n\n return ret;\n }\n\n /**\n * Makes a fires an event corresponding to entering a state of the loading\n * process.\n * @param {string} nodeName\n * @private\n */\n makeStateChangeEvent_(nodeName) {\n this.dispatchEvent(shaka.Player.makeEvent_(\n /* name= */ shaka.util.FakeEvent.EventName.OnStateChange,\n /* data= */ (new Map()).set('state', nodeName)));\n }\n\n /**\n * Attaches the player to a media element.\n * If the player was already attached to a media element, first detaches from\n * that media element.\n *\n * @param {!HTMLMediaElement} mediaElement\n * @param {boolean=} initializeMediaSource\n * @return {!Promise}\n * @export\n */\n async attach(mediaElement, initializeMediaSource = true) {\n // Do not allow the player to be used after |destroy| is called.\n if (this.loadMode_ == shaka.Player.LoadMode.DESTROYED) {\n throw this.createAbortLoadError_();\n }\n\n const noop = this.video_ && this.video_ == mediaElement;\n\n if (this.video_ && this.video_ != mediaElement) {\n await this.detach();\n }\n\n if (await this.atomicOperationAcquireMutex_('attach')) {\n return;\n }\n\n try {\n if (!noop) {\n this.makeStateChangeEvent_('attach');\n\n const onError = (error) => this.onVideoError_(error);\n this.attachEventManager_.listen(mediaElement, 'error', onError);\n this.video_ = mediaElement;\n }\n\n // Only initialize media source if the platform supports it.\n if (initializeMediaSource &&\n shaka.util.Platform.supportsMediaSource() &&\n !this.mediaSourceEngine_) {\n await this.initializeMediaSourceEngineInner_();\n }\n } catch (error) {\n await this.detach();\n throw error;\n } finally {\n this.mutex_.release();\n }\n }\n\n\n /**\n * Calling attachCanvas will tell the player to set canvas\n * element for LCEVC decoding.\n *\n * @param {HTMLCanvasElement} canvas\n * @export\n */\n attachCanvas(canvas) {\n this.lcevcCanvas_ = canvas;\n }\n\n /**\n * Detach the player from the current media element. Leaves the player in a\n * state where it cannot play media, until it has been attached to something\n * else.\n *\n * @param {boolean=} keepAdManager\n *\n * @return {!Promise}\n * @export\n */\n async detach(keepAdManager = false) {\n // Do not allow the player to be used after |destroy| is called.\n if (this.loadMode_ == shaka.Player.LoadMode.DESTROYED) {\n throw this.createAbortLoadError_();\n }\n\n await this.unload(/* initializeMediaSource= */ false, keepAdManager);\n\n if (await this.atomicOperationAcquireMutex_('detach')) {\n return;\n }\n\n try {\n // If we were going from \"detached\" to \"detached\" we wouldn't have\n // a media element to detach from.\n if (this.video_) {\n this.attachEventManager_.removeAll();\n this.video_ = null;\n }\n\n this.makeStateChangeEvent_('detach');\n\n if (this.adManager_ && !keepAdManager) {\n // The ad manager is specific to the video, so detach it too.\n this.adManager_.release();\n }\n } finally {\n this.mutex_.release();\n }\n }\n\n /**\n * Tries to acquire the mutex, and then returns if the operation should end\n * early due to someone else starting a mutex-acquiring operation.\n * Meant for operations that can't be interrupted midway through (e.g.\n * everything but load).\n * @param {string} mutexIdentifier\n * @return {!Promise.} endEarly If false, the calling context will\n * need to release the mutex.\n * @private\n */\n async atomicOperationAcquireMutex_(mutexIdentifier) {\n const operationId = ++this.operationId_;\n await this.mutex_.acquire(mutexIdentifier);\n if (operationId != this.operationId_) {\n this.mutex_.release();\n return true;\n }\n return false;\n }\n\n /**\n * Unloads the currently playing stream, if any.\n *\n * @param {boolean=} initializeMediaSource\n * @param {boolean=} keepAdManager\n * @return {!Promise}\n * @export\n */\n async unload(initializeMediaSource = true, keepAdManager = false) {\n // Set the load mode to unload right away so that all the public methods\n // will stop using the internal components. We need to make sure that we\n // are not overriding the destroyed state because we will unload when we are\n // destroying the player.\n if (this.loadMode_ != shaka.Player.LoadMode.DESTROYED) {\n this.loadMode_ = shaka.Player.LoadMode.NOT_LOADED;\n }\n\n if (await this.atomicOperationAcquireMutex_('unload')) {\n return;\n }\n\n try {\n this.fullyLoaded_ = false;\n this.makeStateChangeEvent_('unload');\n\n // If the platform does not support media source, we will never want to\n // initialize media source.\n if (initializeMediaSource && !shaka.util.Platform.supportsMediaSource()) {\n initializeMediaSource = false;\n }\n\n // If LCEVC Decoder exists close it.\n this.closeLcevcDec_();\n\n // Run any general cleanup tasks now. This should be here at the top,\n // right after setting loadMode_, so that internal components still exist\n // as they did when the cleanup tasks were registered in the array.\n const cleanupTasks = this.cleanupOnUnload_.map((cb) => cb());\n this.cleanupOnUnload_ = [];\n await Promise.all(cleanupTasks);\n\n // Dispatch the unloading event.\n this.dispatchEvent(\n shaka.Player.makeEvent_(shaka.util.FakeEvent.EventName.Unloading));\n\n // Release the region timeline, which is created when parsing the\n // manifest.\n if (this.regionTimeline_) {\n this.regionTimeline_.release();\n this.regionTimeline_ = null;\n }\n\n // In most cases we should have a media element. The one exception would\n // be if there was an error and we, by chance, did not have a media\n // element.\n if (this.video_) {\n this.loadEventManager_.removeAll();\n this.trickPlayEventManager_.removeAll();\n }\n\n // Stop the variant checker timer\n this.checkVariantsTimer_.stop();\n\n // Some observers use some playback components, shutting down the\n // observers first ensures that they don't try to use the playback\n // components mid-destroy.\n if (this.playheadObservers_) {\n this.playheadObservers_.release();\n this.playheadObservers_ = null;\n }\n\n if (this.bufferPoller_) {\n this.bufferPoller_.stop();\n this.bufferPoller_ = null;\n }\n\n // Stop the parser early. Since it is at the start of the pipeline, it\n // should be start early to avoid is pushing new data downstream.\n if (this.parser_) {\n await this.parser_.stop();\n this.parser_ = null;\n this.parserFactory_ = null;\n }\n\n // Abr Manager will tell streaming engine what to do, so we need to stop\n // it before we destroy streaming engine. Unlike with the other\n // components, we do not release the instance, we will reuse it in later\n // loads.\n if (this.abrManager_) {\n await this.abrManager_.stop();\n }\n\n // Streaming engine will push new data to media source engine, so we need\n // to shut it down before destroy media source engine.\n if (this.streamingEngine_) {\n await this.streamingEngine_.destroy();\n this.streamingEngine_ = null;\n }\n\n if (this.playRateController_) {\n this.playRateController_.release();\n this.playRateController_ = null;\n }\n\n // Playhead is used by StreamingEngine, so we can't destroy this until\n // after StreamingEngine has stopped.\n if (this.playhead_) {\n this.playhead_.release();\n this.playhead_ = null;\n }\n\n // EME v0.1b requires the media element to clear the MediaKeys\n if (shaka.util.Platform.isMediaKeysPolyfilled('webkit') &&\n this.drmEngine_) {\n await this.drmEngine_.destroy();\n this.drmEngine_ = null;\n }\n\n // Media source engine holds onto the media element, and in order to\n // detach the media keys (with drm engine), we need to break the\n // connection between media source engine and the media element.\n if (this.mediaSourceEngine_) {\n await this.mediaSourceEngine_.destroy();\n this.mediaSourceEngine_ = null;\n }\n\n if (this.adManager_ && !keepAdManager) {\n this.adManager_.onAssetUnload();\n }\n\n if (this.preloadDueAdManager_ && !keepAdManager) {\n this.preloadDueAdManager_.destroy();\n this.preloadDueAdManager_ = null;\n }\n\n if (!keepAdManager) {\n this.preloadDueAdManagerTimer_.stop();\n }\n\n if (this.cmcdManager_) {\n this.cmcdManager_.reset();\n }\n\n if (this.cmsdManager_) {\n this.cmsdManager_.reset();\n }\n\n if (this.textDisplayer_) {\n await this.textDisplayer_.destroy();\n this.textDisplayer_ = null;\n }\n\n if (this.video_) {\n // Remove all track nodes\n shaka.util.Dom.removeAllChildren(this.video_);\n\n // In order to unload a media element, we need to remove the src\n // attribute and then load again. When we destroy media source engine,\n // this will be done for us, but for src=, we need to do it here.\n //\n // DrmEngine requires this to be done before we destroy DrmEngine\n // itself.\n if (this.video_.src) {\n this.video_.removeAttribute('src');\n this.video_.load();\n }\n }\n\n if (this.drmEngine_) {\n await this.drmEngine_.destroy();\n this.drmEngine_ = null;\n }\n\n if (this.preloadNextUrl_ &&\n this.assetUri_ != this.preloadNextUrl_.getAssetUri()) {\n if (!this.preloadNextUrl_.isDestroyed()) {\n this.preloadNextUrl_.destroy();\n }\n this.preloadNextUrl_ = null;\n }\n\n this.assetUri_ = null;\n this.mimeType_ = null;\n this.bufferObserver_ = null;\n\n if (this.manifest_) {\n for (const variant of this.manifest_.variants) {\n for (const stream of [variant.audio, variant.video]) {\n if (stream && stream.segmentIndex) {\n stream.segmentIndex.release();\n }\n }\n }\n for (const stream of this.manifest_.textStreams) {\n if (stream.segmentIndex) {\n stream.segmentIndex.release();\n }\n }\n }\n\n // On some devices, cached MediaKeySystemAccess objects may corrupt\n // after several playbacks, and they are not able anymore to properly\n // create MediaKeys objects. To prevent it, clear the cache after\n // each playback.\n if (this.config_ && this.config_.streaming.clearDecodingCache) {\n shaka.util.StreamUtils.clearDecodingConfigCache();\n shaka.util.DrmUtils.clearMediaKeySystemAccessMap();\n }\n\n this.manifest_ = null;\n this.stats_ = new shaka.util.Stats(); // Replace with a clean object.\n this.lastTextFactory_ = null;\n\n this.targetLatencyReached_ = null;\n this.currentTargetLatency_ = null;\n this.rebufferingCount_ = -1;\n\n this.externalSrcEqualsThumbnailsStreams_ = [];\n\n this.completionPercent_ = -1;\n\n // Make sure that the app knows of the new buffering state.\n this.updateBufferState_();\n } finally {\n this.mutex_.release();\n }\n\n if (initializeMediaSource && shaka.util.Platform.supportsMediaSource() &&\n !this.mediaSourceEngine_ && this.video_) {\n await this.initializeMediaSourceEngineInner_();\n }\n }\n\n /**\n * Provides a way to update the stream start position during the media loading\n * process. Can for example be called from the manifestparsed\n * event handler to update the start position based on information in the\n * manifest.\n *\n * @param {number} startTime\n * @export\n */\n updateStartTime(startTime) {\n this.startTime_ = startTime;\n }\n\n /**\n * Loads a new stream.\n * If another stream was already playing, first unloads that stream.\n *\n * @param {string|shaka.media.PreloadManager} assetUriOrPreloader\n * @param {?number=} startTime\n * When startTime is null or\n * undefined, playback will start at the default start time (0\n * for VOD and liveEdge for LIVE).\n * @param {?string=} mimeType\n * @return {!Promise}\n * @export\n */\n async load(assetUriOrPreloader, startTime = null, mimeType) {\n // Do not allow the player to be used after |destroy| is called.\n if (this.loadMode_ == shaka.Player.LoadMode.DESTROYED) {\n throw this.createAbortLoadError_();\n }\n\n /** @type {?shaka.media.PreloadManager} */\n let preloadManager = null;\n let assetUri = '';\n if (assetUriOrPreloader instanceof shaka.media.PreloadManager) {\n preloadManager = assetUriOrPreloader;\n assetUri = preloadManager.getAssetUri() || '';\n } else {\n assetUri = assetUriOrPreloader || '';\n }\n\n // Quickly acquire the mutex, so this will wait for other top-level\n // operations.\n await this.mutex_.acquire('load');\n this.mutex_.release();\n\n if (!this.video_) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.PLAYER,\n shaka.util.Error.Code.NO_VIDEO_ELEMENT);\n }\n\n if (this.assetUri_) {\n // Note: This is used to avoid the destruction of the nextUrl\n // preloadManager that can be the current one.\n this.assetUri_ = assetUri;\n await this.unload(/* initializeMediaSource= */ false);\n }\n\n // Add a mechanism to detect if the load process has been interrupted by a\n // call to another top-level operation (unload, load, etc).\n const operationId = ++this.operationId_;\n const detectInterruption = async () => {\n if (this.operationId_ != operationId) {\n if (preloadManager) {\n await preloadManager.destroy();\n }\n throw this.createAbortLoadError_();\n }\n };\n\n /**\n * Wraps a given operation with mutex.acquire and mutex.release, along with\n * calls to detectInterruption, to catch any other top-level calls happening\n * while waiting for the mutex.\n * @param {function():!Promise} operation\n * @param {string} mutexIdentifier\n * @return {!Promise}\n */\n const mutexWrapOperation = async (operation, mutexIdentifier) => {\n try {\n await this.mutex_.acquire(mutexIdentifier);\n await detectInterruption();\n await operation();\n await detectInterruption();\n if (preloadManager && this.config_) {\n preloadManager.reconfigure(this.config_);\n }\n } finally {\n this.mutex_.release();\n }\n };\n\n try {\n if (startTime == null && preloadManager) {\n startTime = preloadManager.getStartTime();\n }\n this.startTime_ = startTime;\n this.fullyLoaded_ = false;\n\n // We dispatch the loading event when someone calls |load| because we want\n // to surface the user intent.\n this.dispatchEvent(shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.Loading));\n\n if (preloadManager) {\n mimeType = preloadManager.getMimeType();\n } else if (!mimeType) {\n await mutexWrapOperation(async () => {\n mimeType = await this.guessMimeType_(assetUri);\n }, 'guessMimeType_');\n }\n\n const wasPreloaded = !!preloadManager;\n if (!preloadManager) {\n // For simplicity, if an asset is NOT preloaded, start an internal\n // \"preload\" here without prefetch.\n // That way, both a preload and normal load can follow the same code\n // paths.\n // NOTE: await preloadInner_ can be outside the mutex because it should\n // not mutate \"this\".\n preloadManager = await this.preloadInner_(\n assetUri, startTime, mimeType, /* standardLoad= */ true);\n if (preloadManager) {\n preloadManager.markIsLoad();\n preloadManager.setEventHandoffTarget(this);\n this.stats_ = preloadManager.getStats();\n preloadManager.start();\n // Silence \"uncaught error\" warnings from this. Unless we are\n // interrupted, we will check the result of this process and respond\n // appropriately. If we are interrupted, we can ignore any error\n // there.\n preloadManager.waitForFinish().catch(() => {});\n } else {\n this.stats_ = new shaka.util.Stats();\n }\n } else {\n // Hook up events, so any events emitted by the preloadManager will\n // instead be emitted by the player.\n preloadManager.setEventHandoffTarget(this);\n this.stats_ = preloadManager.getStats();\n }\n // Now, if there is no preload manager, that means that this is a src=\n // asset.\n const shouldUseSrcEquals = !preloadManager;\n\n const startTimeOfLoad = Date.now() / 1000;\n\n // Stats are for a single playback/load session. Stats must be initialized\n // before we allow calls to |updateStateHistory|.\n this.stats_ =\n preloadManager ? preloadManager.getStats() : new shaka.util.Stats();\n\n this.assetUri_ = assetUri;\n this.mimeType_ = mimeType || null;\n\n if (shouldUseSrcEquals) {\n await mutexWrapOperation(async () => {\n goog.asserts.assert(mimeType, 'We should know the mimeType by now!');\n await this.initializeSrcEqualsDrmInner_(mimeType);\n }, 'initializeSrcEqualsDrmInner_');\n await mutexWrapOperation(async () => {\n goog.asserts.assert(mimeType, 'We should know the mimeType by now!');\n await this.srcEqualsInner_(startTimeOfLoad, mimeType);\n }, 'srcEqualsInner_');\n } else {\n // Wait for the manifest to be parsed.\n await mutexWrapOperation(async () => {\n await preloadManager.waitForManifest();\n // Retrieve the manifest. This is specifically put before the media\n // source engine is initialized, for the benefit of event handlers.\n this.parserFactory_ = preloadManager.getParserFactory();\n this.parser_ = preloadManager.receiveParser();\n this.manifest_ = preloadManager.getManifest();\n }, 'waitForFinish');\n\n if (!this.mediaSourceEngine_) {\n await mutexWrapOperation(async () => {\n await this.initializeMediaSourceEngineInner_();\n }, 'initializeMediaSourceEngineInner_');\n }\n\n // Wait for the preload manager to do all of the loading it can do.\n await mutexWrapOperation(async () => {\n await preloadManager.waitForFinish();\n }, 'waitForFinish');\n\n // Get manifest and associated values from preloader.\n this.config_ = preloadManager.getConfiguration();\n this.manifestFilterer_ = preloadManager.getManifestFilterer();\n if (this.parser_ && this.parser_.setMediaElement && this.video_) {\n this.parser_.setMediaElement(this.video_);\n }\n this.regionTimeline_ = preloadManager.receiveRegionTimeline();\n this.qualityObserver_ = preloadManager.getQualityObserver();\n const currentAdaptationSetCriteria =\n preloadManager.getCurrentAdaptationSetCriteria();\n if (currentAdaptationSetCriteria) {\n this.currentAdaptationSetCriteria_ = currentAdaptationSetCriteria;\n }\n if (wasPreloaded && this.video_ && this.video_.nodeName === 'AUDIO') {\n // Filter the variants to be audio-only after the fact.\n // As, when preloading, we don't know if we are going to be attached\n // to a video or audio element when we load, we have to do the auto\n // audio-only filtering here, post-facto.\n this.makeManifestAudioOnly_();\n // And continue to do so in the future.\n this.configure('manifest.disableVideo', true);\n }\n\n // Get drm engine from preloader, then finalize it.\n this.drmEngine_ = preloadManager.receiveDrmEngine();\n await mutexWrapOperation(async () => {\n await this.drmEngine_.attach(this.video_);\n }, 'drmEngine_.attach');\n\n // Also get the ABR manager, which has special logic related to being\n // received.\n const abrManagerFactory = preloadManager.getAbrManagerFactory();\n if (abrManagerFactory) {\n if (!this.abrManagerFactory_ ||\n this.abrManagerFactory_ != abrManagerFactory) {\n this.abrManager_ = preloadManager.receiveAbrManager();\n this.abrManagerFactory_ = preloadManager.getAbrManagerFactory();\n if (typeof this.abrManager_.setMediaElement != 'function') {\n shaka.Deprecate.deprecateFeature(5,\n 'AbrManager w/o setMediaElement',\n 'Please use an AbrManager with setMediaElement function.');\n this.abrManager_.setMediaElement = () => {};\n }\n if (typeof this.abrManager_.setCmsdManager != 'function') {\n shaka.Deprecate.deprecateFeature(5,\n 'AbrManager w/o setCmsdManager',\n 'Please use an AbrManager with setCmsdManager function.');\n this.abrManager_.setCmsdManager = () => {};\n }\n if (typeof this.abrManager_.trySuggestStreams != 'function') {\n shaka.Deprecate.deprecateFeature(5,\n 'AbrManager w/o trySuggestStreams',\n 'Please use an AbrManager with trySuggestStreams function.');\n this.abrManager_.trySuggestStreams = () => {};\n }\n }\n }\n\n // Load the asset.\n const segmentPrefetchById =\n preloadManager.receiveSegmentPrefetchesById();\n const prefetchedVariant = preloadManager.getPrefetchedVariant();\n await mutexWrapOperation(async () => {\n await this.loadInner_(\n startTimeOfLoad, prefetchedVariant, segmentPrefetchById);\n }, 'loadInner_');\n preloadManager.stopQueuingLatePhaseQueuedOperations();\n\n if (this.mimeType_ && shaka.util.Platform.isSafari() &&\n shaka.util.MimeUtils.isHlsType(this.mimeType_)) {\n this.mediaSourceEngine_.addSecondarySource(\n this.assetUri_, this.mimeType_);\n }\n }\n this.dispatchEvent(shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.Loaded));\n } catch (error) {\n if (error && error.code != shaka.util.Error.Code.LOAD_INTERRUPTED) {\n await this.unload(/* initializeMediaSource= */ false);\n }\n throw error;\n } finally {\n if (preloadManager) {\n // This will cause any resources that were generated but not used to be\n // properly destroyed or released.\n await preloadManager.destroy();\n }\n this.preloadNextUrl_ = null;\n }\n }\n\n /**\n * Modifies the current manifest so that it is audio-only.\n * @private\n */\n makeManifestAudioOnly_() {\n for (const variant of this.manifest_.variants) {\n if (variant.video) {\n variant.video.closeSegmentIndex();\n variant.video = null;\n }\n if (variant.audio && variant.audio.bandwidth) {\n variant.bandwidth = variant.audio.bandwidth;\n } else {\n variant.bandwidth = 0;\n }\n }\n this.manifest_.variants = this.manifest_.variants.filter((v) => {\n return v.audio;\n });\n }\n\n /**\n * Unloads the currently playing stream, if any, and returns a PreloadManager\n * that contains the loaded manifest of that asset, if any.\n * Allows for the asset to be re-loaded by this player faster, in the future.\n * When in src= mode, this unloads but does not make a PreloadManager.\n *\n * @param {boolean=} initializeMediaSource\n * @param {boolean=} keepAdManager\n * @return {!Promise.}\n * @export\n */\n async unloadAndSavePreload(\n initializeMediaSource = true, keepAdManager = false) {\n const preloadManager = await this.savePreload_();\n await this.unload(initializeMediaSource, keepAdManager);\n return preloadManager;\n }\n\n /**\n * Detach the player from the current media element, if any, and returns a\n * PreloadManager that contains the loaded manifest of that asset, if any.\n * Allows for the asset to be re-loaded by this player faster, in the future.\n * When in src= mode, this detach but does not make a PreloadManager.\n * Leaves the player in a state where it cannot play media, until it has been\n * attached to something else.\n *\n * @param {boolean=} keepAdManager\n * @param {boolean=} saveLivePosition\n * @return {!Promise.}\n * @export\n */\n async detachAndSavePreload(keepAdManager = false, saveLivePosition = false) {\n const preloadManager = await this.savePreload_(saveLivePosition);\n await this.detach(keepAdManager);\n return preloadManager;\n }\n\n /**\n * @param {boolean=} saveLivePosition\n * @return {!Promise.}\n * @private\n */\n async savePreload_(saveLivePosition = false) {\n let preloadManager = null;\n if (this.manifest_ && this.parser_ && this.parserFactory_ &&\n this.assetUri_) {\n let startTime = this.video_.currentTime;\n if (this.isLive() && !saveLivePosition) {\n startTime = null;\n }\n // We have enough information to make a PreloadManager!\n preloadManager = await this.makePreloadManager_(\n this.assetUri_,\n startTime,\n this.mimeType_,\n /* allowPrefetch= */ true,\n /* disableVideo= */ false,\n /* allowMakeAbrManager= */ false);\n this.createdPreloadManagers_.push(preloadManager);\n if (this.parser_ && this.parser_.setMediaElement) {\n this.parser_.setMediaElement(/* mediaElement= */ null);\n }\n preloadManager.attachManifest(\n this.manifest_, this.parser_, this.parserFactory_);\n preloadManager.attachAbrManager(\n this.abrManager_, this.abrManagerFactory_);\n preloadManager.attachAdaptationSetCriteria(\n this.currentAdaptationSetCriteria_);\n preloadManager.start();\n // Null the manifest and manifestParser, so that they won't be shut down\n // during unload and will continue to live inside the preloadManager.\n this.manifest_ = null;\n this.parser_ = null;\n this.parserFactory_ = null;\n // Null the abrManager and abrManagerFactory, so that they won't be shut\n // down during unload and will continue to live inside the preloadManager.\n this.abrManager_ = null;\n this.abrManagerFactory_ = null;\n }\n return preloadManager;\n }\n\n /**\n * Starts to preload a given asset, and returns a PreloadManager object that\n * represents that preloading process.\n * The PreloadManager will load the manifest for that asset, as well as the\n * initialization segment. It will not preload anything more than that;\n * this feature is intended for reducing start-time latency, not for fully\n * downloading assets before playing them (for that, use\n * |shaka.offline.Storage|).\n * You can pass that PreloadManager object in to the |load| method on this\n * Player instance to finish loading that particular asset, or you can call\n * the |destroy| method on the manager if the preload is no longer necessary.\n * If this returns null rather than a PreloadManager, that indicates that the\n * asset must be played with src=, which cannot be preloaded.\n *\n * @param {string} assetUri\n * @param {?number=} startTime\n * When startTime is null or\n * undefined, playback will start at the default start time (0\n * for VOD and liveEdge for LIVE).\n * @param {?string=} mimeType\n * @return {!Promise.}\n * @export\n */\n async preload(assetUri, startTime = null, mimeType) {\n const preloadManager = await this.preloadInner_(\n assetUri, startTime, mimeType);\n if (!preloadManager) {\n this.onError_(new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.PLAYER,\n shaka.util.Error.Code.SRC_EQUALS_PRELOAD_NOT_SUPPORTED));\n } else {\n preloadManager.start();\n }\n return preloadManager;\n }\n\n /**\n * Calls |destroy| on each PreloadManager object this player has created.\n * @export\n */\n async destroyAllPreloads() {\n const preloadManagerDestroys = [];\n for (const preloadManager of this.createdPreloadManagers_) {\n if (!preloadManager.isDestroyed()) {\n preloadManagerDestroys.push(preloadManager.destroy());\n }\n }\n this.createdPreloadManagers_ = [];\n await Promise.all(preloadManagerDestroys);\n }\n\n /**\n * @param {string} assetUri\n * @param {?number} startTime\n * @param {?string=} mimeType\n * @param {boolean=} standardLoad\n * @return {!Promise.}\n * @private\n */\n async preloadInner_(assetUri, startTime, mimeType, standardLoad = false) {\n goog.asserts.assert(this.networkingEngine_, 'Should have a net engine!');\n goog.asserts.assert(this.config_, 'Config must not be null!');\n if (!mimeType) {\n mimeType = await this.guessMimeType_(assetUri);\n }\n const shouldUseSrcEquals = this.shouldUseSrcEquals_(assetUri, mimeType);\n if (shouldUseSrcEquals) {\n // We cannot preload src= content.\n return null;\n }\n let disableVideo = false;\n let allowMakeAbrManager = true;\n if (standardLoad) {\n if (this.abrManager_ &&\n this.abrManagerFactory_ == this.config_.abrFactory) {\n // If there's already an abr manager, don't make a new abr manager at\n // all.\n // In standardLoad mode, the abr manager isn't used for anything anyway,\n // so it should only be created to create an abr manager for the player\n // to use... which is unnecessary if we already have one of the right\n // type.\n allowMakeAbrManager = false;\n }\n if (this.video_ && this.video_.nodeName === 'AUDIO') {\n disableVideo = true;\n }\n }\n let preloadManagerPromise = this.makePreloadManager_(\n assetUri, startTime, mimeType || null,\n /* allowPrefetch= */ !standardLoad, disableVideo, allowMakeAbrManager);\n if (!standardLoad) {\n // We only need to track the PreloadManager if it is not part of a\n // standard load. If it is, the load() method will handle destroying it.\n // Adding a standard load PreloadManager to the createdPreloadManagers_\n // array runs the risk that the user will call destroyAllPreloads and\n // destroy that PreloadManager mid-load.\n preloadManagerPromise = preloadManagerPromise.then((preloadManager) => {\n this.createdPreloadManagers_.push(preloadManager);\n return preloadManager;\n });\n } else {\n preloadManagerPromise = preloadManagerPromise.then((preloadManager) => {\n preloadManager.markIsLoad();\n return preloadManager;\n });\n }\n return preloadManagerPromise;\n }\n\n /**\n * @param {string} assetUri\n * @param {?number} startTime\n * @param {?string} mimeType\n * @param {boolean=} allowPrefetch\n * @param {boolean=} disableVideo\n * @param {boolean=} allowMakeAbrManager\n * @return {!Promise.}\n * @private\n */\n async makePreloadManager_(assetUri, startTime, mimeType,\n allowPrefetch = true, disableVideo = false, allowMakeAbrManager = true) {\n goog.asserts.assert(this.networkingEngine_, 'Must have net engine');\n /** @type {?shaka.media.PreloadManager} */\n let preloadManager = null;\n\n const config = shaka.util.ObjectUtils.cloneObject(this.config_);\n if (disableVideo) {\n config.manifest.disableVideo = true;\n }\n\n const getPreloadManager = () => {\n goog.asserts.assert(preloadManager, 'Must have preload manager');\n if (preloadManager.hasBeenAttached() && preloadManager.isDestroyed()) {\n return null;\n }\n return preloadManager;\n };\n\n const getConfig = () => {\n if (getPreloadManager()) {\n return getPreloadManager().getConfiguration();\n } else {\n return this.config_;\n }\n };\n\n const setConfig = (name, value) => {\n if (getPreloadManager()) {\n preloadManager.configure(name, value);\n } else {\n this.configure(name, value);\n }\n };\n\n // Avoid having to detect the resolution again if it has already been\n // detected or set\n if (this.maxHwRes_.width == Infinity &&\n this.maxHwRes_.height == Infinity &&\n !this.config_.ignoreHardwareResolution) {\n const maxResolution =\n await shaka.util.Platform.detectMaxHardwareResolution();\n this.maxHwRes_.width = maxResolution.width;\n this.maxHwRes_.height = maxResolution.height;\n }\n const manifestFilterer = new shaka.media.ManifestFilterer(\n config, this.maxHwRes_, null);\n const manifestPlayerInterface = {\n networkingEngine: this.networkingEngine_,\n filter: async (manifest) => {\n const tracksChanged = await manifestFilterer.filterManifest(manifest);\n if (tracksChanged) {\n // Delay the 'trackschanged' event so StreamingEngine has time to\n // absorb the changes before the user tries to query it.\n const event = shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.TracksChanged);\n await Promise.resolve();\n preloadManager.dispatchEvent(event);\n }\n },\n makeTextStreamsForClosedCaptions: (manifest) => {\n return this.makeTextStreamsForClosedCaptions_(manifest);\n },\n\n // Called when the parser finds a timeline region. This can be called\n // before we start playback or during playback (live/in-progress\n // manifest).\n onTimelineRegionAdded: (region) => {\n preloadManager.getRegionTimeline().addRegion(region);\n },\n\n onEvent: (event) => preloadManager.dispatchEvent(event),\n onError: (error) => preloadManager.onError(error),\n isLowLatencyMode: () => getConfig().streaming.lowLatencyMode,\n isAutoLowLatencyMode: () => getConfig().streaming.autoLowLatencyMode,\n enableLowLatencyMode: () => {\n setConfig('streaming.lowLatencyMode', true);\n },\n updateDuration: () => {\n if (this.streamingEngine_ && preloadManager.hasBeenAttached()) {\n this.streamingEngine_.updateDuration();\n }\n },\n newDrmInfo: (stream) => {\n // We may need to create new sessions for any new init data.\n const drmEngine = preloadManager.getDrmEngine();\n const currentDrmInfo = drmEngine ? drmEngine.getDrmInfo() : null;\n // DrmEngine.newInitData() requires mediaKeys to be available.\n if (currentDrmInfo && drmEngine.getMediaKeys()) {\n manifestFilterer.processDrmInfos(currentDrmInfo.keySystem, stream);\n }\n },\n onManifestUpdated: () => {\n const eventName = shaka.util.FakeEvent.EventName.ManifestUpdated;\n const data = (new Map()).set('isLive', this.isLive());\n preloadManager.dispatchEvent(shaka.Player.makeEvent_(eventName, data));\n\n preloadManager.addQueuedOperation(false, () => {\n if (this.adManager_) {\n this.adManager_.onManifestUpdated(this.isLive());\n }\n });\n },\n getBandwidthEstimate: () => this.abrManager_.getBandwidthEstimate(),\n onMetadata: (type, startTime, endTime, values) => {\n let metadataType = type;\n if (type == 'com.apple.hls.interstitial') {\n metadataType = 'com.apple.quicktime.HLS';\n /** @type {shaka.extern.HLSInterstitial} */\n const interstitial = {\n startTime,\n endTime,\n values,\n };\n if (this.adManager_) {\n goog.asserts.assert(this.video_, 'Must have video');\n this.adManager_.onHLSInterstitialMetadata(\n this, this.video_, interstitial);\n }\n }\n for (const payload of values) {\n if (payload.name == 'ID') {\n continue;\n }\n preloadManager.addQueuedOperation(false, () => {\n this.dispatchMetadataEvent_(\n startTime, endTime, metadataType, payload);\n });\n }\n },\n disableStream: (stream) => this.disableStream(\n stream, this.config_.streaming.maxDisabledTime),\n addFont: (name, url) => this.addFont(name, url),\n };\n const regionTimeline =\n new shaka.media.RegionTimeline(() => this.seekRange());\n regionTimeline.addEventListener('regionadd', (event) => {\n /** @type {shaka.extern.TimelineRegionInfo} */\n const region = event['region'];\n this.onRegionEvent_(\n shaka.util.FakeEvent.EventName.TimelineRegionAdded, region,\n preloadManager);\n\n preloadManager.addQueuedOperation(false, () => {\n if (this.adManager_) {\n this.adManager_.onDashTimedMetadata(region);\n goog.asserts.assert(this.video_, 'Must have video');\n this.adManager_.onDASHInterstitialMetadata(\n this, this.video_, region);\n }\n });\n });\n let qualityObserver = null;\n if (config.streaming.observeQualityChanges) {\n qualityObserver = new shaka.media.QualityObserver(\n () => this.getBufferedInfo());\n\n qualityObserver.addEventListener('qualitychange', (event) => {\n /** @type {shaka.extern.MediaQualityInfo} */\n const mediaQualityInfo = event['quality'];\n /** @type {number} */\n const position = event['position'];\n this.onMediaQualityChange_(mediaQualityInfo, position);\n });\n\n qualityObserver.addEventListener('audiotrackchange', (event) => {\n /** @type {shaka.extern.MediaQualityInfo} */\n const mediaQualityInfo = event['quality'];\n /** @type {number} */\n const position = event['position'];\n this.onMediaQualityChange_(mediaQualityInfo, position,\n /* audioTrackChanged= */ true);\n });\n }\n let firstEvent = true;\n const drmPlayerInterface = {\n netEngine: this.networkingEngine_,\n onError: (e) => preloadManager.onError(e),\n onKeyStatus: (map) => {\n preloadManager.addQueuedOperation(true, () => {\n this.onKeyStatus_(map);\n });\n },\n onExpirationUpdated: (id, expiration) => {\n const event = shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.ExpirationUpdated);\n preloadManager.dispatchEvent(event);\n const parser = preloadManager.getParser();\n if (parser && parser.onExpirationUpdated) {\n parser.onExpirationUpdated(id, expiration);\n }\n },\n onEvent: (e) => {\n preloadManager.dispatchEvent(e);\n if (e.type == shaka.util.FakeEvent.EventName.DrmSessionUpdate &&\n firstEvent) {\n firstEvent = false;\n const now = Date.now() / 1000;\n const delta = now - preloadManager.getStartTimeOfDRM();\n const stats = this.stats_ || preloadManager.getStats();\n stats.setDrmTime(delta);\n // LCEVC data by itself is not encrypted in DRM protected streams\n // and can therefore be accessed and decoded as normal. However,\n // the LCEVC decoder needs access to the VideoElement output in\n // order to apply the enhancement. In DRM contexts where the\n // browser CDM restricts access from our decoder, the enhancement\n // cannot be applied and therefore the LCEVC output canvas is\n // hidden accordingly.\n if (this.lcevcDec_) {\n this.lcevcDec_.hideCanvas();\n }\n }\n },\n };\n\n // Sadly, as the network engine creation code must be replaceable by tests,\n // it cannot be made and use the utilities defined in this function.\n const networkingEngine = this.createNetworkingEngine(getPreloadManager);\n this.networkingEngine_.copyFiltersInto(networkingEngine);\n\n /** @return {!shaka.media.DrmEngine} */\n const createDrmEngine = () => {\n return this.createDrmEngine(drmPlayerInterface);\n };\n /** @type {!shaka.media.PreloadManager.PlayerInterface} */\n const playerInterface = {\n config,\n manifestPlayerInterface,\n regionTimeline,\n qualityObserver,\n createDrmEngine,\n manifestFilterer,\n networkingEngine,\n allowPrefetch,\n allowMakeAbrManager,\n };\n preloadManager = new shaka.media.PreloadManager(\n assetUri, mimeType, startTime, playerInterface);\n return preloadManager;\n }\n\n /**\n * Determines the mimeType of the given asset, if we are not told that inside\n * the loading process.\n *\n * @param {string} assetUri\n * @return {!Promise.} mimeType\n * @private\n */\n async guessMimeType_(assetUri) {\n // If no MIME type is provided, and we can't base it on extension, make a\n // HEAD request to determine it.\n goog.asserts.assert(this.networkingEngine_, 'Should have a net engine!');\n const retryParams = this.config_.manifest.retryParameters;\n let mimeType = await shaka.net.NetworkingUtils.getMimeType(\n assetUri, this.networkingEngine_, retryParams);\n if (mimeType == 'application/x-mpegurl' && shaka.util.Platform.isApple()) {\n mimeType = 'application/vnd.apple.mpegurl';\n }\n return mimeType;\n }\n\n /**\n * Determines if we should use src equals, based on the the mimeType (if\n * known), the URI, and platform information.\n *\n * @param {string} assetUri\n * @param {?string=} mimeType\n * @return {boolean}\n * |true| if the content should be loaded with src=, |false| if the content\n * should be loaded with MediaSource.\n * @private\n */\n shouldUseSrcEquals_(assetUri, mimeType) {\n const Platform = shaka.util.Platform;\n const MimeUtils = shaka.util.MimeUtils;\n\n // If we are using a platform that does not support media source, we will\n // fall back to src= to handle all playback.\n if (!Platform.supportsMediaSource()) {\n return true;\n }\n\n if (mimeType) {\n // If we have a MIME type, check if the browser can play it natively.\n // This will cover both single files and native HLS.\n const mediaElement = this.video_ || Platform.anyMediaElement();\n const canPlayNatively = mediaElement.canPlayType(mimeType) != '';\n\n // If we can't play natively, then src= isn't an option.\n if (!canPlayNatively) {\n return false;\n }\n\n const canPlayMediaSource =\n shaka.media.ManifestParser.isSupported(mimeType);\n\n // If MediaSource isn't an option, the native option is our only chance.\n if (!canPlayMediaSource) {\n return true;\n }\n\n // If we land here, both are feasible.\n goog.asserts.assert(canPlayNatively && canPlayMediaSource,\n 'Both native and MSE playback should be possible!');\n\n // We would prefer MediaSource in some cases, and src= in others. For\n // example, Android has native HLS, but we'd prefer our own MediaSource\n // version there.\n if (MimeUtils.isHlsType(mimeType)) {\n // Native FairPlay HLS can be preferred on Apple platfforms.\n if (Platform.isApple() &&\n (this.config_.drm.servers['com.apple.fps'] ||\n this.config_.drm.servers['com.apple.fps.1_0'])) {\n return this.config_.streaming.useNativeHlsForFairPlay;\n }\n\n // Native HLS can be preferred on any platform via this flag:\n return this.config_.streaming.preferNativeHls;\n }\n\n // In all other cases, we prefer MediaSource.\n return false;\n }\n\n // Unless there are good reasons to use src= (single-file playback or native\n // HLS), we prefer MediaSource. So the final return value for choosing src=\n // is false.\n return false;\n }\n\n /**\n * @private\n */\n createTextDisplayer_() {\n // When changing text visibility we need to update both the text displayer\n // and streaming engine because we don't always stream text. To ensure\n // that the text displayer and streaming engine are always in sync, wait\n // until they are both initialized before setting the initial value.\n const textDisplayerFactory = this.config_.textDisplayFactory;\n if (textDisplayerFactory === this.lastTextFactory_) {\n return;\n }\n this.textDisplayer_ = textDisplayerFactory();\n if (this.textDisplayer_.configure) {\n this.textDisplayer_.configure(this.config_.textDisplayer);\n } else {\n shaka.Deprecate.deprecateFeature(5,\n 'Text displayer w/ configure',\n 'Text displayer should have a \"configure\" method!');\n }\n this.lastTextFactory_ = textDisplayerFactory;\n this.textDisplayer_.setTextVisibility(this.isTextVisible_);\n }\n\n /**\n * Initializes the media source engine.\n *\n * @return {!Promise}\n * @private\n */\n async initializeMediaSourceEngineInner_() {\n goog.asserts.assert(\n shaka.util.Platform.supportsMediaSource(),\n 'We should not be initializing media source on a platform that ' +\n 'does not support media source.');\n goog.asserts.assert(\n this.video_,\n 'We should have a media element when initializing media source.');\n goog.asserts.assert(\n this.mediaSourceEngine_ == null,\n 'We should not have a media source engine yet.');\n\n this.makeStateChangeEvent_('media-source');\n\n // Remove children if we had any, i.e. from previously used src= mode.\n this.video_.removeAttribute('src');\n shaka.util.Dom.removeAllChildren(this.video_);\n\n this.createTextDisplayer_();\n goog.asserts.assert(this.textDisplayer_,\n 'Text displayer should be created already');\n const mediaSourceEngine = this.createMediaSourceEngine(\n this.video_,\n this.textDisplayer_,\n {\n getKeySystem: () => this.keySystem(),\n onMetadata: (metadata, offset, endTime) => {\n this.processTimedMetadataMediaSrc_(metadata, offset, endTime);\n },\n onEvent: (event) => this.dispatchEvent(event),\n onManifestUpdate: () => this.onManifestUpdate_(),\n },\n this.lcevcDec_);\n mediaSourceEngine.configure(this.config_.mediaSource);\n const {segmentRelativeVttTiming} = this.config_.manifest;\n mediaSourceEngine.setSegmentRelativeVttTiming(segmentRelativeVttTiming);\n\n // Wait for media source engine to finish opening. This promise should\n // NEVER be rejected as per the media source engine implementation.\n await mediaSourceEngine.open();\n\n // Wait until it is ready to actually store the reference.\n this.mediaSourceEngine_ = mediaSourceEngine;\n }\n\n /**\n * Adds the basic media listeners\n *\n * @param {HTMLMediaElement} mediaElement\n * @param {number} startTimeOfLoad\n * @private\n */\n addBasicMediaListeners_(mediaElement, startTimeOfLoad) {\n const updateStateHistory = () => this.updateStateHistory_();\n const onRateChange = () => this.onRateChange_();\n this.loadEventManager_.listen(mediaElement, 'playing', updateStateHistory);\n this.loadEventManager_.listen(mediaElement, 'pause', updateStateHistory);\n this.loadEventManager_.listen(mediaElement, 'ended', updateStateHistory);\n this.loadEventManager_.listen(mediaElement, 'ratechange', onRateChange);\n if (mediaElement.remote) {\n this.loadEventManager_.listen(mediaElement.remote, 'connect',\n () => this.onTracksChanged_());\n this.loadEventManager_.listen(mediaElement.remote, 'connecting',\n () => this.onTracksChanged_());\n this.loadEventManager_.listen(mediaElement.remote, 'disconnect',\n async () => {\n if (this.streamingEngine_ &&\n mediaElement.remote.state == 'disconnected') {\n await this.streamingEngine_.resetMediaSource();\n }\n this.onTracksChanged_();\n });\n }\n if (mediaElement.audioTracks) {\n this.loadEventManager_.listen(mediaElement.audioTracks, 'addtrack',\n () => this.onTracksChanged_());\n this.loadEventManager_.listen(mediaElement.audioTracks, 'removetrack',\n () => this.onTracksChanged_());\n this.loadEventManager_.listen(mediaElement.audioTracks, 'change',\n () => this.onTracksChanged_());\n }\n\n if (mediaElement.textTracks) {\n this.loadEventManager_.listen(\n mediaElement.textTracks, 'addtrack', (e) => {\n const trackEvent = /** @type {!TrackEvent} */(e);\n if (trackEvent.track) {\n const track = trackEvent.track;\n goog.asserts.assert(\n track instanceof TextTrack, 'Wrong track type!');\n\n switch (track.kind) {\n case 'metadata':\n this.processTimedMetadataSrcEqls_(track);\n break;\n\n case 'chapters':\n this.activateChaptersTrack_(track);\n break;\n\n default:\n this.onTracksChanged_();\n break;\n }\n }\n });\n this.loadEventManager_.listen(mediaElement.textTracks, 'removetrack',\n () => this.onTracksChanged_());\n this.loadEventManager_.listen(mediaElement.textTracks, 'change',\n () => this.onTracksChanged_());\n }\n\n // Wait for the 'loadedmetadata' event to measure load() latency, but only\n // if preload is set in a way that would result in this event firing\n // automatically.\n // See https://github.com/shaka-project/shaka-player/issues/2483\n if (mediaElement.preload != 'none') {\n this.loadEventManager_.listenOnce(\n mediaElement, 'loadedmetadata', () => {\n const now = Date.now() / 1000;\n const delta = now - startTimeOfLoad;\n this.stats_.setLoadLatency(delta);\n });\n }\n }\n\n /**\n * Starts loading the content described by the parsed manifest.\n *\n * @param {number} startTimeOfLoad\n * @param {?shaka.extern.Variant} prefetchedVariant\n * @param {!Map.} segmentPrefetchById\n * @return {!Promise}\n * @private\n */\n async loadInner_(startTimeOfLoad, prefetchedVariant, segmentPrefetchById) {\n goog.asserts.assert(\n this.video_, 'We should have a media element by now.');\n goog.asserts.assert(\n this.manifest_, 'The manifest should already be parsed.');\n goog.asserts.assert(\n this.assetUri_, 'We should have an asset uri by now.');\n goog.asserts.assert(\n this.abrManager_, 'We should have an abr manager by now.');\n\n this.makeStateChangeEvent_('load');\n\n const mediaElement = this.video_;\n this.playRateController_ = new shaka.media.PlayRateController({\n getRate: () => mediaElement.playbackRate,\n getDefaultRate: () => mediaElement.defaultPlaybackRate,\n setRate: (rate) => { mediaElement.playbackRate = rate; },\n movePlayhead: (delta) => { mediaElement.currentTime += delta; },\n });\n\n // Add all media element listeners.\n this.addBasicMediaListeners_(mediaElement, startTimeOfLoad);\n\n // Check the status of the LCEVC Dec Object. Reset, create, or close\n // depending on the config.\n this.setupLcevc_(this.config_);\n\n this.currentTextLanguage_ = this.config_.preferredTextLanguage;\n this.currentTextRole_ = this.config_.preferredTextRole;\n this.currentTextForced_ = this.config_.preferForcedSubs;\n\n shaka.Player.applyPlayRange_(this.manifest_.presentationTimeline,\n this.config_.playRangeStart,\n this.config_.playRangeEnd);\n\n this.abrManager_.init((variant, clearBuffer, safeMargin) => {\n return this.switch_(variant, clearBuffer, safeMargin);\n });\n this.abrManager_.setMediaElement(mediaElement);\n this.abrManager_.setCmsdManager(this.cmsdManager_);\n\n this.streamingEngine_ = this.createStreamingEngine();\n this.streamingEngine_.configure(this.config_.streaming);\n\n // Set the load mode to \"loaded with media source\" as late as possible so\n // that public methods won't try to access internal components until\n // they're all initialized. We MUST switch to loaded before calling\n // \"streaming\" so that they can access internal information.\n this.loadMode_ = shaka.Player.LoadMode.MEDIA_SOURCE;\n\n // The event must be fired after we filter by restrictions but before the\n // active stream is picked to allow those listening for the \"streaming\"\n // event to make changes before streaming starts.\n this.dispatchEvent(shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.Streaming));\n\n // Pick the initial streams to play.\n // Unless the user has already picked a variant, anyway, by calling\n // selectVariantTrack before this loading stage.\n let initialVariant = prefetchedVariant;\n let toLazyLoad;\n let activeVariant;\n do {\n activeVariant = this.streamingEngine_.getCurrentVariant();\n if (!activeVariant && !initialVariant) {\n initialVariant = this.chooseVariant_();\n goog.asserts.assert(initialVariant, 'Must choose an initial variant!');\n }\n\n // Lazy-load the stream, so we will have enough info to make the playhead.\n const createSegmentIndexPromises = [];\n toLazyLoad = activeVariant || initialVariant;\n for (const stream of [toLazyLoad.video, toLazyLoad.audio]) {\n if (stream && !stream.segmentIndex) {\n createSegmentIndexPromises.push(stream.createSegmentIndex());\n }\n }\n if (createSegmentIndexPromises.length > 0) {\n // eslint-disable-next-line no-await-in-loop\n await Promise.all(createSegmentIndexPromises);\n }\n } while (!toLazyLoad || toLazyLoad.disabledUntilTime != 0);\n\n if (this.parser_ && this.parser_.onInitialVariantChosen) {\n this.parser_.onInitialVariantChosen(toLazyLoad);\n }\n\n if (this.manifest_.isLowLatency && !this.config_.streaming.lowLatencyMode) {\n shaka.log.alwaysWarn('Low-latency live stream detected, but ' +\n 'low-latency streaming mode is not enabled in Shaka Player. ' +\n 'Set streaming.lowLatencyMode configuration to true, and see ' +\n 'https://bit.ly/3clctcj for details.');\n }\n\n if (this.cmcdManager_) {\n this.cmcdManager_.setLowLatency(\n this.manifest_.isLowLatency && this.config_.streaming.lowLatencyMode);\n }\n\n shaka.Player.applyPlayRange_(this.manifest_.presentationTimeline,\n this.config_.playRangeStart,\n this.config_.playRangeEnd);\n\n this.streamingEngine_.applyPlayRange(\n this.config_.playRangeStart, this.config_.playRangeEnd);\n\n const setupPlayhead = (startTime) => {\n this.playhead_ = this.createPlayhead(startTime);\n this.playheadObservers_ =\n this.createPlayheadObserversForMSE_(startTime);\n\n // We need to start the buffer management code near the end because it\n // will set the initial buffering state and that depends on other\n // components being initialized.\n const rebufferThreshold = Math.max(\n this.manifest_.minBufferTime,\n this.config_.streaming.rebufferingGoal);\n this.startBufferManagement_(mediaElement, rebufferThreshold);\n };\n\n if (!this.config_.streaming.startAtSegmentBoundary) {\n let startTime = this.startTime_;\n if (startTime == null && this.manifest_.startTime) {\n startTime = this.manifest_.startTime;\n }\n setupPlayhead(startTime);\n }\n\n // Now we can switch to the initial variant.\n if (!activeVariant) {\n goog.asserts.assert(initialVariant,\n 'Must have choosen an initial variant!');\n\n // Now that we have initial streams, we may adjust the start time to\n // align to a segment boundary.\n if (this.config_.streaming.startAtSegmentBoundary) {\n const timeline = this.manifest_.presentationTimeline;\n let initialTime = this.startTime_ || this.video_.currentTime;\n if (this.startTime_ == null && this.manifest_.startTime) {\n initialTime = this.manifest_.startTime;\n }\n const seekRangeStart = timeline.getSeekRangeStart();\n const seekRangeEnd = timeline.getSeekRangeEnd();\n if (initialTime < seekRangeStart) {\n initialTime = seekRangeStart;\n } else if (initialTime > seekRangeEnd) {\n initialTime = seekRangeEnd;\n }\n const startTime = await this.adjustStartTime_(\n initialVariant, initialTime);\n setupPlayhead(startTime);\n }\n\n this.switchVariant_(initialVariant, /* fromAdaptation= */ true,\n /* clearBuffer= */ false, /* safeMargin= */ 0);\n }\n\n this.playhead_.ready();\n\n // Decide if text should be shown automatically.\n // similar to video/audio track, we would skip switch initial text track\n // if user already pick text track (via selectTextTrack api)\n const activeTextTrack = this.getTextTracks().find((t) => t.active);\n\n if (!activeTextTrack) {\n const initialTextStream = this.chooseTextStream_();\n\n if (initialTextStream) {\n this.addTextStreamToSwitchHistory_(\n initialTextStream, /* fromAdaptation= */ true);\n }\n\n if (initialVariant) {\n this.setInitialTextState_(initialVariant, initialTextStream);\n }\n\n // Don't initialize with a text stream unless we should be streaming\n // text.\n if (initialTextStream && this.shouldStreamText_()) {\n this.streamingEngine_.switchTextStream(initialTextStream);\n this.setTextDisplayerLanguage_();\n }\n }\n\n\n // Start streaming content. This will start the flow of content down to\n // media source.\n await this.streamingEngine_.start(segmentPrefetchById);\n\n if (this.config_.abr.enabled) {\n this.abrManager_.enable();\n this.onAbrStatusChanged_();\n }\n\n // Dispatch a 'trackschanged' event now that all initial filtering is\n // done.\n this.onTracksChanged_();\n\n // Now that we've filtered out variants that aren't compatible with the\n // active one, update abr manager with filtered variants.\n // NOTE: This may be unnecessary. We've already chosen one codec in\n // chooseCodecsAndFilterManifest_ before we started streaming. But it\n // doesn't hurt, and this will all change when we start using\n // MediaCapabilities and codec switching.\n // TODO(#1391): Re-evaluate with MediaCapabilities and codec switching.\n this.updateAbrManagerVariants_();\n\n const hasPrimary = this.manifest_.variants.some((v) => v.primary);\n if (!this.config_.preferredAudioLanguage && !hasPrimary) {\n shaka.log.warning('No preferred audio language set. ' +\n 'We have chosen an arbitrary language initially');\n }\n\n const isLive = this.isLive();\n\n if ((isLive && ((this.config_.streaming.liveSync &&\n this.config_.streaming.liveSync.enabled) ||\n this.manifest_.serviceDescription ||\n this.config_.streaming.liveSync.panicMode)) ||\n this.config_.streaming.vodDynamicPlaybackRate) {\n const onTimeUpdate = () => this.onTimeUpdate_();\n this.loadEventManager_.listen(mediaElement, 'timeupdate', onTimeUpdate);\n }\n if (!isLive) {\n const onVideoProgress = () => this.onVideoProgress_();\n this.loadEventManager_.listen(\n mediaElement, 'timeupdate', onVideoProgress);\n this.onVideoProgress_();\n if (this.manifest_.nextUrl) {\n if (this.config_.streaming.preloadNextUrlWindow > 0) {\n const onTimeUpdate = async () => {\n const timeToEnd = this.seekRange().end - this.video_.currentTime;\n if (!isNaN(timeToEnd)) {\n if (timeToEnd <= this.config_.streaming.preloadNextUrlWindow) {\n this.loadEventManager_.unlisten(\n mediaElement, 'timeupdate', onTimeUpdate);\n goog.asserts.assert(this.manifest_.nextUrl,\n 'this.manifest_.nextUrl should be valid.');\n this.preloadNextUrl_ =\n await this.preload(this.manifest_.nextUrl);\n }\n }\n };\n this.loadEventManager_.listen(\n mediaElement, 'timeupdate', onTimeUpdate);\n }\n this.loadEventManager_.listen(mediaElement, 'ended', () => {\n this.load(this.preloadNextUrl_ || this.manifest_.nextUrl);\n });\n }\n }\n\n if (this.adManager_) {\n this.adManager_.onManifestUpdated(isLive);\n }\n\n this.fullyLoaded_ = true;\n }\n\n /**\n * Initializes the DRM engine for use by src equals.\n *\n * @param {string} mimeType\n * @return {!Promise}\n * @private\n */\n async initializeSrcEqualsDrmInner_(mimeType) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n goog.asserts.assert(\n this.networkingEngine_,\n '|onInitializeSrcEqualsDrm_| should never be called after |destroy|');\n goog.asserts.assert(\n this.config_,\n '|onInitializeSrcEqualsDrm_| should never be called after |destroy|');\n\n const startTime = Date.now() / 1000;\n let firstEvent = true;\n\n this.drmEngine_ = this.createDrmEngine({\n netEngine: this.networkingEngine_,\n onError: (e) => {\n this.onError_(e);\n },\n onKeyStatus: (map) => {\n // According to this.onKeyStatus_, we can't even use this information\n // in src= mode, so this is just a no-op.\n },\n onExpirationUpdated: (id, expiration) => {\n const event = shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.ExpirationUpdated);\n this.dispatchEvent(event);\n },\n onEvent: (e) => {\n this.dispatchEvent(e);\n if (e.type == shaka.util.FakeEvent.EventName.DrmSessionUpdate &&\n firstEvent) {\n firstEvent = false;\n const now = Date.now() / 1000;\n const delta = now - startTime;\n this.stats_.setDrmTime(delta);\n }\n },\n });\n\n this.drmEngine_.configure(this.config_.drm);\n\n // TODO: Instead of feeding DrmEngine with Variants, we should refactor\n // DrmEngine so that it takes a minimal config derived from Variants. In\n // cases like this one or in removal of stored content, the details are\n // largely unimportant. We should have a saner way to initialize\n // DrmEngine.\n // That would also insulate DrmEngine from manifest changes in the future.\n // For now, that is time-consuming and this synthetic Variant is easy, so\n // I'm putting it off. Since this is only expected to be used for native\n // HLS in Safari, this should be safe. -JCP\n /** @type {shaka.extern.Variant} */\n const variant = {\n id: 0,\n language: 'und',\n disabledUntilTime: 0,\n primary: false,\n audio: null,\n video: null,\n bandwidth: 100,\n allowedByApplication: true,\n allowedByKeySystem: true,\n decodingInfos: [],\n };\n const stream = {\n id: 0,\n originalId: null,\n groupId: null,\n createSegmentIndex: () => Promise.resolve(),\n segmentIndex: null,\n mimeType: mimeType ? shaka.util.MimeUtils.getBasicType(mimeType) : '',\n codecs: mimeType ? shaka.util.MimeUtils.getCodecs(mimeType) : '',\n encrypted: true,\n drmInfos: [], // Filled in by DrmEngine config.\n keyIds: new Set(),\n language: 'und',\n originalLanguage: null,\n label: null,\n type: ContentType.VIDEO,\n primary: false,\n trickModeVideo: null,\n emsgSchemeIdUris: null,\n roles: [],\n forced: false,\n channelsCount: null,\n audioSamplingRate: null,\n spatialAudio: false,\n closedCaptions: null,\n accessibilityPurpose: null,\n external: false,\n fastSwitching: false,\n fullMimeTypes: new Set(),\n isAudioMuxedInVideo: false,\n };\n stream.fullMimeTypes.add(shaka.util.MimeUtils.getFullType(\n stream.mimeType, stream.codecs));\n if (mimeType.startsWith('audio/')) {\n stream.type = ContentType.AUDIO;\n variant.audio = stream;\n } else {\n variant.video = stream;\n }\n\n this.drmEngine_.setSrcEquals(/* srcEquals= */ true);\n await this.drmEngine_.initForPlayback(\n [variant], /* offlineSessionIds= */ []);\n await this.drmEngine_.attach(this.video_);\n }\n\n /**\n * Passes the asset URI along to the media element, so it can be played src\n * equals style.\n *\n * @param {number} startTimeOfLoad\n * @param {string} mimeType\n * @return {!Promise}\n *\n * @private\n */\n async srcEqualsInner_(startTimeOfLoad, mimeType) {\n this.makeStateChangeEvent_('src-equals');\n\n goog.asserts.assert(\n this.video_, 'We should have a media element when loading.');\n goog.asserts.assert(\n this.assetUri_, 'We should have a valid uri when loading.');\n\n const mediaElement = this.video_;\n\n this.playhead_ = new shaka.media.SrcEqualsPlayhead(mediaElement);\n\n // This flag is used below in the language preference setup to check if\n // this load was canceled before the necessary awaits completed.\n let unloaded = false;\n this.cleanupOnUnload_.push(() => {\n unloaded = true;\n });\n\n if (this.startTime_ != null) {\n this.playhead_.setStartTime(this.startTime_);\n }\n\n this.playRateController_ = new shaka.media.PlayRateController({\n getRate: () => mediaElement.playbackRate,\n getDefaultRate: () => mediaElement.defaultPlaybackRate,\n setRate: (rate) => { mediaElement.playbackRate = rate; },\n movePlayhead: (delta) => { mediaElement.currentTime += delta; },\n });\n\n // We need to start the buffer management code near the end because it\n // will set the initial buffering state and that depends on other\n // components being initialized.\n const rebufferThreshold = this.config_.streaming.rebufferingGoal;\n this.startBufferManagement_(mediaElement, rebufferThreshold);\n\n if (mediaElement.textTracks) {\n this.createTextDisplayer_();\n const setShowingMode = () => {\n const track = this.getFilteredTextTracks_()\n .find((t) => t.mode !== 'disabled');\n if (track) {\n track.mode = 'showing';\n }\n };\n const setHiddenMode = () => {\n const track = this.getFilteredTextTracks_()\n .find((t) => t.mode !== 'disabled');\n if (track) {\n track.mode = 'hidden';\n }\n };\n this.loadEventManager_.listen(mediaElement, 'enterpictureinpicture',\n () => setShowingMode());\n this.loadEventManager_.listen(mediaElement, 'leavepictureinpicture',\n () => setHiddenMode());\n if (mediaElement.remote) {\n this.loadEventManager_.listen(mediaElement.remote, 'connect',\n () => setHiddenMode());\n this.loadEventManager_.listen(mediaElement.remote, 'connecting',\n () => setHiddenMode());\n this.loadEventManager_.listen(mediaElement.remote, 'disconnect',\n () => setHiddenMode());\n } else if ('webkitCurrentPlaybackTargetIsWireless' in mediaElement) {\n this.loadEventManager_.listen(mediaElement,\n 'webkitcurrentplaybacktargetiswirelesschanged',\n () => setHiddenMode());\n }\n const video = /** @type {HTMLVideoElement} */(mediaElement);\n if (video.webkitSupportsFullscreen) {\n this.loadEventManager_.listen(video, 'webkitpresentationmodechanged',\n () => {\n if (video.webkitPresentationMode != 'inline') {\n setShowingMode();\n } else {\n setHiddenMode();\n }\n });\n }\n }\n // Add all media element listeners.\n this.addBasicMediaListeners_(mediaElement, startTimeOfLoad);\n\n // By setting |src| we are done \"loading\" with src=. We don't need to set\n // the current time because |playhead| will do that for us.\n let playbackUri = this.cmcdManager_.appendSrcData(this.assetUri_, mimeType);\n // Apply temporal clipping using playRangeStart and playRangeEnd based\n // in https://www.w3.org/TR/media-frags/\n if (!playbackUri.includes('#t=') &&\n (this.config_.playRangeStart > 0 ||\n isFinite(this.config_.playRangeEnd))) {\n playbackUri += '#t=';\n if (this.config_.playRangeStart > 0) {\n playbackUri += this.config_.playRangeStart;\n }\n if (isFinite(this.config_.playRangeEnd)) {\n playbackUri += ',' + this.config_.playRangeEnd;\n }\n }\n\n if (this.mediaSourceEngine_ ) {\n await this.mediaSourceEngine_.destroy();\n this.mediaSourceEngine_ = null;\n }\n shaka.util.Dom.removeAllChildren(mediaElement);\n\n mediaElement.src = playbackUri;\n\n // Tizen 3 / WebOS won't load anything unless you call load() explicitly,\n // no matter the value of the preload attribute. This is harmful on some\n // other platforms by triggering unbounded loading of media data, but is\n // necessary here.\n if (shaka.util.Platform.isTizen() || shaka.util.Platform.isWebOS()) {\n mediaElement.load();\n }\n\n // In Safari using HLS won't load anything unless you call load()\n // explicitly, no matter the value of the preload attribute.\n // Note: this only happens when there are not autoplay.\n if (mediaElement.preload != 'none' && !mediaElement.autoplay &&\n shaka.util.MimeUtils.isHlsType(mimeType) &&\n shaka.util.Platform.safariVersion()) {\n mediaElement.load();\n }\n\n // Set the load mode last so that we know that all our components are\n // initialized.\n this.loadMode_ = shaka.Player.LoadMode.SRC_EQUALS;\n\n // The event doesn't mean as much for src= playback, since we don't\n // control streaming. But we should fire it in this path anyway since\n // some applications may be expecting it as a life-cycle event.\n this.dispatchEvent(shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.Streaming));\n\n // The \"load\" Promise is resolved when we have loaded the metadata. If we\n // wait for the full data, that won't happen on Safari until the play\n // button is hit.\n const fullyLoaded = new shaka.util.PublicPromise();\n shaka.util.MediaReadyState.waitForReadyState(mediaElement,\n HTMLMediaElement.HAVE_METADATA,\n this.loadEventManager_,\n () => {\n this.playhead_.ready();\n fullyLoaded.resolve();\n });\n\n // We can't switch to preferred languages, though, until the data is\n // loaded.\n shaka.util.MediaReadyState.waitForReadyState(mediaElement,\n HTMLMediaElement.HAVE_CURRENT_DATA,\n this.loadEventManager_,\n async () => {\n this.setupPreferredAudioOnSrc_();\n\n // Applying the text preference too soon can result in it being\n // reverted. Wait for native HLS to pick something first.\n const textTracks = this.getFilteredTextTracks_();\n if (!textTracks.find((t) => t.mode != 'disabled')) {\n await new Promise((resolve) => {\n this.loadEventManager_.listenOnce(\n mediaElement.textTracks, 'change', resolve);\n\n // We expect the event to fire because it does on Safari.\n // But in case it doesn't on some other platform or future\n // version, move on in 1 second no matter what. This keeps the\n // language settings from being completely ignored if something\n // goes wrong.\n new shaka.util.Timer(resolve).tickAfter(1);\n });\n } else if (textTracks.length > 0) {\n this.isTextVisible_ = true;\n this.textDisplayer_.setTextVisibility(true);\n }\n\n // If we have moved on to another piece of content while waiting for\n // the above event/timer, we should not change tracks here.\n if (unloaded) {\n return;\n }\n let enabledNativeTrack = false;\n for (const track of textTracks) {\n if (track.mode !== 'disabled') {\n if (!enabledNativeTrack) {\n this.enableNativeTrack_(track);\n enabledNativeTrack = true;\n } else {\n track.mode = 'disabled';\n shaka.log.alwaysWarn(\n 'Found more than one enabled text track, disabling it',\n track);\n }\n }\n }\n\n this.setupPreferredTextOnSrc_();\n });\n\n if (mediaElement.error) {\n // Already failed!\n fullyLoaded.reject(this.videoErrorToShakaError_());\n } else if (mediaElement.preload == 'none') {\n shaka.log.alwaysWarn(\n 'With

\n * First, this can be passed a single \"plain\" object. This object should\n * follow the {@link shaka.extern.PlayerConfiguration} object. Not all fields\n * need to be set; unset fields retain their old values.\n *\n *

\n * Second, this can be passed two arguments. The first is the name of the key\n * to set. This should be a '.' separated path to the key. For example,\n * 'streaming.alwaysStreamText'. The second argument is the\n * value to set.\n *\n * @param {string|!Object} config This should either be a field name or an\n * object.\n * @param {*=} value In the second mode, this is the value to set.\n * @return {boolean} True if the passed config object was valid, false if\n * there were invalid entries.\n * @export\n */\n configure(config, value) {\n const Platform = shaka.util.Platform;\n\n goog.asserts.assert(this.config_, 'Config must not be null!');\n goog.asserts.assert(typeof(config) == 'object' || arguments.length == 2,\n 'String configs should have values!');\n\n // ('fieldName', value) format\n if (arguments.length == 2 && typeof(config) == 'string') {\n config = shaka.util.ConfigUtils.convertToConfigObject(config, value);\n }\n\n goog.asserts.assert(typeof(config) == 'object', 'Should be an object!');\n\n // Deprecate 'streaming.forceTransmuxTS' configuration.\n if (config['streaming'] && 'forceTransmuxTS' in config['streaming']) {\n shaka.Deprecate.deprecateFeature(5,\n 'streaming.forceTransmuxTS configuration',\n 'Please Use mediaSource.forceTransmux instead.');\n config['mediaSource']['mediaSource'] =\n config['streaming']['forceTransmuxTS'];\n delete config['streaming']['forceTransmuxTS'];\n }\n\n // Deprecate 'streaming.forceTransmux' configuration.\n if (config['streaming'] && 'forceTransmux' in config['streaming']) {\n shaka.Deprecate.deprecateFeature(5,\n 'streaming.forceTransmux configuration',\n 'Please Use mediaSource.forceTransmux instead.');\n config['mediaSource']['mediaSource'] =\n config['streaming']['forceTransmux'];\n delete config['streaming']['forceTransmux'];\n }\n\n // Deprecate 'streaming.useNativeHlsOnSafari' configuration.\n if (config['streaming'] && 'useNativeHlsOnSafari' in config['streaming']) {\n shaka.Deprecate.deprecateFeature(5,\n 'streaming.useNativeHlsOnSafari configuration',\n 'Please Use streaming.useNativeHlsForFairPlay or ' +\n 'streaming.preferNativeHls instead.');\n config['streaming']['preferNativeHls'] =\n config['streaming']['useNativeHlsOnSafari'] && Platform.isApple();\n delete config['streaming']['useNativeHlsOnSafari'];\n }\n\n // Deprecate 'streaming.liveSync' boolean configuration.\n if (config['streaming'] &&\n typeof config['streaming']['liveSync'] == 'boolean') {\n shaka.Deprecate.deprecateFeature(5,\n 'streaming.liveSync',\n 'Please Use streaming.liveSync.enabled instead.');\n const liveSyncValue = config['streaming']['liveSync'];\n config['streaming']['liveSync'] = {};\n config['streaming']['liveSync']['enabled'] = liveSyncValue;\n }\n\n // map liveSyncMinLatency and liveSyncMaxLatency to liveSync.targetLatency\n // if liveSync.targetLatency isn't set.\n if (config['streaming'] && (!config['streaming']['liveSync'] ||\n !('targetLatency' in config['streaming']['liveSync'])) &&\n ('liveSyncMinLatency' in config['streaming'] ||\n 'liveSyncMaxLatency' in config['streaming'])) {\n const min = config['streaming']['liveSyncMinLatency'] || 0;\n const max = config['streaming']['liveSyncMaxLatency'] || 1;\n const mid = Math.abs(max - min) / 2;\n config['streaming']['liveSync'] = config['streaming']['liveSync'] || {};\n config['streaming']['liveSync']['targetLatency'] = min + mid;\n config['streaming']['liveSync']['targetLatencyTolerance'] = mid;\n }\n // Deprecate 'streaming.liveSyncMaxLatency' configuration.\n if (config['streaming'] && 'liveSyncMaxLatency' in config['streaming']) {\n shaka.Deprecate.deprecateFeature(5,\n 'streaming.liveSyncMaxLatency',\n 'Please Use streaming.liveSync.targetLatency and ' +\n 'streaming.liveSync.targetLatencyTolerance instead. ' +\n 'Or, set the values in your DASH manifest');\n delete config['streaming']['liveSyncMaxLatency'];\n }\n // Deprecate 'streaming.liveSyncMinLatency' configuration.\n if (config['streaming'] && 'liveSyncMinLatency' in config['streaming']) {\n shaka.Deprecate.deprecateFeature(5,\n 'streaming.liveSyncMinLatency',\n 'Please Use streaming.liveSync.targetLatency and ' +\n 'streaming.liveSync.targetLatencyTolerance instead. ' +\n 'Or, set the values in your DASH manifest');\n delete config['streaming']['liveSyncMinLatency'];\n }\n\n // Deprecate 'streaming.liveSyncTargetLatency' configuration.\n if (config['streaming'] && 'liveSyncTargetLatency' in config['streaming']) {\n shaka.Deprecate.deprecateFeature(5,\n 'streaming.liveSyncTargetLatency',\n 'Please Use streaming.liveSync.targetLatency instead.');\n config['streaming']['liveSync'] = config['streaming']['liveSync'] || {};\n config['streaming']['liveSync']['targetLatency'] =\n config['streaming']['liveSyncTargetLatency'];\n delete config['streaming']['liveSyncTargetLatency'];\n }\n\n // Deprecate 'streaming.liveSyncTargetLatencyTolerance' configuration.\n if (config['streaming'] &&\n 'liveSyncTargetLatencyTolerance' in config['streaming']) {\n shaka.Deprecate.deprecateFeature(5,\n 'streaming.liveSyncTargetLatencyTolerance',\n 'Please Use streaming.liveSync.targetLatencyTolerance instead.');\n config['streaming']['liveSync'] = config['streaming']['liveSync'] || {};\n config['streaming']['liveSync']['targetLatencyTolerance'] =\n config['streaming']['liveSyncTargetLatencyTolerance'];\n delete config['streaming']['liveSyncTargetLatencyTolerance'];\n }\n\n // Deprecate 'streaming.liveSyncPlaybackRate' configuration.\n if (config['streaming'] && 'liveSyncPlaybackRate' in config['streaming']) {\n shaka.Deprecate.deprecateFeature(5,\n 'streaming.liveSyncPlaybackRate',\n 'Please Use streaming.liveSync.maxPlaybackRate instead.');\n config['streaming']['liveSync'] = config['streaming']['liveSync'] || {};\n config['streaming']['liveSync']['maxPlaybackRate'] =\n config['streaming']['liveSyncPlaybackRate'];\n delete config['streaming']['liveSyncPlaybackRate'];\n }\n\n // Deprecate 'streaming.liveSyncMinPlaybackRate' configuration.\n if (config['streaming'] &&\n 'liveSyncMinPlaybackRate' in config['streaming']) {\n shaka.Deprecate.deprecateFeature(5,\n 'streaming.liveSyncMinPlaybackRate',\n 'Please Use streaming.liveSync.minPlaybackRate instead.');\n config['streaming']['liveSync'] = config['streaming']['liveSync'] || {};\n config['streaming']['liveSync']['minPlaybackRate'] =\n config['streaming']['liveSyncMinPlaybackRate'];\n delete config['streaming']['liveSyncMinPlaybackRate'];\n }\n\n // Deprecate 'streaming.liveSyncPanicMode' configuration.\n if (config['streaming'] && 'liveSyncPanicMode' in config['streaming']) {\n shaka.Deprecate.deprecateFeature(5,\n 'streaming.liveSyncPanicMode',\n 'Please Use streaming.liveSync.panicMode instead.');\n config['streaming']['liveSync'] = config['streaming']['liveSync'] || {};\n config['streaming']['liveSync']['panicMode'] =\n config['streaming']['liveSyncPanicMode'];\n delete config['streaming']['liveSyncPanicMode'];\n }\n\n // Deprecate 'streaming.liveSyncPanicThreshold' configuration.\n if (config['streaming'] &&\n 'liveSyncPanicThreshold' in config['streaming']) {\n shaka.Deprecate.deprecateFeature(5,\n 'streaming.liveSyncPanicThreshold',\n 'Please Use streaming.liveSync.panicThreshold instead.');\n config['streaming']['liveSync'] = config['streaming']['liveSync'] || {};\n config['streaming']['liveSync']['panicThreshold'] =\n config['streaming']['liveSyncPanicThreshold'];\n delete config['streaming']['liveSyncPanicThreshold'];\n }\n\n // Deprecate 'mediaSource.sourceBufferExtraFeatures' configuration.\n if (config['mediaSource'] &&\n 'sourceBufferExtraFeatures' in config['mediaSource']) {\n shaka.Deprecate.deprecateFeature(5,\n 'mediaSource.sourceBufferExtraFeatures configuration',\n 'Please Use mediaSource.addExtraFeaturesToSourceBuffer() instead.');\n const sourceBufferExtraFeatures =\n config['mediaSource']['sourceBufferExtraFeatures'];\n config['mediaSource']['addExtraFeaturesToSourceBuffer'] = () => {\n return sourceBufferExtraFeatures;\n };\n delete config['mediaSource']['sourceBufferExtraFeatures'];\n }\n\n // Deprecate 'manifest.hls.useSafariBehaviorForLive' configuration.\n if (config['manifest'] && config['manifest']['hls'] &&\n 'useSafariBehaviorForLive' in config['manifest']['hls']) {\n shaka.Deprecate.deprecateFeature(5,\n 'manifest.hls.useSafariBehaviorForLive configuration',\n 'Please Use liveSync config to keep on live Edge instead.');\n delete config['manifest']['hls']['useSafariBehaviorForLive'];\n }\n\n // Deprecate 'streaming.parsePrftBox' configuration.\n if (config['streaming'] && 'parsePrftBox' in config['streaming']) {\n shaka.Deprecate.deprecateFeature(5,\n 'streaming.parsePrftBox configuration',\n 'Now fired without needing a configuration.');\n delete config['streaming']['parsePrftBox'];\n }\n\n // Deprecate 'manifest.dash.enableAudioGroups' configuration.\n if (config['manifest'] && config['manifest']['dash'] &&\n 'enableAudioGroups' in config['manifest']['dash']) {\n shaka.Deprecate.deprecateFeature(5,\n 'manifest.dash.enableAudioGroups configuration',\n 'It is now enabled by default and cannot be disabled.');\n delete config['manifest']['dash']['enableAudioGroups'];\n }\n\n // Deprecate 'streaming.dispatchAllEmsgBoxes' configuration.\n if (config['streaming'] && 'dispatchAllEmsgBoxes' in config['streaming']) {\n shaka.Deprecate.deprecateFeature(5,\n 'streaming.dispatchAllEmsgBoxes configuration',\n 'Please Use mediaSource.dispatchAllEmsgBoxes instead.');\n config['mediaSource']['dispatchAllEmsgBoxes'] =\n config['streaming']['dispatchAllEmsgBoxes'];\n delete config['streaming']['dispatchAllEmsgBoxes'];\n }\n\n // If lowLatencyMode is enabled, and inaccurateManifestTolerance and\n // rebufferingGoal and segmentPrefetchLimit and baseDelay and\n // autoCorrectDrift and maxDisabledTime are not specified, set\n // inaccurateManifestTolerance to 0 and rebufferingGoal to 0.01 and\n // segmentPrefetchLimit to 2 and updateIntervalSeconds to 0.1 and and\n // baseDelay to 100 and autoCorrectDrift to false and maxDisabledTime\n // to 1 by default for low latency streaming.\n if (config['streaming'] && config['streaming']['lowLatencyMode']) {\n if (config['streaming']['inaccurateManifestTolerance'] == undefined) {\n config['streaming']['inaccurateManifestTolerance'] = 0;\n }\n if (config['streaming']['rebufferingGoal'] == undefined) {\n config['streaming']['rebufferingGoal'] = 0.01;\n }\n if (config['streaming']['segmentPrefetchLimit'] == undefined) {\n config['streaming']['segmentPrefetchLimit'] = 2;\n }\n if (config['streaming']['updateIntervalSeconds'] == undefined) {\n config['streaming']['updateIntervalSeconds'] = 0.1;\n }\n if (config['streaming']['maxDisabledTime'] == undefined) {\n config['streaming']['maxDisabledTime'] = 1;\n }\n if (config['streaming']['retryParameters'] == undefined) {\n config['streaming']['retryParameters'] = {};\n }\n if (config['streaming']['retryParameters']['baseDelay'] == undefined) {\n config['streaming']['retryParameters']['baseDelay'] = 100;\n }\n if (config['manifest'] == undefined) {\n config['manifest'] = {};\n }\n if (config['manifest']['dash'] == undefined) {\n config['manifest']['dash'] = {};\n }\n if (config['manifest']['dash']['autoCorrectDrift'] == undefined) {\n config['manifest']['dash']['autoCorrectDrift'] = false;\n }\n if (config['manifest']['retryParameters'] == undefined) {\n config['manifest']['retryParameters'] = {};\n }\n if (config['manifest']['retryParameters']['baseDelay'] == undefined) {\n config['manifest']['retryParameters']['baseDelay'] = 100;\n }\n if (config['drm'] == undefined) {\n config['drm'] = {};\n }\n if (config['drm']['retryParameters'] == undefined) {\n config['drm']['retryParameters'] = {};\n }\n if (config['drm']['retryParameters']['baseDelay'] == undefined) {\n config['drm']['retryParameters']['baseDelay'] = 100;\n }\n }\n const ret = shaka.util.PlayerConfiguration.mergeConfigObjects(\n this.config_, config, this.defaultConfig_());\n\n this.applyConfig_();\n return ret;\n }\n\n /**\n * Apply config changes.\n * @private\n */\n applyConfig_() {\n this.manifestFilterer_ = new shaka.media.ManifestFilterer(\n this.config_, this.maxHwRes_, this.drmEngine_);\n if (this.parser_) {\n const manifestConfig =\n shaka.util.ObjectUtils.cloneObject(this.config_.manifest);\n // Don't read video segments if the player is attached to an audio element\n if (this.video_ && this.video_.nodeName === 'AUDIO') {\n manifestConfig.disableVideo = true;\n }\n this.parser_.configure(manifestConfig);\n }\n if (this.drmEngine_) {\n this.drmEngine_.configure(this.config_.drm);\n }\n if (this.streamingEngine_) {\n this.streamingEngine_.configure(this.config_.streaming);\n\n // Need to apply the restrictions.\n // this.filterManifestWithRestrictions_() may throw.\n try {\n if (this.loadMode_ != shaka.Player.LoadMode.DESTROYED) {\n if (this.manifestFilterer_.filterManifestWithRestrictions(\n this.manifest_)) {\n this.onTracksChanged_();\n }\n }\n } catch (error) {\n this.onError_(error);\n }\n\n if (this.abrManager_) {\n // Update AbrManager variants to match these new settings.\n this.updateAbrManagerVariants_();\n }\n\n // If the streams we are playing are restricted, we need to switch.\n const activeVariant = this.streamingEngine_.getCurrentVariant();\n if (activeVariant) {\n if (!activeVariant.allowedByApplication ||\n !activeVariant.allowedByKeySystem) {\n shaka.log.debug('Choosing new variant after changing configuration');\n this.chooseVariantAndSwitch_();\n }\n }\n }\n if (this.networkingEngine_) {\n this.networkingEngine_.setForceHTTP(this.config_.streaming.forceHTTP);\n this.networkingEngine_.setForceHTTPS(this.config_.streaming.forceHTTPS);\n this.networkingEngine_.setMinBytesForProgressEvents(\n this.config_.streaming.minBytesForProgressEvents);\n }\n\n if (this.mediaSourceEngine_) {\n this.mediaSourceEngine_.configure(this.config_.mediaSource);\n const {segmentRelativeVttTiming} = this.config_.manifest;\n this.mediaSourceEngine_.setSegmentRelativeVttTiming(\n segmentRelativeVttTiming);\n }\n\n if (this.textDisplayer_) {\n const textDisplayerFactory = this.config_.textDisplayFactory;\n if (this.lastTextFactory_ != textDisplayerFactory) {\n const oldDisplayer = this.textDisplayer_;\n this.textDisplayer_ = textDisplayerFactory();\n if (this.textDisplayer_.configure) {\n this.textDisplayer_.configure(this.config_.textDisplayer);\n } else {\n shaka.Deprecate.deprecateFeature(5,\n 'Text displayer w/ configure',\n 'Text displayer should have a \"configure\" method!');\n }\n if (!this.textDisplayer_.setTextLanguage) {\n shaka.Deprecate.deprecateFeature(5,\n 'Text displayer w/ setTextLanguage',\n 'Text displayer should have a \"setTextLanguage\" method!');\n }\n this.textDisplayer_.setTextVisibility(oldDisplayer.isTextVisible());\n oldDisplayer.destroy();\n if (this.mediaSourceEngine_) {\n this.mediaSourceEngine_.setTextDisplayer(this.textDisplayer_);\n }\n this.lastTextFactory_ = textDisplayerFactory;\n\n if (this.streamingEngine_) {\n // Reload the text stream, so the cues will load again.\n this.streamingEngine_.reloadTextStream();\n }\n } else {\n if (this.textDisplayer_.configure) {\n this.textDisplayer_.configure(this.config_.textDisplayer);\n }\n }\n }\n\n if (this.abrManager_) {\n this.abrManager_.configure(this.config_.abr);\n // Simply enable/disable ABR with each call, since multiple calls to these\n // methods have no effect.\n if (this.config_.abr.enabled) {\n this.abrManager_.enable();\n } else {\n this.abrManager_.disable();\n }\n\n this.onAbrStatusChanged_();\n }\n if (this.bufferObserver_) {\n let rebufferThreshold = this.config_.streaming.rebufferingGoal;\n if (this.manifest_) {\n rebufferThreshold =\n Math.max(rebufferThreshold, this.manifest_.minBufferTime);\n }\n this.updateBufferingSettings_(rebufferThreshold);\n }\n\n if (this.manifest_) {\n shaka.Player.applyPlayRange_(this.manifest_.presentationTimeline,\n this.config_.playRangeStart,\n this.config_.playRangeEnd);\n }\n if (this.adManager_) {\n this.adManager_.configure(this.config_.ads);\n }\n if (this.cmcdManager_) {\n this.cmcdManager_.configure(this.config_.cmcd);\n }\n if (this.cmsdManager_) {\n this.cmsdManager_.configure(this.config_.cmsd);\n }\n }\n\n /**\n * Return a copy of the current configuration. Modifications of the returned\n * value will not affect the Player's active configuration. You must call\n * player.configure() to make changes.\n *\n * @return {shaka.extern.PlayerConfiguration}\n * @export\n */\n getConfiguration() {\n goog.asserts.assert(this.config_, 'Config must not be null!');\n\n const ret = this.defaultConfig_();\n shaka.util.PlayerConfiguration.mergeConfigObjects(\n ret, this.config_, this.defaultConfig_());\n return ret;\n }\n\n /**\n * Return a copy of the current non default configuration. Modifications of\n * the returned value will not affect the Player's active configuration.\n * You must call player.configure() to make changes.\n *\n * @return {!Object}\n * @export\n */\n getNonDefaultConfiguration() {\n goog.asserts.assert(this.config_, 'Config must not be null!');\n\n const ret = this.defaultConfig_();\n shaka.util.PlayerConfiguration.mergeConfigObjects(\n ret, this.config_, this.defaultConfig_());\n return shaka.util.ConfigUtils.getDifferenceFromConfigObjects(\n this.config_, this.defaultConfig_());\n }\n\n /**\n * Return a reference to the current configuration. Modifications to the\n * returned value will affect the Player's active configuration. This method\n * is not exported as sharing configuration with external objects is not\n * supported.\n *\n * @return {shaka.extern.PlayerConfiguration}\n */\n getSharedConfiguration() {\n goog.asserts.assert(\n this.config_, 'Cannot call getSharedConfiguration after call destroy!');\n return this.config_;\n }\n\n /**\n * Returns the ratio of video length buffered compared to buffering Goal\n * @return {number}\n * @export\n */\n getBufferFullness() {\n if (this.video_) {\n const bufferedLength = this.video_.buffered.length;\n const bufferedEnd =\n bufferedLength ? this.video_.buffered.end(bufferedLength - 1) : 0;\n const bufferingGoal = this.getConfiguration().streaming.bufferingGoal;\n const lengthToBeBuffered = Math.min(this.video_.currentTime +\n bufferingGoal, this.seekRange().end);\n\n if (bufferedEnd >= lengthToBeBuffered) {\n return 1;\n } else if (bufferedEnd <= this.video_.currentTime) {\n return 0;\n } else if (bufferedEnd < lengthToBeBuffered) {\n return ((bufferedEnd - this.video_.currentTime) /\n (lengthToBeBuffered - this.video_.currentTime));\n }\n }\n return 0;\n }\n\n /**\n * Reset configuration to default.\n * @export\n */\n resetConfiguration() {\n goog.asserts.assert(this.config_, 'Cannot be destroyed');\n // Remove the old keys so we remove open-ended dictionaries like drm.servers\n // but keeps the same object reference.\n for (const key in this.config_) {\n delete this.config_[key];\n }\n\n shaka.util.PlayerConfiguration.mergeConfigObjects(\n this.config_, this.defaultConfig_(), this.defaultConfig_());\n this.applyConfig_();\n }\n\n /**\n * Get the current load mode.\n *\n * @return {shaka.Player.LoadMode}\n * @export\n */\n getLoadMode() {\n return this.loadMode_;\n }\n\n /**\n * Get the current manifest type.\n *\n * @return {?string}\n * @export\n */\n getManifestType() {\n if (!this.manifest_) {\n return null;\n }\n return this.manifest_.type;\n }\n\n /**\n * Get the media element that the player is currently using to play loaded\n * content. If the player has not loaded content, this will return\n * null.\n *\n * @return {HTMLMediaElement}\n * @export\n */\n getMediaElement() {\n return this.video_;\n }\n\n /**\n * @return {shaka.net.NetworkingEngine} A reference to the Player's networking\n * engine. Applications may use this to make requests through Shaka's\n * networking plugins.\n * @export\n */\n getNetworkingEngine() {\n return this.networkingEngine_;\n }\n\n /**\n * Get the uri to the asset that the player has loaded. If the player has not\n * loaded content, this will return null.\n *\n * @return {?string}\n * @export\n */\n getAssetUri() {\n return this.assetUri_;\n }\n\n /**\n * Returns a shaka.ads.AdManager instance, responsible for Dynamic\n * Ad Insertion functionality.\n *\n * @return {shaka.extern.IAdManager}\n * @export\n */\n getAdManager() {\n // NOTE: this clause is redundant, but it keeps the compiler from\n // inlining this function. Inlining leads to setting the adManager\n // not taking effect in the compiled build.\n // Closure has a @noinline flag, but apparently not all cases are\n // supported by it, and ours isn't.\n // If they expand support, we might be able to get rid of this\n // clause.\n if (!this.adManager_) {\n return null;\n }\n\n return this.adManager_;\n }\n\n /**\n * Get if the player is playing live content. If the player has not loaded\n * content, this will return false.\n *\n * @return {boolean}\n * @export\n */\n isLive() {\n if (this.manifest_ && !this.isRemotePlayback()) {\n return this.manifest_.presentationTimeline.isLive();\n }\n\n // For native HLS, the duration for live streams seems to be Infinity.\n if (this.video_ && this.video_.src) {\n return this.video_.duration == Infinity;\n }\n\n return false;\n }\n\n /**\n * Get if the player is playing in-progress content. If the player has not\n * loaded content, this will return false.\n *\n * @return {boolean}\n * @export\n */\n isInProgress() {\n return this.manifest_ ?\n this.manifest_.presentationTimeline.isInProgress() :\n false;\n }\n\n /**\n * Check if the manifest contains only audio-only content. If the player has\n * not loaded content, this will return false.\n *\n *

\n * The player does not support content that contain more than one type of\n * variants (i.e. mixing audio-only, video-only, audio-video). Content will be\n * filtered to only contain one type of variant.\n *\n * @return {boolean}\n * @export\n */\n isAudioOnly() {\n if (this.manifest_ && !this.isRemotePlayback()) {\n const variants = this.manifest_.variants;\n if (!variants.length) {\n return false;\n }\n\n // Note that if there are some audio-only variants and some audio-video\n // variants, the audio-only variants are removed during filtering.\n // Therefore if the first variant has no video, that's sufficient to say\n // it is audio-only content.\n return !variants[0].video;\n } else if (this.video_ && this.video_.src) {\n // If we have video track info, use that. It will be the least\n // error-prone way with native HLS. In contrast, videoHeight might be\n // unset until the first frame is loaded. Since isAudioOnly is queried\n // by the UI on the 'trackschanged' event, the videoTracks info should be\n // up-to-date.\n if (this.video_.videoTracks) {\n return this.video_.videoTracks.length == 0;\n }\n\n // We cast to the more specific HTMLVideoElement to access videoHeight.\n // This might be an audio element, though, in which case videoHeight will\n // be undefined at runtime. For audio elements, this will always return\n // true.\n const video = /** @type {HTMLVideoElement} */(this.video_);\n return video.videoHeight == 0;\n } else {\n return false;\n }\n }\n\n /**\n * Get the range of time (in seconds) that seeking is allowed. If the player\n * has not loaded content and the manifest is HLS, this will return a range\n * from 0 to 0.\n *\n * @return {{start: number, end: number}}\n * @export\n */\n seekRange() {\n if (this.manifest_ && !this.isRemotePlayback()) {\n // With HLS lazy-loading, there were some situations where the manifest\n // had partially loaded, enough to move onto further load stages, but no\n // segments had been loaded, so the timeline is still unknown.\n // See: https://github.com/shaka-project/shaka-player/pull/4590\n if (!this.fullyLoaded_ &&\n this.manifest_.type == shaka.media.ManifestParser.HLS) {\n return {'start': 0, 'end': 0};\n }\n const timeline = this.manifest_.presentationTimeline;\n\n return {\n 'start': timeline.getSeekRangeStart(),\n 'end': timeline.getSeekRangeEnd(),\n };\n }\n\n // If we have loaded content with src=, we ask the video element for its\n // seekable range. This covers both plain mp4s and native HLS playbacks.\n if (this.video_ && this.video_.src) {\n const seekable = this.video_.seekable;\n if (seekable && seekable.length) {\n const playRangeStart =\n this.config_ ? this.config_.playRangeStart : 0;\n const start = Math.max(seekable.start(0), playRangeStart);\n const playRangeEnd =\n this.config_ ? this.config_.playRangeEnd : Infinity;\n const end = Math.min(seekable.end(seekable.length - 1), playRangeEnd);\n return {\n 'start': start,\n 'end': end,\n };\n }\n }\n\n return {'start': 0, 'end': 0};\n }\n\n /**\n * Go to live in a live stream.\n *\n * @export\n */\n goToLive() {\n if (this.isLive()) {\n this.video_.currentTime = this.seekRange().end;\n } else {\n shaka.log.warning('goToLive is for live streams!');\n }\n }\n\n /**\n * Indicates if the player has fully loaded the stream.\n *\n * @return {boolean}\n * @export\n */\n isFullyLoaded() {\n return this.fullyLoaded_;\n }\n\n /**\n * Get the key system currently used by EME. If EME is not being used, this\n * will return an empty string. If the player has not loaded content, this\n * will return an empty string.\n *\n * @return {string}\n * @export\n */\n keySystem() {\n return shaka.util.DrmUtils.keySystem(this.drmInfo());\n }\n\n /**\n * Get the drm info used to initialize EME. If EME is not being used, this\n * will return null. If the player is idle or has not initialized\n * EME yet, this will return null.\n *\n * @return {?shaka.extern.DrmInfo}\n * @export\n */\n drmInfo() {\n return this.drmEngine_ ? this.drmEngine_.getDrmInfo() : null;\n }\n\n\n /**\n * Get the drm engine.\n * This method should only be used for testing. Applications SHOULD NOT\n * use this in production.\n *\n * @return {?shaka.media.DrmEngine}\n */\n getDrmEngine() {\n return this.drmEngine_;\n }\n\n\n /**\n * Get the next known expiration time for any EME session. If the session\n * never expires, this will return Infinity. If there are no EME\n * sessions, this will return Infinity. If the player has not\n * loaded content, this will return Infinity.\n *\n * @return {number}\n * @export\n */\n getExpiration() {\n return this.drmEngine_ ? this.drmEngine_.getExpiration() : Infinity;\n }\n\n /**\n * Returns the active sessions metadata\n *\n * @return {!Array.}\n * @export\n */\n getActiveSessionsMetadata() {\n return this.drmEngine_ ? this.drmEngine_.getActiveSessionsMetadata() : [];\n }\n\n /**\n * Gets a map of EME key ID to the current key status.\n *\n * @return {!Object}\n * @export\n */\n getKeyStatuses() {\n return this.drmEngine_ ? this.drmEngine_.getKeyStatuses() : {};\n }\n\n /**\n * Check if the player is currently in a buffering state (has too little\n * content to play smoothly). If the player has not loaded content, this will\n * return false.\n *\n * @return {boolean}\n * @export\n */\n isBuffering() {\n const State = shaka.media.BufferingObserver.State;\n return this.bufferObserver_ ?\n this.bufferObserver_.getState() == State.STARVING :\n false;\n }\n\n /**\n * Get the playback rate of what is playing right now. If we are using trick\n * play, this will return the trick play rate.\n * If no content is playing, this will return 0.\n * If content is buffering, this will return the expected playback rate once\n * the video starts playing.\n *\n *

\n * If the player has not loaded content, this will return a playback rate of\n * 0.\n *\n * @return {number}\n * @export\n */\n getPlaybackRate() {\n if (!this.video_) {\n return 0;\n }\n return this.playRateController_ ?\n this.playRateController_.getRealRate() :\n 1;\n }\n\n /**\n * Enable trick play to skip through content without playing by repeatedly\n * seeking. For example, a rate of 2.5 would result in 2.5 seconds of content\n * being skipped every second. A negative rate will result in moving\n * backwards.\n *\n *

\n * If the player has not loaded content or is still loading content this will\n * be a no-op. Wait until load has completed before calling.\n *\n *

\n * Trick play will be canceled automatically if the playhead hits the\n * beginning or end of the seekable range for the content.\n *\n * @param {number} rate\n * @param {boolean=} useTrickPlayTrack\n * @export\n */\n trickPlay(rate, useTrickPlayTrack = true) {\n // A playbackRate of 0 is used internally when we are in a buffering state,\n // and doesn't make sense for trick play. If you set a rate of 0 for trick\n // play, we will reject it and issue a warning. If it happens during a\n // test, we will fail the test through this assertion.\n goog.asserts.assert(rate != 0, 'Should never set a trick play rate of 0!');\n if (rate == 0) {\n shaka.log.alwaysWarn('A trick play rate of 0 is unsupported!');\n return;\n }\n this.trickPlayEventManager_.removeAll();\n\n this.playRateController_.set(rate);\n\n if (this.loadMode_ == shaka.Player.LoadMode.MEDIA_SOURCE) {\n this.abrManager_.playbackRateChanged(rate);\n this.streamingEngine_.setTrickPlay(\n useTrickPlayTrack && Math.abs(rate) > 1);\n }\n if (this.isLive()) {\n this.trickPlayEventManager_.listen(this.video_, 'timeupdate', () => {\n const currentTime = this.video_.currentTime;\n const seekRange = this.seekRange();\n const safeSeekOffset = this.config_.streaming.safeSeekOffset;\n\n // Cancel trick play if we hit the beginning or end of the seekable\n // (Sub-second accuracy not required here)\n if (rate > 0) {\n if (Math.floor(currentTime) >= Math.floor(seekRange.end)) {\n this.cancelTrickPlay();\n }\n } else {\n if (Math.floor(currentTime) <=\n Math.floor(seekRange.start + safeSeekOffset)) {\n this.cancelTrickPlay();\n }\n }\n });\n }\n }\n\n /**\n * Cancel trick-play. If the player has not loaded content or is still loading\n * content this will be a no-op.\n *\n * @export\n */\n cancelTrickPlay() {\n const defaultPlaybackRate = this.playRateController_.getDefaultRate();\n if (this.loadMode_ == shaka.Player.LoadMode.SRC_EQUALS) {\n this.playRateController_.set(defaultPlaybackRate);\n }\n\n if (this.loadMode_ == shaka.Player.LoadMode.MEDIA_SOURCE) {\n this.playRateController_.set(defaultPlaybackRate);\n this.abrManager_.playbackRateChanged(defaultPlaybackRate);\n this.streamingEngine_.setTrickPlay(false);\n }\n this.trickPlayEventManager_.removeAll();\n }\n\n /**\n * Return a list of variant tracks that can be switched to.\n *\n *

\n * If the player has not loaded content, this will return an empty list.\n *\n * @return {!Array.}\n * @export\n */\n getVariantTracks() {\n if (this.manifest_ && !this.isRemotePlayback()) {\n const currentVariant = this.streamingEngine_ ?\n this.streamingEngine_.getCurrentVariant() : null;\n\n const tracks = [];\n\n let activeTracks = 0;\n\n // Convert each variant to a track.\n for (const variant of this.manifest_.variants) {\n if (!shaka.util.StreamUtils.isPlayable(variant)) {\n continue;\n }\n\n const track = shaka.util.StreamUtils.variantToTrack(variant);\n track.active = variant == currentVariant;\n if (!track.active && activeTracks != 1 && currentVariant != null &&\n variant.video == currentVariant.video &&\n variant.audio == currentVariant.audio) {\n track.active = true;\n }\n\n if (track.active) {\n activeTracks++;\n }\n\n tracks.push(track);\n }\n\n goog.asserts.assert(activeTracks <= 1,\n 'It should only have one active track');\n\n return tracks;\n } else if (this.video_ && this.video_.audioTracks) {\n // Safari's native HLS always shows a single element in videoTracks.\n // You can't use that API to change resolutions. But we can use\n // audioTracks to generate a variant list that is usable for changing\n // languages.\n const audioTracks = Array.from(this.video_.audioTracks);\n return audioTracks.map((audio) =>\n shaka.util.StreamUtils.html5AudioTrackToTrack(audio));\n } else {\n return [];\n }\n }\n\n /**\n * Return a list of text tracks that can be switched to.\n *\n *

\n * If the player has not loaded content, this will return an empty list.\n *\n * @return {!Array.}\n * @export\n */\n getTextTracks() {\n if (this.manifest_ && !this.isRemotePlayback()) {\n const currentTextStream = this.streamingEngine_ ?\n this.streamingEngine_.getCurrentTextStream() : null;\n const tracks = [];\n\n // Convert all selectable text streams to tracks.\n for (const text of this.manifest_.textStreams) {\n const track = shaka.util.StreamUtils.textStreamToTrack(text);\n track.active = text == currentTextStream;\n\n tracks.push(track);\n }\n\n return tracks;\n } else if (this.video_ && this.video_.src && this.video_.textTracks) {\n const textTracks = this.getFilteredTextTracks_();\n const StreamUtils = shaka.util.StreamUtils;\n return textTracks.map((text) => StreamUtils.html5TextTrackToTrack(text));\n } else {\n return [];\n }\n }\n\n /**\n * Return a list of image tracks that can be switched to.\n *\n * If the player has not loaded content, this will return an empty list.\n *\n * @return {!Array.}\n * @export\n */\n getImageTracks() {\n const StreamUtils = shaka.util.StreamUtils;\n let imageStreams = this.externalSrcEqualsThumbnailsStreams_;\n if (this.manifest_) {\n imageStreams = this.manifest_.imageStreams;\n }\n return imageStreams.map((image) => StreamUtils.imageStreamToTrack(image));\n }\n\n /**\n * Returns Thumbnail objects for each thumbnail for a given image track ID.\n *\n * If the player has not loaded content, this will return a null.\n *\n * @param {number} trackId\n * @return {!Promise.>}\n * @export\n */\n async getAllThumbnails(trackId) {\n if (this.loadMode_ != shaka.Player.LoadMode.MEDIA_SOURCE &&\n this.loadMode_ != shaka.Player.LoadMode.SRC_EQUALS) {\n return null;\n }\n let imageStreams = this.externalSrcEqualsThumbnailsStreams_;\n if (this.manifest_) {\n imageStreams = this.manifest_.imageStreams;\n }\n const imageStream = imageStreams.find(\n (stream) => stream.id == trackId);\n if (!imageStream) {\n return null;\n }\n if (!imageStream.segmentIndex) {\n await imageStream.createSegmentIndex();\n }\n const promises = [];\n imageStream.segmentIndex.forEachTopLevelReference((reference) => {\n const dimensions = this.parseTilesLayout_(\n reference.getTilesLayout() || imageStream.tilesLayout);\n if (dimensions) {\n const numThumbnails = dimensions.rows * dimensions.columns;\n const duration = reference.trueEndTime - reference.startTime;\n for (let i = 0; i < numThumbnails; i++) {\n const sampleTime = reference.startTime + duration * i / numThumbnails;\n promises.push(this.getThumbnails(trackId, sampleTime));\n }\n }\n });\n const thumbnails = await Promise.all(promises);\n return thumbnails.filter((t) => t);\n }\n\n /**\n * Parses a tiles layout.\n *\n * @param {string|undefined} tilesLayout\n * @return {?{\n * columns: number,\n * rows: number\n * }}\n * @private\n */\n parseTilesLayout_(tilesLayout) {\n if (!tilesLayout) {\n return null;\n }\n // This expression is used to detect one or more numbers (0-9) followed\n // by an x and after one or more numbers (0-9)\n const match = /(\\d+)x(\\d+)/.exec(tilesLayout);\n if (!match) {\n shaka.log.warning('Tiles layout does not contain a valid format ' +\n ' (columns x rows)');\n return null;\n }\n const columns = parseInt(match[1], 10);\n const rows = parseInt(match[2], 10);\n return {columns, rows};\n }\n\n /**\n * Return a Thumbnail object from a image track Id and time.\n *\n * If the player has not loaded content, this will return a null.\n *\n * @param {number} trackId\n * @param {number} time\n * @return {!Promise.}\n * @export\n */\n async getThumbnails(trackId, time) {\n if (this.loadMode_ != shaka.Player.LoadMode.MEDIA_SOURCE &&\n this.loadMode_ != shaka.Player.LoadMode.SRC_EQUALS) {\n return null;\n }\n let imageStreams = this.externalSrcEqualsThumbnailsStreams_;\n if (this.manifest_) {\n imageStreams = this.manifest_.imageStreams;\n }\n const imageStream = imageStreams.find(\n (stream) => stream.id == trackId);\n if (!imageStream) {\n return null;\n }\n if (!imageStream.segmentIndex) {\n await imageStream.createSegmentIndex();\n }\n const referencePosition = imageStream.segmentIndex.find(time);\n if (referencePosition == null) {\n return null;\n }\n const reference = imageStream.segmentIndex.get(referencePosition);\n const dimensions = this.parseTilesLayout_(\n reference.getTilesLayout() || imageStream.tilesLayout);\n if (!dimensions) {\n return null;\n }\n const fullImageWidth = imageStream.width || 0;\n const fullImageHeight = imageStream.height || 0;\n let width = fullImageWidth / dimensions.columns;\n let height = fullImageHeight / dimensions.rows;\n const totalImages = dimensions.columns * dimensions.rows;\n const segmentDuration = reference.trueEndTime - reference.startTime;\n const thumbnailDuration =\n reference.getTileDuration() || (segmentDuration / totalImages);\n let thumbnailTime = reference.startTime;\n let positionX = 0;\n let positionY = 0;\n // If the number of images in the segment is greater than 1, we have to\n // find the correct image. For that we will return to the app the\n // coordinates of the position of the correct image.\n // Image search is always from left to right and top to bottom.\n // Note: The time between images within the segment is always\n // equidistant.\n //\n // Eg: Total images 5, tileLayout 5x1, segmentDuration 5, thumbnailTime 2\n // positionX = 0.4 * fullImageWidth\n // positionY = 0\n if (totalImages > 1) {\n const thumbnailPosition =\n Math.floor((time - reference.startTime) / thumbnailDuration);\n thumbnailTime = reference.startTime +\n (thumbnailPosition * thumbnailDuration);\n positionX = (thumbnailPosition % dimensions.columns) * width;\n positionY = Math.floor(thumbnailPosition / dimensions.columns) * height;\n }\n let sprite = false;\n const thumbnailSprite = reference.getThumbnailSprite();\n if (thumbnailSprite) {\n sprite = true;\n height = thumbnailSprite.height;\n positionX = thumbnailSprite.positionX;\n positionY = thumbnailSprite.positionY;\n width = thumbnailSprite.width;\n }\n return {\n segment: reference,\n imageHeight: fullImageHeight,\n imageWidth: fullImageWidth,\n height: height,\n positionX: positionX,\n positionY: positionY,\n startTime: thumbnailTime,\n duration: thumbnailDuration,\n uris: reference.getUris(),\n width: width,\n sprite: sprite,\n };\n }\n\n /**\n * Select a specific text track. track should come from a call to\n * getTextTracks. If the track is not found, this will be a\n * no-op. If the player has not loaded content, this will be a no-op.\n *\n *

\n * Note that AdaptationEvents are not fired for manual track\n * selections.\n *\n * @param {shaka.extern.Track} track\n * @export\n */\n selectTextTrack(track) {\n const selectMediaSourceMode = () => {\n const stream = this.manifest_.textStreams.find(\n (stream) => stream.id == track.id);\n\n if (!stream) {\n if (!this.isRemotePlayback()) {\n shaka.log.error('No stream with id', track.id);\n }\n return;\n }\n\n if (stream == this.streamingEngine_.getCurrentTextStream()) {\n shaka.log.debug('Text track already selected.');\n return;\n }\n\n // Add entries to the history.\n this.addTextStreamToSwitchHistory_(stream, /* fromAdaptation= */ false);\n this.streamingEngine_.switchTextStream(stream);\n this.onTextChanged_();\n this.setTextDisplayerLanguage_();\n\n // Workaround for\n // https://github.com/shaka-project/shaka-player/issues/1299\n // When track is selected, back-propagate the language to\n // currentTextLanguage_.\n this.currentTextLanguage_ = stream.language;\n };\n const selectSrcEqualsMode = () => {\n if (this.video_ && this.video_.textTracks) {\n const textTracks = this.getFilteredTextTracks_();\n const oldTrack = textTracks.find((textTrack) =>\n textTrack.mode !== 'disabled');\n const newTrack = textTracks.find((textTrack) =>\n shaka.util.StreamUtils.html5TrackId(textTrack) === track.id);\n if (!newTrack) {\n shaka.log.error('No track with id', track.id);\n return;\n }\n if (oldTrack !== newTrack) {\n if (oldTrack) {\n oldTrack.mode = 'disabled';\n this.loadEventManager_.unlisten(oldTrack, 'cuechange');\n this.textDisplayer_.remove(0, Infinity);\n }\n if (newTrack) {\n this.enableNativeTrack_(newTrack);\n }\n }\n this.onTextChanged_();\n this.setTextDisplayerLanguage_();\n }\n };\n if (this.manifest_ && this.playhead_) {\n selectMediaSourceMode();\n // When using MSE + remote we need to set tracks for both MSE and native\n // apis so that synchronization is maintained.\n if (!this.isRemotePlayback()) {\n return;\n }\n }\n selectSrcEqualsMode();\n }\n\n /**\n * @param {!TextTrack} track\n * @private\n */\n enableNativeTrack_(track) {\n this.loadEventManager_.listen(track, 'cuechange', () => {\n // Always remove cues from the past to avoid memory grow.\n const removeEnd = Math.max(0,\n this.video_.currentTime - this.config_.streaming.bufferBehind);\n this.textDisplayer_.remove(0, removeEnd);\n const cues = Array.from(track.activeCues || [])\n .map(shaka.text.Utils.mapNativeCueToShakaCue)\n .filter(shaka.util.Functional.isNotNull);\n this.textDisplayer_.append(cues);\n });\n track.mode = document.pictureInPictureElement ? 'showing' : 'hidden';\n }\n\n /**\n * Select a specific variant track to play. track should come\n * from a call to getVariantTracks. If track cannot\n * be found, this will be a no-op. If the player has not loaded content, this\n * will be a no-op.\n *\n *

\n * Changing variants will take effect once the currently buffered content has\n * been played. To force the change to happen sooner, use\n * clearBuffer with safeMargin. Setting\n * clearBuffer to true will clear all buffered\n * content after safeMargin, allowing the new variant to start\n * playing sooner.\n *\n *

\n * Note that AdaptationEvents are not fired for manual track\n * selections.\n *\n * @param {shaka.extern.Track} track\n * @param {boolean=} clearBuffer\n * @param {number=} safeMargin Optional amount of buffer (in seconds) to\n * retain when clearing the buffer. Useful for switching variant quickly\n * without causing a buffering event. Defaults to 0 if not provided. Ignored\n * if clearBuffer is false. Can cause hiccups on some browsers if chosen too\n * small, e.g. The amount of two segments is a fair minimum to consider as\n * safeMargin value.\n * @export\n */\n selectVariantTrack(track, clearBuffer = false, safeMargin = 0) {\n const selectMediaSourceMode = () => {\n const variant = this.manifest_.variants.find(\n (variant) => variant.id == track.id);\n if (!variant) {\n if (!this.isRemotePlayback()) {\n shaka.log.error('No variant with id', track.id);\n }\n return;\n }\n\n // Double check that the track is allowed to be played. The track list\n // should only contain playable variants, but if restrictions change and\n // |selectVariantTrack| is called before the track list is updated, we\n // could get a now-restricted variant.\n if (!shaka.util.StreamUtils.isPlayable(variant)) {\n shaka.log.error('Unable to switch to restricted track', track.id);\n return;\n }\n\n const active = this.streamingEngine_.getCurrentVariant();\n if (this.config_.abr.enabled && (active.video != variant.video ||\n (active.audio && variant.audio &&\n active.audio.language == variant.audio.language &&\n active.audio.channelsCount == variant.audio.channelsCount))) {\n shaka.log.alwaysWarn('Changing tracks while abr manager is enabled ' +\n 'will likely result in the selected track ' +\n 'being overriden. Consider disabling abr before ' +\n 'calling selectVariantTrack().');\n }\n\n if (this.isRemotePlayback()) {\n this.switchVariant_(\n variant, /* fromAdaptation= */ false,\n /* clearBuffer= */ false, /* safeMargin= */ 0);\n } else {\n this.switchVariant_(\n variant, /* fromAdaptation= */ false,\n clearBuffer || false, safeMargin || 0);\n }\n\n // Workaround for\n // https://github.com/shaka-project/shaka-player/issues/1299\n // When track is selected, back-propagate the language to\n // currentAudioLanguage_.\n this.currentAdaptationSetCriteria_ = new shaka.media.ExampleBasedCriteria(\n variant,\n this.config_.mediaSource.codecSwitchingStrategy);\n\n // Update AbrManager variants to match these new settings.\n this.updateAbrManagerVariants_();\n };\n const selectSrcEqualsMode = () => {\n if (this.video_ && this.video_.audioTracks) {\n // Safari's native HLS won't let you choose an explicit variant, though\n // you can choose audio languages this way.\n const audioTracks = Array.from(this.video_.audioTracks);\n for (const audioTrack of audioTracks) {\n if (shaka.util.StreamUtils.html5TrackId(audioTrack) == track.id) {\n // This will reset the \"enabled\" of other tracks to false.\n this.switchHtml5Track_(audioTrack);\n return;\n }\n }\n }\n };\n if (this.manifest_ && this.playhead_) {\n selectMediaSourceMode();\n // When using MSE + remote we need to set tracks for both MSE and native\n // apis so that synchronization is maintained.\n if (!this.isRemotePlayback()) {\n return;\n }\n }\n selectSrcEqualsMode();\n }\n\n /**\n * Return a list of audio language-role combinations available. If the\n * player has not loaded any content, this will return an empty list.\n *\n * @return {!Array.}\n * @export\n */\n getAudioLanguagesAndRoles() {\n return shaka.Player.getLanguageAndRolesFrom_(this.getVariantTracks());\n }\n\n /**\n * Return a list of text language-role combinations available. If the player\n * has not loaded any content, this will be return an empty list.\n *\n * @return {!Array.}\n * @export\n */\n getTextLanguagesAndRoles() {\n return shaka.Player.getLanguageAndRolesFrom_(this.getTextTracks());\n }\n\n /**\n * Return a list of audio languages available. If the player has not loaded\n * any content, this will return an empty list.\n *\n * @return {!Array.}\n * @export\n */\n getAudioLanguages() {\n return Array.from(shaka.Player.getLanguagesFrom_(this.getVariantTracks()));\n }\n\n /**\n * Return a list of text languages available. If the player has not loaded\n * any content, this will return an empty list.\n *\n * @return {!Array.}\n * @export\n */\n getTextLanguages() {\n return Array.from(shaka.Player.getLanguagesFrom_(this.getTextTracks()));\n }\n\n /**\n * Sets the current audio language and current variant role to the selected\n * language, role and channel count, and chooses a new variant if need be.\n * If the player has not loaded any content, this will be a no-op.\n *\n * @param {string} language\n * @param {string=} role\n * @param {number=} channelsCount\n * @param {number=} safeMargin\n * @param {string=} codec\n * @export\n */\n selectAudioLanguage(language, role, channelsCount = 0, safeMargin = 0,\n codec = '') {\n const selectMediaSourceMode = () => {\n this.currentAdaptationSetCriteria_ =\n new shaka.media.PreferenceBasedCriteria(\n language,\n role || '',\n channelsCount || 0,\n /* hdrLevel= */ '',\n /* spatialAudio= */ false,\n /* videoLayout= */ '',\n /* audioLabel= */ '',\n /* videoLabel= */ '',\n this.config_.mediaSource.codecSwitchingStrategy,\n codec || '');\n\n const diff = (a, b) => {\n if (!a.video && !b.video) {\n return 0;\n } else if (!a.video || !b.video) {\n return Infinity;\n } else {\n return Math.abs((a.video.height || 0) - (b.video.height || 0)) +\n Math.abs((a.video.width || 0) - (b.video.width || 0));\n }\n };\n // Find the variant whose size is closest to the active variant. This\n // ensures we stay at about the same resolution when just changing the\n // language/role.\n const active = this.streamingEngine_.getCurrentVariant();\n const set =\n this.currentAdaptationSetCriteria_.create(this.manifest_.variants);\n let bestVariant = null;\n for (const curVariant of set.values()) {\n if (!shaka.util.StreamUtils.isPlayable(curVariant)) {\n continue;\n }\n if (!bestVariant ||\n diff(bestVariant, active) > diff(curVariant, active)) {\n bestVariant = curVariant;\n }\n }\n if (bestVariant == active) {\n shaka.log.debug('Audio already selected.');\n return;\n }\n if (bestVariant) {\n const track = shaka.util.StreamUtils.variantToTrack(bestVariant);\n this.selectVariantTrack(\n track, /* clearBuffer= */ true, safeMargin || 0);\n return;\n }\n\n // If we haven't switched yet, just use ABR to find a new track.\n this.chooseVariantAndSwitch_();\n };\n const selectSrcEqualsMode = () => {\n if (this.video_ && this.video_.audioTracks) {\n const track = shaka.util.StreamUtils.filterStreamsByLanguageAndRole(\n this.getVariantTracks(), language, role || '', false)[0];\n if (track) {\n this.selectVariantTrack(track);\n }\n }\n };\n if (this.manifest_ && this.playhead_) {\n selectMediaSourceMode();\n // When using MSE + remote we need to set tracks for both MSE and native\n // apis so that synchronization is maintained.\n if (!this.isRemotePlayback()) {\n return;\n }\n }\n selectSrcEqualsMode();\n }\n\n /**\n * Sets the current text language and current text role to the selected\n * language and role, and chooses a new variant if need be. If the player has\n * not loaded any content, this will be a no-op.\n *\n * @param {string} language\n * @param {string=} role\n * @param {boolean=} forced\n * @export\n */\n selectTextLanguage(language, role, forced = false) {\n const selectMediaSourceMode = () => {\n this.currentTextLanguage_ = language;\n this.currentTextRole_ = role || '';\n this.currentTextForced_ = forced || false;\n\n const chosenText = this.chooseTextStream_();\n if (chosenText) {\n if (chosenText == this.streamingEngine_.getCurrentTextStream()) {\n shaka.log.debug('Text track already selected.');\n return;\n }\n\n this.addTextStreamToSwitchHistory_(\n chosenText, /* fromAdaptation= */ false);\n if (this.shouldStreamText_()) {\n this.streamingEngine_.switchTextStream(chosenText);\n this.onTextChanged_();\n this.setTextDisplayerLanguage_();\n }\n }\n };\n const selectSrcEqualsMode = () => {\n const track = shaka.util.StreamUtils.filterStreamsByLanguageAndRole(\n this.getTextTracks(), language, role || '', forced || false)[0];\n if (track) {\n this.selectTextTrack(track);\n }\n };\n if (this.manifest_ && this.playhead_) {\n selectMediaSourceMode();\n // When using MSE + remote we need to set tracks for both MSE and native\n // apis so that synchronization is maintained.\n if (!this.isRemotePlayback()) {\n return;\n }\n }\n selectSrcEqualsMode();\n }\n\n /**\n * Select variant tracks that have a given label. This assumes the\n * label uniquely identifies an audio stream, so all the variants\n * are expected to have the same variant.audio.\n *\n * @param {string} label\n * @param {boolean=} clearBuffer Optional clear buffer or not when\n * switch to new variant\n * Defaults to true if not provided\n * @param {number=} safeMargin Optional amount of buffer (in seconds) to\n * retain when clearing the buffer.\n * Defaults to 0 if not provided. Ignored if clearBuffer is false.\n * @export\n */\n selectVariantsByLabel(label, clearBuffer = true, safeMargin = 0) {\n const selectMediaSourceMode = () => {\n let firstVariantWithLabel = null;\n for (const variant of this.manifest_.variants) {\n if (variant.audio.label == label) {\n firstVariantWithLabel = variant;\n break;\n }\n }\n\n if (firstVariantWithLabel == null) {\n shaka.log.warning('No variants were found with label: ' +\n label + '. Ignoring the request to switch.');\n\n return;\n }\n\n // Label is a unique identifier of a variant's audio stream.\n // Because of that we assume that all the variants with the same\n // label have the same language.\n this.currentAdaptationSetCriteria_ =\n new shaka.media.PreferenceBasedCriteria(\n firstVariantWithLabel.language,\n /* role= */ '',\n /* channelCount= */ 0,\n /* hdrLevel= */ '',\n /* spatialAudio= */ false,\n /* videoLayout= */ '',\n label,\n /* videoLabel= */ '',\n this.config_.mediaSource.codecSwitchingStrategy,\n /* audioCodec= */ '');\n\n this.chooseVariantAndSwitch_(clearBuffer, safeMargin);\n };\n const selectSrcEqualsMode = () => {\n if (this.video_ && this.video_.audioTracks) {\n const audioTracks = Array.from(this.video_.audioTracks);\n\n let trackMatch = null;\n\n for (const audioTrack of audioTracks) {\n if (audioTrack.label == label) {\n trackMatch = audioTrack;\n }\n }\n if (trackMatch) {\n this.switchHtml5Track_(trackMatch);\n }\n }\n };\n if (this.manifest_ && this.playhead_) {\n selectMediaSourceMode();\n // When using MSE + remote we need to set tracks for both MSE and native\n // apis so that synchronization is maintained.\n if (!this.isRemotePlayback()) {\n return;\n }\n }\n selectSrcEqualsMode();\n }\n\n /**\n * Check if the text displayer is enabled.\n *\n * @return {boolean}\n * @export\n */\n isTextTrackVisible() {\n const expected = this.isTextVisible_;\n if (this.textDisplayer_) {\n const actual = this.textDisplayer_.isTextVisible();\n goog.asserts.assert(\n actual == expected, 'text visibility has fallen out of sync');\n\n // Always return the actual value so that the app has the most accurate\n // information (in the case that the values come out of sync in prod).\n return actual;\n }\n\n return expected;\n }\n\n /**\n * Return a list of chapters tracks.\n *\n * @return {!Array.}\n * @export\n */\n getChaptersTracks() {\n if (this.video_ && this.video_.currentSrc && this.video_.textTracks) {\n const textTracks = this.getChaptersTracks_();\n const StreamUtils = shaka.util.StreamUtils;\n return textTracks.map((text) => StreamUtils.html5TextTrackToTrack(text));\n } else {\n return [];\n }\n }\n\n /**\n * This returns the list of chapters.\n *\n * @param {string} language\n * @return {!Array.}\n * @export\n */\n getChapters(language) {\n if (!this.video_ || !this.video_.currentSrc || !this.video_.textTracks) {\n return [];\n }\n const LanguageUtils = shaka.util.LanguageUtils;\n const inputlanguage = LanguageUtils.normalize(language);\n const chaptersTracks = this.getChaptersTracks_();\n const chaptersTracksWithLanguage = chaptersTracks\n .filter((t) => LanguageUtils.normalize(t.language) == inputlanguage);\n if (!chaptersTracksWithLanguage || !chaptersTracksWithLanguage.length) {\n return [];\n }\n const chapters = [];\n const uniqueChapters = new Set();\n for (const chaptersTrack of chaptersTracksWithLanguage) {\n if (chaptersTrack && chaptersTrack.cues) {\n for (const cue of chaptersTrack.cues) {\n let id = cue.id;\n if (!id || id == '') {\n id = cue.startTime + '-' + cue.endTime + '-' + cue.text;\n }\n /** @type {shaka.extern.Chapter} */\n const chapter = {\n id: id,\n title: cue.text,\n startTime: cue.startTime,\n endTime: cue.endTime,\n };\n if (!uniqueChapters.has(id)) {\n chapters.push(chapter);\n uniqueChapters.add(id);\n }\n }\n }\n }\n return chapters;\n }\n\n /**\n * Ignore the TextTracks with the 'metadata' or 'chapters' kind, or the one\n * generated by the SimpleTextDisplayer.\n *\n * @return {!Array.}\n * @private\n */\n getFilteredTextTracks_() {\n goog.asserts.assert(this.video_.textTracks,\n 'TextTracks should be valid.');\n return Array.from(this.video_.textTracks)\n .filter((t) => t.kind != 'metadata' && t.kind != 'chapters' &&\n t.label != shaka.Player.TextTrackLabel);\n }\n\n /**\n * Get the TextTracks with the 'metadata' kind.\n *\n * @return {!Array.}\n * @private\n */\n getMetadataTracks_() {\n goog.asserts.assert(this.video_.textTracks,\n 'TextTracks should be valid.');\n return Array.from(this.video_.textTracks)\n .filter((t) => t.kind == 'metadata');\n }\n\n /**\n * Get the TextTracks with the 'chapters' kind.\n *\n * @return {!Array.}\n * @private\n */\n getChaptersTracks_() {\n goog.asserts.assert(this.video_.textTracks,\n 'TextTracks should be valid.');\n return Array.from(this.video_.textTracks)\n .filter((t) => t.kind == 'chapters');\n }\n\n /**\n * Enable or disable the text displayer. If the player is in an unloaded\n * state, the request will be applied next time content is loaded.\n *\n * @param {boolean} isVisible\n * @export\n */\n setTextTrackVisibility(isVisible) {\n const oldVisibilty = this.isTextVisible_;\n // Convert to boolean in case apps pass 0/1 instead false/true.\n const newVisibility = !!isVisible;\n\n if (oldVisibilty == newVisibility) {\n return;\n }\n\n this.isTextVisible_ = newVisibility;\n\n // Hold of on setting the text visibility until we have all the components\n // we need. This ensures that they stay in-sync.\n if (this.loadMode_ == shaka.Player.LoadMode.MEDIA_SOURCE) {\n this.textDisplayer_.setTextVisibility(newVisibility);\n\n // When the user wants to see captions, we stream captions. When the user\n // doesn't want to see captions, we don't stream captions. This is to\n // avoid bandwidth consumption by an unused resource. The app developer\n // can override this and configure us to always stream captions.\n if (!this.config_.streaming.alwaysStreamText) {\n if (newVisibility) {\n if (this.streamingEngine_.getCurrentTextStream()) {\n // We already have a selected text stream.\n } else {\n // Find the text stream that best matches the user's preferences.\n const streams =\n shaka.util.StreamUtils.filterStreamsByLanguageAndRole(\n this.manifest_.textStreams,\n this.currentTextLanguage_,\n this.currentTextRole_,\n this.currentTextForced_);\n\n // It is possible that there are no streams to play.\n if (streams.length > 0) {\n this.streamingEngine_.switchTextStream(streams[0]);\n this.onTextChanged_();\n this.setTextDisplayerLanguage_();\n }\n }\n } else {\n this.streamingEngine_.unloadTextStream();\n }\n }\n } else if (this.video_ && this.video_.src && this.video_.textTracks) {\n this.textDisplayer_.setTextVisibility(newVisibility);\n }\n\n // We need to fire the event after we have updated everything so that\n // everything will be in a stable state when the app responds to the\n // event.\n this.onTextTrackVisibility_();\n }\n\n /**\n * Get the current playhead position as a date.\n *\n * @return {Date}\n * @export\n */\n getPlayheadTimeAsDate() {\n let presentationTime = 0;\n if (this.playhead_) {\n presentationTime = this.playhead_.getTime();\n } else if (this.startTime_ == null) {\n // A live stream with no requested start time and no playhead yet. We\n // would start at the live edge, but we don't have that yet, so return\n // the current date & time.\n return new Date();\n } else {\n // A specific start time has been requested. This is what Playhead will\n // use once it is created.\n presentationTime = this.startTime_;\n }\n\n if (this.manifest_ && !this.isRemotePlayback()) {\n const timeline = this.manifest_.presentationTimeline;\n const startTime = timeline.getInitialProgramDateTime() ||\n timeline.getPresentationStartTime();\n return new Date(/* ms= */ (startTime + presentationTime) * 1000);\n } else if (this.video_ && this.video_.getStartDate) {\n // Apple's native HLS gives us getStartDate(), which is only available if\n // EXT-X-PROGRAM-DATETIME is in the playlist.\n const startDate = this.video_.getStartDate();\n if (isNaN(startDate.getTime())) {\n shaka.log.warning(\n 'EXT-X-PROGRAM-DATETIME required to get playhead time as Date!');\n return null;\n }\n return new Date(startDate.getTime() + (presentationTime * 1000));\n } else {\n shaka.log.warning('No way to get playhead time as Date!');\n return null;\n }\n }\n\n /**\n * Get the presentation start time as a date.\n *\n * @return {Date}\n * @export\n */\n getPresentationStartTimeAsDate() {\n if (this.manifest_ && !this.isRemotePlayback()) {\n const timeline = this.manifest_.presentationTimeline;\n const startTime = timeline.getInitialProgramDateTime() ||\n timeline.getPresentationStartTime();\n goog.asserts.assert(startTime != null,\n 'Presentation start time should not be null!');\n return new Date(/* ms= */ startTime * 1000);\n } else if (this.video_ && this.video_.getStartDate) {\n // Apple's native HLS gives us getStartDate(), which is only available if\n // EXT-X-PROGRAM-DATETIME is in the playlist.\n const startDate = this.video_.getStartDate();\n if (isNaN(startDate.getTime())) {\n shaka.log.warning(\n 'EXT-X-PROGRAM-DATETIME required to get presentation start time ' +\n 'as Date!');\n return null;\n }\n return startDate;\n } else {\n shaka.log.warning('No way to get presentation start time as Date!');\n return null;\n }\n }\n\n /**\n * Get the presentation segment availability duration. This should only be\n * called when the player has loaded a live stream. If the player has not\n * loaded a live stream, this will return null.\n *\n * @return {?number}\n * @export\n */\n getSegmentAvailabilityDuration() {\n if (!this.isLive()) {\n shaka.log.warning('getSegmentAvailabilityDuration is for live streams!');\n return null;\n }\n\n if (this.manifest_) {\n const timeline = this.manifest_.presentationTimeline;\n return timeline.getSegmentAvailabilityDuration();\n } else {\n shaka.log.warning('No way to get segment segment availability duration!');\n return null;\n }\n }\n\n /**\n * Get information about what the player has buffered. If the player has not\n * loaded content or is currently loading content, the buffered content will\n * be empty.\n *\n * @return {shaka.extern.BufferedInfo}\n * @export\n */\n getBufferedInfo() {\n if (this.loadMode_ == shaka.Player.LoadMode.MEDIA_SOURCE) {\n return this.mediaSourceEngine_.getBufferedInfo();\n }\n\n const info = {\n total: [],\n audio: [],\n video: [],\n text: [],\n };\n\n if (this.loadMode_ == shaka.Player.LoadMode.SRC_EQUALS) {\n const TimeRangesUtils = shaka.media.TimeRangesUtils;\n info.total = TimeRangesUtils.getBufferedInfo(this.video_.buffered);\n }\n\n return info;\n }\n\n /**\n * Get statistics for the current playback session. If the player is not\n * playing content, this will return an empty stats object.\n *\n * @return {shaka.extern.Stats}\n * @export\n */\n getStats() {\n // If the Player is not in a fully-loaded state, then return an empty stats\n // blob so that this call will never fail.\n const loaded = this.loadMode_ == shaka.Player.LoadMode.MEDIA_SOURCE ||\n this.loadMode_ == shaka.Player.LoadMode.SRC_EQUALS;\n if (!loaded) {\n return shaka.util.Stats.getEmptyBlob();\n }\n\n this.updateStateHistory_();\n\n goog.asserts.assert(this.video_, 'If we have stats, we should have video_');\n const element = /** @type {!HTMLVideoElement} */ (this.video_);\n\n const completionRatio = element.currentTime / element.duration;\n if (!isNaN(completionRatio) && !this.isLive()) {\n this.stats_.setCompletionPercent(Math.round(100 * completionRatio));\n }\n\n if (this.playhead_) {\n this.stats_.setGapsJumped(this.playhead_.getGapsJumped());\n this.stats_.setStallsDetected(this.playhead_.getStallsDetected());\n }\n\n if (element.getVideoPlaybackQuality) {\n const info = element.getVideoPlaybackQuality();\n\n this.stats_.setDroppedFrames(\n Number(info.droppedVideoFrames),\n Number(info.totalVideoFrames));\n this.stats_.setCorruptedFrames(Number(info.corruptedVideoFrames));\n }\n\n const licenseSeconds =\n this.drmEngine_ ? this.drmEngine_.getLicenseTime() : NaN;\n this.stats_.setLicenseTime(licenseSeconds);\n\n if (this.loadMode_ == shaka.Player.LoadMode.MEDIA_SOURCE) {\n // Event through we are loaded, it is still possible that we don't have a\n // variant yet because we set the load mode before we select the first\n // variant to stream.\n const variant = this.streamingEngine_.getCurrentVariant();\n const textStream = this.streamingEngine_.getCurrentTextStream();\n\n if (variant) {\n const rate = this.playRateController_ ?\n this.playRateController_.getRealRate() : 1;\n const variantBandwidth = rate * variant.bandwidth;\n let currentStreamBandwidth = variantBandwidth;\n if (textStream && textStream.bandwidth) {\n currentStreamBandwidth += (rate * textStream.bandwidth);\n }\n this.stats_.setCurrentStreamBandwidth(currentStreamBandwidth);\n }\n\n if (variant && variant.video) {\n this.stats_.setResolution(\n /* width= */ variant.video.width || NaN,\n /* height= */ variant.video.height || NaN);\n }\n\n if (this.isLive()) {\n const now = this.getPresentationStartTimeAsDate().valueOf() +\n element.currentTime * 1000;\n const latency = (Date.now() - now) / 1000;\n this.stats_.setLiveLatency(latency);\n }\n\n if (this.manifest_) {\n this.stats_.setManifestPeriodCount(this.manifest_.periodCount);\n this.stats_.setManifestGapCount(this.manifest_.gapCount);\n if (this.manifest_.presentationTimeline) {\n const maxSegmentDuration =\n this.manifest_.presentationTimeline.getMaxSegmentDuration();\n this.stats_.setMaxSegmentDuration(maxSegmentDuration);\n }\n }\n\n const estimate = this.abrManager_.getBandwidthEstimate();\n this.stats_.setBandwidthEstimate(estimate);\n }\n\n if (this.loadMode_ == shaka.Player.LoadMode.SRC_EQUALS) {\n this.stats_.addBytesDownloaded(NaN);\n this.stats_.setResolution(\n /* width= */ element.videoWidth || NaN,\n /* height= */ element.videoHeight || NaN);\n }\n\n return this.stats_.getBlob();\n }\n\n /**\n * Adds the given text track to the loaded manifest. load() must\n * resolve before calling. The presentation must have a duration.\n *\n * This returns the created track, which can immediately be selected by the\n * application. The track will not be automatically selected.\n *\n * @param {string} uri\n * @param {string} language\n * @param {string} kind\n * @param {string=} mimeType\n * @param {string=} codec\n * @param {string=} label\n * @param {boolean=} forced\n * @return {!Promise.}\n * @export\n */\n async addTextTrackAsync(uri, language, kind, mimeType, codec, label,\n forced = false) {\n if (this.loadMode_ != shaka.Player.LoadMode.MEDIA_SOURCE &&\n this.loadMode_ != shaka.Player.LoadMode.SRC_EQUALS) {\n shaka.log.error(\n 'Must call load() and wait for it to resolve before adding text ' +\n 'tracks.');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.PLAYER,\n shaka.util.Error.Code.CONTENT_NOT_LOADED);\n }\n\n if (kind != 'subtitles' && kind != 'captions') {\n shaka.log.alwaysWarn(\n 'Using a kind value different of `subtitles` or `captions` can ' +\n 'cause unwanted issues.');\n }\n\n if (!mimeType) {\n mimeType = await this.getTextMimetype_(uri);\n }\n\n let adCuePoints = [];\n if (this.adManager_) {\n adCuePoints = this.adManager_.getCuePoints();\n }\n\n if (this.loadMode_ == shaka.Player.LoadMode.SRC_EQUALS) {\n if (forced) {\n // See: https://github.com/whatwg/html/issues/4472\n kind = 'forced';\n }\n await this.addSrcTrackElement_(uri, language, kind, mimeType, label || '',\n adCuePoints);\n\n const LanguageUtils = shaka.util.LanguageUtils;\n const languageNormalized = LanguageUtils.normalize(language);\n\n const textTracks = this.getTextTracks();\n const srcTrack = textTracks.find((t) => {\n return LanguageUtils.normalize(t.language) == languageNormalized &&\n t.label == (label || '') &&\n t.kind == kind;\n });\n if (srcTrack) {\n this.onTracksChanged_();\n return srcTrack;\n }\n // This should not happen, but there are browser implementations that may\n // not support the Track element.\n shaka.log.error('Cannot add this text when loaded with src=');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.TEXT,\n shaka.util.Error.Code.CANNOT_ADD_EXTERNAL_TEXT_TO_SRC_EQUALS);\n }\n\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n const seekRange = this.seekRange();\n let duration = seekRange.end - seekRange.start;\n if (this.manifest_) {\n duration = this.manifest_.presentationTimeline.getDuration();\n }\n if (duration == Infinity) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.CANNOT_ADD_EXTERNAL_TEXT_TO_LIVE_STREAM);\n }\n\n if (adCuePoints.length) {\n goog.asserts.assert(\n this.networkingEngine_, 'Need networking engine.');\n const data = await this.getTextData_(uri,\n this.networkingEngine_,\n this.config_.streaming.retryParameters);\n const vvtText = this.convertToWebVTT_(data, mimeType, adCuePoints);\n const blob = new Blob([vvtText], {type: 'text/vtt'});\n uri = shaka.media.MediaSourceEngine.createObjectURL(blob);\n mimeType = 'text/vtt';\n }\n\n /** @type {shaka.extern.Stream} */\n const stream = {\n id: this.nextExternalStreamId_++,\n originalId: null,\n groupId: null,\n createSegmentIndex: () => Promise.resolve(),\n segmentIndex: shaka.media.SegmentIndex.forSingleSegment(\n /* startTime= */ 0,\n /* duration= */ duration,\n /* uris= */ [uri]),\n mimeType: mimeType || '',\n codecs: codec || '',\n kind: kind,\n encrypted: false,\n drmInfos: [],\n keyIds: new Set(),\n language: language,\n originalLanguage: language,\n label: label || null,\n type: ContentType.TEXT,\n primary: false,\n trickModeVideo: null,\n emsgSchemeIdUris: null,\n roles: [],\n forced: !!forced,\n channelsCount: null,\n audioSamplingRate: null,\n spatialAudio: false,\n closedCaptions: null,\n accessibilityPurpose: null,\n external: true,\n fastSwitching: false,\n fullMimeTypes: new Set([shaka.util.MimeUtils.getFullType(\n mimeType || '', codec || '')]),\n isAudioMuxedInVideo: false,\n };\n\n const fullMimeType = shaka.util.MimeUtils.getFullType(\n stream.mimeType, stream.codecs);\n const supported = shaka.text.TextEngine.isTypeSupported(fullMimeType);\n if (!supported) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.TEXT,\n shaka.util.Error.Code.MISSING_TEXT_PLUGIN,\n mimeType);\n }\n\n this.manifest_.textStreams.push(stream);\n this.onTracksChanged_();\n return shaka.util.StreamUtils.textStreamToTrack(stream);\n }\n\n /**\n * Adds the given thumbnails track to the loaded manifest.\n * load() must resolve before calling. The presentation must\n * have a duration.\n *\n * This returns the created track, which can immediately be used by the\n * application.\n *\n * @param {string} uri\n * @param {string=} mimeType\n * @return {!Promise.}\n * @export\n */\n async addThumbnailsTrack(uri, mimeType) {\n if (this.loadMode_ != shaka.Player.LoadMode.MEDIA_SOURCE &&\n this.loadMode_ != shaka.Player.LoadMode.SRC_EQUALS) {\n shaka.log.error(\n 'Must call load() and wait for it to resolve before adding image ' +\n 'tracks.');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.PLAYER,\n shaka.util.Error.Code.CONTENT_NOT_LOADED);\n }\n\n if (!mimeType) {\n mimeType = await this.getTextMimetype_(uri);\n }\n\n if (mimeType != 'text/vtt') {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.TEXT,\n shaka.util.Error.Code.UNSUPPORTED_EXTERNAL_THUMBNAILS_URI,\n uri);\n }\n\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const seekRange = this.seekRange();\n let duration = seekRange.end - seekRange.start;\n if (this.manifest_) {\n duration = this.manifest_.presentationTimeline.getDuration();\n }\n if (duration == Infinity) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.CANNOT_ADD_EXTERNAL_THUMBNAILS_TO_LIVE_STREAM);\n }\n\n goog.asserts.assert(\n this.networkingEngine_, 'Need networking engine.');\n const buffer = await this.getTextData_(uri,\n this.networkingEngine_,\n this.config_.streaming.retryParameters);\n\n const factory = shaka.text.TextEngine.findParser(mimeType);\n if (!factory) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.TEXT,\n shaka.util.Error.Code.MISSING_TEXT_PLUGIN,\n mimeType);\n }\n const TextParser = factory();\n const time = {\n periodStart: 0,\n segmentStart: 0,\n segmentEnd: duration,\n vttOffset: 0,\n };\n const data = shaka.util.BufferUtils.toUint8(buffer);\n const cues = TextParser.parseMedia(data, time, uri, /* images= */ []);\n\n const references = [];\n for (const cue of cues) {\n let uris = null;\n const getUris = () => {\n if (uris == null) {\n uris = shaka.util.ManifestParserUtils.resolveUris(\n [uri], [cue.payload]);\n }\n return uris || [];\n };\n const reference = new shaka.media.SegmentReference(\n cue.startTime,\n cue.endTime,\n getUris,\n /* startByte= */ 0,\n /* endByte= */ null,\n /* initSegmentReference= */ null,\n /* timestampOffset= */ 0,\n /* appendWindowStart= */ 0,\n /* appendWindowEnd= */ Infinity,\n );\n if (cue.payload.includes('#xywh')) {\n const spriteInfo = cue.payload.split('#xywh=')[1].split(',');\n if (spriteInfo.length === 4) {\n reference.setThumbnailSprite({\n height: parseInt(spriteInfo[3], 10),\n positionX: parseInt(spriteInfo[0], 10),\n positionY: parseInt(spriteInfo[1], 10),\n width: parseInt(spriteInfo[2], 10),\n });\n }\n }\n references.push(reference);\n }\n\n let segmentMimeType = mimeType;\n if (references.length) {\n segmentMimeType = await shaka.net.NetworkingUtils.getMimeType(\n references[0].getUris()[0],\n this.networkingEngine_, this.config_.manifest.retryParameters);\n }\n\n /** @type {shaka.extern.Stream} */\n const stream = {\n id: this.nextExternalStreamId_++,\n originalId: null,\n groupId: null,\n createSegmentIndex: () => Promise.resolve(),\n segmentIndex: new shaka.media.SegmentIndex(references),\n mimeType: segmentMimeType || '',\n codecs: '',\n kind: '',\n encrypted: false,\n drmInfos: [],\n keyIds: new Set(),\n language: 'und',\n originalLanguage: null,\n label: null,\n type: ContentType.IMAGE,\n primary: false,\n trickModeVideo: null,\n emsgSchemeIdUris: null,\n roles: [],\n forced: false,\n channelsCount: null,\n audioSamplingRate: null,\n spatialAudio: false,\n closedCaptions: null,\n tilesLayout: '1x1',\n accessibilityPurpose: null,\n external: true,\n fastSwitching: false,\n fullMimeTypes: new Set([shaka.util.MimeUtils.getFullType(\n segmentMimeType || '', '')]),\n isAudioMuxedInVideo: false,\n };\n\n if (this.loadMode_ == shaka.Player.LoadMode.SRC_EQUALS) {\n this.externalSrcEqualsThumbnailsStreams_.push(stream);\n } else {\n this.manifest_.imageStreams.push(stream);\n }\n this.onTracksChanged_();\n return shaka.util.StreamUtils.imageStreamToTrack(stream);\n }\n\n /**\n * Adds the given chapters track to the loaded manifest. load()\n * must resolve before calling. The presentation must have a duration.\n *\n * This returns the created track.\n *\n * @param {string} uri\n * @param {string} language\n * @param {string=} mimeType\n * @return {!Promise.}\n * @export\n */\n async addChaptersTrack(uri, language, mimeType) {\n if (this.loadMode_ != shaka.Player.LoadMode.MEDIA_SOURCE &&\n this.loadMode_ != shaka.Player.LoadMode.SRC_EQUALS) {\n shaka.log.error(\n 'Must call load() and wait for it to resolve before adding ' +\n 'chapters tracks.');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.PLAYER,\n shaka.util.Error.Code.CONTENT_NOT_LOADED);\n }\n\n if (!mimeType) {\n mimeType = await this.getTextMimetype_(uri);\n }\n\n let adCuePoints = [];\n if (this.adManager_) {\n adCuePoints = this.adManager_.getCuePoints();\n }\n\n /** @type {!HTMLTrackElement} */\n const trackElement = await this.addSrcTrackElement_(\n uri, language, /* kind= */ 'chapters', mimeType, /* label= */ '',\n adCuePoints);\n\n const chaptersTracks = this.getChaptersTracks();\n const chaptersTrack = chaptersTracks.find((t) => {\n return t.language == language;\n });\n\n if (chaptersTrack) {\n await new Promise((resolve, reject) => {\n // The chapter data isn't available until the 'load' event fires, and\n // that won't happen until the chapters track is activated by the\n // activateChaptersTrack_ method.\n this.loadEventManager_.listenOnce(trackElement, 'load', resolve);\n this.loadEventManager_.listenOnce(trackElement, 'error', (event) => {\n reject(new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.TEXT,\n shaka.util.Error.Code.CHAPTERS_TRACK_FAILED));\n });\n });\n\n this.onTracksChanged_();\n\n return chaptersTrack;\n }\n\n // This should not happen, but there are browser implementations that may\n // not support the Track element.\n shaka.log.error('Cannot add this text when loaded with src=');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.TEXT,\n shaka.util.Error.Code.CANNOT_ADD_EXTERNAL_TEXT_TO_SRC_EQUALS);\n }\n\n /**\n * @param {string} uri\n * @return {!Promise.}\n * @private\n */\n async getTextMimetype_(uri) {\n let mimeType;\n try {\n goog.asserts.assert(\n this.networkingEngine_, 'Need networking engine.');\n // eslint-disable-next-line require-atomic-updates\n mimeType = await shaka.net.NetworkingUtils.getMimeType(uri,\n this.networkingEngine_,\n this.config_.streaming.retryParameters);\n } catch (error) {}\n\n if (mimeType) {\n return mimeType;\n }\n\n shaka.log.error(\n 'The mimeType has not been provided and it could not be deduced ' +\n 'from its uri.');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.TEXT,\n shaka.util.Error.Code.TEXT_COULD_NOT_GUESS_MIME_TYPE,\n uri);\n }\n\n /**\n * @param {string} uri\n * @param {string} language\n * @param {string} kind\n * @param {string} mimeType\n * @param {string} label\n * @param {!Array.} adCuePoints\n * @return {!Promise.}\n * @private\n */\n async addSrcTrackElement_(uri, language, kind, mimeType, label,\n adCuePoints) {\n if (mimeType != 'text/vtt' || adCuePoints.length) {\n goog.asserts.assert(\n this.networkingEngine_, 'Need networking engine.');\n const data = await this.getTextData_(uri,\n this.networkingEngine_,\n this.config_.streaming.retryParameters);\n const vvtText = this.convertToWebVTT_(data, mimeType, adCuePoints);\n const blob = new Blob([vvtText], {type: 'text/vtt'});\n uri = shaka.media.MediaSourceEngine.createObjectURL(blob);\n mimeType = 'text/vtt';\n }\n\n const trackElement =\n /** @type {!HTMLTrackElement} */(document.createElement('track'));\n trackElement.src = this.cmcdManager_.appendTextTrackData(uri);\n trackElement.label = label;\n trackElement.kind = kind;\n trackElement.srclang = language;\n\n // Because we're pulling in the text track file via Javascript, the\n // same-origin policy applies. If you'd like to have a player served\n // from one domain, but the text track served from another, you'll\n // need to enable CORS in order to do so. In addition to enabling CORS\n // on the server serving the text tracks, you will need to add the\n // crossorigin attribute to the video element itself.\n if (!this.video_.getAttribute('crossorigin')) {\n this.video_.setAttribute('crossorigin', 'anonymous');\n }\n\n this.video_.appendChild(trackElement);\n return trackElement;\n }\n\n /**\n * @param {string} uri\n * @param {!shaka.net.NetworkingEngine} netEngine\n * @param {shaka.extern.RetryParameters} retryParams\n * @return {!Promise.}\n * @private\n */\n async getTextData_(uri, netEngine, retryParams) {\n const type = shaka.net.NetworkingEngine.RequestType.SEGMENT;\n\n const request = shaka.net.NetworkingEngine.makeRequest([uri], retryParams);\n request.method = 'GET';\n\n this.cmcdManager_.applyTextData(request);\n\n const response = await netEngine.request(type, request).promise;\n\n return response.data;\n }\n\n\n /**\n * Converts an input string to a WebVTT format string.\n *\n * @param {BufferSource} buffer\n * @param {string} mimeType\n * @param {!Array.} adCuePoints\n * @return {string}\n * @private\n */\n convertToWebVTT_(buffer, mimeType, adCuePoints) {\n const factory = shaka.text.TextEngine.findParser(mimeType);\n if (factory) {\n const obj = factory();\n const time = {\n periodStart: 0,\n segmentStart: 0,\n segmentEnd: this.video_.duration,\n vttOffset: 0,\n };\n const data = shaka.util.BufferUtils.toUint8(buffer);\n const cues = obj.parseMedia(\n data, time, /* uri= */ null, /* images= */ []);\n return shaka.text.WebVttGenerator.convert(cues, adCuePoints);\n }\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.TEXT,\n shaka.util.Error.Code.MISSING_TEXT_PLUGIN,\n mimeType);\n }\n\n /**\n * Set the maximum resolution that the platform's hardware can handle.\n *\n * @param {number} width\n * @param {number} height\n * @export\n */\n setMaxHardwareResolution(width, height) {\n this.maxHwRes_.width = width;\n this.maxHwRes_.height = height;\n }\n\n /**\n * Retry streaming after a streaming failure has occurred. When the player has\n * not loaded content or is loading content, this will be a no-op and will\n * return false.\n *\n *

\n * If the player has loaded content, and streaming has not seen an error, this\n * will return false.\n *\n *

\n * If the player has loaded content, and streaming seen an error, but the\n * could not resume streaming, this will return false.\n *\n * @param {number=} retryDelaySeconds\n * @return {boolean}\n * @export\n */\n retryStreaming(retryDelaySeconds = 0.1) {\n return this.loadMode_ == shaka.Player.LoadMode.MEDIA_SOURCE ?\n this.streamingEngine_.retry(retryDelaySeconds) :\n false;\n }\n\n /**\n * Get the manifest that the player has loaded. If the player has not loaded\n * any content, this will return null.\n *\n * NOTE: This structure is NOT covered by semantic versioning compatibility\n * guarantees. It may change at any time!\n *\n * This is marked as deprecated to warn Closure Compiler users at compile-time\n * to avoid using this method.\n *\n * @return {?shaka.extern.Manifest}\n * @export\n * @deprecated\n */\n getManifest() {\n shaka.log.alwaysWarn(\n 'Shaka Player\\'s internal Manifest structure is NOT covered by ' +\n 'semantic versioning compatibility guarantees. It may change at any ' +\n 'time! Please consider filing a feature request for whatever you ' +\n 'use getManifest() for.');\n return this.manifest_;\n }\n\n /**\n * Get the type of manifest parser that the player is using. If the player has\n * not loaded any content, this will return null.\n *\n * @return {?shaka.extern.ManifestParser.Factory}\n * @export\n */\n getManifestParserFactory() {\n return this.parserFactory_;\n }\n\n /**\n * Gets information about the currently fetched video, audio, and text.\n * In the case of a multi-codec or multi-mimeType manifest, this can let you\n * determine the exact codecs and mimeTypes being fetched at the moment.\n *\n * @return {!shaka.extern.PlaybackInfo}\n * @export\n */\n getFetchedPlaybackInfo() {\n const output = /** @type {!shaka.extern.PlaybackInfo} */ ({\n 'video': null,\n 'audio': null,\n 'text': null,\n });\n if (this.loadMode_ != shaka.Player.LoadMode.MEDIA_SOURCE) {\n return output;\n }\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const variant = this.streamingEngine_.getCurrentVariant();\n const textStream = this.streamingEngine_.getCurrentTextStream();\n const currentTime = this.video_.currentTime;\n for (const stream of [variant.video, variant.audio, textStream]) {\n if (!stream || !stream.segmentIndex) {\n continue;\n }\n const position = stream.segmentIndex.find(currentTime);\n const reference = stream.segmentIndex.get(position);\n const info = /** @type {!shaka.extern.PlaybackStreamInfo} */ ({\n 'codecs': reference.codecs || stream.codecs,\n 'mimeType': reference.mimeType || stream.mimeType,\n 'bandwidth': reference.bandwidth || stream.bandwidth,\n });\n if (stream.type == ContentType.VIDEO) {\n info['width'] = stream.width;\n info['height'] = stream.height;\n output['video'] = info;\n } else if (stream.type == ContentType.AUDIO) {\n output['audio'] = info;\n } else if (stream.type == ContentType.TEXT) {\n output['text'] = info;\n }\n }\n return output;\n }\n\n /**\n * @param {shaka.extern.Variant} variant\n * @param {boolean} fromAdaptation\n * @private\n */\n addVariantToSwitchHistory_(variant, fromAdaptation) {\n const switchHistory = this.stats_.getSwitchHistory();\n switchHistory.updateCurrentVariant(variant, fromAdaptation);\n }\n\n /**\n * @param {shaka.extern.Stream} textStream\n * @param {boolean} fromAdaptation\n * @private\n */\n addTextStreamToSwitchHistory_(textStream, fromAdaptation) {\n const switchHistory = this.stats_.getSwitchHistory();\n switchHistory.updateCurrentText(textStream, fromAdaptation);\n }\n\n /**\n * @return {shaka.extern.PlayerConfiguration}\n * @private\n */\n defaultConfig_() {\n const config = shaka.util.PlayerConfiguration.createDefault();\n\n config.streaming.failureCallback = (error) => {\n this.defaultStreamingFailureCallback_(error);\n };\n\n // Because this.video_ may not be set when the config is built, the default\n // TextDisplay factory must capture a reference to \"this\".\n config.textDisplayFactory = () => {\n // On iOS where the Fullscreen API is not available we prefer\n // SimpleTextDisplayer because it works with the Fullscreen API of the\n // video element itself.\n const Platform = shaka.util.Platform;\n if (this.videoContainer_ &&\n (!Platform.safariVersion() || document.fullscreenEnabled)) {\n return new shaka.text.UITextDisplayer(\n this.video_, this.videoContainer_);\n } else {\n // eslint-disable-next-line no-restricted-syntax\n if (HTMLMediaElement.prototype.addTextTrack) {\n return new shaka.text.SimpleTextDisplayer(\n this.video_, shaka.Player.TextTrackLabel);\n } else {\n shaka.log.warning('Text tracks are not supported by the ' +\n 'browser, disabling.');\n return new shaka.text.StubTextDisplayer();\n }\n }\n };\n return config;\n }\n\n /**\n * Set the videoContainer to construct UITextDisplayer.\n * @param {HTMLElement} videoContainer\n * @export\n */\n setVideoContainer(videoContainer) {\n this.videoContainer_ = videoContainer;\n }\n\n /**\n * @param {!shaka.util.Error} error\n * @private\n */\n defaultStreamingFailureCallback_(error) {\n // For live streams, we retry streaming automatically for certain errors.\n // For VOD streams, all streaming failures are fatal.\n if (!this.isLive()) {\n return;\n }\n\n let retryDelaySeconds = null;\n if (error.code == shaka.util.Error.Code.BAD_HTTP_STATUS ||\n error.code == shaka.util.Error.Code.HTTP_ERROR) {\n // These errors can be near-instant, so delay a bit before retrying.\n retryDelaySeconds = 1;\n if (this.config_.streaming.lowLatencyMode) {\n retryDelaySeconds = 0.1;\n }\n } else if (error.code == shaka.util.Error.Code.TIMEOUT) {\n // We already waited for a timeout, so retry quickly.\n retryDelaySeconds = 0.1;\n }\n\n if (retryDelaySeconds != null) {\n error.severity = shaka.util.Error.Severity.RECOVERABLE;\n shaka.log.warning('Live streaming error. Retrying automatically...');\n this.retryStreaming(retryDelaySeconds);\n }\n }\n\n /**\n * For CEA closed captions embedded in the video streams, create dummy text\n * stream. This can be safely called again on existing manifests, for\n * manifest updates.\n * @param {!shaka.extern.Manifest} manifest\n * @private\n */\n makeTextStreamsForClosedCaptions_(manifest) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const TextStreamKind = shaka.util.ManifestParserUtils.TextStreamKind;\n const CEA608_MIME = shaka.util.MimeUtils.CEA608_CLOSED_CAPTION_MIMETYPE;\n const CEA708_MIME = shaka.util.MimeUtils.CEA708_CLOSED_CAPTION_MIMETYPE;\n\n // A set, to make sure we don't create two text streams for the same video.\n const closedCaptionsSet = new Set();\n for (const textStream of manifest.textStreams) {\n if (textStream.mimeType == CEA608_MIME ||\n textStream.mimeType == CEA708_MIME) {\n // This function might be called on a manifest update, so don't make a\n // new text stream for closed caption streams we have seen before.\n closedCaptionsSet.add(textStream.originalId);\n }\n }\n for (const variant of manifest.variants) {\n const video = variant.video;\n if (video && video.closedCaptions) {\n for (const id of video.closedCaptions.keys()) {\n if (!closedCaptionsSet.has(id)) {\n const mimeType = id.startsWith('CC') ? CEA608_MIME : CEA708_MIME;\n\n // Add an empty segmentIndex, for the benefit of the period combiner\n // in our builtin DASH parser.\n const segmentIndex = new shaka.media.MetaSegmentIndex();\n const language = video.closedCaptions.get(id);\n const textStream = {\n id: this.nextExternalStreamId_++, // A globally unique ID.\n originalId: id, // The CC ID string, like 'CC1', 'CC3', etc.\n groupId: null,\n createSegmentIndex: () => Promise.resolve(),\n segmentIndex,\n mimeType,\n codecs: '',\n kind: TextStreamKind.CLOSED_CAPTION,\n encrypted: false,\n drmInfos: [],\n keyIds: new Set(),\n language,\n originalLanguage: language,\n label: null,\n type: ContentType.TEXT,\n primary: false,\n trickModeVideo: null,\n emsgSchemeIdUris: null,\n roles: video.roles,\n forced: false,\n channelsCount: null,\n audioSamplingRate: null,\n spatialAudio: false,\n closedCaptions: null,\n accessibilityPurpose: null,\n external: false,\n fastSwitching: false,\n fullMimeTypes: new Set([shaka.util.MimeUtils.getFullType(\n mimeType, '')]),\n isAudioMuxedInVideo: false,\n };\n manifest.textStreams.push(textStream);\n closedCaptionsSet.add(id);\n }\n }\n }\n }\n }\n\n /**\n * @param {shaka.extern.Variant} initialVariant\n * @param {number} time\n * @return {!Promise.}\n * @private\n */\n async adjustStartTime_(initialVariant, time) {\n /** @type {?shaka.extern.Stream} */\n const activeAudio = initialVariant.audio;\n /** @type {?shaka.extern.Stream} */\n const activeVideo = initialVariant.video;\n\n /**\n * @param {?shaka.extern.Stream} stream\n * @param {number} time\n * @return {!Promise.}\n */\n const getAdjustedTime = async (stream, time) => {\n if (!stream) {\n return null;\n }\n\n await stream.createSegmentIndex();\n const iter = stream.segmentIndex.getIteratorForTime(time);\n const ref = iter ? iter.next().value : null;\n if (!ref) {\n return null;\n }\n\n const refTime = ref.startTime;\n goog.asserts.assert(refTime <= time,\n 'Segment should start before target time!');\n return refTime;\n };\n\n const audioStartTime = await getAdjustedTime(activeAudio, time);\n const videoStartTime = await getAdjustedTime(activeVideo, time);\n\n // If we have both video and audio times, pick the larger one. If we picked\n // the smaller one, that one will download an entire segment to buffer the\n // difference.\n if (videoStartTime != null && audioStartTime != null) {\n return Math.max(videoStartTime, audioStartTime);\n } else if (videoStartTime != null) {\n return videoStartTime;\n } else if (audioStartTime != null) {\n return audioStartTime;\n } else {\n return time;\n }\n }\n\n /**\n * Update the buffering state to be either \"we are buffering\" or \"we are not\n * buffering\", firing events to the app as needed.\n *\n * @private\n */\n updateBufferState_() {\n const isBuffering = this.isBuffering();\n shaka.log.v2('Player changing buffering state to', isBuffering);\n\n // Make sure we have all the components we need before we consider ourselves\n // as being loaded.\n // TODO: Make the check for \"loaded\" simpler.\n const loaded = this.stats_ && this.bufferObserver_ && this.playhead_;\n\n if (loaded) {\n this.playRateController_.setBuffering(isBuffering);\n if (this.cmcdManager_) {\n this.cmcdManager_.setBuffering(isBuffering);\n }\n this.updateStateHistory_();\n\n const dynamicTargetLatency =\n this.config_.streaming.liveSync.dynamicTargetLatency.enabled;\n const maxAttempts =\n this.config_.streaming.liveSync.dynamicTargetLatency.maxAttempts;\n\n\n if (dynamicTargetLatency && isBuffering &&\n this.rebufferingCount_ < maxAttempts) {\n const maxLatency =\n this.config_.streaming.liveSync.dynamicTargetLatency.maxLatency;\n\n const targetLatencyTolerance =\n this.config_.streaming.liveSync.targetLatencyTolerance;\n const rebufferIncrement =\n this.config_.streaming.liveSync.dynamicTargetLatency\n .rebufferIncrement;\n if (this.currentTargetLatency_) {\n this.currentTargetLatency_ = Math.min(\n this.currentTargetLatency_ +\n ++this.rebufferingCount_ * rebufferIncrement,\n maxLatency - targetLatencyTolerance);\n }\n }\n }\n\n // Surface the buffering event so that the app knows if/when we are\n // buffering.\n const eventName = shaka.util.FakeEvent.EventName.Buffering;\n const data = (new Map()).set('buffering', isBuffering);\n this.dispatchEvent(shaka.Player.makeEvent_(eventName, data));\n }\n\n /**\n * A callback for when the playback rate changes. We need to watch the\n * playback rate so that if the playback rate on the media element changes\n * (that was not caused by our play rate controller) we can notify the\n * controller so that it can stay in-sync with the change.\n *\n * @private\n */\n onRateChange_() {\n /** @type {number} */\n const newRate = this.video_.playbackRate;\n\n // On Edge, when someone seeks using the native controls, it will set the\n // playback rate to zero until they finish seeking, after which it will\n // return the playback rate.\n //\n // If the playback rate changes while seeking, Edge will cache the playback\n // rate and use it after seeking.\n //\n // https://github.com/shaka-project/shaka-player/issues/951\n if (newRate == 0) {\n return;\n }\n\n if (this.playRateController_) {\n // The playback rate has changed. This could be us or someone else.\n // If this was us, setting the rate again will be a no-op.\n this.playRateController_.set(newRate);\n }\n\n const event = shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.RateChange);\n this.dispatchEvent(event);\n }\n\n /**\n * Try updating the state history. If the player has not finished\n * initializing, this will be a no-op.\n *\n * @private\n */\n updateStateHistory_() {\n // If we have not finish initializing, this will be a no-op.\n if (!this.stats_) {\n return;\n }\n if (!this.bufferObserver_) {\n return;\n }\n\n const State = shaka.media.BufferingObserver.State;\n\n const history = this.stats_.getStateHistory();\n\n let updateState = 'playing';\n if (this.bufferObserver_.getState() == State.STARVING) {\n updateState = 'buffering';\n } else if (this.isEnded()) {\n updateState = 'ended';\n } else if (this.video_.paused) {\n updateState = 'paused';\n }\n const stateChanged = history.update(updateState);\n\n if (stateChanged) {\n const eventName = shaka.util.FakeEvent.EventName.StateChanged;\n const data = (new Map()).set('newstate', updateState);\n this.dispatchEvent(shaka.Player.makeEvent_(eventName, data));\n }\n }\n\n /**\n * Callback for liveSync and vodDynamicPlaybackRate\n *\n * @private\n */\n onTimeUpdate_() {\n const playbackRate = this.video_.playbackRate;\n const isLive = this.isLive();\n\n if (this.config_.streaming.vodDynamicPlaybackRate && !isLive) {\n const minPlaybackRate =\n this.config_.streaming.vodDynamicPlaybackRateLowBufferRate;\n const bufferFullness = this.getBufferFullness();\n const bufferThreshold =\n this.config_.streaming.vodDynamicPlaybackRateBufferRatio;\n\n if (bufferFullness <= bufferThreshold) {\n if (playbackRate != minPlaybackRate) {\n shaka.log.debug('Buffer fullness ratio (' + bufferFullness + ') ' +\n 'is less than the vodDynamicPlaybackRateBufferRatio (' +\n bufferThreshold + '). Updating playbackRate to ' + minPlaybackRate);\n this.trickPlay(minPlaybackRate, /* useTrickPlayTrack= */ false);\n }\n } else if (bufferFullness == 1) {\n if (playbackRate !== this.playRateController_.getDefaultRate()) {\n shaka.log.debug('Buffer is full. Cancel trick play.');\n this.cancelTrickPlay();\n }\n }\n }\n\n // If the live stream has reached its end, do not sync.\n if (!isLive) {\n return;\n }\n\n const seekRange = this.seekRange();\n if (!Number.isFinite(seekRange.end)) {\n return;\n }\n const currentTime = this.video_.currentTime;\n if (currentTime < seekRange.start) {\n // Bad stream?\n return;\n }\n\n // We don't want to block the user from pausing the stream.\n if (this.video_.paused) {\n return;\n }\n\n let targetLatency;\n let maxLatency;\n let maxPlaybackRate;\n let minLatency;\n let minPlaybackRate;\n const targetLatencyTolerance =\n this.config_.streaming.liveSync.targetLatencyTolerance;\n const dynamicTargetLatency =\n this.config_.streaming.liveSync.dynamicTargetLatency.enabled;\n const stabilityThreshold =\n this.config_.streaming.liveSync.dynamicTargetLatency.stabilityThreshold;\n\n if (this.config_.streaming.liveSync &&\n this.config_.streaming.liveSync.enabled) {\n targetLatency = this.config_.streaming.liveSync.targetLatency;\n maxLatency = targetLatency + targetLatencyTolerance;\n minLatency = Math.max(0, targetLatency - targetLatencyTolerance);\n maxPlaybackRate = this.config_.streaming.liveSync.maxPlaybackRate;\n minPlaybackRate = this.config_.streaming.liveSync.minPlaybackRate;\n } else {\n // serviceDescription must override if it is defined in the MPD and\n // liveSync configuration is not set.\n if (this.manifest_ && this.manifest_.serviceDescription) {\n targetLatency = this.manifest_.serviceDescription.targetLatency;\n if (this.manifest_.serviceDescription.targetLatency != null) {\n maxLatency = this.manifest_.serviceDescription.targetLatency +\n targetLatencyTolerance;\n } else if (this.manifest_.serviceDescription.maxLatency != null) {\n maxLatency = this.manifest_.serviceDescription.maxLatency;\n }\n if (this.manifest_.serviceDescription.targetLatency != null) {\n minLatency = Math.max(0,\n this.manifest_.serviceDescription.targetLatency -\n targetLatencyTolerance);\n } else if (this.manifest_.serviceDescription.minLatency != null) {\n minLatency = this.manifest_.serviceDescription.minLatency;\n }\n maxPlaybackRate =\n this.manifest_.serviceDescription.maxPlaybackRate ||\n this.config_.streaming.liveSync.maxPlaybackRate;\n minPlaybackRate =\n this.manifest_.serviceDescription.minPlaybackRate ||\n this.config_.streaming.liveSync.minPlaybackRate;\n }\n }\n\n if (!this.currentTargetLatency_ && typeof targetLatency === 'number') {\n this.currentTargetLatency_ = targetLatency;\n }\n\n const maxAttempts =\n this.config_.streaming.liveSync.dynamicTargetLatency.maxAttempts;\n if (dynamicTargetLatency && this.targetLatencyReached_ &&\n this.currentTargetLatency_ !== null &&\n typeof targetLatency === 'number' &&\n this.rebufferingCount_ < maxAttempts &&\n (Date.now() - this.targetLatencyReached_) > stabilityThreshold * 1000) {\n const dynamicMinLatency =\n this.config_.streaming.liveSync.dynamicTargetLatency.minLatency;\n const latencyIncrement = (targetLatency - dynamicMinLatency) / 2;\n this.currentTargetLatency_ = Math.max(\n this.currentTargetLatency_ - latencyIncrement,\n // current target latency should be within the tolerance of the min\n // latency to not overshoot it\n dynamicMinLatency + targetLatencyTolerance);\n this.targetLatencyReached_ = Date.now();\n }\n if (dynamicTargetLatency && this.currentTargetLatency_ !== null) {\n maxLatency = this.currentTargetLatency_ + targetLatencyTolerance;\n minLatency = this.currentTargetLatency_ - targetLatencyTolerance;\n }\n\n const latency = seekRange.end - this.video_.currentTime;\n let offset = 0;\n // In src= mode, the seek range isn't updated frequently enough, so we need\n // to fudge the latency number with an offset. The playback rate is used\n // as an offset, since that is the amount we catch up 1 second of\n // accelerated playback.\n if (this.loadMode_ == shaka.Player.LoadMode.SRC_EQUALS) {\n const buffered = this.video_.buffered;\n if (buffered.length > 0) {\n const bufferedEnd = buffered.end(buffered.length - 1);\n offset = Math.max(maxPlaybackRate, bufferedEnd - seekRange.end);\n }\n }\n\n const panicMode = this.config_.streaming.liveSync.panicMode;\n const panicThreshold =\n this.config_.streaming.liveSync.panicThreshold * 1000;\n const timeSinceLastRebuffer =\n Date.now() - this.bufferObserver_.getLastRebufferTime();\n if (panicMode && !minPlaybackRate) {\n minPlaybackRate = this.config_.streaming.liveSync.minPlaybackRate;\n }\n\n if (panicMode && minPlaybackRate &&\n timeSinceLastRebuffer <= panicThreshold) {\n if (playbackRate != minPlaybackRate) {\n shaka.log.debug('Time since last rebuffer (' +\n timeSinceLastRebuffer + 's) ' +\n 'is less than the live sync panicThreshold (' + panicThreshold +\n 's). Updating playbackRate to ' + minPlaybackRate);\n this.trickPlay(minPlaybackRate, /* useTrickPlayTrack= */ false);\n }\n } else if (maxLatency != undefined && maxPlaybackRate &&\n (latency - offset) > maxLatency) {\n if (playbackRate != maxPlaybackRate) {\n shaka.log.debug('Latency (' + latency + 's) is greater than ' +\n 'live sync maxLatency (' + maxLatency + 's). ' +\n 'Updating playbackRate to ' + maxPlaybackRate);\n this.trickPlay(maxPlaybackRate, /* useTrickPlayTrack= */ false);\n }\n this.targetLatencyReached_ = null;\n } else if (minLatency != undefined && minPlaybackRate &&\n (latency - offset) < minLatency) {\n if (playbackRate != minPlaybackRate) {\n shaka.log.debug('Latency (' + latency + 's) is smaller than ' +\n 'live sync minLatency (' + minLatency + 's). ' +\n 'Updating playbackRate to ' + minPlaybackRate);\n this.trickPlay(minPlaybackRate, /* useTrickPlayTrack= */ false);\n }\n this.targetLatencyReached_ = null;\n } else if (playbackRate !== this.playRateController_.getDefaultRate()) {\n this.cancelTrickPlay();\n this.targetLatencyReached_ = Date.now();\n }\n }\n\n /**\n * Callback for video progress events\n *\n * @private\n */\n onVideoProgress_() {\n if (!this.video_) {\n return;\n }\n\n const isQuartile = (quartilePercent, currentPercent) => {\n const NumberUtils = shaka.util.NumberUtils;\n\n if ((NumberUtils.isFloatEqual(quartilePercent, currentPercent) ||\n currentPercent > quartilePercent) &&\n this.completionPercent_ < quartilePercent) {\n this.completionPercent_ = quartilePercent;\n return true;\n }\n return false;\n };\n\n const checkEnded = () => {\n if (this.config_ && this.config_.playRangeEnd != Infinity) {\n // Make sure the video stops when we reach the end.\n // This is required when there is a custom playRangeEnd specified.\n if (this.isEnded()) {\n this.video_.pause();\n }\n }\n };\n\n const seekRange = this.seekRange();\n const duration = seekRange.end - seekRange.start;\n const completionRatio =\n duration > 0 ? this.video_.currentTime / duration : 0;\n\n if (isNaN(completionRatio)) {\n return;\n }\n\n const percent = completionRatio * 100;\n\n let event;\n if (isQuartile(0, percent)) {\n event = shaka.Player.makeEvent_(shaka.util.FakeEvent.EventName.Started);\n } else if (isQuartile(25, percent)) {\n event = shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.FirstQuartile);\n } else if (isQuartile(50, percent)) {\n event = shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.Midpoint);\n } else if (isQuartile(75, percent)) {\n event = shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.ThirdQuartile);\n } else if (isQuartile(100, percent)) {\n event = shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.Complete);\n checkEnded();\n } else {\n checkEnded();\n }\n\n if (event) {\n this.dispatchEvent(event);\n }\n }\n\n /**\n * Callback from Playhead.\n *\n * @private\n */\n onSeek_() {\n if (this.playheadObservers_) {\n this.playheadObservers_.notifyOfSeek();\n }\n if (this.streamingEngine_) {\n this.streamingEngine_.seeked();\n }\n if (this.bufferObserver_) {\n // If we seek into an unbuffered range, we should fire a 'buffering' event\n // immediately. If StreamingEngine can buffer fast enough, we may not\n // update our buffering tracking otherwise.\n this.pollBufferState_();\n }\n }\n\n /**\n * Update AbrManager with variants while taking into account restrictions,\n * preferences, and ABR.\n *\n * On error, this dispatches an error event and returns false.\n *\n * @return {boolean} True if successful.\n * @private\n */\n updateAbrManagerVariants_() {\n try {\n goog.asserts.assert(this.manifest_, 'Manifest should exist by now!');\n this.manifestFilterer_.checkRestrictedVariants(this.manifest_);\n } catch (e) {\n this.onError_(e);\n return false;\n }\n\n const playableVariants = shaka.util.StreamUtils.getPlayableVariants(\n this.manifest_.variants);\n\n // Update the abr manager with newly filtered variants.\n const adaptationSet = this.currentAdaptationSetCriteria_.create(\n playableVariants);\n this.abrManager_.setVariants(Array.from(adaptationSet.values()));\n return true;\n }\n\n /**\n * Chooses a variant from all possible variants while taking into account\n * restrictions, preferences, and ABR.\n *\n * On error, this dispatches an error event and returns null.\n *\n * @return {?shaka.extern.Variant}\n * @private\n */\n chooseVariant_() {\n if (this.updateAbrManagerVariants_()) {\n return this.abrManager_.chooseVariant();\n } else {\n return null;\n }\n }\n\n /**\n * Checks to re-enable variants that were temporarily disabled due to network\n * errors. If any variants are enabled this way, a new variant may be chosen\n * for playback.\n * @private\n */\n checkVariants_() {\n goog.asserts.assert(this.manifest_, 'Should have manifest!');\n\n const now = Date.now() / 1000;\n let hasVariantUpdate = false;\n\n /** @type {function(shaka.extern.Variant):string} */\n const streamsAsString = (variant) => {\n let str = '';\n if (variant.video) {\n str += 'video:' + variant.video.id;\n }\n if (variant.audio) {\n str += str ? '&' : '';\n str += 'audio:' + variant.audio.id;\n }\n return str;\n };\n\n let shouldStopTimer = true;\n for (const variant of this.manifest_.variants) {\n if (variant.disabledUntilTime > 0 && variant.disabledUntilTime <= now) {\n variant.disabledUntilTime = 0;\n hasVariantUpdate = true;\n\n shaka.log.v2('Re-enabled variant with ' + streamsAsString(variant));\n }\n if (variant.disabledUntilTime > 0) {\n shouldStopTimer = false;\n }\n }\n\n if (shouldStopTimer) {\n this.checkVariantsTimer_.stop();\n }\n\n if (hasVariantUpdate) {\n // Reconsider re-enabled variant for ABR switching.\n this.chooseVariantAndSwitch_(\n /* clearBuffer= */ false, /* safeMargin= */ undefined,\n /* force= */ false, /* fromAdaptation= */ false);\n }\n }\n\n /**\n * Choose a text stream from all possible text streams while taking into\n * account user preference.\n *\n * @return {?shaka.extern.Stream}\n * @private\n */\n chooseTextStream_() {\n const subset = shaka.util.StreamUtils.filterStreamsByLanguageAndRole(\n this.manifest_.textStreams,\n this.currentTextLanguage_,\n this.currentTextRole_,\n this.currentTextForced_);\n return subset[0] || null;\n }\n\n /**\n * Chooses a new Variant. If the new variant differs from the old one, it\n * adds the new one to the switch history and switches to it.\n *\n * Called after a config change, a key status event, or an explicit language\n * change.\n *\n * @param {boolean=} clearBuffer Optional clear buffer or not when\n * switch to new variant\n * Defaults to true if not provided\n * @param {number=} safeMargin Optional amount of buffer (in seconds) to\n * retain when clearing the buffer.\n * Defaults to 0 if not provided. Ignored if clearBuffer is false.\n * @private\n */\n chooseVariantAndSwitch_(clearBuffer = true, safeMargin = 0, force = false,\n fromAdaptation = true) {\n goog.asserts.assert(this.config_, 'Must not be destroyed');\n\n // Because we're running this after a config change (manual language\n // change) or a key status event, it is always okay to clear the buffer\n // here.\n const chosenVariant = this.chooseVariant_();\n if (chosenVariant) {\n this.switchVariant_(chosenVariant, fromAdaptation,\n clearBuffer, safeMargin, force);\n }\n }\n\n /**\n * @param {shaka.extern.Variant} variant\n * @param {boolean} fromAdaptation\n * @param {boolean} clearBuffer\n * @param {number} safeMargin\n * @param {boolean=} force\n * @private\n */\n switchVariant_(variant, fromAdaptation, clearBuffer, safeMargin,\n force = false) {\n const currentVariant = this.streamingEngine_.getCurrentVariant();\n if (variant == currentVariant) {\n shaka.log.debug('Variant already selected.');\n // If you want to clear the buffer, we force to reselect the same variant.\n // We don't need to reset the timestampOffset since it's the same variant,\n // so 'adaptation' isn't passed here.\n if (clearBuffer) {\n this.streamingEngine_.switchVariant(variant, clearBuffer, safeMargin,\n /* force= */ true);\n }\n return;\n }\n\n // Add entries to the history.\n this.addVariantToSwitchHistory_(variant, fromAdaptation);\n this.streamingEngine_.switchVariant(\n variant, clearBuffer, safeMargin, force,\n /* adaptation= */ fromAdaptation);\n let oldTrack = null;\n if (currentVariant) {\n oldTrack = shaka.util.StreamUtils.variantToTrack(currentVariant);\n }\n const newTrack = shaka.util.StreamUtils.variantToTrack(variant);\n newTrack.active = true;\n\n if (fromAdaptation) {\n // Dispatch an 'adaptation' event\n this.onAdaptation_(oldTrack, newTrack);\n } else {\n // Dispatch a 'variantchanged' event\n this.onVariantChanged_(oldTrack, newTrack);\n }\n }\n\n /**\n * @param {AudioTrack} track\n * @private\n */\n switchHtml5Track_(track) {\n goog.asserts.assert(this.video_ && this.video_.audioTracks,\n 'Video and video.audioTracks should not be null!');\n const audioTracks = Array.from(this.video_.audioTracks);\n const currentTrack = audioTracks.find((t) => t.enabled);\n\n // This will reset the \"enabled\" of other tracks to false.\n track.enabled = true;\n\n if (!currentTrack) {\n return;\n }\n\n // AirPlay does not reset the \"enabled\" of other tracks to false, so\n // it must be changed by hand.\n if (track.id !== currentTrack.id) {\n currentTrack.enabled = false;\n }\n\n const oldTrack =\n shaka.util.StreamUtils.html5AudioTrackToTrack(currentTrack);\n const newTrack =\n shaka.util.StreamUtils.html5AudioTrackToTrack(track);\n this.onVariantChanged_(oldTrack, newTrack);\n }\n\n /**\n * Decide during startup if text should be streamed/shown.\n * @private\n */\n setInitialTextState_(initialVariant, initialTextStream) {\n // Check if we should show text (based on difference between audio and text\n // languages).\n if (initialTextStream) {\n if (this.shouldInitiallyShowText_(\n initialVariant.audio, initialTextStream)) {\n this.isTextVisible_ = true;\n }\n if (this.isTextVisible_) {\n // If the cached value says to show text, then update the text displayer\n // since it defaults to not shown.\n this.textDisplayer_.setTextVisibility(true);\n goog.asserts.assert(this.shouldStreamText_(),\n 'Should be streaming text');\n }\n this.onTextTrackVisibility_();\n } else {\n this.isTextVisible_ = false;\n }\n }\n\n /**\n * Check if we should show text on screen automatically.\n *\n * @param {?shaka.extern.Stream} audioStream\n * @param {shaka.extern.Stream} textStream\n * @return {boolean}\n * @private\n */\n shouldInitiallyShowText_(audioStream, textStream) {\n const AutoShowText = shaka.config.AutoShowText;\n\n if (this.config_.autoShowText == AutoShowText.NEVER) {\n return false;\n }\n if (this.config_.autoShowText == AutoShowText.ALWAYS) {\n return true;\n }\n\n const LanguageUtils = shaka.util.LanguageUtils;\n\n /** @type {string} */\n const preferredTextLocale =\n LanguageUtils.normalize(this.config_.preferredTextLanguage);\n /** @type {string} */\n const textLocale = LanguageUtils.normalize(textStream.language);\n\n if (this.config_.autoShowText == AutoShowText.IF_PREFERRED_TEXT_LANGUAGE) {\n // Only the text language match matters.\n return LanguageUtils.areLanguageCompatible(\n textLocale,\n preferredTextLocale);\n }\n\n if (this.config_.autoShowText == AutoShowText.IF_SUBTITLES_MAY_BE_NEEDED) {\n if (!audioStream) {\n return false;\n }\n /* The text should automatically be shown if the text is\n * language-compatible with the user's text language preference, but not\n * compatible with the audio. These are cases where we deduce that\n * subtitles may be needed.\n *\n * For example:\n * preferred | chosen | chosen |\n * text | text | audio | show\n * -----------------------------------\n * en-CA | en | jp | true\n * en | en-US | fr | true\n * fr-CA | en-US | jp | false\n * en-CA | en-US | en-US | false\n *\n */\n /** @type {string} */\n const audioLocale = LanguageUtils.normalize(audioStream.language);\n\n return (\n LanguageUtils.areLanguageCompatible(textLocale, preferredTextLocale) &&\n !LanguageUtils.areLanguageCompatible(audioLocale, textLocale));\n }\n\n shaka.log.alwaysWarn('Invalid autoShowText setting!');\n return false;\n }\n\n /**\n * Callback from StreamingEngine.\n *\n * @private\n */\n onManifestUpdate_() {\n if (this.parser_ && this.parser_.update) {\n this.parser_.update();\n }\n }\n\n /**\n * Callback from StreamingEngine.\n *\n * @param {number} start\n * @param {number} end\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {boolean} isMuxed\n *\n * @private\n */\n onSegmentAppended_(start, end, contentType, isMuxed) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n if (contentType != ContentType.TEXT) {\n // When we append a segment to media source (via streaming engine) we are\n // changing what data we have buffered, so notify the playhead of the\n // change.\n if (this.playhead_) {\n this.playhead_.notifyOfBufferingChange();\n // Skip the initial buffer gap\n const startTime = this.mediaSourceEngine_.bufferStart(contentType);\n if (\n !this.isLive() &&\n // If not paused then GapJumpingController will handle this gap.\n this.video_.paused &&\n startTime != null &&\n startTime > 0 &&\n this.playhead_.getTime() < startTime\n ) {\n this.playhead_.setStartTime(startTime);\n }\n }\n this.pollBufferState_();\n }\n\n // Dispatch an event for users to consume, too.\n const data = new Map()\n .set('start', start)\n .set('end', end)\n .set('contentType', contentType)\n .set('isMuxed', isMuxed);\n this.dispatchEvent(shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.SegmentAppended, data));\n }\n\n /**\n * Callback from AbrManager.\n *\n * @param {shaka.extern.Variant} variant\n * @param {boolean=} clearBuffer\n * @param {number=} safeMargin Optional amount of buffer (in seconds) to\n * retain when clearing the buffer.\n * Defaults to 0 if not provided. Ignored if clearBuffer is false.\n * @private\n */\n switch_(variant, clearBuffer = false, safeMargin = 0) {\n shaka.log.debug('switch_');\n goog.asserts.assert(this.config_.abr.enabled,\n 'AbrManager should not call switch while disabled!');\n\n if (!this.manifest_) {\n // It could come from a preload manager operation.\n return;\n }\n\n if (!this.streamingEngine_) {\n // There's no way to change it.\n return;\n }\n\n if (variant == this.streamingEngine_.getCurrentVariant()) {\n // This isn't a change.\n return;\n }\n\n this.switchVariant_(variant, /* fromAdaptation= */ true,\n clearBuffer, safeMargin);\n }\n\n /**\n * Dispatches an 'adaptation' event.\n * @param {?shaka.extern.Track} from\n * @param {shaka.extern.Track} to\n * @private\n */\n onAdaptation_(from, to) {\n // Delay the 'adaptation' event so that StreamingEngine has time to absorb\n // the changes before the user tries to query it.\n const data = new Map()\n .set('oldTrack', from)\n .set('newTrack', to);\n if (this.lcevcDec_) {\n this.lcevcDec_.updateVariant(to, this.getManifestType());\n }\n const event = shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.Adaptation, data);\n this.delayDispatchEvent_(event);\n }\n\n /**\n * Dispatches a 'trackschanged' event.\n * @private\n */\n onTracksChanged_() {\n // Delay the 'trackschanged' event so StreamingEngine has time to absorb the\n // changes before the user tries to query it.\n const event = shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.TracksChanged);\n this.delayDispatchEvent_(event);\n }\n\n /**\n * Dispatches a 'variantchanged' event.\n * @param {?shaka.extern.Track} from\n * @param {shaka.extern.Track} to\n * @private\n */\n onVariantChanged_(from, to) {\n // Delay the 'variantchanged' event so StreamingEngine has time to absorb\n // the changes before the user tries to query it.\n const data = new Map()\n .set('oldTrack', from)\n .set('newTrack', to);\n if (this.lcevcDec_) {\n this.lcevcDec_.updateVariant(to, this.getManifestType());\n }\n\n const event = shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.VariantChanged, data);\n this.delayDispatchEvent_(event);\n }\n\n /**\n * Dispatches a 'textchanged' event.\n * @private\n */\n onTextChanged_() {\n // Delay the 'textchanged' event so StreamingEngine time to absorb the\n // changes before the user tries to query it.\n const event = shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.TextChanged);\n this.delayDispatchEvent_(event);\n }\n\n /** @private */\n onTextTrackVisibility_() {\n const event = shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.TextTrackVisibility);\n this.delayDispatchEvent_(event);\n }\n\n /** @private */\n onAbrStatusChanged_() {\n // Restore disabled variants if abr get disabled\n if (!this.config_.abr.enabled) {\n this.restoreDisabledVariants_();\n }\n\n const data = (new Map()).set('newStatus', this.config_.abr.enabled);\n this.delayDispatchEvent_(shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.AbrStatusChanged, data));\n }\n\n /**\n * @private\n */\n setTextDisplayerLanguage_() {\n const activeTextTrack = this.getTextTracks().find((t) => t.active);\n if (activeTextTrack &&\n this.textDisplayer_ && this.textDisplayer_.setTextLanguage) {\n this.textDisplayer_.setTextLanguage(activeTextTrack.language);\n }\n }\n\n /**\n * @param {boolean} updateAbrManager\n * @private\n */\n restoreDisabledVariants_(updateAbrManager=true) {\n if (this.loadMode_ != shaka.Player.LoadMode.MEDIA_SOURCE) {\n return;\n }\n goog.asserts.assert(this.manifest_, 'Should have manifest!');\n\n shaka.log.v2('Restoring all disabled streams...');\n\n this.checkVariantsTimer_.stop();\n\n for (const variant of this.manifest_.variants) {\n variant.disabledUntilTime = 0;\n }\n\n if (updateAbrManager) {\n this.updateAbrManagerVariants_();\n }\n }\n\n /**\n * Temporarily disable all variants containing |stream|\n * @param {shaka.extern.Stream} stream\n * @param {number} disableTime\n * @return {boolean}\n */\n disableStream(stream, disableTime) {\n if (!this.config_.abr.enabled ||\n this.loadMode_ === shaka.Player.LoadMode.DESTROYED) {\n return false;\n }\n\n if (!navigator.onLine) {\n // Don't disable variants if we're completely offline, or else we end up\n // rapidly restricting all of them.\n return false;\n }\n\n if (disableTime == 0) {\n return false;\n }\n\n if (!this.manifest_) {\n return false;\n }\n\n // It only makes sense to disable a stream if we have an alternative else we\n // end up disabling all variants.\n const hasAltStream = this.manifest_.variants.some((variant) => {\n const altStream = variant[stream.type];\n\n if (altStream && altStream.id !== stream.id &&\n !variant.disabledUntilTime) {\n if (shaka.util.StreamUtils.isAudio(stream)) {\n return stream.language === altStream.language;\n }\n return true;\n }\n return false;\n });\n\n if (hasAltStream) {\n let didDisableStream = false;\n\n let isTrickModeVideo = false;\n\n for (const variant of this.manifest_.variants) {\n const candidate = variant[stream.type];\n\n if (!candidate) {\n continue;\n }\n\n if (candidate.id === stream.id) {\n variant.disabledUntilTime = (Date.now() / 1000) + disableTime;\n didDisableStream = true;\n\n shaka.log.v2(\n 'Disabled stream ' + stream.type + ':' + stream.id +\n ' for ' + disableTime + ' seconds...');\n } else if (candidate.trickModeVideo &&\n candidate.trickModeVideo.id == stream.id) {\n isTrickModeVideo = true;\n }\n }\n\n if (!didDisableStream && isTrickModeVideo) {\n return false;\n }\n\n goog.asserts.assert(didDisableStream, 'Must have disabled stream');\n\n this.checkVariantsTimer_.tickEvery(1);\n\n // Get the safeMargin to ensure a seamless playback\n const {video} = this.getBufferedInfo();\n const safeMargin =\n video.reduce((size, {start, end}) => size + end - start, 0);\n\n // Update abr manager variants and switch to recover playback\n this.chooseVariantAndSwitch_(\n /* clearBuffer= */ false, /* safeMargin= */ safeMargin,\n /* force= */ true, /* fromAdaptation= */ false);\n return true;\n }\n\n shaka.log.warning(\n 'No alternate stream found for active ' + stream.type + ' stream. ' +\n 'Will ignore request to disable stream...');\n\n return false;\n }\n\n /**\n * @param {!shaka.util.Error} error\n * @private\n */\n async onError_(error) {\n goog.asserts.assert(error instanceof shaka.util.Error, 'Wrong error type!');\n\n // Errors dispatched after |destroy| is called are not meaningful and should\n // be safe to ignore.\n if (this.loadMode_ == shaka.Player.LoadMode.DESTROYED) {\n return;\n }\n\n if (error.severity === shaka.util.Error.Severity.RECOVERABLE) {\n this.stats_.addNonFatalError();\n }\n\n let fireError = true;\n if (this.fullyLoaded_ && this.manifest_ && this.streamingEngine_ &&\n (error.code == shaka.util.Error.Code.VIDEO_ERROR ||\n error.code == shaka.util.Error.Code.MEDIA_SOURCE_OPERATION_FAILED ||\n error.code == shaka.util.Error.Code.MEDIA_SOURCE_OPERATION_THREW ||\n error.code == shaka.util.Error.Code.TRANSMUXING_FAILED)) {\n try {\n const ret = await this.streamingEngine_.resetMediaSource();\n fireError = !ret;\n if (ret) {\n const event = shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.MediaSourceRecovered);\n this.dispatchEvent(event);\n }\n } catch (e) {\n fireError = true;\n }\n }\n if (!fireError) {\n return;\n }\n\n // Restore disabled variant if the player experienced a critical error.\n if (error.severity === shaka.util.Error.Severity.CRITICAL) {\n this.restoreDisabledVariants_(/* updateAbrManager= */ false);\n }\n\n const eventName = shaka.util.FakeEvent.EventName.Error;\n const event = shaka.Player.makeEvent_(\n eventName, (new Map()).set('detail', error));\n this.dispatchEvent(event);\n if (event.defaultPrevented) {\n error.handled = true;\n }\n }\n\n /**\n * Load a new font on the page. If the font was already loaded, it does\n * nothing.\n *\n * @param {string} name\n * @param {string} url\n * @export\n */\n async addFont(name, url) {\n if ('fonts' in document && 'FontFace' in window ) {\n await document.fonts.ready;\n if (!('entries' in document.fonts)) {\n return;\n }\n const fontFaceSetIteratorToArray = (target) => {\n const iterable = target.entries();\n const results = [];\n let iterator = iterable.next();\n while (iterator.done === false) {\n results.push(iterator.value);\n iterator = iterable.next();\n }\n return results;\n };\n for (const fontFace of fontFaceSetIteratorToArray(document.fonts)) {\n if (fontFace.family == name && fontFace.display == 'swap') {\n // Font already loaded.\n return;\n }\n }\n const fontFace = new FontFace(name, `url(${url})`, {display: 'swap'});\n document.fonts.add(fontFace);\n }\n }\n\n /**\n * When we fire region events, we need to copy the information out of the\n * region to break the connection with the player's internal data. We do the\n * copy here because this is the transition point between the player and the\n * app.\n *\n * @param {!shaka.util.FakeEvent.EventName} eventName\n * @param {shaka.extern.TimelineRegionInfo} region\n * @param {shaka.util.FakeEventTarget=} eventTarget\n *\n * @private\n */\n onRegionEvent_(eventName, region, eventTarget = this) {\n // Always make a copy to avoid exposing our internal data to the app.\n const clone = {\n schemeIdUri: region.schemeIdUri,\n value: region.value,\n startTime: region.startTime,\n endTime: region.endTime,\n id: region.id,\n eventElement: region.eventElement,\n eventNode: region.eventNode,\n };\n\n const data = (new Map()).set('detail', clone);\n eventTarget.dispatchEvent(shaka.Player.makeEvent_(eventName, data));\n }\n\n /**\n * When notified of a media quality change we need to emit a\n * MediaQualityChange event to the app.\n *\n * @param {shaka.extern.MediaQualityInfo} mediaQuality\n * @param {number} position\n * @param {boolean} audioTrackChanged This is to specify whether this should\n * trigger a MediaQualityChangedEvent or an AudioTrackChangedEvent. Defaults\n * to false to trigger MediaQualityChangedEvent.\n *\n * @private\n */\n onMediaQualityChange_(mediaQuality, position, audioTrackChanged = false) {\n // Always make a copy to avoid exposing our internal data to the app.\n const clone = {\n bandwidth: mediaQuality.bandwidth,\n audioSamplingRate: mediaQuality.audioSamplingRate,\n codecs: mediaQuality.codecs,\n contentType: mediaQuality.contentType,\n frameRate: mediaQuality.frameRate,\n height: mediaQuality.height,\n mimeType: mediaQuality.mimeType,\n channelsCount: mediaQuality.channelsCount,\n pixelAspectRatio: mediaQuality.pixelAspectRatio,\n width: mediaQuality.width,\n label: mediaQuality.label,\n roles: mediaQuality.roles,\n language: mediaQuality.language,\n };\n\n const data = new Map()\n .set('mediaQuality', clone)\n .set('position', position);\n\n this.dispatchEvent(shaka.Player.makeEvent_(\n audioTrackChanged ?\n shaka.util.FakeEvent.EventName.AudioTrackChanged :\n shaka.util.FakeEvent.EventName.MediaQualityChanged,\n data));\n }\n\n /**\n * Turn the media element's error object into a Shaka Player error object.\n *\n * @param {boolean=} printAllErrors\n * @return {shaka.util.Error}\n * @private\n */\n videoErrorToShakaError_(printAllErrors = true) {\n goog.asserts.assert(this.video_.error,\n 'Video error expected, but missing!');\n if (!this.video_.error) {\n if (printAllErrors) {\n return new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.VIDEO_ERROR);\n }\n return null;\n }\n\n const code = this.video_.error.code;\n if (!printAllErrors && code == 1 /* MEDIA_ERR_ABORTED */) {\n // Ignore this error code, which should only occur when navigating away or\n // deliberately stopping playback of HTTP content.\n return null;\n }\n\n // Extra error information from MS Edge:\n let extended = this.video_.error.msExtendedCode;\n if (extended) {\n // Convert to unsigned:\n if (extended < 0) {\n extended += Math.pow(2, 32);\n }\n // Format as hex:\n extended = extended.toString(16);\n }\n\n // Extra error information from Chrome:\n const message = this.video_.error.message;\n\n return new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.VIDEO_ERROR,\n code, extended, message);\n }\n\n /**\n * @param {!Event} event\n * @private\n */\n onVideoError_(event) {\n const error = this.videoErrorToShakaError_(/* printAllErrors= */ false);\n if (!error) {\n return;\n }\n this.onError_(error);\n }\n\n /**\n * @param {!Object.} keyStatusMap A map of hex key IDs to\n * statuses.\n * @private\n */\n onKeyStatus_(keyStatusMap) {\n goog.asserts.assert(this.streamingEngine_, 'Cannot be called in src= mode');\n\n const event = shaka.Player.makeEvent_(\n shaka.util.FakeEvent.EventName.KeyStatusChanged);\n this.dispatchEvent(event);\n\n let keyIds = Object.keys(keyStatusMap);\n if (keyIds.length == 0) {\n shaka.log.warning(\n 'Got a key status event without any key statuses, so we don\\'t ' +\n 'know the real key statuses. If we don\\'t have all the keys, ' +\n 'you\\'ll need to set restrictions so we don\\'t select those tracks.');\n }\n\n // Non-standard version of global key status. Modify it to match standard\n // behavior.\n if (keyIds.length == 1 && keyIds[0] == '') {\n keyIds = ['00'];\n keyStatusMap = {'00': keyStatusMap['']};\n }\n\n // If EME is using a synthetic key ID, the only key ID is '00' (a single 0\n // byte). In this case, it is only used to report global success/failure.\n // See note about old platforms in: https://bit.ly/2tpez5Z\n const isGlobalStatus = keyIds.length == 1 && keyIds[0] == '00';\n if (isGlobalStatus) {\n shaka.log.warning(\n 'Got a synthetic key status event, so we don\\'t know the real key ' +\n 'statuses. If we don\\'t have all the keys, you\\'ll need to set ' +\n 'restrictions so we don\\'t select those tracks.');\n }\n\n const restrictedStatuses = shaka.media.ManifestFilterer.restrictedStatuses;\n let tracksChanged = false;\n\n goog.asserts.assert(this.drmEngine_, 'drmEngine should be non-null here.');\n\n // Only filter tracks for keys if we have some key statuses to look at.\n if (keyIds.length) {\n for (const variant of this.manifest_.variants) {\n const streams = shaka.util.StreamUtils.getVariantStreams(variant);\n\n for (const stream of streams) {\n const originalAllowed = variant.allowedByKeySystem;\n\n // Only update if we have key IDs for the stream. If the keys aren't\n // all present, then the track should be restricted.\n if (stream.keyIds.size) {\n variant.allowedByKeySystem = true;\n\n for (const keyId of stream.keyIds) {\n const keyStatus = keyStatusMap[isGlobalStatus ? '00' : keyId];\n if (keyStatus || this.drmEngine_.hasManifestInitData()) {\n variant.allowedByKeySystem = variant.allowedByKeySystem &&\n !!keyStatus && !restrictedStatuses.includes(keyStatus);\n }\n }\n }\n\n if (originalAllowed != variant.allowedByKeySystem) {\n tracksChanged = true;\n }\n } // for (const stream of streams)\n } // for (const variant of this.manifest_.variants)\n } // if (keyIds.size)\n\n if (tracksChanged) {\n this.onTracksChanged_();\n const variantsUpdated = this.updateAbrManagerVariants_();\n if (!variantsUpdated) {\n return;\n }\n }\n\n const currentVariant = this.streamingEngine_.getCurrentVariant();\n if (currentVariant && !currentVariant.allowedByKeySystem) {\n shaka.log.debug('Choosing new streams after key status changed');\n this.chooseVariantAndSwitch_();\n }\n }\n\n /**\n * @return {boolean} true if we should stream text right now.\n * @private\n */\n shouldStreamText_() {\n return this.config_.streaming.alwaysStreamText || this.isTextTrackVisible();\n }\n\n /**\n * Applies playRangeStart and playRangeEnd to the given timeline. This will\n * only affect non-live content.\n *\n * @param {shaka.media.PresentationTimeline} timeline\n * @param {number} playRangeStart\n * @param {number} playRangeEnd\n *\n * @private\n */\n static applyPlayRange_(timeline, playRangeStart, playRangeEnd) {\n if (playRangeStart > 0) {\n if (timeline.isLive()) {\n shaka.log.warning(\n '|playRangeStart| has been configured for live content. ' +\n 'Ignoring the setting.');\n } else {\n timeline.setUserSeekStart(playRangeStart);\n }\n }\n\n // If the playback has been configured to end before the end of the\n // presentation, update the duration unless it's live content.\n const fullDuration = timeline.getDuration();\n if (playRangeEnd < fullDuration) {\n if (timeline.isLive()) {\n shaka.log.warning(\n '|playRangeEnd| has been configured for live content. ' +\n 'Ignoring the setting.');\n } else {\n timeline.setDuration(playRangeEnd);\n }\n }\n }\n\n /**\n * Fire an event, but wait a little bit so that the immediate execution can\n * complete before the event is handled.\n *\n * @param {!shaka.util.FakeEvent} event\n * @private\n */\n async delayDispatchEvent_(event) {\n // Wait until the next interpreter cycle.\n await Promise.resolve();\n\n // Only dispatch the event if we are still alive.\n if (this.loadMode_ != shaka.Player.LoadMode.DESTROYED) {\n this.dispatchEvent(event);\n }\n }\n\n /**\n * Get the normalized languages for a group of tracks.\n *\n * @param {!Array.} tracks\n * @return {!Set.}\n * @private\n */\n static getLanguagesFrom_(tracks) {\n const languages = new Set();\n\n for (const track of tracks) {\n if (track.language) {\n languages.add(shaka.util.LanguageUtils.normalize(track.language));\n } else {\n languages.add('und');\n }\n }\n\n return languages;\n }\n\n /**\n * Get all permutations of normalized languages and role for a group of\n * tracks.\n *\n * @param {!Array.} tracks\n * @return {!Array.}\n * @private\n */\n static getLanguageAndRolesFrom_(tracks) {\n /** @type {!Map.} */\n const languageToRoles = new Map();\n /** @type {!Map.>} */\n const languageRoleToLabel = new Map();\n\n for (const track of tracks) {\n let language = 'und';\n let roles = [];\n\n if (track.language) {\n language = shaka.util.LanguageUtils.normalize(track.language);\n }\n\n if (track.type == 'variant') {\n roles = track.audioRoles;\n } else {\n roles = track.roles;\n }\n\n if (!roles || !roles.length) {\n // We must have an empty role so that we will still get a language-role\n // entry from our Map.\n roles = [''];\n }\n\n if (!languageToRoles.has(language)) {\n languageToRoles.set(language, new Set());\n }\n\n for (const role of roles) {\n languageToRoles.get(language).add(role);\n if (track.label) {\n if (!languageRoleToLabel.has(language)) {\n languageRoleToLabel.set(language, new Map());\n }\n languageRoleToLabel.get(language).set(role, track.label);\n }\n }\n }\n\n // Flatten our map to an array of language-role pairs.\n const pairings = [];\n languageToRoles.forEach((roles, language) => {\n for (const role of roles) {\n let label = null;\n if (languageRoleToLabel.has(language) &&\n languageRoleToLabel.get(language).has(role)) {\n label = languageRoleToLabel.get(language).get(role);\n }\n pairings.push({language, role, label});\n }\n });\n return pairings;\n }\n\n /**\n * Assuming the player is playing content with media source, check if the\n * player has buffered enough content to make it to the end of the\n * presentation.\n *\n * @return {boolean}\n * @private\n */\n isBufferedToEndMS_() {\n goog.asserts.assert(\n this.video_,\n 'We need a video element to get buffering information');\n goog.asserts.assert(\n this.mediaSourceEngine_,\n 'We need a media source engine to get buffering information');\n goog.asserts.assert(\n this.manifest_,\n 'We need a manifest to get buffering information');\n\n // This is a strong guarantee that we are buffered to the end, because it\n // means the playhead is already at that end.\n if (this.isEnded()) {\n return true;\n }\n\n // This means that MediaSource has buffered the final segment in all\n // SourceBuffers and is no longer accepting additional segments.\n if (this.mediaSourceEngine_.ended()) {\n return true;\n }\n\n // Live streams are \"buffered to the end\" when they have buffered to the\n // live edge or beyond (into the region covered by the presentation delay).\n if (this.manifest_.presentationTimeline.isLive()) {\n const liveEdge =\n this.manifest_.presentationTimeline.getSegmentAvailabilityEnd();\n const bufferEnd =\n shaka.media.TimeRangesUtils.bufferEnd(this.video_.buffered);\n\n if (bufferEnd != null && bufferEnd >= liveEdge) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Assuming the player is playing content with src=, check if the player has\n * buffered enough content to make it to the end of the presentation.\n *\n * @return {boolean}\n * @private\n */\n isBufferedToEndSrc_() {\n goog.asserts.assert(\n this.video_,\n 'We need a video element to get buffering information');\n\n // This is a strong guarantee that we are buffered to the end, because it\n // means the playhead is already at that end.\n if (this.isEnded()) {\n return true;\n }\n\n // If we have buffered to the duration of the content, it means we will have\n // enough content to buffer to the end of the presentation.\n const bufferEnd =\n shaka.media.TimeRangesUtils.bufferEnd(this.video_.buffered);\n\n // Because Safari's native HLS reports slightly inaccurate values for\n // bufferEnd here, we use a fudge factor. Without this, we can end up in a\n // buffering state at the end of the stream. See issue #2117.\n const fudge = 1; // 1000 ms\n return bufferEnd != null && bufferEnd >= this.video_.duration - fudge;\n }\n\n /**\n * Create an error for when we purposely interrupt a load operation.\n *\n * @return {!shaka.util.Error}\n * @private\n */\n createAbortLoadError_() {\n return new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.PLAYER,\n shaka.util.Error.Code.LOAD_INTERRUPTED);\n }\n\n /**\n * Indicate if we are using remote playback.\n *\n * @return {boolean}\n * @export\n */\n isRemotePlayback() {\n if (!this.video_ || !this.video_.remote) {\n return false;\n }\n return this.video_.remote.state != 'disconnected';\n }\n\n /**\n * Indicate if the video has ended.\n *\n * @return {boolean}\n * @export\n */\n isEnded() {\n if (!this.video_ || this.video_.ended) {\n return true;\n }\n return this.video_.currentTime >= this.seekRange().end;\n }\n};\n\n/**\n * In order to know what method of loading the player used for some content, we\n * have this enum. It lets us know if content has not been loaded, loaded with\n * media source, or loaded with src equals.\n *\n * This enum has a low resolution, because it is only meant to express the\n * outer limits of the various states that the player is in. For example, when\n * someone calls a public method on player, it should not matter if they have\n * initialized drm engine, it should only matter if they finished loading\n * content.\n *\n * @enum {number}\n * @export\n */\nshaka.Player.LoadMode = {\n 'DESTROYED': 0,\n 'NOT_LOADED': 1,\n 'MEDIA_SOURCE': 2,\n 'SRC_EQUALS': 3,\n};\n\n/**\n * The typical buffering threshold. When we have less than this buffered (in\n * seconds), we enter a buffering state. This specific value is based on manual\n * testing and evaluation across a variety of platforms.\n *\n * To make the buffering logic work in all cases, this \"typical\" threshold will\n * be overridden if the rebufferingGoal configuration is too low.\n *\n * @const {number}\n * @private\n */\nshaka.Player.TYPICAL_BUFFERING_THRESHOLD_ = 0.5;\n\n/**\n * @define {string} A version number taken from git at compile time.\n * @export\n */\n// eslint-disable-next-line no-useless-concat, max-len\nshaka.Player.version = 'v4.12.6' + '-uncompiled'; // x-release-please-version\n\n// Initialize the deprecation system using the version string we just set\n// on the player.\nshaka.Deprecate.init(shaka.Player.version);\n\n\n/** @private {!Object.} */\nshaka.Player.supportPlugins_ = {};\n\n\n/** @private {?shaka.extern.IAdManager.Factory} */\nshaka.Player.adManagerFactory_ = null;\n\n\n/**\n * @const {string}\n */\nshaka.Player.TextTrackLabel = 'Shaka Player TextTrack';\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.config.AutoShowText');\n\n/**\n * @enum {number}\n * @export\n */\nshaka.config.AutoShowText = {\n /** Never show text automatically on startup. */\n 'NEVER': 0,\n /** Always show text automatically on startup. */\n 'ALWAYS': 1,\n /**\n * Show text automatically on startup if it matches the preferred text\n * language.\n */\n 'IF_PREFERRED_TEXT_LANGUAGE': 2,\n /**\n * Show text automatically on startup if we think that subtitles may be\n * needed. This is specifically if the selected text matches the preferred\n * text language AND is different from the initial audio language. (Example:\n * You prefer English, but the audio is only available in French, so English\n * subtitles should be enabled by default.)\n *
\n * This is the default setting.\n */\n 'IF_SUBTITLES_MAY_BE_NEEDED': 3,\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.config.CodecSwitchingStrategy');\n\n/**\n * @enum {string}\n * @export\n */\nshaka.config.CodecSwitchingStrategy = {\n /**\n * Allow codec switching which will always involve reloading\n * the .\n */\n 'RELOAD': 'reload',\n /**\n * Allow codec switching; determine if SourceBuffer.changeType\n * is available and attempt to use this first, but fall back to reloading\n * MediaSource if not available.\n *
\n * Note: Some devices that support SourceBuffer.changeType can\n * become stuck in a pause state.\n */\n 'SMOOTH': 'smooth',\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.net.Backoff');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.Timer');\n\n\n/**\n * Backoff represents delay and backoff state. This is used by NetworkingEngine\n * for individual requests and by StreamingEngine to retry streaming failures.\n *\n * @final\n */\nshaka.net.Backoff = class {\n /**\n * @param {shaka.extern.RetryParameters} parameters\n * @param {boolean=} autoReset If true, start at a \"first retry\" state and\n * and auto-reset that state when we reach maxAttempts.\n * Default set to false.\n */\n constructor(parameters, autoReset = false) {\n // Set defaults as we unpack these, so that individual app-level requests in\n // NetworkingEngine can be missing parameters.\n\n const defaults = shaka.net.Backoff.defaultRetryParameters();\n\n /**\n * @const\n * @private {number}\n */\n this.maxAttempts_ = (parameters.maxAttempts == null) ?\n defaults.maxAttempts : parameters.maxAttempts;\n\n goog.asserts.assert(this.maxAttempts_ >= 1, 'maxAttempts should be >= 1');\n\n /**\n * @const\n * @private {number}\n */\n this.baseDelay_ = (parameters.baseDelay == null) ?\n defaults.baseDelay : parameters.baseDelay;\n\n goog.asserts.assert(this.baseDelay_ >= 0, 'baseDelay should be >= 0');\n\n /**\n * @const\n * @private {number}\n */\n this.fuzzFactor_ = (parameters.fuzzFactor == null) ?\n defaults.fuzzFactor : parameters.fuzzFactor;\n\n goog.asserts.assert(this.fuzzFactor_ >= 0, 'fuzzFactor should be >= 0');\n\n /**\n * @const\n * @private {number}\n */\n this.backoffFactor_ = (parameters.backoffFactor == null) ?\n defaults.backoffFactor : parameters.backoffFactor;\n\n goog.asserts.assert(\n this.backoffFactor_ >= 0, 'backoffFactor should be >= 0');\n\n /** @private {number} */\n this.numAttempts_ = 0;\n\n /** @private {number} */\n this.nextUnfuzzedDelay_ = this.baseDelay_;\n\n /** @private {boolean} */\n this.autoReset_ = autoReset;\n\n if (this.autoReset_) {\n // There is no delay before the first attempt. In StreamingEngine (the\n // intended user of auto-reset mode), the first attempt was implied, so we\n // reset numAttempts to 1. Therefore maxAttempts (which includes the\n // first attempt) must be at least 2 for us to see a delay.\n goog.asserts.assert(this.maxAttempts_ >= 2,\n 'maxAttempts must be >= 2 for autoReset == true');\n this.numAttempts_ = 1;\n }\n }\n\n /**\n * @return {!Promise} Resolves when the caller may make an attempt, possibly\n * after a delay. Rejects if no more attempts are allowed.\n */\n async attempt() {\n if (this.numAttempts_ >= this.maxAttempts_) {\n if (this.autoReset_) {\n this.reset_();\n } else {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.PLAYER,\n shaka.util.Error.Code.ATTEMPTS_EXHAUSTED);\n }\n }\n\n const currentAttempt = this.numAttempts_;\n this.numAttempts_++;\n\n if (currentAttempt == 0) {\n goog.asserts.assert(!this.autoReset_, 'Failed to delay with auto-reset!');\n return;\n }\n\n // We've already tried before, so delay the Promise.\n\n // Fuzz the delay to avoid tons of clients hitting the server at once\n // after it recovers from whatever is causing it to fail.\n const fuzzedDelayMs = shaka.net.Backoff.fuzz_(\n this.nextUnfuzzedDelay_, this.fuzzFactor_);\n\n await new Promise((resolve) => {\n shaka.net.Backoff.defer(fuzzedDelayMs, resolve);\n });\n\n // Update delay_ for next time.\n this.nextUnfuzzedDelay_ *= this.backoffFactor_;\n }\n\n /**\n * Gets a copy of the default retry parameters.\n *\n * @return {shaka.extern.RetryParameters}\n */\n static defaultRetryParameters() {\n // Use a function rather than a constant member so the calling code can\n // modify the values without affecting other call results.\n return {\n maxAttempts: 2,\n baseDelay: 1000,\n backoffFactor: 2,\n fuzzFactor: 0.5,\n timeout: 30000,\n stallTimeout: 5000,\n connectionTimeout: 10000,\n };\n }\n\n /**\n * Fuzz the input value by +/- fuzzFactor. For example, a fuzzFactor of 0.5\n * will create a random value that is between 50% and 150% of the input value.\n *\n * @param {number} value\n * @param {number} fuzzFactor\n * @return {number} The fuzzed value\n * @private\n */\n static fuzz_(value, fuzzFactor) {\n // A random number between -1 and +1.\n const negToPosOne = (Math.random() * 2.0) - 1.0;\n\n // A random number between -fuzzFactor and +fuzzFactor.\n const negToPosFuzzFactor = negToPosOne * fuzzFactor;\n\n // The original value, fuzzed by +/- fuzzFactor.\n return value * (1.0 + negToPosFuzzFactor);\n }\n\n /**\n * Reset state in autoReset mode.\n * @private\n */\n reset_() {\n goog.asserts.assert(this.autoReset_, 'Should only be used for auto-reset!');\n this.numAttempts_ = 1;\n this.nextUnfuzzedDelay_ = this.baseDelay_;\n }\n\n /**\n * This method is only public for testing. It allows us to intercept the\n * time-delay call.\n *\n * @param {number} delayInMs\n * @param {function()} callback\n */\n static defer(delayInMs, callback) {\n const timer = new shaka.util.Timer(callback);\n timer.tickAfter(delayInMs / 1000);\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.PublicPromise');\n\n\n/**\n * @summary\n * A utility to create Promises with convenient public resolve and reject\n * methods.\n *\n * @extends {Promise.}\n * @template T\n */\nshaka.util.PublicPromise = class {\n /**\n * @return {!Promise.}\n */\n constructor() {\n let resolvePromise;\n let rejectPromise;\n\n // Promise.call causes an error. It seems that inheriting from a native\n // Promise is not permitted by JavaScript interpreters.\n\n // The work-around is to construct a Promise object, modify it to look like\n // the compiler's picture of PublicPromise, then return it. The caller of\n // new PublicPromise will receive |promise| instead of |this|, and the\n // compiler will be aware of the additional properties |resolve| and\n // |reject|.\n\n const promise = new Promise(((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n }));\n\n // Now cast the Promise object to our subclass PublicPromise so that the\n // compiler will permit us to attach resolve() and reject() to it.\n const publicPromise = /** @type {shaka.util.PublicPromise} */(promise);\n publicPromise.resolve = resolvePromise;\n publicPromise.reject = rejectPromise;\n\n return publicPromise;\n }\n\n\n /** @param {T=} value */\n resolve(value) {}\n\n\n /** @param {*=} reason */\n reject(reason) {}\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.AbortableOperation');\n\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.PublicPromise');\n\n/**\n * A utility to wrap abortable operations. Note that these are not cancelable.\n * Cancelation implies undoing what has been done so far, whereas aborting only\n * means that further work is stopped.\n *\n * @implements {shaka.extern.IAbortableOperation.}\n * @template T\n * @export\n */\nshaka.util.AbortableOperation = class {\n /**\n * @param {!Promise.} promise\n * A Promise which represents the underlying operation. It is resolved when\n * the operation is complete, and rejected if the operation fails or is\n * aborted. Aborted operations should be rejected with a shaka.util.Error\n * object using the error code OPERATION_ABORTED.\n * @param {function():!Promise} onAbort\n * Will be called by this object to abort the underlying operation.\n * This is not cancelation, and will not necessarily result in any work\n * being undone. abort() should return a Promise which is resolved when the\n * underlying operation has been aborted. The returned Promise should never\n * be rejected.\n */\n constructor(promise, onAbort) {\n /** @const {!Promise.} */\n this.promise = promise;\n\n /** @private {function():!Promise} */\n this.onAbort_ = onAbort;\n\n /** @private {?Promise} */\n this.abortPromise_ = null;\n }\n\n /**\n * @return {boolean} True if the operation has been aborted.\n * @export\n */\n get aborted() {\n return this.abortPromise_ !== null;\n }\n\n /**\n * @param {!shaka.util.Error} error\n * @return {!shaka.util.AbortableOperation} An operation which has already\n * failed with the error given by the caller.\n * @export\n */\n static failed(error) {\n return new shaka.util.AbortableOperation(\n Promise.reject(error),\n () => Promise.resolve());\n }\n\n /**\n * @return {!shaka.util.AbortableOperation} An operation which has already\n * failed with the error OPERATION_ABORTED.\n * @export\n */\n static aborted() {\n const p = Promise.reject(shaka.util.AbortableOperation.abortError());\n // Silence uncaught rejection errors, which may otherwise occur any place\n // we don't explicitly handle aborted operations.\n p.catch(() => {});\n return new shaka.util.AbortableOperation(p, () => Promise.resolve());\n }\n\n /** @return {!shaka.util.Error} */\n static abortError() {\n return new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.PLAYER,\n shaka.util.Error.Code.OPERATION_ABORTED);\n }\n\n /**\n * @param {U} value\n * @return {!shaka.util.AbortableOperation.} An operation which has already\n * completed with the given value.\n * @template U\n * @export\n */\n static completed(value) {\n return new shaka.util.AbortableOperation(\n Promise.resolve(value),\n () => Promise.resolve());\n }\n\n /**\n * @param {!Promise.} promise\n * @return {!shaka.util.AbortableOperation.} An operation which cannot be\n * aborted. It will be completed when the given Promise is resolved, or\n * will be failed when the given Promise is rejected.\n * @template U\n * @export\n */\n static notAbortable(promise) {\n return new shaka.util.AbortableOperation(\n promise,\n // abort() here will return a Promise which is resolved when the input\n // promise either resolves or fails.\n () => promise.catch(() => {}));\n }\n\n /**\n * @override\n * @export\n */\n abort() {\n if (!this.abortPromise_) {\n this.abortPromise_ = this.onAbort_();\n }\n return this.abortPromise_;\n }\n\n /**\n * @param {!Array.} operations\n * @return {!shaka.util.AbortableOperation} An operation which is resolved\n * when all operations are successful and fails when any operation fails.\n * For this operation, abort() aborts all given operations.\n * @export\n */\n static all(operations) {\n return new shaka.util.AbortableOperation(\n Promise.all(operations.map((op) => op.promise)),\n () => Promise.all(operations.map((op) => op.abort())));\n }\n\n /**\n * @override\n * @export\n */\n finally(onFinal) {\n this.promise.then((value) => onFinal(true), (e) => onFinal(false));\n return this;\n }\n\n /**\n * @param {(undefined|\n * function(T):U|\n * function(T):!Promise.|\n * function(T):!shaka.util.AbortableOperation.)} onSuccess\n * A callback to be invoked after this operation is complete, to chain to\n * another operation. The callback can return a plain value, a Promise to\n * an asynchronous value, or another AbortableOperation.\n * @param {function(*)=} onError\n * An optional callback to be invoked if this operation fails, to perform\n * some cleanup or error handling. Analogous to the second parameter of\n * Promise.prototype.then.\n * @return {!shaka.util.AbortableOperation.} An operation which is resolved\n * when this operation and the operation started by the callback are both\n * complete.\n * @template U\n * @export\n */\n chain(onSuccess, onError) {\n const newPromise = new shaka.util.PublicPromise();\n // Silence uncaught rejection errors, which may otherwise occur any place\n // we don't explicitly handle aborted operations.\n newPromise.catch(() => {});\n const abortError = shaka.util.AbortableOperation.abortError();\n\n // If called before \"this\" completes, just abort \"this\".\n let abort = () => {\n newPromise.reject(abortError);\n return this.abort();\n };\n\n const makeCallback = (isSuccess) => {\n return (value) => {\n if (this.abortPromise_ && isSuccess) {\n // If \"this\" is not abortable(), or if abort() is called after \"this\"\n // is complete but before the next stage in the chain begins, we\n // should stop right away.\n newPromise.reject(abortError);\n return;\n }\n\n const cb = isSuccess ? onSuccess : onError;\n if (!cb) {\n // No callback? Pass it along.\n const next = isSuccess ? newPromise.resolve : newPromise.reject;\n next(value);\n return;\n }\n\n // Call the callback, interpret the return value, set the Promise state,\n // and get the next abort function.\n abort = shaka.util.AbortableOperation.wrapChainCallback_(\n cb, value, newPromise);\n };\n };\n this.promise.then(makeCallback(true), makeCallback(false));\n\n return new shaka.util.AbortableOperation(\n newPromise,\n // By creating a closure around abort(), we can update the value of\n // abort() at various stages.\n () => abort());\n }\n\n /**\n * @param {(function(T):U|\n * function(T):!Promise.|\n * function(T):!shaka.util.AbortableOperation.|\n * function(*))} callback\n * A callback to be invoked with the given value.\n * @param {T} value\n * @param {!shaka.util.PublicPromise} newPromise The promise for the next\n * stage in the chain.\n * @return {function():!Promise} The next abort() function for the chain.\n * @private\n * @template T, U\n */\n static wrapChainCallback_(callback, value, newPromise) {\n try {\n const ret = callback(value);\n\n if (ret && ret.promise && ret.abort) {\n // This is an abortable operation, with its own abort() method.\n // After this point, abort() should abort the operation from the\n // callback, and the new promise should be tied to the promise\n // from the callback's operation.\n newPromise.resolve(ret.promise);\n // This used to say \"return ret.abort;\", but it caused subtle issues by\n // unbinding part of the abort chain. There is now a test to ensure\n // that we don't call abort with the wrong \"this\".\n return () => ret.abort();\n } else {\n // This is a Promise or a plain value, and this step cannot be aborted.\n newPromise.resolve(ret);\n // Abort is complete when the returned value/Promise is resolved or\n // fails, but never fails itself nor returns a value.\n return () => Promise.resolve(ret).then(() => {}, () => {});\n }\n } catch (exception) {\n // The callback threw an exception or error. Reject the new Promise and\n // resolve any future abort call right away.\n newPromise.reject(exception);\n return () => Promise.resolve();\n }\n }\n};\n\n/**\n * @const {!Promise.}\n * @exportInterface\n */\n// eslint-disable-next-line no-restricted-syntax\nshaka.util.AbortableOperation.prototype.promise;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.FakeEvent');\n\ngoog.require('goog.asserts');\n\n\n/**\n * @summary Create an Event work-alike object based on the provided dictionary.\n * The event should contain all of the same properties from the dict.\n *\n * @extends {Event}\n * @export\n */\nshaka.util.FakeEvent = class {\n /**\n * @param {!Event} event\n * @return {!shaka.util.FakeEvent}\n */\n static fromRealEvent(event) {\n const fakeEvent = new shaka.util.FakeEvent(event.type);\n for (const key in event) {\n Object.defineProperty(fakeEvent, key, {\n value: event[key],\n writable: true,\n enumerable: true,\n });\n }\n return fakeEvent;\n }\n\n /**\n * Allows us to tell the compiler that the dictionary \"map\" is actually a\n * generic object, for backwards compatibility.\n * @param {!Map.} dict\n * @return {!Object}\n * @suppress {invalidCasts}\n * @private\n */\n static recastDictAsObject_(dict) {\n goog.asserts.assert(!(dict instanceof Map), 'dict should not be a map');\n return /** @type {!Object} */ (dict);\n }\n\n /**\n * @param {string} type\n * @param {Map.=} dict\n */\n constructor(type, dict) {\n if (dict) {\n if (dict instanceof Map) {\n // Take properties from dict if present.\n for (const key of dict.keys()) {\n Object.defineProperty(this, key, {\n value: dict.get(key),\n writable: true,\n enumerable: true,\n });\n }\n } else {\n // For backwards compatibility with external apps that may make use of\n // this public constructor, this should still accept generic objects.\n const obj = shaka.util.FakeEvent.recastDictAsObject_(dict);\n for (const key in obj) {\n Object.defineProperty(this, key, {\n value: obj[key],\n writable: true,\n enumerable: true,\n });\n }\n }\n }\n\n // The properties below cannot be set by the dict. They are all provided\n // for compatibility with native events.\n\n /** @const {boolean} */\n this.bubbles = false;\n\n /** @type {boolean} */\n this.cancelable = false;\n\n /** @type {boolean} */\n this.defaultPrevented = false;\n\n /**\n * According to MDN, Chrome uses high-res timers instead of epoch time.\n * Follow suit so that timeStamps on FakeEvents use the same base as\n * on native Events.\n * @const {number}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Event/timeStamp\n */\n this.timeStamp = window.performance && window.performance.now ?\n window.performance.now() : Date.now();\n\n /** @const {string} */\n this.type = type;\n\n /** @const {boolean} */\n this.isTrusted = false;\n\n /** @type {EventTarget} */\n this.currentTarget = null;\n\n /** @type {EventTarget} */\n this.target = null;\n\n /**\n * Non-standard property read by FakeEventTarget to stop processing\n * listeners.\n * @type {boolean}\n */\n this.stopped = false;\n }\n\n /**\n * Prevents the default action of the event. Has no effect if the event isn't\n * cancellable.\n * @override\n */\n preventDefault() {\n if (this.cancelable) {\n this.defaultPrevented = true;\n }\n }\n\n /**\n * Stops processing event listeners for this event. Provided for\n * compatibility with native Events.\n * @override\n */\n stopImmediatePropagation() {\n this.stopped = true;\n }\n\n /**\n * Does nothing, since FakeEvents do not bubble. Provided for compatibility\n * with native Events.\n * @override\n */\n stopPropagation() {}\n};\n\n\n/**\n * An internal enum that contains the string values of all of the player events.\n * This exists primarily to act as an implicit list of events, for tests.\n *\n * @enum {string}\n */\nshaka.util.FakeEvent.EventName = {\n AbrStatusChanged: 'abrstatuschanged',\n Adaptation: 'adaptation',\n AudioTrackChanged: 'audiotrackchanged',\n Buffering: 'buffering',\n Complete: 'complete',\n DownloadFailed: 'downloadfailed',\n DownloadHeadersReceived: 'downloadheadersreceived',\n DrmSessionUpdate: 'drmsessionupdate',\n Emsg: 'emsg',\n Prft: 'prft',\n Error: 'error',\n ExpirationUpdated: 'expirationupdated',\n FirstQuartile: 'firstquartile',\n GapJumped: 'gapjumped',\n KeyStatusChanged: 'keystatuschanged',\n Loaded: 'loaded',\n Loading: 'loading',\n ManifestParsed: 'manifestparsed',\n ManifestUpdated: 'manifestupdated',\n MediaQualityChanged: 'mediaqualitychanged',\n MediaSourceRecovered: 'mediasourcerecovered',\n Metadata: 'metadata',\n Midpoint: 'midpoint',\n NoSpatialVideoInfoEvent: 'nospatialvideoinfo',\n OnStateChange: 'onstatechange',\n RateChange: 'ratechange',\n SegmentAppended: 'segmentappended',\n SessionDataEvent: 'sessiondata',\n SpatialVideoInfoEvent: 'spatialvideoinfo',\n StallDetected: 'stalldetected',\n Started: 'started',\n StateChanged: 'statechanged',\n Streaming: 'streaming',\n TextChanged: 'textchanged',\n TextTrackVisibility: 'texttrackvisibility',\n ThirdQuartile: 'thirdquartile',\n TimelineRegionAdded: 'timelineregionadded',\n TimelineRegionEnter: 'timelineregionenter',\n TimelineRegionExit: 'timelineregionexit',\n TracksChanged: 'trackschanged',\n Unloading: 'unloading',\n VariantChanged: 'variantchanged',\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.FakeEventTarget');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.IReleasable');\ngoog.require('shaka.util.MultiMap');\n\n\n/**\n * @summary A work-alike for EventTarget. Only DOM elements may be true\n * EventTargets, but this can be used as a base class to provide event dispatch\n * to non-DOM classes. Only FakeEvents should be dispatched.\n *\n * @implements {EventTarget}\n * @implements {shaka.util.IReleasable}\n * @exportInterface\n */\nshaka.util.FakeEventTarget = class {\n /** */\n constructor() {\n /**\n * @private {shaka.util.MultiMap.}\n */\n this.listeners_ = new shaka.util.MultiMap();\n\n /**\n * The target of all dispatched events. Defaults to |this|.\n * @type {EventTarget}\n */\n this.dispatchTarget = this;\n }\n\n /**\n * Add an event listener to this object.\n *\n * @param {string} type The event type to listen for.\n * @param {shaka.util.FakeEventTarget.ListenerType} listener The callback or\n * listener object to invoke.\n * @param {(!AddEventListenerOptions|boolean)=} options Ignored.\n * @override\n * @exportInterface\n */\n addEventListener(type, listener, options) {\n if (!this.listeners_) {\n return;\n }\n this.listeners_.push(type, listener);\n }\n\n /**\n * Add an event listener to this object that is invoked for all events types\n * the object fires.\n *\n * @param {shaka.util.FakeEventTarget.ListenerType} listener The callback or\n * listener object to invoke.\n * @exportInterface\n */\n listenToAllEvents(listener) {\n this.addEventListener(shaka.util.FakeEventTarget.ALL_EVENTS_, listener);\n }\n\n /**\n * Remove an event listener from this object.\n *\n * @param {string} type The event type for which you wish to remove a\n * listener.\n * @param {shaka.util.FakeEventTarget.ListenerType} listener The callback or\n * listener object to remove.\n * @param {(EventListenerOptions|boolean)=} options Ignored.\n * @override\n * @exportInterface\n */\n removeEventListener(type, listener, options) {\n if (!this.listeners_) {\n return;\n }\n this.listeners_.remove(type, listener);\n }\n\n /**\n * Dispatch an event from this object.\n *\n * @param {!Event} event The event to be dispatched from this object.\n * @return {boolean} True if the default action was prevented.\n * @override\n * @exportInterface\n */\n dispatchEvent(event) {\n // In many browsers, it is complex to overwrite properties of actual Events.\n // Here we expect only to dispatch FakeEvents, which are simpler.\n goog.asserts.assert(event instanceof shaka.util.FakeEvent,\n 'FakeEventTarget can only dispatch FakeEvents!');\n\n if (!this.listeners_) {\n return true;\n }\n\n let listeners = this.listeners_.get(event.type) || [];\n const universalListeners =\n this.listeners_.get(shaka.util.FakeEventTarget.ALL_EVENTS_);\n if (universalListeners) {\n listeners = listeners.concat(universalListeners);\n }\n\n // Execute this event on listeners until the event has been stopped or we\n // run out of listeners.\n for (const listener of listeners) {\n // Do this every time, since events can be re-dispatched from handlers.\n event.target = this.dispatchTarget;\n event.currentTarget = this.dispatchTarget;\n\n try {\n // Check for the |handleEvent| member to test if this is a\n // |EventListener| instance or a basic function.\n if (listener.handleEvent) {\n listener.handleEvent(event);\n } else {\n // eslint-disable-next-line no-restricted-syntax\n listener.call(this, event);\n }\n } catch (exception) {\n // Exceptions during event handlers should not affect the caller,\n // but should appear on the console as uncaught, according to MDN:\n // https://mzl.la/2JXgwRo\n shaka.log.error('Uncaught exception in event handler', exception,\n exception ? exception.message : null,\n exception ? exception.stack : null);\n }\n\n if (event.stopped) {\n break;\n }\n }\n\n return event.defaultPrevented;\n }\n\n /**\n * @override\n * @exportInterface\n */\n release() {\n this.listeners_ = null;\n }\n};\n\n/**\n * These are the listener types defined in the closure extern for EventTarget.\n * @typedef {EventListener|function(!Event):*}\n * @exportInterface\n */\nshaka.util.FakeEventTarget.ListenerType;\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.util.FakeEventTarget.ALL_EVENTS_ = 'All';\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.OperationManager');\n\ngoog.require('shaka.util.ArrayUtils');\ngoog.require('shaka.util.IDestroyable');\n\n/**\n * A utility for cleaning up AbortableOperations, to help simplify common\n * patterns and reduce code duplication.\n *\n * @implements {shaka.util.IDestroyable}\n */\nshaka.util.OperationManager = class {\n /** */\n constructor() {\n /** @private {!Array.} */\n this.operations_ = [];\n }\n\n /**\n * Manage an operation. This means aborting it on destroy() and removing it\n * from the management set when it complete.\n *\n * @param {!shaka.extern.IAbortableOperation} operation\n */\n manage(operation) {\n this.operations_.push(operation.finally(() => {\n shaka.util.ArrayUtils.remove(this.operations_, operation);\n }));\n }\n\n /** @override */\n destroy() {\n const cleanup = [];\n for (const op of this.operations_) {\n // Catch and ignore any failures. This silences error logs in the\n // JavaScript console about uncaught Promise failures.\n op.promise.catch(() => {});\n\n // Now abort the operation.\n cleanup.push(op.abort());\n }\n\n this.operations_ = [];\n return Promise.all(cleanup);\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.net.NetworkingEngine');\ngoog.provide('shaka.net.NetworkingEngine.AdvancedRequestType');\ngoog.provide('shaka.net.NetworkingEngine.RequestType');\ngoog.provide('shaka.net.NetworkingEngine.PendingRequest');\n\ngoog.require('goog.Uri');\ngoog.require('goog.asserts');\ngoog.require('shaka.net.Backoff');\ngoog.require('shaka.util.AbortableOperation');\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.FakeEventTarget');\ngoog.require('shaka.util.IDestroyable');\ngoog.require('shaka.util.ObjectUtils');\ngoog.require('shaka.util.OperationManager');\ngoog.require('shaka.util.Timer');\n\n\n/**\n * @event shaka.net.NetworkingEngine.RetryEvent\n * @description Fired when the networking engine receives a recoverable error\n * and retries.\n * @property {string} type\n * 'retry'\n * @property {?shaka.util.Error} error\n * The error that caused the retry. If it was a non-Shaka error, this is set\n * to null.\n * @exportDoc\n */\n\n\n/**\n * NetworkingEngine wraps all networking operations. This accepts plugins that\n * handle the actual request. A plugin is registered using registerScheme.\n * Each scheme has at most one plugin to handle the request.\n *\n * @implements {shaka.util.IDestroyable}\n * @export\n */\nshaka.net.NetworkingEngine = class extends shaka.util.FakeEventTarget {\n /**\n * @param {shaka.net.NetworkingEngine.onProgressUpdated=} onProgressUpdated\n * Called when\n * a progress event is triggered. Passed the duration, in milliseconds,\n * that the request took, the number of bytes transferred, and the boolean\n * of whether the switching is allowed.\n * @param {shaka.net.NetworkingEngine.OnHeadersReceived=} onHeadersReceived\n * Called when the headers are received for a download.\n * @param {shaka.net.NetworkingEngine.OnDownloadFailed=} onDownloadFailed\n * Called when a download fails, for any reason.\n * @param {shaka.net.NetworkingEngine.OnRequest=} onRequest\n * Called when a request is made\n * @param {shaka.net.NetworkingEngine.OnRetry=} onRetry\n * Called when a request retry is made\n * @param {shaka.net.NetworkingEngine.OnResponse=} onResponse\n * Called when receive the response\n */\n constructor(onProgressUpdated, onHeadersReceived, onDownloadFailed,\n onRequest, onRetry, onResponse) {\n super();\n\n /** @private {boolean} */\n this.destroyed_ = false;\n\n /** @private {!shaka.util.OperationManager} */\n this.operationManager_ = new shaka.util.OperationManager();\n\n /** @private {!Set.} */\n this.requestFilters_ = new Set();\n\n /** @private {!Set.} */\n this.responseFilters_ = new Set();\n\n /** @private {?shaka.net.NetworkingEngine.onProgressUpdated} */\n this.onProgressUpdated_ = onProgressUpdated || null;\n\n /** @private {?shaka.net.NetworkingEngine.OnHeadersReceived} */\n this.onHeadersReceived_ = onHeadersReceived || null;\n\n /** @private {?shaka.net.NetworkingEngine.OnDownloadFailed} */\n this.onDownloadFailed_ = onDownloadFailed || null;\n\n /** @private {?shaka.net.NetworkingEngine.OnRequest} */\n this.onRequest_ = onRequest || null;\n\n /** @private {?shaka.net.NetworkingEngine.OnRetry} */\n this.onRetry_ = onRetry || null;\n\n /** @private {?shaka.net.NetworkingEngine.OnResponse} */\n this.onResponse_ = onResponse || null;\n\n /** @private {boolean} */\n this.forceHTTP_ = false;\n\n /** @private {boolean} */\n this.forceHTTPS_ = false;\n\n /** @private {number} */\n this.minBytesForProgressEvents_ = 16e3;\n }\n\n /**\n * @param {boolean} forceHTTP\n * @export\n */\n setForceHTTP(forceHTTP) {\n this.forceHTTP_ = forceHTTP;\n }\n\n /**\n * @param {boolean} forceHTTPS\n * @export\n */\n setForceHTTPS(forceHTTPS) {\n this.forceHTTPS_ = forceHTTPS;\n }\n\n\n /**\n * @param {number} minBytes\n */\n setMinBytesForProgressEvents(minBytes) {\n this.minBytesForProgressEvents_ = minBytes;\n }\n\n /**\n * Registers a scheme plugin. This plugin will handle all requests with the\n * given scheme. If a plugin with the same scheme already exists, it is\n * replaced, unless the existing plugin is of higher priority.\n * If no priority is provided, this defaults to the highest priority of\n * APPLICATION.\n *\n * @param {string} scheme\n * @param {shaka.extern.SchemePlugin} plugin\n * @param {number=} priority\n * @param {boolean=} progressSupport\n * @export\n */\n static registerScheme(scheme, plugin, priority, progressSupport = false) {\n goog.asserts.assert(\n priority == undefined || priority > 0, 'explicit priority must be > 0');\n priority =\n priority || shaka.net.NetworkingEngine.PluginPriority.APPLICATION;\n const existing = shaka.net.NetworkingEngine.schemes_[scheme];\n if (!existing || priority >= existing.priority) {\n shaka.net.NetworkingEngine.schemes_[scheme] = {\n priority: priority,\n plugin: plugin,\n progressSupport: progressSupport,\n };\n }\n }\n\n /**\n * Removes a scheme plugin.\n *\n * @param {string} scheme\n * @export\n */\n static unregisterScheme(scheme) {\n delete shaka.net.NetworkingEngine.schemes_[scheme];\n }\n\n /**\n * Copies all of the filters from this networking engine into another.\n * @param {!shaka.net.NetworkingEngine} other\n */\n copyFiltersInto(other) {\n for (const filter of this.requestFilters_) {\n other.requestFilters_.add(filter);\n }\n for (const filter of this.responseFilters_) {\n other.responseFilters_.add(filter);\n }\n }\n\n /**\n * Registers a new request filter. All filters are applied in the order they\n * are registered.\n *\n * @param {shaka.extern.RequestFilter} filter\n * @export\n */\n registerRequestFilter(filter) {\n this.requestFilters_.add(filter);\n }\n\n /**\n * Removes a request filter.\n *\n * @param {shaka.extern.RequestFilter} filter\n * @export\n */\n unregisterRequestFilter(filter) {\n this.requestFilters_.delete(filter);\n }\n\n /**\n * Clears all request filters.\n *\n * @export\n */\n clearAllRequestFilters() {\n this.requestFilters_.clear();\n }\n\n /**\n * Registers a new response filter. All filters are applied in the order they\n * are registered.\n *\n * @param {shaka.extern.ResponseFilter} filter\n * @export\n */\n registerResponseFilter(filter) {\n this.responseFilters_.add(filter);\n }\n\n /**\n * Removes a response filter.\n *\n * @param {shaka.extern.ResponseFilter} filter\n * @export\n */\n unregisterResponseFilter(filter) {\n this.responseFilters_.delete(filter);\n }\n\n /**\n * Clears all response filters.\n *\n * @export\n */\n clearAllResponseFilters() {\n this.responseFilters_.clear();\n }\n\n /**\n * Gets a copy of the default retry parameters.\n *\n * @return {shaka.extern.RetryParameters}\n *\n * NOTE: The implementation moved to shaka.net.Backoff to avoid a circular\n * dependency between the two classes.\n *\n * @export\n */\n static defaultRetryParameters() {\n return shaka.net.Backoff.defaultRetryParameters();\n }\n\n /**\n * Makes a simple network request for the given URIs.\n *\n * @param {!Array.} uris\n * @param {shaka.extern.RetryParameters} retryParams\n * @param {?function(BufferSource):!Promise=} streamDataCallback\n * @return {shaka.extern.Request}\n * @export\n */\n static makeRequest(uris, retryParams, streamDataCallback = null) {\n return {\n uris: uris,\n method: 'GET',\n body: null,\n headers: {},\n allowCrossSiteCredentials: false,\n retryParameters: retryParams,\n licenseRequestType: null,\n sessionId: null,\n drmInfo: null,\n initData: null,\n initDataType: null,\n streamDataCallback: streamDataCallback,\n };\n }\n\n /**\n * @override\n * @export\n */\n destroy() {\n this.destroyed_ = true;\n this.requestFilters_.clear();\n this.responseFilters_.clear();\n\n // FakeEventTarget implements IReleasable\n super.release();\n\n return this.operationManager_.destroy();\n }\n\n /**\n * Makes a network request and returns the resulting data.\n *\n * @param {shaka.net.NetworkingEngine.RequestType} type\n * @param {shaka.extern.Request} request\n * @param {shaka.extern.RequestContext=} context\n * @return {!shaka.net.NetworkingEngine.PendingRequest}\n * @export\n */\n request(type, request, context) {\n const ObjectUtils = shaka.util.ObjectUtils;\n const numBytesRemainingObj =\n new shaka.net.NetworkingEngine.NumBytesRemainingClass();\n\n // Reject all requests made after destroy is called.\n if (this.destroyed_) {\n const p = Promise.reject(new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.PLAYER,\n shaka.util.Error.Code.OPERATION_ABORTED));\n // Silence uncaught rejection errors, which may otherwise occur any place\n // we don't explicitly handle aborted operations.\n p.catch(() => {});\n return new shaka.net.NetworkingEngine.PendingRequest(\n p, () => Promise.resolve(), numBytesRemainingObj);\n }\n\n goog.asserts.assert(\n request.uris && request.uris.length, 'Request without URIs!');\n\n // If a request comes from outside the library, some parameters may be left\n // undefined. To make it easier for application developers, we will fill\n // them in with defaults if necessary.\n //\n // We clone retryParameters and uris so that if a filter modifies the\n // request, it doesn't contaminate future requests.\n request.method = request.method || 'GET';\n request.headers = request.headers || {};\n request.retryParameters = request.retryParameters ?\n ObjectUtils.cloneObject(request.retryParameters) :\n shaka.net.NetworkingEngine.defaultRetryParameters();\n request.uris = ObjectUtils.cloneObject(request.uris);\n\n // Apply the registered filters to the request.\n const requestFilterOperation = this.filterRequest_(type, request, context);\n const requestOperation = requestFilterOperation.chain(\n () => this.makeRequestWithRetry_(type, request, context,\n numBytesRemainingObj));\n const responseFilterOperation = requestOperation.chain(\n (responseAndGotProgress) =>\n this.filterResponse_(type, responseAndGotProgress, context));\n\n // Keep track of time spent in filters.\n const requestFilterStartTime = Date.now();\n let requestFilterMs = 0;\n requestFilterOperation.promise.then(() => {\n requestFilterMs = Date.now() - requestFilterStartTime;\n }, () => {}); // Silence errors in this fork of the Promise chain.\n\n let responseFilterStartTime = 0;\n requestOperation.promise.then(() => {\n responseFilterStartTime = Date.now();\n }, () => {}); // Silence errors in this fork of the Promise chain.\n\n const op = responseFilterOperation.chain((responseAndGotProgress) => {\n const responseFilterMs = Date.now() - responseFilterStartTime;\n const response = responseAndGotProgress.response;\n response.timeMs += requestFilterMs;\n response.timeMs += responseFilterMs;\n if (!responseAndGotProgress.gotProgress &&\n this.onProgressUpdated_ &&\n !response.fromCache &&\n request.method != 'HEAD' &&\n type == shaka.net.NetworkingEngine.RequestType.SEGMENT) {\n const allowSwitch = this.allowSwitch_(context);\n this.onProgressUpdated_(\n response.timeMs, response.data.byteLength, allowSwitch);\n }\n if (this.onResponse_) {\n this.onResponse_(type, response, context);\n }\n return response;\n }, (e) => {\n // Any error thrown from elsewhere should be recategorized as CRITICAL\n // here. This is because by the time it gets here, we've exhausted\n // retries.\n if (e) {\n goog.asserts.assert(e instanceof shaka.util.Error, 'Wrong error type');\n e.severity = shaka.util.Error.Severity.CRITICAL;\n }\n\n throw e;\n });\n\n // Return the pending request, which carries the response operation, and the\n // number of bytes remaining to be downloaded, updated by the progress\n // events. Add the operation to the manager for later cleanup.\n const pendingRequest =\n new shaka.net.NetworkingEngine.PendingRequest(\n op.promise, () => op.abort(), numBytesRemainingObj);\n this.operationManager_.manage(pendingRequest);\n return pendingRequest;\n }\n\n /**\n * @param {shaka.net.NetworkingEngine.RequestType} type\n * @param {shaka.extern.Request} request\n * @param {shaka.extern.RequestContext=} context\n * @return {!shaka.util.AbortableOperation.}\n * @private\n */\n filterRequest_(type, request, context) {\n let filterOperation = shaka.util.AbortableOperation.completed(undefined);\n\n const applyFilter = (requestFilter) => {\n filterOperation = filterOperation.chain(() => {\n if (request.body) {\n // TODO: For v4.0 we should remove this or change to always pass a\n // Uint8Array. To make it easier for apps to write filters, it may be\n // better to always pass a Uint8Array so they know what they are\n // getting; but we shouldn't use ArrayBuffer since that would require\n // copying buffers if this is a partial view.\n request.body = shaka.util.BufferUtils.toArrayBuffer(request.body);\n }\n return requestFilter(type, request, context);\n });\n };\n\n if (this.onRequest_) {\n applyFilter(this.onRequest_);\n }\n\n for (const requestFilter of this.requestFilters_) {\n // Request filters are run sequentially.\n applyFilter(requestFilter);\n }\n\n // Catch any errors thrown by request filters, and substitute\n // them with a Shaka-native error.\n return filterOperation.chain(undefined, (e) => {\n if (e instanceof shaka.util.Error &&\n e.code == shaka.util.Error.Code.OPERATION_ABORTED) {\n // Don't change anything if the operation was aborted.\n throw e;\n }\n\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.NETWORK,\n shaka.util.Error.Code.REQUEST_FILTER_ERROR, e);\n });\n }\n\n /**\n * @param {shaka.net.NetworkingEngine.RequestType} type\n * @param {shaka.extern.Request} request\n * @param {(shaka.extern.RequestContext|undefined)} context\n * @param {shaka.net.NetworkingEngine.NumBytesRemainingClass}\n * numBytesRemainingObj\n * @return {!shaka.extern.IAbortableOperation.<\n * shaka.net.NetworkingEngine.ResponseAndGotProgress>}\n * @private\n */\n makeRequestWithRetry_(type, request, context, numBytesRemainingObj) {\n const backoff = new shaka.net.Backoff(\n request.retryParameters, /* autoReset= */ false);\n const index = 0;\n return this.send_(\n type, request, context, backoff, index, /* lastError= */ null,\n numBytesRemainingObj);\n }\n\n /**\n * Sends the given request to the correct plugin and retry using Backoff.\n *\n * @param {shaka.net.NetworkingEngine.RequestType} type\n * @param {shaka.extern.Request} request\n * @param {(shaka.extern.RequestContext|undefined)} context\n * @param {!shaka.net.Backoff} backoff\n * @param {number} index\n * @param {?shaka.util.Error} lastError\n * @param {shaka.net.NetworkingEngine.NumBytesRemainingClass}\n * numBytesRemainingObj\n * @return {!shaka.extern.IAbortableOperation.<\n * shaka.net.NetworkingEngine.ResponseAndGotProgress>}\n * @private\n */\n send_(type, request, context, backoff, index, lastError,\n numBytesRemainingObj) {\n if (this.forceHTTP_) {\n request.uris[index] = request.uris[index].replace('https://', 'http://');\n }\n if (this.forceHTTPS_) {\n request.uris[index] = request.uris[index].replace('http://', 'https://');\n }\n\n if (index > 0 && this.onRetry_) {\n const newUri = request.uris[index];\n const oldUri = request.uris[index - 1];\n this.onRetry_(type, context, newUri, oldUri);\n }\n\n const uri = new goog.Uri(request.uris[index]);\n let scheme = uri.getScheme();\n // Whether it got a progress event.\n let gotProgress = false;\n if (!scheme) {\n // If there is no scheme, infer one from the location.\n scheme = shaka.net.NetworkingEngine.getLocationProtocol_();\n goog.asserts.assert(\n scheme[scheme.length - 1] == ':',\n 'location.protocol expected to end with a colon!');\n // Drop the colon.\n scheme = scheme.slice(0, -1);\n\n // Override the original URI to make the scheme explicit.\n uri.setScheme(scheme);\n request.uris[index] = uri.toString();\n }\n\n // Schemes are meant to be case-insensitive.\n // See https://github.com/shaka-project/shaka-player/issues/2173\n // and https://tools.ietf.org/html/rfc3986#section-3.1\n scheme = scheme.toLowerCase();\n\n const object = shaka.net.NetworkingEngine.schemes_[scheme];\n const plugin = object ? object.plugin : null;\n if (!plugin) {\n return shaka.util.AbortableOperation.failed(\n new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.NETWORK,\n shaka.util.Error.Code.UNSUPPORTED_SCHEME,\n uri));\n }\n const progressSupport = object.progressSupport;\n\n\n // Every attempt must have an associated backoff.attempt() call so that the\n // accounting is correct.\n const backoffOperation =\n shaka.util.AbortableOperation.notAbortable(backoff.attempt());\n\n /** @type {?shaka.util.Timer} */\n let connectionTimer = null;\n\n /** @type {?shaka.util.Timer} */\n let stallTimer = null;\n\n let aborted = false;\n\n let headersReceivedCalled = false;\n\n let startTimeMs;\n const sendOperation = backoffOperation.chain(() => {\n if (this.destroyed_) {\n return shaka.util.AbortableOperation.aborted();\n }\n\n startTimeMs = Date.now();\n const segment = shaka.net.NetworkingEngine.RequestType.SEGMENT;\n let packetNumber = 0;\n\n const progressUpdated = (time, bytes, numBytesRemaining) => {\n if (connectionTimer) {\n connectionTimer.stop();\n }\n if (stallTimer) {\n stallTimer.tickAfter(stallTimeoutMs / 1000);\n }\n if (this.onProgressUpdated_ && type == segment) {\n packetNumber++;\n request.packetNumber = packetNumber;\n const allowSwitch = this.allowSwitch_(context);\n this.onProgressUpdated_(time, bytes, allowSwitch, request);\n gotProgress = true;\n numBytesRemainingObj.setBytes(numBytesRemaining);\n }\n };\n const headersReceived = (headers) => {\n headersReceivedCalled = true;\n request.timeToFirstByte = Date.now() -\n /** @type {number} */ (request.requestStartTime);\n if (this.onHeadersReceived_) {\n this.onHeadersReceived_(headers, request, type);\n }\n };\n request.requestStartTime = Date.now();\n\n const requestPlugin = plugin(\n request.uris[index], request, type, progressUpdated, headersReceived,\n {\n minBytesForProgressEvents: this.minBytesForProgressEvents_,\n });\n\n if (!progressSupport) {\n return requestPlugin;\n }\n\n const connectionTimeoutMs = request.retryParameters.connectionTimeout;\n if (connectionTimeoutMs) {\n connectionTimer = new shaka.util.Timer(() => {\n aborted = true;\n requestPlugin.abort();\n });\n\n connectionTimer.tickAfter(connectionTimeoutMs / 1000);\n }\n\n const stallTimeoutMs = request.retryParameters.stallTimeout;\n if (stallTimeoutMs) {\n stallTimer = new shaka.util.Timer(() => {\n aborted = true;\n requestPlugin.abort();\n });\n }\n\n return requestPlugin;\n }).chain((response) => {\n if (connectionTimer) {\n connectionTimer.stop();\n }\n if (stallTimer) {\n stallTimer.stop();\n }\n if (response.timeMs == undefined) {\n response.timeMs = Date.now() - startTimeMs;\n }\n const responseAndGotProgress = {\n response: response,\n gotProgress: gotProgress,\n };\n if (!headersReceivedCalled) {\n // The plugin did not call headersReceived, perhaps because it is not\n // able to track that information. So, fire the event manually.\n if (this.onHeadersReceived_) {\n this.onHeadersReceived_(response.headers, request, type);\n }\n }\n\n return responseAndGotProgress;\n }, (error) => {\n if (connectionTimer) {\n connectionTimer.stop();\n }\n if (stallTimer) {\n stallTimer.stop();\n }\n if (this.onDownloadFailed_) {\n let shakaError = null;\n let httpResponseCode = 0;\n if (error instanceof shaka.util.Error) {\n shakaError = error;\n if (error.code == shaka.util.Error.Code.BAD_HTTP_STATUS) {\n httpResponseCode = /** @type {number} */ (error.data[1]);\n }\n }\n this.onDownloadFailed_(request, shakaError, httpResponseCode, aborted);\n }\n if (this.destroyed_) {\n return shaka.util.AbortableOperation.aborted();\n }\n\n if (aborted) {\n // It is necessary to change the error code to the correct one because\n // otherwise the retry logic would not work.\n error = new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.NETWORK,\n shaka.util.Error.Code.TIMEOUT,\n request.uris[index], type);\n }\n\n if (error instanceof shaka.util.Error) {\n if (error.code == shaka.util.Error.Code.OPERATION_ABORTED) {\n // Don't change anything if the operation was aborted.\n throw error;\n } else if (error.code == shaka.util.Error.Code.ATTEMPTS_EXHAUSTED) {\n goog.asserts.assert(lastError, 'Should have last error');\n throw lastError;\n }\n\n if (error.severity == shaka.util.Error.Severity.RECOVERABLE) {\n const data = (new Map()).set('error', error);\n const event = new shaka.util.FakeEvent('retry', data);\n this.dispatchEvent(event);\n\n // Move to the next URI.\n index = (index + 1) % request.uris.length;\n return this.send_(\n type, request, context, backoff, index, error,\n numBytesRemainingObj);\n }\n }\n\n // The error was not recoverable, so do not try again.\n throw error;\n });\n\n return sendOperation;\n }\n\n /**\n * @param {shaka.net.NetworkingEngine.RequestType} type\n * @param {shaka.net.NetworkingEngine.ResponseAndGotProgress}\n * responseAndGotProgress\n * @param {shaka.extern.RequestContext=} context\n * @return {!shaka.extern.IAbortableOperation.<\n * shaka.net.NetworkingEngine.ResponseAndGotProgress>}\n * @private\n */\n filterResponse_(type, responseAndGotProgress, context) {\n let filterOperation = shaka.util.AbortableOperation.completed(undefined);\n for (const responseFilter of this.responseFilters_) {\n // Response filters are run sequentially.\n filterOperation = filterOperation.chain(() => {\n const resp = responseAndGotProgress.response;\n if (resp.data) {\n // TODO: See TODO in filterRequest_.\n resp.data = shaka.util.BufferUtils.toArrayBuffer(resp.data);\n }\n return responseFilter(type, resp, context);\n });\n }\n // If successful, return the filtered response with whether it got\n // progress.\n return filterOperation.chain(() => {\n return responseAndGotProgress;\n }, (e) => {\n // Catch any errors thrown by request filters, and substitute\n // them with a Shaka-native error.\n\n // The error is assumed to be critical if the original wasn't a Shaka\n // error.\n let severity = shaka.util.Error.Severity.CRITICAL;\n if (e instanceof shaka.util.Error) {\n if (e.code == shaka.util.Error.Code.OPERATION_ABORTED) {\n // Don't change anything if the operation was aborted.\n throw e;\n }\n\n severity = e.severity;\n }\n\n throw new shaka.util.Error(\n severity,\n shaka.util.Error.Category.NETWORK,\n shaka.util.Error.Code.RESPONSE_FILTER_ERROR, e);\n });\n }\n\n /**\n * @param {(shaka.extern.RequestContext|undefined)} context\n * @return {boolean}\n * @private\n */\n allowSwitch_(context) {\n if (context) {\n const segment = context.segment;\n const stream = context.stream;\n if (segment && stream && stream.fastSwitching) {\n if (segment.isPartial()) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * This is here only for testability. We can't mock location in our tests on\n * all browsers, so instead we mock this.\n *\n * @return {string} The value of location.protocol.\n * @private\n */\n static getLocationProtocol_() {\n return location.protocol;\n }\n};\n\n/**\n * A wrapper class for the number of bytes remaining to be downloaded for the\n * request.\n * Instead of using PendingRequest directly, this class is needed to be sent to\n * plugin as a parameter, and a Promise is returned, before PendingRequest is\n * created.\n *\n * @export\n */\nshaka.net.NetworkingEngine.NumBytesRemainingClass = class {\n /**\n * Constructor\n */\n constructor() {\n /** @private {number} */\n this.bytesToLoad_ = 0;\n }\n\n /**\n * @param {number} bytesToLoad\n */\n setBytes(bytesToLoad) {\n this.bytesToLoad_ = bytesToLoad;\n }\n\n /**\n * @return {number}\n */\n getBytes() {\n return this.bytesToLoad_;\n }\n};\n\n/**\n * A pending network request. This can track the current progress of the\n * download, and allows the request to be aborted if the network is slow.\n *\n * @implements {shaka.extern.IAbortableOperation.}\n * @extends {shaka.util.AbortableOperation}\n * @export\n */\nshaka.net.NetworkingEngine.PendingRequest =\nclass extends shaka.util.AbortableOperation {\n /**\n * @param {!Promise} promise\n * A Promise which represents the underlying operation. It is resolved\n * when the operation is complete, and rejected if the operation fails or\n * is aborted. Aborted operations should be rejected with a\n * shaka.util.Error object using the error code OPERATION_ABORTED.\n * @param {function():!Promise} onAbort\n * Will be called by this object to abort the underlying operation. This\n * is not cancelation, and will not necessarily result in any work being\n * undone. abort() should return a Promise which is resolved when the\n * underlying operation has been aborted. The returned Promise should\n * never be rejected.\n * @param {shaka.net.NetworkingEngine.NumBytesRemainingClass}\n * numBytesRemainingObj\n */\n constructor(promise, onAbort, numBytesRemainingObj) {\n super(promise, onAbort);\n\n /** @private {shaka.net.NetworkingEngine.NumBytesRemainingClass} */\n this.bytesRemaining_ = numBytesRemainingObj;\n }\n\n /**\n * @return {number}\n */\n getBytesRemaining() {\n return this.bytesRemaining_.getBytes();\n }\n};\n\n/**\n * Request types. Allows a filter to decide which requests to read/alter.\n *\n * @enum {number}\n * @export\n */\nshaka.net.NetworkingEngine.RequestType = {\n 'MANIFEST': 0,\n 'SEGMENT': 1,\n 'LICENSE': 2,\n 'APP': 3,\n 'TIMING': 4,\n 'SERVER_CERTIFICATE': 5,\n 'KEY': 6,\n 'ADS': 7,\n 'CONTENT_STEERING': 8,\n};\n\n/**\n * A more advanced form of the RequestType structure, meant to describe\n * sub-types of basic request types.\n * For example, an INIT_SEGMENT is a sub-type of SEGMENT.\n * This is meant to allow for more specificity to be added to the request type\n * data, without breaking backwards compatibility.\n *\n * @enum {number}\n * @export\n */\nshaka.net.NetworkingEngine.AdvancedRequestType = {\n 'INIT_SEGMENT': 0,\n 'MEDIA_SEGMENT': 1,\n 'MEDIA_PLAYLIST': 2,\n 'MASTER_PLAYLIST': 3,\n 'MPD': 4,\n 'MSS': 5,\n 'MPD_PATCH': 6,\n 'MEDIATAILOR_SESSION_INFO': 7,\n 'MEDIATAILOR_TRACKING_INFO': 8,\n 'MEDIATAILOR_STATIC_RESOURCE': 9,\n 'MEDIATAILOR_TRACKING_EVENT': 10,\n 'INTERSTITIAL_ASSET_LIST': 11,\n 'INTERSTITIAL_AD_URL': 12,\n};\n\n\n/**\n * Priority level for network scheme plugins.\n * If multiple plugins are provided for the same scheme, only the\n * highest-priority one is used.\n *\n * @enum {number}\n * @export\n */\nshaka.net.NetworkingEngine.PluginPriority = {\n 'FALLBACK': 1,\n 'PREFERRED': 2,\n 'APPLICATION': 3,\n};\n\n\n/**\n * @typedef {{\n * plugin: shaka.extern.SchemePlugin,\n * priority: number,\n * progressSupport: boolean\n * }}\n * @property {shaka.extern.SchemePlugin} plugin\n * The associated plugin.\n * @property {number} priority\n * The plugin's priority.\n * @property {boolean} progressSupport\n * The plugin's supports progress events\n */\nshaka.net.NetworkingEngine.SchemeObject;\n\n\n/**\n * Contains the scheme plugins.\n *\n * @private {!Object.}\n */\nshaka.net.NetworkingEngine.schemes_ = {};\n\n/**\n * @typedef {{\n * response: shaka.extern.Response,\n * gotProgress: boolean\n * }}\n *\n * @description\n * Defines a response wrapper object, including the response object and whether\n * progress event is fired by the scheme plugin.\n *\n * @property {shaka.extern.Response} response\n * @property {boolean} gotProgress\n * @private\n */\nshaka.net.NetworkingEngine.ResponseAndGotProgress;\n\n\n/**\n * @typedef {function(\n * !Object.,\n * !shaka.extern.Request,\n * !shaka.net.NetworkingEngine.RequestType)}\n *\n * @description\n * A callback function that passes the shaka.extern.HeadersReceived along to\n * the player, plus some extra data.\n * @export\n */\nshaka.net.NetworkingEngine.OnHeadersReceived;\n\n/**\n * @typedef {function(\n * number,\n * number,\n * boolean,\n * shaka.extern.Request=)}\n *\n * @description\n * A callback that is passed the duration, in milliseconds,\n * that the request took, the number of bytes transferred, a boolean\n * representing whether the switching is allowed and a ref to the\n * original request.\n * @export\n */\nshaka.net.NetworkingEngine.onProgressUpdated;\n\n/**\n * @typedef {function(\n * !shaka.extern.Request,\n * ?shaka.util.Error,\n * number,\n * boolean)}\n *\n * @description\n * A callback function that notifies the player when a download fails, for any\n * reason (e.g. even if the download was aborted).\n * @export\n */\nshaka.net.NetworkingEngine.OnDownloadFailed;\n\n\n/**\n * @typedef {function(\n * !shaka.net.NetworkingEngine.RequestType,\n * !shaka.extern.Request,\n * (shaka.extern.RequestContext|undefined))}\n *\n * @description\n * A callback function called on every request\n * @export\n */\nshaka.net.NetworkingEngine.OnRequest;\n\n\n/**\n * @typedef {function(\n * !shaka.net.NetworkingEngine.RequestType,\n * (shaka.extern.RequestContext|undefined),\n * string,\n * string)}\n *\n * @description\n * A callback function called on every request retry. The first string is the\n * new URI and the second string is the old URI.\n * @export\n */\nshaka.net.NetworkingEngine.OnRetry;\n\n\n/**\n * @typedef {function(\n * !shaka.net.NetworkingEngine.RequestType,\n * !shaka.extern.Response,\n * (shaka.extern.RequestContext|undefined))}\n *\n * @description\n * A callback function called on every request\n * @export\n */\nshaka.net.NetworkingEngine.OnResponse;\n\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.Destroyer');\n\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.PublicPromise');\n\n\n/**\n * @summary\n * A utility class to help work with |shaka.util.IDestroyable| objects.\n *\n * @final\n */\nshaka.util.Destroyer = class {\n /**\n * @param {function():!Promise} callback\n * A callback to destroy an object. This callback will only be called once\n * regardless of how many times |destroy| is called.\n */\n constructor(callback) {\n /** @private {boolean} */\n this.destroyed_ = false;\n\n /** @private {!shaka.util.PublicPromise} */\n this.waitOnDestroy_ = new shaka.util.PublicPromise();\n\n /** @private {function():!Promise} */\n this.onDestroy_ = callback;\n }\n\n /**\n * Check if |destroy| has been called. This returning |true| does not mean\n * that the promise returned by |destroy| has resolved yet.\n *\n * @return {boolean}\n * @final\n */\n destroyed() {\n return this.destroyed_;\n }\n\n /**\n * Request that the destroy callback be called. Will return a promise that\n * will resolve once the callback terminates. The promise will never be\n * rejected.\n *\n * @return {!Promise}\n * @final\n */\n destroy() {\n if (this.destroyed_) {\n return this.waitOnDestroy_;\n }\n\n // We have started destroying this object, so we should never get here\n // again.\n this.destroyed_ = true;\n\n return this.onDestroy_().then(\n () => { this.waitOnDestroy_.resolve(); },\n () => { this.waitOnDestroy_.resolve(); });\n }\n\n /**\n * Checks if the object is destroyed and throws an error if it is.\n * @param {*=} error The inner error, if any.\n */\n ensureNotDestroyed(error) {\n if (this.destroyed_) {\n if (error instanceof shaka.util.Error &&\n error.code == shaka.util.Error.Code.OBJECT_DESTROYED) {\n throw error;\n }\n throw shaka.util.Destroyer.destroyedError(error);\n }\n }\n\n /**\n * @param {*=} error The inner error, if any.\n * @return {!shaka.util.Error}\n */\n static destroyedError(error) {\n return new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.PLAYER,\n shaka.util.Error.Code.OBJECT_DESTROYED,\n error);\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.Iterables');\n\n\n/**\n * Recreations of Array-like functions so that they work on any iterable\n * type.\n * @final\n */\nshaka.util.Iterables = class {\n /**\n * @param {!Iterable.} iterable\n * @param {function(FROM):TO} mapping\n * @return {!Iterable.}\n * @template FROM,TO\n */\n static map(iterable, mapping) {\n const array = [];\n for (const x of iterable) {\n array.push(mapping(x));\n }\n return array;\n }\n\n /**\n * @param {!Iterable.} iterable\n * @param {function(T):boolean} test\n * @return {boolean}\n * @template T\n */\n static every(iterable, test) {\n for (const x of iterable) {\n if (!test(x)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * @param {!Iterable.} iterable\n * @param {function(T):boolean} test\n * @return {boolean}\n * @template T\n */\n static some(iterable, test) {\n for (const x of iterable) {\n if (test(x)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Iterate over an iterable object and return only the items that |filter|\n * returns true for.\n *\n * @param {!Iterable.} iterable\n * @param {function(T):boolean} filter\n * @return {!Array.}\n * @template T\n */\n static filter(iterable, filter) {\n const out = [];\n for (const x of iterable) {\n if (filter(x)) {\n out.push(x);\n }\n }\n return out;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.MapUtils');\n\n\n/**\n * @summary A set of map/object utility functions.\n */\nshaka.util.MapUtils = class {\n /**\n * @param {!Object.} object\n * @return {!Map.}\n * @template KEY,VALUE\n */\n static asMap(object) {\n const map = new Map();\n for (const key of Object.keys(object)) {\n map.set(key, object[key]);\n }\n\n return map;\n }\n\n\n /**\n * @param {!Map.} map\n * @return {!Object.}\n * @template KEY,VALUE\n */\n static asObject(map) {\n const obj = {};\n map.forEach((value, key) => {\n obj[key] = value;\n });\n\n return obj;\n }\n\n /**\n * NOTE: This only works for simple value types and\n * will not be accurate if map values are objects!\n *\n * @param {Map.} map1\n * @param {Map.} map2\n * @return {boolean}\n * @template KEY,VALUE\n */\n static hasSameElements(map1, map2) {\n if (!map1 && !map2) {\n return true;\n } else if (map1 && !map2) {\n return false;\n } else if (map2 && !map1) {\n return false;\n }\n\n if (map1.size != map2.size) {\n return false;\n }\n\n for (const [key, val] of map1) {\n if (!map2.has(key)) {\n return false;\n }\n\n const val2 = map2.get(key);\n if (val2 != val || (val2 == undefined)) {\n return false;\n }\n }\n return true;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.DataViewReader');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.StringUtils');\n\n\n/**\n * @summary DataViewReader abstracts a DataView object.\n * @export\n */\nshaka.util.DataViewReader = class {\n /**\n * @param {BufferSource} data\n * @param {shaka.util.DataViewReader.Endianness} endianness The endianness.\n */\n constructor(data, endianness) {\n /** @private {!DataView} */\n this.dataView_ = shaka.util.BufferUtils.toDataView(data);\n\n /** @private {boolean} */\n this.littleEndian_ =\n endianness == shaka.util.DataViewReader.Endianness.LITTLE_ENDIAN;\n\n /** @private {number} */\n this.position_ = 0;\n }\n\n\n /** @return {!DataView} The underlying DataView instance. */\n getDataView() {\n return this.dataView_;\n }\n\n\n /**\n * @return {boolean} True if the reader has more data, false otherwise.\n * @export\n */\n hasMoreData() {\n return this.position_ < this.dataView_.byteLength;\n }\n\n\n /**\n * Gets the current byte position.\n * @return {number}\n * @export\n */\n getPosition() {\n return this.position_;\n }\n\n\n /**\n * Gets the byte length of the DataView.\n * @return {number}\n * @export\n */\n getLength() {\n return this.dataView_.byteLength;\n }\n\n\n /**\n * Reads an unsigned 8 bit integer, and advances the reader.\n * @return {number} The integer.\n * @export\n */\n readUint8() {\n try {\n const value = this.dataView_.getUint8(this.position_);\n this.position_ += 1;\n return value;\n } catch (exception) {\n throw this.outOfBounds_();\n }\n }\n\n\n /**\n * Reads an unsigned 16 bit integer, and advances the reader.\n * @return {number} The integer.\n * @export\n */\n readUint16() {\n try {\n const value =\n this.dataView_.getUint16(this.position_, this.littleEndian_);\n this.position_ += 2;\n return value;\n } catch (exception) {\n throw this.outOfBounds_();\n }\n }\n\n\n /**\n * Reads an unsigned 32 bit integer, and advances the reader.\n * @return {number} The integer.\n * @export\n */\n readUint32() {\n try {\n const value =\n this.dataView_.getUint32(this.position_, this.littleEndian_);\n this.position_ += 4;\n return value;\n } catch (exception) {\n throw this.outOfBounds_();\n }\n }\n\n\n /**\n * Reads a signed 32 bit integer, and advances the reader.\n * @return {number} The integer.\n * @export\n */\n readInt32() {\n try {\n const value = this.dataView_.getInt32(this.position_, this.littleEndian_);\n this.position_ += 4;\n return value;\n } catch (exception) {\n throw this.outOfBounds_();\n }\n }\n\n\n /**\n * Reads an unsigned 64 bit integer, and advances the reader.\n * @return {number} The integer.\n * @export\n */\n readUint64() {\n /** @type {number} */\n let low;\n /** @type {number} */\n let high;\n\n try {\n if (this.littleEndian_) {\n low = this.dataView_.getUint32(this.position_, true);\n high = this.dataView_.getUint32(this.position_ + 4, true);\n } else {\n high = this.dataView_.getUint32(this.position_, false);\n low = this.dataView_.getUint32(this.position_ + 4, false);\n }\n } catch (exception) {\n throw this.outOfBounds_();\n }\n\n if (high > 0x1FFFFF) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.JS_INTEGER_OVERFLOW);\n }\n\n this.position_ += 8;\n\n // NOTE: This is subtle, but in JavaScript you can't shift left by 32\n // and get the full range of 53-bit values possible.\n // You must multiply by 2^32.\n return (high * Math.pow(2, 32)) + low;\n }\n\n\n /**\n * Reads the specified number of raw bytes.\n * @param {number} bytes The number of bytes to read.\n * @return {!Uint8Array}\n * @export\n */\n readBytes(bytes) {\n goog.asserts.assert(bytes >= 0, 'Bad call to DataViewReader.readBytes');\n if (this.position_ + bytes > this.dataView_.byteLength) {\n throw this.outOfBounds_();\n }\n\n const value =\n shaka.util.BufferUtils.toUint8(this.dataView_, this.position_, bytes);\n this.position_ += bytes;\n return value;\n }\n\n\n /**\n * Skips the specified number of bytes.\n * @param {number} bytes The number of bytes to skip.\n * @export\n */\n skip(bytes) {\n goog.asserts.assert(bytes >= 0, 'Bad call to DataViewReader.skip');\n if (this.position_ + bytes > this.dataView_.byteLength) {\n throw this.outOfBounds_();\n }\n this.position_ += bytes;\n }\n\n\n /**\n * Rewinds the specified number of bytes.\n * @param {number} bytes The number of bytes to rewind.\n * @export\n */\n rewind(bytes) {\n goog.asserts.assert(bytes >= 0, 'Bad call to DataViewReader.rewind');\n if (this.position_ < bytes) {\n throw this.outOfBounds_();\n }\n this.position_ -= bytes;\n }\n\n\n /**\n * Seeks to a specified position.\n * @param {number} position The desired byte position within the DataView.\n * @export\n */\n seek(position) {\n goog.asserts.assert(position >= 0, 'Bad call to DataViewReader.seek');\n if (position < 0 || position > this.dataView_.byteLength) {\n throw this.outOfBounds_();\n }\n this.position_ = position;\n }\n\n\n /**\n * Keeps reading until it reaches a byte that equals to zero. The text is\n * assumed to be UTF-8.\n * @return {string}\n * @export\n */\n readTerminatedString() {\n const start = this.position_;\n while (this.hasMoreData()) {\n const value = this.dataView_.getUint8(this.position_);\n if (value == 0) {\n break;\n }\n this.position_ += 1;\n }\n\n const ret = shaka.util.BufferUtils.toUint8(\n this.dataView_, start, this.position_ - start);\n // Skip string termination.\n this.position_ += 1;\n return shaka.util.StringUtils.fromUTF8(ret);\n }\n\n\n /**\n * @return {!shaka.util.Error}\n * @private\n */\n outOfBounds_() {\n return new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.BUFFER_READ_OUT_OF_BOUNDS);\n }\n};\n\n/**\n * Endianness.\n * @enum {number}\n * @export\n */\nshaka.util.DataViewReader.Endianness = {\n 'BIG_ENDIAN': 0,\n 'LITTLE_ENDIAN': 1,\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.Mp4Parser');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.util.DataViewReader');\n\n\n/**\n * @export\n */\nshaka.util.Mp4Parser = class {\n /** */\n constructor() {\n /** @private {!Object.} */\n this.headers_ = [];\n\n /** @private {!Object.} */\n this.boxDefinitions_ = [];\n\n /** @private {boolean} */\n this.done_ = false;\n }\n\n\n /**\n * Declare a box type as a Box.\n *\n * @param {string} type\n * @param {!shaka.util.Mp4Parser.CallbackType} definition\n * @return {!shaka.util.Mp4Parser}\n * @export\n */\n box(type, definition) {\n const typeCode = shaka.util.Mp4Parser.typeFromString_(type);\n this.headers_[typeCode] = shaka.util.Mp4Parser.BoxType_.BASIC_BOX;\n this.boxDefinitions_[typeCode] = definition;\n return this;\n }\n\n\n /**\n * Declare a box type as a Full Box.\n *\n * @param {string} type\n * @param {!shaka.util.Mp4Parser.CallbackType} definition\n * @return {!shaka.util.Mp4Parser}\n * @export\n */\n fullBox(type, definition) {\n const typeCode = shaka.util.Mp4Parser.typeFromString_(type);\n this.headers_[typeCode] = shaka.util.Mp4Parser.BoxType_.FULL_BOX;\n this.boxDefinitions_[typeCode] = definition;\n return this;\n }\n\n\n /**\n * Stop parsing. Useful for extracting information from partial segments and\n * avoiding an out-of-bounds error once you find what you are looking for.\n *\n * @export\n */\n stop() {\n this.done_ = true;\n }\n\n\n /**\n * Parse the given data using the added callbacks.\n *\n * @param {!BufferSource} data\n * @param {boolean=} partialOkay If true, allow reading partial payloads\n * from some boxes. If the goal is a child box, we can sometimes find it\n * without enough data to find all child boxes.\n * @param {boolean=} stopOnPartial If true, stop reading if an incomplete\n * box is detected.\n * @export\n */\n parse(data, partialOkay, stopOnPartial) {\n const reader = new shaka.util.DataViewReader(\n data, shaka.util.DataViewReader.Endianness.BIG_ENDIAN);\n\n this.done_ = false;\n while (reader.hasMoreData() && !this.done_) {\n this.parseNext(0, reader, partialOkay, stopOnPartial);\n }\n }\n\n\n /**\n * Parse the next box on the current level.\n *\n * @param {number} absStart The absolute start position in the original\n * byte array.\n * @param {!shaka.util.DataViewReader} reader\n * @param {boolean=} partialOkay If true, allow reading partial payloads\n * from some boxes. If the goal is a child box, we can sometimes find it\n * without enough data to find all child boxes.\n * @param {boolean=} stopOnPartial If true, stop reading if an incomplete\n * box is detected.\n * @export\n */\n parseNext(absStart, reader, partialOkay, stopOnPartial) {\n const start = reader.getPosition();\n\n // size(4 bytes) + type(4 bytes) = 8 bytes\n if (stopOnPartial && start + 8 > reader.getLength()) {\n this.done_ = true;\n return;\n }\n\n let size = reader.readUint32();\n const type = reader.readUint32();\n const name = shaka.util.Mp4Parser.typeToString(type);\n let has64BitSize = false;\n shaka.log.v2('Parsing MP4 box', name);\n\n switch (size) {\n case 0:\n size = reader.getLength() - start;\n break;\n case 1:\n if (stopOnPartial && reader.getPosition() + 8 > reader.getLength()) {\n this.done_ = true;\n return;\n }\n size = reader.readUint64();\n has64BitSize = true;\n break;\n }\n\n const boxDefinition = this.boxDefinitions_[type];\n\n if (boxDefinition) {\n let version = null;\n let flags = null;\n\n if (this.headers_[type] == shaka.util.Mp4Parser.BoxType_.FULL_BOX) {\n if (stopOnPartial && reader.getPosition() + 4 > reader.getLength()) {\n this.done_ = true;\n return;\n }\n const versionAndFlags = reader.readUint32();\n version = versionAndFlags >>> 24;\n flags = versionAndFlags & 0xFFFFFF;\n }\n\n // Read the whole payload so that the current level can be safely read\n // regardless of how the payload is parsed.\n let end = start + size;\n if (partialOkay && end > reader.getLength()) {\n // For partial reads, truncate the payload if we must.\n end = reader.getLength();\n }\n\n if (stopOnPartial && end > reader.getLength()) {\n this.done_ = true;\n return;\n }\n const payloadSize = end - reader.getPosition();\n const payload =\n (payloadSize > 0) ? reader.readBytes(payloadSize) : new Uint8Array(0);\n\n const payloadReader = new shaka.util.DataViewReader(\n payload, shaka.util.DataViewReader.Endianness.BIG_ENDIAN);\n\n /** @type {shaka.extern.ParsedBox} */\n const box = {\n name,\n parser: this,\n partialOkay: partialOkay || false,\n version,\n flags,\n reader: payloadReader,\n size,\n start: start + absStart,\n has64BitSize,\n };\n\n boxDefinition(box);\n } else {\n // Move the read head to be at the end of the box.\n // If the box is longer than the remaining parts of the file, e.g. the\n // mp4 is improperly formatted, or this was a partial range request that\n // ended in the middle of a box, just skip to the end.\n const skipLength = Math.min(\n start + size - reader.getPosition(),\n reader.getLength() - reader.getPosition());\n reader.skip(skipLength);\n }\n }\n\n\n /**\n * A callback that tells the Mp4 parser to treat the body of a box as a series\n * of boxes. The number of boxes is limited by the size of the parent box.\n *\n * @param {!shaka.extern.ParsedBox} box\n * @export\n */\n static children(box) {\n // The \"reader\" starts at the payload, so we need to add the header to the\n // start position. The header size varies.\n const headerSize = shaka.util.Mp4Parser.headerSize(box);\n while (box.reader.hasMoreData() && !box.parser.done_) {\n box.parser.parseNext(box.start + headerSize, box.reader, box.partialOkay);\n }\n }\n\n\n /**\n * A callback that tells the Mp4 parser to treat the body of a box as a sample\n * description. A sample description box has a fixed number of children. The\n * number of children is represented by a 4 byte unsigned integer. Each child\n * is a box.\n *\n * @param {!shaka.extern.ParsedBox} box\n * @export\n */\n static sampleDescription(box) {\n // The \"reader\" starts at the payload, so we need to add the header to the\n // start position. The header size varies.\n const headerSize = shaka.util.Mp4Parser.headerSize(box);\n const count = box.reader.readUint32();\n for (let i = 0; i < count; i++) {\n box.parser.parseNext(box.start + headerSize, box.reader, box.partialOkay);\n if (box.parser.done_) {\n break;\n }\n }\n }\n\n\n /**\n * A callback that tells the Mp4 parser to treat the body of a box as a visual\n * sample entry. A visual sample entry has some fixed-sized fields\n * describing the video codec parameters, followed by an arbitrary number of\n * appended children. Each child is a box.\n *\n * @param {!shaka.extern.ParsedBox} box\n * @export\n */\n static visualSampleEntry(box) {\n // The \"reader\" starts at the payload, so we need to add the header to the\n // start position. The header size varies.\n const headerSize = shaka.util.Mp4Parser.headerSize(box);\n\n // Skip 6 reserved bytes.\n // Skip 2-byte data reference index.\n // Skip 16 more reserved bytes.\n // Skip 4 bytes for width/height.\n // Skip 8 bytes for horizontal/vertical resolution.\n // Skip 4 more reserved bytes (0)\n // Skip 2-byte frame count.\n // Skip 32-byte compressor name (length byte, then name, then 0-padding).\n // Skip 2-byte depth.\n // Skip 2 more reserved bytes (0xff)\n // 78 bytes total.\n // See also https://github.com/shaka-project/shaka-packager/blob/d5ca6e84/packager/media/formats/mp4/box_definitions.cc#L1544\n box.reader.skip(78);\n\n while (box.reader.hasMoreData() && !box.parser.done_) {\n box.parser.parseNext(box.start + headerSize, box.reader, box.partialOkay);\n }\n }\n\n\n /**\n * A callback that tells the Mp4 parser to treat the body of a box as a audio\n * sample entry. A audio sample entry has some fixed-sized fields\n * describing the audio codec parameters, followed by an arbitrary number of\n * appended children. Each child is a box.\n *\n * @param {!shaka.extern.ParsedBox} box\n * @export\n */\n static audioSampleEntry(box) {\n // The \"reader\" starts at the payload, so we need to add the header to the\n // start position. The header size varies.\n const headerSize = shaka.util.Mp4Parser.headerSize(box);\n\n // 6 bytes reserved\n // 2 bytes data reference index\n box.reader.skip(8);\n // 2 bytes version\n const version = box.reader.readUint16();\n // 2 bytes revision (0, could be ignored)\n // 4 bytes reserved\n box.reader.skip(6);\n\n if (version == 2) {\n // 16 bytes hard-coded values with no comments\n // 8 bytes sample rate\n // 4 bytes channel count\n // 4 bytes hard-coded values with no comments\n // 4 bytes bits per sample\n // 4 bytes lpcm flags\n // 4 bytes sample size\n // 4 bytes samples per packet\n box.reader.skip(48);\n } else {\n // 2 bytes channel count\n // 2 bytes bits per sample\n // 2 bytes compression ID\n // 2 bytes packet size\n // 2 bytes sample rate\n // 2 byte reserved\n box.reader.skip(12);\n }\n\n if (version == 1) {\n // 4 bytes samples per packet\n // 4 bytes bytes per packet\n // 4 bytes bytes per frame\n // 4 bytes bytes per sample\n box.reader.skip(16);\n }\n\n while (box.reader.hasMoreData() && !box.parser.done_) {\n box.parser.parseNext(box.start + headerSize, box.reader, box.partialOkay);\n }\n }\n\n\n /**\n * Create a callback that tells the Mp4 parser to treat the body of a box as a\n * binary blob and to parse the body's contents using the provided callback.\n *\n * @param {function(!Uint8Array)} callback\n * @return {!shaka.util.Mp4Parser.CallbackType}\n * @export\n */\n static allData(callback) {\n return (box) => {\n const all = box.reader.getLength() - box.reader.getPosition();\n callback(box.reader.readBytes(all));\n };\n }\n\n\n /**\n * Convert an ascii string name to the integer type for a box.\n *\n * @param {string} name The name of the box. The name must be four\n * characters long.\n * @return {number}\n * @private\n */\n static typeFromString_(name) {\n goog.asserts.assert(\n name.length == 4,\n 'Mp4 box names must be 4 characters long');\n\n let code = 0;\n for (const chr of name) {\n code = (code << 8) | chr.charCodeAt(0);\n }\n return code;\n }\n\n\n /**\n * Convert an integer type from a box into an ascii string name.\n * Useful for debugging.\n *\n * @param {number} type The type of the box, a uint32.\n * @return {string}\n * @export\n */\n static typeToString(type) {\n const name = String.fromCharCode(\n (type >> 24) & 0xff,\n (type >> 16) & 0xff,\n (type >> 8) & 0xff,\n type & 0xff);\n return name;\n }\n\n /**\n * Find the header size of the box.\n * Useful for modifying boxes in place or finding the exact offset of a field.\n *\n * @param {shaka.extern.ParsedBox} box\n * @return {number}\n * @export\n */\n static headerSize(box) {\n const basicHeaderSize = 8;\n const _64BitFieldSize = box.has64BitSize ? 8 : 0;\n const versionAndFlagsSize = box.flags != null ? 4 : 0;\n return basicHeaderSize + _64BitFieldSize + versionAndFlagsSize;\n }\n};\n\n\n/**\n * @typedef {function(!shaka.extern.ParsedBox)}\n * @exportInterface\n */\nshaka.util.Mp4Parser.CallbackType;\n\n\n/**\n * An enum used to track the type of box so that the correct values can be\n * read from the header.\n *\n * @enum {number}\n * @private\n */\nshaka.util.Mp4Parser.BoxType_ = {\n BASIC_BOX: 0,\n FULL_BOX: 1,\n};\n\n\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.Pssh');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.Mp4Parser');\ngoog.require('shaka.util.Uint8ArrayUtils');\n\n\n/**\n * @summary\n * Parse a PSSH box and extract the system IDs.\n */\nshaka.util.Pssh = class {\n /**\n * @param {!Uint8Array} psshBox\n */\n constructor(psshBox) {\n /**\n * In hex.\n * @type {!Array.}\n */\n this.systemIds = [];\n\n /**\n * In hex.\n * @type {!Array.}\n */\n this.cencKeyIds = [];\n\n /**\n * Array with the pssh boxes found.\n * @type {!Array.}\n */\n this.data = [];\n\n new shaka.util.Mp4Parser()\n .box('moov', shaka.util.Mp4Parser.children)\n .box('moof', shaka.util.Mp4Parser.children)\n .fullBox('pssh', (box) => this.parsePsshBox_(box))\n .parse(psshBox);\n\n if (this.data.length == 0) {\n shaka.log.v2('No pssh box found!');\n }\n }\n\n\n /**\n * @param {!shaka.extern.ParsedBox} box\n * @private\n */\n parsePsshBox_(box) {\n goog.asserts.assert(\n box.version != null,\n 'PSSH boxes are full boxes and must have a valid version');\n\n goog.asserts.assert(\n box.flags != null,\n 'PSSH boxes are full boxes and must have a valid flag');\n\n if (box.version > 1) {\n shaka.log.warning('Unrecognized PSSH version found!');\n return;\n }\n\n // The \"reader\" gives us a view on the payload of the box. Create a new\n // view that contains the whole box.\n const dataView = box.reader.getDataView();\n goog.asserts.assert(\n dataView.byteOffset >= 12, 'DataView at incorrect position');\n const pssh = shaka.util.BufferUtils.toUint8(dataView, -12, box.size);\n this.data.push(pssh);\n\n this.systemIds.push(\n shaka.util.Uint8ArrayUtils.toHex(box.reader.readBytes(16)));\n if (box.version > 0) {\n const numKeyIds = box.reader.readUint32();\n for (let i = 0; i < numKeyIds; i++) {\n const keyId =\n shaka.util.Uint8ArrayUtils.toHex(box.reader.readBytes(16));\n this.cencKeyIds.push(keyId);\n }\n }\n }\n\n /**\n * Creates a pssh blob from the given system ID, data, keyIds and version.\n *\n * @param {!Uint8Array} data\n * @param {!Uint8Array} systemId\n * @param {!Set.} keyIds\n * @param {number} version\n * @return {!Uint8Array}\n */\n static createPssh(data, systemId, keyIds, version) {\n goog.asserts.assert(systemId.byteLength == 16, 'Invalid system ID length');\n const dataLength = data.length;\n let psshSize = 0x4 + 0x4 + 0x4 + systemId.length + 0x4 + dataLength;\n if (version > 0) {\n psshSize += 0x4 + (16 * keyIds.size);\n }\n\n /** @type {!Uint8Array} */\n const psshBox = new Uint8Array(psshSize);\n /** @type {!DataView} */\n const psshData = shaka.util.BufferUtils.toDataView(psshBox);\n\n let byteCursor = 0;\n psshData.setUint32(byteCursor, psshSize);\n byteCursor += 0x4;\n psshData.setUint32(byteCursor, 0x70737368); // 'pssh'\n byteCursor += 0x4;\n (version < 1) ? psshData.setUint32(byteCursor, 0) :\n psshData.setUint32(byteCursor, 0x01000000); // version + flags\n byteCursor += 0x4;\n psshBox.set(systemId, byteCursor);\n byteCursor += systemId.length;\n\n // if version > 0, add KID count and kid values.\n if (version > 0) {\n psshData.setUint32(byteCursor, keyIds.size); // KID_count\n byteCursor += 0x4;\n const Uint8ArrayUtils = shaka.util.Uint8ArrayUtils;\n for (const keyId of keyIds) {\n const KID = Uint8ArrayUtils.fromHex(keyId);\n psshBox.set(KID, byteCursor);\n byteCursor += KID.length;\n }\n }\n\n psshData.setUint32(byteCursor, dataLength);\n byteCursor += 0x4;\n psshBox.set(data, byteCursor);\n byteCursor += dataLength;\n\n goog.asserts.assert(byteCursor === psshSize, 'PSSH invalid length.');\n return psshBox;\n }\n\n\n /**\n * Normalise the initData array. This is to apply browser specific\n * work-arounds, e.g. removing duplicates which appears to occur\n * intermittently when the native msneedkey event fires (i.e. event.initData\n * contains dupes).\n *\n * @param {!Uint8Array} initData\n * @return {!Uint8Array}\n */\n static normaliseInitData(initData) {\n if (!initData) {\n return initData;\n }\n\n const pssh = new shaka.util.Pssh(initData);\n\n // If there is only a single pssh, return the original array.\n if (pssh.data.length <= 1) {\n return initData;\n }\n\n // Dedupe psshData.\n /** @type {!Array.} */\n const dedupedInitDatas = [];\n for (const initData of pssh.data) {\n const found = dedupedInitDatas.some((x) => {\n return shaka.util.BufferUtils.equal(x, initData);\n });\n\n if (!found) {\n dedupedInitDatas.push(initData);\n }\n }\n\n return shaka.util.Uint8ArrayUtils.concat(...dedupedInitDatas);\n }\n};\n\n","/*! @license\n * Shaka Player\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.ManifestFilterer');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.util.StreamUtils');\ngoog.require('shaka.media.DrmEngine');\ngoog.require('shaka.util.Error');\n\n/**\n * A class that handles the filtering of manifests.\n * Allows for manifest filtering to be done both by the player and by a\n * preload manager.\n */\nshaka.media.ManifestFilterer = class {\n /**\n * @param {?shaka.extern.PlayerConfiguration} config\n * @param {shaka.extern.Resolution} maxHwRes\n * @param {?shaka.media.DrmEngine} drmEngine\n */\n constructor(config, maxHwRes, drmEngine) {\n goog.asserts.assert(config, 'Must have config');\n\n /** @private {!shaka.extern.PlayerConfiguration} */\n this.config_ = config;\n\n /** @private {shaka.extern.Resolution} */\n this.maxHwRes_ = maxHwRes;\n\n /** @private {?shaka.media.DrmEngine} drmEngine */\n this.drmEngine_ = drmEngine;\n }\n\n /** @param {!shaka.media.DrmEngine} drmEngine */\n setDrmEngine(drmEngine) {\n this.drmEngine_ = drmEngine;\n }\n\n /**\n * Filters a manifest, removing unplayable streams/variants and choosing\n * the codecs.\n *\n * @param {?shaka.extern.Manifest} manifest\n * @return {!Promise.} tracksChanged\n */\n async filterManifest(manifest) {\n goog.asserts.assert(manifest, 'Manifest should exist!');\n await shaka.util.StreamUtils.filterManifest(this.drmEngine_, manifest,\n this.config_.drm.preferredKeySystems,\n this.config_.drm.keySystemsMapping);\n if (!this.config_.streaming.dontChooseCodecs) {\n shaka.util.StreamUtils.chooseCodecsAndFilterManifest(\n manifest,\n this.config_.preferredVideoCodecs,\n this.config_.preferredAudioCodecs,\n this.config_.preferredDecodingAttributes,\n this.config_.preferredTextFormats);\n }\n this.checkPlayableVariants_(manifest);\n return this.filterManifestWithRestrictions(manifest);\n }\n\n\n /**\n * @param {?shaka.extern.Manifest} manifest\n * @return {boolean} tracksChanged\n */\n applyRestrictions(manifest) {\n return shaka.util.StreamUtils.applyRestrictions(\n manifest.variants, this.config_.restrictions, this.maxHwRes_);\n }\n\n\n /**\n * Apply the restrictions configuration to the manifest, and check if there's\n * a variant that meets the restrictions.\n *\n * @param {?shaka.extern.Manifest} manifest\n * @return {boolean} tracksChanged\n */\n filterManifestWithRestrictions(manifest) {\n const tracksChanged = this.applyRestrictions(manifest);\n\n if (manifest) {\n // We may need to create new sessions for any new init data.\n const currentDrmInfo =\n this.drmEngine_ ? this.drmEngine_.getDrmInfo() : null;\n // DrmEngine.newInitData() requires mediaKeys to be available.\n if (currentDrmInfo && this.drmEngine_.getMediaKeys()) {\n for (const variant of manifest.variants) {\n this.processDrmInfos(currentDrmInfo.keySystem, variant.video);\n this.processDrmInfos(currentDrmInfo.keySystem, variant.audio);\n }\n }\n this.checkRestrictedVariants(manifest);\n }\n\n return tracksChanged;\n }\n\n /**\n * Confirm some variants are playable. Otherwise, throw an exception.\n * @param {!shaka.extern.Manifest} manifest\n * @private\n */\n checkPlayableVariants_(manifest) {\n const valid = manifest.variants.some(shaka.util.StreamUtils.isPlayable);\n\n // If none of the variants are playable, throw\n // CONTENT_UNSUPPORTED_BY_BROWSER.\n if (!valid) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.CONTENT_UNSUPPORTED_BY_BROWSER);\n }\n }\n\n /**\n * @param {string} keySystem\n * @param {?shaka.extern.Stream} stream\n */\n processDrmInfos(keySystem, stream) {\n if (!stream) {\n return;\n }\n\n for (const drmInfo of stream.drmInfos) {\n // Ignore any data for different key systems.\n if (drmInfo.keySystem == keySystem) {\n for (const initData of (drmInfo.initData || [])) {\n this.drmEngine_.newInitData(\n initData.initDataType, initData.initData);\n }\n }\n }\n }\n\n /**\n * Checks if the variants are all restricted, and throw an appropriate\n * exception if so.\n *\n * @param {shaka.extern.Manifest} manifest\n */\n checkRestrictedVariants(manifest) {\n const restrictedStatuses = shaka.media.ManifestFilterer.restrictedStatuses;\n const keyStatusMap =\n this.drmEngine_ ? this.drmEngine_.getKeyStatuses() : {};\n const keyIds = Object.keys(keyStatusMap);\n const isGlobalStatus = keyIds.length && keyIds[0] == '00';\n\n let hasPlayable = false;\n let hasAppRestrictions = false;\n\n /** @type {!Set.} */\n const missingKeys = new Set();\n\n /** @type {!Set.} */\n const badKeyStatuses = new Set();\n\n for (const variant of manifest.variants) {\n // TODO: Combine with onKeyStatus_.\n const streams = [];\n if (variant.audio) {\n streams.push(variant.audio);\n }\n if (variant.video) {\n streams.push(variant.video);\n }\n\n for (const stream of streams) {\n if (stream.keyIds.size) {\n for (const keyId of stream.keyIds) {\n const keyStatus = keyStatusMap[isGlobalStatus ? '00' : keyId];\n if (!keyStatus) {\n missingKeys.add(keyId);\n } else if (restrictedStatuses.includes(keyStatus)) {\n badKeyStatuses.add(keyStatus);\n }\n }\n } // if (stream.keyIds.size)\n }\n\n if (!variant.allowedByApplication) {\n hasAppRestrictions = true;\n } else if (variant.allowedByKeySystem) {\n hasPlayable = true;\n }\n }\n\n if (!hasPlayable) {\n /** @type {shaka.extern.RestrictionInfo} */\n const data = {\n hasAppRestrictions,\n missingKeys: Array.from(missingKeys),\n restrictedKeyStatuses: Array.from(badKeyStatuses),\n };\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.RESTRICTIONS_CANNOT_BE_MET,\n data);\n }\n }\n};\n\n/**\n * These are the EME key statuses that represent restricted playback.\n * 'usable', 'released', 'output-downscaled', 'status-pending' are statuses\n * of the usable keys. 'expired' status is being handled separately in\n * DrmEngine.\n *\n * @const {!Array.}\n */\nshaka.media.ManifestFilterer.restrictedStatuses =\n ['output-restricted', 'internal-error'];\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.ManifestParser');\n\ngoog.require('shaka.Deprecate');\ngoog.require('shaka.log');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.Platform');\n\n\n// TODO: revisit this when Closure Compiler supports partially-exported classes.\n/**\n * @summary An interface to register manifest parsers.\n * @export\n */\nshaka.media.ManifestParser = class {\n /**\n * Registers a manifest parser by file extension.\n *\n * @param {string} extension The file extension of the manifest.\n * @param {shaka.extern.ManifestParser.Factory} parserFactory The factory\n * used to create parser instances.\n * @export\n */\n static registerParserByExtension(extension, parserFactory) {\n shaka.Deprecate.deprecateFeature(5,\n 'ManifestParser.registerParserByExtension',\n 'Please use an ManifestParser with registerParserByMime function.');\n }\n\n\n /**\n * Registers a manifest parser by MIME type.\n *\n * @param {string} mimeType The MIME type of the manifest.\n * @param {shaka.extern.ManifestParser.Factory} parserFactory The factory\n * used to create parser instances.\n * @export\n */\n static registerParserByMime(mimeType, parserFactory) {\n shaka.media.ManifestParser.parsersByMime[mimeType] = parserFactory;\n }\n\n /**\n * Unregisters a manifest parser by MIME type.\n *\n * @param {string} mimeType The MIME type of the manifest.\n * @export\n */\n static unregisterParserByMime(mimeType) {\n delete shaka.media.ManifestParser.parsersByMime[mimeType];\n }\n\n\n /**\n * Returns a map of manifest support for well-known types.\n *\n * @return {!Object.}\n */\n static probeSupport() {\n const ManifestParser = shaka.media.ManifestParser;\n const support = {};\n\n // Make sure all registered parsers are shown, but only for MSE-enabled\n // platforms where our parsers matter.\n if (shaka.util.Platform.supportsMediaSource()) {\n for (const type in ManifestParser.parsersByMime) {\n support[type] = true;\n }\n }\n\n // Make sure all well-known types are tested as well, just to show an\n // explicit false for things people might be expecting.\n const testMimeTypes = [\n // DASH\n 'application/dash+xml',\n // HLS\n 'application/x-mpegurl',\n 'application/vnd.apple.mpegurl',\n // SmoothStreaming\n 'application/vnd.ms-sstr+xml',\n ];\n\n for (const type of testMimeTypes) {\n // Only query our parsers for MSE-enabled platforms. Otherwise, query a\n // temporary media element for native support for these types.\n if (shaka.util.Platform.supportsMediaSource()) {\n support[type] = !!ManifestParser.parsersByMime[type];\n } else {\n support[type] = shaka.util.Platform.supportsMediaType(type);\n }\n }\n\n return support;\n }\n\n\n /**\n * Get a factory that can create a manifest parser that should be able to\n * parse the manifest at |uri|.\n *\n * @param {string} uri\n * @param {?string} mimeType\n * @return {shaka.extern.ManifestParser.Factory}\n */\n static getFactory(uri, mimeType) {\n const ManifestParser = shaka.media.ManifestParser;\n\n // Try using the MIME type we were given.\n if (mimeType) {\n const factory = ManifestParser.parsersByMime[mimeType.toLowerCase()];\n if (factory) {\n return factory;\n }\n\n shaka.log.warning(\n 'Could not determine manifest type using MIME type ', mimeType);\n }\n\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.UNABLE_TO_GUESS_MANIFEST_TYPE,\n uri,\n mimeType);\n }\n\n\n /**\n * Determines whether or not the MIME type is supported by our own\n * manifest parsers on this platform. This takes into account whether or not\n * MediaSource is available, as well as which parsers are registered to the\n * system.\n *\n * @param {string} mimeType\n * @return {boolean}\n */\n static isSupported(mimeType) {\n // Without MediaSource, our own parsers are useless.\n if (!shaka.util.Platform.supportsMediaSource()) {\n return false;\n }\n\n if (mimeType in shaka.media.ManifestParser.parsersByMime) {\n return true;\n }\n\n return false;\n }\n};\n\n\n/**\n * @const {string}\n */\nshaka.media.ManifestParser.HLS = 'HLS';\n\n\n/**\n * @const {string}\n */\nshaka.media.ManifestParser.DASH = 'DASH';\n\n\n/**\n * @const {string}\n */\nshaka.media.ManifestParser.MSS = 'MSS';\n\n\n/**\n * @const {string}\n */\nshaka.media.ManifestParser.UNKNOWN = 'UNKNOWN';\n\n\n/**\n * @enum {string}\n * @export\n */\nshaka.media.ManifestParser.AccessibilityPurpose = {\n VISUALLY_IMPAIRED: 'visually impaired',\n HARD_OF_HEARING: 'hard of hearing',\n};\n\n\n/**\n * Contains the parser factory functions indexed by MIME type.\n *\n * @type {!Object.}\n */\nshaka.media.ManifestParser.parsersByMime = {};\n\n\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.ContentWorkarounds');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.Lazy');\ngoog.require('shaka.util.Mp4Parser');\ngoog.require('shaka.util.Platform');\ngoog.require('shaka.util.Uint8ArrayUtils');\n\n\n/**\n * @summary\n * A collection of methods to work around content issues on various platforms.\n */\nshaka.media.ContentWorkarounds = class {\n /**\n * Transform the init segment into a new init segment buffer that indicates\n * encryption. If the init segment already indicates encryption, return the\n * original init segment.\n *\n * Should only be called for MP4 init segments, and only on platforms that\n * need this workaround.\n *\n * @param {!BufferSource} initSegmentBuffer\n * @param {?string} uri\n * @return {!Uint8Array}\n * @see https://github.com/shaka-project/shaka-player/issues/2759\n */\n static fakeEncryption(initSegmentBuffer, uri) {\n const ContentWorkarounds = shaka.media.ContentWorkarounds;\n const initSegment = shaka.util.BufferUtils.toUint8(initSegmentBuffer);\n let modifiedInitSegment = initSegment;\n let isEncrypted = false;\n /** @type {shaka.extern.ParsedBox} */\n let stsdBox;\n const ancestorBoxes = [];\n\n const onSimpleAncestorBox = (box) => {\n ancestorBoxes.push(box);\n shaka.util.Mp4Parser.children(box);\n };\n\n const onEncryptionMetadataBox = (box) => {\n isEncrypted = true;\n };\n\n // Multiplexed content could have multiple boxes that we need to modify.\n // Add to this array in order of box offset. This will be important later,\n // when we process the boxes.\n /** @type {!Array.<{box: shaka.extern.ParsedBox, newType: number}>} */\n const boxesToModify = [];\n\n new shaka.util.Mp4Parser()\n .box('moov', onSimpleAncestorBox)\n .box('trak', onSimpleAncestorBox)\n .box('mdia', onSimpleAncestorBox)\n .box('minf', onSimpleAncestorBox)\n .box('stbl', onSimpleAncestorBox)\n .fullBox('stsd', (box) => {\n stsdBox = box;\n ancestorBoxes.push(box);\n shaka.util.Mp4Parser.sampleDescription(box);\n })\n .fullBox('encv', onEncryptionMetadataBox)\n .fullBox('enca', onEncryptionMetadataBox)\n .fullBox('dvav', (box) => {\n boxesToModify.push({\n box,\n newType: ContentWorkarounds.BOX_TYPE_ENCV_,\n });\n })\n .fullBox('dva1', (box) => {\n boxesToModify.push({\n box,\n newType: ContentWorkarounds.BOX_TYPE_ENCV_,\n });\n })\n .fullBox('dvh1', (box) => {\n boxesToModify.push({\n box,\n newType: ContentWorkarounds.BOX_TYPE_ENCV_,\n });\n })\n .fullBox('dvhe', (box) => {\n boxesToModify.push({\n box,\n newType: ContentWorkarounds.BOX_TYPE_ENCV_,\n });\n })\n .fullBox('dvc1', (box) => {\n boxesToModify.push({\n box,\n newType: ContentWorkarounds.BOX_TYPE_ENCV_,\n });\n })\n .fullBox('dvi1', (box) => {\n boxesToModify.push({\n box,\n newType: ContentWorkarounds.BOX_TYPE_ENCV_,\n });\n })\n .fullBox('hev1', (box) => {\n boxesToModify.push({\n box,\n newType: ContentWorkarounds.BOX_TYPE_ENCV_,\n });\n })\n .fullBox('hvc1', (box) => {\n boxesToModify.push({\n box,\n newType: ContentWorkarounds.BOX_TYPE_ENCV_,\n });\n })\n .fullBox('avc1', (box) => {\n boxesToModify.push({\n box,\n newType: ContentWorkarounds.BOX_TYPE_ENCV_,\n });\n })\n .fullBox('avc3', (box) => {\n boxesToModify.push({\n box,\n newType: ContentWorkarounds.BOX_TYPE_ENCV_,\n });\n })\n .fullBox('ac-3', (box) => {\n boxesToModify.push({\n box,\n newType: ContentWorkarounds.BOX_TYPE_ENCA_,\n });\n })\n .fullBox('ec-3', (box) => {\n boxesToModify.push({\n box,\n newType: ContentWorkarounds.BOX_TYPE_ENCA_,\n });\n })\n .fullBox('ac-4', (box) => {\n boxesToModify.push({\n box,\n newType: ContentWorkarounds.BOX_TYPE_ENCA_,\n });\n })\n .fullBox('mp4a', (box) => {\n boxesToModify.push({\n box,\n newType: ContentWorkarounds.BOX_TYPE_ENCA_,\n });\n }).parse(initSegment);\n\n if (isEncrypted) {\n shaka.log.debug('Init segment already indicates encryption.');\n return initSegment;\n }\n\n if (boxesToModify.length == 0 || !stsdBox) {\n shaka.log.error('Failed to find boxes needed to fake encryption!');\n shaka.log.v2('Failed init segment (hex):',\n shaka.util.Uint8ArrayUtils.toHex(initSegment));\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.CONTENT_TRANSFORMATION_FAILED,\n uri);\n }\n\n // Modify boxes in order from largest offset to smallest, so that earlier\n // boxes don't have their offsets changed before we process them.\n boxesToModify.reverse(); // in place!\n for (const workItem of boxesToModify) {\n const insertedBoxType =\n shaka.util.Mp4Parser.typeToString(workItem.newType);\n shaka.log.debug(`Inserting \"${insertedBoxType}\" box into init segment.`);\n modifiedInitSegment = ContentWorkarounds.insertEncryptionMetadata_(\n modifiedInitSegment, stsdBox, workItem.box, ancestorBoxes,\n workItem.newType);\n }\n\n // Edge Windows needs the unmodified init segment to be appended after the\n // patched one, otherwise video element throws following error:\n // CHUNK_DEMUXER_ERROR_APPEND_FAILED: Sample encryption info is not\n // available.\n if (shaka.util.Platform.isEdge() && shaka.util.Platform.isWindows() &&\n !shaka.util.Platform.isXboxOne()) {\n const doubleInitSegment = new Uint8Array(initSegment.byteLength +\n modifiedInitSegment.byteLength);\n doubleInitSegment.set(modifiedInitSegment);\n doubleInitSegment.set(initSegment, modifiedInitSegment.byteLength);\n return doubleInitSegment;\n }\n\n return modifiedInitSegment;\n }\n\n /**\n * Insert an encryption metadata box (\"encv\" or \"enca\" box) into the MP4 init\n * segment, based on the source box (\"mp4a\", \"avc1\", etc). Returns a new\n * buffer containing the modified init segment.\n *\n * @param {!Uint8Array} initSegment\n * @param {shaka.extern.ParsedBox} stsdBox\n * @param {shaka.extern.ParsedBox} sourceBox\n * @param {!Array.} ancestorBoxes\n * @param {number} metadataBoxType\n * @return {!Uint8Array}\n * @private\n */\n static insertEncryptionMetadata_(\n initSegment, stsdBox, sourceBox, ancestorBoxes, metadataBoxType) {\n const ContentWorkarounds = shaka.media.ContentWorkarounds;\n const metadataBoxArray = ContentWorkarounds.createEncryptionMetadata_(\n initSegment, sourceBox, metadataBoxType);\n\n // Construct a new init segment array with room for the encryption metadata\n // box we're adding.\n const newInitSegment =\n new Uint8Array(initSegment.byteLength + metadataBoxArray.byteLength);\n\n // For Xbox One & Edge, we cut and insert at the start of the source box.\n // For other platforms, we cut and insert at the end of the source box. It's\n // not clear why this is necessary on Xbox One, but it seems to be evidence\n // of another bug in the firmware implementation of MediaSource & EME.\n const cutPoint =\n (shaka.util.Platform.isXboxOne() || shaka.util.Platform.isEdge()) ?\n sourceBox.start :\n sourceBox.start + sourceBox.size;\n\n // The data before the cut point will be copied to the same location as\n // before. The data after that will be appended after the added metadata\n // box.\n const beforeData = initSegment.subarray(0, cutPoint);\n const afterData = initSegment.subarray(cutPoint);\n\n newInitSegment.set(beforeData);\n newInitSegment.set(metadataBoxArray, cutPoint);\n newInitSegment.set(afterData, cutPoint + metadataBoxArray.byteLength);\n\n // The parents up the chain from the encryption metadata box need their\n // sizes adjusted to account for the added box. These offsets should not be\n // changed, because they should all be within the first section we copy.\n for (const box of ancestorBoxes) {\n goog.asserts.assert(box.start < cutPoint,\n 'Ancestor MP4 box found in the wrong location! ' +\n 'Modified init segment will not make sense!');\n ContentWorkarounds.updateBoxSize_(\n newInitSegment, box.start, box.size + metadataBoxArray.byteLength);\n }\n\n // Add one to the sample entries field of the \"stsd\" box. This is a 4-byte\n // field just past the box header.\n const stsdBoxView = shaka.util.BufferUtils.toDataView(\n newInitSegment, stsdBox.start);\n const stsdBoxHeaderSize = shaka.util.Mp4Parser.headerSize(stsdBox);\n const numEntries = stsdBoxView.getUint32(stsdBoxHeaderSize);\n stsdBoxView.setUint32(stsdBoxHeaderSize, numEntries + 1);\n\n return newInitSegment;\n }\n\n /**\n * Create an encryption metadata box (\"encv\" or \"enca\" box), based on the\n * source box (\"mp4a\", \"avc1\", etc). Returns a new buffer containing the\n * encryption metadata box.\n *\n * @param {!Uint8Array} initSegment\n * @param {shaka.extern.ParsedBox} sourceBox\n * @param {number} metadataBoxType\n * @return {!Uint8Array}\n * @private\n */\n static createEncryptionMetadata_(initSegment, sourceBox, metadataBoxType) {\n const ContentWorkarounds = shaka.media.ContentWorkarounds;\n const sinfBoxArray = ContentWorkarounds.CANNED_SINF_BOX_.value();\n\n // Create a subarray which points to the source box data.\n const sourceBoxArray = initSegment.subarray(\n /* start= */ sourceBox.start,\n /* end= */ sourceBox.start + sourceBox.size);\n\n // Create a view on the source box array.\n const sourceBoxView = shaka.util.BufferUtils.toDataView(sourceBoxArray);\n\n // Create an array to hold the new encryption metadata box, which is based\n // on the source box.\n const metadataBoxArray = new Uint8Array(\n sourceBox.size + sinfBoxArray.byteLength);\n\n // Copy the source box into the new array.\n metadataBoxArray.set(sourceBoxArray, /* targetOffset= */ 0);\n\n // Change the box type.\n const metadataBoxView = shaka.util.BufferUtils.toDataView(metadataBoxArray);\n metadataBoxView.setUint32(\n ContentWorkarounds.BOX_TYPE_OFFSET_, metadataBoxType);\n\n // Append the \"sinf\" box to the encryption metadata box.\n metadataBoxArray.set(sinfBoxArray, /* targetOffset= */ sourceBox.size);\n\n // Update the \"sinf\" box's format field (in the child \"frma\" box) to reflect\n // the format of the original source box.\n const sourceBoxType = sourceBoxView.getUint32(\n ContentWorkarounds.BOX_TYPE_OFFSET_);\n metadataBoxView.setUint32(\n sourceBox.size + ContentWorkarounds.CANNED_SINF_BOX_FORMAT_OFFSET_,\n sourceBoxType);\n\n // Now update the encryption metadata box size.\n ContentWorkarounds.updateBoxSize_(\n metadataBoxArray, /* boxStart= */ 0, metadataBoxArray.byteLength);\n\n return metadataBoxArray;\n }\n\n /**\n * Modify an MP4 box's size field in-place.\n *\n * @param {!Uint8Array} dataArray\n * @param {number} boxStart The start position of the box in dataArray.\n * @param {number} newBoxSize The new size of the box.\n * @private\n */\n static updateBoxSize_(dataArray, boxStart, newBoxSize) {\n const ContentWorkarounds = shaka.media.ContentWorkarounds;\n const boxView = shaka.util.BufferUtils.toDataView(dataArray, boxStart);\n const sizeField = boxView.getUint32(ContentWorkarounds.BOX_SIZE_OFFSET_);\n if (sizeField == 0) { // Means \"the rest of the box\".\n // No adjustment needed for this box.\n } else if (sizeField == 1) { // Means \"use 64-bit size box\".\n // Set the 64-bit int in two 32-bit parts.\n // The high bits should definitely be 0 in practice, but we're being\n // thorough here.\n boxView.setUint32(ContentWorkarounds.BOX_SIZE_64_OFFSET_,\n newBoxSize >> 32);\n boxView.setUint32(ContentWorkarounds.BOX_SIZE_64_OFFSET_ + 4,\n newBoxSize & 0xffffffff);\n } else { // Normal 32-bit size field.\n // Not checking the size of the value here, since a box larger than 4GB is\n // unrealistic.\n boxView.setUint32(ContentWorkarounds.BOX_SIZE_OFFSET_, newBoxSize);\n }\n }\n};\n\n/**\n * A canned \"sinf\" box for use when adding fake encryption metadata to init\n * segments.\n *\n * @const {!shaka.util.Lazy.}\n * @private\n * @see https://github.com/shaka-project/shaka-player/issues/2759\n */\nshaka.media.ContentWorkarounds.CANNED_SINF_BOX_ =\n new shaka.util.Lazy(() => new Uint8Array([\n // sinf box\n // Size: 0x50 = 80\n 0x00, 0x00, 0x00, 0x50,\n\n // Type: sinf\n 0x73, 0x69, 0x6e, 0x66,\n\n // Children of sinf...\n\n // frma box\n // Size: 0x0c = 12\n 0x00, 0x00, 0x00, 0x0c,\n\n // Type: frma (child of sinf)\n 0x66, 0x72, 0x6d, 0x61,\n\n // Format: filled in later based on the source box (\"avc1\", \"mp4a\", etc)\n 0x00, 0x00, 0x00, 0x00,\n // end of frma box\n\n // schm box\n // Size: 0x14 = 20\n 0x00, 0x00, 0x00, 0x14,\n\n // Type: schm (child of sinf)\n 0x73, 0x63, 0x68, 0x6d,\n\n // Version: 0, Flags: 0\n 0x00, 0x00, 0x00, 0x00,\n\n // Scheme: cenc\n 0x63, 0x65, 0x6e, 0x63,\n\n // Scheme version: 1.0\n 0x00, 0x01, 0x00, 0x00,\n // end of schm box\n\n // schi box\n // Size: 0x28 = 40\n 0x00, 0x00, 0x00, 0x28,\n\n // Type: schi (child of sinf)\n 0x73, 0x63, 0x68, 0x69,\n\n // Children of schi...\n\n // tenc box\n // Size: 0x20 = 32\n 0x00, 0x00, 0x00, 0x20,\n\n // Type: tenc (child of schi)\n 0x74, 0x65, 0x6e, 0x63,\n\n // Version: 0, Flags: 0\n 0x00, 0x00, 0x00, 0x00,\n\n // Reserved fields\n 0x00, 0x00,\n\n // Default protected: true\n 0x01,\n\n // Default per-sample IV size: 8\n 0x08,\n\n // Default key ID: all zeros (dummy)\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n // end of tenc box\n\n // end of schi box\n\n // end of sinf box\n ]));\n\n/**\n * The location of the format field in the \"frma\" box inside the canned \"sinf\"\n * box above.\n *\n * @const {number}\n * @private\n */\nshaka.media.ContentWorkarounds.CANNED_SINF_BOX_FORMAT_OFFSET_ = 0x10;\n\n/**\n * Offset to a box's size field.\n *\n * @const {number}\n * @private\n */\nshaka.media.ContentWorkarounds.BOX_SIZE_OFFSET_ = 0;\n\n/**\n * Offset to a box's type field.\n *\n * @const {number}\n * @private\n */\nshaka.media.ContentWorkarounds.BOX_TYPE_OFFSET_ = 4;\n\n/**\n * Offset to a box's 64-bit size field, if it has one.\n *\n * @const {number}\n * @private\n */\nshaka.media.ContentWorkarounds.BOX_SIZE_64_OFFSET_ = 8;\n\n/**\n * Box type for \"encv\".\n *\n * @const {number}\n * @private\n */\nshaka.media.ContentWorkarounds.BOX_TYPE_ENCV_ = 0x656e6376;\n\n/**\n * Box type for \"enca\".\n *\n * @const {number}\n * @private\n */\nshaka.media.ContentWorkarounds.BOX_TYPE_ENCA_ = 0x656e6361;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.TimeRangesUtils');\n\n\n/**\n * @summary A set of utility functions for dealing with TimeRanges objects.\n */\nshaka.media.TimeRangesUtils = class {\n /**\n * Returns whether the buffer is small enough to be ignored.\n *\n * @param {TimeRanges} b\n * @return {boolean}\n * @private\n */\n static isBufferNegligible_(b) {\n // Workaround Safari bug: https://bit.ly/2trx6O8\n // Firefox may leave <1e-4s of data in buffer after clearing all content\n return b.length == 1 && b.end(0) - b.start(0) < 1e-4;\n }\n\n /**\n * Gets the first timestamp in the buffer.\n *\n * @param {TimeRanges} b\n * @return {?number} The first buffered timestamp, in seconds, if |buffered|\n * is non-empty; otherwise, return null.\n */\n static bufferStart(b) {\n if (!b) {\n return null;\n }\n if (shaka.media.TimeRangesUtils.isBufferNegligible_(b)) {\n return null;\n }\n // Workaround Edge bug: https://bit.ly/2JYLPeB\n if (b.length == 1 && b.start(0) < 0) {\n return 0;\n }\n return b.length ? b.start(0) : null;\n }\n\n\n /**\n * Gets the last timestamp in the buffer.\n *\n * @param {TimeRanges} b\n * @return {?number} The last buffered timestamp, in seconds, if |buffered|\n * is non-empty; otherwise, return null.\n */\n static bufferEnd(b) {\n if (!b) {\n return null;\n }\n if (shaka.media.TimeRangesUtils.isBufferNegligible_(b)) {\n return null;\n }\n return b.length ? b.end(b.length - 1) : null;\n }\n\n\n /**\n * Determines if the given time is inside a buffered range.\n *\n * @param {TimeRanges} b\n * @param {number} time Playhead time\n * @return {boolean}\n */\n static isBuffered(b, time) {\n if (!b || !b.length) {\n return false;\n }\n if (shaka.media.TimeRangesUtils.isBufferNegligible_(b)) {\n return false;\n }\n\n if (time > b.end(b.length - 1)) {\n return false;\n }\n\n return time >= b.start(0);\n }\n\n\n /**\n * Computes how far ahead of the given timestamp is buffered. To provide\n * smooth playback while jumping gaps, we don't include the gaps when\n * calculating this.\n * This only includes the amount of content that is buffered.\n *\n * @param {TimeRanges} b\n * @param {number} time\n * @return {number} The number of seconds buffered, in seconds, ahead of the\n * given time.\n */\n static bufferedAheadOf(b, time) {\n if (!b || !b.length) {\n return 0;\n }\n if (shaka.media.TimeRangesUtils.isBufferNegligible_(b)) {\n return 0;\n }\n\n // We calculate the buffered amount by ONLY accounting for the content\n // buffered (i.e. we ignore the times of the gaps). We also buffer through\n // all gaps.\n // Therefore, we start at the end and add up all buffers until |time|.\n let result = 0;\n for (const {start, end} of shaka.media.TimeRangesUtils.getBufferedInfo(b)) {\n if (end > time) {\n result += end - Math.max(start, time);\n }\n }\n\n return result;\n }\n\n\n /**\n * Determines if the given time is inside a gap between buffered ranges. If\n * it is, this returns the index of the buffer that is *ahead* of the gap.\n *\n * @param {TimeRanges} b\n * @param {number} time\n * @param {number} threshold\n * @return {?number} The index of the buffer after the gap, or null if not in\n * a gap.\n */\n static getGapIndex(b, time, threshold) {\n const TimeRangesUtils = shaka.media.TimeRangesUtils;\n\n if (!b || !b.length) {\n return null;\n }\n if (shaka.media.TimeRangesUtils.isBufferNegligible_(b)) {\n return null;\n }\n\n const idx = TimeRangesUtils.getBufferedInfo(b).findIndex((item, i, arr) => {\n return item.start > time &&\n (i == 0 || arr[i - 1].end - time <= threshold);\n });\n return idx >= 0 ? idx : null;\n }\n\n\n /**\n * @param {TimeRanges} b\n * @return {!Array.}\n */\n static getBufferedInfo(b) {\n if (!b) {\n return [];\n }\n const ret = [];\n for (let i = 0; i < b.length; i++) {\n ret.push({start: b.start(i), end: b.end(i)});\n }\n return ret;\n }\n\n /**\n * This operation can be potentially EXPENSIVE and should only be done in\n * debug builds for debugging purposes.\n *\n * @param {TimeRanges} oldRanges\n * @param {TimeRanges} newRanges\n * @return {?shaka.extern.BufferedRange} The last added range,\n * chronologically by presentation time.\n */\n static computeAddedRange(oldRanges, newRanges) {\n const TimeRangesUtils = shaka.media.TimeRangesUtils;\n\n if (!oldRanges || !oldRanges.length) {\n return null;\n }\n if (!newRanges || !newRanges.length) {\n return TimeRangesUtils.getBufferedInfo(newRanges).pop();\n }\n\n const newRangesReversed =\n TimeRangesUtils.getBufferedInfo(newRanges).reverse();\n const oldRangesReversed =\n TimeRangesUtils.getBufferedInfo(oldRanges).reverse();\n for (const newRange of newRangesReversed) {\n let foundOverlap = false;\n\n for (const oldRange of oldRangesReversed) {\n if (oldRange.end >= newRange.start && oldRange.end <= newRange.end) {\n foundOverlap = true;\n\n // If the new range goes beyond the corresponding old one, the\n // difference is newly-added.\n if (newRange.end > oldRange.end) {\n return {start: oldRange.end, end: newRange.end};\n }\n }\n }\n\n if (!foundOverlap) {\n return newRange;\n }\n }\n\n return null;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n\ngoog.provide('shaka.util.Dom');\n\ngoog.require('goog.asserts');\n\n\n// TODO: revisit this when Closure Compiler supports partially-exported classes.\n/** @export */\nshaka.util.Dom = class {\n /**\n * Creates an element, and cast the type from Element to HTMLElement.\n *\n * @param {string} tagName\n * @return {!HTMLElement}\n */\n static createHTMLElement(tagName) {\n const element =\n /** @type {!HTMLElement} */ (document.createElement(tagName));\n return element;\n }\n\n\n /**\n * Create a \"button\" element with the correct type.\n *\n * The compiler is very picky about the use of the \"disabled\" property on\n * HTMLElement, since it is only defined on certain subclasses of that. This\n * method merely creates a button and casts it to the correct type.\n *\n * @return {!HTMLButtonElement}\n */\n static createButton() {\n const button = document.createElement('button');\n button.setAttribute('type', 'button');\n return /** @type {!HTMLButtonElement} */ (button);\n }\n\n\n /**\n * @param {string} url\n * @param {string=} mimeType\n * @return {!HTMLSourceElement}\n */\n static createSourceElement(url, mimeType = '') {\n const source =\n /** @type {HTMLSourceElement} */ (document.createElement('source'));\n source.src = url;\n source.type = mimeType;\n return source;\n }\n\n\n /**\n * Cast a Node/Element to an HTMLElement\n *\n * @param {!Node|!Element} original\n * @return {!HTMLElement}\n */\n static asHTMLElement(original) {\n return /** @type {!HTMLElement}*/ (original);\n }\n\n\n /**\n * Cast a Node/Element to an HTMLCanvasElement\n *\n * @param {!Node|!Element} original\n * @return {!HTMLCanvasElement}\n */\n static asHTMLCanvasElement(original) {\n return /** @type {!HTMLCanvasElement}*/ (original);\n }\n\n\n /**\n * Cast a Node/Element to an HTMLMediaElement\n *\n * @param {!Node|!Element} original\n * @return {!HTMLMediaElement}\n */\n static asHTMLMediaElement(original) {\n return /** @type {!HTMLMediaElement}*/ (original);\n }\n\n\n /**\n * Returns the element with a given class name.\n * Assumes the class name to be unique for a given parent.\n *\n * @param {string} className\n * @param {!HTMLElement} parent\n * @return {!HTMLElement}\n */\n static getElementByClassName(className, parent) {\n const elements = parent.getElementsByClassName(className);\n goog.asserts.assert(elements.length == 1,\n 'Should only be one element with class name ' + className);\n\n return shaka.util.Dom.asHTMLElement(elements[0]);\n }\n\n /**\n * Remove all of the child nodes of an element.\n * @param {!Element} element\n * @export\n */\n static removeAllChildren(element) {\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n }\n};\n\n","/*! @license\n * Shaka Player\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.Id3Utils');\n\ngoog.require('shaka.log');\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.StringUtils');\n\n\n/**\n * @summary A set of Id3Utils utility functions.\n * @export\n */\nshaka.util.Id3Utils = class {\n /**\n * @param {Uint8Array} data\n * @param {number} offset\n * @return {boolean}\n * @private\n */\n static isHeader_(data, offset) {\n /*\n * http://id3.org/id3v2.3.0\n * [0] = 'I'\n * [1] = 'D'\n * [2] = '3'\n * [3,4] = {Version}\n * [5] = {Flags}\n * [6-9] = {ID3 Size}\n *\n * An ID3v2 tag can be detected with the following pattern:\n * $49 44 33 yy yy xx zz zz zz zz\n * Where yy is less than $FF, xx is the 'flags' byte and zz is less than $80\n */\n if (offset + 10 <= data.length) {\n // look for 'ID3' identifier\n if (data[offset] === 0x49 &&\n data[offset + 1] === 0x44 &&\n data[offset + 2] === 0x33) {\n // check version is within range\n if (data[offset + 3] < 0xff && data[offset + 4] < 0xff) {\n // check size is within range\n if (data[offset + 6] < 0x80 &&\n data[offset + 7] < 0x80 &&\n data[offset + 8] < 0x80 &&\n data[offset + 9] < 0x80) {\n return true;\n }\n }\n }\n }\n\n return false;\n }\n\n /**\n * @param {Uint8Array} data\n * @param {number} offset\n * @return {boolean}\n * @private\n */\n static isFooter_(data, offset) {\n /*\n * The footer is a copy of the header, but with a different identifier\n */\n if (offset + 10 <= data.length) {\n // look for '3DI' identifier\n if (data[offset] === 0x33 &&\n data[offset + 1] === 0x44 &&\n data[offset + 2] === 0x49) {\n // check version is within range\n if (data[offset + 3] < 0xff && data[offset + 4] < 0xff) {\n // check size is within range\n if (data[offset + 6] < 0x80 &&\n data[offset + 7] < 0x80 &&\n data[offset + 8] < 0x80 &&\n data[offset + 9] < 0x80) {\n return true;\n }\n }\n }\n }\n\n return false;\n }\n\n /**\n * @param {Uint8Array} data\n * @param {number} offset\n * @return {number}\n * @private\n */\n static readSize_(data, offset) {\n let size = 0;\n size = (data[offset] & 0x7f) << 21;\n size |= (data[offset + 1] & 0x7f) << 14;\n size |= (data[offset + 2] & 0x7f) << 7;\n size |= data[offset + 3] & 0x7f;\n return size;\n }\n\n /**\n * @param {Uint8Array} data\n * @return {shaka.extern.MetadataRawFrame}\n * @private\n */\n static getFrameData_(data) {\n /*\n * Frame ID $xx xx xx xx (four characters)\n * Size $xx xx xx xx\n * Flags $xx xx\n */\n const type = String.fromCharCode(data[0], data[1], data[2], data[3]);\n const size = shaka.util.Id3Utils.readSize_(data, 4);\n\n // skip frame id, size, and flags\n const offset = 10;\n\n return {\n type,\n size,\n data: data.subarray(offset, offset + size),\n };\n }\n\n /**\n * @param {shaka.extern.MetadataRawFrame} frame\n * @return {?shaka.extern.MetadataFrame}\n * @private\n */\n static decodeFrame_(frame) {\n const BufferUtils = shaka.util.BufferUtils;\n const StringUtils = shaka.util.StringUtils;\n\n const metadataFrame = {\n key: frame.type,\n description: '',\n data: '',\n mimeType: null,\n pictureType: null,\n };\n\n if (frame.type === 'APIC') {\n /*\n * Format:\n * [0] = {Text Encoding}\n * [1 - X] = {MIME Type}\\0\n * [X+1] = {Picture Type}\n * [X+2 - Y] = {Description}\\0\n * [Y - ?] = {Picture Data or Picture URL}\n */\n if (frame.size < 2) {\n return null;\n }\n if (frame.data[0] !== shaka.util.Id3Utils.UTF8_encoding) {\n shaka.log.warning('Ignore frame with unrecognized character ' +\n 'encoding');\n return null;\n }\n\n const mimeTypeEndIndex = frame.data.subarray(1).indexOf(0);\n if (mimeTypeEndIndex === -1) {\n return null;\n }\n const mimeType = StringUtils.fromUTF8(\n BufferUtils.toUint8(frame.data, 1, mimeTypeEndIndex));\n const pictureType = frame.data[2 + mimeTypeEndIndex];\n const descriptionEndIndex = frame.data.subarray(3 + mimeTypeEndIndex)\n .indexOf(0);\n if (descriptionEndIndex === -1) {\n return null;\n }\n const description = StringUtils.fromUTF8(\n BufferUtils.toUint8(frame.data, 3 + mimeTypeEndIndex,\n descriptionEndIndex));\n let data;\n if (mimeType === '-->') {\n data = StringUtils.fromUTF8(\n BufferUtils.toUint8(\n frame.data, 4 + mimeTypeEndIndex + descriptionEndIndex));\n } else {\n data = BufferUtils.toArrayBuffer(\n frame.data.subarray(4 + mimeTypeEndIndex + descriptionEndIndex));\n }\n metadataFrame.mimeType = mimeType;\n metadataFrame.pictureType = pictureType;\n metadataFrame.description = description;\n metadataFrame.data = data;\n return metadataFrame;\n } else if (frame.type === 'TXXX') {\n /*\n * Format:\n * [0] = {Text Encoding}\n * [1-?] = {Description}\\0{Value}\n */\n if (frame.size < 2) {\n return null;\n }\n if (frame.data[0] !== shaka.util.Id3Utils.UTF8_encoding) {\n shaka.log.warning('Ignore frame with unrecognized character ' +\n 'encoding');\n return null;\n }\n const descriptionEndIndex = frame.data.subarray(1).indexOf(0);\n\n if (descriptionEndIndex === -1) {\n return null;\n }\n const description = StringUtils.fromUTF8(\n BufferUtils.toUint8(frame.data, 1, descriptionEndIndex));\n const data = StringUtils.fromUTF8(\n BufferUtils.toUint8(frame.data, 2 + descriptionEndIndex))\n .replace(/\\0*$/, '');\n\n metadataFrame.description = description;\n metadataFrame.data = data;\n return metadataFrame;\n } else if (frame.type === 'WXXX') {\n /*\n * Format:\n * [0] = {Text Encoding}\n * [1-?] = {Description}\\0{URL}\n */\n if (frame.size < 2) {\n return null;\n }\n if (frame.data[0] !== shaka.util.Id3Utils.UTF8_encoding) {\n shaka.log.warning('Ignore frame with unrecognized character ' +\n 'encoding');\n return null;\n }\n const descriptionEndIndex = frame.data.subarray(1).indexOf(0);\n\n if (descriptionEndIndex === -1) {\n return null;\n }\n const description = StringUtils.fromUTF8(\n BufferUtils.toUint8(frame.data, 1, descriptionEndIndex));\n const data = StringUtils.fromUTF8(\n BufferUtils.toUint8(frame.data, 2 + descriptionEndIndex))\n .replace(/\\0*$/, '');\n\n metadataFrame.description = description;\n metadataFrame.data = data;\n return metadataFrame;\n } else if (frame.type === 'PRIV') {\n /*\n * Format: \\0\n */\n if (frame.size < 2) {\n return null;\n }\n const textEndIndex = frame.data.indexOf(0);\n if (textEndIndex === -1) {\n return null;\n }\n const text = StringUtils.fromUTF8(\n BufferUtils.toUint8(frame.data, 0, textEndIndex));\n metadataFrame.description = text;\n if (text == 'com.apple.streaming.transportStreamTimestamp') {\n const data = frame.data.subarray(text.length + 1);\n // timestamp is 33 bit expressed as a big-endian eight-octet number,\n // with the upper 31 bits set to zero.\n const pts33Bit = data[3] & 0x1;\n let timestamp =\n (data[4] << 23) + (data[5] << 15) + (data[6] << 7) + data[7];\n timestamp /= 45;\n\n if (pts33Bit) {\n timestamp += 47721858.84;\n } // 2^32 / 90\n\n metadataFrame.data = timestamp;\n } else {\n const data = BufferUtils.toArrayBuffer(\n frame.data.subarray(text.length + 1));\n metadataFrame.data = data;\n }\n return metadataFrame;\n } else if (frame.type[0] === 'T') {\n /*\n * Format:\n * [0] = {Text Encoding}\n * [1-?] = {Value}\n */\n if (frame.size < 2) {\n return null;\n }\n if (frame.data[0] !== shaka.util.Id3Utils.UTF8_encoding) {\n shaka.log.warning('Ignore frame with unrecognized character ' +\n 'encoding');\n return null;\n }\n const text = StringUtils.fromUTF8(frame.data.subarray(1))\n .replace(/\\0*$/, '');\n metadataFrame.data = text;\n return metadataFrame;\n } else if (frame.type[0] === 'W') {\n /*\n * Format:\n * [0-?] = {URL}\n */\n const url = StringUtils.fromUTF8(frame.data)\n .replace(/\\0*$/, '');\n metadataFrame.data = url;\n return metadataFrame;\n } else if (frame.data) {\n shaka.log.warning('Unrecognized ID3 frame type:', frame.type);\n metadataFrame.data = BufferUtils.toArrayBuffer(frame.data);\n return metadataFrame;\n }\n\n return null;\n }\n\n /**\n * Returns an array of ID3 frames found in all the ID3 tags in the id3Data\n * @param {Uint8Array} id3Data - The ID3 data containing one or more ID3 tags\n * @return {!Array.}\n * @export\n */\n static getID3Frames(id3Data) {\n const Id3Utils = shaka.util.Id3Utils;\n let offset = 0;\n const frames = [];\n while (Id3Utils.isHeader_(id3Data, offset)) {\n const size = Id3Utils.readSize_(id3Data, offset + 6);\n\n if ((id3Data[offset + 5] >> 6) & 1) {\n // skip extended header\n offset += 10;\n }\n // skip past ID3 header\n offset += 10;\n\n const end = offset + size;\n // loop through frames in the ID3 tag\n while (offset + 10 < end) {\n const frameData = Id3Utils.getFrameData_(id3Data.subarray(offset));\n const frame = Id3Utils.decodeFrame_(frameData);\n if (frame) {\n frames.push(frame);\n }\n\n // skip frame header and frame data\n offset += frameData.size + 10;\n }\n\n if (Id3Utils.isFooter_(id3Data, offset)) {\n offset += 10;\n }\n }\n return frames;\n }\n\n /**\n * Returns any adjacent ID3 tags found in data starting at offset, as one\n * block of data\n * @param {Uint8Array} id3Data - The ID3 data containing one or more ID3 tags\n * @param {number=} offset - The offset at which to start searching\n * @return {!Uint8Array}\n * @export\n */\n static getID3Data(id3Data, offset = 0) {\n const Id3Utils = shaka.util.Id3Utils;\n const front = offset;\n let length = 0;\n\n while (Id3Utils.isHeader_(id3Data, offset)) {\n if ((id3Data[offset + 5] >> 6) & 1) {\n // skip extended header\n length += 10;\n }\n // skip past ID3 header\n length += 10;\n\n const size = Id3Utils.readSize_(id3Data, offset + 6);\n length += size;\n\n if (Id3Utils.isFooter_(id3Data, offset + 10)) {\n // ID3 footer is 10 bytes\n length += 10;\n }\n offset += length;\n }\n\n if (length > 0) {\n return id3Data.subarray(front, front + length);\n }\n return new Uint8Array([]);\n }\n};\n\n/**\n * UTF8 encoding byte\n * @const {number}\n */\nshaka.util.Id3Utils.UTF8_encoding = 0x03;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.Mp4BoxParsers');\n\ngoog.require('shaka.util.DataViewReader');\ngoog.require('shaka.util.Mp4Parser');\ngoog.require('shaka.util.Uint8ArrayUtils');\n\nshaka.util.Mp4BoxParsers = class {\n /**\n * Parses a TFHD Box.\n * @param {!shaka.util.DataViewReader} reader\n * @param {number} flags\n * @return {!shaka.util.ParsedTFHDBox}\n */\n static parseTFHD(reader, flags) {\n let defaultSampleDuration = null;\n let defaultSampleSize = null;\n let baseDataOffset = null;\n\n const trackId = reader.readUint32(); // Read \"track_ID\"\n\n // Skip \"base_data_offset\" if present.\n if (flags & 0x000001) {\n baseDataOffset = reader.readUint64();\n }\n\n // Skip \"sample_description_index\" if present.\n if (flags & 0x000002) {\n reader.skip(4);\n }\n\n // Read \"default_sample_duration\" if present.\n if (flags & 0x000008) {\n defaultSampleDuration = reader.readUint32();\n }\n\n // Read \"default_sample_size\" if present.\n if (flags & 0x000010) {\n defaultSampleSize = reader.readUint32();\n }\n\n return {\n trackId,\n defaultSampleDuration,\n defaultSampleSize,\n baseDataOffset,\n };\n }\n\n /**\n * Parses a TFDT Box.\n * @param {!shaka.util.DataViewReader} reader\n * @param {number} version\n * @return {!shaka.util.ParsedTFDTBox}\n */\n static parseTFDT(reader, version) {\n const baseMediaDecodeTime = version == 1 ?\n reader.readUint64() : reader.readUint32();\n\n return {\n baseMediaDecodeTime,\n };\n }\n\n /**\n * Parses a TFDT Box, with a loss of precision beyond 53 bits.\n * Use only when exact integers are not required, e.g. when\n * dividing by the timescale.\n *\n * @param {!shaka.util.DataViewReader} reader\n * @param {number} version\n * @return {!shaka.util.ParsedTFDTBox}\n */\n static parseTFDTInaccurate(reader, version) {\n if (version == 1) {\n const high = reader.readUint32();\n const low = reader.readUint32();\n return {\n baseMediaDecodeTime: (high * Math.pow(2, 32)) + low,\n };\n } else {\n return {\n baseMediaDecodeTime: reader.readUint32(),\n };\n }\n }\n\n /**\n * Parses a PRFT Box, with a loss of precision beyond 53 bits.\n * Use only when exact integers are not required, e.g. when\n * dividing by the timescale.\n *\n * @param {!shaka.util.DataViewReader} reader\n * @param {number} version\n * @return {!shaka.util.ParsedPRFTBox}\n */\n static parsePRFTInaccurate(reader, version) {\n reader.readUint32(); // Ignore referenceTrackId\n const ntpTimestampSec = reader.readUint32();\n const ntpTimestampFrac = reader.readUint32();\n const ntpTimestamp = ntpTimestampSec * 1000 +\n ntpTimestampFrac / 2**32 * 1000;\n\n let mediaTime;\n if (version === 0) {\n mediaTime = reader.readUint32();\n } else {\n const high = reader.readUint32();\n const low = reader.readUint32();\n mediaTime = (high * Math.pow(2, 32)) + low;\n }\n return {\n mediaTime,\n ntpTimestamp,\n };\n }\n\n /**\n * Parses a MDHD Box.\n * @param {!shaka.util.DataViewReader} reader\n * @param {number} version\n * @return {!shaka.util.ParsedMDHDBox}\n */\n static parseMDHD(reader, version) {\n if (version == 1) {\n reader.skip(8); // Skip \"creation_time\"\n reader.skip(8); // Skip \"modification_time\"\n } else {\n reader.skip(4); // Skip \"creation_time\"\n reader.skip(4); // Skip \"modification_time\"\n }\n\n const timescale = reader.readUint32();\n\n reader.skip(4); // Skip \"duration\"\n\n const language = reader.readUint16();\n\n // language is stored as an ISO-639-2/T code in an array of three\n // 5-bit fields each field is the packed difference between its ASCII\n // value and 0x60\n const languageString =\n String.fromCharCode((language >> 10) + 0x60) +\n String.fromCharCode(((language & 0x03c0) >> 5) + 0x60) +\n String.fromCharCode((language & 0x1f) + 0x60);\n\n return {\n timescale,\n language: languageString,\n };\n }\n\n /**\n * Parses a TREX Box.\n * @param {!shaka.util.DataViewReader} reader\n * @return {!shaka.util.ParsedTREXBox}\n */\n static parseTREX(reader) {\n reader.skip(4); // Skip \"track_ID\"\n reader.skip(4); // Skip \"default_sample_description_index\"\n const defaultSampleDuration = reader.readUint32();\n const defaultSampleSize = reader.readUint32();\n\n return {\n defaultSampleDuration,\n defaultSampleSize,\n };\n }\n\n /**\n * Parses a TRUN Box.\n * @param {!shaka.util.DataViewReader} reader\n * @param {number} version\n * @param {number} flags\n * @return {!shaka.util.ParsedTRUNBox}\n */\n static parseTRUN(reader, version, flags) {\n const sampleCount = reader.readUint32();\n const sampleData = [];\n let dataOffset = null;\n\n // \"data_offset\"\n if (flags & 0x000001) {\n dataOffset = reader.readUint32();\n }\n\n // Skip \"first_sample_flags\" if present.\n if (flags & 0x000004) {\n reader.skip(4);\n }\n\n for (let i = 0; i < sampleCount; i++) {\n /** @type {shaka.util.ParsedTRUNSample} */\n const sample = {\n sampleDuration: null,\n sampleSize: null,\n sampleCompositionTimeOffset: null,\n };\n\n // Read \"sample duration\" if present.\n if (flags & 0x000100) {\n sample.sampleDuration = reader.readUint32();\n }\n\n // Read \"sample_size\" if present.\n if (flags & 0x000200) {\n sample.sampleSize = reader.readUint32();\n }\n\n // Skip \"sample_flags\" if present.\n if (flags & 0x000400) {\n reader.skip(4);\n }\n\n // Read \"sample_time_offset\" if present.\n if (flags & 0x000800) {\n sample.sampleCompositionTimeOffset = version == 0 ?\n reader.readUint32() :\n reader.readInt32();\n }\n\n sampleData.push(sample);\n }\n\n return {\n sampleCount,\n sampleData,\n dataOffset,\n };\n }\n\n /**\n * Parses a TKHD Box.\n * @param {!shaka.util.DataViewReader} reader\n * @param {number} version\n * @return {!shaka.util.ParsedTKHDBox}\n */\n static parseTKHD(reader, version) {\n if (version == 1) {\n reader.skip(8); // Skip \"creation_time\"\n reader.skip(8); // Skip \"modification_time\"\n } else {\n reader.skip(4); // Skip \"creation_time\"\n reader.skip(4); // Skip \"modification_time\"\n }\n\n const trackId = reader.readUint32();\n\n if (version == 1) {\n reader.skip(8); // Skip \"reserved\"\n } else {\n reader.skip(4); // Skip \"reserved\"\n }\n reader.skip(4); // Skip \"duration\"\n reader.skip(8); // Skip \"reserved\"\n reader.skip(2); // Skip \"layer\"\n reader.skip(2); // Skip \"alternate_group\"\n reader.skip(2); // Skip \"volume\"\n reader.skip(2); // Skip \"reserved\"\n reader.skip(36); // Skip \"matrix_structure\"\n\n const width = reader.readUint16() + (reader.readUint16() / 16);\n const height = reader.readUint16() + (reader.readUint16() / 16);\n\n return {\n trackId,\n width,\n height,\n };\n }\n\n\n /**\n * Parses an visual sample entry box.\n * @param {!shaka.util.DataViewReader} reader\n * @return {!shaka.util.ParsedVisualSampleEntryBox}\n */\n static visualSampleEntry(reader) {\n // Skip 6 reserved bytes.\n // Skip 2-byte data reference index.\n // Skip 16 more reserved bytes.\n reader.skip(24);\n // 4 bytes for width/height.\n const width = reader.readUint16();\n const height = reader.readUint16();\n // Skip 8 bytes for horizontal/vertical resolution.\n // Skip 4 more reserved bytes (0)\n // Skip 2-byte frame count.\n // Skip 32-byte compressor name (length byte, then name, then 0-padding).\n // Skip 2-byte depth.\n // Skip 2 more reserved bytes (0xff)\n reader.skip(50);\n\n return {\n width: width,\n height: height,\n };\n }\n\n\n /**\n * Parses an audio sample entry box.\n * @param {!shaka.util.DataViewReader} reader\n * @return {!shaka.util.ParsedAudioSampleEntryBox}\n */\n static audioSampleEntry(reader) {\n reader.skip(6); // Skip \"reserved\"\n reader.skip(2); // Skip \"data_reference_index\"\n reader.skip(8); // Skip \"reserved\"\n const channelCount = reader.readUint16();\n reader.skip(2); // Skip \"samplesize\"\n reader.skip(2); // Skip \"pre_defined\"\n reader.skip(2); // Skip \"reserved\"\n const sampleRate = reader.readUint16() + (reader.readUint16() / 65536);\n\n return {\n channelCount,\n sampleRate,\n };\n }\n\n /**\n * Parses a ESDS box.\n * @param {!shaka.util.DataViewReader} reader\n * @return {!shaka.util.ParsedESDSBox}\n */\n static parseESDS(reader) {\n let codec = 'mp4a';\n let tag;\n let oti;\n while (reader.hasMoreData()) {\n tag = reader.readUint8();\n let byteRead = reader.readUint8();\n while (byteRead & 0x80) {\n byteRead = reader.readUint8();\n }\n if (tag == 0x03) {\n reader.readUint16();\n const flags = reader.readUint8();\n if (flags & 0x80) {\n reader.readUint16();\n }\n if (flags & 0x40) {\n reader.skip(reader.readUint8());\n }\n if (flags & 0x20) {\n reader.readUint16();\n }\n } else if (tag == 0x04) {\n oti = reader.readUint8();\n reader.skip(12);\n } else if (tag == 0x05) {\n break;\n }\n }\n if (oti) {\n codec += '.' + shaka.util.Mp4BoxParsers.toHex_(oti);\n if (tag == 0x05 && reader.hasMoreData()) {\n const firstData = reader.readUint8();\n let audioObjectType = (firstData & 0xF8) >> 3;\n if (audioObjectType === 31 && reader.hasMoreData()) {\n audioObjectType = 32 + ((firstData & 0x7) << 3) +\n ((reader.readUint8() & 0xE0) >> 5);\n }\n codec += '.' + audioObjectType;\n }\n }\n return {codec};\n }\n\n /**\n * Parses a AVCC box.\n * @param {string} codecBase\n * @param {!shaka.util.DataViewReader} reader\n * @param {string} boxName\n * @return {!shaka.util.ParsedAVCCBox}\n */\n static parseAVCC(codecBase, reader, boxName) {\n const Mp4BoxParsers = shaka.util.Mp4BoxParsers;\n reader.skip(1); // Skip \"configurationVersion\"\n const codec = codecBase + '.' +\n Mp4BoxParsers.toHex_(reader.readUint8()) +\n Mp4BoxParsers.toHex_(reader.readUint8()) +\n Mp4BoxParsers.toHex_(reader.readUint8());\n return {codec};\n }\n\n /**\n * Parses a HVCC box.\n * @param {string} codecBase\n * @param {!shaka.util.DataViewReader} reader\n * @param {string} boxName\n * @return {!shaka.util.ParsedHVCCBox}\n */\n static parseHVCC(codecBase, reader, boxName) {\n const Mp4BoxParsers = shaka.util.Mp4BoxParsers;\n reader.skip(1); // Skip \"configurationVersion\"\n const profileByte = reader.readUint8();\n const profileSpace = ['', 'A', 'B', 'C'][profileByte >> 6];\n const generalProfileIdc = profileByte & 0x1f;\n const profileCompat = reader.readUint32();\n const tierFlag = (profileByte & 0x20) >> 5 ? 'H' : 'L';\n const constraintIndicator = [\n reader.readUint8(),\n reader.readUint8(),\n reader.readUint8(),\n reader.readUint8(),\n reader.readUint8(),\n reader.readUint8(),\n ];\n const levelIDC = reader.readUint8();\n let codec = codecBase;\n codec += '.' + profileSpace + generalProfileIdc;\n codec += '.' + Mp4BoxParsers.toHex_(\n Mp4BoxParsers.reverseBits_(profileCompat),\n /* removeInitialZero= */ true);\n codec += '.' + tierFlag + levelIDC;\n let constraintString = '';\n for (let i = constraintIndicator.length; i--; ) {\n const byte = constraintIndicator[i];\n if (byte || constraintString) {\n const encodedByte = byte.toString(16).toUpperCase();\n constraintString = '.' + encodedByte + constraintString;\n }\n }\n codec += constraintString;\n\n return {codec};\n }\n\n /**\n * Parses a DVCC box.\n * @param {string} codecBase\n * @param {!shaka.util.DataViewReader} reader\n * @param {string} boxName\n * @return {!shaka.util.ParsedDVCCBox}\n */\n static parseDVCC(codecBase, reader, boxName) {\n const Mp4BoxParsers = shaka.util.Mp4BoxParsers;\n reader.skip(2); // Skip \"dv_version_major\" and \"dv_version_minor\"\n const thirdByte = reader.readUint8();\n const fourthByte = reader.readUint8();\n const profile = (thirdByte >> 1) & 0x7f;\n const level = ((thirdByte << 5) & 0x20) | ((fourthByte >> 3) & 0x1f);\n const codec = codecBase + '.' +\n Mp4BoxParsers.addLeadingZero_(profile) + '.' +\n Mp4BoxParsers.addLeadingZero_(level);\n\n return {codec};\n }\n\n /**\n * Parses a DVVC box.\n * @param {string} codecBase\n * @param {!shaka.util.DataViewReader} reader\n * @param {string} boxName\n * @return {!shaka.util.ParsedDVVCBox}\n */\n static parseDVVC(codecBase, reader, boxName) {\n const Mp4BoxParsers = shaka.util.Mp4BoxParsers;\n reader.skip(2); // Skip \"dv_version_major\" and \"dv_version_minor\"\n const thirdByte = reader.readUint8();\n const fourthByte = reader.readUint8();\n const profile = (thirdByte >> 1) & 0x7f;\n const level = ((thirdByte << 5) & 0x20) | ((fourthByte >> 3) & 0x1f);\n const codec = codecBase + '.' +\n Mp4BoxParsers.addLeadingZero_(profile) + '.' +\n Mp4BoxParsers.addLeadingZero_(level);\n\n return {codec};\n }\n\n /**\n * Parses a VPCC box.\n * @param {string} codecBase\n * @param {!shaka.util.DataViewReader} reader\n * @param {string} boxName\n * @return {!shaka.util.ParsedVPCCBox}\n */\n static parseVPCC(codecBase, reader, boxName) {\n const Mp4BoxParsers = shaka.util.Mp4BoxParsers;\n const profile = reader.readUint8();\n const level = reader.readUint8();\n const bitDepth = (reader.readUint8() >> 4) & 0x0f;\n const codec = codecBase + '.' +\n Mp4BoxParsers.addLeadingZero_(profile) + '.' +\n Mp4BoxParsers.addLeadingZero_(level) + '.' +\n Mp4BoxParsers.addLeadingZero_(bitDepth);\n\n return {codec};\n }\n\n /**\n * Parses a AV1C box.\n * @param {string} codecBase\n * @param {!shaka.util.DataViewReader} reader\n * @param {string} boxName\n * @return {!shaka.util.ParsedAV1CBox}\n */\n static parseAV1C(codecBase, reader, boxName) {\n const Mp4BoxParsers = shaka.util.Mp4BoxParsers;\n // More info https://aomediacodec.github.io/av1-isobmff/#av1codecconfigurationbox-syntax\n reader.skip(1); // Skip \"marker\" and \"version\"\n const secondByte = reader.readUint8();\n const thirdByte = reader.readUint8();\n const profile = secondByte >>> 5;\n const level = secondByte & 0x1f;\n const tierFlag = thirdByte >>> 7 ? 'H' : 'M';\n const highBitDepth = (thirdByte & 0x40) >> 6;\n const twelveBit = (thirdByte & 0x20) >> 5;\n const bitDepth = profile === 2 && highBitDepth ?\n (twelveBit ? 12 : 10) : (highBitDepth ? 10 : 8);\n const monochrome = (thirdByte & 0x10) >> 4;\n const chromaSubsamplingX = (thirdByte & 0x08) >> 3;\n const chromaSubsamplingY = (thirdByte & 0x04) >> 2;\n const chromaSamplePosition = thirdByte & 0x03;\n // TODO: parse color_description_present_flag\n // default it to BT.709/limited range for now\n const colorPrimaries = 1;\n const transferCharacteristics = 1;\n const matrixCoefficients = 1;\n const videoFullRangeFlag = 0;\n const codec = codecBase + '.' + profile +\n '.' + Mp4BoxParsers.addLeadingZero_(level) + tierFlag +\n '.' + Mp4BoxParsers.addLeadingZero_(bitDepth) +\n '.' + monochrome +\n '.' + chromaSubsamplingX + chromaSubsamplingY + chromaSamplePosition +\n '.' + Mp4BoxParsers.addLeadingZero_(colorPrimaries) +\n '.' + Mp4BoxParsers.addLeadingZero_(transferCharacteristics) +\n '.' + Mp4BoxParsers.addLeadingZero_(matrixCoefficients) +\n '.' + videoFullRangeFlag;\n\n return {codec};\n }\n\n /**\n * Parses a FRMA box.\n * @param {!shaka.util.DataViewReader} reader\n * @return {!shaka.util.ParsedFRMABox}\n */\n static parseFRMA(reader) {\n const fourcc = reader.readUint32();\n const codec = shaka.util.Mp4Parser.typeToString(fourcc);\n return {codec};\n }\n\n /**\n * Parses a TENC box.\n * @param {!shaka.util.DataViewReader} reader\n * @return {!shaka.util.ParsedTENCBox}\n */\n static parseTENC(reader) {\n const Uint8ArrayUtils = shaka.util.Uint8ArrayUtils;\n reader.readUint8(); // reserved\n reader.readUint8();\n reader.readUint8(); // default_isProtected\n reader.readUint8(); // default_Per_Sample_IV_Size\n const defaultKID = Uint8ArrayUtils.toHex(reader.readBytes(16));\n return {defaultKID};\n }\n\n /**\n * Parses a HDLR box.\n * @param {!shaka.util.DataViewReader} reader\n * @return {!shaka.util.ParsedHDLRBox}\n */\n static parseHDLR(reader) {\n reader.skip(8); // Skip \"pre_defined\"\n\n const handlerType = reader.readTerminatedString();\n return {handlerType};\n }\n\n /**\n * Parses a PRJI box.\n * @param {!shaka.util.DataViewReader} reader\n * @return {!shaka.util.ParsedPRJIBox}\n */\n static parsePRJI(reader) {\n const projection = reader.readTerminatedString();\n return {projection};\n }\n\n /**\n * Parses a HFOV box.\n * @param {!shaka.util.DataViewReader} reader\n * @return {!shaka.util.ParsedHFOVBox}\n */\n static parseHFOV(reader) {\n const millidegrees = reader.readUint32();\n\n return {\n hfov: millidegrees / 1000,\n };\n }\n\n /**\n * Parses a COLR box.\n * @param {!shaka.util.DataViewReader} reader\n * @return {!shaka.util.ParsedCOLRBox}\n */\n static parseCOLR(reader) {\n let colorGamut = null;\n let videoRange = null;\n const data = reader.readBytes(4);\n let colorType = '';\n colorType += String.fromCharCode(data[0]);\n colorType += String.fromCharCode(data[1]);\n colorType += String.fromCharCode(data[2]);\n colorType += String.fromCharCode(data[3]);\n if (colorType === 'nclx') {\n const colorPrimaries = reader.readUint16();\n switch (colorPrimaries) {\n case 1:\n case 5:\n case 6:\n case 7:\n colorGamut = 'srgb';\n break;\n case 9:\n colorGamut = 'rec2020';\n break;\n case 11:\n case 12:\n colorGamut = 'p3';\n break;\n }\n const transferCharacteristics = reader.readUint16();\n reader.readUint16(); // matrix_coefficients\n switch (transferCharacteristics) {\n case 1:\n case 6:\n case 13:\n case 14:\n case 15:\n videoRange = 'SDR';\n break;\n case 16:\n videoRange = 'PQ';\n break;\n case 18:\n videoRange = 'HLG';\n break;\n }\n }\n return {\n colorGamut,\n videoRange,\n };\n }\n\n /**\n * Parses AV1 codec string with COLR box information.\n *\n * AV1 codec info: https://aomediacodec.github.io/av1-isobmff/#codecsparam\n *\n * @param {string} codec\n * @param {!shaka.util.DataViewReader} reader\n * @return {string}\n */\n static updateAV1CodecWithCOLRBox(codec, reader) {\n const Mp4BoxParsers = shaka.util.Mp4BoxParsers;\n const initialPosition = reader.getPosition();\n const data = reader.readBytes(4);\n let colorType = '';\n colorType += String.fromCharCode(data[0]);\n colorType += String.fromCharCode(data[1]);\n colorType += String.fromCharCode(data[2]);\n colorType += String.fromCharCode(data[3]);\n if (colorType === 'nclx') {\n const colorPrimaries = reader.readUint16();\n const transferCharacteristics = reader.readUint16();\n const matrixCoefficients = reader.readUint16();\n const videoFullRangeFlag = reader.readUint8() >> 7;\n const codecParts = codec.split('.');\n if (codecParts.length == 10) {\n codecParts[6] = Mp4BoxParsers.addLeadingZero_(colorPrimaries);\n codecParts[7] = Mp4BoxParsers.addLeadingZero_(transferCharacteristics);\n codecParts[8] = Mp4BoxParsers.addLeadingZero_(matrixCoefficients);\n codecParts[9] = String(videoFullRangeFlag);\n codec = codecParts.join('.');\n }\n }\n reader.seek(initialPosition);\n return codec;\n }\n\n /**\n * Convert a number to hex\n * @param {number} x\n * @param {boolean=} removeInitialZero\n * @return {string}\n * @private\n */\n static toHex_(x, removeInitialZero = false) {\n const value = x.toString(16).toUpperCase();\n if (removeInitialZero) {\n return value;\n }\n return ('0' + value).slice(-2);\n }\n\n /**\n * Reverse a number bit to bit\n * @param {number} x\n * @return {number}\n * @private\n */\n static reverseBits_(x) {\n let val = x;\n let reversed = 0;\n for (let i = 0; i < 32; i++) {\n reversed |= val & 1;\n if (i == 31) {\n break;\n }\n reversed <<= 1;\n val >>= 1;\n }\n return reversed;\n }\n\n /**\n *\n * @param {number} x\n * @return {string}\n * @private\n */\n static addLeadingZero_(x) {\n return (x < 10 ? '0' : '') + x;\n }\n};\n\n\n/**\n * @typedef {{\n * trackId: number,\n * defaultSampleDuration: ?number,\n * defaultSampleSize: ?number,\n * baseDataOffset: ?number\n * }}\n *\n * @property {number} trackId\n * As per the spec: an integer that uniquely identifies this\n * track over the entire life‐time of this presentation\n * @property {?number} defaultSampleDuration\n * If specified via flags, this overrides the default sample\n * duration in the Track Extends Box for this fragment\n * @property {?number} defaultSampleSize\n * If specified via flags, this overrides the default sample\n * size in the Track Extends Box for this fragment\n * @property {?number} baseDataOffset\n * If specified via flags, this indicate the base data offset\n *\n * @exportDoc\n */\nshaka.util.ParsedTFHDBox;\n\n/**\n * @typedef {{\n * baseMediaDecodeTime: number\n * }}\n *\n * @property {number} baseMediaDecodeTime\n * As per the spec: the absolute decode time, measured on the media\n * timeline, of the first sample in decode order in the track fragment\n *\n * @exportDoc\n */\nshaka.util.ParsedTFDTBox;\n\n/**\n * @typedef {{\n * mediaTime: number,\n * ntpTimestamp: number\n * }}\n *\n * @exportDoc\n */\nshaka.util.ParsedPRFTBox;\n\n/**\n * @typedef {{\n * timescale: number,\n * language: string\n * }}\n *\n * @property {number} timescale\n * As per the spec: an integer that specifies the time‐scale for this media;\n * this is the number of time units that pass in one second\n * @property {string} language\n * Language code for this media\n *\n * @exportDoc\n */\nshaka.util.ParsedMDHDBox;\n\n/**\n * @typedef {{\n * defaultSampleDuration: number,\n * defaultSampleSize: number\n * }}\n *\n * @property {number} defaultSampleDuration\n * The default sample duration to be used in track fragments\n * @property {number} defaultSampleSize\n * The default sample size to be used in track fragments\n *\n * @exportDoc\n */\nshaka.util.ParsedTREXBox;\n\n/**\n * @typedef {{\n * sampleCount: number,\n * sampleData: !Array.,\n * dataOffset: ?number\n * }}\n *\n * @property {number} sampleCount\n * As per the spec: the number of samples being added in this run;\n * @property {!Array.} sampleData\n * An array of size containing data for each sample\n * @property {?number} dataOffset\n * If specified via flags, this indicate the offset of the sample in bytes.\n *\n * @exportDoc\n */\nshaka.util.ParsedTRUNBox;\n\n/**\n * @typedef {{\n * sampleDuration: ?number,\n * sampleSize: ?number,\n * sampleCompositionTimeOffset: ?number\n * }}\n *\n * @property {?number} sampleDuration\n * The length of the sample in timescale units.\n * @property {?number} sampleSize\n * The size of the sample in bytes.\n * @property {?number} sampleCompositionTimeOffset\n * The time since the start of the sample in timescale units. Time\n * offset is based of the start of the sample. If this value is\n * missing, the accumulated durations preceeding this time sample will\n * be used to create the start time.\n *\n * @exportDoc\n */\nshaka.util.ParsedTRUNSample;\n\n/**\n * @typedef {{\n * trackId: number,\n * width: number,\n * height: number\n * }}\n *\n * @property {number} trackId\n * Unique ID indicative of this track\n * @property {number} width\n * Width of this track in pixels\n * @property {number} height\n * Height of this track in pixels.\n *\n * @exportDoc\n */\nshaka.util.ParsedTKHDBox;\n\n/**\n * @typedef {{\n * codec: string\n * }}\n *\n * @property {string} codec\n * A fourcc for a codec\n *\n * @exportDoc\n */\nshaka.util.ParsedFRMABox;\n\n/**\n * @typedef {{\n * defaultKID: string\n * }}\n *\n * @property {string} defaultKID\n *\n * @exportDoc\n */\nshaka.util.ParsedTENCBox;\n\n/**\n * @typedef {{\n * width: number,\n * height: number\n * }}\n *\n * @property {number} width\n * @property {number} height\n *\n * @exportDoc\n */\nshaka.util.ParsedVisualSampleEntryBox;\n\n/**\n * @typedef {{\n * channelCount: number,\n * sampleRate: number\n * }}\n *\n * @property {number} channelCount\n * @property {number} sampleRate\n *\n * @exportDoc\n */\nshaka.util.ParsedAudioSampleEntryBox;\n\n/**\n * @typedef {{\n * codec: string\n * }}\n *\n * @property {string} codec\n *\n * @exportDoc\n */\nshaka.util.ParsedESDSBox;\n\n/**\n * @typedef {{\n * codec: string\n * }}\n *\n * @property {string} codec\n *\n * @exportDoc\n */\nshaka.util.ParsedAVCCBox;\n\n/**\n * @typedef {{\n * codec: string\n * }}\n *\n * @property {string} codec\n *\n * @exportDoc\n */\nshaka.util.ParsedHVCCBox;\n\n/**\n * @typedef {{\n * codec: string\n * }}\n *\n * @property {string} codec\n *\n * @exportDoc\n */\nshaka.util.ParsedDVCCBox;\n\n/**\n * @typedef {{\n * codec: string\n * }}\n *\n * @property {string} codec\n *\n * @exportDoc\n */\nshaka.util.ParsedDVVCBox;\n\n/**\n * @typedef {{\n * codec: string\n * }}\n *\n * @property {string} codec\n *\n * @exportDoc\n */\nshaka.util.ParsedVPCCBox;\n\n/**\n * @typedef {{\n * codec: string\n * }}\n *\n * @property {string} codec\n *\n * @exportDoc\n */\nshaka.util.ParsedAV1CBox;\n\n/**\n * @typedef {{\n * handlerType: string\n * }}\n *\n * @property {string} handlerType\n * A four-character code that identifies the type of the media handler or\n * data handler. For media handlers, this field defines the type of\n * data—for example, 'vide' for video data, 'soun' for sound data.\n *\n * @exportDoc\n */\nshaka.util.ParsedHDLRBox;\n\n/**\n * @typedef {{\n * projection: string\n * }}\n *\n * @property {string} projection\n * A four-character code that identifies the type of the projection.\n * Possible values:\n * - Rectangular: ‘rect’\n * - Half equirectangular: ‘hequ’\n * - Equirectanguler: ?\n * - Fisheye: ‘fish’\n *\n * @exportDoc\n */\nshaka.util.ParsedPRJIBox;\n\n/**\n * @typedef {{\n * hfov: number\n * }}\n *\n * @property {number} hfov\n *\n * @exportDoc\n */\nshaka.util.ParsedHFOVBox;\n\n/**\n * @typedef {{\n * colorGamut: ?string,\n * videoRange: ?string\n * }}\n *\n * @property {?string} colorGamut\n * @property {?string} videoRange\n *\n * @exportDoc\n */\nshaka.util.ParsedCOLRBox;\n","/**\n * @license\n * Copyright Brightcove, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ngoog.provide('shaka.util.ExpGolomb');\n\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.DataViewReader');\n\n\n/**\n * @summary\n * Parser for exponential Golomb codes, a variable-bitwidth number encoding\n * scheme used by h264.\n * Based on https://github.com/videojs/mux.js/blob/main/lib/utils/exp-golomb.js\n *\n * @export\n */\nshaka.util.ExpGolomb = class {\n /**\n * @param {!Uint8Array} data\n * @param {boolean=} convertEbsp2rbsp\n */\n constructor(data, convertEbsp2rbsp = false) {\n /** @private {!Uint8Array} */\n this.data_ = data;\n if (convertEbsp2rbsp) {\n this.data_ = this.ebsp2rbsp_(data);\n }\n\n /** @private {number} */\n this.workingBytesAvailable_ = this.data_.byteLength;\n\n // the current word being examined\n /** @private {number} */\n this.workingWord_ = 0;\n\n // the number of bits left to examine in the current word\n /** @private {number} */\n this.workingBitsAvailable_ = 0;\n }\n\n /**\n * @param {!Uint8Array} data\n * @return {!Uint8Array}\n * @private\n */\n ebsp2rbsp_(data) {\n const ret = new Uint8Array(data.byteLength);\n let retIndex = 0;\n\n for (let i = 0; i < data.byteLength; i++) {\n if (i >= 2) {\n // Unescape: Skip 0x03 after 00 00\n if (data[i] == 0x03 && data[i - 1] == 0x00 && data[i - 2] == 0x00) {\n continue;\n }\n }\n ret[retIndex] = data[i];\n retIndex++;\n }\n\n return shaka.util.BufferUtils.toUint8(ret, 0, retIndex);\n }\n\n /**\n * Load the next word\n *\n * @private\n */\n loadWord_() {\n const position = this.data_.byteLength - this.workingBytesAvailable_;\n const bytes = new Uint8Array(4);\n const availableBytes = Math.min(4, this.workingBytesAvailable_);\n\n if (availableBytes === 0) {\n return;\n }\n\n bytes.set(this.data_.subarray(position, position + availableBytes));\n const dataView = new shaka.util.DataViewReader(\n bytes, shaka.util.DataViewReader.Endianness.BIG_ENDIAN);\n this.workingWord_ = dataView.readUint32();\n\n // track the amount of data that has been processed\n this.workingBitsAvailable_ = availableBytes * 8;\n this.workingBytesAvailable_ -= availableBytes;\n }\n\n /**\n * Skip n bits\n *\n * @param {number} count\n */\n skipBits(count) {\n if (this.workingBitsAvailable_ <= count) {\n count -= this.workingBitsAvailable_;\n const skipBytes = Math.floor(count / 8);\n count -= (skipBytes * 8);\n this.workingBitsAvailable_ -= skipBytes;\n this.loadWord_();\n }\n this.workingWord_ <<= count;\n this.workingBitsAvailable_ -= count;\n }\n\n /**\n * Read n bits\n *\n * @param {number} size\n * @return {number}\n */\n readBits(size) {\n let bits = Math.min(this.workingBitsAvailable_, size);\n const valu = this.workingWord_ >>> (32 - bits);\n this.workingBitsAvailable_ -= bits;\n if (this.workingBitsAvailable_ > 0) {\n this.workingWord_ <<= bits;\n } else if (this.workingBytesAvailable_ > 0) {\n this.loadWord_();\n }\n bits = size - bits;\n if (bits > 0) {\n return (valu << bits) | this.readBits(bits);\n }\n return valu;\n }\n\n /**\n * Return the number of skip leading zeros\n *\n * @return {number}\n * @private\n */\n skipLeadingZeros_() {\n let i;\n for (i = 0; i < this.workingBitsAvailable_; ++i) {\n if ((this.workingWord_ & (0x80000000 >>> i)) !== 0) {\n // the first bit of working word is 1\n this.workingWord_ <<= i;\n this.workingBitsAvailable_ -= i;\n return i;\n }\n }\n\n // we exhausted workingWord and still have not found a 1\n this.loadWord_();\n return i + this.skipLeadingZeros_();\n }\n\n /**\n * Skip exponential Golomb\n */\n skipExpGolomb() {\n this.skipBits(1 + this.skipLeadingZeros_());\n }\n\n /**\n * Return unsigned exponential Golomb\n *\n * @return {number}\n */\n readUnsignedExpGolomb() {\n const clz = this.skipLeadingZeros_();\n return this.readBits(clz + 1) - 1;\n }\n\n /**\n * Return exponential Golomb\n *\n * @return {number}\n */\n readExpGolomb() {\n const valu = this.readUnsignedExpGolomb();\n if (0x01 & valu) {\n // the number is odd if the low order bit is set\n // add 1 to make it even, and divide by 2\n return (1 + valu) >>> 1;\n }\n // divide by two then make it negative\n return -1 * (valu >>> 1);\n }\n\n /**\n * Read 1 bit as boolean\n *\n * @return {boolean}\n */\n readBoolean() {\n return this.readBits(1) === 1;\n }\n\n /**\n * Read 8 bits\n *\n * @return {number}\n */\n readUnsignedByte() {\n return this.readBits(8);\n }\n\n /**\n * The scaling list is optionally transmitted as part of a Sequence Parameter\n * Set (SPS).\n *\n * @param {number} count the number of entries in this scaling list\n * @see Recommendation ITU-T H.264, Section 7.3.2.1.1.1\n */\n skipScalingList(count) {\n let lastScale = 8;\n let nextScale = 8;\n\n for (let j = 0; j < count; j++) {\n if (nextScale !== 0) {\n const deltaScale = this.readExpGolomb();\n nextScale = (lastScale + deltaScale + 256) % 256;\n }\n lastScale = (nextScale === 0) ? lastScale : nextScale;\n }\n }\n\n /**\n * Return the slice type\n *\n * @return {number}\n */\n readSliceType() {\n // skip Nalu type\n this.readUnsignedByte();\n // discard first_mb_in_slice\n this.readUnsignedExpGolomb();\n // return slice_type\n return this.readUnsignedExpGolomb();\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.TsParser');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.Deprecate');\ngoog.require('shaka.log');\ngoog.require('shaka.util.ExpGolomb');\ngoog.require('shaka.util.Id3Utils');\ngoog.require('shaka.util.StringUtils');\ngoog.require('shaka.util.Uint8ArrayUtils');\n\n\n/**\n * @see https://en.wikipedia.org/wiki/MPEG_transport_stream\n * @export\n */\nshaka.util.TsParser = class {\n /** */\n constructor() {\n /** @private {?number} */\n this.pmtId_ = null;\n\n /** @private {boolean} */\n this.pmtParsed_ = false;\n\n /** @private {?number} */\n this.videoPid_ = null;\n\n /** @private {?string} */\n this.videoCodec_ = null;\n\n /** @private {!Array.>} */\n this.videoData_ = [];\n\n /** @private {!Array.} */\n this.videoPes_ = [];\n\n /** @private {?number} */\n this.audioPid_ = null;\n\n /** @private {?string} */\n this.audioCodec_ = null;\n\n /** @private {!Array.>} */\n this.audioData_ = [];\n\n /** @private {!Array.} */\n this.audioPes_ = [];\n\n /** @private {?number} */\n this.id3Pid_ = null;\n\n /** @private {!Array.>} */\n this.id3Data_ = [];\n\n /** @private {?number} */\n this.referencePts_ = null;\n\n /** @private {?number} */\n this.referenceDts_ = null;\n\n /** @private {?shaka.util.TsParser.OpusMetadata} */\n this.opusMetadata_ = null;\n }\n\n /**\n * Clear previous data\n *\n * @export\n */\n clearData() {\n this.videoData_ = [];\n this.videoPes_ = [];\n this.audioData_ = [];\n this.audioPes_ = [];\n this.id3Data_ = [];\n }\n\n /**\n * Parse the given data\n *\n * @param {Uint8Array} data\n * @return {!shaka.util.TsParser}\n * @export\n */\n parse(data) {\n const packetLength = shaka.util.TsParser.PacketLength_;\n\n // A TS fragment should contain at least 3 TS packets, a PAT, a PMT, and\n // one PID.\n if (data.length < 3 * packetLength) {\n return this;\n }\n const syncOffset = Math.max(0, shaka.util.TsParser.syncOffset(data));\n\n const length = data.length - (data.length + syncOffset) % packetLength;\n\n let unknownPIDs = false;\n\n // loop through TS packets\n for (let start = syncOffset; start < length; start += packetLength) {\n if (data[start] == 0x47) {\n const payloadUnitStartIndicator = !!(data[start + 1] & 0x40);\n // pid is a 13-bit field starting at the last 5 bits of TS[1]\n const pid = ((data[start + 1] & 0x1f) << 8) + data[start + 2];\n const adaptationFieldControl = (data[start + 3] & 0x30) >> 4;\n\n // if an adaption field is present, its length is specified by the\n // fifth byte of the TS packet header.\n let offset;\n if (adaptationFieldControl > 1) {\n offset = start + 5 + data[start + 4];\n // continue if there is only adaptation field\n if (offset == start + packetLength) {\n continue;\n }\n } else {\n offset = start + 4;\n }\n switch (pid) {\n case 0:\n if (payloadUnitStartIndicator) {\n offset += data[offset] + 1;\n }\n\n this.pmtId_ = this.getPmtId_(data, offset);\n break;\n case 17:\n case 0x1fff:\n break;\n case this.pmtId_: {\n if (payloadUnitStartIndicator) {\n offset += data[offset] + 1;\n }\n\n const parsedPIDs = this.parsePMT_(data, offset);\n\n // only update track id if track PID found while parsing PMT\n // this is to avoid resetting the PID to -1 in case\n // track PID transiently disappears from the stream\n // this could happen in case of transient missing audio samples\n // for example\n // NOTE this is only the PID of the track as found in TS,\n // but we are not using this for MP4 track IDs.\n if (parsedPIDs.video != -1) {\n this.videoPid_ = parsedPIDs.video;\n this.videoCodec_ = parsedPIDs.videoCodec;\n }\n if (parsedPIDs.audio != -1) {\n this.audioPid_ = parsedPIDs.audio;\n this.audioCodec_ = parsedPIDs.audioCodec;\n }\n if (parsedPIDs.id3 != -1) {\n this.id3Pid_ = parsedPIDs.id3;\n }\n\n if (unknownPIDs && !this.pmtParsed_) {\n shaka.log.debug('reparse from beginning');\n unknownPIDs = false;\n // we set it to -188, the += 188 in the for loop will reset\n // start to 0\n start = syncOffset - packetLength;\n }\n this.pmtParsed_ = true;\n break;\n }\n case this.videoPid_: {\n const videoData = data.subarray(offset, start + packetLength);\n if (payloadUnitStartIndicator) {\n this.videoData_.push([videoData]);\n } else if (this.videoData_.length) {\n const prevVideoData = this.videoData_[this.videoData_.length - 1];\n if (prevVideoData) {\n this.videoData_[this.videoData_.length - 1].push(videoData);\n }\n }\n break;\n }\n case this.audioPid_: {\n const audioData = data.subarray(offset, start + packetLength);\n if (payloadUnitStartIndicator) {\n this.audioData_.push([audioData]);\n } else if (this.audioData_.length) {\n const prevAudioData = this.audioData_[this.audioData_.length - 1];\n if (prevAudioData) {\n this.audioData_[this.audioData_.length - 1].push(audioData);\n }\n }\n break;\n }\n case this.id3Pid_: {\n const id3Data = data.subarray(offset, start + packetLength);\n if (payloadUnitStartIndicator) {\n this.id3Data_.push([id3Data]);\n } else if (this.id3Data_.length) {\n const prevId3Data = this.id3Data_[this.id3Data_.length - 1];\n if (prevId3Data) {\n this.id3Data_[this.id3Data_.length - 1].push(id3Data);\n }\n }\n break;\n }\n default:\n unknownPIDs = true;\n break;\n }\n } else {\n shaka.log.warning('Found TS packet that do not start with 0x47');\n }\n }\n return this;\n }\n\n /**\n * Get the PMT ID from the PAT\n *\n * @param {Uint8Array} data\n * @param {number} offset\n * @return {number}\n * @private\n */\n getPmtId_(data, offset) {\n // skip the PSI header and parse the first PMT entry\n return ((data[offset + 10] & 0x1f) << 8) | data[offset + 11];\n }\n\n /**\n * Parse PMT\n *\n * @param {Uint8Array} data\n * @param {number} offset\n * @return {!shaka.util.TsParser.PMT}\n * @private\n */\n parsePMT_(data, offset) {\n const StringUtils = shaka.util.StringUtils;\n const result = {\n audio: -1,\n video: -1,\n id3: -1,\n audioCodec: '',\n videoCodec: '',\n };\n const sectionLength = ((data[offset + 1] & 0x0f) << 8) | data[offset + 2];\n const tableEnd = offset + 3 + sectionLength - 4;\n // to determine where the table is, we have to figure out how\n // long the program info descriptors are\n const programInfoLength =\n ((data[offset + 10] & 0x0f) << 8) | data[offset + 11];\n // advance the offset to the first entry in the mapping table\n offset += 12 + programInfoLength;\n while (offset < tableEnd) {\n const pid = ((data[offset + 1] & 0x1f) << 8) | data[offset + 2];\n const esInfoLength = ((data[offset + 3] & 0x0f) << 8) | data[offset + 4];\n switch (data[offset]) {\n case 0x06:\n // stream_type 6 can mean a lot of different things in case of DVB.\n // We need to look at the descriptors. Right now, we're only\n // interested in a few audio and video formats,.\n if (esInfoLength > 0) {\n let parsePos = offset + 5;\n let remaining = esInfoLength;\n // Descriptor info: https://www.streamguru.de/mpeg-analyzer/supported-descriptor-list/\n while (remaining > 2) {\n const descriptorId = data[parsePos];\n const descriptorLen = data[parsePos + 1] + 2;\n switch (descriptorId) {\n // Registration descriptor\n case 0x05: {\n const registrationData =\n data.subarray(parsePos + 2, parsePos + descriptorLen);\n const registration =\n StringUtils.fromCharCode(registrationData);\n if (result.audio == -1 && registration === 'Opus') {\n result.audio = pid;\n result.audioCodec = 'opus';\n } else if (result.video == -1 && registration === 'AV01') {\n result.video = pid;\n result.videoCodec = 'av1';\n }\n break;\n }\n // DVB Descriptor for AC-3\n case 0x6a:\n if (result.audio == -1) {\n result.audio = pid;\n result.audioCodec = 'ac3';\n }\n break;\n // DVB Descriptor for EC-3\n case 0x7a:\n if (result.audio == -1) {\n result.audio = pid;\n result.audioCodec = 'ec3';\n }\n break;\n // DVB Descriptor for AAC\n case 0x7c:\n if (result.audio == -1) {\n result.audio = pid;\n result.audioCodec = 'aac';\n }\n break;\n // DVB extension descriptor\n case 0x7f:\n if (result.audioCodec == 'opus') {\n const extensionDescriptorId = data[parsePos + 2];\n let channelConfigCode = null;\n // User defined (provisional Opus)\n if (extensionDescriptorId === 0x80) {\n channelConfigCode = data[parsePos + 3];\n }\n\n if (channelConfigCode == null) {\n // Not Supported Opus channel count.\n break;\n }\n const channelCount = (channelConfigCode & 0x0F) === 0 ?\n 2 : (channelConfigCode & 0x0F);\n this.opusMetadata_ = {\n channelCount,\n channelConfigCode,\n sampleRate: 48000,\n };\n }\n break;\n }\n parsePos += descriptorLen;\n remaining -= descriptorLen;\n }\n }\n break;\n // SAMPLE-AES AAC\n case 0xcf:\n break;\n // ISO/IEC 13818-7 ADTS AAC (MPEG-2 lower bit-rate audio)\n case 0x0f:\n if (result.audio == -1) {\n result.audio = pid;\n result.audioCodec = 'aac';\n }\n break;\n // LOAS/LATM AAC\n case 0x11:\n if (result.audio == -1) {\n result.audio = pid;\n result.audioCodec = 'aac-loas';\n }\n break;\n // Packetized metadata (ID3)\n case 0x15:\n if (result.id3 == -1) {\n result.id3 = pid;\n }\n break;\n // SAMPLE-AES AVC\n case 0xdb:\n break;\n // ITU-T Rec. H.264 and ISO/IEC 14496-10 (lower bit-rate video)\n case 0x1b:\n if (result.video == -1) {\n result.video = pid;\n result.videoCodec = 'avc';\n }\n break;\n // ISO/IEC 11172-3 (MPEG-1 audio)\n // or ISO/IEC 13818-3 (MPEG-2 halved sample rate audio)\n case 0x03:\n case 0x04:\n if (result.audio == -1) {\n result.audio = pid;\n result.audioCodec = 'mp3';\n }\n break;\n // HEVC\n case 0x24:\n if (result.video == -1) {\n result.video = pid;\n result.videoCodec = 'hvc';\n }\n break;\n // AC-3\n case 0x81:\n if (result.audio == -1) {\n result.audio = pid;\n result.audioCodec = 'ac3';\n }\n break;\n // EC-3\n case 0x84:\n case 0x87:\n if (result.audio == -1) {\n result.audio = pid;\n result.audioCodec = 'ec3';\n }\n break;\n default:\n // shaka.log.warning('Unknown stream type:', data[offset]);\n break;\n }\n // move to the next table entry\n // skip past the elementary stream descriptors, if present\n offset += esInfoLength + 5;\n }\n return result;\n }\n\n /**\n * Parse PES\n *\n * @param {Uint8Array} data\n * @return {?shaka.extern.MPEG_PES}\n * @private\n */\n parsePES_(data) {\n const startPrefix = (data[0] << 16) | (data[1] << 8) | data[2];\n // In certain live streams, the start of a TS fragment has ts packets\n // that are frame data that is continuing from the previous fragment. This\n // is to check that the pes data is the start of a new pes data\n if (startPrefix !== 1) {\n return null;\n }\n /** @type {shaka.extern.MPEG_PES} */\n const pes = {\n data: new Uint8Array(0),\n // get the packet length, this will be 0 for video\n packetLength: ((data[4] << 8) | data[5]),\n pts: null,\n dts: null,\n nalus: [],\n };\n\n // if PES parsed length is not zero and greater than total received length,\n // stop parsing. PES might be truncated. minus 6 : PES header size\n if (pes.packetLength && pes.packetLength > data.byteLength - 6) {\n return null;\n }\n\n // PES packets may be annotated with a PTS value, or a PTS value\n // and a DTS value. Determine what combination of values is\n // available to work with.\n const ptsDtsFlags = data[7];\n\n // PTS and DTS are normally stored as a 33-bit number. Javascript\n // performs all bitwise operations on 32-bit integers but javascript\n // supports a much greater range (52-bits) of integer using standard\n // mathematical operations.\n // We construct a 31-bit value using bitwise operators over the 31\n // most significant bits and then multiply by 4 (equal to a left-shift\n // of 2) before we add the final 2 least significant bits of the\n // timestamp (equal to an OR.)\n if (ptsDtsFlags & 0xC0) {\n // the PTS and DTS are not written out directly. For information\n // on how they are encoded, see\n // http://dvd.sourceforge.net/dvdinfo/pes-hdr.html\n const pts =\n (data[9] & 0x0e) * 536870912 + // 1 << 29\n (data[10] & 0xff) * 4194304 + // 1 << 22\n (data[11] & 0xfe) * 16384 + // 1 << 14\n (data[12] & 0xff) * 128 + // 1 << 7\n (data[13] & 0xfe) / 2;\n\n if (this.referencePts_ == null) {\n this.referencePts_ = pts;\n }\n\n pes.pts = this.handleRollover_(pts, this.referencePts_);\n this.referencePts_ = pes.pts;\n\n pes.dts = pes.pts;\n if (ptsDtsFlags & 0x40) {\n const dts =\n (data[14] & 0x0e) * 536870912 + // 1 << 29\n (data[15] & 0xff) * 4194304 + // 1 << 22\n (data[16] & 0xfe) * 16384 + // 1 << 14\n (data[17] & 0xff) * 128 + // 1 << 7\n (data[18] & 0xfe) / 2;\n\n if (this.referenceDts_ == null) {\n this.referenceDts_ = dts;\n }\n\n pes.dts = this.handleRollover_(dts, this.referenceDts_);\n }\n this.referenceDts_ = pes.dts;\n }\n\n const pesHdrLen = data[8];\n // 9 bytes : 6 bytes for PES header + 3 bytes for PES extension\n const payloadStartOffset = pesHdrLen + 9;\n if (data.byteLength <= payloadStartOffset) {\n return null;\n }\n\n pes.data = data.subarray(payloadStartOffset);\n\n return pes;\n }\n\n /**\n * Parse AVC Nalus\n *\n * The code is based on hls.js\n * Credit to https://github.com/video-dev/hls.js/blob/master/src/demux/tsdemuxer.ts\n *\n * @param {shaka.extern.MPEG_PES} pes\n * @param {?shaka.extern.MPEG_PES=} nextPes\n * @return {!Array.}\n * @export\n */\n parseAvcNalus(pes, nextPes) {\n shaka.Deprecate.deprecateFeature(5,\n 'TsParser.parseAvcNalus',\n 'Please use parseNalus function instead.');\n const lastInfo = {\n nalu: null,\n state: null,\n };\n return this.parseNalus(pes, lastInfo);\n }\n\n /**\n * Parse AVC and HVC Nalus\n *\n * The code is based on hls.js\n * Credit to https://github.com/video-dev/hls.js/blob/master/src/demux/tsdemuxer.ts\n *\n * @param {shaka.extern.MPEG_PES} pes\n * @param {{nalu: ?shaka.extern.VideoNalu, state: ?number}} lastInfo\n * @return {!Array.}\n * @export\n */\n parseNalus(pes, lastInfo) {\n const timescale = shaka.util.TsParser.Timescale;\n const time = pes.pts ? pes.pts / timescale : null;\n const data = pes.data;\n const len = data.byteLength;\n\n let naluHeaderSize = 1;\n if (this.videoCodec_ == 'hvc') {\n naluHeaderSize = 2;\n }\n\n // A NALU does not contain is its size.\n // The Annex B specification solves this by requiring ‘Start Codes’ to\n // precede each NALU. A start code is 2 or 3 0x00 bytes followed with a\n // 0x01 byte. e.g. 0x000001 or 0x00000001.\n // More info in: https://stackoverflow.com/questions/24884827/possible-locations-for-sequence-picture-parameter-sets-for-h-264-stream/24890903#24890903\n let numZeros = lastInfo.state || 0;\n\n const initialNumZeros = numZeros;\n\n /** @type {number} */\n let i = 0;\n\n /** @type {!Array.} */\n const nalus = [];\n\n // Start position includes the first byte where we read the type.\n // The data we extract begins at the next byte.\n let lastNaluStart = -1;\n // Extracted from the first byte.\n let lastNaluType = 0;\n\n const getNaluType = (offset) => {\n if (this.videoCodec_ == 'hvc') {\n return (data[offset] >> 1) & 0x3f;\n } else {\n return data[offset] & 0x1f;\n }\n };\n\n const getLastNalu = () => {\n if (nalus.length) {\n return nalus[nalus.length - 1];\n }\n return lastInfo.nalu;\n };\n\n if (numZeros == -1) {\n // special use case where we found 3 or 4-byte start codes exactly at the\n // end of previous PES packet\n lastNaluStart = 0;\n // NALu type is value read from offset 0\n lastNaluType = getNaluType(0);\n numZeros = 0;\n i = 1;\n }\n\n while (i < len) {\n const value = data[i++];\n // Optimization. numZeros 0 and 1 are the predominant case.\n if (!numZeros) {\n numZeros = value ? 0 : 1;\n continue;\n }\n if (numZeros === 1) {\n numZeros = value ? 0 : 2;\n continue;\n }\n if (!value) {\n numZeros = 3;\n } else if (value == 1) {\n const overflow = i - numZeros - 1;\n if (lastNaluStart >= 0) {\n /** @type {shaka.extern.VideoNalu} */\n const nalu = {\n data: data.subarray(lastNaluStart + naluHeaderSize, overflow),\n fullData: data.subarray(lastNaluStart, overflow),\n type: lastNaluType,\n time: time,\n state: null,\n };\n nalus.push(nalu);\n } else {\n const lastNalu = getLastNalu();\n if (lastNalu) {\n if (initialNumZeros && i <= 4 - initialNumZeros) {\n // Start delimiter overlapping between PES packets\n // strip start delimiter bytes from the end of last NAL unit\n // check if lastNalu had a state different from zero\n if (lastNalu.state) {\n // strip last bytes\n lastNalu.data = lastNalu.data.subarray(\n 0, lastNalu.data.byteLength - initialNumZeros);\n lastNalu.fullData = lastNalu.fullData.subarray(\n 0, lastNalu.fullData.byteLength - initialNumZeros);\n }\n }\n // If NAL units are not starting right at the beginning of the PES\n // packet, push preceding data into previous NAL unit.\n if (overflow > 0) {\n const prevData = data.subarray(0, overflow);\n lastNalu.data = shaka.util.Uint8ArrayUtils.concat(\n lastNalu.data, prevData);\n lastNalu.fullData = shaka.util.Uint8ArrayUtils.concat(\n lastNalu.fullData, prevData);\n lastNalu.state = 0;\n }\n }\n }\n\n // Check if we can read unit type\n if (i < len) {\n lastNaluType = getNaluType(i);\n lastNaluStart = i;\n numZeros = 0;\n } else {\n // Not enough byte to read unit type.\n // Let's read it on next PES parsing.\n numZeros = -1;\n }\n } else {\n numZeros = 0;\n }\n }\n\n if (lastNaluStart >= 0 && numZeros >= 0) {\n const nalu = {\n data: data.subarray(lastNaluStart + naluHeaderSize, len),\n fullData: data.subarray(lastNaluStart, len),\n type: lastNaluType,\n time: time,\n state: numZeros,\n };\n nalus.push(nalu);\n }\n if (!nalus.length && lastInfo.nalu) {\n const lastNalu = getLastNalu();\n if (lastNalu) {\n lastNalu.data = shaka.util.Uint8ArrayUtils.concat(\n lastNalu.data, data);\n lastNalu.fullData = shaka.util.Uint8ArrayUtils.concat(\n lastNalu.fullData, data);\n }\n }\n lastInfo.state = numZeros;\n return nalus;\n }\n\n /**\n * Return the ID3 metadata\n *\n * @return {!Array.}\n * @export\n */\n getMetadata() {\n const timescale = shaka.util.TsParser.Timescale;\n const metadata = [];\n for (const id3DataArray of this.id3Data_) {\n const id3Data = shaka.util.Uint8ArrayUtils.concat(...id3DataArray);\n const pes = this.parsePES_(id3Data);\n if (pes) {\n metadata.push({\n cueTime: pes.pts ? pes.pts / timescale : null,\n data: pes.data,\n frames: shaka.util.Id3Utils.getID3Frames(pes.data),\n dts: pes.dts,\n pts: pes.pts,\n });\n }\n }\n return metadata;\n }\n\n /**\n * Return the audio data\n *\n * @return {!Array.}\n * @export\n */\n getAudioData() {\n if (this.audioData_.length && !this.audioPes_.length) {\n let sort = false;\n for (const audioDataArray of this.audioData_) {\n const audioData = shaka.util.Uint8ArrayUtils.concat(...audioDataArray);\n const pes = this.parsePES_(audioData);\n let previousPes = this.audioPes_.length ?\n this.audioPes_[this.audioPes_.length - 1] : null;\n if (pes && pes.pts != null && pes.dts != null && (!previousPes ||\n (previousPes.pts != pes.pts && previousPes.dts != pes.dts))) {\n if (this.audioPes_.length && pes.dts < (previousPes.dts || 0)) {\n sort = true;\n }\n this.audioPes_.push(pes);\n } else if (this.audioPes_.length) {\n const data = pes ? pes.data : audioData;\n if (!data) {\n continue;\n }\n previousPes = this.audioPes_.pop();\n previousPes.data =\n shaka.util.Uint8ArrayUtils.concat(previousPes.data, data);\n this.audioPes_.push(previousPes);\n }\n }\n if (sort) {\n this.audioPes_ = this.audioPes_.sort((a, b) => {\n const deltadts = (a.dts || 0) - (b.dts || 0);\n const deltapts = (a.pts || 0) - (b.pts || 0);\n return deltadts || deltapts;\n });\n }\n }\n return this.audioPes_;\n }\n\n /**\n * Return the video data\n *\n * @param {boolean=} naluProcessing\n * @return {!Array.}\n * @export\n */\n getVideoData(naluProcessing = true) {\n if (this.videoData_.length && !this.videoPes_.length) {\n let sort = false;\n for (const videoDataArray of this.videoData_) {\n const videoData = shaka.util.Uint8ArrayUtils.concat(...videoDataArray);\n const pes = this.parsePES_(videoData);\n let previousPes = this.videoPes_.length ?\n this.videoPes_[this.videoPes_.length - 1] : null;\n if (pes && pes.pts != null && pes.dts != null && (!previousPes ||\n (previousPes.pts != pes.pts && previousPes.dts != pes.dts))) {\n if (this.videoPes_.length && pes.dts < (previousPes.dts || 0)) {\n sort = true;\n }\n this.videoPes_.push(pes);\n } else if (this.videoPes_.length) {\n const data = pes ? pes.data : videoData;\n if (!data) {\n continue;\n }\n previousPes = this.videoPes_.pop();\n previousPes.data =\n shaka.util.Uint8ArrayUtils.concat(previousPes.data, data);\n this.videoPes_.push(previousPes);\n }\n }\n if (naluProcessing) {\n const lastInfo = {\n nalu: null,\n state: null,\n };\n const pesWithLength = [];\n for (const pes of this.videoPes_) {\n pes.nalus = this.parseNalus(pes, lastInfo);\n if (pes.nalus.length) {\n pesWithLength.push(pes);\n lastInfo.nalu = pes.nalus[pes.nalus.length - 1];\n }\n }\n this.videoPes_ = pesWithLength;\n }\n if (sort) {\n this.videoPes_ = this.videoPes_.sort((a, b) => {\n const deltadts = (a.dts || 0) - (b.dts || 0);\n const deltapts = (a.pts || 0) - (b.pts || 0);\n return deltadts || deltapts;\n });\n }\n }\n if (!naluProcessing) {\n const prevVideoPes = this.videoPes_;\n this.videoPes_ = [];\n return prevVideoPes;\n }\n return this.videoPes_;\n }\n\n /**\n * Return the start time for the audio and video\n *\n * @param {string} contentType\n * @return {?number}\n * @export\n */\n getStartTime(contentType) {\n const timescale = shaka.util.TsParser.Timescale;\n if (contentType == 'audio') {\n let audioStartTime = null;\n const audioData = this.getAudioData();\n if (audioData.length) {\n const pes = audioData[0];\n audioStartTime = Math.min(pes.dts, pes.pts) / timescale;\n }\n return audioStartTime;\n } else if (contentType == 'video') {\n let videoStartTime = null;\n const videoData = this.getVideoData(/* naluProcessing= */ false);\n if (videoData.length) {\n const pes = videoData[0];\n videoStartTime = Math.min(pes.dts, pes.pts) / timescale;\n }\n return videoStartTime;\n }\n return null;\n }\n\n /**\n * Return the audio and video codecs\n *\n * @return {{audio: ?string, video: ?string}}\n * @export\n */\n getCodecs() {\n return {\n audio: this.audioCodec_,\n video: this.videoCodec_,\n };\n }\n\n /**\n * Return the video data\n *\n * @return {!Array.}\n * @export\n */\n getVideoNalus() {\n const nalus = [];\n for (const pes of this.getVideoData()) {\n nalus.push(...pes.nalus);\n }\n return nalus;\n }\n\n /**\n * Return the video resolution\n *\n * @return {{height: ?string, width: ?string}}\n * @export\n */\n getVideoResolution() {\n shaka.Deprecate.deprecateFeature(5,\n 'TsParser.getVideoResolution',\n 'Please use getVideoInfo function instead.');\n const videoInfo = this.getVideoInfo();\n return {\n height: videoInfo.height,\n width: videoInfo.width,\n };\n }\n\n /**\n * Return the video information\n *\n * @return {{height: ?string, width: ?string, codec: ?string,\n * frameRate: ?string}}\n * @export\n */\n getVideoInfo() {\n if (this.videoCodec_ == 'hvc') {\n return this.getHvcInfo_();\n }\n return this.getAvcInfo_();\n }\n\n /**\n * @return {?string}\n * @private\n */\n getFrameRate_() {\n const timescale = shaka.util.TsParser.Timescale;\n const videoData = this.getVideoData();\n if (videoData.length > 1) {\n const firstPts = videoData[0].pts;\n goog.asserts.assert(typeof(firstPts) == 'number',\n 'Should be an number!');\n const secondPts = videoData[1].pts;\n goog.asserts.assert(typeof(secondPts) == 'number',\n 'Should be an number!');\n if (!isNaN(secondPts - firstPts)) {\n return String(1 / (secondPts - firstPts) * timescale);\n }\n }\n return null;\n }\n\n /**\n * Return the video information for AVC\n *\n * @return {{height: ?string, width: ?string, codec: ?string,\n * frameRate: ?string}}\n * @private\n */\n getAvcInfo_() {\n const TsParser = shaka.util.TsParser;\n const videoInfo = {\n height: null,\n width: null,\n codec: null,\n frameRate: null,\n };\n const videoNalus = this.getVideoNalus();\n if (!videoNalus.length) {\n return videoInfo;\n }\n const spsNalu = videoNalus.find((nalu) => {\n return nalu.type == TsParser.H264_NALU_TYPE_SPS_;\n });\n if (!spsNalu) {\n return videoInfo;\n }\n\n const expGolombDecoder = new shaka.util.ExpGolomb(spsNalu.data);\n // profile_idc\n const profileIdc = expGolombDecoder.readUnsignedByte();\n // constraint_set[0-5]_flag\n const profileCompatibility = expGolombDecoder.readUnsignedByte();\n // level_idc u(8)\n const levelIdc = expGolombDecoder.readUnsignedByte();\n // seq_parameter_set_id\n expGolombDecoder.skipExpGolomb();\n\n // some profiles have more optional data we don't need\n if (TsParser.PROFILES_WITH_OPTIONAL_SPS_DATA_.includes(profileIdc)) {\n const chromaFormatIdc = expGolombDecoder.readUnsignedExpGolomb();\n if (chromaFormatIdc === 3) {\n // separate_colour_plane_flag\n expGolombDecoder.skipBits(1);\n }\n // bit_depth_luma_minus8\n expGolombDecoder.skipExpGolomb();\n // bit_depth_chroma_minus8\n expGolombDecoder.skipExpGolomb();\n // qpprime_y_zero_transform_bypass_flag\n expGolombDecoder.skipBits(1);\n // seq_scaling_matrix_present_flag\n if (expGolombDecoder.readBoolean()) {\n const scalingListCount = (chromaFormatIdc !== 3) ? 8 : 12;\n for (let i = 0; i < scalingListCount; i++) {\n // seq_scaling_list_present_flag[ i ]\n if (expGolombDecoder.readBoolean()) {\n if (i < 6) {\n expGolombDecoder.skipScalingList(16);\n } else {\n expGolombDecoder.skipScalingList(64);\n }\n }\n }\n }\n }\n\n // log2_max_frame_num_minus4\n expGolombDecoder.skipExpGolomb();\n const picOrderCntType = expGolombDecoder.readUnsignedExpGolomb();\n\n if (picOrderCntType === 0) {\n // log2_max_pic_order_cnt_lsb_minus4\n expGolombDecoder.readUnsignedExpGolomb();\n } else if (picOrderCntType === 1) {\n // delta_pic_order_always_zero_flag\n expGolombDecoder.skipBits(1);\n // offset_for_non_ref_pic\n expGolombDecoder.skipExpGolomb();\n // offset_for_top_to_bottom_field\n expGolombDecoder.skipExpGolomb();\n const numRefFramesInPicOrderCntCycle =\n expGolombDecoder.readUnsignedExpGolomb();\n for (let i = 0; i < numRefFramesInPicOrderCntCycle; i++) {\n // offset_for_ref_frame[ i ]\n expGolombDecoder.skipExpGolomb();\n }\n }\n\n // max_num_ref_frames\n expGolombDecoder.skipExpGolomb();\n // gaps_in_frame_num_value_allowed_flag\n expGolombDecoder.skipBits(1);\n\n const picWidthInMbsMinus1 =\n expGolombDecoder.readUnsignedExpGolomb();\n const picHeightInMapUnitsMinus1 =\n expGolombDecoder.readUnsignedExpGolomb();\n\n const frameMbsOnlyFlag = expGolombDecoder.readBits(1);\n if (frameMbsOnlyFlag === 0) {\n // mb_adaptive_frame_field_flag\n expGolombDecoder.skipBits(1);\n }\n // direct_8x8_inference_flag\n expGolombDecoder.skipBits(1);\n\n let frameCropLeftOffset = 0;\n let frameCropRightOffset = 0;\n let frameCropTopOffset = 0;\n let frameCropBottomOffset = 0;\n\n // frame_cropping_flag\n if (expGolombDecoder.readBoolean()) {\n frameCropLeftOffset = expGolombDecoder.readUnsignedExpGolomb();\n frameCropRightOffset = expGolombDecoder.readUnsignedExpGolomb();\n frameCropTopOffset = expGolombDecoder.readUnsignedExpGolomb();\n frameCropBottomOffset = expGolombDecoder.readUnsignedExpGolomb();\n }\n\n videoInfo.height = String(((2 - frameMbsOnlyFlag) *\n (picHeightInMapUnitsMinus1 + 1) * 16) - (frameCropTopOffset * 2) -\n (frameCropBottomOffset * 2));\n videoInfo.width = String(((picWidthInMbsMinus1 + 1) * 16) -\n frameCropLeftOffset * 2 - frameCropRightOffset * 2);\n videoInfo.codec = 'avc1.' + this.byteToHex_(profileIdc) +\n this.byteToHex_(profileCompatibility) + this.byteToHex_(levelIdc);\n videoInfo.frameRate = this.getFrameRate_();\n\n return videoInfo;\n }\n\n /**\n * Return the video information for HVC\n *\n * @return {{height: ?string, width: ?string, codec: ?string,\n * frameRate: ?string}}\n * @private\n */\n getHvcInfo_() {\n const TsParser = shaka.util.TsParser;\n const videoInfo = {\n height: null,\n width: null,\n codec: null,\n frameRate: null,\n };\n const videoNalus = this.getVideoNalus();\n if (!videoNalus.length) {\n return videoInfo;\n }\n const spsNalu = videoNalus.find((nalu) => {\n return nalu.type == TsParser.H265_NALU_TYPE_SPS_;\n });\n if (!spsNalu) {\n return videoInfo;\n }\n\n const gb = new shaka.util.ExpGolomb(\n spsNalu.fullData, /* convertEbsp2rbsp= */ true);\n\n // remove NALu Header\n gb.readUnsignedByte();\n gb.readUnsignedByte();\n\n // SPS\n gb.readBits(4); // video_paramter_set_id\n const maxSubLayersMinus1 = gb.readBits(3);\n gb.readBoolean(); // temporal_id_nesting_flag\n\n // profile_tier_level begin\n const generalProfileSpace = gb.readBits(2);\n const generalTierFlag = gb.readBits(1);\n const generalProfileIdc = gb.readBits(5);\n const generalProfileCompatibilityFlags = gb.readBits(32);\n const generalConstraintIndicatorFlags1 = gb.readUnsignedByte();\n const generalConstraintIndicatorFlags2 = gb.readUnsignedByte();\n const generalConstraintIndicatorFlags3 = gb.readUnsignedByte();\n const generalConstraintIndicatorFlags4 = gb.readUnsignedByte();\n const generalConstraintIndicatorFlags5 = gb.readUnsignedByte();\n const generalConstraintIndicatorFlags6 = gb.readUnsignedByte();\n const generalLevelIdc = gb.readUnsignedByte();\n const subLayerProfilePresentFlag = [];\n const subLayerLevelPresentFlag = [];\n for (let i = 0; i < maxSubLayersMinus1; i++) {\n subLayerProfilePresentFlag.push(gb.readBoolean());\n subLayerLevelPresentFlag.push(gb.readBoolean());\n }\n if (maxSubLayersMinus1 > 0) {\n for (let i = maxSubLayersMinus1; i < 8; i++) {\n gb.readBits(2);\n }\n }\n for (let i = 0; i < maxSubLayersMinus1; i++) {\n if (subLayerProfilePresentFlag[i]) {\n gb.readBits(88);\n }\n if (subLayerLevelPresentFlag[i]) {\n gb.readUnsignedByte();\n }\n }\n // profile_tier_level end\n\n gb.readUnsignedExpGolomb(); // seq_parameter_set_id\n const chromaFormatIdc = gb.readUnsignedExpGolomb();\n if (chromaFormatIdc == 3) {\n gb.readBits(1); // separate_colour_plane_flag\n }\n const picWidthInLumaSamples = gb.readUnsignedExpGolomb();\n const picHeightInLumaSamples = gb.readUnsignedExpGolomb();\n let leftOffset = 0;\n let rightOffset = 0;\n let topOffset = 0;\n let bottomOffset = 0;\n const conformanceWindowFlag = gb.readBoolean();\n if (conformanceWindowFlag) {\n leftOffset += gb.readUnsignedExpGolomb();\n rightOffset += gb.readUnsignedExpGolomb();\n topOffset += gb.readUnsignedExpGolomb();\n bottomOffset += gb.readUnsignedExpGolomb();\n }\n\n const subWc = chromaFormatIdc === 1 || chromaFormatIdc === 2 ? 2 : 1;\n const subHc = chromaFormatIdc === 1 ? 2 : 1;\n videoInfo.width =\n String(picWidthInLumaSamples - (leftOffset + rightOffset) * subWc);\n videoInfo.height =\n String(picHeightInLumaSamples - (topOffset + bottomOffset) * subHc);\n\n const reverseBits = (integer) => {\n let result = 0;\n for (let i = 0; i < 32; i++) {\n result |= ((integer >> i) & 1) << (31 - i);\n }\n return result >>> 0;\n };\n\n const profileSpace = ['', 'A', 'B', 'C'][generalProfileSpace];\n const profileCompatibility = reverseBits(generalProfileCompatibilityFlags);\n const tierFlag = generalTierFlag == 1 ? 'H' : 'L';\n\n let codec = 'hvc1';\n codec += '.' + profileSpace + generalProfileIdc;\n codec += '.' + profileCompatibility.toString(16).toUpperCase();\n codec += '.' + tierFlag + generalLevelIdc;\n if (generalConstraintIndicatorFlags6) {\n codec += '.' +\n generalConstraintIndicatorFlags6.toString(16).toUpperCase();\n }\n if (generalConstraintIndicatorFlags5) {\n codec += '.' +\n generalConstraintIndicatorFlags5.toString(16).toUpperCase();\n }\n if (generalConstraintIndicatorFlags4) {\n codec += '.' +\n generalConstraintIndicatorFlags4.toString(16).toUpperCase();\n }\n if (generalConstraintIndicatorFlags3) {\n codec += '.' +\n generalConstraintIndicatorFlags3.toString(16).toUpperCase();\n }\n if (generalConstraintIndicatorFlags2) {\n codec += '.' +\n generalConstraintIndicatorFlags2.toString(16).toUpperCase();\n }\n if (generalConstraintIndicatorFlags1) {\n codec += '.' +\n generalConstraintIndicatorFlags1.toString(16).toUpperCase();\n }\n videoInfo.codec = codec;\n videoInfo.frameRate = this.getFrameRate_();\n\n return videoInfo;\n }\n\n /**\n * Return the Opus metadata\n *\n * @return {?shaka.util.TsParser.OpusMetadata}\n */\n getOpusMetadata() {\n return this.opusMetadata_;\n }\n\n /**\n * Convert a byte to 2 digits of hex. (Only handles values 0-255.)\n *\n * @param {number} x\n * @return {string}\n * @private\n */\n byteToHex_(x) {\n return ('0' + x.toString(16).toUpperCase()).slice(-2);\n }\n\n /**\n * @param {number} value\n * @param {number} reference\n * @return {number}\n * @private\n */\n handleRollover_(value, reference) {\n const MAX_TS = 8589934592;\n const RO_THRESH = 4294967296;\n\n let direction = 1;\n\n if (value > reference) {\n // If the current timestamp value is greater than our reference timestamp\n // and we detect a timestamp rollover, this means the roll over is\n // happening in the opposite direction.\n // Example scenario: Enter a long stream/video just after a rollover\n // occurred. The reference point will be set to a small number, e.g. 1.\n // The user then seeks backwards over the rollover point. In loading this\n // segment, the timestamp values will be very large, e.g. 2^33 - 1. Since\n // this comes before the data we loaded previously, we want to adjust the\n // time stamp to be `value - 2^33`.\n direction = -1;\n }\n\n // Note: A seek forwards or back that is greater than the RO_THRESH\n // (2^32, ~13 hours) will cause an incorrect adjustment.\n while (Math.abs(reference - value) > RO_THRESH) {\n value += (direction * MAX_TS);\n }\n\n return value;\n }\n\n /**\n * Check if the passed data corresponds to an MPEG2-TS\n *\n * @param {Uint8Array} data\n * @return {boolean}\n * @export\n */\n static probe(data) {\n const syncOffset = shaka.util.TsParser.syncOffset(data);\n if (syncOffset < 0) {\n return false;\n } else {\n if (syncOffset > 0) {\n shaka.log.warning('MPEG2-TS detected but first sync word found @ ' +\n 'offset ' + syncOffset + ', junk ahead ?');\n }\n return true;\n }\n }\n\n /**\n * Returns the synchronization offset\n *\n * @param {Uint8Array} data\n * @return {number}\n * @export\n */\n static syncOffset(data) {\n const packetLength = shaka.util.TsParser.PacketLength_;\n // scan 1000 first bytes\n const scanwindow = Math.min(1000, data.length - 3 * packetLength);\n let i = 0;\n while (i < scanwindow) {\n // a TS fragment should contain at least 3 TS packets, a PAT, a PMT, and\n // one PID, each starting with 0x47\n if (data[i] == 0x47 &&\n data[i + packetLength] == 0x47 &&\n data[i + 2 * packetLength] == 0x47) {\n return i;\n } else {\n i++;\n }\n }\n return -1;\n }\n};\n\n\n/**\n * @const {number}\n * @export\n */\nshaka.util.TsParser.Timescale = 90000;\n\n\n/**\n * @const {number}\n * @private\n */\nshaka.util.TsParser.PacketLength_ = 188;\n\n\n/**\n * NALU type for Sequence Parameter Set (SPS) for H.264.\n * @const {number}\n * @private\n */\nshaka.util.TsParser.H264_NALU_TYPE_SPS_ = 0x07;\n\n\n/**\n * NALU type for Sequence Parameter Set (SPS) for H.265.\n * @const {number}\n * @private\n */\nshaka.util.TsParser.H265_NALU_TYPE_SPS_ = 0x21;\n\n\n/**\n * Values of profile_idc that indicate additional fields are included in the\n * SPS.\n * see Recommendation ITU-T H.264 (4/2013)\n * 7.3.2.1.1 Sequence parameter set data syntax\n *\n * @const {!Array.}\n * @private\n */\nshaka.util.TsParser.PROFILES_WITH_OPTIONAL_SPS_DATA_ =\n [100, 110, 122, 244, 44, 83, 86, 118, 128, 138, 139, 134];\n\n\n/**\n * @typedef {{\n * audio: number,\n * video: number,\n * id3: number,\n * audioCodec: string,\n * videoCodec: string\n * }}\n *\n * @summary PMT.\n * @property {number} audio\n * Audio PID\n * @property {number} video\n * Video PID\n * @property {number} id3\n * ID3 PID\n * @property {string} audioCodec\n * Audio codec\n * @property {string} videoCodec\n * Video codec\n */\nshaka.util.TsParser.PMT;\n\n\n/**\n * @typedef {{\n * channelCount: number,\n * channelConfigCode: number,\n * sampleRate: number\n * }}\n *\n * @summary PMT.\n * @property {number} channelCount\n * @property {number} channelConfigCode\n * @property {number} sampleRate\n */\nshaka.util.TsParser.OpusMetadata;\n\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.lcevc.Dec');\ngoog.require('shaka.log');\ngoog.require('shaka.Deprecate');\ngoog.require('shaka.util.IReleasable');\n\n/**\n * @summary\n * lcevcDec - (MPEG-5 Part 2 LCEVC - Decoder) provides\n * all the operations related to the enhancement and rendering\n * of LCEVC enabled streams and on to a canvas.\n * @implements {shaka.util.IReleasable}\n * @export\n */\nshaka.lcevc.Dec = class {\n /**\n * @param {HTMLVideoElement} media The video element that will be attached to\n * LCEVC Decoder for input.\n * @param {HTMLCanvasElement} canvas The canvas element that will be attached\n * to LCEVC Decoder to render the enhanced frames.\n * @param {shaka.extern.LcevcConfiguration} lcevcConfig LCEVC configuration\n * object to initialize the LCEVC Decoder.\n */\n constructor(media, canvas, lcevcConfig) {\n /**\n * LCEVC Decoder library based on availability, to check if either\n * lcevc_dil or lcevc_dec is present.\n * @private {LCEVCmodule}\n */\n this.lcevcLib_;\n\n /** @private {?LCEVCdec.LCEVCdec} */\n this.dec_ = null;\n\n /** @private {number} */\n this.variantId_ = -1;\n\n /** @private {HTMLVideoElement} */\n this.media_ = media;\n\n /** @private {HTMLCanvasElement} */\n this.canvas_ = canvas;\n\n /** @private {shaka.extern.LcevcConfiguration} */\n this.decConfig_ = lcevcConfig;\n\n /** @private {boolean} */\n this.toBeDeprecated_ = false;\n\n this.create_();\n }\n\n /**\n * Append data to the LCEVC Dec.\n * @param {BufferSource} data\n * @param {number} timestampOffset\n */\n appendBuffer(data, timestampOffset) {\n if (this.dec_) {\n // Timestamp offset describes how much offset should be applied to the\n // LCEVC enhancement to match the decoded video frame, as such it needs\n // to be negated.\n this.dec_.appendBuffer(data, 'video', this.variantId_, -timestampOffset);\n }\n }\n\n /**\n * Hide the canvas specifically in the case of a DRM Content\n */\n hideCanvas() {\n if (this.dec_) {\n this.canvas_.classList.add('shaka-hidden');\n }\n }\n\n /**\n * Create LCEVC Decoder.\n * @private\n */\n create_() {\n if (this.isSupported_() && !this.dec_) {\n if (this.lcevcLib_.SupportObject.webGLSupport(this.canvas_)) {\n // Make sure the canvas is not hidden from a previous playback session.\n this.canvas_.classList.remove('shaka-hidden');\n // Initiate LCEVC Dec Library based on the type of module available.\n if (this.toBeDeprecated_) {\n this.dec_ = new this.lcevcLib_.LcevcDil(\n this.media_,\n this.canvas_,\n this.decConfig_);\n } else {\n this.dec_ = new this.lcevcLib_.LCEVCdec(\n this.media_,\n this.canvas_,\n this.decConfig_);\n }\n }\n }\n }\n\n /**\n * Close LCEVC Decoder.\n * @override\n * @export\n */\n release() {\n if (this.dec_) {\n this.dec_.close();\n this.dec_ = null;\n }\n }\n\n /**\n * Check if the LCEVC Decoder lib is present and is supported by the browser.\n * @return {boolean}\n * @private\n */\n isSupported_() {\n if (typeof libDPIModule === 'undefined') {\n shaka.log.alwaysWarn(\n 'Could not find LCEVC Library dependencies on this page');\n }\n\n // This is a check to make the LCEVC Dec Integration is backwards compatible\n // with previous Integration. This logic checks for both implementations\n // and uses the one available.\n if (typeof LCEVCdec !== 'undefined') {\n this.lcevcLib_ = LCEVCdec;\n } else {\n if (typeof LcevcDil !== 'undefined') {\n this.lcevcLib_ = LcevcDil;\n this.toBeDeprecated_ = true;\n shaka.Deprecate.deprecateFeature(5,\n 'LcevcDil',\n 'lcevc_dil.js is deprecated, please use lcevc_dec.js instead');\n } else {\n shaka.log.alwaysWarn('Could not find LCEVC Library on this page');\n return false;\n }\n }\n\n // Making Sure if there is a valid LCEVC Dec Library exists.\n if (typeof this.lcevcLib_.SupportObject === 'undefined') {\n shaka.log.alwaysWarn('Could not find LCEVC Library on this page');\n return false;\n } else {\n if (!this.lcevcLib_.SupportObject.SupportStatus) {\n shaka.log.alwaysWarn(this.lcevcLib_.SupportObject.SupportError);\n }\n }\n\n return typeof this.lcevcLib_ !== 'undefined' &&\n typeof libDPIModule !== 'undefined' &&\n this.canvas_ instanceof HTMLCanvasElement &&\n this.lcevcLib_.SupportObject.SupportStatus;\n }\n\n /**\n * Update current active variant\n * @param {shaka.extern.Track} track\n */\n updateVariant(track, manifestType) {\n let containerFormat = shaka.lcevc.Dec.ContainerFormat.MPEG2_TS;\n let streamingFormat = shaka.lcevc.Dec.StreamingFormat.OTHER;\n switch (track.mimeType) {\n case 'video/webm': {\n containerFormat = shaka.lcevc.Dec.ContainerFormat.WEBM;\n break;\n }\n case 'video/mp4': {\n containerFormat = shaka.lcevc.Dec.ContainerFormat.MP4;\n break;\n }\n }\n switch (manifestType) {\n case 'DASH': {\n streamingFormat = shaka.lcevc.Dec.StreamingFormat.DASH;\n break;\n }\n case 'HLS': {\n streamingFormat = shaka.lcevc.Dec.StreamingFormat.HLS;\n break;\n }\n }\n if (this.dec_) {\n this.variantId_ = track.id;\n this.dec_.setLevelSwitching(track.id, true);\n this.dec_.setContainerFormat(containerFormat);\n // This functionality is only available on the LCEVC Dec Library.\n if (!this.toBeDeprecated_) {\n this.dec_.setStreamingFormat(streamingFormat);\n }\n }\n }\n};\n\n/**\n * Container Formats.\n * @const @enum {number}\n */\nshaka.lcevc.Dec.ContainerFormat = {\n MPEG2_TS: 0,\n WEBM: 1,\n MP4: 2,\n};\n\n/**\n * Streaming Formats.\n * @const @enum {number}\n */\nshaka.lcevc.Dec.StreamingFormat = {\n HLS: 0,\n DASH: 1,\n OTHER: -1,\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.MediaSourceEngine');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.config.CodecSwitchingStrategy');\ngoog.require('shaka.media.Capabilities');\ngoog.require('shaka.media.ContentWorkarounds');\ngoog.require('shaka.media.ClosedCaptionParser');\ngoog.require('shaka.media.IClosedCaptionParser');\ngoog.require('shaka.media.ManifestParser');\ngoog.require('shaka.media.SegmentReference');\ngoog.require('shaka.media.TimeRangesUtils');\ngoog.require('shaka.text.TextEngine');\ngoog.require('shaka.transmuxer.TransmuxerEngine');\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.Destroyer');\ngoog.require('shaka.util.Dom');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.Functional');\ngoog.require('shaka.util.IDestroyable');\ngoog.require('shaka.util.Id3Utils');\ngoog.require('shaka.util.ManifestParserUtils');\ngoog.require('shaka.util.MimeUtils');\ngoog.require('shaka.util.Mp4BoxParsers');\ngoog.require('shaka.util.Mp4Parser');\ngoog.require('shaka.util.Platform');\ngoog.require('shaka.util.PublicPromise');\ngoog.require('shaka.util.StreamUtils');\ngoog.require('shaka.util.TsParser');\ngoog.require('shaka.lcevc.Dec');\n\n\n/**\n * @summary\n * MediaSourceEngine wraps all operations on MediaSource and SourceBuffers.\n * All asynchronous operations return a Promise, and all operations are\n * internally synchronized and serialized as needed. Operations that can\n * be done in parallel will be done in parallel.\n *\n * @implements {shaka.util.IDestroyable}\n */\nshaka.media.MediaSourceEngine = class {\n /**\n * @param {HTMLMediaElement} video The video element, whose source is tied to\n * MediaSource during the lifetime of the MediaSourceEngine.\n * @param {!shaka.extern.TextDisplayer} textDisplayer\n * The text displayer that will be used with the text engine.\n * MediaSourceEngine takes ownership of the displayer. When\n * MediaSourceEngine is destroyed, it will destroy the displayer.\n * @param {!shaka.media.MediaSourceEngine.PlayerInterface} playerInterface\n * Interface for common player methods.\n * @param {?shaka.lcevc.Dec} [lcevcDec] Optional - LCEVC Decoder Object\n */\n constructor(video, textDisplayer, playerInterface, lcevcDec) {\n /** @private {HTMLMediaElement} */\n this.video_ = video;\n\n /** @private {?shaka.media.MediaSourceEngine.PlayerInterface} */\n this.playerInterface_ = playerInterface;\n\n /** @private {?shaka.extern.MediaSourceConfiguration} */\n this.config_ = null;\n\n /** @private {shaka.extern.TextDisplayer} */\n this.textDisplayer_ = textDisplayer;\n\n /** @private {!Object.} */\n this.sourceBuffers_ = {};\n\n /** @private {!Object.} */\n this.sourceBufferTypes_ = {};\n\n\n /** @private {!Object.} */\n this.expectedEncryption_ = {};\n\n /** @private {shaka.text.TextEngine} */\n this.textEngine_ = null;\n\n /** @private {boolean} */\n this.segmentRelativeVttTiming_ = false;\n\n /** @private {?shaka.lcevc.Dec} */\n this.lcevcDec_ = lcevcDec || null;\n\n /**\n * @private {!Object.>}\n */\n this.queues_ = {};\n\n /** @private {shaka.util.EventManager} */\n this.eventManager_ = new shaka.util.EventManager();\n\n /** @private {!Object.} */\n this.transmuxers_ = {};\n\n /** @private {?shaka.media.IClosedCaptionParser} */\n this.captionParser_ = null;\n\n /** @private {!shaka.util.PublicPromise} */\n this.mediaSourceOpen_ = new shaka.util.PublicPromise();\n\n /** @private {string} */\n this.url_ = '';\n\n /** @private {boolean} */\n this.playbackHasBegun_ = false;\n\n /** @private {boolean} */\n this.streamingAllowed_ = true;\n\n /** @private {boolean} */\n this.usingRemotePlayback_ = false;\n\n /** @private {HTMLSourceElement} */\n this.source_ = null;\n\n /**\n * Fallback source element with direct media URI, used for casting\n * purposes.\n * @private {HTMLSourceElement}\n */\n this.secondarySource_ = null;\n\n /** @private {MediaSource} */\n this.mediaSource_ = this.createMediaSource(this.mediaSourceOpen_);\n\n /** @private {boolean} */\n this.reloadingMediaSource_ = false;\n\n /** @type {!shaka.util.Destroyer} */\n this.destroyer_ = new shaka.util.Destroyer(() => this.doDestroy_());\n\n /** @private {boolean} */\n this.sequenceMode_ = false;\n\n /** @private {string} */\n this.manifestType_ = shaka.media.ManifestParser.UNKNOWN;\n\n /** @private {boolean} */\n this.ignoreManifestTimestampsInSegmentsMode_ = false;\n\n /** @private {boolean} */\n this.attemptTimestampOffsetCalculation_ = false;\n\n /** @private {!shaka.util.PublicPromise.} */\n this.textSequenceModeOffset_ = new shaka.util.PublicPromise();\n\n /** @private {boolean} */\n this.needSplitMuxedContent_ = false;\n\n /** @private {?number} */\n this.lastDuration_ = null;\n\n /** @private {!Object.} */\n this.tsParsers_ = {};\n\n /** @private {?number} */\n this.firstVideoTimestamp_ = null;\n\n /** @private {?number} */\n this.firstVideoReferenceStartTime_ = null;\n\n /** @private {?number} */\n this.firstAudioTimestamp_ = null;\n\n /** @private {?number} */\n this.firstAudioReferenceStartTime_ = null;\n\n /** @private {!shaka.util.PublicPromise.} */\n this.audioCompensation_ = new shaka.util.PublicPromise();\n\n if (this.video_.remote) {\n this.usingRemotePlayback_ = this.video_.remote.state != 'disconnected';\n\n this.eventManager_.listen(this.video_.remote, 'connect', () => {\n this.usingRemotePlayback_ = this.video_.remote.state != 'disconnected';\n });\n\n this.eventManager_.listen(this.video_.remote, 'connecting', () => {\n this.usingRemotePlayback_ = this.video_.remote.state != 'disconnected';\n });\n\n this.eventManager_.listen(this.video_.remote, 'disconnect', () => {\n this.usingRemotePlayback_ = this.video_.remote.state != 'disconnected';\n });\n }\n }\n\n /**\n * Create a MediaSource object, attach it to the video element, and return it.\n * Resolves the given promise when the MediaSource is ready.\n *\n * Replaced by unit tests.\n *\n * @param {!shaka.util.PublicPromise} p\n * @return {!MediaSource}\n */\n createMediaSource(p) {\n this.streamingAllowed_ = true;\n\n /** @type {!MediaSource} */\n let mediaSource;\n\n if (window.ManagedMediaSource) {\n if (!this.secondarySource_) {\n this.video_.disableRemotePlayback = true;\n }\n\n mediaSource = new ManagedMediaSource();\n\n this.eventManager_.listen(\n mediaSource, 'startstreaming', () => {\n shaka.log.info('MMS startstreaming');\n this.streamingAllowed_ = true;\n });\n\n this.eventManager_.listen(\n mediaSource, 'endstreaming', () => {\n shaka.log.info('MMS endstreaming');\n this.streamingAllowed_ = false;\n });\n } else {\n mediaSource = new MediaSource();\n }\n\n // Set up MediaSource on the video element.\n this.eventManager_.listenOnce(\n mediaSource, 'sourceopen', () => this.onSourceOpen_(p));\n\n // Correctly set when playback has begun.\n this.eventManager_.listenOnce(this.video_, 'playing', () => {\n this.playbackHasBegun_ = true;\n });\n\n // Store the object URL for releasing it later.\n this.url_ = shaka.media.MediaSourceEngine.createObjectURL(mediaSource);\n\n this.video_.removeAttribute('src');\n if (this.source_) {\n this.video_.removeChild(this.source_);\n }\n if (this.secondarySource_) {\n this.video_.removeChild(this.secondarySource_);\n }\n this.source_ = shaka.util.Dom.createSourceElement(this.url_);\n this.video_.appendChild(this.source_);\n if (this.secondarySource_) {\n this.video_.appendChild(this.secondarySource_);\n }\n this.video_.load();\n\n return mediaSource;\n }\n\n /**\n * @param {string} uri\n * @param {string} mimeType\n */\n addSecondarySource(uri, mimeType) {\n if (!this.video_ || !window.ManagedMediaSource || !this.mediaSource_) {\n shaka.log.warning(\n 'Secondary source is used only with ManagedMediaSource');\n return;\n }\n if (this.secondarySource_) {\n this.video_.removeChild(this.secondarySource_);\n }\n this.secondarySource_ = shaka.util.Dom.createSourceElement(uri, mimeType);\n this.video_.appendChild(this.secondarySource_);\n this.video_.disableRemotePlayback = false;\n }\n\n /**\n * @param {shaka.util.PublicPromise} p\n * @private\n */\n onSourceOpen_(p) {\n goog.asserts.assert(this.url_, 'Must have object URL');\n\n // Release the object URL that was previously created, to prevent memory\n // leak.\n // createObjectURL creates a strong reference to the MediaSource object\n // inside the browser. Setting the src of the video then creates another\n // reference within the video element. revokeObjectURL will remove the\n // strong reference to the MediaSource object, and allow it to be\n // garbage-collected later.\n URL.revokeObjectURL(this.url_);\n p.resolve();\n }\n\n /**\n * Checks if a certain type is supported.\n *\n * @param {shaka.extern.Stream} stream\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @return {!Promise.}\n */\n static async isStreamSupported(stream, contentType) {\n if (stream.createSegmentIndex) {\n await stream.createSegmentIndex();\n }\n if (!stream.segmentIndex) {\n return false;\n }\n if (stream.segmentIndex.isEmpty()) {\n return true;\n }\n const MimeUtils = shaka.util.MimeUtils;\n const TransmuxerEngine = shaka.transmuxer.TransmuxerEngine;\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const StreamUtils = shaka.util.StreamUtils;\n const seenCombos = new Set();\n // Check each combination of mimeType and codecs within the segment index.\n // Unfortunately we cannot use fullMimeTypes, as we ALSO need to check the\n // getFullTypeWithAllCodecs (for the sake of the transmuxer) and we have no\n // way of going from a full mimeType to a full mimeType with all codecs.\n // As this function is only called in debug mode, a little inefficiency is\n // acceptable.\n for (const ref of stream.segmentIndex) {\n const mimeType = ref.mimeType || stream.mimeType || '';\n let codecs = ref.codecs || stream.codecs || '';\n // Optimization for the case where the codecs and mimetype of the stream\n // match the reference.\n if (mimeType == stream.mimeType && codecs == stream.codecs) {\n continue;\n }\n // Don't check the same combination of mimetype + codecs twice.\n const combo = mimeType + ':' + codecs;\n if (seenCombos.has(combo)) {\n continue;\n }\n seenCombos.add(combo);\n if (contentType == ContentType.TEXT) {\n const fullMimeType = MimeUtils.getFullType(mimeType, codecs);\n if (!shaka.text.TextEngine.isTypeSupported(fullMimeType)) {\n return false;\n }\n } else {\n if (contentType == ContentType.VIDEO) {\n codecs = StreamUtils.getCorrectVideoCodecs(codecs);\n } else if (contentType == ContentType.AUDIO) {\n codecs = StreamUtils.getCorrectAudioCodecs(codecs, mimeType);\n }\n const extendedMimeType = MimeUtils.getExtendedType(\n stream, mimeType, codecs);\n const fullMimeType = MimeUtils.getFullTypeWithAllCodecs(\n mimeType, codecs);\n if (!shaka.media.Capabilities.isTypeSupported(extendedMimeType) &&\n !TransmuxerEngine.isSupported(fullMimeType, stream.type)) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * Returns a map of MediaSource support for well-known types.\n *\n * @return {!Object.}\n */\n static probeSupport() {\n const testMimeTypes = [\n // MP4 types\n 'video/mp4; codecs=\"avc1.42E01E\"',\n 'video/mp4; codecs=\"avc3.42E01E\"',\n 'video/mp4; codecs=\"hev1.1.6.L93.90\"',\n 'video/mp4; codecs=\"hvc1.1.6.L93.90\"',\n 'video/mp4; codecs=\"hev1.2.4.L153.B0\"; eotf=\"smpte2084\"', // HDR HEVC\n 'video/mp4; codecs=\"hvc1.2.4.L153.B0\"; eotf=\"smpte2084\"', // HDR HEVC\n 'video/mp4; codecs=\"vp9\"',\n 'video/mp4; codecs=\"vp09.00.10.08\"',\n 'video/mp4; codecs=\"av01.0.01M.08\"',\n 'video/mp4; codecs=\"dvh1.05.01\"',\n 'video/mp4; codecs=\"dvh1.20.01\"',\n 'audio/mp4; codecs=\"mp4a.40.2\"',\n 'audio/mp4; codecs=\"ac-3\"',\n 'audio/mp4; codecs=\"ec-3\"',\n 'audio/mp4; codecs=\"ac-4.02.01.01\"',\n 'audio/mp4; codecs=\"opus\"',\n 'audio/mp4; codecs=\"flac\"',\n 'audio/mp4; codecs=\"dtsc\"', // DTS Digital Surround\n 'audio/mp4; codecs=\"dtse\"', // DTS Express\n 'audio/mp4; codecs=\"dtsx\"', // DTS:X\n // WebM types\n 'video/webm; codecs=\"vp8\"',\n 'video/webm; codecs=\"vp9\"',\n 'video/webm; codecs=\"vp09.00.10.08\"',\n 'audio/webm; codecs=\"vorbis\"',\n 'audio/webm; codecs=\"opus\"',\n // MPEG2 TS types (video/ is also used for audio: https://bit.ly/TsMse)\n 'video/mp2t; codecs=\"avc1.42E01E\"',\n 'video/mp2t; codecs=\"avc3.42E01E\"',\n 'video/mp2t; codecs=\"hvc1.1.6.L93.90\"',\n 'video/mp2t; codecs=\"mp4a.40.2\"',\n 'video/mp2t; codecs=\"ac-3\"',\n 'video/mp2t; codecs=\"ec-3\"',\n // WebVTT types\n 'text/vtt',\n 'application/mp4; codecs=\"wvtt\"',\n // TTML types\n 'application/ttml+xml',\n 'application/mp4; codecs=\"stpp\"',\n // Containerless types\n ...shaka.util.MimeUtils.RAW_FORMATS,\n ];\n\n const support = {};\n for (const type of testMimeTypes) {\n if (shaka.text.TextEngine.isTypeSupported(type)) {\n support[type] = true;\n } else if (shaka.util.Platform.supportsMediaSource()) {\n support[type] = shaka.media.Capabilities.isTypeSupported(type) ||\n shaka.transmuxer.TransmuxerEngine.isSupported(type);\n } else {\n support[type] = shaka.util.Platform.supportsMediaType(type);\n }\n\n const basicType = type.split(';')[0];\n support[basicType] = support[basicType] || support[type];\n }\n\n return support;\n }\n\n /** @override */\n destroy() {\n return this.destroyer_.destroy();\n }\n\n /** @private */\n async doDestroy_() {\n const Functional = shaka.util.Functional;\n\n const cleanup = [];\n\n for (const contentType in this.queues_) {\n // Make a local copy of the queue and the first item.\n const q = this.queues_[contentType];\n const inProgress = q[0];\n\n // Drop everything else out of the original queue.\n this.queues_[contentType] = q.slice(0, 1);\n\n // We will wait for this item to complete/fail.\n if (inProgress) {\n cleanup.push(inProgress.p.catch(Functional.noop));\n }\n\n // The rest will be rejected silently if possible.\n for (const item of q.slice(1)) {\n item.p.reject(shaka.util.Destroyer.destroyedError());\n }\n }\n\n if (this.textEngine_) {\n cleanup.push(this.textEngine_.destroy());\n }\n\n await Promise.all(cleanup);\n\n for (const contentType in this.transmuxers_) {\n this.transmuxers_[contentType].destroy();\n }\n\n if (this.eventManager_) {\n this.eventManager_.release();\n this.eventManager_ = null;\n }\n\n if (this.video_ && this.secondarySource_) {\n this.video_.removeChild(this.secondarySource_);\n }\n if (this.video_ && this.source_) {\n // \"unload\" the video element.\n this.video_.removeChild(this.source_);\n this.video_.load();\n this.video_.disableRemotePlayback = false;\n }\n\n this.video_ = null;\n this.source_ = null;\n this.secondarySource_ = null;\n this.config_ = null;\n this.mediaSource_ = null;\n this.textEngine_ = null;\n this.textDisplayer_ = null;\n this.sourceBuffers_ = {};\n this.transmuxers_ = {};\n this.captionParser_ = null;\n if (goog.DEBUG) {\n for (const contentType in this.queues_) {\n goog.asserts.assert(\n this.queues_[contentType].length == 0,\n contentType + ' queue should be empty after destroy!');\n }\n }\n this.queues_ = {};\n\n // This object is owned by Player\n this.lcevcDec_ = null;\n\n this.tsParsers_ = {};\n this.playerInterface_ = null;\n }\n\n /**\n * @return {!Promise} Resolved when MediaSource is open and attached to the\n * media element. This process is actually initiated by the constructor.\n */\n open() {\n return this.mediaSourceOpen_;\n }\n\n /**\n * Initialize MediaSourceEngine.\n *\n * Note that it is not valid to call this multiple times, except to add or\n * reinitialize text streams.\n *\n * @param {!Map.} streamsByType\n * A map of content types to streams. All streams must be supported\n * according to MediaSourceEngine.isStreamSupported.\n * @param {boolean=} sequenceMode\n * If true, the media segments are appended to the SourceBuffer in strict\n * sequence.\n * @param {string=} manifestType\n * Indicates the type of the manifest.\n * @param {boolean=} ignoreManifestTimestampsInSegmentsMode\n * If true, don't adjust the timestamp offset to account for manifest\n * segment durations being out of sync with segment durations. In other\n * words, assume that there are no gaps in the segments when appending\n * to the SourceBuffer, even if the manifest and segment times disagree.\n * Indicates if the manifest has text streams.\n *\n * @return {!Promise}\n */\n async init(streamsByType, sequenceMode=false,\n manifestType=shaka.media.ManifestParser.UNKNOWN,\n ignoreManifestTimestampsInSegmentsMode=false) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n await this.mediaSourceOpen_;\n if (this.ended() || this.closed()) {\n shaka.log.alwaysError('Expected MediaSource to be open during init(); ' +\n 'reopening the media source.');\n this.mediaSourceOpen_ = new shaka.util.PublicPromise();\n this.mediaSource_ = this.createMediaSource(this.mediaSourceOpen_);\n await this.mediaSourceOpen_;\n }\n\n this.sequenceMode_ = sequenceMode;\n this.manifestType_ = manifestType;\n this.ignoreManifestTimestampsInSegmentsMode_ =\n ignoreManifestTimestampsInSegmentsMode;\n\n this.attemptTimestampOffsetCalculation_ = !this.sequenceMode_ &&\n this.manifestType_ == shaka.media.ManifestParser.HLS &&\n !this.ignoreManifestTimestampsInSegmentsMode_;\n\n this.tsParsers_ = {};\n this.firstVideoTimestamp_ = null;\n this.firstVideoReferenceStartTime_ = null;\n this.firstAudioTimestamp_ = null;\n this.firstAudioReferenceStartTime_ = null;\n this.audioCompensation_ = new shaka.util.PublicPromise();\n\n for (const contentType of streamsByType.keys()) {\n const stream = streamsByType.get(contentType);\n // eslint-disable-next-line no-await-in-loop\n await this.initSourceBuffer_(contentType, stream, stream.codecs);\n if (this.needSplitMuxedContent_) {\n this.queues_[ContentType.AUDIO] = [];\n this.queues_[ContentType.VIDEO] = [];\n } else {\n this.queues_[contentType] = [];\n }\n }\n const audio = streamsByType.get(ContentType.AUDIO);\n if (audio && audio.isAudioMuxedInVideo) {\n this.needSplitMuxedContent_ = true;\n }\n }\n\n /**\n * Initialize a specific SourceBuffer.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {shaka.extern.Stream} stream\n * @param {string} codecs\n * @return {!Promise}\n * @private\n */\n async initSourceBuffer_(contentType, stream, codecs) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n goog.asserts.assert(\n await shaka.media.MediaSourceEngine.isStreamSupported(\n stream, contentType),\n 'Type negotiation should happen before MediaSourceEngine.init!');\n\n let mimeType = shaka.util.MimeUtils.getFullType(\n stream.mimeType, codecs);\n if (contentType == ContentType.TEXT) {\n this.reinitText(mimeType, this.sequenceMode_, stream.external);\n } else {\n let needTransmux = this.config_.forceTransmux;\n if (!shaka.media.Capabilities.isTypeSupported(mimeType) ||\n (!this.sequenceMode_ &&\n shaka.util.MimeUtils.RAW_FORMATS.includes(mimeType))) {\n needTransmux = true;\n }\n const mimeTypeWithAllCodecs =\n shaka.util.MimeUtils.getFullTypeWithAllCodecs(\n stream.mimeType, codecs);\n if (needTransmux) {\n const audioCodec = shaka.util.ManifestParserUtils.guessCodecsSafe(\n ContentType.AUDIO, (codecs || '').split(','));\n const videoCodec = shaka.util.ManifestParserUtils.guessCodecsSafe(\n ContentType.VIDEO, (codecs || '').split(','));\n if (audioCodec && videoCodec) {\n this.needSplitMuxedContent_ = true;\n await this.initSourceBuffer_(ContentType.AUDIO, stream, audioCodec);\n await this.initSourceBuffer_(ContentType.VIDEO, stream, videoCodec);\n return;\n }\n const transmuxerPlugin = shaka.transmuxer.TransmuxerEngine\n .findTransmuxer(mimeTypeWithAllCodecs);\n if (transmuxerPlugin) {\n const transmuxer = transmuxerPlugin();\n this.transmuxers_[contentType] = transmuxer;\n mimeType =\n transmuxer.convertCodecs(contentType, mimeTypeWithAllCodecs);\n }\n }\n const type = this.addExtraFeaturesToMimeType_(mimeType);\n\n this.destroyer_.ensureNotDestroyed();\n\n let sourceBuffer;\n\n try {\n sourceBuffer = this.mediaSource_.addSourceBuffer(type);\n } catch (exception) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.MEDIA_SOURCE_OPERATION_THREW,\n exception,\n 'The mediaSource_ status was ' + this.mediaSource_.readyState +\n ' expected \\'open\\'',\n null);\n }\n\n if (this.sequenceMode_) {\n sourceBuffer.mode =\n shaka.media.MediaSourceEngine.SourceBufferMode_.SEQUENCE;\n }\n\n this.eventManager_.listen(\n sourceBuffer, 'error',\n () => this.onError_(contentType));\n this.eventManager_.listen(\n sourceBuffer, 'updateend',\n () => this.onUpdateEnd_(contentType));\n this.sourceBuffers_[contentType] = sourceBuffer;\n this.sourceBufferTypes_[contentType] = mimeType;\n this.expectedEncryption_[contentType] = !!stream.drmInfos.length;\n }\n }\n\n /**\n * Called by the Player to provide an updated configuration any time it\n * changes. Must be called at least once before init().\n *\n * @param {shaka.extern.MediaSourceConfiguration} config\n */\n configure(config) {\n this.config_ = config;\n if (this.textEngine_) {\n this.textEngine_.setModifyCueCallback(config.modifyCueCallback);\n }\n }\n\n /**\n * Indicate if the streaming is allowed by MediaSourceEngine.\n * If we using MediaSource we allways returns true.\n *\n * @return {boolean}\n */\n isStreamingAllowed() {\n return this.streamingAllowed_ && !this.usingRemotePlayback_ &&\n !this.reloadingMediaSource_;\n }\n\n /**\n * Reinitialize the TextEngine for a new text type.\n * @param {string} mimeType\n * @param {boolean} sequenceMode\n * @param {boolean} external\n */\n reinitText(mimeType, sequenceMode, external) {\n if (!this.textEngine_) {\n this.textEngine_ = new shaka.text.TextEngine(this.textDisplayer_);\n if (this.textEngine_) {\n this.textEngine_.setModifyCueCallback(this.config_.modifyCueCallback);\n }\n }\n this.textEngine_.initParser(mimeType, sequenceMode,\n external || this.segmentRelativeVttTiming_, this.manifestType_);\n }\n\n /**\n * @return {boolean} True if the MediaSource is in an \"ended\" state, or if the\n * object has been destroyed.\n */\n ended() {\n if (this.reloadingMediaSource_) {\n return false;\n }\n return this.mediaSource_ ? this.mediaSource_.readyState == 'ended' : true;\n }\n\n /**\n * @return {boolean} True if the MediaSource is in an \"closed\" state, or if\n * the object has been destroyed.\n */\n closed() {\n if (this.reloadingMediaSource_) {\n return false;\n }\n return this.mediaSource_ ? this.mediaSource_.readyState == 'closed' : true;\n }\n\n /**\n * Gets the first timestamp in buffer for the given content type.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @return {?number} The timestamp in seconds, or null if nothing is buffered.\n */\n bufferStart(contentType) {\n if (!Object.keys(this.sourceBuffers_).length) {\n return null;\n }\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n if (contentType == ContentType.TEXT) {\n return this.textEngine_.bufferStart();\n }\n return shaka.media.TimeRangesUtils.bufferStart(\n this.getBuffered_(contentType));\n }\n\n /**\n * Gets the last timestamp in buffer for the given content type.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @return {?number} The timestamp in seconds, or null if nothing is buffered.\n */\n bufferEnd(contentType) {\n if (!Object.keys(this.sourceBuffers_).length) {\n return null;\n }\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n if (contentType == ContentType.TEXT) {\n return this.textEngine_.bufferEnd();\n }\n return shaka.media.TimeRangesUtils.bufferEnd(\n this.getBuffered_(contentType));\n }\n\n /**\n * Determines if the given time is inside the buffered range of the given\n * content type.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {number} time Playhead time\n * @return {boolean}\n */\n isBuffered(contentType, time) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n if (contentType == ContentType.TEXT) {\n return this.textEngine_.isBuffered(time);\n } else {\n const buffered = this.getBuffered_(contentType);\n return shaka.media.TimeRangesUtils.isBuffered(buffered, time);\n }\n }\n\n /**\n * Computes how far ahead of the given timestamp is buffered for the given\n * content type.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {number} time\n * @return {number} The amount of time buffered ahead in seconds.\n */\n bufferedAheadOf(contentType, time) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n if (contentType == ContentType.TEXT) {\n return this.textEngine_.bufferedAheadOf(time);\n } else {\n const buffered = this.getBuffered_(contentType);\n return shaka.media.TimeRangesUtils.bufferedAheadOf(buffered, time);\n }\n }\n\n /**\n * Returns info about what is currently buffered.\n * @return {shaka.extern.BufferedInfo}\n */\n getBufferedInfo() {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const TimeRangesUtils = shaka.media.TimeRangesUtils;\n\n const info = {\n total: this.reloadingMediaSource_ ? [] :\n TimeRangesUtils.getBufferedInfo(this.video_.buffered),\n audio:\n TimeRangesUtils.getBufferedInfo(this.getBuffered_(ContentType.AUDIO)),\n video:\n TimeRangesUtils.getBufferedInfo(this.getBuffered_(ContentType.VIDEO)),\n text: [],\n };\n\n if (this.textEngine_) {\n const start = this.textEngine_.bufferStart();\n const end = this.textEngine_.bufferEnd();\n\n if (start != null && end != null) {\n info.text.push({start: start, end: end});\n }\n }\n return info;\n }\n\n /**\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @return {TimeRanges} The buffered ranges for the given content type, or\n * null if the buffered ranges could not be obtained.\n * @private\n */\n getBuffered_(contentType) {\n if (this.reloadingMediaSource_ || this.usingRemotePlayback_) {\n return null;\n }\n try {\n return this.sourceBuffers_[contentType].buffered;\n } catch (exception) {\n if (contentType in this.sourceBuffers_) {\n // Note: previous MediaSource errors may cause access to |buffered| to\n // throw.\n shaka.log.error('failed to get buffered range for ' + contentType,\n exception);\n }\n return null;\n }\n }\n\n /**\n * Create a new closed caption parser. This will ONLY be replaced by tests as\n * a way to inject fake closed caption parser instances.\n *\n * @param {string} mimeType\n * @return {!shaka.media.IClosedCaptionParser}\n */\n getCaptionParser(mimeType) {\n return new shaka.media.ClosedCaptionParser(mimeType);\n }\n\n /**\n * This method is only public for testing.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {!BufferSource} data\n * @param {!shaka.media.SegmentReference} reference The segment reference\n * we are appending\n * @param {shaka.extern.Stream} stream\n * @param {!string} mimeType\n * @return {{timestamp: ?number, metadata: !Array.}}\n */\n getTimestampAndDispatchMetadata(contentType, data, reference, stream,\n mimeType) {\n let timestamp = null;\n let metadata = [];\n\n const uint8ArrayData = shaka.util.BufferUtils.toUint8(data);\n if (shaka.util.MimeUtils.RAW_FORMATS.includes(mimeType)) {\n const frames = shaka.util.Id3Utils.getID3Frames(uint8ArrayData);\n if (frames.length && reference) {\n const metadataTimestamp = frames.find((frame) => {\n return frame.description ===\n 'com.apple.streaming.transportStreamTimestamp';\n });\n if (metadataTimestamp) {\n timestamp = Math.round(metadataTimestamp.data) / 1000;\n }\n /** @private {shaka.extern.ID3Metadata} */\n const id3Metadata = {\n cueTime: reference.startTime,\n data: uint8ArrayData,\n frames: frames,\n dts: reference.startTime,\n pts: reference.startTime,\n };\n this.playerInterface_.onMetadata(\n [id3Metadata], /* offset= */ 0, reference.endTime);\n }\n } else if (mimeType.includes('/mp4') &&\n reference &&\n reference.initSegmentReference &&\n reference.initSegmentReference.timescale) {\n const timescale = reference.initSegmentReference.timescale;\n if (!isNaN(timescale)) {\n const hasEmsg = ((stream.emsgSchemeIdUris != null &&\n stream.emsgSchemeIdUris.length > 0) ||\n this.config_.dispatchAllEmsgBoxes);\n const Mp4Parser = shaka.util.Mp4Parser;\n let startTime = 0;\n let parsedMedia = false;\n const parser = new Mp4Parser();\n if (hasEmsg) {\n parser.fullBox('emsg', (box) =>\n this.parseEMSG_(reference, stream.emsgSchemeIdUris, box));\n }\n parser.fullBox('prft', (box) => this.parsePrft_(timescale, box))\n .box('moof', Mp4Parser.children)\n .box('traf', Mp4Parser.children)\n .fullBox('tfdt', (box) => {\n goog.asserts.assert(\n box.version == 0 || box.version == 1,\n 'TFDT version can only be 0 or 1');\n const parsed = shaka.util.Mp4BoxParsers.parseTFDTInaccurate(\n box.reader, box.version);\n startTime = parsed.baseMediaDecodeTime / timescale;\n parsedMedia = true;\n box.parser.stop();\n }).parse(data, /* partialOkay= */ true);\n if (parsedMedia && reference.timestampOffset == 0) {\n timestamp = startTime;\n }\n }\n } else if (!mimeType.includes('/mp4') && !mimeType.includes('/webm') &&\n shaka.util.TsParser.probe(uint8ArrayData)) {\n if (!this.tsParsers_[contentType]) {\n this.tsParsers_[contentType] = new shaka.util.TsParser();\n } else {\n this.tsParsers_[contentType].clearData();\n }\n const tsParser = this.tsParsers_[contentType].parse(uint8ArrayData);\n const startTime = tsParser.getStartTime(contentType);\n if (startTime != null) {\n timestamp = startTime;\n }\n metadata = tsParser.getMetadata();\n }\n return {timestamp, metadata};\n }\n\n\n /**\n * Parse the EMSG box from a MP4 container.\n *\n * @param {!shaka.media.SegmentReference} reference\n * @param {?Array.} emsgSchemeIdUris Array of emsg\n * scheme_id_uri for which emsg boxes should be parsed.\n * @param {!shaka.extern.ParsedBox} box\n * @private\n * https://dashif-documents.azurewebsites.net/Events/master/event.html#emsg-format\n * aligned(8) class DASHEventMessageBox\n * extends FullBox(‘emsg’, version, flags = 0){\n * if (version==0) {\n * string scheme_id_uri;\n * string value;\n * unsigned int(32) timescale;\n * unsigned int(32) presentation_time_delta;\n * unsigned int(32) event_duration;\n * unsigned int(32) id;\n * } else if (version==1) {\n * unsigned int(32) timescale;\n * unsigned int(64) presentation_time;\n * unsigned int(32) event_duration;\n * unsigned int(32) id;\n * string scheme_id_uri;\n * string value;\n * }\n * unsigned int(8) message_data[];\n */\n parseEMSG_(reference, emsgSchemeIdUris, box) {\n let timescale;\n let id;\n let eventDuration;\n let schemeId;\n let startTime;\n let presentationTimeDelta;\n let value;\n\n if (box.version === 0) {\n schemeId = box.reader.readTerminatedString();\n value = box.reader.readTerminatedString();\n timescale = box.reader.readUint32();\n presentationTimeDelta = box.reader.readUint32();\n eventDuration = box.reader.readUint32();\n id = box.reader.readUint32();\n startTime = reference.startTime + (presentationTimeDelta / timescale);\n } else {\n timescale = box.reader.readUint32();\n const pts = box.reader.readUint64();\n startTime = (pts / timescale) + reference.timestampOffset;\n presentationTimeDelta = startTime - reference.startTime;\n eventDuration = box.reader.readUint32();\n id = box.reader.readUint32();\n schemeId = box.reader.readTerminatedString();\n value = box.reader.readTerminatedString();\n }\n const messageData = box.reader.readBytes(\n box.reader.getLength() - box.reader.getPosition());\n\n // See DASH sec. 5.10.3.3.1\n // If a DASH client detects an event message box with a scheme that is not\n // defined in MPD, the client is expected to ignore it.\n if ((emsgSchemeIdUris && emsgSchemeIdUris.includes(schemeId)) ||\n this.config_.dispatchAllEmsgBoxes) {\n // See DASH sec. 5.10.4.1\n // A special scheme in DASH used to signal manifest updates.\n if (schemeId == 'urn:mpeg:dash:event:2012') {\n this.playerInterface_.onManifestUpdate();\n } else {\n // All other schemes are dispatched as a general 'emsg' event.\n const endTime = startTime + (eventDuration / timescale);\n /** @type {shaka.extern.EmsgInfo} */\n const emsg = {\n startTime: startTime,\n endTime: endTime,\n schemeIdUri: schemeId,\n value: value,\n timescale: timescale,\n presentationTimeDelta: presentationTimeDelta,\n eventDuration: eventDuration,\n id: id,\n messageData: messageData,\n };\n\n // Dispatch an event to notify the application about the emsg box.\n const eventName = shaka.util.FakeEvent.EventName.Emsg;\n const data = (new Map()).set('detail', emsg);\n const event = new shaka.util.FakeEvent(eventName, data);\n // A user can call preventDefault() on a cancelable event.\n event.cancelable = true;\n\n this.playerInterface_.onEvent(event);\n\n if (event.defaultPrevented) {\n // If the caller uses preventDefault() on the 'emsg' event, don't\n // process any further, and don't generate an ID3 'metadata' event\n // for the same data.\n return;\n }\n\n // Additionally, ID3 events generate a 'metadata' event. This is a\n // pre-parsed version of the metadata blob already dispatched in the\n // 'emsg' event.\n if (schemeId == 'https://aomedia.org/emsg/ID3' ||\n schemeId == 'https://developer.apple.com/streaming/emsg-id3') {\n // See https://aomediacodec.github.io/id3-emsg/\n const frames = shaka.util.Id3Utils.getID3Frames(messageData);\n if (frames.length) {\n /** @private {shaka.extern.ID3Metadata} */\n const metadata = {\n cueTime: startTime,\n data: messageData,\n frames: frames,\n dts: startTime,\n pts: startTime,\n };\n this.playerInterface_.onMetadata(\n [metadata], /* offset= */ 0, endTime);\n }\n }\n }\n }\n }\n\n /**\n * Parse PRFT box.\n * @param {number} timescale\n * @param {!shaka.extern.ParsedBox} box\n * @private\n */\n parsePrft_(timescale, box) {\n goog.asserts.assert(\n box.version == 0 || box.version == 1,\n 'PRFT version can only be 0 or 1');\n const parsed = shaka.util.Mp4BoxParsers.parsePRFTInaccurate(\n box.reader, box.version);\n\n const wallClockTime = this.convertNtp_(parsed.ntpTimestamp);\n const programStartDate = new Date(wallClockTime -\n (parsed.mediaTime / timescale) * 1000);\n /** @type {shaka.extern.ProducerReferenceTime} */\n const prftInfo = {\n wallClockTime,\n programStartDate,\n };\n\n const eventName = shaka.util.FakeEvent.EventName.Prft;\n const data = (new Map()).set('detail', prftInfo);\n const event = new shaka.util.FakeEvent(\n eventName, data);\n this.playerInterface_.onEvent(event);\n }\n\n\n /**\n * Convert Ntp ntpTimeStamp to UTC Time\n *\n * @param {number} ntpTimeStamp\n * @return {number} utcTime\n * @private\n */\n convertNtp_(ntpTimeStamp) {\n const start = new Date(Date.UTC(1900, 0, 1, 0, 0, 0));\n return new Date(start.getTime() + ntpTimeStamp).getTime();\n }\n\n /**\n * Enqueue an operation to append data to the SourceBuffer.\n * Start and end times are needed for TextEngine, but not for MediaSource.\n * Start and end times may be null for initialization segments; if present\n * they are relative to the presentation timeline.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {!BufferSource} data\n * @param {?shaka.media.SegmentReference} reference The segment reference\n * we are appending, or null for init segments\n * @param {shaka.extern.Stream} stream\n * @param {?boolean} hasClosedCaptions True if the buffer contains CEA closed\n * captions\n * @param {boolean=} seeked True if we just seeked\n * @param {boolean=} adaptation True if we just automatically switched active\n * variant(s).\n * @param {boolean=} isChunkedData True if we add to the buffer from the\n * partial read of the segment.\n * @return {!Promise}\n */\n async appendBuffer(\n contentType, data, reference, stream, hasClosedCaptions, seeked = false,\n adaptation = false, isChunkedData = false, fromSplit = false) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n if (contentType == ContentType.TEXT) {\n if (this.manifestType_ == shaka.media.ManifestParser.HLS) {\n // This won't be known until the first video segment is appended.\n const offset = await this.textSequenceModeOffset_;\n this.textEngine_.setTimestampOffset(offset);\n }\n await this.textEngine_.appendBuffer(\n data,\n reference ? reference.startTime : null,\n reference ? reference.endTime : null,\n reference ? reference.getUris()[0] : null);\n return;\n }\n\n if (!fromSplit && this.needSplitMuxedContent_) {\n await this.appendBuffer(ContentType.AUDIO, data, reference, stream,\n hasClosedCaptions, seeked, adaptation, isChunkedData,\n /* fromSplit= */ true);\n await this.appendBuffer(ContentType.VIDEO, data, reference, stream,\n hasClosedCaptions, seeked, adaptation, isChunkedData,\n /* fromSplit= */ true);\n return;\n }\n\n if (!this.sourceBuffers_[contentType]) {\n shaka.log.warning('Attempted to restore a non-existent source buffer');\n return;\n }\n\n let timestampOffset = this.sourceBuffers_[contentType].timestampOffset;\n\n let mimeType = this.sourceBufferTypes_[contentType];\n if (this.transmuxers_[contentType]) {\n mimeType = this.transmuxers_[contentType].getOriginalMimeType();\n }\n if (reference) {\n const {timestamp, metadata} = this.getTimestampAndDispatchMetadata(\n contentType, data, reference, stream, mimeType);\n if (timestamp != null) {\n if (this.firstVideoTimestamp_ == null &&\n contentType == ContentType.VIDEO) {\n this.firstVideoTimestamp_ = timestamp;\n this.firstVideoReferenceStartTime_ = reference.startTime;\n if (this.firstAudioTimestamp_ != null) {\n let compensation = 0;\n // Only apply compensation if video and audio segment startTime\n // match, to avoid introducing sync issues.\n if (this.firstVideoReferenceStartTime_ ==\n this.firstAudioReferenceStartTime_) {\n compensation =\n this.firstVideoTimestamp_ - this.firstAudioTimestamp_;\n }\n this.audioCompensation_.resolve(compensation);\n }\n }\n if (this.firstAudioTimestamp_ == null &&\n contentType == ContentType.AUDIO) {\n this.firstAudioTimestamp_ = timestamp;\n this.firstAudioReferenceStartTime_ = reference.startTime;\n if (this.firstVideoTimestamp_ != null) {\n let compensation = 0;\n // Only apply compensation if video and audio segment startTime\n // match, to avoid introducing sync issues.\n if (this.firstVideoReferenceStartTime_ ==\n this.firstAudioReferenceStartTime_) {\n compensation =\n this.firstVideoTimestamp_ - this.firstAudioTimestamp_;\n }\n this.audioCompensation_.resolve(compensation);\n }\n }\n let realTimestamp = timestamp;\n const RAW_FORMATS = shaka.util.MimeUtils.RAW_FORMATS;\n // For formats without containers and using segments mode, we need to\n // adjust TimestampOffset relative to 0 because segments do not have\n // any timestamp information.\n if (!this.sequenceMode_ &&\n RAW_FORMATS.includes(this.sourceBufferTypes_[contentType])) {\n realTimestamp = 0;\n }\n const calculatedTimestampOffset = reference.startTime - realTimestamp;\n const timestampOffsetDifference =\n Math.abs(timestampOffset - calculatedTimestampOffset);\n if ((timestampOffsetDifference >= 0.001 || seeked || adaptation) &&\n (!isChunkedData || calculatedTimestampOffset > 0 ||\n !timestampOffset)) {\n timestampOffset = calculatedTimestampOffset;\n if (this.attemptTimestampOffsetCalculation_) {\n this.enqueueOperation_(\n contentType,\n () => this.abort_(contentType),\n null);\n this.enqueueOperation_(\n contentType,\n () => this.setTimestampOffset_(contentType, timestampOffset),\n null);\n }\n }\n // Timestamps can only be reliably extracted from video, not audio.\n // Packed audio formats do not have internal timestamps at all.\n // Prefer video for this when available.\n const isBestSourceBufferForTimestamps =\n contentType == ContentType.VIDEO ||\n !(ContentType.VIDEO in this.sourceBuffers_);\n if (isBestSourceBufferForTimestamps) {\n this.textSequenceModeOffset_.resolve(timestampOffset);\n }\n }\n if (metadata.length) {\n this.playerInterface_.onMetadata(metadata, timestampOffset,\n reference ? reference.endTime : null);\n }\n }\n if (hasClosedCaptions && contentType == ContentType.VIDEO) {\n if (!this.textEngine_) {\n this.reinitText(shaka.util.MimeUtils.CEA608_CLOSED_CAPTION_MIMETYPE,\n this.sequenceMode_, /* external= */ false);\n }\n if (!this.captionParser_) {\n const basicType = mimeType.split(';', 1)[0];\n this.captionParser_ = this.getCaptionParser(basicType);\n }\n // If it is the init segment for closed captions, initialize the closed\n // caption parser.\n if (!reference) {\n this.captionParser_.init(data, adaptation);\n } else {\n const closedCaptions = this.captionParser_.parseFrom(data);\n if (closedCaptions.length) {\n this.textEngine_.storeAndAppendClosedCaptions(\n closedCaptions,\n reference.startTime,\n reference.endTime,\n timestampOffset);\n }\n }\n }\n\n if (this.transmuxers_[contentType]) {\n data = await this.transmuxers_[contentType].transmux(\n data, stream, reference, this.mediaSource_.duration, contentType);\n }\n\n data = this.workAroundBrokenPlatforms_(\n data, reference ? reference.startTime : null, contentType,\n reference ? reference.getUris()[0] : null);\n\n if (reference && this.sequenceMode_ && contentType != ContentType.TEXT) {\n // In sequence mode, for non-text streams, if we just cleared the buffer\n // and are either performing an unbuffered seek or handling an automatic\n // adaptation, we need to set a new timestampOffset on the sourceBuffer.\n if (seeked || adaptation) {\n let timestampOffset = reference.startTime;\n // Audio and video may not be aligned, so we will compensate for audio\n // if necessary.\n if (this.manifestType_ == shaka.media.ManifestParser.HLS &&\n !this.needSplitMuxedContent_ &&\n contentType == ContentType.AUDIO &&\n this.sourceBuffers_[ContentType.VIDEO]) {\n const compensation = await this.audioCompensation_;\n // Only apply compensation if the difference is greater than 100ms\n if (Math.abs(compensation) > 0.1) {\n timestampOffset -= compensation;\n }\n }\n // The logic to call abort() before setting the timestampOffset is\n // extended during unbuffered seeks or automatic adaptations; it is\n // possible for the append state to be PARSING_MEDIA_SEGMENT from the\n // previous SourceBuffer#appendBuffer() call.\n this.enqueueOperation_(\n contentType,\n () => this.abort_(contentType),\n null);\n this.enqueueOperation_(\n contentType,\n () => this.setTimestampOffset_(contentType, timestampOffset),\n null);\n }\n }\n\n let bufferedBefore = null;\n\n await this.enqueueOperation_(contentType, () => {\n if (goog.DEBUG && reference && !reference.isPreload() && !isChunkedData) {\n bufferedBefore = this.getBuffered_(contentType);\n }\n this.append_(contentType, data, timestampOffset);\n }, reference ? reference.getUris()[0] : null);\n\n if (goog.DEBUG && reference && !reference.isPreload() && !isChunkedData) {\n const bufferedAfter = this.getBuffered_(contentType);\n const newBuffered = shaka.media.TimeRangesUtils.computeAddedRange(\n bufferedBefore, bufferedAfter);\n if (newBuffered) {\n const segmentDuration = reference.endTime - reference.startTime;\n const timeAdded = newBuffered.end - newBuffered.start;\n // Check end times instead of start times. We may be overwriting a\n // buffer and only the end changes, and that would be fine.\n // Also, exclude tiny segments. Sometimes alignment segments as small\n // as 33ms are seen in Google DAI content. For such tiny segments,\n // half a segment duration would be no issue.\n const offset = Math.abs(newBuffered.end - reference.endTime);\n if (segmentDuration > 0.100 && (offset > segmentDuration / 2 ||\n Math.abs(segmentDuration - timeAdded) > 0.030)) {\n shaka.log.error('Possible encoding problem detected!',\n 'Unexpected buffered range for reference', reference,\n 'from URIs', reference.getUris(),\n 'should be', {start: reference.startTime, end: reference.endTime},\n 'but got', newBuffered);\n }\n }\n }\n }\n\n /**\n * Set the selected closed captions Id and language.\n *\n * @param {string} id\n */\n setSelectedClosedCaptionId(id) {\n const VIDEO = shaka.util.ManifestParserUtils.ContentType.VIDEO;\n const videoBufferEndTime = this.bufferEnd(VIDEO) || 0;\n this.textEngine_.setSelectedClosedCaptionId(id, videoBufferEndTime);\n }\n\n /** Disable embedded closed captions. */\n clearSelectedClosedCaptionId() {\n if (this.textEngine_) {\n this.textEngine_.setSelectedClosedCaptionId('', 0);\n }\n }\n\n /**\n * Enqueue an operation to remove data from the SourceBuffer.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {number} startTime relative to the start of the presentation\n * @param {number} endTime relative to the start of the presentation\n * @return {!Promise}\n */\n async remove(contentType, startTime, endTime) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n if (contentType == ContentType.TEXT) {\n await this.textEngine_.remove(startTime, endTime);\n } else {\n await this.enqueueOperation_(\n contentType,\n () => this.remove_(contentType, startTime, endTime),\n null);\n if (this.needSplitMuxedContent_) {\n await this.enqueueOperation_(\n ContentType.AUDIO,\n () => this.remove_(ContentType.AUDIO, startTime, endTime),\n null);\n }\n }\n }\n\n /**\n * Enqueue an operation to clear the SourceBuffer.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @return {!Promise}\n */\n async clear(contentType) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n if (contentType == ContentType.TEXT) {\n if (!this.textEngine_) {\n return;\n }\n await this.textEngine_.remove(0, Infinity);\n } else {\n // Note that not all platforms allow clearing to Infinity.\n await this.enqueueOperation_(\n contentType,\n () => this.remove_(contentType, 0, this.mediaSource_.duration),\n null);\n if (this.needSplitMuxedContent_) {\n await this.enqueueOperation_(\n ContentType.AUDIO,\n () => this.remove_(\n ContentType.AUDIO, 0, this.mediaSource_.duration),\n null);\n }\n }\n }\n\n /**\n * Fully reset the state of the caption parser owned by MediaSourceEngine.\n */\n resetCaptionParser() {\n if (this.captionParser_) {\n this.captionParser_.reset();\n }\n }\n\n /**\n * Enqueue an operation to flush the SourceBuffer.\n * This is a workaround for what we believe is a Chromecast bug.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @return {!Promise}\n */\n async flush(contentType) {\n // Flush the pipeline. Necessary on Chromecast, even though we have removed\n // everything.\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n if (contentType == ContentType.TEXT) {\n // Nothing to flush for text.\n return;\n }\n await this.enqueueOperation_(\n contentType,\n () => this.flush_(contentType),\n null);\n if (this.needSplitMuxedContent_) {\n await this.enqueueOperation_(\n ContentType.AUDIO,\n () => this.flush_(ContentType.AUDIO),\n null);\n }\n }\n\n /**\n * Sets the timestamp offset and append window end for the given content type.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {number} timestampOffset The timestamp offset. Segments which start\n * at time t will be inserted at time t + timestampOffset instead. This\n * value does not affect segments which have already been inserted.\n * @param {number} appendWindowStart The timestamp to set the append window\n * start to. For future appends, frames/samples with timestamps less than\n * this value will be dropped.\n * @param {number} appendWindowEnd The timestamp to set the append window end\n * to. For future appends, frames/samples with timestamps greater than this\n * value will be dropped.\n * @param {boolean} ignoreTimestampOffset If true, the timestampOffset will\n * not be applied in this step.\n * @param {string} mimeType\n * @param {string} codecs\n * @param {!Map.} streamsByType\n * A map of content types to streams. All streams must be supported\n * according to MediaSourceEngine.isStreamSupported.\n *\n * @return {!Promise}\n */\n async setStreamProperties(\n contentType, timestampOffset, appendWindowStart, appendWindowEnd,\n ignoreTimestampOffset, mimeType, codecs, streamsByType) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n if (contentType == ContentType.TEXT) {\n if (!ignoreTimestampOffset) {\n this.textEngine_.setTimestampOffset(timestampOffset);\n }\n this.textEngine_.setAppendWindow(appendWindowStart, appendWindowEnd);\n return;\n }\n const operations = [];\n\n const hasChangedCodecs = await this.codecSwitchIfNecessary_(\n contentType, mimeType, codecs, streamsByType);\n\n if (!hasChangedCodecs) {\n // Queue an abort() to help MSE splice together overlapping segments.\n // We set appendWindowEnd when we change periods in DASH content, and the\n // period transition may result in overlap.\n //\n // An abort() also helps with MPEG2-TS. When we append a TS segment, we\n // always enter a PARSING_MEDIA_SEGMENT state and we can't change the\n // timestamp offset. By calling abort(), we reset the state so we can\n // set it.\n operations.push(this.enqueueOperation_(\n contentType,\n () => this.abort_(contentType),\n null));\n if (this.needSplitMuxedContent_) {\n operations.push(this.enqueueOperation_(\n ContentType.AUDIO,\n () => this.abort_(ContentType.AUDIO),\n null));\n }\n }\n if (!ignoreTimestampOffset) {\n operations.push(this.enqueueOperation_(\n contentType,\n () => this.setTimestampOffset_(contentType, timestampOffset),\n null));\n if (this.needSplitMuxedContent_) {\n operations.push(this.enqueueOperation_(\n ContentType.AUDIO,\n () => this.setTimestampOffset_(\n ContentType.AUDIO, timestampOffset),\n null));\n }\n }\n operations.push(this.enqueueOperation_(\n contentType,\n () => this.setAppendWindow_(\n contentType, appendWindowStart, appendWindowEnd),\n null));\n if (this.needSplitMuxedContent_) {\n operations.push(this.enqueueOperation_(\n ContentType.AUDIO,\n () => this.setAppendWindow_(\n ContentType.AUDIO, appendWindowStart, appendWindowEnd),\n null));\n }\n\n await Promise.all(operations);\n }\n\n /**\n * Adjust timestamp offset to maintain AV sync across discontinuities.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {number} timestampOffset\n * @return {!Promise}\n */\n async resync(contentType, timestampOffset) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n if (contentType == ContentType.TEXT) {\n // This operation is for audio and video only.\n return;\n }\n\n // Reset the promise in case the timestamp offset changed during\n // a period/discontinuity transition.\n if (contentType == ContentType.VIDEO) {\n this.textSequenceModeOffset_ = new shaka.util.PublicPromise();\n }\n\n if (!this.sequenceMode_) {\n return;\n }\n\n // Avoid changing timestampOffset when the difference is less than 100 ms\n // from the end of the current buffer.\n const bufferEnd = this.bufferEnd(contentType);\n if (bufferEnd && Math.abs(bufferEnd - timestampOffset) < 0.1) {\n return;\n }\n\n // Queue an abort() to help MSE splice together overlapping segments.\n // We set appendWindowEnd when we change periods in DASH content, and the\n // period transition may result in overlap.\n //\n // An abort() also helps with MPEG2-TS. When we append a TS segment, we\n // always enter a PARSING_MEDIA_SEGMENT state and we can't change the\n // timestamp offset. By calling abort(), we reset the state so we can\n // set it.\n this.enqueueOperation_(\n contentType,\n () => this.abort_(contentType),\n null);\n if (this.needSplitMuxedContent_) {\n this.enqueueOperation_(\n ContentType.AUDIO,\n () => this.abort_(ContentType.AUDIO),\n null);\n }\n await this.enqueueOperation_(\n contentType,\n () => this.setTimestampOffset_(contentType, timestampOffset),\n null);\n if (this.needSplitMuxedContent_) {\n await this.enqueueOperation_(\n ContentType.AUDIO,\n () => this.setTimestampOffset_(ContentType.AUDIO, timestampOffset),\n null);\n }\n }\n\n /**\n * @param {string=} reason Valid reasons are 'network' and 'decode'.\n * @return {!Promise}\n * @see http://w3c.github.io/media-source/#idl-def-EndOfStreamError\n */\n async endOfStream(reason) {\n await this.enqueueBlockingOperation_(() => {\n // If endOfStream() has already been called on the media source,\n // don't call it again. Also do not call if readyState is\n // 'closed' (not attached to video element) since it is not a\n // valid operation.\n if (this.ended() || this.closed()) {\n return;\n }\n // Tizen won't let us pass undefined, but it will let us omit the\n // argument.\n if (reason) {\n this.mediaSource_.endOfStream(reason);\n } else {\n this.mediaSource_.endOfStream();\n }\n });\n }\n\n /**\n * @param {number} duration\n * @return {!Promise}\n */\n async setDuration(duration) {\n await this.enqueueBlockingOperation_(() => {\n // Reducing the duration causes the MSE removal algorithm to run, which\n // triggers an 'updateend' event to fire. To handle this scenario, we\n // have to insert a dummy operation into the beginning of each queue,\n // which the 'updateend' handler will remove.\n if (duration < this.mediaSource_.duration) {\n for (const contentType in this.sourceBuffers_) {\n const dummyOperation = {\n start: () => {},\n p: new shaka.util.PublicPromise(),\n uri: null,\n };\n this.queues_[contentType].unshift(dummyOperation);\n }\n }\n\n this.mediaSource_.duration = duration;\n this.lastDuration_ = duration;\n });\n }\n\n /**\n * Get the current MediaSource duration.\n *\n * @return {number}\n */\n getDuration() {\n return this.mediaSource_.duration;\n }\n\n /**\n * Append data to the SourceBuffer.\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {BufferSource} data\n * @param {number} timestampOffset\n * @private\n */\n append_(contentType, data, timestampOffset) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n // Append only video data to the LCEVC Dec.\n if (contentType == ContentType.VIDEO && this.lcevcDec_) {\n // Append video buffers to the LCEVC Dec for parsing and storing\n // of LCEVC data.\n this.lcevcDec_.appendBuffer(data, timestampOffset);\n }\n\n // This will trigger an 'updateend' event.\n this.sourceBuffers_[contentType].appendBuffer(data);\n }\n\n /**\n * Remove data from the SourceBuffer.\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {number} startTime relative to the start of the presentation\n * @param {number} endTime relative to the start of the presentation\n * @private\n */\n remove_(contentType, startTime, endTime) {\n if (endTime <= startTime) {\n // Ignore removal of inverted or empty ranges.\n // Fake 'updateend' event to resolve the operation.\n this.onUpdateEnd_(contentType);\n return;\n }\n\n // This will trigger an 'updateend' event.\n this.sourceBuffers_[contentType].remove(startTime, endTime);\n }\n\n /**\n * Call abort() on the SourceBuffer.\n * This resets MSE's last_decode_timestamp on all track buffers, which should\n * trigger the splicing logic for overlapping segments.\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @private\n */\n abort_(contentType) {\n // Save the append window, which is reset on abort().\n const appendWindowStart =\n this.sourceBuffers_[contentType].appendWindowStart;\n const appendWindowEnd = this.sourceBuffers_[contentType].appendWindowEnd;\n\n // This will not trigger an 'updateend' event, since nothing is happening.\n // This is only to reset MSE internals, not to abort an actual operation.\n this.sourceBuffers_[contentType].abort();\n\n // Restore the append window.\n this.sourceBuffers_[contentType].appendWindowStart = appendWindowStart;\n this.sourceBuffers_[contentType].appendWindowEnd = appendWindowEnd;\n\n // Fake an 'updateend' event to resolve the operation.\n this.onUpdateEnd_(contentType);\n }\n\n /**\n * Nudge the playhead to force the media pipeline to be flushed.\n * This seems to be necessary on Chromecast to get new content to replace old\n * content.\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @private\n */\n flush_(contentType) {\n // Never use flush_ if there's data. It causes a hiccup in playback.\n goog.asserts.assert(\n this.video_.buffered.length == 0, 'MediaSourceEngine.flush_ should ' +\n 'only be used after clearing all data!');\n\n // Seeking forces the pipeline to be flushed.\n this.video_.currentTime -= 0.001;\n\n // Fake an 'updateend' event to resolve the operation.\n this.onUpdateEnd_(contentType);\n }\n\n /**\n * Set the SourceBuffer's timestamp offset.\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {number} timestampOffset\n * @private\n */\n setTimestampOffset_(contentType, timestampOffset) {\n // Work around for\n // https://github.com/shaka-project/shaka-player/issues/1281:\n // TODO(https://bit.ly/2ttKiBU): follow up when this is fixed in Edge\n if (timestampOffset < 0) {\n // Try to prevent rounding errors in Edge from removing the first\n // keyframe.\n timestampOffset += 0.001;\n }\n\n this.sourceBuffers_[contentType].timestampOffset = timestampOffset;\n\n // Fake an 'updateend' event to resolve the operation.\n this.onUpdateEnd_(contentType);\n }\n\n /**\n * Set the SourceBuffer's append window end.\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {number} appendWindowStart\n * @param {number} appendWindowEnd\n * @private\n */\n setAppendWindow_(contentType, appendWindowStart, appendWindowEnd) {\n // You can't set start > end, so first set start to 0, then set the new\n // end, then set the new start. That way, there are no intermediate\n // states which are invalid.\n this.sourceBuffers_[contentType].appendWindowStart = 0;\n this.sourceBuffers_[contentType].appendWindowEnd = appendWindowEnd;\n this.sourceBuffers_[contentType].appendWindowStart = appendWindowStart;\n\n // Fake an 'updateend' event to resolve the operation.\n this.onUpdateEnd_(contentType);\n }\n\n /**\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @private\n */\n onError_(contentType) {\n const operation = this.queues_[contentType][0];\n goog.asserts.assert(operation, 'Spurious error event!');\n goog.asserts.assert(!this.sourceBuffers_[contentType].updating,\n 'SourceBuffer should not be updating on error!');\n const code = this.video_.error ? this.video_.error.code : 0;\n operation.p.reject(new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.MEDIA_SOURCE_OPERATION_FAILED,\n code, operation.uri));\n // Do not pop from queue. An 'updateend' event will fire next, and to\n // avoid synchronizing these two event handlers, we will allow that one to\n // pop from the queue as normal. Note that because the operation has\n // already been rejected, the call to resolve() in the 'updateend' handler\n // will have no effect.\n }\n\n /**\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @private\n */\n onUpdateEnd_(contentType) {\n if (this.reloadingMediaSource_) {\n return;\n }\n const operation = this.queues_[contentType][0];\n goog.asserts.assert(operation, 'Spurious updateend event!');\n if (!operation) {\n return;\n }\n goog.asserts.assert(!this.sourceBuffers_[contentType].updating,\n 'SourceBuffer should not be updating on updateend!');\n operation.p.resolve();\n this.popFromQueue_(contentType);\n }\n\n /**\n * Enqueue an operation and start it if appropriate.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {function()} start\n * @param {?string} uri\n * @return {!Promise}\n * @private\n */\n enqueueOperation_(contentType, start, uri) {\n this.destroyer_.ensureNotDestroyed();\n const operation = {\n start: start,\n p: new shaka.util.PublicPromise(),\n uri,\n };\n this.queues_[contentType].push(operation);\n\n if (this.queues_[contentType].length == 1) {\n this.startOperation_(contentType);\n }\n return operation.p;\n }\n\n /**\n * Enqueue an operation which must block all other operations on all\n * SourceBuffers.\n *\n * @param {function():(Promise|undefined)} run\n * @return {!Promise}\n * @private\n */\n async enqueueBlockingOperation_(run) {\n this.destroyer_.ensureNotDestroyed();\n\n /** @type {!Array.} */\n const allWaiters = [];\n /** @type {!Array.} */\n const contentTypes = Object.keys(this.sourceBuffers_);\n\n // Enqueue a 'wait' operation onto each queue.\n // This operation signals its readiness when it starts.\n // When all wait operations are ready, the real operation takes place.\n for (const contentType of contentTypes) {\n const ready = new shaka.util.PublicPromise();\n const operation = {\n start: () => ready.resolve(),\n p: ready,\n uri: null,\n };\n\n this.queues_[contentType].push(operation);\n allWaiters.push(ready);\n\n if (this.queues_[contentType].length == 1) {\n operation.start();\n }\n }\n\n // Return a Promise to the real operation, which waits to begin until\n // there are no other in-progress operations on any SourceBuffers.\n try {\n await Promise.all(allWaiters);\n } catch (error) {\n // One of the waiters failed, which means we've been destroyed.\n goog.asserts.assert(\n this.destroyer_.destroyed(), 'Should be destroyed by now');\n // We haven't popped from the queue. Canceled waiters have been removed\n // by destroy. What's left now should just be resolved waiters. In\n // uncompiled mode, we will maintain good hygiene and make sure the\n // assert at the end of destroy passes. In compiled mode, the queues\n // are wiped in destroy.\n if (goog.DEBUG) {\n for (const contentType of contentTypes) {\n if (this.queues_[contentType].length) {\n goog.asserts.assert(\n this.queues_[contentType].length == 1,\n 'Should be at most one item in queue!');\n goog.asserts.assert(\n allWaiters.includes(this.queues_[contentType][0].p),\n 'The item in queue should be one of our waiters!');\n this.queues_[contentType].shift();\n }\n }\n }\n throw error;\n }\n\n if (goog.DEBUG) {\n // If we did it correctly, nothing is updating.\n for (const contentType of contentTypes) {\n goog.asserts.assert(\n this.sourceBuffers_[contentType].updating == false,\n 'SourceBuffers should not be updating after a blocking op!');\n }\n }\n\n // Run the real operation, which can be asynchronous.\n try {\n await run();\n } catch (exception) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.MEDIA_SOURCE_OPERATION_THREW,\n exception,\n this.video_.error || 'No error in the media element',\n null);\n } finally {\n // Unblock the queues.\n for (const contentType of contentTypes) {\n this.popFromQueue_(contentType);\n }\n }\n }\n\n /**\n * Pop from the front of the queue and start a new operation.\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @private\n */\n popFromQueue_(contentType) {\n goog.asserts.assert(this.queues_[contentType], 'Queue should exist');\n // Remove the in-progress operation, which is now complete.\n this.queues_[contentType].shift();\n this.startOperation_(contentType);\n }\n\n /**\n * Starts the next operation in the queue.\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @private\n */\n startOperation_(contentType) {\n // Retrieve the next operation, if any, from the queue and start it.\n const next = this.queues_[contentType][0];\n if (next) {\n try {\n next.start();\n } catch (exception) {\n if (exception.name == 'QuotaExceededError') {\n next.p.reject(new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.QUOTA_EXCEEDED_ERROR,\n contentType));\n } else {\n next.p.reject(new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.MEDIA_SOURCE_OPERATION_THREW,\n exception,\n this.video_.error || 'No error in the media element',\n next.uri));\n }\n this.popFromQueue_(contentType);\n }\n }\n }\n\n /**\n * @return {!shaka.extern.TextDisplayer}\n */\n getTextDisplayer() {\n goog.asserts.assert(\n this.textDisplayer_,\n 'TextDisplayer should only be null when this is destroyed');\n\n return this.textDisplayer_;\n }\n\n /**\n * @param {!shaka.extern.TextDisplayer} textDisplayer\n */\n setTextDisplayer(textDisplayer) {\n this.textDisplayer_ = textDisplayer;\n if (this.textEngine_) {\n this.textEngine_.setDisplayer(textDisplayer);\n }\n }\n\n /**\n * @param {boolean} segmentRelativeVttTiming\n */\n setSegmentRelativeVttTiming(segmentRelativeVttTiming) {\n this.segmentRelativeVttTiming_ = segmentRelativeVttTiming;\n }\n\n /**\n * Apply platform-specific transformations to this segment to work around\n * issues in the platform.\n *\n * @param {!BufferSource} segment\n * @param {?number} startTime\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {?string} uri\n * @return {!BufferSource}\n * @private\n */\n workAroundBrokenPlatforms_(segment, startTime, contentType, uri) {\n const Platform = shaka.util.Platform;\n\n const isInitSegment = startTime == null;\n const encryptionExpected = this.expectedEncryption_[contentType];\n const keySystem = this.playerInterface_.getKeySystem();\n\n // If:\n // 1. the configuration tells to insert fake encryption,\n // 2. and this is an init segment,\n // 3. and encryption is expected,\n // 4. and the platform requires encryption in all init segments,\n // 5. and the content is MP4 (mimeType == \"video/mp4\" or \"audio/mp4\"),\n // then insert fake encryption metadata for init segments that lack it.\n // The MP4 requirement is because we can currently only do this\n // transformation on MP4 containers.\n // See: https://github.com/shaka-project/shaka-player/issues/2759\n if (this.config_.insertFakeEncryptionInInit &&\n isInitSegment &&\n encryptionExpected &&\n Platform.requiresEncryptionInfoInAllInitSegments(keySystem) &&\n shaka.util.MimeUtils.getContainerType(\n this.sourceBufferTypes_[contentType]) == 'mp4') {\n shaka.log.debug('Forcing fake encryption information in init segment.');\n segment = shaka.media.ContentWorkarounds.fakeEncryption(segment, uri);\n }\n\n return segment;\n }\n\n /**\n * Prepare the SourceBuffer to parse a potentially new type or codec.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {string} mimeType\n * @param {?shaka.extern.Transmuxer} transmuxer\n * @private\n */\n change_(contentType, mimeType, transmuxer) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n if (contentType === ContentType.TEXT) {\n shaka.log.debug(`Change not supported for ${contentType}`);\n return;\n }\n shaka.log.debug(\n `Change Type: ${this.sourceBufferTypes_[contentType]} -> ${mimeType}`);\n if (shaka.media.Capabilities.isChangeTypeSupported()) {\n if (this.transmuxers_[contentType]) {\n this.transmuxers_[contentType].destroy();\n delete this.transmuxers_[contentType];\n }\n if (transmuxer) {\n this.transmuxers_[contentType] = transmuxer;\n }\n const type = this.addExtraFeaturesToMimeType_(mimeType);\n this.sourceBuffers_[contentType].changeType(type);\n this.sourceBufferTypes_[contentType] = mimeType;\n } else {\n shaka.log.debug('Change Type not supported');\n }\n\n // Fake an 'updateend' event to resolve the operation.\n this.onUpdateEnd_(contentType);\n }\n\n /**\n * Enqueue an operation to prepare the SourceBuffer to parse a potentially new\n * type or codec.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {string} mimeType\n * @param {?shaka.extern.Transmuxer} transmuxer\n * @return {!Promise}\n */\n changeType(contentType, mimeType, transmuxer) {\n return this.enqueueOperation_(\n contentType,\n () => this.change_(contentType, mimeType, transmuxer),\n null);\n }\n\n /**\n * Resets the MediaSource and re-adds source buffers due to codec mismatch\n *\n * @param {!Map.} streamsByType\n * @private\n */\n async reset_(streamsByType) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n this.reloadingMediaSource_ = true;\n this.needSplitMuxedContent_ = false;\n const currentTime = this.video_.currentTime;\n\n // When codec switching if the user is currently paused we don't want\n // to trigger a play when switching codec.\n // Playing can also end up in a paused state after a codec switch\n // so we need to remember the current states.\n const previousAutoPlayState = this.video_.autoplay;\n const previousPausedState = this.video_.paused;\n if (this.playbackHasBegun_) {\n // Only set autoplay to false if the video playback has already begun.\n // When a codec switch happens before playback has begun this can cause\n // autoplay not to work as expected.\n this.video_.autoplay = false;\n }\n\n try {\n this.eventManager_.removeAll();\n\n for (const contentType in this.transmuxers_) {\n this.transmuxers_[contentType].destroy();\n }\n for (const contentType in this.sourceBuffers_) {\n const sourceBuffer = this.sourceBuffers_[contentType];\n try {\n this.mediaSource_.removeSourceBuffer(sourceBuffer);\n } catch (e) {\n shaka.log.debug('Exception on removeSourceBuffer', e);\n }\n }\n this.transmuxers_ = {};\n this.sourceBuffers_ = {};\n\n const previousDuration = this.mediaSource_.duration;\n this.mediaSourceOpen_ = new shaka.util.PublicPromise();\n this.mediaSource_ = this.createMediaSource(this.mediaSourceOpen_);\n await this.mediaSourceOpen_;\n if (!isNaN(previousDuration) && previousDuration) {\n this.mediaSource_.duration = previousDuration;\n } else if (!isNaN(this.lastDuration_) && this.lastDuration_) {\n this.mediaSource_.duration = this.lastDuration_;\n }\n\n const sourceBufferAdded = new shaka.util.PublicPromise();\n const sourceBuffers =\n /** @type {EventTarget} */(this.mediaSource_.sourceBuffers);\n\n const totalOfBuffers = streamsByType.size;\n let numberOfSourceBufferAdded = 0;\n const onSourceBufferAdded = () => {\n numberOfSourceBufferAdded++;\n if (numberOfSourceBufferAdded === totalOfBuffers) {\n sourceBufferAdded.resolve();\n this.eventManager_.unlisten(sourceBuffers, 'addsourcebuffer',\n onSourceBufferAdded);\n }\n };\n\n this.eventManager_.listen(sourceBuffers, 'addsourcebuffer',\n onSourceBufferAdded);\n\n for (const contentType of streamsByType.keys()) {\n const stream = streamsByType.get(contentType);\n // eslint-disable-next-line no-await-in-loop\n await this.initSourceBuffer_(contentType, stream, stream.codecs);\n }\n const audio = streamsByType.get(ContentType.AUDIO);\n if (audio && audio.isAudioMuxedInVideo) {\n this.needSplitMuxedContent_ = true;\n }\n if (this.needSplitMuxedContent_ && !this.queues_[ContentType.AUDIO]) {\n this.queues_[ContentType.AUDIO] = [];\n }\n\n // Fake a seek to catchup the playhead.\n this.video_.currentTime = currentTime;\n\n await sourceBufferAdded;\n } finally {\n this.reloadingMediaSource_ = false;\n\n this.destroyer_.ensureNotDestroyed();\n\n this.eventManager_.listenOnce(this.video_, 'canplaythrough', () => {\n // Don't use ensureNotDestroyed() from this event listener, because\n // that results in an uncaught exception. Instead, just check the\n // flag.\n if (this.destroyer_.destroyed()) {\n return;\n }\n\n this.video_.autoplay = previousAutoPlayState;\n if (!previousPausedState) {\n this.video_.play();\n }\n });\n }\n }\n\n /**\n * Resets the Media Source\n * @param {!Map.} streamsByType\n * @return {!Promise}\n */\n reset(streamsByType) {\n return this.enqueueBlockingOperation_(\n () => this.reset_(streamsByType));\n }\n\n /**\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {string} mimeType\n * @param {string} codecs\n * @return {{transmuxer: ?shaka.extern.Transmuxer,\n * transmuxerMuxed: boolean, basicType: string, codec: string,\n * mimeType: string}}\n * @private\n */\n getRealInfo_(contentType, mimeType, codecs) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const MimeUtils = shaka.util.MimeUtils;\n /** @type {?shaka.extern.Transmuxer} */\n let transmuxer;\n let transmuxerMuxed = false;\n const audioCodec = shaka.util.ManifestParserUtils.guessCodecsSafe(\n ContentType.AUDIO, (codecs || '').split(','));\n const videoCodec = shaka.util.ManifestParserUtils.guessCodecsSafe(\n ContentType.VIDEO, (codecs || '').split(','));\n let codec = videoCodec;\n if (contentType == ContentType.AUDIO) {\n codec = audioCodec;\n }\n if (!codec) {\n codec = codecs;\n }\n let newMimeType = shaka.util.MimeUtils.getFullType(mimeType, codec);\n let needTransmux = this.config_.forceTransmux;\n if (!shaka.media.Capabilities.isTypeSupported(newMimeType) ||\n (!this.sequenceMode_ &&\n shaka.util.MimeUtils.RAW_FORMATS.includes(newMimeType))) {\n needTransmux = true;\n }\n const TransmuxerEngine = shaka.transmuxer.TransmuxerEngine;\n if (needTransmux) {\n const newMimeTypeWithAllCodecs =\n shaka.util.MimeUtils.getFullTypeWithAllCodecs(mimeType, codec);\n const transmuxerPlugin =\n TransmuxerEngine.findTransmuxer(newMimeTypeWithAllCodecs);\n if (transmuxerPlugin) {\n transmuxer = transmuxerPlugin();\n if (audioCodec && videoCodec) {\n transmuxerMuxed = true;\n }\n newMimeType =\n transmuxer.convertCodecs(contentType, newMimeTypeWithAllCodecs);\n }\n }\n\n const newCodec = MimeUtils.getNormalizedCodec(\n MimeUtils.getCodecs(newMimeType));\n const newBasicType = MimeUtils.getBasicType(newMimeType);\n return {\n transmuxer,\n transmuxerMuxed,\n basicType: newBasicType,\n codec: newCodec,\n mimeType: newMimeType,\n };\n }\n\n /**\n * Codec switch if necessary, this will not resolve until the codec\n * switch is over.\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {string} mimeType\n * @param {string} codecs\n * @param {!Map.} streamsByType\n * @return {!Promise.} true if there was a codec switch,\n * false otherwise.\n * @private\n */\n async codecSwitchIfNecessary_(contentType, mimeType, codecs, streamsByType) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n if (contentType == ContentType.TEXT) {\n return false;\n }\n const MimeUtils = shaka.util.MimeUtils;\n const currentCodec = MimeUtils.getNormalizedCodec(\n MimeUtils.getCodecs(this.sourceBufferTypes_[contentType]));\n const currentBasicType = MimeUtils.getBasicType(\n this.sourceBufferTypes_[contentType]);\n\n const realInfo = this.getRealInfo_(contentType, mimeType, codecs);\n const transmuxer = realInfo.transmuxer;\n const transmuxerMuxed = realInfo.transmuxerMuxed;\n const newBasicType = realInfo.basicType;\n const newCodec = realInfo.codec;\n const newMimeType = realInfo.mimeType;\n\n let muxedContentCheck = true;\n if (transmuxerMuxed) {\n const muxedRealInfo =\n this.getRealInfo_(ContentType.AUDIO, mimeType, codecs);\n const muxedCurrentCodec = MimeUtils.getNormalizedCodec(\n MimeUtils.getCodecs(this.sourceBufferTypes_[ContentType.AUDIO]));\n const muxedCurrentBasicType = MimeUtils.getBasicType(\n this.sourceBufferTypes_[ContentType.AUDIO]);\n muxedContentCheck = muxedCurrentCodec == muxedRealInfo.codec &&\n muxedCurrentBasicType == muxedRealInfo.basicType;\n if (muxedRealInfo.transmuxer) {\n muxedRealInfo.transmuxer.destroy();\n }\n }\n\n // Current/new codecs base and basic type match then no need to switch\n if (currentCodec === newCodec && currentBasicType === newBasicType &&\n muxedContentCheck) {\n if (this.transmuxers_[contentType] && !transmuxer) {\n this.transmuxers_[contentType].destroy();\n delete this.transmuxers_[contentType];\n } else if (!this.transmuxers_[contentType] && transmuxer) {\n this.transmuxers_[contentType] = transmuxer;\n } else if (transmuxer) {\n // Compare if the transmuxer is different\n if (this.transmuxers_[contentType] &&\n this.transmuxers_[contentType].transmux != transmuxer.transmux) {\n this.transmuxers_[contentType].destroy();\n delete this.transmuxers_[contentType];\n this.transmuxers_[contentType] = transmuxer;\n } else {\n transmuxer.destroy();\n }\n }\n return false;\n }\n\n let allowChangeType = true;\n if (this.needSplitMuxedContent_ || (transmuxerMuxed &&\n transmuxer && !this.transmuxers_[contentType])) {\n allowChangeType = false;\n }\n\n if (allowChangeType && this.config_.codecSwitchingStrategy ===\n shaka.config.CodecSwitchingStrategy.SMOOTH &&\n shaka.media.Capabilities.isChangeTypeSupported()) {\n await this.changeType(contentType, newMimeType, transmuxer);\n } else {\n if (transmuxer) {\n transmuxer.destroy();\n }\n await this.reset(streamsByType);\n }\n return true;\n }\n\n /**\n * Returns true if it's necessary codec switch to load the new stream.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {string} refMimeType\n * @param {string} refCodecs\n * @return {boolean}\n * @private\n */\n isCodecSwitchNecessary_(contentType, refMimeType, refCodecs) {\n if (contentType == shaka.util.ManifestParserUtils.ContentType.TEXT) {\n return false;\n }\n const MimeUtils = shaka.util.MimeUtils;\n const currentCodec = MimeUtils.getNormalizedCodec(\n MimeUtils.getCodecs(this.sourceBufferTypes_[contentType]));\n const currentBasicType = MimeUtils.getBasicType(\n this.sourceBufferTypes_[contentType]);\n\n let newMimeType = shaka.util.MimeUtils.getFullType(refMimeType, refCodecs);\n let needTransmux = this.config_.forceTransmux;\n if (!shaka.media.Capabilities.isTypeSupported(newMimeType) ||\n (!this.sequenceMode_ &&\n shaka.util.MimeUtils.RAW_FORMATS.includes(newMimeType))) {\n needTransmux = true;\n }\n const newMimeTypeWithAllCodecs =\n shaka.util.MimeUtils.getFullTypeWithAllCodecs(\n refMimeType, refCodecs);\n const TransmuxerEngine = shaka.transmuxer.TransmuxerEngine;\n if (needTransmux) {\n const transmuxerPlugin =\n TransmuxerEngine.findTransmuxer(newMimeTypeWithAllCodecs);\n if (transmuxerPlugin) {\n const transmuxer = transmuxerPlugin();\n newMimeType =\n transmuxer.convertCodecs(contentType, newMimeTypeWithAllCodecs);\n transmuxer.destroy();\n }\n }\n\n const newCodec = MimeUtils.getNormalizedCodec(\n MimeUtils.getCodecs(newMimeType));\n const newBasicType = MimeUtils.getBasicType(newMimeType);\n\n return currentCodec !== newCodec || currentBasicType !== newBasicType;\n }\n\n /**\n * Returns true if it's necessary reset the media source to load the\n * new stream.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} contentType\n * @param {string} mimeType\n * @param {string} codecs\n * @return {boolean}\n */\n isResetMediaSourceNecessary(contentType, mimeType, codecs) {\n if (!this.isCodecSwitchNecessary_(contentType, mimeType, codecs)) {\n return false;\n }\n\n return this.config_.codecSwitchingStrategy !==\n shaka.config.CodecSwitchingStrategy.SMOOTH ||\n !shaka.media.Capabilities.isChangeTypeSupported() ||\n this.needSplitMuxedContent_;\n }\n\n /**\n * Update LCEVC Decoder object when ready for LCEVC Decode.\n * @param {?shaka.lcevc.Dec} lcevcDec\n */\n updateLcevcDec(lcevcDec) {\n this.lcevcDec_ = lcevcDec;\n }\n\n /**\n * @param {string} mimeType\n * @return {string}\n * @private\n */\n addExtraFeaturesToMimeType_(mimeType) {\n const extraFeatures = this.config_.addExtraFeaturesToSourceBuffer(mimeType);\n const extendedType = mimeType + extraFeatures;\n shaka.log.debug('Using full mime type', extendedType);\n\n return extendedType;\n }\n};\n\n\n/**\n * Internal reference to window.URL.createObjectURL function to avoid\n * compatibility issues with other libraries and frameworks such as React\n * Native. For use in unit tests only, not meant for external use.\n *\n * @type {function(?):string}\n */\nshaka.media.MediaSourceEngine.createObjectURL = window.URL.createObjectURL;\n\n\n/**\n * @typedef {{\n * start: function(),\n * p: !shaka.util.PublicPromise,\n * uri: ?string\n * }}\n *\n * @summary An operation in queue.\n * @property {function()} start\n * The function which starts the operation.\n * @property {!shaka.util.PublicPromise} p\n * The PublicPromise which is associated with this operation.\n * @property {?string} uri\n * A segment URI (if any) associated with this operation.\n */\nshaka.media.MediaSourceEngine.Operation;\n\n\n/**\n * @enum {string}\n * @private\n */\nshaka.media.MediaSourceEngine.SourceBufferMode_ = {\n SEQUENCE: 'sequence',\n SEGMENTS: 'segments',\n};\n\n\n/**\n * @typedef {{\n * getKeySystem: function():?string,\n * onMetadata: function(!Array, number, ?number),\n * onEvent: function(!Event),\n * onManifestUpdate: function()\n * }}\n *\n * @summary Player interface\n * @property {function():?string} getKeySystem\n * Gets currently used key system or null if not used.\n * @property {function(\n * !Array, number, ?number)} onMetadata\n * Callback to use when metadata arrives.\n * @property {function(!Event)} onEvent\n * Called when an event occurs that should be sent to the app.\n * @property {function()} onManifestUpdate\n * Called when an embedded 'emsg' box should trigger a manifest update.\n */\nshaka.media.MediaSourceEngine.PlayerInterface;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.MetaSegmentIndex');\ngoog.provide('shaka.media.SegmentIndex');\ngoog.provide('shaka.media.SegmentIterator');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.media.SegmentReference');\ngoog.require('shaka.util.IReleasable');\ngoog.require('shaka.util.Timer');\n\n\n/**\n * SegmentIndex.\n *\n * @implements {shaka.extern.SegmentIndex}\n * @implements {shaka.util.IReleasable}\n * @implements {Iterable.}\n * @export\n */\nshaka.media.SegmentIndex = class {\n /**\n * @param {!Array.} references The list of\n * SegmentReferences, which must be sorted first by their start times\n * (ascending) and second by their end times (ascending).\n */\n constructor(references) {\n if (goog.DEBUG) {\n shaka.media.SegmentIndex.assertCorrectReferences_(references);\n }\n\n /** @protected {!Array.} */\n this.references = references;\n\n /** @private {shaka.util.Timer} */\n this.timer_ = null;\n\n /**\n * The number of references that have been removed from the front of the\n * array. Used to create stable positions in the find/get APIs.\n *\n * @protected {number}\n */\n this.numEvicted_ = 0;\n\n /** @private {boolean} */\n this.immutable_ = false;\n }\n\n /**\n * Get immutability\n *\n * @return {boolean}\n */\n getIsImmutable() {\n return this.immutable_;\n }\n\n /**\n * @override\n * @export\n */\n getNumReferences() {\n return this.references.length;\n }\n\n /**\n * @override\n * @export\n */\n getNumEvicted() {\n return this.numEvicted_;\n }\n\n /**\n * @override\n * @export\n */\n release() {\n if (this.immutable_) {\n return;\n }\n\n this.references = [];\n\n if (this.timer_) {\n this.timer_.stop();\n }\n this.timer_ = null;\n }\n\n\n /**\n * Marks the index as immutable. Segments cannot be added or removed after\n * this point. This doesn't affect the references themselves. This also\n * makes the destroy/release methods do nothing.\n *\n * This is mainly for testing.\n *\n * @export\n */\n markImmutable() {\n this.immutable_ = true;\n }\n\n\n /**\n * Iterates over all top-level segment references in this segment index.\n * @param {function(!shaka.media.SegmentReference)} fn\n */\n forEachTopLevelReference(fn) {\n for (const reference of this.references) {\n fn(reference);\n }\n }\n\n\n /**\n * Return the earliest reference, or null if empty.\n * @return {shaka.media.SegmentReference}\n */\n earliestReference() {\n return this.references[0] || null;\n }\n\n\n /**\n * Drop the first N references.\n * Used in early HLS synchronization, and does not count as eviction.\n * @param {number} n\n */\n dropFirstReferences(n) {\n this.references.splice(0, n);\n }\n\n\n /**\n * @override\n * @export\n */\n find(time) {\n // For live streams, searching from the end is faster. For VOD, it balances\n // out either way. In both cases, references.length is small enough that\n // the difference isn't huge.\n const lastReferenceIndex = this.references.length - 1;\n for (let i = lastReferenceIndex; i >= 0; --i) {\n const r = this.references[i];\n const start = r.startTime;\n // A rounding error can cause /time/ to equal e.endTime or fall in between\n // the references by a fraction of a second. To account for this, we use\n // the start of the next segment as /end/, unless this is the last\n // reference, in which case we use its end time as /end/.\n const end = i < lastReferenceIndex ?\n this.references[i + 1].startTime : r.endTime;\n // Note that a segment ends immediately before the end time.\n if ((time >= start) && (time < end)) {\n return i + this.numEvicted_;\n }\n }\n if (this.references.length && time < this.references[0].startTime) {\n return this.numEvicted_;\n }\n\n return null;\n }\n\n\n /**\n * @override\n * @export\n */\n get(position) {\n if (this.references.length == 0) {\n return null;\n }\n\n const index = position - this.numEvicted_;\n if (index < 0 || index >= this.references.length) {\n return null;\n }\n\n return this.references[index];\n }\n\n\n /**\n * Offset all segment references by a fixed amount.\n *\n * @param {number} offset The amount to add to each segment's start and end\n * times.\n * @export\n */\n offset(offset) {\n if (!this.immutable_) {\n for (const ref of this.references) {\n ref.offset(offset);\n }\n }\n }\n\n\n /**\n * Merges the given SegmentReferences. Supports extending the original\n * references only. Will replace old references with equivalent new ones, and\n * keep any unique old ones.\n *\n * Used, for example, by the DASH and HLS parser, where manifests may not list\n * all available references, so we must keep available references in memory to\n * fill the availability window.\n *\n * @param {!Array.} references The list of\n * SegmentReferences, which must be sorted first by their start times\n * (ascending) and second by their end times (ascending).\n */\n merge(references) {\n if (goog.DEBUG) {\n shaka.media.SegmentIndex.assertCorrectReferences_(references);\n }\n if (this.immutable_) {\n return;\n }\n\n if (!references.length) {\n return;\n }\n\n // Partial segments are used for live edge, and should be removed when they\n // get older. Remove the old SegmentReferences after the first new\n // reference's start time.\n // Use times rounded to the millisecond for filtering purposes, so that\n // tiny rounding errors will not result in duplicate segments in the index.\n const firstStartTime = Math.round(references[0].startTime * 1000) / 1000;\n this.references = this.references.filter((r) => {\n return (Math.round(r.startTime * 1000) / 1000) < firstStartTime;\n });\n\n this.references.push(...references);\n\n if (goog.DEBUG) {\n shaka.media.SegmentIndex.assertCorrectReferences_(this.references);\n }\n }\n\n /**\n * Merges the given SegmentReferences and evicts the ones that end before the\n * given time. Supports extending the original references only.\n * Will not replace old references or interleave new ones.\n * Used, for example, by the DASH and HLS parser, where manifests may not list\n * all available references, so we must keep available references in memory to\n * fill the availability window.\n *\n * @param {!Array.} references The list of\n * SegmentReferences, which must be sorted first by their start times\n * (ascending) and second by their end times (ascending).\n * @param {number} windowStart The start of the availability window to filter\n * out the references that are no longer available.\n * @export\n */\n mergeAndEvict(references, windowStart) {\n // Filter out the references that are no longer available to avoid\n // repeatedly evicting them and messing up eviction count.\n references = references.filter((r) => {\n return r.endTime > windowStart &&\n (this.references.length == 0 ||\n r.endTime > this.references[0].startTime);\n });\n\n const oldFirstRef = this.references[0];\n this.merge(references);\n const newFirstRef = this.references[0];\n\n if (oldFirstRef) {\n // We don't compare the actual ref, since the object could legitimately be\n // replaced with an equivalent. Even the URIs could change due to\n // load-balancing actions taken by the server. However, if the time\n // changes, its not an equivalent reference.\n goog.asserts.assert(oldFirstRef.startTime == newFirstRef.startTime,\n 'SegmentIndex.merge should not change the first reference time!');\n }\n\n this.evict(windowStart);\n }\n\n /**\n * Removes all SegmentReferences that end before the given time.\n *\n * @param {number} time The time in seconds.\n * @export\n */\n evict(time) {\n if (this.immutable_) {\n return;\n }\n\n const oldSize = this.references.length;\n\n this.references = this.references.filter((ref) => ref.endTime > time);\n\n const newSize = this.references.length;\n const diff = oldSize - newSize;\n // Tracking the number of evicted refs will keep their \"positions\" stable\n // for the caller.\n this.numEvicted_ += diff;\n }\n\n\n /**\n * Drops references that start after windowEnd, or end before windowStart,\n * and contracts the last reference so that it ends at windowEnd.\n *\n * Do not call on the last period of a live presentation (unknown duration).\n * It is okay to call on the other periods of a live presentation, where the\n * duration is known and another period has been added.\n *\n * @param {number} windowStart\n * @param {?number} windowEnd\n * @param {boolean=} isNew Whether this is a new SegmentIndex and we shouldn't\n * update the number of evicted elements.\n * @export\n */\n fit(windowStart, windowEnd, isNew = false) {\n goog.asserts.assert(windowEnd != null,\n 'Content duration must be known for static content!');\n goog.asserts.assert(windowEnd != Infinity,\n 'Content duration must be finite for static content!');\n if (this.immutable_) {\n return;\n }\n\n // Trim out references we will never use.\n while (this.references.length) {\n const lastReference = this.references[this.references.length - 1];\n if (lastReference.startTime >= windowEnd) {\n this.references.pop();\n } else {\n break;\n }\n }\n\n while (this.references.length) {\n const firstReference = this.references[0];\n if (firstReference.endTime <= windowStart) {\n this.references.shift();\n if (!isNew) {\n this.numEvicted_++;\n }\n } else {\n break;\n }\n }\n\n if (this.references.length == 0) {\n return;\n }\n\n // Adjust the last SegmentReference.\n const lastReference = this.references[this.references.length - 1];\n const newReference = new shaka.media.SegmentReference(\n lastReference.startTime,\n /* endTime= */ windowEnd,\n lastReference.getUrisInner,\n lastReference.startByte,\n lastReference.endByte,\n lastReference.initSegmentReference,\n lastReference.timestampOffset,\n lastReference.appendWindowStart,\n lastReference.appendWindowEnd,\n lastReference.partialReferences,\n lastReference.tilesLayout,\n lastReference.tileDuration,\n lastReference.syncTime,\n lastReference.status,\n lastReference.aesKey,\n );\n newReference.mimeType = lastReference.mimeType;\n newReference.codecs = lastReference.codecs;\n newReference.discontinuitySequence = lastReference.discontinuitySequence;\n this.references[this.references.length - 1] = newReference;\n }\n\n\n /**\n * Updates the references every so often. Stops when the references list\n * returned by the callback is null.\n *\n * @param {number} interval The interval in seconds.\n * @param {function():Array.} updateCallback\n * @export\n */\n updateEvery(interval, updateCallback) {\n goog.asserts.assert(!this.timer_, 'SegmentIndex timer already started!');\n if (this.immutable_) {\n return;\n }\n if (this.timer_) {\n this.timer_.stop();\n }\n\n this.timer_ = new shaka.util.Timer(() => {\n const references = updateCallback();\n if (references) {\n this.references.push(...references);\n } else {\n this.timer_.stop();\n this.timer_ = null;\n }\n });\n this.timer_.tickEvery(interval);\n }\n\n\n /** @return {!shaka.media.SegmentIterator} */\n [Symbol.iterator]() {\n const iter = this.getIteratorForTime(0);\n goog.asserts.assert(iter != null, 'Iterator for 0 should never be null!');\n return iter;\n }\n\n /**\n * Returns a new iterator that initially points to the segment that contains\n * the given time, or the nearest independent segment before it.\n *\n * Like the normal iterator, next() must be called first to get to the first\n * element. Returns null if we do not find a segment at the\n * requested time.\n *\n * The first segment returned by the iterator _MUST_ be an independent\n * segment. Assumes that only partial references can be dependent, based on\n * RFC 8216 rev 13, section 8.1: \"Each (non-Partial) Media Segment in a Media\n * Playlist will contain at least one independent frame.\"\n *\n * @param {number} time\n * @param {boolean=} allowNonIndepedent\n * @param {boolean=} reverse\n * @return {?shaka.media.SegmentIterator}\n * @export\n */\n getIteratorForTime(time, allowNonIndepedent = false, reverse = false) {\n let index = this.find(time);\n if (index == null) {\n return null;\n }\n\n const ref = this.get(index);\n\n // Adjust index to point to previous or next index (if reversed), so first\n // next() call will traverse in proper direction.\n if (!reverse) {\n index--;\n } else {\n index++;\n }\n\n let partialSegmentIndex = -1;\n if (ref && ref.hasPartialSegments()) {\n // Look for a partial SegmentReference.\n for (let i = ref.partialReferences.length - 1; i >= 0; --i) {\n let r = ref.partialReferences[i];\n // Note that a segment ends immediately before the end time.\n if ((time >= r.startTime) && (time < r.endTime)) {\n if (!allowNonIndepedent) {\n // Find an independent partial segment by moving backwards.\n while (i && (!r.isIndependent())) {\n i--;\n r = ref.partialReferences[i];\n }\n if (!r.isIndependent()) {\n shaka.log.alwaysError('No independent partial segment found!');\n return null;\n }\n }\n // Call to next() should move the partial segment, not the full\n // segment.\n if (reverse) {\n index--;\n } else {\n index++;\n }\n partialSegmentIndex = i - 1;\n break;\n }\n }\n }\n return new shaka.media.SegmentIterator(\n this, index, partialSegmentIndex, reverse);\n }\n\n /**\n * @return {boolean}\n */\n isEmpty() {\n return this.getNumReferences() == 0;\n }\n\n /**\n * Create a SegmentIndex for a single segment of the given start time and\n * duration at the given URIs.\n *\n * @param {number} startTime\n * @param {number} duration\n * @param {!Array.} uris\n * @return {!shaka.media.SegmentIndex}\n * @export\n */\n static forSingleSegment(startTime, duration, uris) {\n const reference = new shaka.media.SegmentReference(\n /* startTime= */ startTime,\n /* endTime= */ startTime + duration,\n /* getUris= */ () => uris,\n /* startByte= */ 0,\n /* endByte= */ null,\n /* initSegmentReference= */ null,\n /* presentationTimeOffset= */ startTime,\n /* appendWindowStart= */ startTime,\n /* appendWindowEnd= */ startTime + duration);\n return new shaka.media.SegmentIndex([reference]);\n }\n};\n\n\nif (goog.DEBUG) {\n /**\n * Asserts that the given SegmentReferences are sorted.\n *\n * @param {!Array.} references\n * @private\n */\n shaka.media.SegmentIndex.assertCorrectReferences_ = (references) => {\n goog.asserts.assert(references.every((r2, i) => {\n if (i == 0) {\n return true;\n }\n const r1 = references[i - 1];\n if (r1.startTime < r2.startTime) {\n return true;\n } else if (r1.startTime > r2.startTime) {\n return false;\n } else {\n if (r1.endTime <= r2.endTime) {\n return true;\n } else {\n return false;\n }\n }\n }), 'SegmentReferences are incorrect');\n };\n}\n\n\n/**\n * An iterator over a SegmentIndex's references.\n *\n * @implements {Iterator.}\n * @export\n */\nshaka.media.SegmentIterator = class {\n /**\n * @param {shaka.media.SegmentIndex} segmentIndex\n * @param {number} index\n * @param {number} partialSegmentIndex\n * @param {boolean} reverse\n */\n constructor(segmentIndex, index, partialSegmentIndex, reverse) {\n /** @private {shaka.media.SegmentIndex} */\n this.segmentIndex_ = segmentIndex;\n\n /** @private {number} */\n this.currentPosition_ = index;\n\n /** @private {number} */\n this.currentPartialPosition_ = partialSegmentIndex;\n\n /** @private {boolean} */\n this.reverse = reverse;\n }\n\n /**\n * @param {boolean} reverse\n * @export\n */\n setReverse(reverse) {\n this.reverse = reverse;\n }\n\n /**\n * @return {number}\n * @export\n */\n currentPosition() {\n return this.currentPosition_;\n }\n\n /**\n * @return {shaka.media.SegmentReference}\n * @export\n */\n current() {\n let ref = this.segmentIndex_.get(this.currentPosition_);\n\n // When we advance past the end of partial references in next(), then add\n // new references in merge(), the pointers may not make sense any more.\n // This adjusts the invalid pointer values to point to the next newly added\n // segment or partial segment.\n if (ref && ref.hasPartialSegments() && ref.hasAllPartialSegments() &&\n this.currentPartialPosition_ >= ref.partialReferences.length) {\n this.currentPosition_++;\n this.currentPartialPosition_ = 0;\n ref = this.segmentIndex_.get(this.currentPosition_);\n }\n\n // If the regular segment contains partial segments, get the current\n // partial SegmentReference.\n if (ref && ref.hasPartialSegments()) {\n const partial = ref.partialReferences[this.currentPartialPosition_];\n return partial;\n }\n return ref;\n }\n\n /**\n * @override\n * @export\n */\n next() {\n const ref = this.segmentIndex_.get(this.currentPosition_);\n\n if (!this.reverse) {\n if (ref && ref.hasPartialSegments()) {\n // If the regular segment contains partial segments, move to the next\n // partial SegmentReference.\n this.currentPartialPosition_++;\n // If the current regular segment has been published completely, and\n // we've reached the end of its partial segments list, move to the next\n // regular segment.\n // If the Partial Segments list is still on the fly, do not move to\n // the next regular segment.\n if (ref.hasAllPartialSegments() &&\n this.currentPartialPosition_ == ref.partialReferences.length) {\n this.currentPosition_++;\n this.currentPartialPosition_ = 0;\n }\n } else {\n // If the regular segment doesn't contain partial segments, move to the\n // next regular segment.\n this.currentPosition_++;\n this.currentPartialPosition_ = 0;\n }\n } else {\n if (ref && ref.hasPartialSegments()) {\n // If the regular segment contains partial segments, move to the\n // previous partial SegmentReference.\n this.currentPartialPosition_--;\n if (this.currentPartialPosition_ < 0) {\n this.currentPosition_--;\n const prevRef = this.segmentIndex_.get(this.currentPosition_);\n if (prevRef && prevRef.hasPartialSegments()) {\n this.currentPartialPosition_ = prevRef.partialReferences.length - 1;\n } else {\n this.currentPartialPosition_ = 0;\n }\n }\n } else {\n // If the regular segment doesn't contain partial segments, move to the\n // previous regular segment.\n this.currentPosition_--;\n this.currentPartialPosition_ = 0;\n }\n }\n\n const res = this.current();\n\n return {\n 'value': res,\n 'done': !res,\n };\n }\n\n /**\n * @export\n */\n resetToLastIndependent() {\n const current = this.current();\n if (current.isPartial() && !current.isIndependent()) {\n const ref = this.segmentIndex_.get(this.currentPosition_);\n if (ref && ref.hasPartialSegments()) {\n let partial = ref.partialReferences[this.currentPartialPosition_];\n while (partial.isIndependent()) {\n if (this.currentPartialPosition_ <= 0) {\n break;\n }\n this.currentPartialPosition_--;\n partial = ref.partialReferences[this.currentPartialPosition_];\n }\n }\n }\n }\n};\n\n\n/**\n * A meta-SegmentIndex composed of multiple other SegmentIndexes.\n * Used in constructing multi-Period Streams for DASH.\n *\n * @extends shaka.media.SegmentIndex\n * @implements {shaka.util.IReleasable}\n * @implements {Iterable.}\n * @export\n */\nshaka.media.MetaSegmentIndex = class extends shaka.media.SegmentIndex {\n /** */\n constructor() {\n super([]);\n\n /** @private {!Array.} */\n this.indexes_ = [];\n }\n\n /** Evicts all old SegmentIndexes in this MetaSegmentIndex that are empty. */\n evictEmpty() {\n while (this.indexes_.length > 1 && this.indexes_[0].isEmpty()) {\n const index = this.indexes_.shift();\n // In the case of this class, this.numEvicted_ represents the evicted\n // segments that were in indexes that were entirely evicted.\n this.numEvicted_ += index.getNumEvicted();\n index.release();\n }\n }\n\n /**\n * Append a SegmentIndex to this MetaSegmentIndex. This effectively stitches\n * the underlying Stream onto the end of the multi-Period Stream represented\n * by this MetaSegmentIndex.\n *\n * @param {!shaka.media.SegmentIndex} segmentIndex\n */\n appendSegmentIndex(segmentIndex) {\n goog.asserts.assert(\n this.indexes_.length == 0 || segmentIndex.getNumEvicted() == 0,\n 'Should not append a new segment index with already-evicted segments');\n this.indexes_.push(segmentIndex);\n }\n\n /**\n * Create a clone of this MetaSegmentIndex containing all the same indexes.\n *\n * @return {!shaka.media.MetaSegmentIndex}\n */\n clone() {\n const clone = new shaka.media.MetaSegmentIndex();\n // Be careful to clone the Array. We don't want to share the reference with\n // our clone and affect each other accidentally.\n clone.indexes_ = this.indexes_.slice();\n clone.numEvicted_ = this.numEvicted_;\n return clone;\n }\n\n /**\n * @override\n * @export\n */\n release() {\n for (const index of this.indexes_) {\n index.release();\n }\n\n this.indexes_ = [];\n }\n\n /**\n * @override\n * @export\n */\n forEachTopLevelReference(fn) {\n for (const index of this.indexes_) {\n index.forEachTopLevelReference(fn);\n }\n }\n\n /**\n * @override\n * @export\n */\n find(time) {\n let numPassedInEarlierIndexes = this.numEvicted_;\n\n for (const index of this.indexes_) {\n const position = index.find(time);\n\n if (position != null) {\n return position + numPassedInEarlierIndexes;\n }\n\n numPassedInEarlierIndexes += index.getNumEvicted() +\n index.getNumReferences();\n }\n\n return null;\n }\n\n /**\n * @override\n * @export\n */\n get(position) {\n let numPassedInEarlierIndexes = this.numEvicted_;\n let sawSegments = false;\n\n for (const index of this.indexes_) {\n goog.asserts.assert(\n !sawSegments || index.getNumEvicted() == 0,\n 'Should not see evicted segments after available segments');\n const reference = index.get(position - numPassedInEarlierIndexes);\n\n if (reference) {\n return reference;\n }\n\n const num = index.getNumReferences();\n numPassedInEarlierIndexes += index.getNumEvicted() + num;\n sawSegments = sawSegments || num != 0;\n }\n\n return null;\n }\n\n /**\n * @override\n * @export\n */\n offset(offset) {\n // offset() is only used by HLS, and MetaSegmentIndex is only used for DASH.\n goog.asserts.assert(\n false, 'offset() should not be used in MetaSegmentIndex!');\n }\n\n /**\n * @override\n * @export\n */\n merge(references) {\n // merge() is only used internally by the DASH and HLS parser on\n // SegmentIndexes, but never on MetaSegmentIndex.\n goog.asserts.assert(\n false, 'merge() should not be used in MetaSegmentIndex!');\n }\n\n /**\n * @override\n * @export\n */\n evict(time) {\n for (const index of this.indexes_) {\n index.evict(time);\n }\n this.evictEmpty();\n }\n\n /**\n * @override\n * @export\n */\n mergeAndEvict(references, windowStart) {\n // mergeAndEvict() is only used internally by the DASH and HLS parser on\n // SegmentIndexes, but never on MetaSegmentIndex.\n goog.asserts.assert(\n false, 'mergeAndEvict() should not be used in MetaSegmentIndex!');\n }\n\n /**\n * @override\n * @export\n */\n fit(windowStart, windowEnd) {\n // fit() is only used internally by manifest parsers on SegmentIndexes, but\n // never on MetaSegmentIndex.\n goog.asserts.assert(false, 'fit() should not be used in MetaSegmentIndex!');\n }\n\n /**\n * @override\n * @export\n */\n updateEvery(interval, updateCallback) {\n // updateEvery() is only used internally by the DASH parser on\n // SegmentIndexes, but never on MetaSegmentIndex.\n goog.asserts.assert(\n false, 'updateEvery() should not be used in MetaSegmentIndex!');\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.PresentationTimeline');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.media.SegmentReference');\n\n\n/**\n * PresentationTimeline.\n * @export\n */\nshaka.media.PresentationTimeline = class {\n /**\n * @param {?number} presentationStartTime The wall-clock time, in seconds,\n * when the presentation started or will start. Only required for live.\n * @param {number} presentationDelay The delay to give the presentation, in\n * seconds. Only required for live.\n * @param {boolean=} autoCorrectDrift Whether to account for drift when\n * determining the availability window.\n *\n * @see {shaka.extern.Manifest}\n * @see {@tutorial architecture}\n */\n constructor(presentationStartTime, presentationDelay,\n autoCorrectDrift = true) {\n /** @private {?number} */\n this.presentationStartTime_ = presentationStartTime;\n\n /** @private {number} */\n this.presentationDelay_ = presentationDelay;\n\n /** @private {number} */\n this.duration_ = Infinity;\n\n /** @private {number} */\n this.segmentAvailabilityDuration_ = Infinity;\n\n /**\n * The maximum segment duration (in seconds). Can be based on explicitly-\n * known segments or on signalling in the manifest.\n *\n * @private {number}\n */\n this.maxSegmentDuration_ = 1;\n\n /**\n * The minimum segment start time (in seconds, in the presentation timeline)\n * for segments we explicitly know about.\n *\n * This is null if we have no explicit descriptions of segments, such as in\n * DASH when using SegmentTemplate w/ duration.\n *\n * @private {?number}\n */\n this.minSegmentStartTime_ = null;\n\n /**\n * The maximum segment end time (in seconds, in the presentation timeline)\n * for segments we explicitly know about.\n *\n * This is null if we have no explicit descriptions of segments, such as in\n * DASH when using SegmentTemplate w/ duration. When this is non-null, the\n * presentation start time is calculated from the segment end times.\n *\n * @private {?number}\n */\n this.maxSegmentEndTime_ = null;\n\n /** @private {number} */\n this.clockOffset_ = 0;\n\n /** @private {boolean} */\n this.static_ = true;\n\n /** @private {boolean} */\n this.isLive2VodTransition_ = false;\n\n /** @private {number} */\n this.userSeekStart_ = 0;\n\n /** @private {boolean} */\n this.autoCorrectDrift_ = autoCorrectDrift;\n\n /**\n * For low latency Dash, availabilityTimeOffset indicates a segment is\n * available for download earlier than its availability start time.\n * This field is the minimum availabilityTimeOffset value among the\n * segments. We reduce the distance from live edge by this value.\n *\n * @private {number}\n */\n this.availabilityTimeOffset_ = 0;\n\n /** @private {boolean} */\n this.startTimeLocked_ = false;\n\n /** @private {?number} */\n this.initialProgramDateTime_ = presentationStartTime;\n }\n\n\n /**\n * @return {number} The presentation's duration in seconds.\n * Infinity indicates that the presentation continues indefinitely.\n * @export\n */\n getDuration() {\n return this.duration_;\n }\n\n\n /**\n * @return {number} The presentation's max segment duration in seconds.\n * @export\n */\n getMaxSegmentDuration() {\n return this.maxSegmentDuration_;\n }\n\n\n /**\n * Sets the presentation's start time.\n *\n * @param {number} presentationStartTime The wall-clock time, in seconds,\n * when the presentation started or will start. Only required for live.\n * @export\n */\n setPresentationStartTime(presentationStartTime) {\n goog.asserts.assert(presentationStartTime >= 0,\n 'presentationStartTime must be >= 0');\n this.presentationStartTime_ = presentationStartTime;\n }\n\n\n /**\n * Sets the presentation's duration.\n *\n * @param {number} duration The presentation's duration in seconds.\n * Infinity indicates that the presentation continues indefinitely.\n * @export\n */\n setDuration(duration) {\n goog.asserts.assert(duration > 0, 'duration must be > 0');\n this.duration_ = duration;\n }\n\n\n /**\n * @return {?number} The presentation's start time in seconds.\n * @export\n */\n getPresentationStartTime() {\n return this.presentationStartTime_;\n }\n\n\n /**\n * Sets the clock offset, which is the difference between the client's clock\n * and the server's clock, in milliseconds (i.e., serverTime = Date.now() +\n * clockOffset).\n *\n * @param {number} offset The clock offset, in ms.\n * @export\n */\n setClockOffset(offset) {\n this.clockOffset_ = offset;\n }\n\n\n /**\n * Sets the presentation's static flag.\n *\n * @param {boolean} isStatic If true, the presentation is static, meaning all\n * segments are available at once.\n * @export\n */\n setStatic(isStatic) {\n // NOTE: the argument name is not \"static\" because that's a keyword in ES6\n if (isStatic && !this.static_) {\n this.isLive2VodTransition_ = true;\n }\n this.static_ = isStatic;\n }\n\n\n /**\n * Sets the presentation's segment availability duration. The segment\n * availability duration should only be set for live.\n *\n * @param {number} segmentAvailabilityDuration The presentation's new segment\n * availability duration in seconds.\n * @export\n */\n setSegmentAvailabilityDuration(segmentAvailabilityDuration) {\n goog.asserts.assert(segmentAvailabilityDuration >= 0,\n 'segmentAvailabilityDuration must be >= 0');\n this.segmentAvailabilityDuration_ = segmentAvailabilityDuration;\n }\n\n\n /**\n * Gets the presentation's segment availability duration.\n *\n * @return {number}\n * @export\n */\n getSegmentAvailabilityDuration() {\n return this.segmentAvailabilityDuration_;\n }\n\n\n /**\n * Sets the presentation delay in seconds.\n *\n * @param {number} delay\n * @export\n */\n setDelay(delay) {\n // NOTE: This is no longer used internally, but is exported.\n // So we cannot remove it without deprecating it and waiting one release\n // cycle, or else we risk breaking custom manifest parsers.\n goog.asserts.assert(delay >= 0, 'delay must be >= 0');\n this.presentationDelay_ = delay;\n }\n\n\n /**\n * Gets the presentation delay in seconds.\n * @return {number}\n * @export\n */\n getDelay() {\n return this.presentationDelay_;\n }\n\n /**\n * Gives PresentationTimeline a Stream's timeline so it can size and position\n * the segment availability window, and account for missing segment\n * information.\n *\n * @param {!Array.} timeline\n * @param {number} startOffset\n * @export\n */\n notifyTimeRange(timeline, startOffset) {\n if (timeline.length == 0) {\n return;\n }\n\n // Date.now() is in milliseconds, from which we compute \"now\" in seconds.\n const now = (Date.now() + this.clockOffset_) / 1000.0;\n // Exclude time ranges that are in the \"future\".\n const timelineForStart = timeline.filter((timeRange) =>\n timeRange.start + startOffset < now);\n if (timelineForStart.length == 0) {\n return;\n }\n\n const firstStartTime = timelineForStart[0].start + startOffset;\n const lastEndTime = timelineForStart[timelineForStart.length - 1].end +\n startOffset;\n\n this.notifyMinSegmentStartTime(firstStartTime);\n\n this.maxSegmentDuration_ = timelineForStart.reduce(\n (max, r) => { return Math.max(max, r.end - r.start); },\n this.maxSegmentDuration_);\n\n this.maxSegmentEndTime_ =\n Math.max(this.maxSegmentEndTime_, lastEndTime);\n\n if (this.presentationStartTime_ != null && this.autoCorrectDrift_ &&\n !this.startTimeLocked_) {\n // Since we have explicit segment end times, calculate a presentation\n // start based on them. This start time accounts for drift.\n this.presentationStartTime_ =\n now - this.maxSegmentEndTime_ - this.maxSegmentDuration_;\n }\n\n shaka.log.v1('notifySegments:',\n 'maxSegmentDuration=' + this.maxSegmentDuration_);\n }\n\n\n /**\n * Gives PresentationTimeline an array of segments so it can size and position\n * the segment availability window, and account for missing segment\n * information. These segments do not necessarily need to all be from the\n * same stream.\n *\n * @param {!Array.} references\n * @export\n */\n notifySegments(references) {\n if (references.length == 0) {\n return;\n }\n\n let firstReferenceStartTime = references[0].startTime;\n let lastReferenceEndTime = references[0].endTime;\n\n // Date.now() is in milliseconds, from which we compute \"now\" in seconds.\n const now = (Date.now() + this.clockOffset_) / 1000.0;\n\n for (const reference of references) {\n // Exclude segments that are in the \"future\".\n if (now < reference.startTime) {\n continue;\n }\n\n firstReferenceStartTime = Math.min(\n firstReferenceStartTime, reference.startTime);\n lastReferenceEndTime = Math.max(lastReferenceEndTime, reference.endTime);\n this.maxSegmentDuration_ = Math.max(\n this.maxSegmentDuration_, reference.endTime - reference.startTime);\n }\n this.notifyMinSegmentStartTime(firstReferenceStartTime);\n this.maxSegmentEndTime_ =\n Math.max(this.maxSegmentEndTime_, lastReferenceEndTime);\n\n if (this.presentationStartTime_ != null && this.autoCorrectDrift_ &&\n !this.startTimeLocked_) {\n // Since we have explicit segment end times, calculate a presentation\n // start based on them. This start time accounts for drift.\n this.presentationStartTime_ =\n now - this.maxSegmentEndTime_ - this.maxSegmentDuration_;\n }\n\n shaka.log.v1('notifySegments:',\n 'maxSegmentDuration=' + this.maxSegmentDuration_);\n }\n\n\n /**\n * Gives PresentationTimeline an startTime and endTime of the period.\n * This should be only set for Dash.\n *\n * @param {number} startTime\n * @param {number} endTime\n * @export\n */\n notifyPeriodDuration(startTime, endTime) {\n this.notifyMinSegmentStartTime(startTime);\n if (endTime != Infinity && !this.isLive()) {\n this.maxSegmentEndTime_ = Math.max(this.maxSegmentEndTime_, endTime);\n }\n }\n\n\n /**\n * Gets the end time of the last available segment.\n *\n * @return {?number}\n * @export\n */\n getMaxSegmentEndTime() {\n return this.maxSegmentEndTime_;\n }\n\n\n /**\n * Lock the presentation timeline's start time. After this is called, no\n * further adjustments to presentationStartTime_ will be permitted.\n *\n * This should be called after all Periods have been parsed, and all calls to\n * notifySegments() from the initial manifest parse have been made.\n *\n * Without this, we can get assertion failures in SegmentIndex for certain\n * DAI content. If DAI adds ad segments to the manifest faster than\n * real-time, adjustments to presentationStartTime_ can cause availability\n * windows to jump around on updates.\n *\n * @export\n */\n lockStartTime() {\n this.startTimeLocked_ = true;\n }\n\n\n /**\n * Returns if the presentation timeline's start time is locked.\n *\n * @return {boolean}\n * @export\n */\n isStartTimeLocked() {\n return this.startTimeLocked_;\n }\n\n\n /**\n * Sets the initial program date time.\n *\n * @param {number} initialProgramDateTime\n * @export\n */\n setInitialProgramDateTime(initialProgramDateTime) {\n this.initialProgramDateTime_ = initialProgramDateTime;\n }\n\n\n /**\n * @return {?number} The initial program date time in seconds.\n * @export\n */\n getInitialProgramDateTime() {\n return this.initialProgramDateTime_;\n }\n\n\n /**\n * Gives PresentationTimeline a Stream's minimum segment start time.\n *\n * @param {number} startTime\n * @export\n */\n notifyMinSegmentStartTime(startTime) {\n if (this.minSegmentStartTime_ == null) {\n // No data yet, and Math.min(null, startTime) is always 0. So just store\n // startTime.\n this.minSegmentStartTime_ = startTime;\n } else if (!this.isLive2VodTransition_) {\n this.minSegmentStartTime_ =\n Math.min(this.minSegmentStartTime_, startTime);\n }\n }\n\n\n /**\n * Gives PresentationTimeline a Stream's maximum segment duration so it can\n * size and position the segment availability window. This function should be\n * called once for each Stream (no more, no less), but does not have to be\n * called if notifySegments() is called instead for a particular stream.\n *\n * @param {number} maxSegmentDuration The maximum segment duration for a\n * particular stream.\n * @export\n */\n notifyMaxSegmentDuration(maxSegmentDuration) {\n this.maxSegmentDuration_ = Math.max(\n this.maxSegmentDuration_, maxSegmentDuration);\n\n shaka.log.v1('notifyNewSegmentDuration:',\n 'maxSegmentDuration=' + this.maxSegmentDuration_);\n }\n\n\n /**\n * Offsets the segment times by the given amount.\n *\n * @param {number} offset The number of seconds to offset by. A positive\n * number adjusts the segment times forward.\n * @export\n */\n offset(offset) {\n if (this.minSegmentStartTime_ != null) {\n this.minSegmentStartTime_ += offset;\n }\n if (this.maxSegmentEndTime_ != null) {\n this.maxSegmentEndTime_ += offset;\n }\n }\n\n\n /**\n * @return {boolean} True if the presentation is live; otherwise, return\n * false.\n * @export\n */\n isLive() {\n return this.duration_ == Infinity &&\n !this.static_;\n }\n\n\n /**\n * @return {boolean} True if the presentation is in progress (meaning not\n * live, but also not completely available); otherwise, return false.\n * @export\n */\n isInProgress() {\n return this.duration_ != Infinity &&\n !this.static_;\n }\n\n\n /**\n * Gets the presentation's current segment availability start time. Segments\n * ending at or before this time should be assumed to be unavailable.\n *\n * @return {number} The current segment availability start time, in seconds,\n * relative to the start of the presentation.\n * @export\n */\n getSegmentAvailabilityStart() {\n goog.asserts.assert(this.segmentAvailabilityDuration_ >= 0,\n 'The availability duration should be positive');\n\n const end = this.getSegmentAvailabilityEnd();\n const start = end - this.segmentAvailabilityDuration_;\n return Math.max(this.userSeekStart_, start);\n }\n\n\n /**\n * Sets the start time of the user-defined seek range. This is only used for\n * VOD content.\n *\n * @param {number} time\n * @export\n */\n setUserSeekStart(time) {\n this.userSeekStart_ = time;\n }\n\n\n /**\n * Gets the presentation's current segment availability end time. Segments\n * starting after this time should be assumed to be unavailable.\n *\n * @return {number} The current segment availability end time, in seconds,\n * relative to the start of the presentation. For VOD, the availability\n * end time is the content's duration. If the Player's playRangeEnd\n * configuration is used, this can override the duration.\n * @export\n */\n getSegmentAvailabilityEnd() {\n if (!this.isLive() && !this.isInProgress()) {\n // It's a static manifest (can also be a dynamic->static conversion)\n if (this.maxSegmentEndTime_) {\n // If we know segment times, use the min of that and duration.\n // Note that the playRangeEnd configuration changes this.duration_.\n // See https://github.com/shaka-project/shaka-player/issues/4026\n return Math.min(this.maxSegmentEndTime_, this.duration_);\n } else {\n // If we don't have segment times, use duration.\n return this.duration_;\n }\n }\n // Can be either live or \"in-progress recording\" (live with known duration)\n return Math.min(this.getLiveEdge_() + this.availabilityTimeOffset_,\n this.duration_);\n }\n\n\n /**\n * Gets the seek range start time, offset by the given amount. This is used\n * to ensure that we don't \"fall\" back out of the seek window while we are\n * buffering.\n *\n * @param {number} offset The offset to add to the start time for live\n * streams.\n * @return {number} The current seek start time, in seconds, relative to the\n * start of the presentation.\n * @export\n */\n getSafeSeekRangeStart(offset) {\n // The earliest known segment time, ignoring segment availability duration.\n const earliestSegmentTime =\n Math.max(this.minSegmentStartTime_, this.userSeekStart_);\n\n // For VOD, the offset and end time are ignored, and we just return the\n // earliest segment time. All segments are \"safe\" in VOD. However, we\n // should round up to the nearest millisecond to avoid issues like\n // https://github.com/shaka-project/shaka-player/issues/2831, in which we\n // tried to seek repeatedly to catch up to the seek range, and never\n // actually \"arrived\" within it. The video's currentTime is not as\n // accurate as the JS number representing the earliest segment time for\n // some content.\n if (this.segmentAvailabilityDuration_ == Infinity) {\n return Math.ceil(earliestSegmentTime * 1e3) / 1e3;\n }\n\n // AKA the live edge for live streams.\n const availabilityEnd = this.getSegmentAvailabilityEnd();\n\n // The ideal availability start, not considering known segments.\n const availabilityStart =\n availabilityEnd - this.segmentAvailabilityDuration_;\n\n // Add the offset to the availability start to ensure that we don't fall\n // outside the availability window while we buffer; we don't need to add the\n // offset to earliestSegmentTime since that won't change over time.\n // Also see: https://github.com/shaka-project/shaka-player/issues/692\n const desiredStart =\n Math.min(availabilityStart + offset, this.getSeekRangeEnd());\n return Math.max(earliestSegmentTime, desiredStart);\n }\n\n\n /**\n * Gets the seek range start time.\n *\n * @return {number}\n * @export\n */\n getSeekRangeStart() {\n return this.getSafeSeekRangeStart(/* offset= */ 0);\n }\n\n\n /**\n * Gets the seek range end.\n *\n * @return {number}\n * @export\n */\n getSeekRangeEnd() {\n const useDelay = this.isLive() || this.isInProgress();\n const delay = useDelay ? this.presentationDelay_ : 0;\n return Math.max(0, this.getSegmentAvailabilityEnd() - delay);\n }\n\n\n /**\n * True if the presentation start time is being used to calculate the live\n * edge.\n * Using the presentation start time means that the stream may be subject to\n * encoder drift. At runtime, we will avoid using the presentation start time\n * whenever possible.\n *\n * @return {boolean}\n * @export\n */\n usingPresentationStartTime() {\n // If it's VOD, IPR, or an HLS \"event\", we are not using the presentation\n // start time.\n if (this.presentationStartTime_ == null) {\n return false;\n }\n\n // If we have explicit segment times, we're not using the presentation\n // start time.\n if (this.maxSegmentEndTime_ != null && this.autoCorrectDrift_) {\n return false;\n }\n\n return true;\n }\n\n\n /**\n * @return {number} The current presentation time in seconds.\n * @private\n */\n getLiveEdge_() {\n goog.asserts.assert(this.presentationStartTime_ != null,\n 'Cannot compute timeline live edge without start time');\n // Date.now() is in milliseconds, from which we compute \"now\" in seconds.\n const now = (Date.now() + this.clockOffset_) / 1000.0;\n return Math.max(\n 0, now - this.maxSegmentDuration_ - this.presentationStartTime_);\n }\n\n /**\n * Sets the presentation's segment availability time offset. This should be\n * only set for Low Latency Dash.\n * The segments are available earlier for download than the availability start\n * time, so we can move closer to the live edge.\n *\n * @param {number} offset\n * @export\n */\n setAvailabilityTimeOffset(offset) {\n this.availabilityTimeOffset_ = offset;\n }\n\n\n /**\n * Gets the presentation's segment availability time offset. This should be\n * only configured for Low Latency Dash.\n *\n * @return {number} availabilityTimeOffset parameter\n * @export\n */\n getAvailabilityTimeOffset() {\n return this.availabilityTimeOffset_;\n }\n\n\n /**\n * Debug only: assert that the timeline parameters make sense for the type\n * of presentation (VOD, IPR, live).\n */\n assertIsValid() {\n if (goog.DEBUG) {\n if (this.isLive()) {\n // Implied by isLive(): infinite and dynamic.\n // Live streams should have a start time.\n goog.asserts.assert(this.presentationStartTime_ != null,\n 'Detected as live stream, but does not match our model of live!');\n } else if (this.isInProgress()) {\n // Implied by isInProgress(): finite and dynamic.\n // IPR streams should have a start time, and segments should not expire.\n goog.asserts.assert(this.presentationStartTime_ != null &&\n this.segmentAvailabilityDuration_ == Infinity,\n 'Detected as IPR stream, but does not match our model of IPR!');\n } else { // VOD\n // VOD segments should not expire and the presentation should be finite\n // and static.\n goog.asserts.assert(this.segmentAvailabilityDuration_ == Infinity &&\n this.duration_ != Infinity &&\n this.static_,\n 'Detected as VOD stream, but does not match our model of VOD!');\n }\n }\n }\n};\n\n\n/**\n * @typedef {{\n * start: number,\n * unscaledStart: number,\n * end: number,\n * partialSegments: number,\n * segmentPosition: number\n * }}\n *\n * @description\n * Defines a time range of a media segment. Times are in seconds.\n *\n * @property {number} start\n * The start time of the range.\n * @property {number} unscaledStart\n * The start time of the range in representation timescale units.\n * @property {number} end\n * The end time (exclusive) of the range.\n * @property {number} partialSegments\n * The number of partial segments\n * @property {number} segmentPosition\n * The segment position of the timeline entry as it appears in the manifest\n *\n * @export\n */\nshaka.media.PresentationTimeline.TimeRange;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.StallDetector');\ngoog.provide('shaka.media.StallDetector.Implementation');\ngoog.provide('shaka.media.StallDetector.MediaElementImplementation');\n\ngoog.require('shaka.media.TimeRangesUtils');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.IReleasable');\n\n/**\n * Some platforms/browsers can get stuck in the middle of a buffered range (e.g.\n * when seeking in a background tab). Detect when we get stuck so that the\n * player can respond.\n *\n * @implements {shaka.util.IReleasable}\n * @final\n */\nshaka.media.StallDetector = class {\n /**\n * @param {shaka.media.StallDetector.Implementation} implementation\n * @param {number} stallThresholdSeconds\n * @param {function(!Event)} onEvent\n * Called when an event is raised to be sent to the application.\n */\n constructor(implementation, stallThresholdSeconds, onEvent) {\n /** @private {?function(!Event)} */\n this.onEvent_ = onEvent;\n /** @private {shaka.media.StallDetector.Implementation} */\n this.implementation_ = implementation;\n /** @private {boolean} */\n this.wasMakingProgress_ = implementation.shouldBeMakingProgress();\n /** @private {number} */\n this.value_ = implementation.getPresentationSeconds();\n /** @private {number} */\n this.lastUpdateSeconds_ = implementation.getWallSeconds();\n /** @private {boolean} */\n this.didJump_ = false;\n /** @private {number} */\n this.stallsDetected_ = 0;\n\n /**\n * The amount of time in seconds that we must have the same value of\n * |value_| before we declare it as a stall.\n *\n * @private {number}\n */\n this.stallThresholdSeconds_ = stallThresholdSeconds;\n\n /** @private {function(number, number)} */\n this.onStall_ = () => {};\n }\n\n /** @override */\n release() {\n // Drop external references to make things easier on the GC.\n this.implementation_ = null;\n this.onEvent_ = null;\n this.onStall_ = () => {};\n }\n\n /**\n * Set the callback that should be called when a stall is detected. Calling\n * this will override any previous calls to |onStall|.\n *\n * @param {function(number, number)} doThis\n */\n onStall(doThis) {\n this.onStall_ = doThis;\n }\n\n /**\n * Returns the number of playback stalls detected.\n */\n getStallsDetected() {\n return this.stallsDetected_;\n }\n\n /**\n * Have the detector update itself and fire the \"on stall\" callback if a stall\n * was detected.\n *\n * @return {boolean} True if action was taken.\n */\n poll() {\n const impl = this.implementation_;\n\n const shouldBeMakingProgress = impl.shouldBeMakingProgress();\n const value = impl.getPresentationSeconds();\n const wallTimeSeconds = impl.getWallSeconds();\n\n const acceptUpdate = this.value_ != value ||\n this.wasMakingProgress_ != shouldBeMakingProgress;\n\n if (acceptUpdate) {\n this.lastUpdateSeconds_ = wallTimeSeconds;\n this.value_ = value;\n this.wasMakingProgress_ = shouldBeMakingProgress;\n this.didJump_ = false;\n }\n\n const stallSeconds = wallTimeSeconds - this.lastUpdateSeconds_;\n\n const triggerCallback = stallSeconds >= this.stallThresholdSeconds_ &&\n shouldBeMakingProgress && !this.didJump_;\n\n if (triggerCallback) {\n this.onStall_(this.value_, stallSeconds);\n this.didJump_ = true;\n // If the onStall_ method updated the current time, update our stored\n // value so we don't think that was an update.\n this.value_ = impl.getPresentationSeconds();\n this.stallsDetected_++;\n this.onEvent_(new shaka.util.FakeEvent(\n shaka.util.FakeEvent.EventName.StallDetected));\n }\n\n return triggerCallback;\n }\n};\n\n/**\n * @interface\n */\nshaka.media.StallDetector.Implementation = class {\n /**\n * Check if the presentation time should be changing. This will return |true|\n * when we expect the presentation time to change.\n *\n * @return {boolean}\n */\n shouldBeMakingProgress() {}\n\n /**\n * Get the presentation time in seconds.\n *\n * @return {number}\n */\n getPresentationSeconds() {}\n\n /**\n * Get the time wall time in seconds.\n *\n * @return {number}\n */\n getWallSeconds() {}\n};\n\n\n/**\n * Some platforms/browsers can get stuck in the middle of a buffered range (e.g.\n * when seeking in a background tab). Force a seek to help get it going again.\n *\n * @implements {shaka.media.StallDetector.Implementation}\n * @final\n */\nshaka.media.StallDetector.MediaElementImplementation = class {\n /**\n * @param {!HTMLMediaElement} mediaElement\n */\n constructor(mediaElement) {\n /** @private {!HTMLMediaElement} */\n this.mediaElement_ = mediaElement;\n }\n\n /** @override */\n shouldBeMakingProgress() {\n // If we are not trying to play, the lack of change could be misidentified\n // as a stall.\n if (this.mediaElement_.paused) {\n return false;\n }\n if (this.mediaElement_.playbackRate == 0) {\n return false;\n }\n\n // If we have don't have enough content, we are not stalled, we are\n // buffering.\n if (this.mediaElement_.buffered.length == 0) {\n return false;\n }\n\n return shaka.media.StallDetector.MediaElementImplementation.hasContentFor_(\n this.mediaElement_.buffered,\n /* timeInSeconds= */ this.mediaElement_.currentTime);\n }\n\n /** @override */\n getPresentationSeconds() {\n return this.mediaElement_.currentTime;\n }\n\n /** @override */\n getWallSeconds() {\n return Date.now() / 1000;\n }\n\n /**\n * Check if we have buffered enough content to play at |timeInSeconds|. Ignore\n * the end of the buffered range since it may not play any more on all\n * platforms.\n *\n * @param {!TimeRanges} buffered\n * @param {number} timeInSeconds\n * @return {boolean}\n * @private\n */\n static hasContentFor_(buffered, timeInSeconds) {\n const TimeRangesUtils = shaka.media.TimeRangesUtils;\n for (const {start, end} of TimeRangesUtils.getBufferedInfo(buffered)) {\n // Can be as much as 100ms before the range\n if (timeInSeconds < start - 0.1) {\n continue;\n }\n // Must be at least 500ms inside the range\n if (timeInSeconds > end - 0.5) {\n continue;\n }\n\n return true;\n }\n\n return false;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.GapJumpingController');\n\ngoog.require('shaka.log');\ngoog.require('shaka.media.PresentationTimeline');\ngoog.require('shaka.media.StallDetector');\ngoog.require('shaka.media.TimeRangesUtils');\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.IReleasable');\ngoog.require('shaka.util.Platform');\ngoog.require('shaka.util.Timer');\n\n\n/**\n * GapJumpingController handles jumping gaps that appear within the content.\n * This will only jump gaps between two buffered ranges, so we should not have\n * to worry about the availability window.\n *\n * @implements {shaka.util.IReleasable}\n */\nshaka.media.GapJumpingController = class {\n /**\n * @param {!HTMLMediaElement} video\n * @param {!shaka.media.PresentationTimeline} timeline\n * @param {shaka.extern.StreamingConfiguration} config\n * @param {shaka.media.StallDetector} stallDetector\n * The stall detector is used to keep the playhead moving while in a\n * playable region. The gap jumping controller takes ownership over the\n * stall detector.\n * If no stall detection logic is desired, |null| may be provided.\n * @param {function(!Event)} onEvent\n * Called when an event is raised to be sent to the application.\n */\n constructor(video, timeline, config, stallDetector, onEvent) {\n /** @private {?function(!Event)} */\n this.onEvent_ = onEvent;\n\n /** @private {HTMLMediaElement} */\n this.video_ = video;\n\n /** @private {?shaka.media.PresentationTimeline} */\n this.timeline_ = timeline;\n\n /** @private {?shaka.extern.StreamingConfiguration} */\n this.config_ = config;\n\n /** @private {shaka.util.EventManager} */\n this.eventManager_ = new shaka.util.EventManager();\n\n /** @private {boolean} */\n this.seekingEventReceived_ = false;\n\n /** @private {number} */\n this.prevReadyState_ = video.readyState;\n\n /** @private {number} */\n this.startTime_ = 0;\n\n /** @private {number} */\n this.gapsJumped_ = 0;\n\n /**\n * The stall detector tries to keep the playhead moving forward. It is\n * managed by the gap-jumping controller to avoid conflicts. On some\n * platforms, the stall detector is not wanted, so it may be null.\n *\n * @private {shaka.media.StallDetector}\n */\n this.stallDetector_ = stallDetector;\n\n /** @private {boolean} */\n this.hadSegmentAppended_ = false;\n\n this.eventManager_.listen(video, 'waiting', () => this.onPollGapJump_());\n\n /**\n * We can't trust |readyState| or 'waiting' events on all platforms. To make\n * up for this, we poll the current time. If we think we are in a gap, jump\n * out of it.\n *\n * See: https://bit.ly/2McuXxm and https://bit.ly/2K5xmJO\n *\n * @private {?shaka.util.Timer}\n */\n this.gapJumpTimer_ = new shaka.util.Timer(() => {\n this.onPollGapJump_();\n }).tickEvery(this.config_.gapJumpTimerTime);\n }\n\n\n /** @override */\n release() {\n if (this.eventManager_) {\n this.eventManager_.release();\n this.eventManager_ = null;\n }\n\n if (this.gapJumpTimer_ != null) {\n this.gapJumpTimer_.stop();\n this.gapJumpTimer_ = null;\n }\n\n if (this.stallDetector_) {\n this.stallDetector_.release();\n this.stallDetector_ = null;\n }\n\n this.onEvent_ = null;\n this.timeline_ = null;\n this.video_ = null;\n }\n\n\n /**\n * Called when a segment is appended by StreamingEngine, but not when a clear\n * is pending. This means StreamingEngine will continue buffering forward from\n * what is buffered. So we know about any gaps before the start.\n */\n onSegmentAppended() {\n this.hadSegmentAppended_ = true;\n this.onPollGapJump_();\n }\n\n /**\n * Called when playback has started and the video element is\n * listening for seeks.\n *\n * @param {number} startTime\n */\n onStarted(startTime) {\n if (this.video_.seeking && !this.seekingEventReceived_) {\n this.seekingEventReceived_ = true;\n this.startTime_ = startTime;\n }\n }\n\n /** Called when a seek has started. */\n onSeeking() {\n this.seekingEventReceived_ = true;\n this.hadSegmentAppended_ = false;\n }\n\n\n /**\n * Returns the total number of playback gaps jumped.\n * @return {number}\n */\n getGapsJumped() {\n return this.gapsJumped_;\n }\n\n\n /**\n * Called on a recurring timer to check for gaps in the media. This is also\n * called in a 'waiting' event.\n *\n * @private\n */\n onPollGapJump_() {\n // Don't gap jump before the video is ready to play.\n if (this.video_.readyState == 0) {\n return;\n }\n // Do not gap jump if seeking has begun, but the seeking event has not\n // yet fired for this particular seek.\n if (this.video_.seeking) {\n if (!this.seekingEventReceived_) {\n return;\n }\n } else {\n this.seekingEventReceived_ = false;\n }\n // Don't gap jump while paused, so that you don't constantly jump ahead\n // while paused on a livestream. We make an exception for time 0, since we\n // may be _required_ to seek on startup before play can begin, but only if\n // autoplay is enabled.\n if (this.video_.paused && (this.video_.currentTime != this.startTime_ ||\n (!this.video_.autoplay && this.video_.currentTime == this.startTime_))) {\n return;\n }\n\n\n // When the ready state changes, we have moved on, so we should fire the\n // large gap event if we see one.\n if (this.video_.readyState != this.prevReadyState_) {\n this.prevReadyState_ = this.video_.readyState;\n }\n\n if (this.stallDetector_ && this.stallDetector_.poll()) {\n // Some action was taken by StallDetector, so don't do anything yet.\n return;\n }\n\n\n const currentTime = this.video_.currentTime;\n const buffered = this.video_.buffered;\n const gapDetectionThreshold = this.config_.gapDetectionThreshold;\n\n const gapIndex = shaka.media.TimeRangesUtils.getGapIndex(\n buffered, currentTime, gapDetectionThreshold);\n\n // The current time is unbuffered or is too far from a gap.\n if (gapIndex == null) {\n return;\n }\n\n // If we are before the first buffered range, this could be an unbuffered\n // seek. So wait until a segment is appended so we are sure it is a gap.\n if (gapIndex == 0 && !this.hadSegmentAppended_) {\n return;\n }\n\n // StreamingEngine can buffer past the seek end, but still don't allow\n // seeking past it.\n let jumpTo = buffered.start(gapIndex);\n // Workaround for Xbox with Legacy Edge. On this platform video element\n // often rounds value we want to set as currentTime and we are not able\n // to jump over the gap.\n if (shaka.util.Platform.isLegacyEdge() ||\n shaka.util.Platform.isXboxOne() ||\n shaka.util.Platform.isTizen()) {\n const gapPadding = this.config_.gapPadding;\n jumpTo = Math.ceil((jumpTo + gapPadding) * 100) / 100;\n }\n const seekEnd = this.timeline_.getSeekRangeEnd();\n if (jumpTo >= seekEnd) {\n return;\n }\n\n const jumpSize = jumpTo - currentTime;\n\n // If we jump to exactly the gap start, we may detect a small gap due to\n // rounding errors or browser bugs. We can ignore these extremely small\n // gaps since the browser should play through them for us.\n if (jumpSize < shaka.media.GapJumpingController.BROWSER_GAP_TOLERANCE) {\n return;\n }\n\n if (gapIndex == 0) {\n shaka.log.info(\n 'Jumping forward', jumpSize,\n 'seconds because of gap before start time of', jumpTo);\n } else {\n shaka.log.info(\n 'Jumping forward', jumpSize, 'seconds because of gap starting at',\n buffered.end(gapIndex - 1), 'and ending at', jumpTo);\n }\n\n this.video_.currentTime = jumpTo;\n // This accounts for the possibility that we jump a gap at the start\n // position but we jump _into_ another gap. By setting the start\n // position to the new jumpTo we ensure that the check above will\n // pass even though the video is still paused.\n if (currentTime == this.startTime_) {\n this.startTime_ = jumpTo;\n }\n this.gapsJumped_++;\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.util.FakeEvent.EventName.GapJumped));\n }\n};\n\n\n/**\n * The limit, in seconds, for the gap size that we will assume the browser will\n * handle for us.\n * @const\n */\nshaka.media.GapJumpingController.BROWSER_GAP_TOLERANCE = 0.001;\n\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.MediaReadyState');\n\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.Lazy');\n\n\nshaka.util.MediaReadyState = class {\n /**\n * @param {!HTMLMediaElement} mediaElement\n * @param {number} readyState\n * @param {shaka.util.EventManager} eventManager\n * @param {function()} callback\n */\n static waitForReadyState(mediaElement, readyState, eventManager, callback) {\n if (readyState == HTMLMediaElement.HAVE_NOTHING ||\n mediaElement.readyState >= readyState) {\n callback();\n } else {\n const MediaReadyState = shaka.util.MediaReadyState;\n const eventName =\n MediaReadyState.READY_STATES_TO_EVENT_NAMES_.value().get(readyState);\n eventManager.listenOnce(mediaElement, eventName, callback);\n }\n }\n};\n\n/**\n * @const {!shaka.util.Lazy.>}\n * @private\n */\nshaka.util.MediaReadyState.READY_STATES_TO_EVENT_NAMES_ =\n new shaka.util.Lazy(() => new Map([\n [HTMLMediaElement.HAVE_METADATA, 'loadedmetadata'],\n [HTMLMediaElement.HAVE_CURRENT_DATA, 'loadeddata'],\n [HTMLMediaElement.HAVE_FUTURE_DATA, 'canplay'],\n [HTMLMediaElement.HAVE_ENOUGH_DATA, 'canplaythrough'],\n ]));\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.VideoWrapper');\ngoog.provide('shaka.media.VideoWrapper.PlayheadMover');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.IReleasable');\ngoog.require('shaka.util.MediaReadyState');\ngoog.require('shaka.util.Timer');\n\n\n/**\n * Creates a new VideoWrapper that manages setting current time and playback\n * rate. This handles seeks before content is loaded and ensuring the video\n * time is set properly. This doesn't handle repositioning within the\n * presentation window.\n *\n * @implements {shaka.util.IReleasable}\n */\nshaka.media.VideoWrapper = class {\n /**\n * @param {!HTMLMediaElement} video\n * @param {function()} onSeek Called when the video seeks.\n * @param {function(number)} onStarted Called when the video has started.\n * @param {function():number} getStartTime Calle to get the time to start at.\n */\n constructor(video, onSeek, onStarted, getStartTime) {\n /** @private {HTMLMediaElement} */\n this.video_ = video;\n\n /** @private {function()} */\n this.onSeek_ = onSeek;\n\n /** @private {function(number)} */\n this.onStarted_ = onStarted;\n\n /** @private {?number} */\n this.startTime_ = null;\n\n /** @private {function():number} */\n this.getStartTime_ = () => {\n if (this.startTime_ == null) {\n this.startTime_ = getStartTime();\n }\n return this.startTime_;\n };\n\n /** @private {boolean} */\n this.started_ = false;\n\n /** @private {shaka.util.EventManager} */\n this.eventManager_ = new shaka.util.EventManager();\n\n /** @private {shaka.media.VideoWrapper.PlayheadMover} */\n this.mover_ = new shaka.media.VideoWrapper.PlayheadMover(\n /* mediaElement= */ video,\n /* maxAttempts= */ 10);\n\n // Before we can set the start time, we must check if the video element is\n // ready. If the video element is not ready, we cannot set the time. To work\n // around this, we will wait for the \"loadedmetadata\" event which tells us\n // that the media element is now ready.\n shaka.util.MediaReadyState.waitForReadyState(this.video_,\n HTMLMediaElement.HAVE_METADATA,\n this.eventManager_,\n () => {\n this.setStartTime_(this.getStartTime_());\n });\n }\n\n\n /** @override */\n release() {\n if (this.eventManager_) {\n this.eventManager_.release();\n this.eventManager_ = null;\n }\n\n if (this.mover_ != null) {\n this.mover_.release();\n this.mover_ = null;\n }\n\n this.onSeek_ = () => {};\n this.video_ = null;\n }\n\n\n /**\n * Gets the video's current (logical) position.\n *\n * @return {number}\n */\n getTime() {\n return this.started_ ? this.video_.currentTime : this.getStartTime_();\n }\n\n\n /**\n * Sets the current time of the video.\n *\n * @param {number} time\n */\n setTime(time) {\n if (this.video_.readyState > 0) {\n this.mover_.moveTo(time);\n } else {\n shaka.util.MediaReadyState.waitForReadyState(this.video_,\n HTMLMediaElement.HAVE_METADATA,\n this.eventManager_,\n () => {\n this.setStartTime_(this.getStartTime_());\n });\n }\n }\n\n\n /**\n * Set the start time for the content. The given start time will be ignored if\n * the content does not start at 0.\n *\n * @param {number} startTime\n * @private\n */\n setStartTime_(startTime) {\n // If we start close enough to our intended start time, then we won't do\n // anything special.\n if (Math.abs(this.video_.currentTime - startTime) < 0.001) {\n this.startListeningToSeeks_();\n return;\n }\n\n // We will need to delay adding our normal seeking listener until we have\n // seen the first seek event. We will force the first seek event later in\n // this method.\n this.eventManager_.listenOnce(this.video_, 'seeking', () => {\n this.startListeningToSeeks_();\n });\n\n // If the currentTime != 0, it indicates that the user has seeked after\n // calling |Player.load|, meaning that |currentTime| is more meaningful than\n // |startTime|.\n //\n // Seeking to the current time is a work around for Issue 1298 and 4888.\n // If we don't do this, the video may get stuck and not play.\n //\n // TODO: Need further investigation why it happens. Before and after\n // setting the current time, video.readyState is 1, video.paused is true,\n // and video.buffered's TimeRanges length is 0.\n // See: https://github.com/shaka-project/shaka-player/issues/1298\n this.mover_.moveTo(\n (!this.video_.currentTime || this.video_.currentTime == 0) ?\n startTime :\n this.video_.currentTime);\n }\n\n\n /**\n * Add the listener for seek-events. This will call the externally-provided\n * |onSeek| callback whenever the media element seeks.\n *\n * @private\n */\n startListeningToSeeks_() {\n goog.asserts.assert(\n this.video_.readyState > 0,\n 'The media element should be ready before we listen for seeking.');\n\n // Now that any startup seeking is complete, we can trust the video element\n // for currentTime.\n this.started_ = true;\n\n this.eventManager_.listen(this.video_, 'seeking', () => this.onSeek_());\n this.onStarted_(this.video_.currentTime);\n }\n};\n\n/**\n * A class used to move the playhead away from its current time. Sometimes,\n * legacy Edge ignores re-seeks. After changing the current time, check every\n * 100ms, retrying if the change was not accepted.\n *\n * Delay stats over 100 runs of a re-seeking integration test:\n * Edge - 0ms - 2%\n * Edge - 100ms - 40%\n * Edge - 200ms - 32%\n * Edge - 300ms - 24%\n * Edge - 400ms - 2%\n * Chrome - 0ms - 100%\n *\n * Unfortunately, legacy Edge is not receiving updates anymore, but it still\n * must be supported as it is used for web browsers on XBox.\n *\n * @implements {shaka.util.IReleasable}\n * @final\n */\nshaka.media.VideoWrapper.PlayheadMover = class {\n /**\n * @param {!HTMLMediaElement} mediaElement\n * The media element that the mover can manipulate.\n *\n * @param {number} maxAttempts\n * To prevent us from infinitely trying to change the current time, the\n * mover accepts a max attempts value. At most, the mover will check if the\n * video moved |maxAttempts| times. If this is zero of negative, no\n * attempts will be made.\n */\n constructor(mediaElement, maxAttempts) {\n /** @private {HTMLMediaElement} */\n this.mediaElement_ = mediaElement;\n\n /** @private {number} */\n this.maxAttempts_ = maxAttempts;\n\n /** @private {number} */\n this.remainingAttempts_ = 0;\n\n /** @private {number} */\n this.originTime_ = 0;\n\n /** @private {number} */\n this.targetTime_ = 0;\n\n /** @private {shaka.util.Timer} */\n this.timer_ = new shaka.util.Timer(() => this.onTick_());\n }\n\n /** @override */\n release() {\n if (this.timer_) {\n this.timer_.stop();\n this.timer_ = null;\n }\n\n this.mediaElement_ = null;\n }\n\n /**\n * Try forcing the media element to move to |timeInSeconds|. If a previous\n * call to |moveTo| is still in progress, this will override it.\n *\n * @param {number} timeInSeconds\n */\n moveTo(timeInSeconds) {\n this.originTime_ = this.mediaElement_.currentTime;\n this.targetTime_ = timeInSeconds;\n\n this.remainingAttempts_ = this.maxAttempts_;\n\n // Set the time and then start the timer. The timer will check if the set\n // was successful, and retry if not.\n this.mediaElement_.currentTime = timeInSeconds;\n this.timer_.tickEvery(/* seconds= */ 0.1);\n }\n\n /**\n * @private\n */\n onTick_() {\n // Sigh... We ran out of retries...\n if (this.remainingAttempts_ <= 0) {\n shaka.log.warning([\n 'Failed to move playhead from', this.originTime_,\n 'to', this.targetTime_,\n ].join(' '));\n\n this.timer_.stop();\n return;\n }\n\n // Yay! We were successful.\n if (this.mediaElement_.currentTime != this.originTime_ ||\n this.mediaElement_.currentTime === this.targetTime_) {\n this.timer_.stop();\n return;\n }\n\n // Sigh... Try again...\n this.mediaElement_.currentTime = this.targetTime_;\n this.remainingAttempts_--;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.MediaSourcePlayhead');\ngoog.provide('shaka.media.Playhead');\ngoog.provide('shaka.media.SrcEqualsPlayhead');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.media.GapJumpingController');\ngoog.require('shaka.media.StallDetector');\ngoog.require('shaka.media.StallDetector.MediaElementImplementation');\ngoog.require('shaka.media.TimeRangesUtils');\ngoog.require('shaka.media.VideoWrapper');\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.IReleasable');\ngoog.require('shaka.util.MediaReadyState');\ngoog.require('shaka.util.Platform');\ngoog.require('shaka.util.Timer');\ngoog.requireType('shaka.media.PresentationTimeline');\n\n\n/**\n * Creates a Playhead, which manages the video's current time.\n *\n * The Playhead provides mechanisms for setting the presentation's start time,\n * restricting seeking to valid time ranges, and stopping playback for startup\n * and re-buffering.\n *\n * @extends {shaka.util.IReleasable}\n * @interface\n */\nshaka.media.Playhead = class {\n /**\n * Called when the Player is ready to begin playback. Anything that depends\n * on setStartTime() should be done here, not in the constructor.\n *\n * @see https://github.com/shaka-project/shaka-player/issues/4244\n */\n ready() {}\n\n /**\n * Set the start time. If the content has already started playback, this will\n * be ignored.\n *\n * @param {number} startTime\n */\n setStartTime(startTime) {}\n\n /**\n * Get the number of playback stalls detected by the StallDetector.\n *\n * @return {number}\n */\n getStallsDetected() {}\n\n /**\n * Get the number of playback gaps jumped by the GapJumpingController.\n *\n * @return {number}\n */\n getGapsJumped() {}\n\n /**\n * Get the current playhead position. The position will be restricted to valid\n * time ranges.\n *\n * @return {number}\n */\n getTime() {}\n\n /**\n * Notify the playhead that the buffered ranges have changed.\n */\n notifyOfBufferingChange() {}\n};\n\n\n/**\n * A playhead implementation that only relies on the media element.\n *\n * @implements {shaka.media.Playhead}\n * @final\n */\nshaka.media.SrcEqualsPlayhead = class {\n /**\n * @param {!HTMLMediaElement} mediaElement\n */\n constructor(mediaElement) {\n /** @private {HTMLMediaElement} */\n this.mediaElement_ = mediaElement;\n /** @private {boolean} */\n this.started_ = false;\n /** @private {?number} */\n this.startTime_ = null;\n\n /** @private {shaka.util.EventManager} */\n this.eventManager_ = new shaka.util.EventManager();\n }\n\n /** @override */\n ready() {\n goog.asserts.assert(\n this.mediaElement_ != null,\n 'Playhead should not be released before calling ready()',\n );\n\n // We listen for the loaded-data-event so that we know when we can\n // interact with |currentTime|.\n const onLoaded = () => {\n if (this.startTime_ == null ||\n (this.startTime_ == 0 && this.mediaElement_.duration != Infinity)) {\n this.started_ = true;\n } else {\n const currentTime = this.mediaElement_.currentTime;\n let newTime = this.startTime_;\n // Using the currentTime allows using a negative number in Live HLS\n if (this.startTime_ < 0) {\n newTime = Math.max(0, currentTime + this.startTime_);\n }\n if (currentTime != newTime) {\n // Startup is complete only when the video element acknowledges the\n // seek.\n this.eventManager_.listenOnce(this.mediaElement_, 'seeking', () => {\n this.started_ = true;\n });\n this.mediaElement_.currentTime = newTime;\n } else {\n this.started_ = true;\n }\n }\n };\n\n shaka.util.MediaReadyState.waitForReadyState(this.mediaElement_,\n HTMLMediaElement.HAVE_CURRENT_DATA,\n this.eventManager_, () => {\n onLoaded();\n });\n }\n\n /** @override */\n release() {\n if (this.eventManager_) {\n this.eventManager_.release();\n this.eventManager_ = null;\n }\n\n this.mediaElement_ = null;\n }\n\n /** @override */\n setStartTime(startTime) {\n // If we have already started playback, ignore updates to the start time.\n // This is just to make things consistent.\n this.startTime_ = this.started_ ? this.startTime_ : startTime;\n }\n\n /** @override */\n getTime() {\n // If we have not started playback yet, return the start time. However once\n // we start playback we assume that we can always return the current time.\n const time = this.started_ ?\n this.mediaElement_.currentTime :\n this.startTime_;\n\n // In the case that we have not started playback, but the start time was\n // never set, we don't know what the start time should be. To ensure we\n // always return a number, we will default back to 0.\n return time || 0;\n }\n\n /** @override */\n getStallsDetected() {\n return 0;\n }\n\n /** @override */\n getGapsJumped() {\n return 0;\n }\n\n /** @override */\n notifyOfBufferingChange() {}\n};\n\n\n/**\n * A playhead implementation that relies on the media element and a manifest.\n * When provided with a manifest, we can provide more accurate control than\n * the SrcEqualsPlayhead.\n *\n * TODO: Clean up and simplify Playhead. There are too many layers of, methods\n * for, and conditions on timestamp adjustment.\n *\n * @implements {shaka.media.Playhead}\n * @final\n */\nshaka.media.MediaSourcePlayhead = class {\n /**\n * @param {!HTMLMediaElement} mediaElement\n * @param {shaka.extern.Manifest} manifest\n * @param {shaka.extern.StreamingConfiguration} config\n * @param {?number} startTime\n * The playhead's initial position in seconds. If null, defaults to the\n * start of the presentation for VOD and the live-edge for live.\n * @param {function()} onSeek\n * Called when the user agent seeks to a time within the presentation\n * timeline.\n * @param {function(!Event)} onEvent\n * Called when an event is raised to be sent to the application.\n */\n constructor(mediaElement, manifest, config, startTime, onSeek, onEvent) {\n /**\n * The seek range must be at least this number of seconds long. If it is\n * smaller than this, change it to be this big so we don't repeatedly seek\n * to keep within a zero-width window.\n *\n * This is 3s long, to account for the weaker hardware on platforms like\n * Chromecast.\n *\n * @private {number}\n */\n this.minSeekRange_ = 3.0;\n\n /** @private {HTMLMediaElement} */\n this.mediaElement_ = mediaElement;\n\n /** @private {shaka.media.PresentationTimeline} */\n this.timeline_ = manifest.presentationTimeline;\n\n /** @private {number} */\n this.minBufferTime_ = manifest.minBufferTime || 0;\n\n /** @private {?shaka.extern.StreamingConfiguration} */\n this.config_ = config;\n\n /** @private {function()} */\n this.onSeek_ = onSeek;\n\n /** @private {?number} */\n this.lastCorrectiveSeek_ = null;\n\n /** @private {shaka.media.StallDetector} */\n this.stallDetector_ =\n this.createStallDetector_(mediaElement, config, onEvent);\n\n /** @private {shaka.media.GapJumpingController} */\n this.gapController_ = new shaka.media.GapJumpingController(\n mediaElement,\n manifest.presentationTimeline,\n config,\n this.stallDetector_,\n onEvent);\n\n /** @private {shaka.media.VideoWrapper} */\n this.videoWrapper_ = new shaka.media.VideoWrapper(\n mediaElement,\n () => this.onSeeking_(),\n (realStartTime) => this.onStarted_(realStartTime),\n () => this.getStartTime_(startTime));\n\n /** @type {shaka.util.Timer} */\n this.checkWindowTimer_ = new shaka.util.Timer(() => {\n this.onPollWindow_();\n });\n }\n\n /** @override */\n ready() {\n this.checkWindowTimer_.tickEvery(/* seconds= */ 0.25);\n }\n\n /** @override */\n release() {\n if (this.videoWrapper_) {\n this.videoWrapper_.release();\n this.videoWrapper_ = null;\n }\n\n if (this.gapController_) {\n this.gapController_.release();\n this.gapController_= null;\n }\n\n if (this.checkWindowTimer_) {\n this.checkWindowTimer_.stop();\n this.checkWindowTimer_ = null;\n }\n\n this.config_ = null;\n this.timeline_ = null;\n this.videoWrapper_ = null;\n this.mediaElement_ = null;\n\n this.onSeek_ = () => {};\n }\n\n /** @override */\n setStartTime(startTime) {\n this.videoWrapper_.setTime(startTime);\n }\n\n /** @override */\n getTime() {\n const time = this.videoWrapper_.getTime();\n\n // Although we restrict the video's currentTime elsewhere, clamp it here to\n // ensure timing issues don't cause us to return a time outside the segment\n // availability window. E.g., the user agent seeks and calls this function\n // before we receive the 'seeking' event.\n //\n // We don't buffer when the livestream video is paused and the playhead time\n // is out of the seek range; thus, we do not clamp the current time when the\n // video is paused.\n // https://github.com/shaka-project/shaka-player/issues/1121\n if (this.mediaElement_.readyState > 0 && !this.mediaElement_.paused) {\n return this.clampTime_(time);\n }\n\n return time;\n }\n\n /** @override */\n getStallsDetected() {\n return this.stallDetector_ ? this.stallDetector_.getStallsDetected() : 0;\n }\n\n /** @override */\n getGapsJumped() {\n return this.gapController_.getGapsJumped();\n }\n\n /**\n * Gets the playhead's initial position in seconds.\n *\n * @param {?number} startTime\n * @return {number}\n * @private\n */\n getStartTime_(startTime) {\n if (startTime == null) {\n if (this.timeline_.getDuration() < Infinity) {\n // If the presentation is VOD, or if the presentation is live but has\n // finished broadcasting, then start from the beginning.\n startTime = this.timeline_.getSeekRangeStart();\n } else {\n // Otherwise, start near the live-edge.\n startTime = this.timeline_.getSeekRangeEnd();\n }\n } else if (startTime < 0) {\n // For live streams, if the startTime is negative, start from a certain\n // offset time from the live edge. If the offset from the live edge is\n // not available, start from the current available segment start point\n // instead, handled by clampTime_().\n startTime = this.timeline_.getSeekRangeEnd() + startTime;\n }\n\n return this.clampSeekToDuration_(this.clampTime_(startTime));\n }\n\n /** @override */\n notifyOfBufferingChange() {\n this.gapController_.onSegmentAppended();\n }\n\n /**\n * Called on a recurring timer to keep the playhead from falling outside the\n * availability window.\n *\n * @private\n */\n onPollWindow_() {\n // Don't catch up to the seek range when we are paused or empty.\n // The definition of \"seeking\" says that we are seeking until the buffered\n // data intersects with the playhead. If we fall outside of the seek range,\n // it doesn't matter if we are in a \"seeking\" state. We can and should go\n // ahead and catch up while seeking.\n if (this.mediaElement_.readyState == 0 || this.mediaElement_.paused) {\n return;\n }\n\n const currentTime = this.videoWrapper_.getTime();\n let seekStart = this.timeline_.getSeekRangeStart();\n const seekEnd = this.timeline_.getSeekRangeEnd();\n\n if (seekEnd - seekStart < this.minSeekRange_) {\n seekStart = seekEnd - this.minSeekRange_;\n }\n\n if (currentTime < seekStart) {\n // The seek range has moved past the playhead. Move ahead to catch up.\n const targetTime = this.reposition_(currentTime);\n shaka.log.info('Jumping forward ' + (targetTime - currentTime) +\n ' seconds to catch up with the seek range.');\n this.mediaElement_.currentTime = targetTime;\n }\n }\n\n /**\n * Called when the video element has started up and is listening for new seeks\n *\n * @param {number} startTime\n * @private\n */\n onStarted_(startTime) {\n this.gapController_.onStarted(startTime);\n }\n\n /**\n * Handles when a seek happens on the video.\n *\n * @private\n */\n onSeeking_() {\n this.gapController_.onSeeking();\n const currentTime = this.videoWrapper_.getTime();\n const targetTime = this.reposition_(currentTime);\n\n const gapLimit = shaka.media.GapJumpingController.BROWSER_GAP_TOLERANCE;\n if (Math.abs(targetTime - currentTime) > gapLimit) {\n let canCorrectiveSeek = false;\n if (shaka.util.Platform.isSeekingSlow()) {\n // You can only seek like this every so often. This is to prevent an\n // infinite loop on systems where changing currentTime takes a\n // significant amount of time (e.g. Chromecast).\n const time = Date.now() / 1000;\n const seekDelay = shaka.util.Platform.isFuchsiaCastDevice() ? 3 : 1;\n if (!this.lastCorrectiveSeek_ ||\n this.lastCorrectiveSeek_ < time - seekDelay) {\n this.lastCorrectiveSeek_ = time;\n canCorrectiveSeek = true;\n }\n } else {\n canCorrectiveSeek = true;\n }\n if (canCorrectiveSeek) {\n this.videoWrapper_.setTime(targetTime);\n return;\n }\n }\n\n shaka.log.v1('Seek to ' + currentTime);\n this.onSeek_();\n }\n\n /**\n * Clamp seek times and playback start times so that we never seek to the\n * presentation duration. Seeking to or starting at duration does not work\n * consistently across browsers.\n *\n * @see https://github.com/shaka-project/shaka-player/issues/979\n * @param {number} time\n * @return {number} The adjusted seek time.\n * @private\n */\n clampSeekToDuration_(time) {\n const duration = this.timeline_.getDuration();\n if (time >= duration) {\n goog.asserts.assert(this.config_.durationBackoff >= 0,\n 'Duration backoff must be non-negative!');\n return duration - this.config_.durationBackoff;\n }\n return time;\n }\n\n /**\n * Computes a new playhead position that's within the presentation timeline.\n *\n * @param {number} currentTime\n * @return {number} The time to reposition the playhead to.\n * @private\n */\n reposition_(currentTime) {\n goog.asserts.assert(\n this.config_,\n 'Cannot reposition playhead when it has beeen destroyed');\n\n /** @type {function(number)} */\n const isBuffered = (playheadTime) => shaka.media.TimeRangesUtils.isBuffered(\n this.mediaElement_.buffered, playheadTime);\n\n const rebufferingGoal = Math.max(\n this.minBufferTime_,\n this.config_.rebufferingGoal);\n\n const safeSeekOffset = this.config_.safeSeekOffset;\n\n let start = this.timeline_.getSeekRangeStart();\n const end = this.timeline_.getSeekRangeEnd();\n const duration = this.timeline_.getDuration();\n\n if (end - start < this.minSeekRange_) {\n start = end - this.minSeekRange_;\n }\n\n // With live content, the beginning of the availability window is moving\n // forward. This means we cannot seek to it since we will \"fall\" outside\n // the window while we buffer. So we define a \"safe\" region that is far\n // enough away. For VOD, |safe == start|.\n const safe = this.timeline_.getSafeSeekRangeStart(rebufferingGoal);\n\n // These are the times to seek to rather than the exact destinations. When\n // we seek, we will get another event (after a slight delay) and these steps\n // will run again. So if we seeked directly to |start|, |start| would move\n // on the next call and we would loop forever.\n const seekStart = this.timeline_.getSafeSeekRangeStart(safeSeekOffset);\n const seekSafe = this.timeline_.getSafeSeekRangeStart(\n rebufferingGoal + safeSeekOffset);\n\n if (currentTime >= duration) {\n shaka.log.v1('Playhead past duration.');\n return this.clampSeekToDuration_(currentTime);\n }\n\n if (currentTime > end) {\n shaka.log.v1('Playhead past end.');\n // We remove the safeSeekEndOffset of the seek end to avoid the player\n // to be block at the edge in a live stream\n return end - this.config_.safeSeekEndOffset;\n }\n\n if (currentTime < start) {\n if (isBuffered(seekStart)) {\n shaka.log.v1('Playhead before start & start is buffered');\n return seekStart;\n } else {\n shaka.log.v1('Playhead before start & start is unbuffered');\n return seekSafe;\n }\n }\n\n if (currentTime >= safe || isBuffered(currentTime)) {\n shaka.log.v1('Playhead in safe region or in buffered region.');\n return currentTime;\n } else {\n shaka.log.v1('Playhead outside safe region & in unbuffered region.');\n return seekSafe;\n }\n }\n\n /**\n * Clamps the given time to the seek range.\n *\n * @param {number} time The time in seconds.\n * @return {number} The clamped time in seconds.\n * @private\n */\n clampTime_(time) {\n const start = this.timeline_.getSeekRangeStart();\n if (time < start) {\n return start;\n }\n\n const end = this.timeline_.getSeekRangeEnd();\n if (time > end) {\n return end;\n }\n\n return time;\n }\n\n /**\n * Create and configure a stall detector using the player's streaming\n * configuration settings. If the player is configured to have no stall\n * detector, this will return |null|.\n *\n * @param {!HTMLMediaElement} mediaElement\n * @param {shaka.extern.StreamingConfiguration} config\n * @param {function(!Event)} onEvent\n * Called when an event is raised to be sent to the application.\n * @return {shaka.media.StallDetector}\n * @private\n */\n createStallDetector_(mediaElement, config, onEvent) {\n if (!config.stallEnabled) {\n return null;\n }\n\n // Cache the values from the config so that changes to the config won't\n // change the initialized behaviour.\n const threshold = config.stallThreshold;\n const skip = config.stallSkip;\n\n // When we see a stall, we will try to \"jump-start\" playback by moving the\n // playhead forward.\n const detector = new shaka.media.StallDetector(\n new shaka.media.StallDetector.MediaElementImplementation(mediaElement),\n threshold, onEvent);\n\n detector.onStall((at, duration) => {\n shaka.log.debug(`Stall detected at ${at} for ${duration} seconds.`);\n\n if (skip) {\n shaka.log.debug(`Seeking forward ${skip} seconds to break stall.`);\n mediaElement.currentTime += skip;\n } else {\n shaka.log.debug('Pausing and unpausing to break stall.');\n mediaElement.pause();\n mediaElement.play();\n }\n });\n\n return detector;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.PlayRateController');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.util.IReleasable');\ngoog.require('shaka.util.Timer');\n\n/**\n * The play rate controller controls the playback rate on the media element.\n * This provides some missing functionality (e.g. negative playback rate). If\n * the playback rate on the media element can change outside of the controller,\n * the playback controller will need to be updated to stay in-sync.\n *\n * @implements {shaka.util.IReleasable}\n * @final\n */\nshaka.media.PlayRateController = class {\n /**\n * @param {shaka.media.PlayRateController.Harness} harness\n */\n constructor(harness) {\n /** @private {?shaka.media.PlayRateController.Harness} */\n this.harness_ = harness;\n\n /** @private {boolean} */\n this.isBuffering_ = false;\n\n /** @private {number} */\n this.rate_ = this.harness_.getRate();\n\n /** @private {number} */\n this.pollRate_ = 0.25;\n\n /** @private {shaka.util.Timer} */\n this.timer_ = new shaka.util.Timer(() => {\n this.harness_.movePlayhead(this.rate_ * this.pollRate_);\n });\n }\n\n /** @override */\n release() {\n this.set(this.getDefaultRate());\n if (this.timer_) {\n this.timer_.stop();\n this.timer_ = null;\n }\n\n this.harness_ = null;\n }\n\n /**\n * Sets the buffering flag, which controls the effective playback rate.\n *\n * @param {boolean} isBuffering If true, forces playback rate to 0 internally.\n */\n setBuffering(isBuffering) {\n this.isBuffering_ = isBuffering;\n this.apply_();\n }\n\n /**\n * Set the playback rate. This rate will only be used as provided when the\n * player is not buffering. You should never set the rate to 0.\n *\n * @param {number} rate\n */\n set(rate) {\n goog.asserts.assert(rate != 0, 'Should never set rate of 0 explicitly!');\n this.rate_ = rate;\n this.apply_();\n }\n\n /**\n * Get the real rate of the playback. This means that if we are using trick\n * play, this will report the trick play rate. If playback is occurring as\n * normal, this will report 1.\n *\n * @return {number}\n */\n getRealRate() {\n return this.rate_;\n }\n\n /**\n * Get the default play rate of the playback.\n *\n * @return {number}\n */\n getDefaultRate() {\n return this.harness_.getDefaultRate();\n }\n\n /**\n * Reapply the effects of |this.rate_| and |this.active_| to the media\n * element. This will only update the rate via the harness if the desired rate\n * has changed.\n *\n * @private\n */\n apply_() {\n // Always stop the timer. We may not start it again.\n this.timer_.stop();\n\n /** @type {number} */\n const rate = this.calculateCurrentRate_();\n\n shaka.log.v1('Changing effective playback rate to', rate);\n\n if (rate >= 0) {\n try {\n this.applyRate_(rate);\n return;\n } catch (e) {\n // Fall through to the next clause.\n //\n // Fast forward is accomplished through setting video.playbackRate.\n // If the play rate value is not supported by the browser (too big),\n // the browsers will throw.\n // Use this as a cue to fall back to fast forward through repeated\n // seeking, which is what we do for rewind as well.\n }\n }\n\n // When moving backwards or forwards in large steps,\n // set the playback rate to 0 so that we can manually\n // seek backwards with out fighting the playhead.\n this.timer_.tickEvery(this.pollRate_);\n this.applyRate_(0);\n }\n\n /**\n * Calculate the rate that the controller wants the media element to have\n * based on the current state of the controller.\n *\n * @return {number}\n * @private\n */\n calculateCurrentRate_() {\n return this.isBuffering_ ? 0 : this.rate_;\n }\n\n /**\n * If the new rate is different than the media element's playback rate, this\n * will change the playback rate. If the rate does not need to change, it will\n * not be set. This will avoid unnecessary ratechange events.\n *\n * @param {number} newRate\n * @return {boolean}\n * @private\n */\n applyRate_(newRate) {\n const oldRate = this.harness_.getRate();\n\n if (oldRate != newRate) {\n this.harness_.setRate(newRate);\n }\n\n return oldRate != newRate;\n }\n};\n\n\n/**\n * @typedef {{\n * getRate: function():number,\n * getDefaultRate: function():number,\n * setRate: function(number),\n * movePlayhead: function(number)\n * }}\n *\n * @description\n * A layer of abstraction between the controller and what it is controlling.\n * In tests this will be implemented with spies. In production this will be\n * implemented using a media element.\n *\n * @property {function():number} getRate\n * Get the current playback rate being seen by the user.\n *\n * @property {function():number} getDefaultRate\n * Get the default playback rate that the user should see.\n *\n * @property {function(number)} setRate\n * Set the playback rate that the user should see.\n *\n * @property {function(number)} movePlayhead\n * Move the playhead N seconds. If N is positive, the playhead will move\n * forward abs(N) seconds. If N is negative, the playhead will move backwards\n * abs(N) seconds.\n */\nshaka.media.PlayRateController.Harness;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.IPlayheadObserver');\ngoog.provide('shaka.media.PlayheadObserverManager');\n\ngoog.require('shaka.util.IReleasable');\ngoog.require('shaka.util.Timer');\n\n\n/**\n * A playhead observer is a system that watches for meaningful changes in state\n * that are dependent on playhead information. The observer is responsible for\n * managing its own listeners.\n *\n * @extends {shaka.util.IReleasable}\n * @interface\n */\nshaka.media.IPlayheadObserver = class {\n /**\n * Check again (using an update playhead summary) if an event should be fired.\n * If an event should be fired, fire it.\n *\n * @param {number} positionInSeconds\n * @param {boolean} wasSeeking\n */\n poll(positionInSeconds, wasSeeking) {}\n};\n\n\n/**\n * The playhead observer manager is responsible for owning playhead observer\n * instances and polling them when needed. Destroying the manager will destroy\n * all observers managed by the manager.\n *\n * @implements {shaka.util.IReleasable}\n * @final\n */\nshaka.media.PlayheadObserverManager = class {\n /**\n * @param {!HTMLMediaElement} mediaElement\n */\n constructor(mediaElement) {\n /** @private {HTMLMediaElement} */\n this.mediaElement_ = mediaElement;\n\n /**\n * The set of all observers that this manager is responsible for updating.\n * We are using a set to ensure that we don't double update an observer if\n * it is accidentally added twice.\n *\n * @private {!Set.}\n */\n this.observers_ = new Set();\n\n /**\n * To fire events semi-accurately, poll the observers 4 times a second. This\n * should be frequent enough to trigger an event close enough to its actual\n * occurrence without the user noticing a delay.\n *\n * @private {shaka.util.Timer}\n */\n this.pollingLoop_ = new shaka.util.Timer(() => {\n this.pollAllObservers_(/* seeking= */ false);\n }).tickEvery(/* seconds= */ 0.25);\n }\n\n /** @override */\n release() {\n // We need to stop the loop or else we may try to use a released resource.\n this.pollingLoop_.stop();\n\n for (const observer of this.observers_) {\n observer.release();\n }\n\n this.observers_.clear();\n }\n\n /**\n * Have the playhead observer manager manage a new observer. This will ensure\n * that observers are only tracked once within the manager. After this call,\n * the manager will be responsible for the life cycle of |observer|.\n *\n * @param {!shaka.media.IPlayheadObserver} observer\n */\n manage(observer) {\n this.observers_.add(observer);\n }\n\n /**\n * Notify all the observers that we just seeked.\n */\n notifyOfSeek() {\n this.pollAllObservers_(/* seeking= */ true);\n }\n\n /**\n * @param {boolean} seeking\n * @private\n */\n pollAllObservers_(seeking) {\n for (const observer of this.observers_) {\n observer.poll(\n this.mediaElement_.currentTime,\n seeking);\n }\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.StateHistory');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\n\n\n/**\n * This class is used to track the time spent in arbitrary states. When told of\n * a state, it will assume that state was active until a new state is provided.\n * When provided with identical states back-to-back, the existing entry will be\n * updated.\n *\n * @final\n */\nshaka.util.StateHistory = class {\n /** */\n constructor() {\n /**\n * The state that we think is still the current change. It is \"open\" for\n * updating.\n *\n * @private {?shaka.extern.StateChange}\n */\n this.open_ = null;\n\n /**\n * The stats that are \"closed\" for updating. The \"open\" state becomes closed\n * once we move to a new state.\n *\n * @private {!Array.}\n */\n this.closed_ = [];\n }\n\n /**\n * @param {string} state\n * @return {boolean} True if this changed the state\n */\n update(state) {\n // |open_| will only be |null| when we first call |update|.\n if (this.open_ == null) {\n this.start_(state);\n return true;\n } else {\n return this.update_(state);\n }\n }\n\n /**\n * Go through all entries in the history and count how much time was spend in\n * the given state.\n *\n * @param {string} state\n * @return {number}\n */\n getTimeSpentIn(state) {\n let sum = 0;\n\n if (this.open_ && this.open_.state == state) {\n sum += this.open_.duration;\n }\n\n for (const entry of this.closed_) {\n sum += entry.state == state ? entry.duration : 0;\n }\n\n return sum;\n }\n\n /**\n * Get a copy of each state change entry in the history. A copy of each entry\n * is created to break the reference to the internal data.\n *\n * @return {!Array.}\n */\n getCopy() {\n const clone = (entry) => {\n return {\n timestamp: entry.timestamp,\n state: entry.state,\n duration: entry.duration,\n };\n };\n\n const copy = [];\n for (const entry of this.closed_) {\n copy.push(clone(entry));\n }\n if (this.open_) {\n copy.push(clone(this.open_));\n }\n\n return copy;\n }\n\n /**\n * @param {string} state\n * @private\n */\n start_(state) {\n goog.asserts.assert(\n this.open_ == null,\n 'There must be no open entry in order when we start');\n shaka.log.v1('Changing Player state to', state);\n\n this.open_ = {\n timestamp: this.getNowInSeconds_(),\n state: state,\n duration: 0,\n };\n }\n\n /**\n * @param {string} state\n * @return {boolean} True if this changed the state\n * @private\n */\n update_(state) {\n goog.asserts.assert(\n this.open_,\n 'There must be an open entry in order to update it');\n\n const currentTimeSeconds = this.getNowInSeconds_();\n\n // Always update the duration so that it can always be as accurate as\n // possible.\n this.open_.duration = currentTimeSeconds - this.open_.timestamp;\n\n // If the state has not changed, there is no need to add a new entry.\n if (this.open_.state == state) {\n return false;\n }\n\n // We have changed states, so \"close\" the open state.\n shaka.log.v1('Changing Player state to', state);\n this.closed_.push(this.open_);\n this.open_ = {\n timestamp: currentTimeSeconds,\n state: state,\n duration: 0,\n };\n return true;\n }\n\n /**\n * Get the system time in seconds.\n *\n * @return {number}\n * @private\n */\n getNowInSeconds_() {\n return Date.now() / 1000;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.SwitchHistory');\n\n\n/**\n * This class is used to track changes in variant and text selections. This\n * class will make sure that redundant switches are not recorded in the history.\n *\n * @final\n */\nshaka.util.SwitchHistory = class {\n /** */\n constructor() {\n /** @private {?shaka.extern.Variant} */\n this.currentVariant_ = null;\n\n /** @private {?shaka.extern.Stream} */\n this.currentText_ = null;\n\n /** @private {!Array.} */\n this.history_ = [];\n }\n\n /**\n * Update the history to show that we are currently playing |newVariant|. If\n * we are already playing |newVariant|, this update will be ignored.\n *\n * @param {shaka.extern.Variant} newVariant\n * @param {boolean} fromAdaptation\n */\n updateCurrentVariant(newVariant, fromAdaptation) {\n if (this.currentVariant_ == newVariant) {\n return;\n }\n\n this.currentVariant_ = newVariant;\n this.history_.push({\n timestamp: this.getNowInSeconds_(),\n id: newVariant.id,\n type: 'variant',\n fromAdaptation: fromAdaptation,\n bandwidth: newVariant.bandwidth,\n });\n }\n\n /**\n * Update the history to show that we are currently playing |newText|. If we\n * are already playing |newText|, this update will be ignored.\n *\n * @param {shaka.extern.Stream} newText\n * @param {boolean} fromAdaptation\n */\n updateCurrentText(newText, fromAdaptation) {\n if (this.currentText_ == newText) {\n return;\n }\n\n this.currentText_ = newText;\n this.history_.push({\n timestamp: this.getNowInSeconds_(),\n id: newText.id,\n type: 'text',\n fromAdaptation: fromAdaptation,\n bandwidth: null,\n });\n }\n\n /**\n * Get a copy of the switch history. This will make sure to expose no internal\n * references.\n *\n * @return {!Array.}\n */\n getCopy() {\n const copy = [];\n\n for (const entry of this.history_) {\n copy.push(this.clone_(entry));\n }\n\n return copy;\n }\n\n /**\n * Get the system time in seconds.\n *\n * @return {number}\n * @private\n */\n getNowInSeconds_() {\n return Date.now() / 1000;\n }\n\n /**\n * @param {shaka.extern.TrackChoice} entry\n * @return {shaka.extern.TrackChoice}\n * @private\n */\n clone_(entry) {\n return {\n timestamp: entry.timestamp,\n id: entry.id,\n type: entry.type,\n fromAdaptation: entry.fromAdaptation,\n bandwidth: entry.bandwidth,\n };\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.Stats');\n\ngoog.require('shaka.util.StateHistory');\ngoog.require('shaka.util.SwitchHistory');\n\n\n/**\n * This class tracks all the various components (some optional) that are used to\n * populate |shaka.extern.Stats| which is passed to the app.\n *\n * @final\n */\nshaka.util.Stats = class {\n /** */\n constructor() {\n /** @private {number} */\n this.width_ = NaN;\n /** @private {number} */\n this.height_ = NaN;\n\n /** @private {number} */\n this.totalDroppedFrames_ = NaN;\n /** @private {number} */\n this.totalDecodedFrames_ = NaN;\n /** @private {number} */\n this.totalCorruptedFrames_ = NaN;\n\n /** @private {number} */\n this.totalStallsDetected_ = NaN;\n /** @private {number} */\n this.totalGapsJumped_ = NaN;\n\n /** @private {number} */\n this.completionPercent_ = NaN;\n\n /** @private {number} */\n this.loadLatencySeconds_ = NaN;\n\n /** @private {number} */\n this.manifestTimeSeconds_ = NaN;\n\n /** @private {number} */\n this.drmTimeSeconds_ = NaN;\n\n /** @private {number} */\n this.licenseTimeSeconds_ = NaN;\n\n /** @private {number} */\n this.liveLatencySeconds_ = NaN;\n\n /** @private {number} */\n this.maxSegmentDurationSeconds_ = NaN;\n\n /** @private {number} */\n this.currentStreamBandwidth_ = NaN;\n /** @private {number} */\n this.bandwidthEstimate_ = NaN;\n\n /** @private {number} */\n this.manifestSizeBytes_ = NaN;\n /** @private {number} */\n this.bytesDownloaded_ = NaN;\n\n /** @private {number} */\n this.nonFatalErrorCount_ = 0;\n /** @private {number} */\n this.manifestPeriodCount_ = NaN;\n /** @private {number} */\n this.manifestGapCount_ = NaN;\n\n /** @private {!shaka.util.StateHistory} */\n this.stateHistory_ = new shaka.util.StateHistory();\n\n /** @private {!shaka.util.SwitchHistory} */\n this.switchHistory_ = new shaka.util.SwitchHistory();\n }\n\n /**\n * Update the ratio of dropped frames to total frames. This will replace the\n * previous values.\n *\n * @param {number} dropped\n * @param {number} decoded\n */\n setDroppedFrames(dropped, decoded) {\n this.totalDroppedFrames_ = dropped;\n this.totalDecodedFrames_ = decoded;\n }\n\n /**\n * Update corrupted frames. This will replace the previous values.\n *\n * @param {number} corrupted\n */\n setCorruptedFrames(corrupted) {\n this.totalCorruptedFrames_ = corrupted;\n }\n\n /**\n * Update number of stalls detected. This will replace the previous value.\n *\n * @param {number} stallsDetected\n */\n setStallsDetected(stallsDetected) {\n this.totalStallsDetected_ = stallsDetected;\n }\n\n /**\n * Update number of playback gaps jumped over. This will replace the previous\n * value.\n *\n * @param {number} gapsJumped\n */\n setGapsJumped(gapsJumped) {\n this.totalGapsJumped_ = gapsJumped;\n }\n\n /**\n * Set the width and height of the video we are currently playing.\n *\n * @param {number} width\n * @param {number} height\n */\n setResolution(width, height) {\n this.width_ = width;\n this.height_ = height;\n }\n\n /**\n * Record the time it took between the user signalling \"I want to play this\"\n * to \"I am now seeing this\".\n *\n * @param {number} seconds\n */\n setLoadLatency(seconds) {\n this.loadLatencySeconds_ = seconds;\n }\n\n /**\n * Record the time it took to download and parse the manifest.\n *\n * @param {number} seconds\n */\n setManifestTime(seconds) {\n this.manifestTimeSeconds_ = seconds;\n }\n\n /**\n * Record the current completion percent. This is the \"high water mark\", so it\n * will store the highest provided completion percent.\n *\n * @param {number} percent\n */\n setCompletionPercent(percent) {\n if (isNaN(this.completionPercent_)) {\n this.completionPercent_ = percent;\n } else {\n this.completionPercent_ = Math.max(this.completionPercent_, percent);\n }\n }\n\n /**\n * Record the time it took to download the first drm key.\n *\n * @param {number} seconds\n */\n setDrmTime(seconds) {\n this.drmTimeSeconds_ = seconds;\n }\n\n /**\n * Record the cumulative time spent on license requests during this session.\n *\n * @param {number} seconds\n */\n setLicenseTime(seconds) {\n this.licenseTimeSeconds_ = seconds;\n }\n\n /**\n * Record the latency in live streams.\n *\n * @param {number} seconds\n */\n setLiveLatency(seconds) {\n this.liveLatencySeconds_ = seconds;\n }\n\n /**\n * Record the presentation's max segment duration.\n *\n * @param {number} seconds\n */\n setMaxSegmentDuration(seconds) {\n this.maxSegmentDurationSeconds_ = seconds;\n }\n\n /**\n * @param {number} bandwidth\n */\n setCurrentStreamBandwidth(bandwidth) {\n this.currentStreamBandwidth_ = bandwidth;\n }\n\n /**\n * @param {number} bandwidth\n */\n setBandwidthEstimate(bandwidth) {\n this.bandwidthEstimate_ = bandwidth;\n }\n\n /**\n * @param {number} size\n */\n setManifestSize(size) {\n this.manifestSizeBytes_ = size;\n }\n\n /**\n * @param {number} bytesDownloaded\n */\n addBytesDownloaded(bytesDownloaded) {\n if (isNaN(this.bytesDownloaded_)) {\n this.bytesDownloaded_ = bytesDownloaded;\n } else {\n this.bytesDownloaded_ += bytesDownloaded;\n }\n }\n\n /** */\n addNonFatalError() {\n this.nonFatalErrorCount_++;\n }\n\n /**\n * @param {number} count\n */\n setManifestPeriodCount(count) {\n this.manifestPeriodCount_ = count;\n }\n\n /**\n * @param {number} count\n */\n setManifestGapCount(count) {\n this.manifestGapCount_ = count;\n }\n\n /**\n * @return {!shaka.util.StateHistory}\n */\n getStateHistory() {\n return this.stateHistory_;\n }\n\n /**\n * @return {!shaka.util.SwitchHistory}\n */\n getSwitchHistory() {\n return this.switchHistory_;\n }\n\n /**\n * Create a stats blob that we can pass up to the app. This blob will not\n * reference any internal data.\n *\n * @return {shaka.extern.Stats}\n */\n getBlob() {\n return {\n width: this.width_,\n height: this.height_,\n streamBandwidth: this.currentStreamBandwidth_,\n decodedFrames: this.totalDecodedFrames_,\n droppedFrames: this.totalDroppedFrames_,\n corruptedFrames: this.totalCorruptedFrames_,\n stallsDetected: this.totalStallsDetected_,\n gapsJumped: this.totalGapsJumped_,\n estimatedBandwidth: this.bandwidthEstimate_,\n completionPercent: this.completionPercent_,\n loadLatency: this.loadLatencySeconds_,\n manifestTimeSeconds: this.manifestTimeSeconds_,\n drmTimeSeconds: this.drmTimeSeconds_,\n playTime: this.stateHistory_.getTimeSpentIn('playing'),\n pauseTime: this.stateHistory_.getTimeSpentIn('paused'),\n bufferingTime: this.stateHistory_.getTimeSpentIn('buffering'),\n licenseTime: this.licenseTimeSeconds_,\n liveLatency: this.liveLatencySeconds_,\n maxSegmentDuration: this.maxSegmentDurationSeconds_,\n manifestSizeBytes: this.manifestSizeBytes_,\n bytesDownloaded: this.bytesDownloaded_,\n nonFatalErrorCount: this.nonFatalErrorCount_,\n manifestPeriodCount: this.manifestPeriodCount_,\n manifestGapCount: this.manifestGapCount_,\n stateHistory: this.stateHistory_.getCopy(),\n switchHistory: this.switchHistory_.getCopy(),\n };\n }\n\n /**\n * Create an empty stats blob. This resembles the stats when we are not\n * playing any content.\n *\n * @return {shaka.extern.Stats}\n */\n static getEmptyBlob() {\n return {\n width: NaN,\n height: NaN,\n streamBandwidth: NaN,\n decodedFrames: NaN,\n droppedFrames: NaN,\n corruptedFrames: NaN,\n stallsDetected: NaN,\n gapsJumped: NaN,\n estimatedBandwidth: NaN,\n completionPercent: NaN,\n loadLatency: NaN,\n manifestTimeSeconds: NaN,\n drmTimeSeconds: NaN,\n playTime: NaN,\n pauseTime: NaN,\n bufferingTime: NaN,\n licenseTime: NaN,\n liveLatency: NaN,\n maxSegmentDuration: NaN,\n manifestSizeBytes: NaN,\n bytesDownloaded: NaN,\n nonFatalErrorCount: NaN,\n manifestPeriodCount: NaN,\n manifestGapCount: NaN,\n switchHistory: [],\n stateHistory: [],\n };\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.SegmentPrefetch');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.media.InitSegmentReference');\ngoog.require('shaka.media.SegmentIterator');\ngoog.require('shaka.media.SegmentReference');\ngoog.require('shaka.net.NetworkingEngine');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.Uint8ArrayUtils');\n\n\n/**\n * @summary\n * This class manages segment prefetch operations.\n * Called by StreamingEngine to prefetch next N segments\n * ahead of playhead, to reduce the chances of rebuffering.\n */\nshaka.media.SegmentPrefetch = class {\n /**\n * @param {number} prefetchLimit\n * @param {shaka.extern.Stream} stream\n * @param {shaka.media.SegmentPrefetch.FetchDispatcher} fetchDispatcher\n * @param {boolean} reverse\n */\n constructor(prefetchLimit, stream, fetchDispatcher, reverse) {\n /** @private {number} */\n this.prefetchLimit_ = prefetchLimit;\n\n /** @private {shaka.extern.Stream} */\n this.stream_ = stream;\n\n /** @private {shaka.media.SegmentPrefetch.FetchDispatcher} */\n this.fetchDispatcher_ = fetchDispatcher;\n\n /**\n * @private {!Map.<\n * !(shaka.media.SegmentReference),\n * !shaka.media.SegmentPrefetchOperation>}\n */\n this.segmentPrefetchMap_ = new Map();\n\n /**\n * @private {!Map.<\n * !(shaka.media.InitSegmentReference),\n * !shaka.media.SegmentPrefetchOperation>}\n */\n this.initSegmentPrefetchMap_ = new Map();\n\n /** @private {?shaka.media.SegmentIterator} */\n this.iterator_ = null;\n\n /** @private {boolean} */\n this.reverse_ = reverse;\n }\n\n /**\n * @param {shaka.media.SegmentPrefetch.FetchDispatcher} fetchDispatcher\n */\n replaceFetchDispatcher(fetchDispatcher) {\n this.fetchDispatcher_ = fetchDispatcher;\n for (const operation of this.segmentPrefetchMap_.values()) {\n operation.replaceFetchDispatcher(fetchDispatcher);\n }\n }\n\n /**\n * Fetch next segments ahead of current time.\n *\n * @param {number} currTime\n * @param {boolean=} skipFirst\n * @return {!Promise}\n * @public\n */\n prefetchSegmentsByTime(currTime, skipFirst = false) {\n goog.asserts.assert(this.prefetchLimit_ > 0,\n 'SegmentPrefetch can not be used when prefetchLimit <= 0.');\n\n const logPrefix = shaka.media.SegmentPrefetch.logPrefix_(this.stream_);\n if (!this.stream_.segmentIndex) {\n shaka.log.debug(logPrefix, 'missing segmentIndex');\n return Promise.resolve();\n }\n if (!this.iterator_) {\n this.iterator_ = this.stream_.segmentIndex.getIteratorForTime(\n currTime, /* allowNonIndepedent= */ true, this.reverse_);\n }\n if (!this.iterator_) {\n shaka.log.debug(logPrefix, 'missing iterator');\n return Promise.resolve();\n }\n if (skipFirst) {\n this.iterator_.next();\n }\n const promises = [];\n while (this.segmentPrefetchMap_.size < this.prefetchLimit_) {\n const reference = this.iterator_.next().value;\n if (!reference) {\n break;\n }\n // By default doesn't prefech preload partial segments when using\n // byterange\n let prefetchAllowed = true;\n if (reference.isPreload() && reference.endByte != null) {\n prefetchAllowed = false;\n }\n if (reference.getStatus() ==\n shaka.media.SegmentReference.Status.MISSING) {\n prefetchAllowed = false;\n }\n if (reference.getSegmentData()) {\n prefetchAllowed = false;\n }\n if (prefetchAllowed && reference.initSegmentReference) {\n promises.push(this.prefetchInitSegment(\n reference.initSegmentReference));\n }\n if (prefetchAllowed && !this.segmentPrefetchMap_.has(reference)) {\n const segmentPrefetchOperation =\n new shaka.media.SegmentPrefetchOperation(this.fetchDispatcher_);\n promises.push(segmentPrefetchOperation.dispatchFetch(\n reference, this.stream_));\n this.segmentPrefetchMap_.set(reference, segmentPrefetchOperation);\n }\n }\n this.clearInitSegments_();\n return Promise.all(promises);\n }\n\n /**\n * Fetch init segment.\n *\n * @param {!shaka.media.InitSegmentReference} initSegmentReference\n * @return {!Promise}\n */\n prefetchInitSegment(initSegmentReference) {\n goog.asserts.assert(this.prefetchLimit_ > 0,\n 'SegmentPrefetch can not be used when prefetchLimit <= 0.');\n\n const logPrefix = shaka.media.SegmentPrefetch.logPrefix_(this.stream_);\n if (!this.stream_.segmentIndex) {\n shaka.log.debug(logPrefix, 'missing segmentIndex');\n return Promise.resolve();\n }\n\n if (initSegmentReference.getSegmentData()) {\n return Promise.resolve();\n }\n\n // init segments are ignored from the prefetch limit\n const initSegments = Array.from(this.initSegmentPrefetchMap_.keys());\n const someReference = initSegments.some((reference) => {\n return shaka.media.InitSegmentReference.equal(\n reference, initSegmentReference);\n });\n if (someReference) {\n return Promise.resolve();\n }\n const segmentPrefetchOperation = new shaka.media.SegmentPrefetchOperation(\n this.fetchDispatcher_);\n const promise = segmentPrefetchOperation.dispatchFetch(\n initSegmentReference, this.stream_);\n this.initSegmentPrefetchMap_.set(\n initSegmentReference, segmentPrefetchOperation);\n return promise;\n }\n\n /**\n * Get the result of prefetched segment if already exists.\n * @param {!(shaka.media.SegmentReference|shaka.media.InitSegmentReference)}\n * reference\n * @param {?function(BufferSource):!Promise=} streamDataCallback\n * @return {?shaka.net.NetworkingEngine.PendingRequest} op\n * @public\n */\n getPrefetchedSegment(reference, streamDataCallback) {\n goog.asserts.assert(this.prefetchLimit_ > 0,\n 'SegmentPrefetch can not be used when prefetchLimit <= 0.');\n\n const logPrefix = shaka.media.SegmentPrefetch.logPrefix_(this.stream_);\n\n let prefetchMap = this.segmentPrefetchMap_;\n if (reference instanceof shaka.media.InitSegmentReference) {\n prefetchMap = this.initSegmentPrefetchMap_;\n }\n\n if (prefetchMap.has(reference)) {\n const segmentPrefetchOperation = prefetchMap.get(reference);\n if (streamDataCallback) {\n segmentPrefetchOperation.setStreamDataCallback(streamDataCallback);\n }\n if (reference instanceof shaka.media.SegmentReference) {\n shaka.log.debug(\n logPrefix,\n 'reused prefetched segment at time:', reference.startTime,\n 'mapSize', prefetchMap.size);\n } else {\n shaka.log.debug(\n logPrefix,\n 'reused prefetched init segment at time, mapSize',\n prefetchMap.size);\n }\n return segmentPrefetchOperation.getOperation();\n } else {\n if (reference instanceof shaka.media.SegmentReference) {\n shaka.log.debug(\n logPrefix,\n 'missed segment at time:', reference.startTime,\n 'mapSize', prefetchMap.size);\n } else {\n shaka.log.debug(\n logPrefix,\n 'missed init segment at time, mapSize',\n prefetchMap.size);\n }\n return null;\n }\n }\n\n /**\n * Clear All Helper\n * @private\n */\n clearMap_(map) {\n for (const reference of map.keys()) {\n if (reference) {\n this.abortPrefetchedSegment_(reference);\n }\n }\n }\n\n /** */\n resetPosition() {\n this.iterator_ = null;\n }\n\n /**\n * Clear all segment data.\n * @public\n */\n clearAll() {\n this.clearMap_(this.segmentPrefetchMap_);\n this.clearMap_(this.initSegmentPrefetchMap_);\n this.resetPosition();\n const logPrefix = shaka.media.SegmentPrefetch.logPrefix_(this.stream_);\n shaka.log.debug(logPrefix, 'cleared all');\n }\n\n /**\n * Remove a reference of prefetched segment if already exists.\n * @param {!shaka.media.SegmentReference} reference\n * @public\n */\n removeReference(reference) {\n this.abortPrefetchedSegment_(reference);\n }\n\n /**\n * @param {number} time\n * @param {boolean=} clearInitSegments\n */\n evict(time, clearInitSegments = false) {\n for (const ref of this.segmentPrefetchMap_.keys()) {\n if (time > ref.endTime) {\n this.abortPrefetchedSegment_(ref);\n }\n }\n if (clearInitSegments) {\n this.clearInitSegments_();\n }\n }\n\n /**\n * @param {boolean} reverse\n */\n setReverse(reverse) {\n this.reverse_ = reverse;\n if (this.iterator_) {\n this.iterator_.setReverse(reverse);\n }\n }\n\n /**\n * Remove all init segments that don't have associated segments in\n * the segment prefetch map.\n * By default, with delete on get, the init segments should get removed as\n * they are used. With deleteOnGet set to false, we need to clear them\n * every so often once the segments that are associated with each init segment\n * is no longer prefetched.\n * @private\n */\n clearInitSegments_() {\n const segmentReferences = Array.from(this.segmentPrefetchMap_.keys());\n for (const initSegmentReference of this.initSegmentPrefetchMap_.keys()) {\n // if no segment references this init segment, we should remove it.\n const someReference = segmentReferences.some((segmentReference) => {\n return shaka.media.InitSegmentReference.equal(\n segmentReference.initSegmentReference, initSegmentReference);\n });\n if (!someReference) {\n this.abortPrefetchedSegment_(initSegmentReference);\n }\n }\n }\n\n /**\n * Reset the prefetchLimit and clear all internal states.\n * Called by StreamingEngine when configure() was called.\n * @param {number} newPrefetchLimit\n * @public\n */\n resetLimit(newPrefetchLimit) {\n goog.asserts.assert(newPrefetchLimit >= 0,\n 'The new prefetch limit must be >= 0.');\n\n const logPrefix = shaka.media.SegmentPrefetch.logPrefix_(this.stream_);\n shaka.log.debug(logPrefix, 'resetting prefetch limit to', newPrefetchLimit);\n this.prefetchLimit_ = newPrefetchLimit;\n const keyArr = Array.from(this.segmentPrefetchMap_.keys());\n while (keyArr.length > newPrefetchLimit) {\n const reference = keyArr.pop();\n if (reference) {\n this.abortPrefetchedSegment_(reference);\n }\n }\n this.clearInitSegments_();\n }\n\n /**\n * Called by Streaming Engine when switching variant.\n * @param {shaka.extern.Stream} stream\n * @public\n */\n switchStream(stream) {\n if (stream && stream !== this.stream_) {\n this.clearAll();\n this.stream_ = stream;\n }\n }\n\n /**\n * Get the current stream.\n * @public\n * @return {shaka.extern.Stream}\n */\n getStream() {\n return this.stream_;\n }\n\n /**\n * Remove a segment from prefetch map and abort it.\n * @param {!(shaka.media.SegmentReference|shaka.media.InitSegmentReference)}\n * reference\n * @private\n */\n abortPrefetchedSegment_(reference) {\n const logPrefix = shaka.media.SegmentPrefetch.logPrefix_(this.stream_);\n\n let prefetchMap = this.segmentPrefetchMap_;\n if (reference instanceof shaka.media.InitSegmentReference) {\n prefetchMap = this.initSegmentPrefetchMap_;\n }\n\n const segmentPrefetchOperation = prefetchMap.get(reference);\n prefetchMap.delete(reference);\n\n if (segmentPrefetchOperation) {\n segmentPrefetchOperation.abort();\n if (reference instanceof shaka.media.SegmentReference) {\n shaka.log.debug(\n logPrefix,\n 'pop and abort prefetched segment at time:', reference.startTime);\n } else {\n shaka.log.debug(logPrefix, 'pop and abort prefetched init segment');\n }\n }\n }\n\n /**\n * The prefix of the logs that are created in this class.\n * @return {string}\n * @private\n */\n static logPrefix_(stream) {\n return 'SegmentPrefetch(' + stream.type + ':' + stream.id + ')';\n }\n};\n\n/**\n * @summary\n * This class manages a segment prefetch operation.\n */\nshaka.media.SegmentPrefetchOperation = class {\n /**\n * @param {shaka.media.SegmentPrefetch.FetchDispatcher} fetchDispatcher\n */\n constructor(fetchDispatcher) {\n /** @private {shaka.media.SegmentPrefetch.FetchDispatcher} */\n this.fetchDispatcher_ = fetchDispatcher;\n\n /** @private {?function(BufferSource):!Promise} */\n this.streamDataCallback_ = null;\n\n /** @private {?shaka.net.NetworkingEngine.PendingRequest} */\n this.operation_ = null;\n }\n\n /**\n * @param {shaka.media.SegmentPrefetch.FetchDispatcher} fetchDispatcher\n */\n replaceFetchDispatcher(fetchDispatcher) {\n this.fetchDispatcher_ = fetchDispatcher;\n }\n\n /**\n * Fetch a segments\n *\n * @param {!(shaka.media.SegmentReference|shaka.media.InitSegmentReference)}\n * reference\n * @param {!shaka.extern.Stream} stream\n * @return {!Promise}\n * @public\n */\n dispatchFetch(reference, stream) {\n // We need to store the data, because streamDataCallback_ might not be\n // available when you start getting the first data.\n let buffered = new Uint8Array(0);\n this.operation_ = this.fetchDispatcher_(\n reference, stream, async (data) => {\n if (buffered.byteLength > 0) {\n buffered = shaka.util.Uint8ArrayUtils.concat(buffered, data);\n } else {\n buffered = data;\n }\n if (this.streamDataCallback_) {\n await this.streamDataCallback_(buffered);\n buffered = new Uint8Array(0);\n }\n });\n return this.operation_.promise.catch((e) => {\n // Ignore OPERATION_ABORTED errors.\n if (e instanceof shaka.util.Error &&\n e.code == shaka.util.Error.Code.OPERATION_ABORTED) {\n return Promise.resolve();\n }\n // Continue to surface other errors.\n return Promise.reject(e);\n });\n }\n\n /**\n * Get the operation of prefetched segment if already exists.\n *\n * @return {?shaka.net.NetworkingEngine.PendingRequest} op\n * @public\n */\n getOperation() {\n return this.operation_;\n }\n\n /**\n * @param {?function(BufferSource):!Promise} streamDataCallback\n * @public\n */\n setStreamDataCallback(streamDataCallback) {\n this.streamDataCallback_ = streamDataCallback;\n }\n\n /**\n * Abort the current operation if exists.\n */\n abort() {\n if (this.operation_) {\n this.operation_.abort();\n }\n }\n};\n\n/**\n * @typedef {function(\n * !(shaka.media.InitSegmentReference|shaka.media.SegmentReference),\n * shaka.extern.Stream,\n * ?function(BufferSource):!Promise=\n * ):!shaka.net.NetworkingEngine.PendingRequest}\n *\n * @description\n * A callback function that fetches a segment.\n * @export\n */\nshaka.media.SegmentPrefetch.FetchDispatcher;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.RegionTimeline');\n\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.FakeEventTarget');\ngoog.require('shaka.util.IReleasable');\ngoog.require('shaka.util.Timer');\n\n\n/**\n * The region timeline is a set of unique timeline region info entries. When\n * a new entry is added, the 'regionadd' event will be fired. When an entry is\n * deleted, the 'regionremove' event will be fired.\n *\n * @implements {shaka.util.IReleasable}\n * @final\n */\nshaka.media.RegionTimeline = class extends shaka.util.FakeEventTarget {\n /**\n * @param {!function():{start: number, end: number}} getSeekRange\n */\n constructor(getSeekRange) {\n super();\n\n /** @private {!Set.} */\n this.regions_ = new Set();\n\n /** @private {!function():{start: number, end: number}} */\n this.getSeekRange_ = getSeekRange;\n\n /**\n * Make sure all of the regions we're tracking are within the\n * seek range or further in the future. We don't want to store\n * regions that fall before the start of the seek range.\n *\n * @private {shaka.util.Timer}\n */\n this.filterTimer_ = new shaka.util.Timer(() => {\n this.filterBySeekRange_();\n }).tickEvery(\n /* seconds= */ shaka.media.RegionTimeline.REGION_FILTER_INTERVAL);\n }\n\n /** @override */\n release() {\n this.regions_.clear();\n this.filterTimer_.stop();\n super.release();\n }\n\n /**\n * @param {shaka.extern.TimelineRegionInfo} region\n */\n addRegion(region) {\n const similarRegion = this.findSimilarRegion_(region);\n\n // Make sure we don't add duplicate regions. We keep track of this here\n // instead of making the parser track it.\n if (similarRegion == null) {\n this.regions_.add(region);\n const event = new shaka.util.FakeEvent('regionadd', new Map([\n ['region', region],\n ]));\n this.dispatchEvent(event);\n }\n }\n\n /**\n * @private\n */\n filterBySeekRange_() {\n const seekRange = this.getSeekRange_();\n for (const region of this.regions_) {\n // Only consider the seek range start here.\n // Future regions might become relevant eventually,\n // but regions that are in the past and can't ever be\n // seeked to will never come up again, and there's no\n // reson to store or process them.\n if (region.endTime < seekRange.start) {\n this.regions_.delete(region);\n const event = new shaka.util.FakeEvent('regionremove', new Map([\n ['region', region],\n ]));\n this.dispatchEvent(event);\n }\n }\n }\n\n /**\n * Find a region in the timeline that has the same scheme id uri, event id,\n * start time and end time. If these four parameters match, we assume it\n * to be the same region. If no similar region can be found, |null| will be\n * returned.\n *\n * @param {shaka.extern.TimelineRegionInfo} region\n * @return {?shaka.extern.TimelineRegionInfo}\n * @private\n */\n findSimilarRegion_(region) {\n for (const existing of this.regions_) {\n // The same scheme ID and time range means that it is similar-enough to\n // be the same region.\n const isSimilar = existing.schemeIdUri == region.schemeIdUri &&\n existing.id == region.id &&\n existing.startTime == region.startTime &&\n existing.endTime == region.endTime;\n\n if (isSimilar) {\n return existing;\n }\n }\n\n return null;\n }\n\n /**\n * Get an iterable for all the regions in the timeline. This will allow\n * others to see what regions are in the timeline while not being able to\n * change the collection.\n *\n * @return {!Iterable.}\n */\n regions() {\n return this.regions_;\n }\n};\n\n/** @const {number} */\nshaka.media.RegionTimeline.REGION_FILTER_INTERVAL = 2; // in seconds\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.QualityObserver');\n\ngoog.require('shaka.media.IPlayheadObserver');\ngoog.require('shaka.log');\ngoog.require('shaka.util.ArrayUtils');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.FakeEventTarget');\ngoog.require('shaka.util.ManifestParserUtils');\n\n/**\n * Monitors the quality of content being appended to the source buffers and\n * fires 'qualitychange' events when the media quality at the playhead changes.\n *\n * @implements {shaka.media.IPlayheadObserver}\n * @final\n */\nshaka.media.QualityObserver = class extends shaka.util.FakeEventTarget {\n /**\n * Creates a new QualityObserver.\n *\n * @param {!function():!shaka.extern.BufferedInfo} getBufferedInfo\n * Buffered info is needed to purge QualityChanges that are no\n * longer relevant.\n */\n constructor(getBufferedInfo) {\n super();\n\n /**\n * @private {!Map.}\n */\n this.contentTypeStates_ = new Map();\n\n /** @private function():!shaka.extern.BufferedInfo */\n this.getBufferedInfo_ = getBufferedInfo;\n }\n\n /** @override */\n release() {\n this.contentTypeStates_.clear();\n super.release();\n }\n\n /**\n * Get the ContenTypeState for a contentType, creating a new\n * one if necessary.\n *\n * @param {!string} contentType\n * The contend type e.g. \"video\" or \"audio\".\n * @return {!shaka.media.QualityObserver.ContentTypeState}\n * @private\n */\n getContentTypeState_(contentType) {\n let contentTypeState = this.contentTypeStates_.get(contentType);\n if (!contentTypeState) {\n contentTypeState = {\n qualityChangePositions: [],\n currentQuality: null,\n contentType: contentType,\n };\n this.contentTypeStates_.set(contentType, contentTypeState);\n }\n return contentTypeState;\n }\n\n /**\n * Adds a QualityChangePosition for the contentType identified by\n * the mediaQuality.contentType.\n *\n * @param {!shaka.extern.MediaQualityInfo} mediaQuality\n * @param {!number} position\n * Position in seconds of the quality change.\n */\n addMediaQualityChange(mediaQuality, position) {\n const contentTypeState =\n this.getContentTypeState_(mediaQuality.contentType);\n\n // Remove unneeded QualityChangePosition(s) before adding the new one\n this.purgeQualityChangePositions_(contentTypeState);\n\n const newChangePosition = {\n mediaQuality: mediaQuality,\n position: position,\n };\n\n const changePositions = contentTypeState.qualityChangePositions;\n const insertBeforeIndex = changePositions.findIndex(\n (qualityChange) => (qualityChange.position >= position));\n\n if (insertBeforeIndex >= 0) {\n const duplicatePositions =\n (changePositions[insertBeforeIndex].position == position) ? 1 : 0;\n changePositions.splice(\n insertBeforeIndex, duplicatePositions, newChangePosition);\n } else {\n changePositions.push(newChangePosition);\n }\n }\n\n /**\n * Determines the media quality at a specific position in the source buffer.\n *\n * @param {!number} position\n * Position in seconds\n * @param {!shaka.media.QualityObserver.ContentTypeState} contentTypeState\n * @return {?shaka.extern.MediaQualityInfo}\n * @private\n */\n static getMediaQualityAtPosition_(position, contentTypeState) {\n // The qualityChangePositions must be ordered by position ascending\n // Find the last QualityChangePosition prior to the position\n const changePositions = contentTypeState.qualityChangePositions;\n for (let i = changePositions.length - 1; i >= 0; i--) {\n const qualityChange = changePositions[i];\n if (qualityChange.position <= position) {\n return qualityChange.mediaQuality;\n }\n }\n return null;\n }\n\n /**\n * Determines if two MediaQualityInfo objects are the same or not.\n *\n * @param {?shaka.extern.MediaQualityInfo} mq1\n * @param {?shaka.extern.MediaQualityInfo} mq2\n * @return {boolean}\n * @private\n */\n static mediaQualitiesAreTheSame_(mq1, mq2) {\n if (mq1 === mq2) {\n return true;\n }\n if (!mq1 || !mq2) {\n return false;\n }\n return (mq1.bandwidth == mq2.bandwidth) &&\n (mq1.audioSamplingRate == mq2.audioSamplingRate) &&\n (mq1.codecs == mq2.codecs) &&\n (mq1.contentType == mq2.contentType) &&\n (mq1.frameRate == mq2.frameRate) &&\n (mq1.height == mq2.height) &&\n (mq1.mimeType == mq2.mimeType) &&\n (mq1.channelsCount == mq2.channelsCount) &&\n (mq1.pixelAspectRatio == mq2.pixelAspectRatio) &&\n (mq1.width == mq2.width);\n }\n\n /** @override */\n poll(positionInSeconds, wasSeeking) {\n for (const contentTypeState of this.contentTypeStates_.values()) {\n const currentQuality = contentTypeState.currentQuality;\n const qualityAtPosition =\n shaka.media.QualityObserver.getMediaQualityAtPosition_(\n positionInSeconds, contentTypeState);\n\n const differentQualities = qualityAtPosition &&\n !shaka.media.QualityObserver.mediaQualitiesAreTheSame_(\n currentQuality, qualityAtPosition);\n const differentLabel = qualityAtPosition && currentQuality &&\n qualityAtPosition.label && currentQuality.label &&\n currentQuality.label !== qualityAtPosition.label;\n const differentLanguage = qualityAtPosition && currentQuality &&\n qualityAtPosition.language && currentQuality.language &&\n currentQuality.language !== qualityAtPosition.language;\n const differentRoles = qualityAtPosition && currentQuality &&\n qualityAtPosition.roles && currentQuality.roles &&\n !shaka.util.ArrayUtils.equal(currentQuality.roles,\n qualityAtPosition.roles);\n\n if (differentLabel || differentLanguage || differentRoles) {\n if (this.positionIsBuffered_(\n positionInSeconds, qualityAtPosition.contentType)) {\n contentTypeState.currentQuality = qualityAtPosition;\n\n const event = new shaka.util.FakeEvent('audiotrackchange', new Map([\n ['quality', qualityAtPosition],\n ['position', positionInSeconds],\n ]));\n this.dispatchEvent(event);\n }\n }\n\n if (differentQualities) {\n if (this.positionIsBuffered_(\n positionInSeconds, qualityAtPosition.contentType)) {\n contentTypeState.currentQuality = qualityAtPosition;\n\n shaka.log.debug('Media quality changed at position ' +\n positionInSeconds + ' ' + JSON.stringify(qualityAtPosition));\n\n const event = new shaka.util.FakeEvent('qualitychange', new Map([\n ['quality', qualityAtPosition],\n ['position', positionInSeconds],\n ]));\n this.dispatchEvent(event);\n }\n }\n }\n }\n\n /**\n * Determine if a position is buffered for a given content type.\n *\n * @param {!number} position\n * @param {!string} contentType\n * @private\n */\n positionIsBuffered_(position, contentType) {\n const bufferedInfo = this.getBufferedInfo_();\n const bufferedRanges = bufferedInfo[contentType];\n if (bufferedRanges && bufferedRanges.length > 0) {\n const bufferStart = bufferedRanges[0].start;\n const bufferEnd = bufferedRanges[bufferedRanges.length - 1].end;\n if (position >= bufferStart && position < bufferEnd) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Removes the QualityChangePosition(s) that are not relevant to the buffered\n * content of the specified contentType. Note that this function is\n * invoked just before adding the quality change info associated with\n * the next media segment to be appended.\n *\n * @param {!shaka.media.QualityObserver.ContentTypeState} contentTypeState\n * @private\n */\n purgeQualityChangePositions_(contentTypeState) {\n const bufferedInfo = this.getBufferedInfo_();\n const bufferedRanges = bufferedInfo[contentTypeState.contentType];\n\n if (bufferedRanges && bufferedRanges.length > 0) {\n const bufferStart = bufferedRanges[0].start;\n const bufferEnd = bufferedRanges[bufferedRanges.length - 1].end;\n const oldChangePositions = contentTypeState.qualityChangePositions;\n contentTypeState.qualityChangePositions =\n oldChangePositions.filter(\n (qualityChange, index) => {\n // Remove all but last quality change before bufferStart.\n if ((qualityChange.position <= bufferStart) &&\n (index + 1 < oldChangePositions.length) &&\n (oldChangePositions[index + 1].position <= bufferStart)) {\n return false;\n }\n // Remove all quality changes after bufferEnd.\n if (qualityChange.position >= bufferEnd) {\n return false;\n }\n return true;\n });\n } else {\n // Nothing is buffered; so remove all quality changes.\n contentTypeState.qualityChangePositions = [];\n }\n }\n\n /**\n * Create a MediaQualityInfo object from a stream object.\n *\n * @param {!shaka.extern.Stream} stream\n * @return {!shaka.extern.MediaQualityInfo}\n */\n static createQualityInfo(stream) {\n const basicQuality = {\n bandwidth: stream.bandwidth || 0,\n audioSamplingRate: null,\n codecs: stream.codecs,\n contentType: stream.type,\n frameRate: null,\n height: null,\n mimeType: stream.mimeType,\n channelsCount: null,\n pixelAspectRatio: null,\n width: null,\n label: null,\n roles: stream.roles,\n language: null,\n };\n if (stream.type == shaka.util.ManifestParserUtils.ContentType.VIDEO) {\n basicQuality.frameRate = stream.frameRate || null;\n basicQuality.height = stream.height || null;\n basicQuality.pixelAspectRatio = stream.pixelAspectRatio || null;\n basicQuality.width = stream.width || null;\n }\n if (stream.type == shaka.util.ManifestParserUtils.ContentType.AUDIO) {\n basicQuality.audioSamplingRate = stream.audioSamplingRate;\n basicQuality.channelsCount = stream.channelsCount;\n basicQuality.label = stream.label || null;\n basicQuality.language = stream.language;\n }\n return basicQuality;\n }\n};\n\n/**\n * @typedef {{\n * mediaQuality: !shaka.extern.MediaQualityInfo,\n * position: !number\n * }}\n *\n * @description\n * Identifies the position of a media quality change in the\n * source buffer.\n *\n * @property {shaka.extern.MediaQualityInfo} !mediaQuality\n * The new media quality for content after position in the source buffer.\n * @property {number} !position\n * A position in seconds in the source buffer\n */\nshaka.media.QualityObserver.QualityChangePosition;\n\n/**\n * @typedef {{\n * qualityChangePositions:\n * !Array.,\n * currentQuality: ?shaka.extern.MediaQualityInfo,\n * contentType: !string\n * }}\n *\n * @description\n * Contains media quality information for a specific content type\n * e.g. video or audio.\n *\n * @property {!Array.}\n * qualityChangePositions\n * Quality changes ordered by position ascending.\n * @property {?shaka.media.MediaQualityInfo} currentMediaQuality\n * The media quality at the playhead position.\n * @property {string} contentType\n * The contentType e.g. 'video' or 'audio'\n */\nshaka.media.QualityObserver.ContentTypeState;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.SegmentUtils');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.media.Capabilities');\ngoog.require('shaka.media.ClosedCaptionParser');\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.ManifestParserUtils');\ngoog.require('shaka.util.MimeUtils');\ngoog.require('shaka.util.Mp4BoxParsers');\ngoog.require('shaka.util.Mp4Parser');\ngoog.require('shaka.util.TsParser');\n\n\n/**\n * @summary Utility functions for segment parsing.\n */\nshaka.media.SegmentUtils = class {\n /**\n * @param {string} mimeType\n * @return {shaka.media.SegmentUtils.BasicInfo}\n */\n static getBasicInfoFromMimeType(mimeType) {\n const baseMimeType = shaka.util.MimeUtils.getBasicType(mimeType);\n const type = baseMimeType.split('/')[0];\n const codecs = shaka.util.MimeUtils.getCodecs(mimeType);\n return {\n type: type,\n mimeType: baseMimeType,\n codecs: codecs,\n language: null,\n height: null,\n width: null,\n channelCount: null,\n sampleRate: null,\n closedCaptions: new Map(),\n videoRange: null,\n colorGamut: null,\n frameRate: null,\n };\n }\n\n /**\n * @param {!BufferSource} data\n * @param {boolean=} disableAudio\n * @param {boolean=} disableVideo\n * @return {?shaka.media.SegmentUtils.BasicInfo}\n */\n static getBasicInfoFromTs(data, disableAudio = false, disableVideo = false) {\n const uint8ArrayData = shaka.util.BufferUtils.toUint8(data);\n const tsParser = new shaka.util.TsParser().parse(uint8ArrayData);\n const tsCodecs = tsParser.getCodecs();\n const videoInfo = tsParser.getVideoInfo();\n const codecs = [];\n let hasAudio = false;\n let hasVideo = false;\n if (!disableAudio) {\n switch (tsCodecs.audio) {\n case 'aac':\n case 'aac-loas':\n codecs.push('mp4a.40.2');\n hasAudio = true;\n break;\n case 'mp3':\n codecs.push('mp4a.40.34');\n hasAudio = true;\n break;\n case 'ac3':\n codecs.push('ac-3');\n hasAudio = true;\n break;\n case 'ec3':\n codecs.push('ec-3');\n hasAudio = true;\n break;\n case 'opus':\n codecs.push('opus');\n hasAudio = true;\n break;\n }\n }\n if (!disableVideo) {\n switch (tsCodecs.video) {\n case 'avc':\n if (videoInfo.codec) {\n codecs.push(videoInfo.codec);\n } else {\n codecs.push('avc1.42E01E');\n }\n hasVideo = true;\n break;\n case 'hvc':\n if (videoInfo.codec) {\n codecs.push(videoInfo.codec);\n } else {\n codecs.push('hvc1.1.6.L93.90');\n }\n hasVideo = true;\n break;\n case 'av1':\n codecs.push('av01.0.01M.08');\n hasVideo = true;\n break;\n }\n }\n if (!codecs.length) {\n return null;\n }\n const onlyAudio = hasAudio && !hasVideo;\n const closedCaptions = new Map();\n if (hasVideo) {\n const captionParser = new shaka.media.ClosedCaptionParser('video/mp2t');\n captionParser.parseFrom(data);\n for (const stream of captionParser.getStreams()) {\n closedCaptions.set(stream, stream);\n }\n captionParser.reset();\n }\n return {\n type: onlyAudio ? 'audio' : 'video',\n mimeType: 'video/mp2t',\n codecs: codecs.join(', '),\n language: null,\n height: videoInfo.height,\n width: videoInfo.width,\n channelCount: null,\n sampleRate: null,\n closedCaptions: closedCaptions,\n videoRange: null,\n colorGamut: null,\n frameRate: videoInfo.frameRate,\n };\n }\n\n /**\n * @param {?BufferSource} initData\n * @param {!BufferSource} data\n * @return {?shaka.media.SegmentUtils.BasicInfo}\n */\n static getBasicInfoFromMp4(initData, data) {\n const Mp4Parser = shaka.util.Mp4Parser;\n const SegmentUtils = shaka.media.SegmentUtils;\n\n const audioCodecs = [];\n let videoCodecs = [];\n\n let hasAudio = false;\n let hasVideo = false;\n\n const addCodec = (codec) => {\n const codecLC = codec.toLowerCase();\n switch (codecLC) {\n case 'avc1':\n case 'avc3':\n videoCodecs.push(codecLC + '.42E01E');\n hasVideo = true;\n break;\n case 'hev1':\n case 'hvc1':\n videoCodecs.push(codecLC + '.1.6.L93.90');\n hasVideo = true;\n break;\n case 'dvh1':\n case 'dvhe':\n videoCodecs.push(codecLC + '.05.04');\n hasVideo = true;\n break;\n case 'vp09':\n videoCodecs.push(codecLC + '.00.10.08');\n hasVideo = true;\n break;\n case 'av01':\n videoCodecs.push(codecLC + '.0.01M.08');\n hasVideo = true;\n break;\n case 'mp4a':\n // We assume AAC, but this can be wrong since mp4a supports\n // others codecs\n audioCodecs.push('mp4a.40.2');\n hasAudio = true;\n break;\n case 'ac-3':\n case 'ec-3':\n case 'ac-4':\n case 'opus':\n case 'flac':\n audioCodecs.push(codecLC);\n hasAudio = true;\n break;\n }\n };\n\n const codecBoxParser = (box) => addCodec(box.name);\n\n /** @type {?string} */\n let language = null;\n /** @type {?string} */\n let height = null;\n /** @type {?string} */\n let width = null;\n /** @type {?number} */\n let channelCount = null;\n /** @type {?number} */\n let sampleRate = null;\n /** @type {?string} */\n let realVideoRange = null;\n /** @type {?string} */\n let realColorGamut = null;\n /** @type {?string} */\n const realFrameRate = null;\n\n /** @type {?string} */\n let baseBox;\n\n const genericAudioBox = (box) => {\n const parsedAudioSampleEntryBox =\n shaka.util.Mp4BoxParsers.audioSampleEntry(box.reader);\n channelCount = parsedAudioSampleEntryBox.channelCount;\n sampleRate = parsedAudioSampleEntryBox.sampleRate;\n codecBoxParser(box);\n };\n\n const genericVideoBox = (box) => {\n baseBox = box.name;\n const parsedVisualSampleEntryBox =\n shaka.util.Mp4BoxParsers.visualSampleEntry(box.reader);\n width = String(parsedVisualSampleEntryBox.width);\n height = String(parsedVisualSampleEntryBox.height);\n if (box.reader.hasMoreData()) {\n Mp4Parser.children(box);\n }\n };\n\n new Mp4Parser()\n .box('moov', Mp4Parser.children)\n .box('trak', Mp4Parser.children)\n .box('mdia', Mp4Parser.children)\n .fullBox('mdhd', (box) => {\n goog.asserts.assert(\n box.version != null,\n 'MDHD is a full box and should have a valid version.');\n const parsedMDHDBox = shaka.util.Mp4BoxParsers.parseMDHD(\n box.reader, box.version);\n language = parsedMDHDBox.language;\n })\n .box('minf', Mp4Parser.children)\n .box('stbl', Mp4Parser.children)\n .fullBox('stsd', Mp4Parser.sampleDescription)\n\n // AUDIO\n // These are the various boxes that signal a codec.\n .box('mp4a', (box) => {\n const parsedAudioSampleEntryBox =\n shaka.util.Mp4BoxParsers.audioSampleEntry(box.reader);\n channelCount = parsedAudioSampleEntryBox.channelCount;\n sampleRate = parsedAudioSampleEntryBox.sampleRate;\n if (box.reader.hasMoreData()) {\n Mp4Parser.children(box);\n } else {\n codecBoxParser(box);\n }\n })\n .box('esds', (box) => {\n const parsedESDSBox = shaka.util.Mp4BoxParsers.parseESDS(box.reader);\n audioCodecs.push(parsedESDSBox.codec);\n hasAudio = true;\n })\n .box('ac-3', genericAudioBox)\n .box('ec-3', genericAudioBox)\n .box('ac-4', genericAudioBox)\n .box('Opus', genericAudioBox)\n .box('fLaC', genericAudioBox)\n\n // VIDEO\n // These are the various boxes that signal a codec.\n .box('avc1', genericVideoBox)\n .box('avc3', genericVideoBox)\n .box('hev1', genericVideoBox)\n .box('hvc1', genericVideoBox)\n .box('dva1', genericVideoBox)\n .box('dvav', genericVideoBox)\n .box('dvh1', genericVideoBox)\n .box('dvhe', genericVideoBox)\n .box('vp09', genericVideoBox)\n .box('av01', genericVideoBox)\n .box('avcC', (box) => {\n let codecBase = baseBox || '';\n switch (baseBox) {\n case 'dvav':\n codecBase = 'avc3';\n break;\n case 'dva1':\n codecBase = 'avc1';\n break;\n }\n const parsedAVCCBox = shaka.util.Mp4BoxParsers.parseAVCC(\n codecBase, box.reader, box.name);\n videoCodecs.push(parsedAVCCBox.codec);\n hasVideo = true;\n })\n .box('hvcC', (box) => {\n let codecBase = baseBox || '';\n switch (baseBox) {\n case 'dvh1':\n codecBase = 'hvc1';\n break;\n case 'dvhe':\n codecBase = 'hev1';\n break;\n }\n const parsedHVCCBox = shaka.util.Mp4BoxParsers.parseHVCC(\n codecBase, box.reader, box.name);\n videoCodecs.push(parsedHVCCBox.codec);\n hasVideo = true;\n })\n .box('dvcC', (box) => {\n let codecBase = baseBox || '';\n switch (baseBox) {\n case 'hvc1':\n codecBase = 'dvh1';\n break;\n case 'hev1':\n codecBase = 'dvhe';\n break;\n case 'avc1':\n codecBase = 'dva1';\n break;\n case 'avc3':\n codecBase = 'dvav';\n break;\n case 'av01':\n codecBase = 'dav1';\n break;\n }\n const parsedDVCCBox = shaka.util.Mp4BoxParsers.parseDVCC(\n codecBase, box.reader, box.name);\n videoCodecs.push(parsedDVCCBox.codec);\n hasVideo = true;\n })\n .box('dvvC', (box) => {\n let codecBase = baseBox || '';\n switch (baseBox) {\n case 'hvc1':\n codecBase = 'dvh1';\n break;\n case 'hev1':\n codecBase = 'dvhe';\n break;\n case 'avc1':\n codecBase = 'dva1';\n break;\n case 'avc3':\n codecBase = 'dvav';\n break;\n case 'av01':\n codecBase = 'dav1';\n break;\n }\n const parsedDVCCBox = shaka.util.Mp4BoxParsers.parseDVVC(\n codecBase, box.reader, box.name);\n videoCodecs.push(parsedDVCCBox.codec);\n hasVideo = true;\n })\n .fullBox('vpcC', (box) => {\n const codecBase = baseBox || '';\n const parsedVPCCBox = shaka.util.Mp4BoxParsers.parseVPCC(\n codecBase, box.reader, box.name);\n videoCodecs.push(parsedVPCCBox.codec);\n hasVideo = true;\n })\n .box('av1C', (box) => {\n let codecBase = baseBox || '';\n switch (baseBox) {\n case 'dav1':\n codecBase = 'av01';\n break;\n }\n const parsedAV1CBox = shaka.util.Mp4BoxParsers.parseAV1C(\n codecBase, box.reader, box.name);\n videoCodecs.push(parsedAV1CBox.codec);\n hasVideo = true;\n })\n\n // This signals an encrypted sample, which we can go inside of to\n // find the codec used.\n // Note: If encrypted, you can only have audio or video, not both.\n .box('enca', Mp4Parser.audioSampleEntry)\n .box('encv', Mp4Parser.visualSampleEntry)\n .box('sinf', Mp4Parser.children)\n .box('frma', (box) => {\n const {codec} = shaka.util.Mp4BoxParsers.parseFRMA(box.reader);\n addCodec(codec);\n })\n\n .box('colr', (box) => {\n videoCodecs = videoCodecs.map((codec) => {\n if (codec.startsWith('av01.')) {\n return shaka.util.Mp4BoxParsers.updateAV1CodecWithCOLRBox(\n codec, box.reader);\n }\n return codec;\n });\n const {videoRange, colorGamut} =\n shaka.util.Mp4BoxParsers.parseCOLR(box.reader);\n realVideoRange = videoRange;\n realColorGamut = colorGamut;\n })\n\n .parse(initData || data, /* partialOkay= */ true);\n if (!audioCodecs.length && !videoCodecs.length) {\n return null;\n }\n const onlyAudio = hasAudio && !hasVideo;\n const closedCaptions = new Map();\n if (hasVideo) {\n const captionParser = new shaka.media.ClosedCaptionParser('video/mp4');\n if (initData) {\n captionParser.init(initData);\n }\n try {\n captionParser.parseFrom(data);\n for (const stream of captionParser.getStreams()) {\n closedCaptions.set(stream, stream);\n }\n } catch (e) {\n shaka.log.debug('Error detecting CC streams', e);\n }\n captionParser.reset();\n }\n const codecs = audioCodecs.concat(videoCodecs);\n return {\n type: onlyAudio ? 'audio' : 'video',\n mimeType: onlyAudio ? 'audio/mp4' : 'video/mp4',\n codecs: SegmentUtils.codecsFiltering(codecs).join(', '),\n language: language,\n height: height,\n width: width,\n channelCount: channelCount,\n sampleRate: sampleRate,\n closedCaptions: closedCaptions,\n videoRange: realVideoRange,\n colorGamut: realColorGamut,\n frameRate: realFrameRate,\n };\n }\n\n /**\n * @param {!Array.} codecs\n * @return {!Array.} codecs\n */\n static codecsFiltering(codecs) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const ManifestParserUtils = shaka.util.ManifestParserUtils;\n const SegmentUtils = shaka.media.SegmentUtils;\n const allCodecs = SegmentUtils.filterDuplicateCodecs_(codecs);\n const audioCodecs =\n ManifestParserUtils.guessAllCodecsSafe(ContentType.AUDIO, allCodecs);\n const videoCodecs =\n ManifestParserUtils.guessAllCodecsSafe(ContentType.VIDEO, allCodecs);\n const textCodecs =\n ManifestParserUtils.guessAllCodecsSafe(ContentType.TEXT, allCodecs);\n const validVideoCodecs = SegmentUtils.chooseBetterCodecs_(videoCodecs);\n const finalCodecs =\n audioCodecs.concat(validVideoCodecs).concat(textCodecs);\n if (allCodecs.length && !finalCodecs.length) {\n return allCodecs;\n }\n return finalCodecs;\n }\n\n /**\n * @param {!Array.} codecs\n * @return {!Array.} codecs\n * @private\n */\n static filterDuplicateCodecs_(codecs) {\n // Filter out duplicate codecs.\n const seen = new Set();\n const ret = [];\n for (const codec of codecs) {\n const shortCodec = shaka.util.MimeUtils.getCodecBase(codec);\n if (!seen.has(shortCodec)) {\n ret.push(codec);\n seen.add(shortCodec);\n } else {\n shaka.log.debug('Ignoring duplicate codec');\n }\n }\n return ret;\n }\n\n /**\n * Prioritizes Dolby Vision if supported. This is necessary because with\n * Dolby Vision we could have hvcC and dvcC boxes at the same time.\n *\n * @param {!Array.} codecs\n * @return {!Array.} codecs\n * @private\n */\n static chooseBetterCodecs_(codecs) {\n if (codecs.length <= 1) {\n return codecs;\n }\n const dolbyVision = codecs.find((codec) => {\n return codec.startsWith('dvav.') ||\n codec.startsWith('dva1.') ||\n codec.startsWith('dvh1.') ||\n codec.startsWith('dvhe.') ||\n codec.startsWith('dav1.') ||\n codec.startsWith('dvc1.') ||\n codec.startsWith('dvi1.');\n });\n if (!dolbyVision) {\n return codecs;\n }\n const type = `video/mp4; codecs=\"${dolbyVision}\"`;\n if (shaka.media.Capabilities.isTypeSupported(type)) {\n return [dolbyVision];\n }\n return codecs.filter((codec) => codec != dolbyVision);\n }\n\n /**\n * @param {!BufferSource} data\n * @return {?string}\n */\n static getDefaultKID(data) {\n const Mp4Parser = shaka.util.Mp4Parser;\n\n let defaultKID = null;\n new Mp4Parser()\n .box('moov', Mp4Parser.children)\n .box('trak', Mp4Parser.children)\n .box('mdia', Mp4Parser.children)\n .box('minf', Mp4Parser.children)\n .box('stbl', Mp4Parser.children)\n .fullBox('stsd', Mp4Parser.sampleDescription)\n .box('encv', Mp4Parser.visualSampleEntry)\n .box('enca', Mp4Parser.audioSampleEntry)\n .box('sinf', Mp4Parser.children)\n .box('schi', Mp4Parser.children)\n .fullBox('tenc', (box) => {\n const parsedTENCBox = shaka.util.Mp4BoxParsers.parseTENC(box.reader);\n defaultKID = parsedTENCBox.defaultKID;\n })\n\n .parse(data, /* partialOkay= */ true);\n return defaultKID;\n }\n\n /**\n * @param {!BufferSource} rawResult\n * @param {shaka.extern.aesKey} aesKey\n * @param {number} position\n * @return {!Promise.}\n */\n static async aesDecrypt(rawResult, aesKey, position) {\n const key = aesKey;\n if (!key.cryptoKey) {\n goog.asserts.assert(key.fetchKey, 'If AES cryptoKey was not ' +\n 'preloaded, fetchKey function should be provided');\n await key.fetchKey();\n goog.asserts.assert(key.cryptoKey, 'AES cryptoKey should now be set');\n }\n let iv = key.iv;\n if (!iv) {\n iv = shaka.util.BufferUtils.toUint8(new ArrayBuffer(16));\n let sequence = key.firstMediaSequenceNumber + position;\n for (let i = iv.byteLength - 1; i >= 0; i--) {\n iv[i] = sequence & 0xff;\n sequence >>= 8;\n }\n }\n let algorithm;\n if (aesKey.blockCipherMode == 'CBC') {\n algorithm = {\n name: 'AES-CBC',\n iv,\n };\n } else {\n algorithm = {\n name: 'AES-CTR',\n counter: iv,\n // NIST SP800-38A standard suggests that the counter should occupy half\n // of the counter block\n length: 64,\n };\n }\n return window.crypto.subtle.decrypt(algorithm, key.cryptoKey, rawResult);\n }\n};\n\n\n/**\n * @typedef {{\n * type: string,\n * mimeType: string,\n * codecs: string,\n * language: ?string,\n * height: ?string,\n * width: ?string,\n * channelCount: ?number,\n * sampleRate: ?number,\n * closedCaptions: Map.,\n * videoRange: ?string,\n * colorGamut: ?string,\n * frameRate: ?string\n * }}\n *\n * @property {string} type\n * @property {string} mimeType\n * @property {string} codecs\n * @property {?string} language\n * @property {?string} height\n * @property {?string} width\n * @property {?number} channelCount\n * @property {?number} sampleRate\n * @property {Map.} closedCaptions\n * @property {?string} videoRange\n * @property {?string} colorGamut\n * @property {?string} frameRate\n */\nshaka.media.SegmentUtils.BasicInfo;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.Networking');\n\ngoog.require('shaka.net.NetworkingEngine');\n\n\n/**\n * A collection of shared utilities that bridge the gap between our networking\n * code and the other parts of our code base. This is to allow\n * |shaka.net.NetworkingEngine| to remain general.\n *\n * @final\n */\nshaka.util.Networking = class {\n /**\n * Create a request message for a segment. Providing |start| and |end|\n * will set the byte range. A non-zero start must be provided for |end| to\n * be used.\n *\n * @param {!Array.} uris\n * @param {?number} start\n * @param {?number} end\n * @param {shaka.extern.RetryParameters} retryParameters\n * @param {?function(BufferSource):!Promise=} streamDataCallback\n * @return {shaka.extern.Request}\n */\n static createSegmentRequest(uris, start, end, retryParameters,\n streamDataCallback) {\n const request = shaka.net.NetworkingEngine.makeRequest(\n uris, retryParameters, streamDataCallback);\n\n if (start == 0 && end == null) {\n // This is a request for the entire segment. The Range header is not\n // required. Note that some web servers don't accept Range headers, so\n // don't set one if it's not strictly required.\n } else {\n if (end) {\n request.headers['Range'] = 'bytes=' + start + '-' + end;\n } else {\n request.headers['Range'] = 'bytes=' + start + '-';\n }\n }\n\n return request;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview\n */\n\ngoog.provide('shaka.media.StreamingEngine');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.media.InitSegmentReference');\ngoog.require('shaka.media.ManifestParser');\ngoog.require('shaka.media.MediaSourceEngine');\ngoog.require('shaka.media.MetaSegmentIndex');\ngoog.require('shaka.media.SegmentIterator');\ngoog.require('shaka.media.SegmentReference');\ngoog.require('shaka.media.SegmentPrefetch');\ngoog.require('shaka.media.SegmentUtils');\ngoog.require('shaka.net.Backoff');\ngoog.require('shaka.net.NetworkingEngine');\ngoog.require('shaka.util.DelayedTick');\ngoog.require('shaka.util.Destroyer');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.IDestroyable');\ngoog.require('shaka.util.LanguageUtils');\ngoog.require('shaka.util.ManifestParserUtils');\ngoog.require('shaka.util.MimeUtils');\ngoog.require('shaka.util.Mp4BoxParsers');\ngoog.require('shaka.util.Mp4Parser');\ngoog.require('shaka.util.Networking');\n\n\n/**\n * @summary Creates a Streaming Engine.\n * The StreamingEngine is responsible for setting up the Manifest's Streams\n * (i.e., for calling each Stream's createSegmentIndex() function), for\n * downloading segments, for co-ordinating audio, video, and text buffering.\n * The StreamingEngine provides an interface to switch between Streams, but it\n * does not choose which Streams to switch to.\n *\n * The StreamingEngine does not need to be notified about changes to the\n * Manifest's SegmentIndexes; however, it does need to be notified when new\n * Variants are added to the Manifest.\n *\n * To start the StreamingEngine the owner must first call configure(), followed\n * by one call to switchVariant(), one optional call to switchTextStream(), and\n * finally a call to start(). After start() resolves, switch*() can be used\n * freely.\n *\n * The owner must call seeked() each time the playhead moves to a new location\n * within the presentation timeline; however, the owner may forego calling\n * seeked() when the playhead moves outside the presentation timeline.\n *\n * @implements {shaka.util.IDestroyable}\n */\nshaka.media.StreamingEngine = class {\n /**\n * @param {shaka.extern.Manifest} manifest\n * @param {shaka.media.StreamingEngine.PlayerInterface} playerInterface\n */\n constructor(manifest, playerInterface) {\n /** @private {?shaka.media.StreamingEngine.PlayerInterface} */\n this.playerInterface_ = playerInterface;\n\n /** @private {?shaka.extern.Manifest} */\n this.manifest_ = manifest;\n\n /** @private {?shaka.extern.StreamingConfiguration} */\n this.config_ = null;\n\n /**\n * Retains a reference to the function used to close SegmentIndex objects\n * for streams which were switched away from during an ongoing update_().\n * @private {!Map.}\n */\n this.deferredCloseSegmentIndex_ = new Map();\n\n /** @private {number} */\n this.bufferingScale_ = 1;\n\n /** @private {?shaka.extern.Variant} */\n this.currentVariant_ = null;\n\n /** @private {?shaka.extern.Stream} */\n this.currentTextStream_ = null;\n\n /** @private {number} */\n this.textStreamSequenceId_ = 0;\n\n /**\n * Maps a content type, e.g., 'audio', 'video', or 'text', to a MediaState.\n *\n * @private {!Map.}\n */\n this.mediaStates_ = new Map();\n\n /**\n * Set to true once the initial media states have been created.\n *\n * @private {boolean}\n */\n this.startupComplete_ = false;\n\n /**\n * Used for delay and backoff of failure callbacks, so that apps do not\n * retry instantly.\n *\n * @private {shaka.net.Backoff}\n */\n this.failureCallbackBackoff_ = null;\n\n /**\n * Set to true on fatal error. Interrupts fetchAndAppend_().\n *\n * @private {boolean}\n */\n this.fatalError_ = false;\n\n /** @private {!shaka.util.Destroyer} */\n this.destroyer_ = new shaka.util.Destroyer(() => this.doDestroy_());\n\n /** @private {number} */\n this.lastMediaSourceReset_ = Date.now() / 1000;\n\n /**\n * @private {!Map}\n */\n this.audioPrefetchMap_ = new Map();\n\n /** @private {!shaka.extern.SpatialVideoInfo} */\n this.spatialVideoInfo_ = {\n projection: null,\n hfov: null,\n };\n\n /** @private {number} */\n this.playRangeStart_ = 0;\n\n /** @private {number} */\n this.playRangeEnd_ = Infinity;\n\n /** @private {?shaka.media.StreamingEngine.MediaState_} */\n this.lastTextMediaStateBeforeUnload_ = null;\n }\n\n /** @override */\n destroy() {\n return this.destroyer_.destroy();\n }\n\n /**\n * @return {!Promise}\n * @private\n */\n async doDestroy_() {\n const aborts = [];\n\n for (const state of this.mediaStates_.values()) {\n this.cancelUpdate_(state);\n aborts.push(this.abortOperations_(state));\n if (state.segmentPrefetch) {\n state.segmentPrefetch.clearAll();\n state.segmentPrefetch = null;\n }\n }\n for (const prefetch of this.audioPrefetchMap_.values()) {\n prefetch.clearAll();\n }\n\n await Promise.all(aborts);\n\n this.mediaStates_.clear();\n this.audioPrefetchMap_.clear();\n\n this.playerInterface_ = null;\n this.manifest_ = null;\n this.config_ = null;\n }\n\n /**\n * Called by the Player to provide an updated configuration any time it\n * changes. Must be called at least once before start().\n *\n * @param {shaka.extern.StreamingConfiguration} config\n */\n configure(config) {\n this.config_ = config;\n\n // Create separate parameters for backoff during streaming failure.\n\n /** @type {shaka.extern.RetryParameters} */\n const failureRetryParams = {\n // The term \"attempts\" includes the initial attempt, plus all retries.\n // In order to see a delay, there would have to be at least 2 attempts.\n maxAttempts: Math.max(config.retryParameters.maxAttempts, 2),\n baseDelay: config.retryParameters.baseDelay,\n backoffFactor: config.retryParameters.backoffFactor,\n fuzzFactor: config.retryParameters.fuzzFactor,\n timeout: 0, // irrelevant\n stallTimeout: 0, // irrelevant\n connectionTimeout: 0, // irrelevant\n };\n\n // We don't want to ever run out of attempts. The application should be\n // allowed to retry streaming infinitely if it wishes.\n const autoReset = true;\n this.failureCallbackBackoff_ =\n new shaka.net.Backoff(failureRetryParams, autoReset);\n\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n // disable audio segment prefetch if this is now set\n if (config.disableAudioPrefetch) {\n const state = this.mediaStates_.get(ContentType.AUDIO);\n if (state && state.segmentPrefetch) {\n state.segmentPrefetch.clearAll();\n state.segmentPrefetch = null;\n }\n\n for (const stream of this.audioPrefetchMap_.keys()) {\n const prefetch = this.audioPrefetchMap_.get(stream);\n prefetch.clearAll();\n this.audioPrefetchMap_.delete(stream);\n }\n }\n // disable text segment prefetch if this is now set\n if (config.disableTextPrefetch) {\n const state = this.mediaStates_.get(ContentType.TEXT);\n if (state && state.segmentPrefetch) {\n state.segmentPrefetch.clearAll();\n state.segmentPrefetch = null;\n }\n }\n\n // disable video segment prefetch if this is now set\n if (config.disableVideoPrefetch) {\n const state = this.mediaStates_.get(ContentType.VIDEO);\n if (state && state.segmentPrefetch) {\n state.segmentPrefetch.clearAll();\n state.segmentPrefetch = null;\n }\n }\n\n // Allow configuring the segment prefetch in middle of the playback.\n for (const type of this.mediaStates_.keys()) {\n const state = this.mediaStates_.get(type);\n if (state.segmentPrefetch) {\n state.segmentPrefetch.resetLimit(config.segmentPrefetchLimit);\n if (!(config.segmentPrefetchLimit > 0)) {\n // ResetLimit is still needed in this case,\n // to abort existing prefetch operations.\n state.segmentPrefetch.clearAll();\n state.segmentPrefetch = null;\n }\n } else if (config.segmentPrefetchLimit > 0) {\n state.segmentPrefetch = this.createSegmentPrefetch_(state.stream);\n }\n }\n\n if (!config.disableAudioPrefetch) {\n this.updatePrefetchMapForAudio_();\n }\n }\n\n\n /**\n * Applies a playback range. This will only affect non-live content.\n *\n * @param {number} playRangeStart\n * @param {number} playRangeEnd\n */\n applyPlayRange(playRangeStart, playRangeEnd) {\n if (!this.manifest_.presentationTimeline.isLive()) {\n this.playRangeStart_ = playRangeStart;\n this.playRangeEnd_ = playRangeEnd;\n }\n }\n\n\n /**\n * Initialize and start streaming.\n *\n * By calling this method, StreamingEngine will start streaming the variant\n * chosen by a prior call to switchVariant(), and optionally, the text stream\n * chosen by a prior call to switchTextStream(). Once the Promise resolves,\n * switch*() may be called freely.\n *\n * @param {!Map.=} segmentPrefetchById\n * If provided, segments prefetched for these streams will be used as needed\n * during playback.\n * @return {!Promise}\n */\n async start(segmentPrefetchById) {\n goog.asserts.assert(this.config_,\n 'StreamingEngine configure() must be called before init()!');\n\n // Setup the initial set of Streams and then begin each update cycle.\n await this.initStreams_(segmentPrefetchById || (new Map()));\n this.destroyer_.ensureNotDestroyed();\n\n shaka.log.debug('init: completed initial Stream setup');\n this.startupComplete_ = true;\n }\n\n /**\n * Get the current variant we are streaming. Returns null if nothing is\n * streaming.\n * @return {?shaka.extern.Variant}\n */\n getCurrentVariant() {\n return this.currentVariant_;\n }\n\n /**\n * Get the text stream we are streaming. Returns null if there is no text\n * streaming.\n * @return {?shaka.extern.Stream}\n */\n getCurrentTextStream() {\n return this.currentTextStream_;\n }\n\n /**\n * Start streaming text, creating a new media state.\n *\n * @param {shaka.extern.Stream} stream\n * @return {!Promise}\n * @private\n */\n async loadNewTextStream_(stream) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n goog.asserts.assert(!this.mediaStates_.has(ContentType.TEXT),\n 'Should not call loadNewTextStream_ while streaming text!');\n this.textStreamSequenceId_++;\n const currentSequenceId = this.textStreamSequenceId_;\n\n try {\n // Clear MediaSource's buffered text, so that the new text stream will\n // properly replace the old buffered text.\n // TODO: Should this happen in unloadTextStream() instead?\n await this.playerInterface_.mediaSourceEngine.clear(ContentType.TEXT);\n } catch (error) {\n if (this.playerInterface_) {\n this.playerInterface_.onError(error);\n }\n }\n\n const mimeType = shaka.util.MimeUtils.getFullType(\n stream.mimeType, stream.codecs);\n this.playerInterface_.mediaSourceEngine.reinitText(\n mimeType, this.manifest_.sequenceMode, stream.external);\n\n const textDisplayer =\n this.playerInterface_.mediaSourceEngine.getTextDisplayer();\n const streamText =\n textDisplayer.isTextVisible() || this.config_.alwaysStreamText;\n\n if (streamText && (this.textStreamSequenceId_ == currentSequenceId)) {\n const state = this.createMediaState_(stream);\n this.mediaStates_.set(ContentType.TEXT, state);\n this.scheduleUpdate_(state, 0);\n }\n }\n\n\n /**\n * Stop fetching text stream when the user chooses to hide the captions.\n */\n unloadTextStream() {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n const state = this.mediaStates_.get(ContentType.TEXT);\n if (state) {\n this.cancelUpdate_(state);\n this.abortOperations_(state).catch(() => {});\n this.lastTextMediaStateBeforeUnload_ =\n this.mediaStates_.get(ContentType.TEXT);\n this.mediaStates_.delete(ContentType.TEXT);\n }\n this.currentTextStream_ = null;\n }\n\n /**\n * Set trick play on or off.\n * If trick play is on, related trick play streams will be used when possible.\n * @param {boolean} on\n */\n setTrickPlay(on) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n this.updateSegmentIteratorReverse_();\n\n const mediaState = this.mediaStates_.get(ContentType.VIDEO);\n if (!mediaState) {\n return;\n }\n\n const stream = mediaState.stream;\n if (!stream) {\n return;\n }\n\n shaka.log.debug('setTrickPlay', on);\n if (on) {\n const trickModeVideo = stream.trickModeVideo;\n if (!trickModeVideo) {\n return; // Can't engage trick play.\n }\n\n const normalVideo = mediaState.restoreStreamAfterTrickPlay;\n if (normalVideo) {\n return; // Already in trick play.\n }\n\n shaka.log.debug('Engaging trick mode stream', trickModeVideo);\n this.switchInternal_(trickModeVideo, /* clearBuffer= */ false,\n /* safeMargin= */ 0, /* force= */ false);\n\n mediaState.restoreStreamAfterTrickPlay = stream;\n } else {\n const normalVideo = mediaState.restoreStreamAfterTrickPlay;\n if (!normalVideo) {\n return;\n }\n\n shaka.log.debug('Restoring non-trick-mode stream', normalVideo);\n mediaState.restoreStreamAfterTrickPlay = null;\n this.switchInternal_(normalVideo, /* clearBuffer= */ true,\n /* safeMargin= */ 0, /* force= */ false);\n }\n }\n\n\n /**\n * @param {shaka.extern.Variant} variant\n * @param {boolean=} clearBuffer\n * @param {number=} safeMargin\n * @param {boolean=} force\n * If true, reload the variant even if it did not change.\n * @param {boolean=} adaptation\n * If true, update the media state to indicate MediaSourceEngine should\n * reset the timestamp offset to ensure the new track segments are correctly\n * placed on the timeline.\n */\n switchVariant(\n variant, clearBuffer = false, safeMargin = 0, force = false,\n adaptation = false) {\n this.currentVariant_ = variant;\n\n if (!this.startupComplete_) {\n // The selected variant will be used in start().\n return;\n }\n\n if (variant.video) {\n this.switchInternal_(\n variant.video, /* clearBuffer= */ clearBuffer,\n /* safeMargin= */ safeMargin, /* force= */ force,\n /* adaptation= */ adaptation);\n }\n if (variant.audio) {\n this.switchInternal_(\n variant.audio, /* clearBuffer= */ clearBuffer,\n /* safeMargin= */ safeMargin, /* force= */ force,\n /* adaptation= */ adaptation);\n }\n }\n\n\n /**\n * @param {shaka.extern.Stream} textStream\n */\n async switchTextStream(textStream) {\n this.lastTextMediaStateBeforeUnload_ = null;\n this.currentTextStream_ = textStream;\n\n if (!this.startupComplete_) {\n // The selected text stream will be used in start().\n return;\n }\n\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n goog.asserts.assert(textStream && textStream.type == ContentType.TEXT,\n 'Wrong stream type passed to switchTextStream!');\n\n // In HLS it is possible that the mimetype changes when the media\n // playlist is downloaded, so it is necessary to have the updated data\n // here.\n if (!textStream.segmentIndex) {\n await textStream.createSegmentIndex();\n }\n\n this.switchInternal_(\n textStream, /* clearBuffer= */ true,\n /* safeMargin= */ 0, /* force= */ false);\n }\n\n\n /** Reload the current text stream. */\n reloadTextStream() {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const mediaState = this.mediaStates_.get(ContentType.TEXT);\n if (mediaState) { // Don't reload if there's no text to begin with.\n this.switchInternal_(\n mediaState.stream, /* clearBuffer= */ true,\n /* safeMargin= */ 0, /* force= */ true);\n }\n }\n\n\n /**\n * Handles deferred releases of old SegmentIndexes for the mediaState's\n * content type from a previous update.\n * @param {!shaka.media.StreamingEngine.MediaState_} mediaState\n * @private\n */\n handleDeferredCloseSegmentIndexes_(mediaState) {\n for (const [key, value] of this.deferredCloseSegmentIndex_.entries()) {\n const streamId = /** @type {string} */ (key);\n const closeSegmentIndex = /** @type {!function()} */ (value);\n if (streamId.includes(mediaState.type)) {\n closeSegmentIndex();\n this.deferredCloseSegmentIndex_.delete(streamId);\n }\n }\n }\n\n\n /**\n * Switches to the given Stream. |stream| may be from any Variant.\n *\n * @param {shaka.extern.Stream} stream\n * @param {boolean} clearBuffer\n * @param {number} safeMargin\n * @param {boolean} force\n * If true, reload the text stream even if it did not change.\n * @param {boolean=} adaptation\n * If true, update the media state to indicate MediaSourceEngine should\n * reset the timestamp offset to ensure the new track segments are correctly\n * placed on the timeline.\n * @private\n */\n switchInternal_(stream, clearBuffer, safeMargin, force, adaptation) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const type = /** @type {!ContentType} */(stream.type);\n const mediaState = this.mediaStates_.get(type);\n\n if (!mediaState && stream.type == ContentType.TEXT) {\n this.loadNewTextStream_(stream);\n return;\n }\n\n goog.asserts.assert(mediaState, 'switch: expected mediaState to exist');\n if (!mediaState) {\n return;\n }\n\n if (mediaState.restoreStreamAfterTrickPlay) {\n shaka.log.debug('switch during trick play mode', stream);\n\n // Already in trick play mode, so stick with trick mode tracks if\n // possible.\n if (stream.trickModeVideo) {\n // Use the trick mode stream, but revert to the new selection later.\n mediaState.restoreStreamAfterTrickPlay = stream;\n stream = stream.trickModeVideo;\n shaka.log.debug('switch found trick play stream', stream);\n } else {\n // There is no special trick mode video for this stream!\n mediaState.restoreStreamAfterTrickPlay = null;\n shaka.log.debug('switch found no special trick play stream');\n }\n }\n\n if (mediaState.stream == stream && !force) {\n const streamTag = shaka.media.StreamingEngine.logPrefix_(mediaState);\n shaka.log.debug('switch: Stream ' + streamTag + ' already active');\n return;\n }\n\n if (this.audioPrefetchMap_.has(stream)) {\n mediaState.segmentPrefetch = this.audioPrefetchMap_.get(stream);\n } else if (mediaState.segmentPrefetch) {\n mediaState.segmentPrefetch.switchStream(stream);\n }\n\n if (stream.type == ContentType.TEXT) {\n // Mime types are allowed to change for text streams.\n // Reinitialize the text parser, but only if we are going to fetch the\n // init segment again.\n const fullMimeType = shaka.util.MimeUtils.getFullType(\n stream.mimeType, stream.codecs);\n this.playerInterface_.mediaSourceEngine.reinitText(\n fullMimeType, this.manifest_.sequenceMode, stream.external);\n }\n\n // Releases the segmentIndex of the old stream.\n // Do not close segment indexes we are prefetching.\n if (!this.audioPrefetchMap_.has(mediaState.stream)) {\n if (mediaState.stream.closeSegmentIndex) {\n if (mediaState.performingUpdate) {\n const oldStreamTag =\n shaka.media.StreamingEngine.logPrefix_(mediaState);\n if (!this.deferredCloseSegmentIndex_.has(oldStreamTag)) {\n // The ongoing update is still using the old stream's segment\n // reference information.\n // If we close the old stream now, the update will not complete\n // correctly.\n // The next onUpdate_() for this content type will resume the\n // closeSegmentIndex() operation for the old stream once the ongoing\n // update has finished, then immediately create a new segment index.\n this.deferredCloseSegmentIndex_.set(\n oldStreamTag, mediaState.stream.closeSegmentIndex);\n }\n } else {\n mediaState.stream.closeSegmentIndex();\n }\n }\n }\n\n const shouldResetMediaSource =\n mediaState.stream.isAudioMuxedInVideo != stream.isAudioMuxedInVideo;\n\n mediaState.stream = stream;\n mediaState.segmentIterator = null;\n mediaState.adaptation = !!adaptation;\n\n const streamTag = shaka.media.StreamingEngine.logPrefix_(mediaState);\n shaka.log.debug('switch: switching to Stream ' + streamTag);\n\n if (shouldResetMediaSource) {\n this.resetMediaSource(/* force= */ true, /* clearBuffer= */ false);\n return;\n }\n\n if (clearBuffer) {\n if (mediaState.clearingBuffer) {\n // We are already going to clear the buffer, but make sure it is also\n // flushed.\n mediaState.waitingToFlushBuffer = true;\n } else if (mediaState.performingUpdate) {\n // We are performing an update, so we have to wait until it's finished.\n // onUpdate_() will call clearBuffer_() when the update has finished.\n // We need to save the safe margin because its value will be needed when\n // clearing the buffer after the update.\n mediaState.waitingToClearBuffer = true;\n mediaState.clearBufferSafeMargin = safeMargin;\n mediaState.waitingToFlushBuffer = true;\n } else {\n // Cancel the update timer, if any.\n this.cancelUpdate_(mediaState);\n // Clear right away.\n this.clearBuffer_(mediaState, /* flush= */ true, safeMargin)\n .catch((error) => {\n if (this.playerInterface_) {\n goog.asserts.assert(error instanceof shaka.util.Error,\n 'Wrong error type!');\n this.playerInterface_.onError(error);\n }\n });\n }\n } else {\n if (!mediaState.performingUpdate && !mediaState.updateTimer) {\n this.scheduleUpdate_(mediaState, 0);\n }\n }\n\n this.makeAbortDecision_(mediaState).catch((error) => {\n if (this.playerInterface_) {\n goog.asserts.assert(error instanceof shaka.util.Error,\n 'Wrong error type!');\n this.playerInterface_.onError(error);\n }\n });\n }\n\n\n /**\n * Decide if it makes sense to abort the current operation, and abort it if\n * so.\n *\n * @param {!shaka.media.StreamingEngine.MediaState_} mediaState\n * @private\n */\n async makeAbortDecision_(mediaState) {\n // If the operation is completed, it will be set to null, and there's no\n // need to abort the request.\n if (!mediaState.operation) {\n return;\n }\n\n const originalStream = mediaState.stream;\n const originalOperation = mediaState.operation;\n\n if (!originalStream.segmentIndex) {\n // Create the new segment index so the time taken is accounted for when\n // deciding whether to abort.\n await originalStream.createSegmentIndex();\n }\n\n if (mediaState.operation != originalOperation) {\n // The original operation completed while we were getting a segment index,\n // so there's nothing to do now.\n return;\n }\n\n if (mediaState.stream != originalStream) {\n // The stream changed again while we were getting a segment index. We\n // can't carry out this check, since another one might be in progress by\n // now.\n return;\n }\n\n goog.asserts.assert(mediaState.stream.segmentIndex,\n 'Segment index should exist by now!');\n\n if (this.shouldAbortCurrentRequest_(mediaState)) {\n shaka.log.info('Aborting current segment request.');\n mediaState.operation.abort();\n }\n }\n\n /**\n * Returns whether we should abort the current request.\n *\n * @param {!shaka.media.StreamingEngine.MediaState_} mediaState\n * @return {boolean}\n * @private\n */\n shouldAbortCurrentRequest_(mediaState) {\n goog.asserts.assert(mediaState.operation,\n 'Abort logic requires an ongoing operation!');\n goog.asserts.assert(mediaState.stream && mediaState.stream.segmentIndex,\n 'Abort logic requires a segment index');\n\n const presentationTime = this.playerInterface_.getPresentationTime();\n const bufferEnd =\n this.playerInterface_.mediaSourceEngine.bufferEnd(mediaState.type);\n\n // The next segment to append from the current stream. This doesn't\n // account for a pending network request and will likely be different from\n // that since we just switched.\n const timeNeeded = this.getTimeNeeded_(mediaState, presentationTime);\n const index = mediaState.stream.segmentIndex.find(timeNeeded);\n const newSegment =\n index == null ? null : mediaState.stream.segmentIndex.get(index);\n\n let newSegmentSize = newSegment ? newSegment.getSize() : null;\n if (newSegment && !newSegmentSize) {\n // compute approximate segment size using stream bandwidth\n const duration = newSegment.getEndTime() - newSegment.getStartTime();\n const bandwidth = mediaState.stream.bandwidth || 0;\n // bandwidth is in bits per second, and the size is in bytes\n newSegmentSize = duration * bandwidth / 8;\n }\n\n if (!newSegmentSize) {\n return false;\n }\n\n // When switching, we'll need to download the init segment.\n const init = newSegment.initSegmentReference;\n if (init) {\n newSegmentSize += init.getSize() || 0;\n }\n\n const bandwidthEstimate = this.playerInterface_.getBandwidthEstimate();\n\n // The estimate is in bits per second, and the size is in bytes. The time\n // remaining is in seconds after this calculation.\n const timeToFetchNewSegment = (newSegmentSize * 8) / bandwidthEstimate;\n\n // If the new segment can be finished in time without risking a buffer\n // underflow, we should abort the old one and switch.\n const bufferedAhead = (bufferEnd || 0) - presentationTime;\n const safetyBuffer = Math.max(\n this.manifest_.minBufferTime || 0,\n this.config_.rebufferingGoal);\n const safeBufferedAhead = bufferedAhead - safetyBuffer;\n if (timeToFetchNewSegment < safeBufferedAhead) {\n return true;\n }\n\n // If the thing we want to switch to will be done more quickly than what\n // we've got in progress, we should abort the old one and switch.\n const bytesRemaining = mediaState.operation.getBytesRemaining();\n if (bytesRemaining > newSegmentSize) {\n return true;\n }\n\n // Otherwise, complete the operation in progress.\n return false;\n }\n\n\n /**\n * Notifies the StreamingEngine that the playhead has moved to a valid time\n * within the presentation timeline.\n */\n seeked() {\n if (!this.playerInterface_) {\n // Already destroyed.\n return;\n }\n\n const presentationTime = this.playerInterface_.getPresentationTime();\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const newTimeIsBuffered = (type) => {\n return this.playerInterface_.mediaSourceEngine.isBuffered(\n type, presentationTime);\n };\n\n let streamCleared = false;\n for (const type of this.mediaStates_.keys()) {\n const mediaState = this.mediaStates_.get(type);\n const logPrefix = shaka.media.StreamingEngine.logPrefix_(mediaState);\n\n if (!newTimeIsBuffered(type)) {\n if (mediaState.segmentPrefetch) {\n mediaState.segmentPrefetch.resetPosition();\n }\n if (mediaState.type === ContentType.AUDIO) {\n for (const prefetch of this.audioPrefetchMap_.values()) {\n prefetch.resetPosition();\n }\n }\n mediaState.segmentIterator = null;\n const bufferEnd =\n this.playerInterface_.mediaSourceEngine.bufferEnd(type);\n const somethingBuffered = bufferEnd != null;\n\n // Don't clear the buffer unless something is buffered. This extra\n // check prevents extra, useless calls to clear the buffer.\n if (somethingBuffered || mediaState.performingUpdate) {\n this.forceClearBuffer_(mediaState);\n streamCleared = true;\n }\n\n // If there is an operation in progress, stop it now.\n if (mediaState.operation) {\n mediaState.operation.abort();\n shaka.log.debug(logPrefix, 'Aborting operation due to seek');\n mediaState.operation = null;\n }\n\n // The pts has shifted from the seek, invalidating captions currently\n // in the text buffer. Thus, clear and reset the caption parser.\n if (type === ContentType.TEXT) {\n this.playerInterface_.mediaSourceEngine.resetCaptionParser();\n }\n\n // Mark the media state as having seeked, so that the new buffers know\n // that they will need to be at a new position (for sequence mode).\n mediaState.seeked = true;\n }\n }\n\n if (!streamCleared) {\n shaka.log.debug(\n '(all): seeked: buffered seek: presentationTime=' + presentationTime);\n }\n }\n\n\n /**\n * Clear the buffer for a given stream. Unlike clearBuffer_, this will handle\n * cases where a MediaState is performing an update. After this runs, the\n * MediaState will have a pending update.\n * @param {!shaka.media.StreamingEngine.MediaState_} mediaState\n * @private\n */\n forceClearBuffer_(mediaState) {\n const logPrefix = shaka.media.StreamingEngine.logPrefix_(mediaState);\n\n if (mediaState.clearingBuffer) {\n // We're already clearing the buffer, so we don't need to clear the\n // buffer again.\n shaka.log.debug(logPrefix, 'clear: already clearing the buffer');\n return;\n }\n\n if (mediaState.waitingToClearBuffer) {\n // May not be performing an update, but an update will still happen.\n // See: https://github.com/shaka-project/shaka-player/issues/334\n shaka.log.debug(logPrefix, 'clear: already waiting');\n return;\n }\n\n if (mediaState.performingUpdate) {\n // We are performing an update, so we have to wait until it's finished.\n // onUpdate_() will call clearBuffer_() when the update has finished.\n shaka.log.debug(logPrefix, 'clear: currently updating');\n mediaState.waitingToClearBuffer = true;\n // We can set the offset to zero to remember that this was a call to\n // clearAllBuffers.\n mediaState.clearBufferSafeMargin = 0;\n return;\n }\n\n const type = mediaState.type;\n if (this.playerInterface_.mediaSourceEngine.bufferStart(type) == null) {\n // Nothing buffered.\n shaka.log.debug(logPrefix, 'clear: nothing buffered');\n if (mediaState.updateTimer == null) {\n // Note: an update cycle stops when we buffer to the end of the\n // presentation, or when we raise an error.\n this.scheduleUpdate_(mediaState, 0);\n }\n return;\n }\n\n // An update may be scheduled, but we can just cancel it and clear the\n // buffer right away. Note: clearBuffer_() will schedule the next update.\n shaka.log.debug(logPrefix, 'clear: handling right now');\n this.cancelUpdate_(mediaState);\n this.clearBuffer_(mediaState, /* flush= */ false, 0).catch((error) => {\n if (this.playerInterface_) {\n goog.asserts.assert(error instanceof shaka.util.Error,\n 'Wrong error type!');\n this.playerInterface_.onError(error);\n }\n });\n }\n\n\n /**\n * Initializes the initial streams and media states. This will schedule\n * updates for the given types.\n *\n * @param {!Map.} segmentPrefetchById\n * @return {!Promise}\n * @private\n */\n async initStreams_(segmentPrefetchById) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n goog.asserts.assert(this.config_,\n 'StreamingEngine configure() must be called before init()!');\n\n if (!this.currentVariant_) {\n shaka.log.error('init: no Streams chosen');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.STREAMING,\n shaka.util.Error.Code.STREAMING_ENGINE_STARTUP_INVALID_STATE);\n }\n\n /**\n * @type {!Map.}\n */\n const streamsByType = new Map();\n /** @type {!Set.} */\n const streams = new Set();\n\n if (this.currentVariant_.audio) {\n streamsByType.set(ContentType.AUDIO, this.currentVariant_.audio);\n streams.add(this.currentVariant_.audio);\n }\n\n if (this.currentVariant_.video) {\n streamsByType.set(ContentType.VIDEO, this.currentVariant_.video);\n streams.add(this.currentVariant_.video);\n }\n\n if (this.currentTextStream_) {\n streamsByType.set(ContentType.TEXT, this.currentTextStream_);\n streams.add(this.currentTextStream_);\n }\n\n // Init MediaSourceEngine.\n const mediaSourceEngine = this.playerInterface_.mediaSourceEngine;\n\n await mediaSourceEngine.init(streamsByType,\n this.manifest_.sequenceMode,\n this.manifest_.type,\n this.manifest_.ignoreManifestTimestampsInSegmentsMode,\n );\n this.destroyer_.ensureNotDestroyed();\n\n this.updateDuration();\n\n for (const type of streamsByType.keys()) {\n const stream = streamsByType.get(type);\n if (!this.mediaStates_.has(type)) {\n const mediaState = this.createMediaState_(stream);\n if (segmentPrefetchById.has(stream.id)) {\n const segmentPrefetch = segmentPrefetchById.get(stream.id);\n segmentPrefetch.replaceFetchDispatcher(\n (reference, stream, streamDataCallback) => {\n return this.dispatchFetch_(\n reference, stream, streamDataCallback);\n });\n mediaState.segmentPrefetch = segmentPrefetch;\n }\n this.mediaStates_.set(type, mediaState);\n this.scheduleUpdate_(mediaState, 0);\n }\n }\n }\n\n\n /**\n * Creates a media state.\n *\n * @param {shaka.extern.Stream} stream\n * @return {shaka.media.StreamingEngine.MediaState_}\n * @private\n */\n createMediaState_(stream) {\n return /** @type {shaka.media.StreamingEngine.MediaState_} */ ({\n stream,\n type: stream.type,\n segmentIterator: null,\n segmentPrefetch: this.createSegmentPrefetch_(stream),\n lastSegmentReference: null,\n lastInitSegmentReference: null,\n lastTimestampOffset: null,\n lastAppendWindowStart: null,\n lastAppendWindowEnd: null,\n restoreStreamAfterTrickPlay: null,\n endOfStream: false,\n performingUpdate: false,\n updateTimer: null,\n waitingToClearBuffer: false,\n clearBufferSafeMargin: 0,\n waitingToFlushBuffer: false,\n clearingBuffer: false,\n // The playhead might be seeking on startup, if a start time is set, so\n // start \"seeked\" as true.\n seeked: true,\n recovering: false,\n hasError: false,\n operation: null,\n });\n }\n\n /**\n * Creates a media state.\n *\n * @param {shaka.extern.Stream} stream\n * @return {shaka.media.SegmentPrefetch | null}\n * @private\n */\n createSegmentPrefetch_(stream) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n if (stream.type === ContentType.VIDEO &&\n this.config_.disableVideoPrefetch) {\n return null;\n }\n if (stream.type === ContentType.AUDIO &&\n this.config_.disableAudioPrefetch) {\n return null;\n }\n const MimeUtils = shaka.util.MimeUtils;\n const CEA608_MIME = MimeUtils.CEA608_CLOSED_CAPTION_MIMETYPE;\n const CEA708_MIME = MimeUtils.CEA708_CLOSED_CAPTION_MIMETYPE;\n if (stream.type === ContentType.TEXT &&\n (stream.mimeType == CEA608_MIME || stream.mimeType == CEA708_MIME)) {\n return null;\n }\n if (stream.type === ContentType.TEXT &&\n this.config_.disableTextPrefetch) {\n return null;\n }\n if (this.audioPrefetchMap_.has(stream)) {\n return this.audioPrefetchMap_.get(stream);\n }\n const type = /** @type {!shaka.util.ManifestParserUtils.ContentType} */\n (stream.type);\n const mediaState = this.mediaStates_.get(type);\n const currentSegmentPrefetch = mediaState && mediaState.segmentPrefetch;\n if (currentSegmentPrefetch &&\n stream === currentSegmentPrefetch.getStream()) {\n return currentSegmentPrefetch;\n }\n if (this.config_.segmentPrefetchLimit > 0) {\n const reverse = this.playerInterface_.getPlaybackRate() < 0;\n return new shaka.media.SegmentPrefetch(\n this.config_.segmentPrefetchLimit,\n stream,\n (reference, stream, streamDataCallback) => {\n return this.dispatchFetch_(reference, stream, streamDataCallback);\n },\n reverse);\n }\n return null;\n }\n\n /**\n * Populates the prefetch map depending on the configuration\n * @private\n */\n updatePrefetchMapForAudio_() {\n const prefetchLimit = this.config_.segmentPrefetchLimit;\n const prefetchLanguages = this.config_.prefetchAudioLanguages;\n const LanguageUtils = shaka.util.LanguageUtils;\n\n for (const variant of this.manifest_.variants) {\n if (!variant.audio) {\n continue;\n }\n\n if (this.audioPrefetchMap_.has(variant.audio)) {\n // if we already have a segment prefetch,\n // update it's prefetch limit and if the new limit isn't positive,\n // remove the segment prefetch from our prefetch map.\n const prefetch = this.audioPrefetchMap_.get(variant.audio);\n prefetch.resetLimit(prefetchLimit);\n if (!(prefetchLimit > 0) ||\n !prefetchLanguages.some(\n (lang) => LanguageUtils.areLanguageCompatible(\n variant.audio.language, lang))\n ) {\n const type = /** @type {!shaka.util.ManifestParserUtils.ContentType}*/\n (variant.audio.type);\n const mediaState = this.mediaStates_.get(type);\n const currentSegmentPrefetch = mediaState &&\n mediaState.segmentPrefetch;\n // if this prefetch isn't the current one, we want to clear it\n if (prefetch !== currentSegmentPrefetch) {\n prefetch.clearAll();\n }\n this.audioPrefetchMap_.delete(variant.audio);\n }\n continue;\n }\n\n // don't try to create a new segment prefetch if the limit isn't positive.\n if (prefetchLimit <= 0) {\n continue;\n }\n\n // only create a segment prefetch if its language is configured\n // to be prefetched\n if (!prefetchLanguages.some(\n (lang) => LanguageUtils.areLanguageCompatible(\n variant.audio.language, lang))) {\n continue;\n }\n\n // use the helper to create a segment prefetch to ensure that existing\n // objects are reused.\n const segmentPrefetch = this.createSegmentPrefetch_(variant.audio);\n\n // if a segment prefetch wasn't created, skip the rest\n if (!segmentPrefetch) {\n continue;\n }\n\n if (!variant.audio.segmentIndex) {\n variant.audio.createSegmentIndex();\n }\n\n this.audioPrefetchMap_.set(variant.audio, segmentPrefetch);\n }\n }\n\n /**\n * Sets the MediaSource's duration.\n */\n updateDuration() {\n const duration = this.manifest_.presentationTimeline.getDuration();\n if (duration < Infinity) {\n this.playerInterface_.mediaSourceEngine.setDuration(duration);\n } else {\n // To set the media source live duration as Infinity\n // If infiniteLiveStreamDuration as true\n const duration =\n this.config_.infiniteLiveStreamDuration ? Infinity : Math.pow(2, 32);\n // Not all platforms support infinite durations, so set a finite duration\n // so we can append segments and so the user agent can seek.\n this.playerInterface_.mediaSourceEngine.setDuration(duration);\n }\n }\n\n\n /**\n * Called when |mediaState|'s update timer has expired.\n *\n * @param {!shaka.media.StreamingEngine.MediaState_} mediaState\n * @suppress {suspiciousCode} The compiler assumes that updateTimer can't\n * change during the await, and so complains about the null check.\n * @private\n */\n async onUpdate_(mediaState) {\n this.destroyer_.ensureNotDestroyed();\n\n const logPrefix = shaka.media.StreamingEngine.logPrefix_(mediaState);\n\n // Sanity check.\n goog.asserts.assert(\n !mediaState.performingUpdate && (mediaState.updateTimer != null),\n logPrefix + ' unexpected call to onUpdate_()');\n if (mediaState.performingUpdate || (mediaState.updateTimer == null)) {\n return;\n }\n\n goog.asserts.assert(\n !mediaState.clearingBuffer, logPrefix +\n ' onUpdate_() should not be called when clearing the buffer');\n if (mediaState.clearingBuffer) {\n return;\n }\n\n mediaState.updateTimer = null;\n\n // Handle pending buffer clears.\n if (mediaState.waitingToClearBuffer) {\n // Note: clearBuffer_() will schedule the next update.\n shaka.log.debug(logPrefix, 'skipping update and clearing the buffer');\n await this.clearBuffer_(\n mediaState, mediaState.waitingToFlushBuffer,\n mediaState.clearBufferSafeMargin);\n return;\n }\n\n // If stream switches happened during the previous update_() for this\n // content type, close out the old streams that were switched away from.\n // Even if we had switched away from the active stream 'A' during the\n // update_(), e.g. (A -> B -> A), closing 'A' is permissible here since we\n // will immediately re-create it in the logic below.\n this.handleDeferredCloseSegmentIndexes_(mediaState);\n\n // Make sure the segment index exists. If not, create the segment index.\n if (!mediaState.stream.segmentIndex) {\n const thisStream = mediaState.stream;\n\n try {\n await mediaState.stream.createSegmentIndex();\n } catch (error) {\n await this.handleStreamingError_(mediaState, error);\n return;\n }\n\n if (thisStream != mediaState.stream) {\n // We switched streams while in the middle of this async call to\n // createSegmentIndex. Abandon this update and schedule a new one if\n // there's not already one pending.\n // Releases the segmentIndex of the old stream.\n if (thisStream.closeSegmentIndex) {\n goog.asserts.assert(!mediaState.stream.segmentIndex,\n 'mediastate.stream should not have segmentIndex yet.');\n thisStream.closeSegmentIndex();\n }\n if (!mediaState.performingUpdate && !mediaState.updateTimer) {\n this.scheduleUpdate_(mediaState, 0);\n }\n return;\n }\n }\n\n // Update the MediaState.\n try {\n const delay = this.update_(mediaState);\n if (delay != null) {\n this.scheduleUpdate_(mediaState, delay);\n mediaState.hasError = false;\n }\n } catch (error) {\n await this.handleStreamingError_(mediaState, error);\n return;\n }\n\n const mediaStates = Array.from(this.mediaStates_.values());\n\n // Check if we've buffered to the end of the presentation. We delay adding\n // the audio and video media states, so it is possible for the text stream\n // to be the only state and buffer to the end. So we need to wait until we\n // have completed startup to determine if we have reached the end.\n if (this.startupComplete_ &&\n mediaStates.every((ms) => ms.endOfStream)) {\n shaka.log.v1(logPrefix, 'calling endOfStream()...');\n await this.playerInterface_.mediaSourceEngine.endOfStream();\n this.destroyer_.ensureNotDestroyed();\n\n // If the media segments don't reach the end, then we need to update the\n // timeline duration to match the final media duration to avoid\n // buffering forever at the end.\n // We should only do this if the duration needs to shrink.\n // Growing it by less than 1ms can actually cause buffering on\n // replay, as in https://github.com/shaka-project/shaka-player/issues/979\n // On some platforms, this can spuriously be 0, so ignore this case.\n // https://github.com/shaka-project/shaka-player/issues/1967,\n const duration = this.playerInterface_.mediaSourceEngine.getDuration();\n if (duration != 0 &&\n duration < this.manifest_.presentationTimeline.getDuration()) {\n this.manifest_.presentationTimeline.setDuration(duration);\n }\n }\n }\n\n\n /**\n * Updates the given MediaState.\n *\n * @param {shaka.media.StreamingEngine.MediaState_} mediaState\n * @return {?number} The number of seconds to wait until updating again or\n * null if another update does not need to be scheduled.\n * @private\n */\n update_(mediaState) {\n goog.asserts.assert(this.manifest_, 'manifest_ should not be null');\n goog.asserts.assert(this.config_, 'config_ should not be null');\n\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n // Do not schedule update for closed captions text mediastate, since closed\n // captions are embedded in video streams.\n if (shaka.media.StreamingEngine.isEmbeddedText_(mediaState)) {\n this.playerInterface_.mediaSourceEngine.setSelectedClosedCaptionId(\n mediaState.stream.originalId || '');\n return null;\n } else if (mediaState.type == ContentType.TEXT) {\n // Disable embedded captions if not desired (e.g. if transitioning from\n // embedded to not-embedded captions).\n this.playerInterface_.mediaSourceEngine.clearSelectedClosedCaptionId();\n }\n\n if (mediaState.stream.isAudioMuxedInVideo) {\n return null;\n }\n\n if (!this.playerInterface_.mediaSourceEngine.isStreamingAllowed() &&\n mediaState.type != ContentType.TEXT) {\n // It is not allowed to add segments yet, so we schedule an update to\n // check again later. So any prediction we make now could be terribly\n // invalid soon.\n return this.config_.updateIntervalSeconds / 2;\n }\n\n const logPrefix = shaka.media.StreamingEngine.logPrefix_(mediaState);\n\n // Compute how far we've buffered ahead of the playhead.\n const presentationTime = this.playerInterface_.getPresentationTime();\n\n if (mediaState.type === ContentType.AUDIO) {\n // evict all prefetched segments that are before the presentationTime\n for (const stream of this.audioPrefetchMap_.keys()) {\n const prefetch = this.audioPrefetchMap_.get(stream);\n prefetch.evict(presentationTime, /* clearInitSegments= */ true);\n prefetch.prefetchSegmentsByTime(presentationTime);\n }\n }\n\n // Get the next timestamp we need.\n const timeNeeded = this.getTimeNeeded_(mediaState, presentationTime);\n shaka.log.v2(logPrefix, 'timeNeeded=' + timeNeeded);\n\n // Get the amount of content we have buffered, accounting for drift. This\n // is only used to determine if we have meet the buffering goal. This\n // should be the same method that PlayheadObserver uses.\n const bufferedAhead =\n this.playerInterface_.mediaSourceEngine.bufferedAheadOf(\n mediaState.type, presentationTime);\n\n shaka.log.v2(logPrefix,\n 'update_:',\n 'presentationTime=' + presentationTime,\n 'bufferedAhead=' + bufferedAhead);\n\n const unscaledBufferingGoal = Math.max(\n this.manifest_.minBufferTime || 0,\n this.config_.rebufferingGoal,\n this.config_.bufferingGoal);\n\n const scaledBufferingGoal = Math.max(1,\n unscaledBufferingGoal * this.bufferingScale_);\n\n // Check if we've buffered to the end of the presentation.\n const timeUntilEnd =\n this.manifest_.presentationTimeline.getDuration() - timeNeeded;\n const oneMicrosecond = 1e-6;\n\n const bufferEnd =\n this.playerInterface_.mediaSourceEngine.bufferEnd(mediaState.type);\n\n if (timeUntilEnd < oneMicrosecond && !!bufferEnd) {\n // We shouldn't rebuffer if the playhead is close to the end of the\n // presentation.\n shaka.log.debug(logPrefix, 'buffered to end of presentation');\n mediaState.endOfStream = true;\n\n if (mediaState.type == ContentType.VIDEO) {\n // Since the text stream of CEA closed captions doesn't have update\n // timer, we have to set the text endOfStream based on the video\n // stream's endOfStream state.\n const textState = this.mediaStates_.get(ContentType.TEXT);\n if (textState &&\n shaka.media.StreamingEngine.isEmbeddedText_(textState)) {\n textState.endOfStream = true;\n }\n }\n return null;\n }\n mediaState.endOfStream = false;\n\n // If we've buffered to the buffering goal then schedule an update.\n if (bufferedAhead >= scaledBufferingGoal) {\n shaka.log.v2(logPrefix, 'buffering goal met');\n\n // Do not try to predict the next update. Just poll according to\n // configuration (seconds). The playback rate can change at any time, so\n // any prediction we make now could be terribly invalid soon.\n return this.config_.updateIntervalSeconds / 2;\n }\n\n // Lack of segment iterator is the best indicator stream has changed.\n const streamChanged = !mediaState.segmentIterator;\n const reference = this.getSegmentReferenceNeeded_(\n mediaState, presentationTime, bufferEnd);\n if (!reference) {\n // The segment could not be found, does not exist, or is not available.\n // In any case just try again... if the manifest is incomplete or is not\n // being updated then we'll idle forever; otherwise, we'll end up getting\n // a SegmentReference eventually.\n return this.config_.updateIntervalSeconds;\n }\n // Get media state adaptation and reset this value. By guarding it during\n // actual stream change we ensure it won't be cleaned by accident on regular\n // append.\n let adaptation = false;\n if (streamChanged && mediaState.adaptation) {\n adaptation = true;\n mediaState.adaptation = false;\n }\n\n // Do not let any one stream get far ahead of any other.\n let minTimeNeeded = Infinity;\n const mediaStates = Array.from(this.mediaStates_.values());\n for (const otherState of mediaStates) {\n // Do not consider embedded captions in this calculation. It could lead\n // to hangs in streaming.\n if (shaka.media.StreamingEngine.isEmbeddedText_(otherState)) {\n continue;\n }\n // If there is no next segment, ignore this stream. This happens with\n // text when there's a Period with no text in it.\n if (otherState.segmentIterator && !otherState.segmentIterator.current()) {\n continue;\n }\n\n const timeNeeded = this.getTimeNeeded_(otherState, presentationTime);\n minTimeNeeded = Math.min(minTimeNeeded, timeNeeded);\n }\n\n const maxSegmentDuration =\n this.manifest_.presentationTimeline.getMaxSegmentDuration();\n const maxRunAhead = maxSegmentDuration *\n shaka.media.StreamingEngine.MAX_RUN_AHEAD_SEGMENTS_;\n if (timeNeeded >= minTimeNeeded + maxRunAhead) {\n // Wait and give other media types time to catch up to this one.\n // For example, let video buffering catch up to audio buffering before\n // fetching another audio segment.\n shaka.log.v2(logPrefix, 'waiting for other streams to buffer');\n return this.config_.updateIntervalSeconds;\n }\n\n if (mediaState.segmentPrefetch && mediaState.segmentIterator &&\n !this.audioPrefetchMap_.has(mediaState.stream)) {\n mediaState.segmentPrefetch.evict(reference.startTime);\n mediaState.segmentPrefetch.prefetchSegmentsByTime(reference.startTime);\n }\n\n const p = this.fetchAndAppend_(mediaState, presentationTime, reference,\n adaptation);\n p.catch(() => {}); // TODO(#1993): Handle asynchronous errors.\n return null;\n }\n\n\n /**\n * Gets the next timestamp needed. Returns the playhead's position if the\n * buffer is empty; otherwise, returns the time at which the last segment\n * appended ends.\n *\n * @param {shaka.media.StreamingEngine.MediaState_} mediaState\n * @param {number} presentationTime\n * @return {number} The next timestamp needed.\n * @private\n */\n getTimeNeeded_(mediaState, presentationTime) {\n // Get the next timestamp we need. We must use |lastSegmentReference|\n // to determine this and not the actual buffer for two reasons:\n // 1. Actual segments end slightly before their advertised end times, so\n // the next timestamp we need is actually larger than |bufferEnd|.\n // 2. There may be drift (the timestamps in the segments are ahead/behind\n // of the timestamps in the manifest), but we need drift-free times\n // when comparing times against the presentation timeline.\n if (!mediaState.lastSegmentReference) {\n return presentationTime;\n }\n\n return mediaState.lastSegmentReference.endTime;\n }\n\n\n /**\n * Gets the SegmentReference of the next segment needed.\n *\n * @param {shaka.media.StreamingEngine.MediaState_} mediaState\n * @param {number} presentationTime\n * @param {?number} bufferEnd\n * @return {shaka.media.SegmentReference} The SegmentReference of the\n * next segment needed. Returns null if a segment could not be found, does\n * not exist, or is not available.\n * @private\n */\n getSegmentReferenceNeeded_(mediaState, presentationTime, bufferEnd) {\n const logPrefix = shaka.media.StreamingEngine.logPrefix_(mediaState);\n goog.asserts.assert(\n mediaState.stream.segmentIndex,\n 'segment index should have been generated already');\n\n if (mediaState.segmentIterator) {\n // Something is buffered from the same Stream. Use the current position\n // in the segment index. This is updated via next() after each segment is\n // appended.\n return mediaState.segmentIterator.current();\n } else if (mediaState.lastSegmentReference || bufferEnd) {\n // Something is buffered from another Stream.\n const time = mediaState.lastSegmentReference ?\n mediaState.lastSegmentReference.endTime :\n bufferEnd;\n goog.asserts.assert(time != null, 'Should have a time to search');\n shaka.log.v1(\n logPrefix, 'looking up segment from new stream endTime:', time);\n\n const reverse = this.playerInterface_.getPlaybackRate() < 0;\n if (mediaState.stream.segmentIndex) {\n mediaState.segmentIterator =\n mediaState.stream.segmentIndex.getIteratorForTime(\n time, /* allowNonIndepedent= */ false, reverse);\n }\n const ref = mediaState.segmentIterator &&\n mediaState.segmentIterator.next().value;\n if (ref == null) {\n shaka.log.warning(logPrefix, 'cannot find segment', 'endTime:', time);\n }\n return ref;\n } else {\n // Nothing is buffered. Start at the playhead time.\n\n // If there's positive drift then we need to adjust the lookup time, and\n // may wind up requesting the previous segment to be safe.\n // inaccurateManifestTolerance should be 0 for low latency streaming.\n const inaccurateTolerance = this.manifest_.sequenceMode ?\n 0 : this.config_.inaccurateManifestTolerance;\n const lookupTime = Math.max(presentationTime - inaccurateTolerance, 0);\n\n shaka.log.v1(logPrefix, 'looking up segment',\n 'lookupTime:', lookupTime,\n 'presentationTime:', presentationTime);\n\n const reverse = this.playerInterface_.getPlaybackRate() < 0;\n let ref = null;\n if (inaccurateTolerance) {\n if (mediaState.stream.segmentIndex) {\n mediaState.segmentIterator =\n mediaState.stream.segmentIndex.getIteratorForTime(\n lookupTime, /* allowNonIndepedent= */ false, reverse);\n }\n ref = mediaState.segmentIterator &&\n mediaState.segmentIterator.next().value;\n }\n if (!ref) {\n // If we can't find a valid segment with the drifted time, look for a\n // segment with the presentation time.\n if (mediaState.stream.segmentIndex) {\n mediaState.segmentIterator =\n mediaState.stream.segmentIndex.getIteratorForTime(\n presentationTime, /* allowNonIndepedent= */ false, reverse);\n }\n ref = mediaState.segmentIterator &&\n mediaState.segmentIterator.next().value;\n }\n if (ref == null) {\n shaka.log.warning(logPrefix, 'cannot find segment',\n 'lookupTime:', lookupTime,\n 'presentationTime:', presentationTime);\n }\n return ref;\n }\n }\n\n\n /**\n * Fetches and appends the given segment. Sets up the given MediaState's\n * associated SourceBuffer and evicts segments if either are required\n * beforehand. Schedules another update after completing successfully.\n *\n * @param {!shaka.media.StreamingEngine.MediaState_} mediaState\n * @param {number} presentationTime\n * @param {!shaka.media.SegmentReference} reference\n * @param {boolean} adaptation\n * @private\n */\n async fetchAndAppend_(mediaState, presentationTime, reference, adaptation) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const StreamingEngine = shaka.media.StreamingEngine;\n const logPrefix = StreamingEngine.logPrefix_(mediaState);\n\n shaka.log.v1(logPrefix,\n 'fetchAndAppend_:',\n 'presentationTime=' + presentationTime,\n 'reference.startTime=' + reference.startTime,\n 'reference.endTime=' + reference.endTime);\n\n // Subtlety: The playhead may move while asynchronous update operations are\n // in progress, so we should avoid calling playhead.getTime() in any\n // callbacks. Furthermore, switch() or seeked() may be called at any time,\n // so we store the old iterator. This allows the mediaState to change and\n // we'll update the old iterator.\n const stream = mediaState.stream;\n const iter = mediaState.segmentIterator;\n\n mediaState.performingUpdate = true;\n\n try {\n if (reference.getStatus() ==\n shaka.media.SegmentReference.Status.MISSING) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.NETWORK,\n shaka.util.Error.Code.SEGMENT_MISSING);\n }\n await this.initSourceBuffer_(mediaState, reference, adaptation);\n this.destroyer_.ensureNotDestroyed();\n if (this.fatalError_) {\n return;\n }\n\n shaka.log.v2(logPrefix, 'fetching segment');\n const isMP4 = stream.mimeType == 'video/mp4' ||\n stream.mimeType == 'audio/mp4';\n const isReadableStreamSupported = window.ReadableStream;\n const lowLatencyMode = this.config_.lowLatencyMode &&\n this.manifest_.isLowLatency;\n // Enable MP4 low latency streaming with ReadableStream chunked data.\n // And only for DASH and HLS with byterange optimization.\n if (lowLatencyMode && isReadableStreamSupported && isMP4 &&\n (this.manifest_.type != shaka.media.ManifestParser.HLS ||\n reference.hasByterangeOptimization())) {\n let remaining = new Uint8Array(0);\n let processingResult = false;\n let callbackCalled = false;\n let streamDataCallbackError;\n const streamDataCallback = async (data) => {\n if (processingResult) {\n // If the fallback result processing was triggered, don't also\n // append the buffer here. In theory this should never happen,\n // but it does on some older TVs.\n return;\n }\n callbackCalled = true;\n this.destroyer_.ensureNotDestroyed();\n if (this.fatalError_) {\n return;\n }\n try {\n // Append the data with complete boxes.\n // Every time streamDataCallback gets called, append the new data\n // to the remaining data.\n // Find the last fully completed Mdat box, and slice the data into\n // two parts: the first part with completed Mdat boxes, and the\n // second part with an incomplete box.\n // Append the first part, and save the second part as remaining\n // data, and handle it with the next streamDataCallback call.\n remaining = this.concatArray_(remaining, data);\n let sawMDAT = false;\n let offset = 0;\n new shaka.util.Mp4Parser()\n .box('mdat', (box) => {\n offset = box.size + box.start;\n sawMDAT = true;\n })\n .parse(remaining, /* partialOkay= */ false,\n /* isChunkedData= */ true);\n if (sawMDAT) {\n const dataToAppend = remaining.subarray(0, offset);\n remaining = remaining.subarray(offset);\n await this.append_(\n mediaState, presentationTime, stream, reference, dataToAppend,\n /* isChunkedData= */ true, adaptation);\n\n if (mediaState.segmentPrefetch && mediaState.segmentIterator) {\n mediaState.segmentPrefetch.prefetchSegmentsByTime(\n reference.startTime, /* skipFirst= */ true);\n }\n }\n } catch (error) {\n streamDataCallbackError = error;\n }\n };\n\n const result =\n await this.fetch_(mediaState, reference, streamDataCallback);\n if (streamDataCallbackError) {\n throw streamDataCallbackError;\n }\n if (!callbackCalled) {\n // In some environments, we might be forced to use network plugins\n // that don't support streamDataCallback. In those cases, as a\n // fallback, append the buffer here.\n processingResult = true;\n this.destroyer_.ensureNotDestroyed();\n if (this.fatalError_) {\n return;\n }\n\n // If the text stream gets switched between fetch_() and append_(),\n // the new text parser is initialized, but the new init segment is\n // not fetched yet. That would cause an error in\n // TextParser.parseMedia().\n // See http://b/168253400\n if (mediaState.waitingToClearBuffer) {\n shaka.log.info(logPrefix, 'waitingToClearBuffer, skip append');\n mediaState.performingUpdate = false;\n this.scheduleUpdate_(mediaState, 0);\n return;\n }\n\n await this.append_(mediaState, presentationTime, stream, reference,\n result, /* chunkedData= */ false, adaptation);\n }\n\n if (mediaState.segmentPrefetch && mediaState.segmentIterator) {\n mediaState.segmentPrefetch.prefetchSegmentsByTime(\n reference.startTime, /* skipFirst= */ true);\n }\n } else {\n if (lowLatencyMode && !isReadableStreamSupported) {\n shaka.log.warning('Low latency streaming mode is enabled, but ' +\n 'ReadableStream is not supported by the browser.');\n }\n const fetchSegment = this.fetch_(mediaState, reference);\n const result = await fetchSegment;\n this.destroyer_.ensureNotDestroyed();\n if (this.fatalError_) {\n return;\n }\n this.destroyer_.ensureNotDestroyed();\n\n // If the text stream gets switched between fetch_() and append_(), the\n // new text parser is initialized, but the new init segment is not\n // fetched yet. That would cause an error in TextParser.parseMedia().\n // See http://b/168253400\n if (mediaState.waitingToClearBuffer) {\n shaka.log.info(logPrefix, 'waitingToClearBuffer, skip append');\n mediaState.performingUpdate = false;\n this.scheduleUpdate_(mediaState, 0);\n return;\n }\n\n await this.append_(mediaState, presentationTime, stream, reference,\n result, /* chunkedData= */ false, adaptation);\n }\n\n this.destroyer_.ensureNotDestroyed();\n if (this.fatalError_) {\n return;\n }\n // move to next segment after appending the current segment.\n mediaState.lastSegmentReference = reference;\n const newRef = iter.next().value;\n shaka.log.v2(logPrefix, 'advancing to next segment', newRef);\n\n mediaState.performingUpdate = false;\n mediaState.recovering = false;\n\n const info = this.playerInterface_.mediaSourceEngine.getBufferedInfo();\n const buffered = info[mediaState.type];\n // Convert the buffered object to a string capture its properties on\n // WebOS.\n shaka.log.v1(logPrefix, 'finished fetch and append',\n JSON.stringify(buffered));\n\n if (!mediaState.waitingToClearBuffer) {\n this.playerInterface_.onSegmentAppended(reference, mediaState.stream);\n }\n\n // Update right away.\n this.scheduleUpdate_(mediaState, 0);\n } catch (error) {\n this.destroyer_.ensureNotDestroyed(error);\n if (this.fatalError_) {\n return;\n }\n goog.asserts.assert(error instanceof shaka.util.Error,\n 'Should only receive a Shaka error');\n\n mediaState.performingUpdate = false;\n\n if (error.code == shaka.util.Error.Code.OPERATION_ABORTED) {\n // If the network slows down, abort the current fetch request and start\n // a new one, and ignore the error message.\n mediaState.performingUpdate = false;\n this.cancelUpdate_(mediaState);\n this.scheduleUpdate_(mediaState, 0);\n } else if (mediaState.type == ContentType.TEXT &&\n this.config_.ignoreTextStreamFailures) {\n if (error.code == shaka.util.Error.Code.BAD_HTTP_STATUS) {\n shaka.log.warning(logPrefix,\n 'Text stream failed to download. Proceeding without it.');\n } else {\n shaka.log.warning(logPrefix,\n 'Text stream failed to parse. Proceeding without it.');\n }\n this.mediaStates_.delete(ContentType.TEXT);\n } else if (error.code == shaka.util.Error.Code.QUOTA_EXCEEDED_ERROR) {\n await this.handleQuotaExceeded_(mediaState, error);\n } else {\n shaka.log.error(logPrefix, 'failed fetch and append: code=' +\n error.code);\n mediaState.hasError = true;\n\n if (error.category == shaka.util.Error.Category.NETWORK &&\n mediaState.segmentPrefetch) {\n mediaState.segmentPrefetch.removeReference(reference);\n }\n\n error.severity = shaka.util.Error.Severity.CRITICAL;\n await this.handleStreamingError_(mediaState, error);\n }\n }\n }\n\n\n /**\n * Clear per-stream error states and retry any failed streams.\n * @param {number} delaySeconds\n * @return {boolean} False if unable to retry.\n */\n retry(delaySeconds) {\n if (this.destroyer_.destroyed()) {\n shaka.log.error('Unable to retry after StreamingEngine is destroyed!');\n return false;\n }\n\n if (this.fatalError_) {\n shaka.log.error('Unable to retry after StreamingEngine encountered a ' +\n 'fatal error!');\n return false;\n }\n\n for (const mediaState of this.mediaStates_.values()) {\n const logPrefix = shaka.media.StreamingEngine.logPrefix_(mediaState);\n // Only schedule an update if it has an error, but it's not mid-update\n // and there is not already an update scheduled.\n if (mediaState.hasError && !mediaState.performingUpdate &&\n !mediaState.updateTimer) {\n shaka.log.info(logPrefix, 'Retrying after failure...');\n mediaState.hasError = false;\n this.scheduleUpdate_(mediaState, delaySeconds);\n }\n }\n\n return true;\n }\n\n\n /**\n * Append the data to the remaining data.\n * @param {!Uint8Array} remaining\n * @param {!Uint8Array} data\n * @return {!Uint8Array}\n * @private\n */\n concatArray_(remaining, data) {\n const result = new Uint8Array(remaining.length + data.length);\n result.set(remaining);\n result.set(data, remaining.length);\n return result;\n }\n\n\n /**\n * Handles a QUOTA_EXCEEDED_ERROR.\n *\n * @param {shaka.media.StreamingEngine.MediaState_} mediaState\n * @param {!shaka.util.Error} error\n * @return {!Promise}\n * @private\n */\n async handleQuotaExceeded_(mediaState, error) {\n const logPrefix = shaka.media.StreamingEngine.logPrefix_(mediaState);\n\n // The segment cannot fit into the SourceBuffer. Ideally, MediaSource would\n // have evicted old data to accommodate the segment; however, it may have\n // failed to do this if the segment is very large, or if it could not find\n // a suitable time range to remove.\n //\n // We can overcome the latter by trying to append the segment again;\n // however, to avoid continuous QuotaExceededErrors we must reduce the size\n // of the buffer going forward.\n //\n // If we've recently reduced the buffering goals, wait until the stream\n // which caused the first QuotaExceededError recovers. Doing this ensures\n // we don't reduce the buffering goals too quickly.\n\n const mediaStates = Array.from(this.mediaStates_.values());\n const waitingForAnotherStreamToRecover = mediaStates.some((ms) => {\n return ms != mediaState && ms.recovering;\n });\n\n if (!waitingForAnotherStreamToRecover) {\n const maxDisabledTime = this.getDisabledTime_(error);\n if (maxDisabledTime) {\n shaka.log.debug(logPrefix, 'Disabling stream due to quota', error);\n }\n const handled = this.playerInterface_.disableStream(\n mediaState.stream, maxDisabledTime);\n if (handled) {\n return;\n }\n // Reduction schedule: 80%, 60%, 40%, 20%, 16%, 12%, 8%, 4%, fail.\n // Note: percentages are used for comparisons to avoid rounding errors.\n const percentBefore = Math.round(100 * this.bufferingScale_);\n if (percentBefore > 20) {\n this.bufferingScale_ -= 0.2;\n } else if (percentBefore > 4) {\n this.bufferingScale_ -= 0.04;\n } else {\n shaka.log.error(\n logPrefix, 'MediaSource threw QuotaExceededError too many times');\n mediaState.hasError = true;\n this.fatalError_ = true;\n this.playerInterface_.onError(error);\n return;\n }\n const percentAfter = Math.round(100 * this.bufferingScale_);\n shaka.log.warning(\n logPrefix,\n 'MediaSource threw QuotaExceededError:',\n 'reducing buffering goals by ' + (100 - percentAfter) + '%');\n mediaState.recovering = true;\n const presentationTime = this.playerInterface_.getPresentationTime();\n await this.evict_(mediaState, presentationTime);\n } else {\n shaka.log.debug(\n logPrefix,\n 'MediaSource threw QuotaExceededError:',\n 'waiting for another stream to recover...');\n }\n\n // QuotaExceededError gets thrown if eviction didn't help to make room\n // for a segment. We want to wait for a while (4 seconds is just an\n // arbitrary number) before updating to give the playhead a chance to\n // advance, so we don't immediately throw again.\n this.scheduleUpdate_(mediaState, 4);\n }\n\n\n /**\n * Sets the given MediaState's associated SourceBuffer's timestamp offset,\n * append window, and init segment if they have changed. If an error occurs\n * then neither the timestamp offset or init segment are unset, since another\n * call to switch() will end up superseding them.\n *\n * @param {shaka.media.StreamingEngine.MediaState_} mediaState\n * @param {!shaka.media.SegmentReference} reference\n * @param {boolean} adaptation\n * @return {!Promise}\n * @private\n */\n async initSourceBuffer_(mediaState, reference, adaptation) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const MimeUtils = shaka.util.MimeUtils;\n const StreamingEngine = shaka.media.StreamingEngine;\n const logPrefix = StreamingEngine.logPrefix_(mediaState);\n const nullLastReferences = mediaState.lastSegmentReference == null;\n\n /** @type {!Array.} */\n const operations = [];\n\n // Rounding issues can cause us to remove the first frame of a Period, so\n // reduce the window start time slightly.\n const appendWindowStart = Math.max(0,\n Math.max(reference.appendWindowStart, this.playRangeStart_) -\n StreamingEngine.APPEND_WINDOW_START_FUDGE_);\n const appendWindowEnd =\n Math.min(reference.appendWindowEnd, this.playRangeEnd_) +\n StreamingEngine.APPEND_WINDOW_END_FUDGE_;\n\n goog.asserts.assert(\n reference.startTime <= appendWindowEnd,\n logPrefix + ' segment should start before append window end');\n\n const fullCodecs = (reference.codecs || mediaState.stream.codecs);\n const codecs = MimeUtils.getCodecBase(fullCodecs);\n const mimeType = MimeUtils.getBasicType(\n reference.mimeType || mediaState.stream.mimeType);\n const timestampOffset = reference.timestampOffset;\n if (timestampOffset != mediaState.lastTimestampOffset ||\n appendWindowStart != mediaState.lastAppendWindowStart ||\n appendWindowEnd != mediaState.lastAppendWindowEnd ||\n codecs != mediaState.lastCodecs ||\n mimeType != mediaState.lastMimeType) {\n shaka.log.v1(logPrefix, 'setting timestamp offset to ' + timestampOffset);\n shaka.log.v1(logPrefix,\n 'setting append window start to ' + appendWindowStart);\n shaka.log.v1(logPrefix,\n 'setting append window end to ' + appendWindowEnd);\n\n const isResetMediaSourceNecessary =\n mediaState.lastCodecs && mediaState.lastMimeType &&\n this.playerInterface_.mediaSourceEngine.isResetMediaSourceNecessary(\n mediaState.type, mimeType, fullCodecs);\n if (isResetMediaSourceNecessary) {\n let otherState = null;\n if (mediaState.type === ContentType.VIDEO) {\n otherState = this.mediaStates_.get(ContentType.AUDIO);\n } else if (mediaState.type === ContentType.AUDIO) {\n otherState = this.mediaStates_.get(ContentType.VIDEO);\n }\n if (otherState) {\n // First, abort all operations in progress on the other stream.\n await this.abortOperations_(otherState).catch(() => {});\n // Then clear our cache of the last init segment, since MSE will be\n // reloaded and no init segment will be there post-reload.\n otherState.lastInitSegmentReference = null;\n // Clear cache of append window start and end, since they will need\n // to be reapplied post-reload by streaming engine.\n otherState.lastAppendWindowStart = null;\n otherState.lastAppendWindowEnd = null;\n // Now force the existing buffer to be cleared. It is not necessary\n // to perform the MSE clear operation, but this has the side-effect\n // that our state for that stream will then match MSE's post-reload\n // state.\n this.forceClearBuffer_(otherState);\n }\n }\n\n // Dispatching init asynchronously causes the sourceBuffers in\n // the MediaSourceEngine to become detached do to race conditions\n // with mediaSource and sourceBuffers being created simultaneously.\n await this.setProperties_(mediaState, timestampOffset, appendWindowStart,\n appendWindowEnd, reference, codecs, mimeType);\n }\n\n if (!shaka.media.InitSegmentReference.equal(\n reference.initSegmentReference, mediaState.lastInitSegmentReference)) {\n mediaState.lastInitSegmentReference = reference.initSegmentReference;\n\n if (reference.isIndependent() && reference.initSegmentReference) {\n shaka.log.v1(logPrefix, 'fetching init segment');\n\n const fetchInit =\n this.fetch_(mediaState, reference.initSegmentReference);\n const append = async () => {\n try {\n const initSegment = await fetchInit;\n this.destroyer_.ensureNotDestroyed();\n\n let lastTimescale = null;\n const timescaleMap = new Map();\n\n /** @type {!shaka.extern.SpatialVideoInfo} */\n const spatialVideoInfo = {\n projection: null,\n hfov: null,\n };\n\n const parser = new shaka.util.Mp4Parser();\n const Mp4Parser = shaka.util.Mp4Parser;\n const Mp4BoxParsers = shaka.util.Mp4BoxParsers;\n parser.box('moov', Mp4Parser.children)\n .box('trak', Mp4Parser.children)\n .box('mdia', Mp4Parser.children)\n .fullBox('mdhd', (box) => {\n goog.asserts.assert(\n box.version != null,\n 'MDHD is a full box and should have a valid version.');\n const parsedMDHDBox = Mp4BoxParsers.parseMDHD(\n box.reader, box.version);\n lastTimescale = parsedMDHDBox.timescale;\n })\n .box('hdlr', (box) => {\n const parsedHDLR = Mp4BoxParsers.parseHDLR(box.reader);\n switch (parsedHDLR.handlerType) {\n case 'soun':\n timescaleMap.set(ContentType.AUDIO, lastTimescale);\n break;\n case 'vide':\n timescaleMap.set(ContentType.VIDEO, lastTimescale);\n break;\n }\n lastTimescale = null;\n })\n .box('minf', Mp4Parser.children)\n .box('stbl', Mp4Parser.children)\n .fullBox('stsd', Mp4Parser.sampleDescription)\n .box('encv', Mp4Parser.visualSampleEntry)\n .box('avc1', Mp4Parser.visualSampleEntry)\n .box('avc3', Mp4Parser.visualSampleEntry)\n .box('hev1', Mp4Parser.visualSampleEntry)\n .box('hvc1', Mp4Parser.visualSampleEntry)\n .box('dvav', Mp4Parser.visualSampleEntry)\n .box('dva1', Mp4Parser.visualSampleEntry)\n .box('dvh1', Mp4Parser.visualSampleEntry)\n .box('dvhe', Mp4Parser.visualSampleEntry)\n .box('dvc1', Mp4Parser.visualSampleEntry)\n .box('dvi1', Mp4Parser.visualSampleEntry)\n .box('vexu', Mp4Parser.children)\n .box('proj', Mp4Parser.children)\n .fullBox('prji', (box) => {\n const parsedPRJIBox = Mp4BoxParsers.parsePRJI(box.reader);\n spatialVideoInfo.projection = parsedPRJIBox.projection;\n })\n .box('hfov', (box) => {\n const parsedHFOVBox = Mp4BoxParsers.parseHFOV(box.reader);\n spatialVideoInfo.hfov = parsedHFOVBox.hfov;\n })\n .parse(initSegment);\n\n this.updateSpatialVideoInfo_(spatialVideoInfo);\n\n if (timescaleMap.has(mediaState.type)) {\n reference.initSegmentReference.timescale =\n timescaleMap.get(mediaState.type);\n } else if (lastTimescale != null) {\n // Fallback for segments without HDLR box\n reference.initSegmentReference.timescale = lastTimescale;\n }\n\n shaka.log.v1(logPrefix, 'appending init segment');\n const hasClosedCaptions = mediaState.stream.closedCaptions &&\n mediaState.stream.closedCaptions.size > 0;\n await this.playerInterface_.beforeAppendSegment(\n mediaState.type, initSegment);\n await this.playerInterface_.mediaSourceEngine.appendBuffer(\n mediaState.type, initSegment, /* reference= */ null,\n mediaState.stream, hasClosedCaptions, mediaState.seeked,\n adaptation);\n } catch (error) {\n mediaState.lastInitSegmentReference = null;\n throw error;\n }\n };\n let initSegmentTime = reference.startTime;\n if (nullLastReferences) {\n const bufferEnd =\n this.playerInterface_.mediaSourceEngine.bufferEnd(mediaState.type);\n if (bufferEnd != null) {\n // Adjust init segment appendance time if we have something in\n // a buffer, i.e. due to running switchVariant() with non zero\n // safe margin value.\n initSegmentTime = bufferEnd;\n }\n }\n this.playerInterface_.onInitSegmentAppended(\n initSegmentTime, reference.initSegmentReference);\n operations.push(append());\n }\n }\n\n const lastDiscontinuitySequence =\n mediaState.lastSegmentReference ?\n mediaState.lastSegmentReference.discontinuitySequence : null;\n // Across discontinuity bounds, we should resync timestamps. The next\n // segment appended should land at its theoretical timestamp from the\n // segment index.\n if (reference.discontinuitySequence != lastDiscontinuitySequence) {\n operations.push(this.playerInterface_.mediaSourceEngine.resync(\n mediaState.type, reference.startTime));\n }\n\n await Promise.all(operations);\n }\n\n /**\n *\n * @param {!shaka.media.StreamingEngine.MediaState_} mediaState\n * @param {number} timestampOffset\n * @param {number} appendWindowStart\n * @param {number} appendWindowEnd\n * @param {!shaka.media.SegmentReference} reference\n * @param {?string=} codecs\n * @param {?string=} mimeType\n * @private\n */\n async setProperties_(mediaState, timestampOffset, appendWindowStart,\n appendWindowEnd, reference, codecs, mimeType) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n /**\n * @type {!Map.}\n */\n const streamsByType = new Map();\n if (this.currentVariant_.audio) {\n streamsByType.set(ContentType.AUDIO, this.currentVariant_.audio);\n }\n if (this.currentVariant_.video) {\n streamsByType.set(ContentType.VIDEO, this.currentVariant_.video);\n }\n try {\n mediaState.lastAppendWindowStart = appendWindowStart;\n mediaState.lastAppendWindowEnd = appendWindowEnd;\n if (codecs) {\n mediaState.lastCodecs = codecs;\n }\n if (mimeType) {\n mediaState.lastMimeType = mimeType;\n }\n mediaState.lastTimestampOffset = timestampOffset;\n\n const ignoreTimestampOffset = this.manifest_.sequenceMode ||\n this.manifest_.type == shaka.media.ManifestParser.HLS;\n\n await this.playerInterface_.mediaSourceEngine.setStreamProperties(\n mediaState.type, timestampOffset, appendWindowStart,\n appendWindowEnd, ignoreTimestampOffset,\n reference.mimeType || mediaState.stream.mimeType,\n reference.codecs || mediaState.stream.codecs, streamsByType);\n } catch (error) {\n mediaState.lastAppendWindowStart = null;\n mediaState.lastAppendWindowEnd = null;\n mediaState.lastCodecs = null;\n mediaState.lastMimeType = null;\n mediaState.lastTimestampOffset = null;\n\n throw error;\n }\n }\n\n\n /**\n * Appends the given segment and evicts content if required to append.\n *\n * @param {!shaka.media.StreamingEngine.MediaState_} mediaState\n * @param {number} presentationTime\n * @param {shaka.extern.Stream} stream\n * @param {!shaka.media.SegmentReference} reference\n * @param {BufferSource} segment\n * @param {boolean=} isChunkedData\n * @param {boolean=} adaptation\n * @return {!Promise}\n * @private\n */\n async append_(mediaState, presentationTime, stream, reference, segment,\n isChunkedData = false, adaptation = false) {\n const logPrefix = shaka.media.StreamingEngine.logPrefix_(mediaState);\n\n const hasClosedCaptions = stream.closedCaptions &&\n stream.closedCaptions.size > 0;\n\n if (this.config_.shouldFixTimestampOffset) {\n let parser;\n\n const isMP4 = stream.mimeType == 'video/mp4' ||\n stream.mimeType == 'audio/mp4';\n let timescale = null;\n if (reference.initSegmentReference) {\n timescale = reference.initSegmentReference.timescale;\n }\n const shouldFixTimestampOffset = isMP4 && timescale &&\n stream.type === shaka.util.ManifestParserUtils.ContentType.VIDEO &&\n this.manifest_.type == shaka.media.ManifestParser.DASH;\n\n if (shouldFixTimestampOffset) {\n parser = new shaka.util.Mp4Parser();\n }\n\n if (shouldFixTimestampOffset) {\n parser\n .box('moof', shaka.util.Mp4Parser.children)\n .box('traf', shaka.util.Mp4Parser.children)\n .fullBox('tfdt', async (box) => {\n goog.asserts.assert(\n box.version != null,\n 'TFDT is a full box and should have a valid version.');\n\n const parsedTFDT = shaka.util.Mp4BoxParsers.parseTFDTInaccurate(\n box.reader, box.version);\n\n const baseMediaDecodeTime = parsedTFDT.baseMediaDecodeTime;\n\n // In case the time is 0, it is not updated\n if (!baseMediaDecodeTime) {\n return;\n }\n goog.asserts.assert(typeof(timescale) == 'number',\n 'Should be an number!');\n\n const scaledMediaDecodeTime = -baseMediaDecodeTime / timescale;\n\n const comparison1 = Number(mediaState.lastTimestampOffset) || 0;\n\n if (comparison1 < scaledMediaDecodeTime) {\n const lastAppendWindowStart = mediaState.lastAppendWindowStart;\n const lastAppendWindowEnd = mediaState.lastAppendWindowEnd;\n goog.asserts.assert(typeof(lastAppendWindowStart) == 'number',\n 'Should be an number!');\n goog.asserts.assert(typeof(lastAppendWindowEnd) == 'number',\n 'Should be an number!');\n await this.setProperties_(mediaState, scaledMediaDecodeTime,\n lastAppendWindowStart, lastAppendWindowEnd, reference);\n }\n });\n }\n\n if (shouldFixTimestampOffset) {\n parser.parse(segment, /* partialOkay= */ false, isChunkedData);\n }\n }\n\n await this.evict_(mediaState, presentationTime);\n this.destroyer_.ensureNotDestroyed();\n\n // 'seeked' or 'adaptation' triggered logic applies only to this\n // appendBuffer() call.\n const seeked = mediaState.seeked;\n mediaState.seeked = false;\n\n await this.playerInterface_.beforeAppendSegment(mediaState.type, segment);\n await this.playerInterface_.mediaSourceEngine.appendBuffer(\n mediaState.type,\n segment,\n reference,\n stream,\n hasClosedCaptions,\n seeked,\n adaptation,\n isChunkedData);\n this.destroyer_.ensureNotDestroyed();\n shaka.log.v2(logPrefix, 'appended media segment');\n }\n\n /**\n * Evicts media to meet the max buffer behind limit.\n *\n * @param {shaka.media.StreamingEngine.MediaState_} mediaState\n * @param {number} presentationTime\n * @private\n */\n async evict_(mediaState, presentationTime) {\n const segmentIndex = mediaState.stream.segmentIndex;\n if (segmentIndex instanceof shaka.media.MetaSegmentIndex) {\n segmentIndex.evict(\n this.manifest_.presentationTimeline.getSeekRangeStart());\n }\n\n const logPrefix = shaka.media.StreamingEngine.logPrefix_(mediaState);\n shaka.log.v2(logPrefix, 'checking buffer length');\n\n // Use the max segment duration, if it is longer than the bufferBehind, to\n // avoid accidentally clearing too much data when dealing with a manifest\n // with a long keyframe interval.\n const bufferBehind = Math.max(\n this.config_.bufferBehind * this.bufferingScale_,\n this.manifest_.presentationTimeline.getMaxSegmentDuration());\n\n const startTime =\n this.playerInterface_.mediaSourceEngine.bufferStart(mediaState.type);\n if (startTime == null) {\n if (this.lastTextMediaStateBeforeUnload_ == mediaState) {\n this.lastTextMediaStateBeforeUnload_ = null;\n }\n shaka.log.v2(logPrefix,\n 'buffer behind okay because nothing buffered:',\n 'presentationTime=' + presentationTime,\n 'bufferBehind=' + bufferBehind);\n return;\n }\n const bufferedBehind = presentationTime - startTime;\n\n const overflow = bufferedBehind - bufferBehind;\n // See: https://github.com/shaka-project/shaka-player/issues/6240\n if (overflow <= this.config_.evictionGoal) {\n shaka.log.v2(logPrefix,\n 'buffer behind okay:',\n 'presentationTime=' + presentationTime,\n 'bufferedBehind=' + bufferedBehind,\n 'bufferBehind=' + bufferBehind,\n 'evictionGoal=' + this.config_.evictionGoal,\n 'underflow=' + Math.abs(overflow));\n return;\n }\n\n shaka.log.v1(logPrefix,\n 'buffer behind too large:',\n 'presentationTime=' + presentationTime,\n 'bufferedBehind=' + bufferedBehind,\n 'bufferBehind=' + bufferBehind,\n 'evictionGoal=' + this.config_.evictionGoal,\n 'overflow=' + overflow);\n\n await this.playerInterface_.mediaSourceEngine.remove(mediaState.type,\n startTime, startTime + overflow);\n\n this.destroyer_.ensureNotDestroyed();\n shaka.log.v1(logPrefix, 'evicted ' + overflow + ' seconds');\n\n if (this.lastTextMediaStateBeforeUnload_) {\n await this.evict_(this.lastTextMediaStateBeforeUnload_, presentationTime);\n this.destroyer_.ensureNotDestroyed();\n }\n }\n\n\n /**\n * @param {shaka.media.StreamingEngine.MediaState_} mediaState\n * @return {boolean}\n * @private\n */\n static isEmbeddedText_(mediaState) {\n const MimeUtils = shaka.util.MimeUtils;\n const CEA608_MIME = MimeUtils.CEA608_CLOSED_CAPTION_MIMETYPE;\n const CEA708_MIME = MimeUtils.CEA708_CLOSED_CAPTION_MIMETYPE;\n return mediaState &&\n mediaState.type == shaka.util.ManifestParserUtils.ContentType.TEXT &&\n (mediaState.stream.mimeType == CEA608_MIME ||\n mediaState.stream.mimeType == CEA708_MIME);\n }\n\n\n /**\n * Fetches the given segment.\n *\n * @param {!shaka.media.StreamingEngine.MediaState_} mediaState\n * @param {(!shaka.media.InitSegmentReference|!shaka.media.SegmentReference)}\n * reference\n * @param {?function(BufferSource):!Promise=} streamDataCallback\n *\n * @return {!Promise.}\n * @private\n */\n async fetch_(mediaState, reference, streamDataCallback) {\n const segmentData = reference.getSegmentData();\n if (segmentData) {\n return segmentData;\n }\n let op = null;\n if (mediaState.segmentPrefetch) {\n op = mediaState.segmentPrefetch.getPrefetchedSegment(\n reference, streamDataCallback);\n }\n if (!op) {\n op = this.dispatchFetch_(\n reference, mediaState.stream, streamDataCallback);\n }\n\n let position = 0;\n if (mediaState.segmentIterator) {\n position = mediaState.segmentIterator.currentPosition();\n }\n\n mediaState.operation = op;\n const response = await op.promise;\n mediaState.operation = null;\n let result = response.data;\n if (reference.aesKey) {\n result = await shaka.media.SegmentUtils.aesDecrypt(\n result, reference.aesKey, position);\n }\n return result;\n }\n\n /**\n * Fetches the given segment.\n *\n * @param {!shaka.extern.Stream} stream\n * @param {(!shaka.media.InitSegmentReference|!shaka.media.SegmentReference)}\n * reference\n * @param {?function(BufferSource):!Promise=} streamDataCallback\n * @param {boolean=} isPreload\n *\n * @return {!shaka.net.NetworkingEngine.PendingRequest}\n * @private\n */\n dispatchFetch_(reference, stream, streamDataCallback, isPreload = false) {\n goog.asserts.assert(\n this.playerInterface_.netEngine, 'Must have net engine');\n return shaka.media.StreamingEngine.dispatchFetch(\n reference, stream, streamDataCallback || null,\n this.config_.retryParameters, this.playerInterface_.netEngine);\n }\n\n /**\n * Fetches the given segment.\n *\n * @param {!shaka.extern.Stream} stream\n * @param {(!shaka.media.InitSegmentReference|!shaka.media.SegmentReference)}\n * reference\n * @param {?function(BufferSource):!Promise} streamDataCallback\n * @param {shaka.extern.RetryParameters} retryParameters\n * @param {!shaka.net.NetworkingEngine} netEngine\n * @param {boolean=} isPreload\n *\n * @return {!shaka.net.NetworkingEngine.PendingRequest}\n */\n static dispatchFetch(\n reference, stream, streamDataCallback, retryParameters, netEngine,\n isPreload = false) {\n const requestType = shaka.net.NetworkingEngine.RequestType.SEGMENT;\n const segment = reference instanceof shaka.media.SegmentReference ?\n reference : undefined;\n const type = segment ?\n shaka.net.NetworkingEngine.AdvancedRequestType.MEDIA_SEGMENT :\n shaka.net.NetworkingEngine.AdvancedRequestType.INIT_SEGMENT;\n const request = shaka.util.Networking.createSegmentRequest(\n reference.getUris(),\n reference.startByte,\n reference.endByte,\n retryParameters,\n streamDataCallback);\n request.contentType = stream.type;\n\n shaka.log.v2('fetching: reference=', reference);\n\n return netEngine.request(\n requestType, request, {type, stream, segment, isPreload});\n }\n\n /**\n * Clears the buffer and schedules another update.\n * The optional parameter safeMargin allows to retain a certain amount\n * of buffer, which can help avoiding rebuffering events.\n * The value of the safe margin should be provided by the ABR manager.\n *\n * @param {!shaka.media.StreamingEngine.MediaState_} mediaState\n * @param {boolean} flush\n * @param {number} safeMargin\n * @private\n */\n async clearBuffer_(mediaState, flush, safeMargin) {\n const logPrefix = shaka.media.StreamingEngine.logPrefix_(mediaState);\n\n goog.asserts.assert(\n !mediaState.performingUpdate && (mediaState.updateTimer == null),\n logPrefix + ' unexpected call to clearBuffer_()');\n\n mediaState.waitingToClearBuffer = false;\n mediaState.waitingToFlushBuffer = false;\n mediaState.clearBufferSafeMargin = 0;\n mediaState.clearingBuffer = true;\n mediaState.lastSegmentReference = null;\n mediaState.segmentIterator = null;\n\n shaka.log.debug(logPrefix, 'clearing buffer');\n if (mediaState.segmentPrefetch &&\n !this.audioPrefetchMap_.has(mediaState.stream)) {\n mediaState.segmentPrefetch.clearAll();\n }\n\n if (safeMargin) {\n const presentationTime = this.playerInterface_.getPresentationTime();\n const duration = this.playerInterface_.mediaSourceEngine.getDuration();\n await this.playerInterface_.mediaSourceEngine.remove(\n mediaState.type, presentationTime + safeMargin, duration);\n } else {\n await this.playerInterface_.mediaSourceEngine.clear(mediaState.type);\n this.destroyer_.ensureNotDestroyed();\n\n if (flush) {\n await this.playerInterface_.mediaSourceEngine.flush(\n mediaState.type);\n }\n }\n\n this.destroyer_.ensureNotDestroyed();\n\n shaka.log.debug(logPrefix, 'cleared buffer');\n mediaState.clearingBuffer = false;\n mediaState.endOfStream = false;\n // Since the clear operation was async, check to make sure we're not doing\n // another update and we don't have one scheduled yet.\n if (!mediaState.performingUpdate && !mediaState.updateTimer) {\n this.scheduleUpdate_(mediaState, 0);\n }\n }\n\n\n /**\n * Schedules |mediaState|'s next update.\n *\n * @param {!shaka.media.StreamingEngine.MediaState_} mediaState\n * @param {number} delay The delay in seconds.\n * @private\n */\n scheduleUpdate_(mediaState, delay) {\n const logPrefix = shaka.media.StreamingEngine.logPrefix_(mediaState);\n\n // If the text's update is canceled and its mediaState is deleted, stop\n // scheduling another update.\n const type = mediaState.type;\n if (type == shaka.util.ManifestParserUtils.ContentType.TEXT &&\n !this.mediaStates_.has(type)) {\n shaka.log.v1(logPrefix, 'Text stream is unloaded. No update is needed.');\n return;\n }\n\n shaka.log.v2(logPrefix, 'updating in ' + delay + ' seconds');\n goog.asserts.assert(mediaState.updateTimer == null,\n logPrefix + ' did not expect update to be scheduled');\n\n mediaState.updateTimer = new shaka.util.DelayedTick(async () => {\n try {\n await this.onUpdate_(mediaState);\n } catch (error) {\n if (this.playerInterface_) {\n this.playerInterface_.onError(error);\n }\n }\n }).tickAfter(delay);\n }\n\n\n /**\n * If |mediaState| is scheduled to update, stop it.\n *\n * @param {shaka.media.StreamingEngine.MediaState_} mediaState\n * @private\n */\n cancelUpdate_(mediaState) {\n if (mediaState.updateTimer == null) {\n return;\n }\n\n mediaState.updateTimer.stop();\n mediaState.updateTimer = null;\n }\n\n\n /**\n * If |mediaState| holds any in-progress operations, abort them.\n *\n * @return {!Promise}\n * @private\n */\n async abortOperations_(mediaState) {\n if (mediaState.operation) {\n await mediaState.operation.abort();\n }\n }\n\n /**\n * Handle streaming errors by delaying, then notifying the application by\n * error callback and by streaming failure callback.\n *\n * @param {shaka.media.StreamingEngine.MediaState_} mediaState\n * @param {!shaka.util.Error} error\n * @return {!Promise}\n * @private\n */\n async handleStreamingError_(mediaState, error) {\n const logPrefix = shaka.media.StreamingEngine.logPrefix_(mediaState);\n\n // If we invoke the callback right away, the application could trigger a\n // rapid retry cycle that could be very unkind to the server. Instead,\n // use the backoff system to delay and backoff the error handling.\n await this.failureCallbackBackoff_.attempt();\n this.destroyer_.ensureNotDestroyed();\n\n // Try to recover from network errors, but not timeouts.\n // See https://github.com/shaka-project/shaka-player/issues/7368\n if (error.category === shaka.util.Error.Category.NETWORK &&\n error.code != shaka.util.Error.Code.TIMEOUT) {\n if (mediaState.restoreStreamAfterTrickPlay) {\n this.setTrickPlay(/* on= */ false);\n return;\n }\n const maxDisabledTime = this.getDisabledTime_(error);\n if (maxDisabledTime) {\n shaka.log.debug(logPrefix, 'Disabling stream due to error', error);\n }\n error.handled = this.playerInterface_.disableStream(\n mediaState.stream, maxDisabledTime);\n\n // Decrease the error severity to recoverable\n if (error.handled) {\n error.severity = shaka.util.Error.Severity.RECOVERABLE;\n }\n }\n\n // First fire an error event.\n if (!error.handled ||\n error.code != shaka.util.Error.Code.SEGMENT_MISSING) {\n this.playerInterface_.onError(error);\n }\n\n // If the error was not handled by the application, call the failure\n // callback.\n if (!error.handled) {\n this.config_.failureCallback(error);\n }\n }\n\n /**\n * @param {!shaka.util.Error} error\n * @return {number}\n * @private\n */\n getDisabledTime_(error) {\n if (this.config_.maxDisabledTime === 0 &&\n error.code == shaka.util.Error.Code.SEGMENT_MISSING) {\n // Spec: https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis#section-6.3.3\n // The client SHOULD NOT attempt to load Media Segments that have been\n // marked with an EXT-X-GAP tag, or to load Partial Segments with a\n // GAP=YES attribute. Instead, clients are encouraged to look for\n // another Variant Stream of the same Rendition which does not have the\n // same gap, and play that instead.\n return 1;\n }\n\n return this.config_.maxDisabledTime;\n }\n\n /**\n * Reset Media Source\n *\n * @param {boolean=} force\n * @return {!Promise.}\n */\n async resetMediaSource(force = false, clearBuffer = true) {\n const now = (Date.now() / 1000);\n const minTimeBetweenRecoveries = this.config_.minTimeBetweenRecoveries;\n if (!force) {\n if (!this.config_.allowMediaSourceRecoveries ||\n (now - this.lastMediaSourceReset_) < minTimeBetweenRecoveries) {\n return false;\n }\n this.lastMediaSourceReset_ = now;\n }\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const audioMediaState = this.mediaStates_.get(ContentType.AUDIO);\n if (audioMediaState) {\n audioMediaState.lastInitSegmentReference = null;\n audioMediaState.lastAppendWindowStart = null;\n audioMediaState.lastAppendWindowEnd = null;\n if (clearBuffer) {\n this.forceClearBuffer_(audioMediaState);\n }\n this.abortOperations_(audioMediaState).catch(() => {});\n if (audioMediaState.segmentIterator) {\n audioMediaState.segmentIterator.resetToLastIndependent();\n }\n }\n const videoMediaState = this.mediaStates_.get(ContentType.VIDEO);\n if (videoMediaState) {\n videoMediaState.lastInitSegmentReference = null;\n videoMediaState.lastAppendWindowStart = null;\n videoMediaState.lastAppendWindowEnd = null;\n if (clearBuffer) {\n this.forceClearBuffer_(videoMediaState);\n }\n this.abortOperations_(videoMediaState).catch(() => {});\n if (videoMediaState.segmentIterator) {\n videoMediaState.segmentIterator.resetToLastIndependent();\n }\n }\n /**\n * @type {!Map.}\n */\n const streamsByType = new Map();\n if (this.currentVariant_.audio) {\n streamsByType.set(ContentType.AUDIO, this.currentVariant_.audio);\n }\n if (this.currentVariant_.video) {\n streamsByType.set(ContentType.VIDEO, this.currentVariant_.video);\n }\n await this.playerInterface_.mediaSourceEngine.reset(streamsByType);\n if (videoMediaState &&\n !videoMediaState.performingUpdate && !videoMediaState.updateTimer) {\n this.scheduleUpdate_(videoMediaState, 0);\n }\n if (audioMediaState &&\n !audioMediaState.performingUpdate && !audioMediaState.updateTimer) {\n this.scheduleUpdate_(audioMediaState, 0);\n }\n return true;\n }\n\n /**\n * Update the spatial video info and notify to the app.\n *\n * @param {shaka.extern.SpatialVideoInfo} info\n * @private\n */\n updateSpatialVideoInfo_(info) {\n if (this.spatialVideoInfo_.projection != info.projection ||\n this.spatialVideoInfo_.hfov != info.hfov) {\n const EventName = shaka.util.FakeEvent.EventName;\n let event;\n if (info.projection != null || info.hfov != null) {\n const eventName = EventName.SpatialVideoInfoEvent;\n const data = (new Map()).set('detail', info);\n event = new shaka.util.FakeEvent(eventName, data);\n } else {\n const eventName = EventName.NoSpatialVideoInfoEvent;\n event = new shaka.util.FakeEvent(eventName);\n }\n event.cancelable = true;\n this.playerInterface_.onEvent(event);\n this.spatialVideoInfo_ = info;\n }\n }\n\n /**\n * Update the segment iterator direction.\n *\n * @private\n */\n updateSegmentIteratorReverse_() {\n const reverse = this.playerInterface_.getPlaybackRate() < 0;\n for (const mediaState of this.mediaStates_.values()) {\n if (mediaState.segmentIterator) {\n mediaState.segmentIterator.setReverse(reverse);\n }\n if (mediaState.segmentPrefetch) {\n mediaState.segmentPrefetch.setReverse(reverse);\n }\n }\n for (const prefetch of this.audioPrefetchMap_.values()) {\n prefetch.setReverse(reverse);\n }\n }\n\n /**\n * @param {shaka.media.StreamingEngine.MediaState_} mediaState\n * @return {string} A log prefix of the form ($CONTENT_TYPE:$STREAM_ID), e.g.,\n * \"(audio:5)\" or \"(video:hd)\".\n * @private\n */\n static logPrefix_(mediaState) {\n return '(' + mediaState.type + ':' + mediaState.stream.id + ')';\n }\n};\n\n\n/**\n * @typedef {{\n * getPresentationTime: function():number,\n * getBandwidthEstimate: function():number,\n * getPlaybackRate: function():number,\n * mediaSourceEngine: !shaka.media.MediaSourceEngine,\n * netEngine: shaka.net.NetworkingEngine,\n * onError: function(!shaka.util.Error),\n * onEvent: function(!Event),\n * onSegmentAppended: function(!shaka.media.SegmentReference,\n * !shaka.extern.Stream),\n * onInitSegmentAppended: function(!number,!shaka.media.InitSegmentReference),\n * beforeAppendSegment: function(\n * shaka.util.ManifestParserUtils.ContentType,!BufferSource):Promise,\n * disableStream: function(!shaka.extern.Stream, number):boolean\n * }}\n *\n * @property {function():number} getPresentationTime\n * Get the position in the presentation (in seconds) of the content that the\n * viewer is seeing on screen right now.\n * @property {function():number} getBandwidthEstimate\n * Get the estimated bandwidth in bits per second.\n * @property {function():number} getPlaybackRate\n * Get the playback rate\n * @property {!shaka.media.MediaSourceEngine} mediaSourceEngine\n * The MediaSourceEngine. The caller retains ownership.\n * @property {shaka.net.NetworkingEngine} netEngine\n * The NetworkingEngine instance to use. The caller retains ownership.\n * @property {function(!shaka.util.Error)} onError\n * Called when an error occurs. If the error is recoverable (see\n * {@link shaka.util.Error}) then the caller may invoke either\n * StreamingEngine.switch*() or StreamingEngine.seeked() to attempt recovery.\n * @property {function(!Event)} onEvent\n * Called when an event occurs that should be sent to the app.\n * @property {function(!shaka.media.SegmentReference,\n * !shaka.extern.Stream)} onSegmentAppended\n * Called after a segment is successfully appended to a MediaSource.\n * @property\n * {function(!number, !shaka.media.InitSegmentReference)} onInitSegmentAppended\n * Called when an init segment is appended to a MediaSource.\n * @property {!function(shaka.util.ManifestParserUtils.ContentType,\n * !BufferSource):Promise} beforeAppendSegment\n * A function called just before appending to the source buffer.\n * @property {function(!shaka.extern.Stream, number):boolean} disableStream\n * Called to temporarily disable a stream i.e. disabling all variant\n * containing said stream.\n */\nshaka.media.StreamingEngine.PlayerInterface;\n\n\n/**\n * @typedef {{\n * type: shaka.util.ManifestParserUtils.ContentType,\n * stream: shaka.extern.Stream,\n * segmentIterator: shaka.media.SegmentIterator,\n * lastSegmentReference: shaka.media.SegmentReference,\n * lastInitSegmentReference: shaka.media.InitSegmentReference,\n * lastTimestampOffset: ?number,\n * lastAppendWindowStart: ?number,\n * lastAppendWindowEnd: ?number,\n * lastCodecs: ?string,\n * lastMimeType: ?string,\n * restoreStreamAfterTrickPlay: ?shaka.extern.Stream,\n * endOfStream: boolean,\n * performingUpdate: boolean,\n * updateTimer: shaka.util.DelayedTick,\n * waitingToClearBuffer: boolean,\n * waitingToFlushBuffer: boolean,\n * clearBufferSafeMargin: number,\n * clearingBuffer: boolean,\n * seeked: boolean,\n * adaptation: boolean,\n * recovering: boolean,\n * hasError: boolean,\n * operation: shaka.net.NetworkingEngine.PendingRequest,\n * segmentPrefetch: shaka.media.SegmentPrefetch\n * }}\n *\n * @description\n * Contains the state of a logical stream, i.e., a sequence of segmented data\n * for a particular content type. At any given time there is a Stream object\n * associated with the state of the logical stream.\n *\n * @property {shaka.util.ManifestParserUtils.ContentType} type\n * The stream's content type, e.g., 'audio', 'video', or 'text'.\n * @property {shaka.extern.Stream} stream\n * The current Stream.\n * @property {shaka.media.SegmentIndexIterator} segmentIterator\n * An iterator through the segments of |stream|.\n * @property {shaka.media.SegmentReference} lastSegmentReference\n * The SegmentReference of the last segment that was appended.\n * @property {shaka.media.InitSegmentReference} lastInitSegmentReference\n * The InitSegmentReference of the last init segment that was appended.\n * @property {?number} lastTimestampOffset\n * The last timestamp offset given to MediaSourceEngine for this type.\n * @property {?number} lastAppendWindowStart\n * The last append window start given to MediaSourceEngine for this type.\n * @property {?number} lastAppendWindowEnd\n * The last append window end given to MediaSourceEngine for this type.\n * @property {?string} lastCodecs\n * The last append codecs given to MediaSourceEngine for this type.\n * @property {?string} lastMimeType\n * The last append mime type given to MediaSourceEngine for this type.\n * @property {?shaka.extern.Stream} restoreStreamAfterTrickPlay\n * The Stream to restore after trick play mode is turned off.\n * @property {boolean} endOfStream\n * True indicates that the end of the buffer has hit the end of the\n * presentation.\n * @property {boolean} performingUpdate\n * True indicates that an update is in progress.\n * @property {shaka.util.DelayedTick} updateTimer\n * A timer used to update the media state.\n * @property {boolean} waitingToClearBuffer\n * True indicates that the buffer must be cleared after the current update\n * finishes.\n * @property {boolean} waitingToFlushBuffer\n * True indicates that the buffer must be flushed after it is cleared.\n * @property {number} clearBufferSafeMargin\n * The amount of buffer to retain when clearing the buffer after the update.\n * @property {boolean} clearingBuffer\n * True indicates that the buffer is being cleared.\n * @property {boolean} seeked\n * True indicates that the presentation just seeked.\n * @property {boolean} adaptation\n * True indicates that the presentation just automatically switched variants.\n * @property {boolean} recovering\n * True indicates that the last segment was not appended because it could not\n * fit in the buffer.\n * @property {boolean} hasError\n * True indicates that the stream has encountered an error and has stopped\n * updating.\n * @property {shaka.net.NetworkingEngine.PendingRequest} operation\n * Operation with the number of bytes to be downloaded.\n * @property {?shaka.media.SegmentPrefetch} segmentPrefetch\n * A prefetch object for managing prefetching. Null if unneeded\n * (if prefetching is disabled, etc).\n */\nshaka.media.StreamingEngine.MediaState_;\n\n\n/**\n * The fudge factor for appendWindowStart. By adjusting the window backward, we\n * avoid rounding errors that could cause us to remove the keyframe at the start\n * of the Period.\n *\n * NOTE: This was increased as part of the solution to\n * https://github.com/shaka-project/shaka-player/issues/1281\n *\n * @const {number}\n * @private\n */\nshaka.media.StreamingEngine.APPEND_WINDOW_START_FUDGE_ = 0.1;\n\n\n/**\n * The fudge factor for appendWindowEnd. By adjusting the window backward, we\n * avoid rounding errors that could cause us to remove the last few samples of\n * the Period. This rounding error could then create an artificial gap and a\n * stutter when the gap-jumping logic takes over.\n *\n * https://github.com/shaka-project/shaka-player/issues/1597\n *\n * @const {number}\n * @private\n */\nshaka.media.StreamingEngine.APPEND_WINDOW_END_FUDGE_ = 0.01;\n\n\n/**\n * The maximum number of segments by which a stream can get ahead of other\n * streams.\n *\n * Introduced to keep StreamingEngine from letting one media type get too far\n * ahead of another. For example, audio segments are typically much smaller\n * than video segments, so in the time it takes to fetch one video segment, we\n * could fetch many audio segments. This doesn't help with buffering, though,\n * since the intersection of the two buffered ranges is what counts.\n *\n * @const {number}\n * @private\n */\nshaka.media.StreamingEngine.MAX_RUN_AHEAD_SEGMENTS_ = 1;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.ConfigUtils');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.util.ObjectUtils');\n\n\n/** @export */\nshaka.util.ConfigUtils = class {\n /**\n * @param {!Object} destination\n * @param {!Object} source\n * @param {!Object} template supplies default values\n * @param {!Object} overrides\n * Supplies override type checking. When the current path matches\n * the key in this object, each sub-value must match the type in this\n * object. If this contains an Object, it is used as the template.\n * @param {string} path to this part of the config\n * @return {boolean}\n * @export\n */\n static mergeConfigObjects(destination, source, template, overrides, path) {\n goog.asserts.assert(destination, 'Destination config must not be null!');\n\n // If true, override the template.\n const overrideTemplate = path in overrides;\n\n // If true, treat the source as a generic object to be copied without\n // descending more deeply.\n let genericObject = false;\n if (overrideTemplate) {\n genericObject = template.constructor == Object &&\n Object.keys(overrides).length == 0;\n } else {\n genericObject = template.constructor == Object &&\n Object.keys(template).length == 0;\n }\n\n // If true, don't validate the keys in the next level.\n const ignoreKeys = overrideTemplate || genericObject;\n\n let isValid = true;\n\n for (const k in source) {\n const subPath = path + '.' + k;\n const subTemplate = overrideTemplate ? overrides[path] : template[k];\n\n // The order of these checks is important.\n if (!ignoreKeys && !(k in template)) {\n shaka.log.alwaysError('Invalid config, unrecognized key ' + subPath);\n isValid = false;\n } else if (source[k] === undefined) {\n // An explicit 'undefined' value causes the key to be deleted from the\n // destination config and replaced with a default from the template if\n // possible.\n if (subTemplate === undefined || ignoreKeys) {\n // There is nothing in the template, so delete.\n delete destination[k];\n } else {\n // There is something in the template, so go back to that.\n destination[k] = shaka.util.ObjectUtils.cloneObject(subTemplate);\n }\n } else if (genericObject) {\n // Copy the fields of a generic object directly without a template and\n // without descending any deeper.\n destination[k] = source[k];\n } else if (subTemplate.constructor == Object &&\n source[k] &&\n source[k].constructor == Object) {\n // These are plain Objects with no other constructor.\n\n if (!destination[k]) {\n // Initialize the destination with the template so that normal\n // merging and type-checking can happen.\n destination[k] = shaka.util.ObjectUtils.cloneObject(subTemplate);\n }\n\n const subMergeValid = shaka.util.ConfigUtils.mergeConfigObjects(\n destination[k], source[k], subTemplate, overrides, subPath);\n isValid = isValid && subMergeValid;\n } else if (typeof source[k] != typeof subTemplate ||\n source[k] == null ||\n // Function cosntructors are not informative, and differ\n // between sync and async functions. So don't look at\n // constructor for function types.\n (typeof source[k] != 'function' &&\n source[k].constructor != subTemplate.constructor)) {\n // The source is the wrong type. This check allows objects to be\n // nulled, but does not allow null for any non-object fields.\n shaka.log.alwaysError('Invalid config, wrong type for ' + subPath);\n isValid = false;\n } else if (typeof template[k] == 'function' &&\n template[k].length != source[k].length) {\n shaka.log.alwaysWarn(\n 'Unexpected number of arguments for ' + subPath);\n destination[k] = source[k];\n } else {\n destination[k] = source[k];\n }\n }\n\n return isValid;\n }\n\n\n /**\n * Convert config from ('fieldName', value) format to a partial config object.\n *\n * E. g. from ('manifest.retryParameters.maxAttempts', 1) to\n * { manifest: { retryParameters: { maxAttempts: 1 }}}.\n *\n * @param {string} fieldName\n * @param {*} value\n * @return {!Object}\n * @export\n */\n static convertToConfigObject(fieldName, value) {\n const configObject = {};\n let last = configObject;\n let searchIndex = 0;\n let nameStart = 0;\n while (true) { // eslint-disable-line no-constant-condition\n const idx = fieldName.indexOf('.', searchIndex);\n if (idx < 0) {\n break;\n }\n if (idx == 0 || fieldName[idx - 1] != '\\\\') {\n const part = fieldName.substring(nameStart, idx).replace(/\\\\\\./g, '.');\n last[part] = {};\n last = last[part];\n nameStart = idx + 1;\n }\n searchIndex = idx + 1;\n }\n\n last[fieldName.substring(nameStart).replace(/\\\\\\./g, '.')] = value;\n return configObject;\n }\n\n /**\n * Reference the input parameters so the compiler doesn't remove them from\n * the calling function. Return whatever value is specified.\n *\n * This allows an empty or default implementation of a config callback that\n * still bears the complete function signature even in compiled mode.\n *\n * The caller should look something like this:\n *\n * const callback = (a, b, c, d) => {\n * return referenceParametersAndReturn(\n [a, b, c, d],\n a); // Can be anything, doesn't need to be one of the parameters\n * };\n *\n * @param {!Array.} parameters\n * @param {T} returnValue\n * @return {T}\n * @template T\n * @noinline\n */\n static referenceParametersAndReturn(parameters, returnValue) {\n return parameters && returnValue;\n }\n\n /**\n * @param {!Object} object\n * @param {!Object} base\n * @return {!Object}\n * @export\n */\n static getDifferenceFromConfigObjects(object, base) {\n const isObject = (obj) => {\n return obj && typeof obj === 'object' && !Array.isArray(obj);\n };\n\n const isArrayEmpty = (array) => {\n return Array.isArray(array) && array.length === 0;\n };\n\n const changes = (object, base) => {\n return Object.keys(object).reduce((acc, key) => {\n const value = object[key];\n // eslint-disable-next-line no-prototype-builtins\n if (!base.hasOwnProperty(key)) {\n acc[key] = value;\n } else if (isObject(value) && isObject(base[key])) {\n const diff = changes(value, base[key]);\n if (Object.keys(diff).length > 0 || !isObject(diff)) {\n acc[key] = diff;\n }\n } else if (isArrayEmpty(value) && isArrayEmpty(base[key])) {\n // Do nothing if both are empty arrays\n } else if (Number.isNaN(value) && Number.isNaN(base[key])) {\n // Do nothing if both are NaN\n } else if (value !== base[key]) {\n acc[key] = value;\n }\n return acc;\n }, {});\n };\n\n const diff = changes(object, base);\n\n const removeEmpty = (obj) => {\n for (const key of Object.keys(obj)) {\n if (isObject(obj[key]) && Object.keys(obj[key]).length === 0) {\n delete obj[key];\n } else if (isArrayEmpty(obj[key])) {\n delete obj[key];\n } else if (typeof obj[key] == 'function') {\n delete obj[key];\n } else if (isObject(obj[key])) {\n removeEmpty(obj[key]);\n if (Object.keys(obj[key]).length === 0) {\n delete obj[key];\n }\n }\n }\n };\n\n removeEmpty(diff);\n return diff;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.FairPlayUtils');\n\ngoog.require('goog.Uri');\ngoog.require('goog.asserts');\ngoog.require('shaka.net.NetworkingEngine');\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.StringUtils');\ngoog.require('shaka.util.Uint8ArrayUtils');\n\n\n/**\n * @summary A set of FairPlay utility functions.\n * @export\n */\nshaka.util.FairPlayUtils = class {\n /**\n * Check if FairPlay is supported.\n *\n * @return {!Promise.}\n * @export\n */\n static async isFairPlaySupported() {\n const config = {\n initDataTypes: ['cenc', 'sinf', 'skd'],\n videoCapabilities: [\n {\n contentType: 'video/mp4; codecs=\"avc1.42E01E\"',\n },\n ],\n };\n try {\n await navigator.requestMediaKeySystemAccess('com.apple.fps', [config]);\n return true;\n } catch (err) {\n return false;\n }\n }\n\n /**\n * Using the default method, extract a content ID from the init data. This is\n * based on the FairPlay example documentation.\n *\n * @param {!BufferSource} initData\n * @return {string}\n * @export\n */\n static defaultGetContentId(initData) {\n const uriString = shaka.util.StringUtils.fromBytesAutoDetect(initData);\n\n // The domain of that URI is the content ID according to Apple's FPS\n // sample.\n const uri = new goog.Uri(uriString);\n return uri.getDomain();\n }\n\n /**\n * Transforms the init data buffer using the given data. The format is:\n *\n *

\n   * [4 bytes] initDataSize\n   * [initDataSize bytes] initData\n   * [4 bytes] contentIdSize\n   * [contentIdSize bytes] contentId\n   * [4 bytes] certSize\n   * [certSize bytes] cert\n   * 
\n *\n * @param {!BufferSource} initData\n * @param {!BufferSource|string} contentId\n * @param {?BufferSource} cert The server certificate; this will throw if not\n * provided.\n * @return {!Uint8Array}\n * @export\n */\n static initDataTransform(initData, contentId, cert) {\n if (!cert || !cert.byteLength) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.DRM,\n shaka.util.Error.Code.SERVER_CERTIFICATE_REQUIRED);\n }\n\n // From that, we build a new init data to use in the session. This is\n // composed of several parts. First, the init data as a UTF-16 sdk:// URL.\n // Second, a 4-byte LE length followed by the content ID in UTF-16-LE.\n // Third, a 4-byte LE length followed by the certificate.\n /** @type {BufferSource} */\n let contentIdArray;\n if (typeof contentId == 'string') {\n contentIdArray =\n shaka.util.StringUtils.toUTF16(contentId, /* littleEndian= */ true);\n } else {\n contentIdArray = contentId;\n }\n\n // The init data we get is a UTF-8 string; convert that to a UTF-16 string.\n const sdkUri = shaka.util.StringUtils.fromBytesAutoDetect(initData);\n const utf16 =\n shaka.util.StringUtils.toUTF16(sdkUri, /* littleEndian= */ true);\n\n const rebuiltInitData = new Uint8Array(\n 12 + utf16.byteLength + contentIdArray.byteLength + cert.byteLength);\n\n let offset = 0;\n /** @param {BufferSource} array */\n const append = (array) => {\n rebuiltInitData.set(shaka.util.BufferUtils.toUint8(array), offset);\n offset += array.byteLength;\n };\n /** @param {BufferSource} array */\n const appendWithLength = (array) => {\n const view = shaka.util.BufferUtils.toDataView(rebuiltInitData);\n const value = array.byteLength;\n view.setUint32(offset, value, /* littleEndian= */ true);\n offset += 4;\n append(array);\n };\n\n appendWithLength(utf16);\n appendWithLength(contentIdArray);\n appendWithLength(cert);\n\n goog.asserts.assert(\n offset == rebuiltInitData.length, 'Inconsistent init data length');\n return rebuiltInitData;\n }\n\n /**\n * Basic initDataTransform configuration.\n *\n * @param {!Uint8Array} initData\n * @param {string} initDataType\n * @param {?shaka.extern.DrmInfo} drmInfo\n * @private\n */\n static basicInitDataTransform_(initData, initDataType, drmInfo) {\n if (initDataType !== 'skd') {\n return initData;\n }\n const StringUtils = shaka.util.StringUtils;\n const FairPlayUtils = shaka.util.FairPlayUtils;\n const cert = drmInfo.serverCertificate;\n const initDataAsString = StringUtils.fromBytesAutoDetect(initData);\n const contentId = initDataAsString.split('skd://').pop();\n return FairPlayUtils.initDataTransform(initData, contentId, cert);\n }\n\n /**\n * Verimatrix initDataTransform configuration.\n *\n * @param {!Uint8Array} initData\n * @param {string} initDataType\n * @param {?shaka.extern.DrmInfo} drmInfo\n * @export\n */\n static verimatrixInitDataTransform(initData, initDataType, drmInfo) {\n return shaka.util.FairPlayUtils.basicInitDataTransform_(\n initData, initDataType, drmInfo);\n }\n\n /**\n * EZDRM initDataTransform configuration.\n *\n * @param {!Uint8Array} initData\n * @param {string} initDataType\n * @param {?shaka.extern.DrmInfo} drmInfo\n * @export\n */\n static ezdrmInitDataTransform(initData, initDataType, drmInfo) {\n if (initDataType !== 'skd') {\n return initData;\n }\n const StringUtils = shaka.util.StringUtils;\n const FairPlayUtils = shaka.util.FairPlayUtils;\n const cert = drmInfo.serverCertificate;\n const initDataAsString = StringUtils.fromBytesAutoDetect(initData);\n const contentId = initDataAsString.split(';').pop();\n return FairPlayUtils.initDataTransform(initData, contentId, cert);\n }\n\n /**\n * Conax initDataTransform configuration.\n *\n * @param {!Uint8Array} initData\n * @param {string} initDataType\n * @param {?shaka.extern.DrmInfo} drmInfo\n * @export\n */\n static conaxInitDataTransform(initData, initDataType, drmInfo) {\n if (initDataType !== 'skd') {\n return initData;\n }\n const StringUtils = shaka.util.StringUtils;\n const FairPlayUtils = shaka.util.FairPlayUtils;\n const cert = drmInfo.serverCertificate;\n const initDataAsString = StringUtils.fromBytesAutoDetect(initData);\n const skdValue = initDataAsString.split('skd://').pop().split('?').shift();\n const stringToArray = (string) => {\n // 2 bytes for each char\n const buffer = new ArrayBuffer(string.length * 2);\n const array = shaka.util.BufferUtils.toUint16(buffer);\n for (let i = 0, strLen = string.length; i < strLen; i++) {\n array[i] = string.charCodeAt(i);\n }\n return array;\n };\n const contentId = stringToArray(window.atob(skdValue));\n return FairPlayUtils.initDataTransform(initData, contentId, cert);\n }\n\n /**\n * ExpressPlay initDataTransform configuration.\n *\n * @param {!Uint8Array} initData\n * @param {string} initDataType\n * @param {?shaka.extern.DrmInfo} drmInfo\n * @export\n */\n static expressplayInitDataTransform(initData, initDataType, drmInfo) {\n return shaka.util.FairPlayUtils.basicInitDataTransform_(\n initData, initDataType, drmInfo);\n }\n\n /**\n * Verimatrix FairPlay request.\n *\n * @param {shaka.net.NetworkingEngine.RequestType} type\n * @param {shaka.extern.Request} request\n * @param {shaka.extern.RequestContext=} context\n * @export\n */\n static verimatrixFairPlayRequest(type, request, context) {\n if (type !== shaka.net.NetworkingEngine.RequestType.LICENSE) {\n return;\n }\n const body = /** @type {!(ArrayBuffer|ArrayBufferView)} */(request.body);\n const originalPayload = shaka.util.BufferUtils.toUint8(body);\n const base64Payload = shaka.util.Uint8ArrayUtils.toBase64(originalPayload);\n request.headers['Content-Type'] = 'application/x-www-form-urlencoded';\n request.body = shaka.util.StringUtils.toUTF8('spc=' + base64Payload);\n }\n\n /**\n * Set content-type to application/octet-stream in a FairPlay request.\n *\n * @param {shaka.net.NetworkingEngine.RequestType} type\n * @param {shaka.extern.Request} request\n * @param {shaka.extern.RequestContext=} context\n * @private\n */\n static octetStreamFairPlayRequest_(type, request, context) {\n if (type !== shaka.net.NetworkingEngine.RequestType.LICENSE) {\n return;\n }\n request.headers['Content-Type'] = 'application/octet-stream';\n }\n\n /**\n * EZDRM FairPlay request.\n *\n * @param {shaka.net.NetworkingEngine.RequestType} type\n * @param {shaka.extern.Request} request\n * @param {shaka.extern.RequestContext=} context\n * @export\n */\n static ezdrmFairPlayRequest(type, request, context) {\n shaka.util.FairPlayUtils.octetStreamFairPlayRequest_(type, request);\n }\n\n /**\n * Conax FairPlay request.\n *\n * @param {shaka.net.NetworkingEngine.RequestType} type\n * @param {shaka.extern.Request} request\n * @param {shaka.extern.RequestContext=} context\n * @export\n */\n static conaxFairPlayRequest(type, request, context) {\n shaka.util.FairPlayUtils.octetStreamFairPlayRequest_(type, request);\n }\n\n /**\n * ExpressPlay FairPlay request.\n *\n * @param {shaka.net.NetworkingEngine.RequestType} type\n * @param {shaka.extern.Request} request\n * @param {shaka.extern.RequestContext=} context\n * @export\n */\n static expressplayFairPlayRequest(type, request, context) {\n shaka.util.FairPlayUtils.octetStreamFairPlayRequest_(type, request);\n }\n\n /**\n * Common FairPlay response transform for some DRMs providers.\n *\n * @param {shaka.net.NetworkingEngine.RequestType} type\n * @param {shaka.extern.Response} response\n * @param {shaka.extern.RequestContext=} context\n * @export\n */\n static commonFairPlayResponse(type, response, context) {\n if (type !== shaka.net.NetworkingEngine.RequestType.LICENSE) {\n return;\n }\n\n // In Apple's docs, responses can be of the form:\n // '\\nbase64encoded\\n' or 'base64encoded'\n // We have also seen responses in JSON format from some of our partners.\n // In all of these text-based formats, the CKC data is base64-encoded.\n\n let responseText;\n try {\n // Convert it to text for further processing.\n responseText = shaka.util.StringUtils.fromUTF8(response.data);\n } catch (error) {\n // Assume it's not a text format of any kind and leave it alone.\n return;\n }\n\n let licenseProcessing = false;\n\n // Trim whitespace.\n responseText = responseText.trim();\n\n // Look for wrapper and remove it.\n if (responseText.substr(0, 5) === '' &&\n responseText.substr(-6) === '') {\n responseText = responseText.slice(5, -6);\n licenseProcessing = true;\n }\n\n // Look for a JSON wrapper and remove it.\n try {\n const responseObject = /** @type {!Object} */(JSON.parse(responseText));\n if (responseObject['ckc']) {\n responseText = responseObject['ckc'];\n licenseProcessing = true;\n }\n if (responseObject['CkcMessage']) {\n responseText = responseObject['CkcMessage'];\n licenseProcessing = true;\n }\n if (responseObject['License']) {\n responseText = responseObject['License'];\n licenseProcessing = true;\n }\n } catch (err) {\n // It wasn't JSON. Fall through with other transformations.\n }\n\n if (licenseProcessing) {\n // Decode the base64-encoded data into the format the browser expects.\n // It's not clear why FairPlay license servers don't just serve this\n // directly.\n response.data = shaka.util.BufferUtils.toArrayBuffer(\n shaka.util.Uint8ArrayUtils.fromBase64(responseText));\n }\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.PlayerConfiguration');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.abr.SimpleAbrManager');\ngoog.require('shaka.config.AutoShowText');\ngoog.require('shaka.config.CodecSwitchingStrategy');\ngoog.require('shaka.log');\ngoog.require('shaka.media.Capabilities');\ngoog.require('shaka.net.NetworkingEngine');\ngoog.require('shaka.util.ConfigUtils');\ngoog.require('shaka.util.FairPlayUtils');\ngoog.require('shaka.util.LanguageUtils');\ngoog.require('shaka.util.ManifestParserUtils');\ngoog.require('shaka.util.Platform');\n\n\n/**\n * @final\n * @export\n */\nshaka.util.PlayerConfiguration = class {\n /**\n * @return {shaka.extern.PlayerConfiguration}\n * @export\n */\n static createDefault() {\n // This is a relatively safe default in the absence of clues from the\n // browser. For slower connections, the default estimate may be too high.\n const bandwidthEstimate = 1e6; // 1Mbps\n const minBytes = 16e3;\n\n let abrMaxHeight = Infinity;\n\n // Some browsers implement the Network Information API, which allows\n // retrieving information about a user's network connection.\n if (navigator.connection) {\n // If the user has checked a box in the browser to ask it to use less\n // data, the browser will expose this intent via connection.saveData.\n // When that is true, we will default the max ABR height to 360p. Apps\n // can override this if they wish.\n //\n // The decision to use 360p was somewhat arbitrary. We needed a default\n // limit, and rather than restrict to a certain bandwidth, we decided to\n // restrict resolution. This will implicitly restrict bandwidth and\n // therefore save data. We (Shaka+Chrome) judged that:\n // - HD would be inappropriate\n // - If a user is asking their browser to save data, 360p it reasonable\n // - 360p would not look terrible on small mobile device screen\n // We also found that:\n // - YouTube's website on mobile defaults to 360p (as of 2018)\n // - iPhone 6, in portrait mode, has a physical resolution big enough\n // for 360p widescreen, but a little smaller than 480p widescreen\n // (https://apple.co/2yze4es)\n // If the content's lowest resolution is above 360p, AbrManager will use\n // the lowest resolution.\n if (navigator.connection.saveData) {\n abrMaxHeight = 360;\n }\n }\n\n const drm = {\n retryParameters: shaka.net.NetworkingEngine.defaultRetryParameters(),\n // These will all be verified by special cases in mergeConfigObjects_():\n servers: {}, // key is arbitrary key system ID, value must be string\n clearKeys: {}, // key is arbitrary key system ID, value must be string\n advanced: {}, // key is arbitrary key system ID, value is a record type\n delayLicenseRequestUntilPlayed: false,\n persistentSessionOnlinePlayback: false,\n persistentSessionsMetadata: [],\n initDataTransform: (initData, initDataType, drmInfo) => {\n if (shaka.util.Platform.isMediaKeysPolyfilled() &&\n initDataType == 'skd') {\n const cert = drmInfo.serverCertificate;\n const contentId =\n shaka.util.FairPlayUtils.defaultGetContentId(initData);\n initData = shaka.util.FairPlayUtils.initDataTransform(\n initData, contentId, cert);\n }\n return initData;\n },\n logLicenseExchange: false,\n updateExpirationTime: 1,\n preferredKeySystems: [],\n keySystemsMapping: {},\n // The Xbox One browser does not detect DRM key changes signalled by a\n // change in the PSSH in media segments. We need to parse PSSH from media\n // segments to detect key changes.\n parseInbandPsshEnabled: shaka.util.Platform.isXboxOne(),\n minHdcpVersion: '',\n ignoreDuplicateInitData: !shaka.util.Platform.isTizen2(),\n };\n\n // The Xbox One and PS4 only support the Playready DRM, so they should\n // prefer that key system by default to improve startup performance.\n if (shaka.util.Platform.isXboxOne() ||\n shaka.util.Platform.isPS4()) {\n drm.preferredKeySystems.push('com.microsoft.playready');\n }\n\n let codecSwitchingStrategy = shaka.config.CodecSwitchingStrategy.RELOAD;\n let multiTypeVariantsAllowed = false;\n if (shaka.media.Capabilities.isChangeTypeSupported() &&\n shaka.util.Platform.supportsSmoothCodecSwitching()) {\n codecSwitchingStrategy = shaka.config.CodecSwitchingStrategy.SMOOTH;\n multiTypeVariantsAllowed = true;\n }\n\n const manifest = {\n retryParameters: shaka.net.NetworkingEngine.defaultRetryParameters(),\n availabilityWindowOverride: NaN,\n disableAudio: false,\n disableVideo: false,\n disableText: false,\n disableThumbnails: false,\n disableIFrames: false,\n defaultPresentationDelay: 0,\n segmentRelativeVttTiming: false,\n raiseFatalErrorOnManifestUpdateRequestFailure: false,\n continueLoadingWhenPaused: true,\n dash: {\n clockSyncUri: '',\n ignoreDrmInfo: false,\n disableXlinkProcessing: true,\n xlinkFailGracefully: false,\n ignoreMinBufferTime: false,\n autoCorrectDrift: true,\n initialSegmentLimit: 1000,\n ignoreSuggestedPresentationDelay: false,\n ignoreEmptyAdaptationSet: false,\n ignoreMaxSegmentDuration: false,\n keySystemsByURI: {\n 'urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b':\n 'org.w3.clearkey',\n 'urn:uuid:e2719d58-a985-b3c9-781a-b030af78d30e':\n 'org.w3.clearkey',\n 'urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed':\n 'com.widevine.alpha',\n 'urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95':\n 'com.microsoft.playready',\n 'urn:uuid:79f0049a-4098-8642-ab92-e65be0885f95':\n 'com.microsoft.playready',\n 'urn:uuid:94ce86fb-07ff-4f43-adb8-93d2fa968ca2':\n 'com.apple.fps',\n },\n manifestPreprocessor:\n shaka.util.PlayerConfiguration.defaultManifestPreprocessor,\n manifestPreprocessorTXml:\n shaka.util.PlayerConfiguration.defaultManifestPreprocessorTXml,\n sequenceMode: false,\n multiTypeVariantsAllowed,\n useStreamOnceInPeriodFlattening: false,\n updatePeriod: -1,\n enableFastSwitching: true,\n },\n hls: {\n ignoreTextStreamFailures: false,\n ignoreImageStreamFailures: false,\n defaultAudioCodec: 'mp4a.40.2',\n defaultVideoCodec: 'avc1.42E01E',\n ignoreManifestProgramDateTime: false,\n ignoreManifestProgramDateTimeForTypes: [],\n mediaPlaylistFullMimeType:\n 'video/mp2t; codecs=\"avc1.42E01E, mp4a.40.2\"',\n liveSegmentsDelay: 3,\n sequenceMode: shaka.util.Platform.supportsSequenceMode(),\n ignoreManifestTimestampsInSegmentsMode: false,\n disableCodecGuessing: false,\n disableClosedCaptionsDetection: false,\n updatePeriod: -1,\n allowLowLatencyByteRangeOptimization: true,\n },\n mss: {\n manifestPreprocessor:\n shaka.util.PlayerConfiguration.defaultManifestPreprocessor,\n manifestPreprocessorTXml:\n shaka.util.PlayerConfiguration.defaultManifestPreprocessorTXml,\n sequenceMode: false,\n keySystemsBySystemId: {\n '9a04f079-9840-4286-ab92-e65be0885f95':\n 'com.microsoft.playready',\n '79f0049a-4098-8642-ab92-e65be0885f95':\n 'com.microsoft.playready',\n },\n },\n };\n\n const streaming = {\n retryParameters: shaka.net.NetworkingEngine.defaultRetryParameters(),\n // Need some operation in the callback or else closure may remove calls\n // to the function as it would be a no-op. The operation can't just be a\n // log message, because those are stripped in the compiled build.\n failureCallback: (error) => {\n shaka.log.error('Unhandled streaming error', error);\n return shaka.util.ConfigUtils.referenceParametersAndReturn(\n [error],\n undefined);\n },\n // When low latency streaming is enabled, rebufferingGoal will default to\n // 0.01 if not specified.\n rebufferingGoal: 2,\n bufferingGoal: 10,\n bufferBehind: 30,\n evictionGoal: 1,\n ignoreTextStreamFailures: false,\n alwaysStreamText: false,\n startAtSegmentBoundary: false,\n gapDetectionThreshold: 0.5,\n gapPadding: 0.01,\n gapJumpTimerTime: 0.25 /* seconds */,\n durationBackoff: 1,\n // Offset by 5 seconds since Chromecast takes a few seconds to start\n // playing after a seek, even when buffered.\n safeSeekOffset: 5,\n safeSeekEndOffset: 0,\n stallEnabled: true,\n stallThreshold: 1 /* seconds */,\n stallSkip: 0.1 /* seconds */,\n useNativeHlsForFairPlay: true,\n // If we are within 2 seconds of the start of a live segment, fetch the\n // previous one. This allows for segment drift, but won't download an\n // extra segment if we aren't close to the start.\n // When low latency streaming is enabled, inaccurateManifestTolerance\n // will default to 0 if not specified.\n inaccurateManifestTolerance: 2,\n lowLatencyMode: false,\n autoLowLatencyMode: false,\n forceHTTP: false,\n forceHTTPS: false,\n minBytesForProgressEvents: minBytes,\n preferNativeHls: false,\n updateIntervalSeconds: 1,\n observeQualityChanges: false,\n maxDisabledTime: 30,\n // When low latency streaming is enabled, segmentPrefetchLimit will\n // default to 2 if not specified.\n segmentPrefetchLimit: 0,\n prefetchAudioLanguages: [],\n disableAudioPrefetch: false,\n disableTextPrefetch: false,\n disableVideoPrefetch: false,\n liveSync: {\n enabled: false,\n targetLatency: 0.5,\n targetLatencyTolerance: 0.5,\n maxPlaybackRate: 1.1,\n minPlaybackRate: 0.95,\n panicMode: false,\n panicThreshold: 60,\n dynamicTargetLatency: {\n enabled: false,\n stabilityThreshold: 60,\n rebufferIncrement: 0.5,\n maxAttempts: 10,\n maxLatency: 4,\n minLatency: 1,\n },\n },\n allowMediaSourceRecoveries: true,\n minTimeBetweenRecoveries: 5,\n vodDynamicPlaybackRate: false,\n vodDynamicPlaybackRateLowBufferRate: 0.95,\n vodDynamicPlaybackRateBufferRatio: 0.5,\n infiniteLiveStreamDuration: false,\n preloadNextUrlWindow: 30,\n loadTimeout: 30,\n clearDecodingCache: shaka.util.Platform.isPS4() ||\n shaka.util.Platform.isPS5(),\n dontChooseCodecs: false,\n shouldFixTimestampOffset: shaka.util.Platform.isWebOS() ||\n shaka.util.Platform.isTizen(),\n };\n\n // WebOS, Tizen, Chromecast and Hisense have long hardware pipelines\n // that respond slowly to seeking.\n // Therefore we should not seek when we detect a stall\n // on one of these platforms. Instead, default stallSkip to 0 to force the\n // stall detector to pause and play instead.\n if (shaka.util.Platform.isWebOS() ||\n shaka.util.Platform.isTizen() ||\n shaka.util.Platform.isChromecast() ||\n shaka.util.Platform.isHisense()) {\n streaming.stallSkip = 0;\n }\n\n if (shaka.util.Platform.isTizen()) {\n streaming.gapPadding = 2;\n }\n\n const offline = {\n // We need to set this to a throw-away implementation for now as our\n // default implementation will need to reference other fields in the\n // config. We will set it to our intended implementation after we have\n // the top-level object created.\n // eslint-disable-next-line require-await\n trackSelectionCallback: async (tracks) => tracks,\n\n downloadSizeCallback: async (sizeEstimate) => {\n if (navigator.storage && navigator.storage.estimate) {\n const estimate = await navigator.storage.estimate();\n // Limit to 95% of quota.\n return estimate.usage + sizeEstimate < estimate.quota * 0.95;\n } else {\n return true;\n }\n },\n\n // Need some operation in the callback or else closure may remove calls\n // to the function as it would be a no-op. The operation can't just be a\n // log message, because those are stripped in the compiled build.\n progressCallback: (content, progress) => {\n return shaka.util.ConfigUtils.referenceParametersAndReturn(\n [content, progress],\n undefined);\n },\n\n // By default we use persistent licenses as forces errors to surface if\n // a platform does not support offline licenses rather than causing\n // unexpected behaviours when someone tries to plays downloaded content\n // without a persistent license.\n usePersistentLicense: true,\n\n numberOfParallelDownloads: 5,\n };\n\n const abr = {\n enabled: true,\n useNetworkInformation: true,\n defaultBandwidthEstimate: bandwidthEstimate,\n switchInterval: 8,\n bandwidthUpgradeTarget: 0.85,\n bandwidthDowngradeTarget: 0.95,\n restrictions: {\n minWidth: 0,\n maxWidth: Infinity,\n minHeight: 0,\n maxHeight: abrMaxHeight,\n minPixels: 0,\n maxPixels: Infinity,\n minFrameRate: 0,\n maxFrameRate: Infinity,\n minBandwidth: 0,\n maxBandwidth: Infinity,\n minChannelsCount: 0,\n maxChannelsCount: Infinity,\n },\n advanced: {\n minTotalBytes: 128e3,\n minBytes,\n fastHalfLife: 2,\n slowHalfLife: 5,\n },\n restrictToElementSize: false,\n restrictToScreenSize: false,\n ignoreDevicePixelRatio: false,\n clearBufferSwitch: false,\n safeMarginSwitch: 0,\n cacheLoadThreshold: 20,\n minTimeToSwitch: shaka.util.Platform.isApple() ? 0.5 : 0,\n preferNetworkInformationBandwidth: false,\n };\n\n const cmcd = {\n enabled: false,\n sessionId: '',\n contentId: '',\n rtpSafetyFactor: 5,\n useHeaders: false,\n includeKeys: [],\n };\n\n const cmsd = {\n enabled: true,\n applyMaximumSuggestedBitrate: true,\n estimatedThroughputWeightRatio: 0.5,\n };\n\n const lcevc = {\n enabled: false,\n dynamicPerformanceScaling: true,\n logLevel: 0,\n drawLogo: false,\n };\n\n const mediaSource = {\n codecSwitchingStrategy: codecSwitchingStrategy,\n addExtraFeaturesToSourceBuffer: (mimeType) => {\n return shaka.util.ConfigUtils.referenceParametersAndReturn(\n [mimeType],\n '');\n },\n forceTransmux: false,\n insertFakeEncryptionInInit: true,\n modifyCueCallback: (cue, uri) => {\n return shaka.util.ConfigUtils.referenceParametersAndReturn(\n [cue, uri],\n undefined);\n },\n dispatchAllEmsgBoxes: false,\n };\n\n let customPlayheadTracker = false;\n let skipPlayDetection = false;\n let supportsMultipleMediaElements = true;\n if (shaka.util.Platform.isSmartTV()) {\n customPlayheadTracker = true;\n skipPlayDetection = true;\n supportsMultipleMediaElements = false;\n }\n\n const ads = {\n customPlayheadTracker,\n skipPlayDetection,\n supportsMultipleMediaElements,\n disableHLSInterstitial: false,\n disableDASHInterstitial: false,\n };\n\n const textDisplayer = {\n captionsUpdatePeriod: 0.25,\n };\n\n const AutoShowText = shaka.config.AutoShowText;\n\n /** @type {shaka.extern.PlayerConfiguration} */\n const config = {\n drm: drm,\n manifest: manifest,\n streaming: streaming,\n mediaSource: mediaSource,\n offline: offline,\n abrFactory: () => new shaka.abr.SimpleAbrManager(),\n abr: abr,\n autoShowText: AutoShowText.IF_SUBTITLES_MAY_BE_NEEDED,\n preferredAudioLanguage: '',\n preferredAudioLabel: '',\n preferredTextLanguage: '',\n preferredVariantRole: '',\n preferredTextRole: '',\n preferredAudioChannelCount: 2,\n preferredVideoHdrLevel: 'AUTO',\n preferredVideoLayout: '',\n preferredVideoLabel: '',\n preferredVideoCodecs: [],\n preferredAudioCodecs: [],\n preferredTextFormats: [],\n preferForcedSubs: false,\n preferSpatialAudio: false,\n preferredDecodingAttributes: [],\n restrictions: {\n minWidth: 0,\n maxWidth: Infinity,\n minHeight: 0,\n maxHeight: Infinity,\n minPixels: 0,\n maxPixels: Infinity,\n minFrameRate: 0,\n maxFrameRate: Infinity,\n minBandwidth: 0,\n maxBandwidth: Infinity,\n minChannelsCount: 0,\n maxChannelsCount: Infinity,\n },\n playRangeStart: 0,\n playRangeEnd: Infinity,\n textDisplayer: textDisplayer,\n textDisplayFactory: () => null,\n cmcd: cmcd,\n cmsd: cmsd,\n lcevc: lcevc,\n ads: ads,\n ignoreHardwareResolution: false,\n };\n\n // Add this callback so that we can reference the preferred audio language\n // through the config object so that if it gets updated, we have the\n // updated value.\n // eslint-disable-next-line require-await\n offline.trackSelectionCallback = async (tracks) => {\n return shaka.util.PlayerConfiguration.defaultTrackSelect(\n tracks, config.preferredAudioLanguage,\n config.preferredVideoHdrLevel);\n };\n\n return config;\n }\n\n /**\n * Merges the given configuration changes into the given destination. This\n * uses the default Player configurations as the template.\n *\n * @param {shaka.extern.PlayerConfiguration} destination\n * @param {!Object} updates\n * @param {shaka.extern.PlayerConfiguration=} template\n * @return {boolean}\n * @export\n */\n static mergeConfigObjects(destination, updates, template) {\n const overrides = {\n '.drm.keySystemsMapping': '',\n '.drm.servers': '',\n '.drm.clearKeys': '',\n '.drm.advanced': {\n distinctiveIdentifierRequired: false,\n persistentStateRequired: false,\n videoRobustness: '',\n audioRobustness: '',\n sessionType: '',\n serverCertificate: new Uint8Array(0),\n serverCertificateUri: '',\n individualizationServer: '',\n headers: {},\n },\n };\n return shaka.util.ConfigUtils.mergeConfigObjects(\n destination, updates,\n template || shaka.util.PlayerConfiguration.createDefault(), overrides,\n '');\n }\n\n /**\n * @param {!Array.} tracks\n * @param {string} preferredAudioLanguage\n * @param {string} preferredVideoHdrLevel\n * @return {!Array.}\n */\n static defaultTrackSelect(\n tracks, preferredAudioLanguage, preferredVideoHdrLevel) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const LanguageUtils = shaka.util.LanguageUtils;\n\n let hdrLevel = preferredVideoHdrLevel;\n if (hdrLevel == 'AUTO') {\n // Auto detect the ideal HDR level.\n if (window.matchMedia('(color-gamut: p3)').matches) {\n hdrLevel = 'PQ';\n } else {\n hdrLevel = 'SDR';\n }\n }\n\n /** @type {!Array.} */\n const allVariants = tracks.filter((track) => {\n if (track.type != 'variant') {\n return false;\n }\n if (track.hdr && track.hdr != hdrLevel) {\n return false;\n }\n return true;\n });\n\n /** @type {!Array.} */\n let selectedVariants = [];\n\n // Find the locale that best matches our preferred audio locale.\n const closestLocale = LanguageUtils.findClosestLocale(\n preferredAudioLanguage,\n allVariants.map((variant) => variant.language));\n // If we found a locale that was close to our preference, then only use\n // variants that use that locale.\n if (closestLocale) {\n selectedVariants = allVariants.filter((variant) => {\n const locale = LanguageUtils.normalize(variant.language);\n return locale == closestLocale;\n });\n }\n\n // If we failed to get a language match, go with primary.\n if (selectedVariants.length == 0) {\n selectedVariants = allVariants.filter((variant) => {\n return variant.primary;\n });\n }\n\n // Otherwise, there is no good way to choose the language, so we don't\n // choose a language at all.\n if (selectedVariants.length == 0) {\n // Issue a warning, but only if the content has multiple languages.\n // Otherwise, this warning would just be noise.\n const languages = new Set(allVariants.map((track) => {\n return track.language;\n }));\n\n if (languages.size > 1) {\n shaka.log.warning('Could not choose a good audio track based on ' +\n 'language preferences or primary tracks. An ' +\n 'arbitrary language will be stored!');\n }\n\n // Default back to all variants.\n selectedVariants = allVariants;\n }\n\n // From previously selected variants, choose the SD ones (height <= 480).\n const tracksByHeight = selectedVariants.filter((track) => {\n return track.height && track.height <= 480;\n });\n\n // If variants don't have video or no video with height <= 480 was\n // found, proceed with the previously selected tracks.\n if (tracksByHeight.length) {\n // Sort by resolution, then select all variants which match the height\n // of the highest SD res. There may be multiple audio bitrates for the\n // same video resolution.\n tracksByHeight.sort((a, b) => {\n // The items in this list have already been screened for height, but the\n // compiler doesn't know that.\n goog.asserts.assert(a.height != null, 'Null height');\n goog.asserts.assert(b.height != null, 'Null height');\n\n return b.height - a.height;\n });\n selectedVariants = tracksByHeight.filter((track) => {\n return track.height == tracksByHeight[0].height;\n });\n }\n\n /** @type {!Array.} */\n const selectedTracks = [];\n\n // If there are multiple matches at different audio bitrates, select the\n // middle bandwidth one.\n if (selectedVariants.length) {\n const middleIndex = Math.floor(selectedVariants.length / 2);\n selectedVariants.sort((a, b) => a.bandwidth - b.bandwidth);\n selectedTracks.push(selectedVariants[middleIndex]);\n }\n\n // Since this default callback is used primarily by our own demo app and by\n // app developers who haven't thought about which tracks they want, we\n // should select all image/text tracks, regardless of language. This makes\n // for a better demo for us, and does not rely on user preferences for the\n // unconfigured app.\n for (const track of tracks) {\n if (track.type == ContentType.TEXT || track.type == ContentType.IMAGE) {\n selectedTracks.push(track);\n }\n }\n\n return selectedTracks;\n }\n\n /**\n * @param {!Element} element\n * @return {!Element}\n */\n static defaultManifestPreprocessor(element) {\n return shaka.util.ConfigUtils.referenceParametersAndReturn(\n [element],\n element);\n }\n\n /**\n * @param {!shaka.extern.xml.Node} element\n * @return {!shaka.extern.xml.Node}\n */\n static defaultManifestPreprocessorTXml(element) {\n return shaka.util.ConfigUtils.referenceParametersAndReturn(\n [element],\n element);\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.PreloadManager');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.media.ManifestFilterer');\ngoog.require('shaka.media.ManifestParser');\ngoog.require('shaka.util.PublicPromise');\ngoog.require('shaka.media.PreferenceBasedCriteria');\ngoog.require('shaka.util.Stats');\ngoog.require('shaka.media.SegmentPrefetch');\ngoog.require('shaka.util.IDestroyable');\ngoog.require('shaka.net.NetworkingEngine');\ngoog.require('shaka.media.AdaptationSetCriteria');\ngoog.require('shaka.media.DrmEngine');\ngoog.require('shaka.media.RegionTimeline');\ngoog.require('shaka.media.QualityObserver');\ngoog.require('shaka.util.StreamUtils');\ngoog.require('shaka.media.StreamingEngine');\ngoog.require('shaka.media.SegmentPrefetch');\ngoog.require('shaka.util.ConfigUtils');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.FakeEventTarget');\ngoog.require('shaka.util.ObjectUtils');\ngoog.require('shaka.util.PlayerConfiguration');\n\n/**\n * @implements {shaka.util.IDestroyable}\n * @export\n */\nshaka.media.PreloadManager = class extends shaka.util.FakeEventTarget {\n /**\n * @param {string} assetUri\n * @param {?string} mimeType\n * @param {?number} startTime\n * @param {*} playerInterface\n */\n constructor(assetUri, mimeType, startTime, playerInterface) {\n super();\n\n // Making the playerInterface a * and casting it to the right type allows\n // for the PlayerInterface for this class to not be exported.\n // Unfortunately, the constructor is exported by default.\n const typedPlayerInterface =\n /** @type {!shaka.media.PreloadManager.PlayerInterface} */ (\n playerInterface);\n\n /** @private {string} */\n this.assetUri_ = assetUri;\n\n /** @private {?string} */\n this.mimeType_ = mimeType;\n\n /** @private {!shaka.net.NetworkingEngine} */\n this.networkingEngine_ = typedPlayerInterface.networkingEngine;\n\n /** @private {?number} */\n this.startTime_ = startTime;\n\n /** @private {?shaka.media.AdaptationSetCriteria} */\n this.currentAdaptationSetCriteria_ = null;\n\n /** @private {number} */\n this.startTimeOfDrm_ = 0;\n\n /** @private {function():!shaka.media.DrmEngine} */\n this.createDrmEngine_ = typedPlayerInterface.createDrmEngine;\n\n /** @private {!shaka.media.ManifestFilterer} */\n this.manifestFilterer_ = typedPlayerInterface.manifestFilterer;\n\n /** @private {!shaka.extern.ManifestParser.PlayerInterface} */\n this.manifestPlayerInterface_ =\n typedPlayerInterface.manifestPlayerInterface;\n\n /** @private {!shaka.extern.PlayerConfiguration} */\n this.config_ = typedPlayerInterface.config;\n\n /** @private {?shaka.extern.Manifest} */\n this.manifest_ = null;\n\n /** @private {?shaka.extern.ManifestParser.Factory} */\n this.parserFactory_ = null;\n\n /** @private {?shaka.extern.ManifestParser} */\n this.parser_ = null;\n\n /** @private {boolean} */\n this.parserEntrusted_ = false;\n\n /** @private {!shaka.media.RegionTimeline} */\n this.regionTimeline_ = typedPlayerInterface.regionTimeline;\n\n /** @private {boolean} */\n this.regionTimelineEntrusted_ = false;\n\n /** @private {?shaka.media.DrmEngine} */\n this.drmEngine_ = null;\n\n /** @private {boolean} */\n this.drmEngineEntrusted_ = false;\n\n /** @private {?shaka.extern.AbrManager.Factory} */\n this.abrManagerFactory_ = null;\n\n /** @private {shaka.extern.AbrManager} */\n this.abrManager_ = null;\n\n /** @private {boolean} */\n this.abrManagerEntrusted_ = false;\n\n /** @private {!Map.} */\n this.segmentPrefetchById_ = new Map();\n\n /** @private {boolean} */\n this.segmentPrefetchEntrusted_ = false;\n\n /** @private {?shaka.media.QualityObserver} */\n this.qualityObserver_ = typedPlayerInterface.qualityObserver;\n\n /** @private {!shaka.util.Stats} */\n this.stats_ = new shaka.util.Stats();\n\n /** @private {!shaka.util.PublicPromise} */\n this.manifestPromise_ = new shaka.util.PublicPromise();\n\n /** @private {!shaka.util.PublicPromise} */\n this.successPromise_ = new shaka.util.PublicPromise();\n\n /** @private {?shaka.util.FakeEventTarget} */\n this.eventHandoffTarget_ = null;\n\n /** @private {boolean} */\n this.destroyed_ = false;\n\n /** @private {boolean} */\n this.allowPrefetch_ = typedPlayerInterface.allowPrefetch;\n\n /** @private {?shaka.extern.Variant} */\n this.prefetchedVariant_ = null;\n\n /** @private {boolean} */\n this.allowMakeAbrManager_ = typedPlayerInterface.allowMakeAbrManager;\n\n /** @private {boolean} */\n this.hasBeenAttached_ = false;\n\n /** @private {?Array.} */\n this.queuedOperations_ = [];\n\n /** @private {?Array.} */\n this.latePhaseQueuedOperations_ = [];\n\n /** @private {boolean} */\n this.isPreload_ = true;\n }\n\n /**\n * Makes it so that net requests launched from this load will no longer be\n * marked as \"isPreload\"\n */\n markIsLoad() {\n this.isPreload_ = false;\n }\n\n /**\n * @param {boolean} latePhase\n * @param {function()} callback\n */\n addQueuedOperation(latePhase, callback) {\n const queue =\n latePhase ? this.latePhaseQueuedOperations_ : this.queuedOperations_;\n if (queue) {\n queue.push(callback);\n } else {\n callback();\n }\n }\n\n /** Calls all late phase queued operations, and stops queueing them. */\n stopQueuingLatePhaseQueuedOperations() {\n if (this.latePhaseQueuedOperations_) {\n for (const callback of this.latePhaseQueuedOperations_) {\n callback();\n }\n }\n this.latePhaseQueuedOperations_ = null;\n }\n\n /** @param {!shaka.util.FakeEventTarget} eventHandoffTarget */\n setEventHandoffTarget(eventHandoffTarget) {\n this.eventHandoffTarget_ = eventHandoffTarget;\n this.hasBeenAttached_ = true;\n // Also call all queued operations, and stop queuing them in the future.\n if (this.queuedOperations_) {\n for (const callback of this.queuedOperations_) {\n callback();\n }\n }\n this.queuedOperations_ = null;\n }\n\n /** @param {number} offset */\n setOffsetToStartTime(offset) {\n if (this.startTime_ && offset) {\n this.startTime_ += offset;\n }\n }\n\n /** @return {?number} */\n getStartTime() {\n return this.startTime_;\n }\n\n /** @return {number} */\n getStartTimeOfDRM() {\n return this.startTimeOfDrm_;\n }\n\n /** @return {?string} */\n getMimeType() {\n return this.mimeType_;\n }\n\n /** @return {string} */\n getAssetUri() {\n return this.assetUri_;\n }\n\n /** @return {?shaka.extern.Manifest} */\n getManifest() {\n return this.manifest_;\n }\n\n /** @return {?shaka.extern.ManifestParser.Factory} */\n getParserFactory() {\n return this.parserFactory_;\n }\n\n /** @return {?shaka.media.AdaptationSetCriteria} */\n getCurrentAdaptationSetCriteria() {\n return this.currentAdaptationSetCriteria_;\n }\n\n /** @return {?shaka.extern.AbrManager.Factory} */\n getAbrManagerFactory() {\n return this.abrManagerFactory_;\n }\n\n /**\n * Gets the abr manager, if it exists. Also marks that the abr manager should\n * not be stopped if this manager is destroyed.\n * @return {?shaka.extern.AbrManager}\n */\n receiveAbrManager() {\n this.abrManagerEntrusted_ = true;\n return this.abrManager_;\n }\n\n /**\n * @return {?shaka.extern.AbrManager}\n */\n getAbrManager() {\n return this.abrManager_;\n }\n\n /**\n * Gets the parser, if it exists. Also marks that the parser should not be\n * stopped if this manager is destroyed.\n * @return {?shaka.extern.ManifestParser}\n */\n receiveParser() {\n this.parserEntrusted_ = true;\n return this.parser_;\n }\n\n /**\n * @return {?shaka.extern.ManifestParser}\n */\n getParser() {\n return this.parser_;\n }\n\n /**\n * Gets the region timeline, if it exists. Also marks that the timeline should\n * not be released if this manager is destroyed.\n * @return {?shaka.media.RegionTimeline}\n */\n receiveRegionTimeline() {\n this.regionTimelineEntrusted_ = true;\n return this.regionTimeline_;\n }\n\n /**\n * @return {?shaka.media.RegionTimeline}\n */\n getRegionTimeline() {\n return this.regionTimeline_;\n }\n\n /** @return {?shaka.media.QualityObserver} */\n getQualityObserver() {\n return this.qualityObserver_;\n }\n\n /** @return {!shaka.util.Stats} */\n getStats() {\n return this.stats_;\n }\n\n /** @return {!shaka.media.ManifestFilterer} */\n getManifestFilterer() {\n return this.manifestFilterer_;\n }\n\n /**\n * Gets the drm engine, if it exists. Also marks that the drm engine should\n * not be destroyed if this manager is destroyed.\n * @return {?shaka.media.DrmEngine}\n */\n receiveDrmEngine() {\n this.drmEngineEntrusted_ = true;\n return this.drmEngine_;\n }\n\n /**\n * @return {?shaka.media.DrmEngine}\n */\n getDrmEngine() {\n return this.drmEngine_;\n }\n\n /**\n * @return {?shaka.extern.Variant}\n */\n getPrefetchedVariant() {\n return this.prefetchedVariant_;\n }\n\n /**\n * Gets the SegmentPrefetch objects for the initial stream ids. Also marks\n * that those objects should not be aborted if this manager is destroyed.\n * @return {!Map.}\n */\n receiveSegmentPrefetchesById() {\n this.segmentPrefetchEntrusted_ = true;\n return this.segmentPrefetchById_;\n }\n\n /**\n * @param {?shaka.extern.AbrManager} abrManager\n * @param {?shaka.extern.AbrManager.Factory} abrFactory\n */\n attachAbrManager(abrManager, abrFactory) {\n this.abrManager_ = abrManager;\n this.abrManagerFactory_ = abrFactory;\n }\n\n /**\n * @param {?shaka.media.AdaptationSetCriteria} adaptationSetCriteria\n */\n attachAdaptationSetCriteria(adaptationSetCriteria) {\n this.currentAdaptationSetCriteria_ = adaptationSetCriteria;\n }\n\n /**\n * @param {!shaka.extern.Manifest} manifest\n * @param {!shaka.extern.ManifestParser} parser\n * @param {!shaka.extern.ManifestParser.Factory} parserFactory\n */\n attachManifest(manifest, parser, parserFactory) {\n this.manifest_ = manifest;\n this.parser_ = parser;\n this.parserFactory_ = parserFactory;\n }\n\n /**\n * Starts the process of loading the asset.\n * Success or failure will be measured through waitForFinish()\n */\n start() {\n (async () => {\n // Force a context switch, to give the player a chance to hook up events\n // immediately if desired.\n await Promise.resolve();\n\n // Perform the preloading process.\n try {\n await this.parseManifestInner_();\n this.throwIfDestroyed_();\n\n await this.initializeDrmInner_();\n this.throwIfDestroyed_();\n\n await this.chooseInitialVariantAndPrefetchInner_();\n this.throwIfDestroyed_();\n\n // We don't need the drm keys to load completely for the initial variant\n // to be chosen, but we won't mark the load as a success until it has\n // been loaded. So wait for it here, not inside initializeDrmInner_.\n await this.drmEngine_.waitForActiveRequests();\n this.throwIfDestroyed_();\n\n this.successPromise_.resolve();\n } catch (error) {\n // Ignore OPERATION_ABORTED and OBJECT_DESTROYED errors.\n if (!(error instanceof shaka.util.Error) ||\n (error.code != shaka.util.Error.Code.OPERATION_ABORTED &&\n error.code != shaka.util.Error.Code.OBJECT_DESTROYED)) {\n this.successPromise_.reject(error);\n }\n }\n })();\n }\n\n /**\n * @param {!Event} event\n * @return {boolean}\n * @override\n */\n dispatchEvent(event) {\n if (this.eventHandoffTarget_) {\n return this.eventHandoffTarget_.dispatchEvent(event);\n } else {\n return super.dispatchEvent(event);\n }\n }\n\n /**\n * @param {!shaka.util.Error} error\n */\n onError(error) {\n if (error.severity === shaka.util.Error.Severity.CRITICAL) {\n // Cancel the loading process.\n this.successPromise_.reject(error);\n this.destroy();\n }\n\n const eventName = shaka.util.FakeEvent.EventName.Error;\n const event = this.makeEvent_(eventName, (new Map()).set('detail', error));\n this.dispatchEvent(event);\n if (event.defaultPrevented) {\n error.handled = true;\n }\n }\n\n /**\n * Throw if destroyed, to interrupt processes with a recognizable error.\n *\n * @private\n */\n throwIfDestroyed_() {\n if (this.isDestroyed()) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.PLAYER,\n shaka.util.Error.Code.OBJECT_DESTROYED);\n }\n }\n\n /**\n * Makes a fires an event corresponding to entering a state of the loading\n * process.\n * @param {string} nodeName\n * @private\n */\n makeStateChangeEvent_(nodeName) {\n this.dispatchEvent(new shaka.util.FakeEvent(\n /* name= */ shaka.util.FakeEvent.EventName.OnStateChange,\n /* data= */ (new Map()).set('state', nodeName)));\n }\n\n /**\n * @param {!shaka.util.FakeEvent.EventName} name\n * @param {Map.=} data\n * @return {!shaka.util.FakeEvent}\n * @private\n */\n makeEvent_(name, data) {\n return new shaka.util.FakeEvent(name, data);\n }\n\n /**\n * Pick and initialize a manifest parser, then have it download and parse the\n * manifest.\n *\n * @return {!Promise}\n * @private\n */\n async parseManifestInner_() {\n this.makeStateChangeEvent_('manifest-parser');\n\n if (!this.parser_) {\n // Create the parser that we will use to parse the manifest.\n this.parserFactory_ = shaka.media.ManifestParser.getFactory(\n this.assetUri_, this.mimeType_);\n goog.asserts.assert(this.parserFactory_, 'Must have manifest parser');\n this.parser_ = this.parserFactory_();\n\n this.parser_.configure(this.config_.manifest, () => this.isPreload_);\n }\n\n const startTime = Date.now() / 1000;\n\n this.makeStateChangeEvent_('manifest');\n\n if (!this.manifest_) {\n this.manifest_ = await this.parser_.start(\n this.assetUri_, this.manifestPlayerInterface_);\n }\n\n this.manifestPromise_.resolve();\n\n // This event is fired after the manifest is parsed, but before any\n // filtering takes place.\n const event =\n this.makeEvent_(shaka.util.FakeEvent.EventName.ManifestParsed);\n // Delay event to ensure manifest has been properly propagated\n // to the player.\n await Promise.resolve();\n this.dispatchEvent(event);\n\n // We require all manifests to have at least one variant.\n if (this.manifest_.variants.length == 0) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.NO_VARIANTS);\n }\n\n // Make sure that all variants are either: audio-only, video-only, or\n // audio-video.\n shaka.media.PreloadManager.filterForAVVariants_(this.manifest_);\n\n const now = Date.now() / 1000;\n const delta = now - startTime;\n this.stats_.setManifestTime(delta);\n }\n\n /**\n * Initializes the DRM engine.\n *\n * @return {!Promise}\n * @private\n */\n async initializeDrmInner_() {\n goog.asserts.assert(\n this.manifest_, 'The manifest should already be parsed.');\n\n this.makeStateChangeEvent_('drm-engine');\n\n this.startTimeOfDrm_ = Date.now() / 1000;\n\n this.drmEngine_ = this.createDrmEngine_();\n this.manifestFilterer_.setDrmEngine(this.drmEngine_);\n\n this.drmEngine_.configure(this.config_.drm, () => this.isPreload_);\n\n const tracksChangedInitial = this.manifestFilterer_.applyRestrictions(\n this.manifest_);\n if (tracksChangedInitial) {\n const event = this.makeEvent_(\n shaka.util.FakeEvent.EventName.TracksChanged);\n await Promise.resolve();\n this.throwIfDestroyed_();\n this.dispatchEvent(event);\n }\n\n const playableVariants = shaka.util.StreamUtils.getPlayableVariants(\n this.manifest_.variants);\n await this.drmEngine_.initForPlayback(\n playableVariants,\n this.manifest_.offlineSessionIds);\n this.throwIfDestroyed_();\n\n // Now that we have drm information, filter the manifest (again) so that\n // we can ensure we only use variants with the selected key system.\n const tracksChangedAfter = await this.manifestFilterer_.filterManifest(\n this.manifest_);\n if (tracksChangedAfter) {\n const event = this.makeEvent_(\n shaka.util.FakeEvent.EventName.TracksChanged);\n await Promise.resolve();\n this.dispatchEvent(event);\n }\n }\n\n /** @param {!shaka.extern.PlayerConfiguration} config */\n reconfigure(config) {\n this.config_ = config;\n }\n\n /**\n * @param {string} name\n * @param {*=} value\n */\n configure(name, value) {\n const config = shaka.util.ConfigUtils.convertToConfigObject(name, value);\n shaka.util.PlayerConfiguration.mergeConfigObjects(this.config_, config);\n }\n\n /**\n * Return a copy of the current configuration.\n *\n * @return {shaka.extern.PlayerConfiguration}\n */\n getConfiguration() {\n return shaka.util.ObjectUtils.cloneObject(this.config_);\n }\n\n /**\n * Performs a final filtering of the manifest, and chooses the initial\n * variant. Also prefetches segments.\n *\n * @return {!Promise}\n * @private\n */\n async chooseInitialVariantAndPrefetchInner_() {\n goog.asserts.assert(\n this.manifest_, 'The manifest should already be parsed.');\n\n // This step does not have any associated events, as it is only part of the\n // \"load\" state in the old state graph.\n\n if (!this.currentAdaptationSetCriteria_) {\n // Copy preferred languages from the config again, in case the config was\n // changed between construction and playback.\n this.currentAdaptationSetCriteria_ =\n new shaka.media.PreferenceBasedCriteria(\n this.config_.preferredAudioLanguage,\n this.config_.preferredVariantRole,\n this.config_.preferredAudioChannelCount,\n this.config_.preferredVideoHdrLevel,\n this.config_.preferSpatialAudio,\n this.config_.preferredVideoLayout,\n this.config_.preferredAudioLabel,\n this.config_.preferredVideoLabel,\n this.config_.mediaSource.codecSwitchingStrategy,\n /* audioCodec= */ '');\n }\n\n // Make the ABR manager.\n if (this.allowMakeAbrManager_) {\n const abrFactory = this.config_.abrFactory;\n this.abrManagerFactory_ = abrFactory;\n this.abrManager_ = abrFactory();\n this.abrManager_.configure(this.config_.abr);\n }\n\n if (this.allowPrefetch_) {\n const isLive = this.manifest_.presentationTimeline.isLive();\n // Prefetch segments for the predicted first variant.\n // We start these here, but don't wait for them; it's okay to start the\n // full load process while the segments are being prefetched.\n const playableVariants = shaka.util.StreamUtils.getPlayableVariants(\n this.manifest_.variants);\n const adaptationSet = this.currentAdaptationSetCriteria_.create(\n playableVariants);\n // Guess what the first variant will be, based on a SimpleAbrManager.\n this.abrManager_.configure(this.config_.abr);\n this.abrManager_.setVariants(Array.from(adaptationSet.values()));\n const variant = this.abrManager_.chooseVariant();\n if (variant) {\n const promises = [];\n this.prefetchedVariant_ = variant;\n if (variant.video) {\n promises.push(this.prefetchStream_(variant.video, isLive));\n }\n if (variant.audio) {\n promises.push(this.prefetchStream_(variant.audio, isLive));\n }\n await Promise.all(promises);\n }\n }\n }\n\n /**\n * @param {!shaka.extern.Stream} stream\n * @param {boolean} isLive\n * @return {!Promise}\n * @private\n */\n async prefetchStream_(stream, isLive) {\n // Use the prefetch limit from the config if this is set, otherwise use 2.\n const prefetchLimit = this.config_.streaming.segmentPrefetchLimit || 2;\n const prefetch = new shaka.media.SegmentPrefetch(\n prefetchLimit, stream, (reference, stream, streamDataCallback) => {\n return shaka.media.StreamingEngine.dispatchFetch(\n reference, stream, streamDataCallback || null,\n this.config_.streaming.retryParameters, this.networkingEngine_,\n this.isPreload_);\n }, /* reverse= */ false);\n this.segmentPrefetchById_.set(stream.id, prefetch);\n\n // Start prefetching a bit.\n await stream.createSegmentIndex();\n const startTime = this.startTime_ || 0;\n const prefetchSegmentIterator =\n stream.segmentIndex.getIteratorForTime(startTime);\n let prefetchSegment =\n prefetchSegmentIterator ? prefetchSegmentIterator.current() : null;\n if (!prefetchSegment) {\n // If we can't get a segment at the desired spot, at least get a segment,\n // so we can get the init segment.\n prefetchSegment = stream.segmentIndex.earliestReference();\n }\n if (prefetchSegment) {\n if (isLive) {\n // Preload only the init segment for Live\n if (prefetchSegment.initSegmentReference) {\n await prefetch.prefetchInitSegment(\n prefetchSegment.initSegmentReference);\n }\n } else {\n // Preload a segment, too... either the first segment, or the segment\n // that corresponds with this.startTime_, as appropriate.\n // Note: this method also preload the init segment\n await prefetch.prefetchSegmentsByTime(prefetchSegment.startTime);\n }\n }\n }\n\n /**\n * Waits for the loading to be finished (or to fail with an error).\n * @return {!Promise}\n * @export\n */\n waitForFinish() {\n return this.successPromise_;\n }\n\n /**\n * Waits for the manifest to be loaded (or to fail with an error).\n * @return {!Promise}\n */\n waitForManifest() {\n const promises = [\n this.manifestPromise_,\n this.successPromise_,\n ];\n return Promise.race(promises);\n }\n\n /**\n * Releases or stops all non-entrusted resources.\n *\n * @override\n * @export\n */\n async destroy() {\n this.destroyed_ = true;\n if (this.parser_ && !this.parserEntrusted_) {\n await this.parser_.stop();\n }\n if (this.abrManager_ && !this.abrManagerEntrusted_) {\n await this.abrManager_.stop();\n }\n if (this.regionTimeline_ && !this.regionTimelineEntrusted_) {\n this.regionTimeline_.release();\n }\n if (this.drmEngine_ && !this.drmEngineEntrusted_) {\n await this.drmEngine_.destroy();\n }\n if (this.segmentPrefetchById_.size > 0 && !this.segmentPrefetchEntrusted_) {\n for (const segmentPrefetch of this.segmentPrefetchById_.values()) {\n segmentPrefetch.clearAll();\n }\n }\n // this.eventHandoffTarget_ is not unset, so that events and errors fired\n // after the preload manager is destroyed will still be routed to the\n // player, if it was once linked up.\n }\n\n /** @return {boolean} */\n isDestroyed() {\n return this.destroyed_;\n }\n\n /** @return {boolean} */\n hasBeenAttached() {\n return this.hasBeenAttached_;\n }\n\n /**\n * Take a series of variants and ensure that they only contain one type of\n * variant. The different options are:\n * 1. Audio-Video\n * 2. Audio-Only\n * 3. Video-Only\n *\n * A manifest can only contain a single type because once we initialize media\n * source to expect specific streams, it must always have content for those\n * streams. If we were to start with audio+video and switch to an audio-only\n * variant, media source would block waiting for video content.\n *\n * @param {shaka.extern.Manifest} manifest\n * @private\n */\n static filterForAVVariants_(manifest) {\n const isAVVariant = (variant) => {\n // Audio-video variants may include both streams separately or may be\n // single multiplexed streams with multiple codecs.\n return (variant.video && variant.audio) ||\n (variant.video && variant.video.codecs.includes(','));\n };\n if (manifest.variants.some(isAVVariant)) {\n shaka.log.debug('Found variant with audio and video content, ' +\n 'so filtering out audio-only content.');\n manifest.variants = manifest.variants.filter(isAVVariant);\n }\n }\n};\n\n/**\n * @typedef {{\n * config: !shaka.extern.PlayerConfiguration,\n * manifestPlayerInterface: !shaka.extern.ManifestParser.PlayerInterface,\n * regionTimeline: !shaka.media.RegionTimeline,\n * qualityObserver: ?shaka.media.QualityObserver,\n * createDrmEngine: function():!shaka.media.DrmEngine,\n * networkingEngine: !shaka.net.NetworkingEngine,\n * manifestFilterer: !shaka.media.ManifestFilterer,\n * allowPrefetch: boolean,\n * allowMakeAbrManager: boolean\n * }}\n *\n * @property {!shaka.extern.PlayerConfiguration} config\n * @property {!shaka.extern.ManifestParser.PlayerInterface}\n * manifestPlayerInterface\n * @property {!shaka.media.RegionTimeline} regionTimeline\n * @property {?shaka.media.QualityObserver} qualityObserver\n * @property {function():!shaka.media.DrmEngine} createDrmEngine\n * @property {!shaka.net.NetworkingEngine} networkingEngine\n * @property {!shaka.media.ManifestFilterer} manifestFilterer\n * @property {boolean} allowPrefetch\n * @property {boolean} allowMakeAbrManager\n */\nshaka.media.PreloadManager.PlayerInterface;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.RegionObserver');\n\ngoog.require('shaka.media.IPlayheadObserver');\ngoog.require('shaka.media.RegionTimeline');\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.FakeEventTarget');\n\n\n/**\n * The region observer watches a region timeline and playhead, and fires events\n * ('enter', 'exit', 'skip') as the playhead moves.\n *\n * @implements {shaka.media.IPlayheadObserver}\n * @final\n */\nshaka.media.RegionObserver = class extends shaka.util.FakeEventTarget {\n /**\n * Create a region observer for the given timeline. The observer does not\n * own the timeline, only uses it. This means that the observer should NOT\n * destroy the timeline.\n *\n * @param {!shaka.media.RegionTimeline} timeline\n * @param {boolean} startsPastZero\n */\n constructor(timeline, startsPastZero) {\n super();\n\n /** @private {shaka.media.RegionTimeline} */\n this.timeline_ = timeline;\n\n /**\n * Whether the asset is expected to start at a time beyond 0 seconds.\n * For example, if the asset is a live stream.\n * If true, we will not start polling for regions until the playhead has\n * moved past 0 seconds, to avoid bad behaviors where the current time is\n * briefly 0 before we have enough data to play.\n * @private {boolean}\n */\n this.startsPastZero_ = startsPastZero;\n\n /**\n * A mapping between a region and where we previously were relative to it.\n * When the value here differs from what we calculate, it means we moved and\n * should fire an event.\n *\n * @private {!Map.}\n */\n this.oldPosition_ = new Map();\n\n // To make the rules easier to read, alias all the relative positions.\n const RelativePosition = shaka.media.RegionObserver.RelativePosition_;\n const BEFORE_THE_REGION = RelativePosition.BEFORE_THE_REGION;\n const IN_THE_REGION = RelativePosition.IN_THE_REGION;\n const AFTER_THE_REGION = RelativePosition.AFTER_THE_REGION;\n\n /**\n * A read-only collection of rules for what to do when we change position\n * relative to a region.\n *\n * @private {!Iterable.}\n */\n this.rules_ = [\n {\n weWere: null,\n weAre: IN_THE_REGION,\n invoke: (region, seeking) => this.onEvent_('enter', region, seeking),\n },\n {\n weWere: BEFORE_THE_REGION,\n weAre: IN_THE_REGION,\n invoke: (region, seeking) => this.onEvent_('enter', region, seeking),\n },\n {\n weWere: AFTER_THE_REGION,\n weAre: IN_THE_REGION,\n invoke: (region, seeking) => this.onEvent_('enter', region, seeking),\n },\n {\n weWere: IN_THE_REGION,\n weAre: BEFORE_THE_REGION,\n invoke: (region, seeking) => this.onEvent_('exit', region, seeking),\n },\n {\n weWere: IN_THE_REGION,\n weAre: AFTER_THE_REGION,\n invoke: (region, seeking) => this.onEvent_('exit', region, seeking),\n },\n {\n weWere: BEFORE_THE_REGION,\n weAre: AFTER_THE_REGION,\n invoke: (region, seeking) => this.onEvent_('skip', region, seeking),\n },\n {\n weWere: AFTER_THE_REGION,\n weAre: BEFORE_THE_REGION,\n invoke: (region, seeking) => this.onEvent_('skip', region, seeking),\n },\n ];\n\n /** @private {shaka.util.EventManager} */\n this.eventManager_ = new shaka.util.EventManager();\n\n this.eventManager_.listen(this.timeline_, 'regionremove', (event) => {\n /** @type {shaka.extern.TimelineRegionInfo} */\n const region = event['region'];\n this.oldPosition_.delete(region);\n });\n }\n\n /** @override */\n release() {\n this.timeline_ = null;\n\n // Clear our maps so that we are not holding onto any more information than\n // needed.\n this.oldPosition_.clear();\n\n this.eventManager_.release();\n this.eventManager_ = null;\n\n super.release();\n }\n\n /** @override */\n poll(positionInSeconds, wasSeeking) {\n const RegionObserver = shaka.media.RegionObserver;\n if (this.startsPastZero_ && positionInSeconds == 0) {\n // Don't start checking regions until the timeline has begun moving.\n return;\n }\n // Now that we have seen the playhead go past 0, it's okay if it goes\n // back there (e.g. seeking back to the start).\n this.startsPastZero_ = false;\n\n for (const region of this.timeline_.regions()) {\n const previousPosition = this.oldPosition_.get(region);\n const currentPosition = RegionObserver.determinePositionRelativeTo_(\n region, positionInSeconds);\n\n // We will only use |previousPosition| and |currentPosition|, so we can\n // update our state now.\n this.oldPosition_.set(region, currentPosition);\n\n for (const rule of this.rules_) {\n if (rule.weWere == previousPosition && rule.weAre == currentPosition) {\n rule.invoke(region, wasSeeking);\n }\n }\n }\n }\n\n /**\n * Dispatch events of the given type. All event types in this class have the\n * same parameters: region and seeking.\n *\n * @param {string} eventType\n * @param {shaka.extern.TimelineRegionInfo} region\n * @param {boolean} seeking\n * @private\n */\n onEvent_(eventType, region, seeking) {\n const event = new shaka.util.FakeEvent(eventType, new Map([\n ['region', region],\n ['seeking', seeking],\n ]));\n this.dispatchEvent(event);\n }\n\n /**\n * Get the relative position of the playhead to |region| when the playhead is\n * at |seconds|. We treat the region's start and end times as inclusive\n * bounds.\n *\n * @param {shaka.extern.TimelineRegionInfo} region\n * @param {number} seconds\n * @return {shaka.media.RegionObserver.RelativePosition_}\n * @private\n */\n static determinePositionRelativeTo_(region, seconds) {\n const RelativePosition = shaka.media.RegionObserver.RelativePosition_;\n\n if (seconds < region.startTime) {\n return RelativePosition.BEFORE_THE_REGION;\n }\n\n if (seconds > region.endTime) {\n return RelativePosition.AFTER_THE_REGION;\n }\n\n return RelativePosition.IN_THE_REGION;\n }\n};\n\n/**\n * An enum of relative positions between the playhead and a region. Each is\n * phrased so that it works in \"The playhead is X\" where \"X\" is any value in\n * the enum.\n *\n * @enum {number}\n * @private\n */\nshaka.media.RegionObserver.RelativePosition_ = {\n BEFORE_THE_REGION: 1,\n IN_THE_REGION: 2,\n AFTER_THE_REGION: 3,\n};\n\n/**\n * All region observer events (onEnter, onExit, and onSkip) will be passed the\n * region that the playhead is interacting with and whether or not the playhead\n * moving is part of a seek event.\n *\n * @typedef {function(shaka.extern.TimelineRegionInfo, boolean)}\n */\nshaka.media.RegionObserver.EventListener;\n\n/**\n * @typedef {{\n * weWere: ?shaka.media.RegionObserver.RelativePosition_,\n * weAre: ?shaka.media.RegionObserver.RelativePosition_,\n * invoke: shaka.media.RegionObserver.EventListener\n * }}\n *\n * @private\n */\nshaka.media.RegionObserver.Rule_;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.net.NetworkingUtils');\n\ngoog.require('goog.Uri');\ngoog.require('shaka.net.NetworkingEngine');\ngoog.require('shaka.util.Error');\n\n\n/**\n * @summary Networking utility functions.\n */\nshaka.net.NetworkingUtils = class {\n /**\n * @param {string} uri\n * @param {!shaka.net.NetworkingEngine} netEngine\n * @param {shaka.extern.RetryParameters} retryParams\n * @return {!Promise.}\n */\n static async getMimeType(uri, netEngine, retryParams) {\n const extension = shaka.net.NetworkingUtils.getExtension_(uri);\n let mimeType =\n shaka.net.NetworkingUtils.EXTENSIONS_TO_MIME_TYPES_[extension];\n if (mimeType) {\n return mimeType;\n }\n const type = shaka.net.NetworkingEngine.RequestType.MANIFEST;\n\n const request = shaka.net.NetworkingEngine.makeRequest([uri], retryParams);\n\n try {\n request.method = 'HEAD';\n const response = await netEngine.request(type, request).promise;\n mimeType = response.headers['content-type'];\n } catch (error) {\n if (error &&\n (error.code == shaka.util.Error.Code.HTTP_ERROR ||\n error.code == shaka.util.Error.Code.BAD_HTTP_STATUS)) {\n request.method = 'GET';\n const response = await netEngine.request(type, request).promise;\n mimeType = response.headers['content-type'];\n }\n }\n\n // https://bit.ly/2K9s9kf says this header should always be available,\n // but just to be safe:\n return mimeType ? mimeType.toLowerCase().split(';').shift() : '';\n }\n\n\n /**\n * @param {string} uri\n * @return {string}\n * @private\n */\n static getExtension_(uri) {\n const uriObj = new goog.Uri(uri);\n const uriPieces = uriObj.getPath().split('/');\n const uriFilename = uriPieces.pop();\n const filenamePieces = uriFilename.split('.');\n\n // Only one piece means there is no extension.\n if (filenamePieces.length == 1) {\n return '';\n }\n\n return filenamePieces.pop().toLowerCase();\n }\n};\n\n/**\n * @const {!Object.}\n * @private\n */\nshaka.net.NetworkingUtils.EXTENSIONS_TO_MIME_TYPES_ = {\n 'mp4': 'video/mp4',\n 'm4v': 'video/mp4',\n 'm4a': 'audio/mp4',\n 'webm': 'video/webm',\n 'weba': 'audio/webm',\n 'mkv': 'video/webm', // Chromium browsers supports it.\n 'ts': 'video/mp2t',\n 'ogv': 'video/ogg',\n 'ogg': 'audio/ogg',\n 'mpg': 'video/mpeg',\n 'mpeg': 'video/mpeg',\n 'm3u8': 'application/x-mpegurl',\n 'mpd': 'application/dash+xml',\n 'ism': 'application/vnd.ms-sstr+xml',\n 'mp3': 'audio/mpeg',\n 'aac': 'audio/aac',\n 'flac': 'audio/flac',\n 'wav': 'audio/wav',\n 'sbv': 'text/x-subviewer',\n 'srt': 'text/srt',\n 'vtt': 'text/vtt',\n 'webvtt': 'text/vtt',\n 'ttml': 'application/ttml+xml',\n 'lrc': 'application/x-subtitle-lrc',\n 'ssa': 'text/x-ssa',\n 'ass': 'text/x-ssa',\n 'jpg': 'image/jpeg',\n 'png': 'image/png',\n 'svg': 'image/svg+xml',\n 'webp': 'image/webp',\n 'avif': 'image/avif',\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.text.Utils');\n\ngoog.require('shaka.log');\ngoog.require('shaka.text.Cue');\ngoog.require('shaka.text.CueRegion');\n\n\nshaka.text.Utils = class {\n /**\n * Flatten nested cue payloads recursively. If a cue has nested cues,\n * their contents should be combined and replace the payload of the parent.\n *\n * @param {!shaka.text.Cue} cue\n * @param {?shaka.text.Cue=} parentCue\n * @return {string}\n * @private\n */\n static flattenPayload_(cue, parentCue) {\n if (cue.lineBreak) {\n // This is a vertical lineBreak, so insert a newline.\n return '\\n';\n }\n if (cue.nestedCues.length) {\n return cue.nestedCues.map((nested) => {\n return shaka.text.Utils.flattenPayload_(nested, cue);\n }).join('');\n }\n\n if (!cue.payload) {\n return cue.payload;\n }\n\n // Handle bold, italics and underline\n const openStyleTags = [];\n const bold = cue.fontWeight >= shaka.text.Cue.fontWeight.BOLD;\n const italics = cue.fontStyle == shaka.text.Cue.fontStyle.ITALIC;\n const underline = cue.textDecoration.includes(\n shaka.text.Cue.textDecoration.UNDERLINE);\n if (bold) {\n openStyleTags.push(['b']);\n }\n if (italics) {\n openStyleTags.push(['i']);\n }\n if (underline) {\n openStyleTags.push(['u']);\n }\n // Handle color classes, if the value consists of letters\n let color = cue.color;\n if (color == '' && parentCue) {\n color = parentCue.color;\n }\n let classes = '';\n const colorName = shaka.text.Utils.getColorName_(color);\n if (colorName) {\n classes += `.${colorName}`;\n }\n let bgColor = cue.backgroundColor;\n if (bgColor == '' && parentCue) {\n bgColor = parentCue.backgroundColor;\n }\n const bgColorName = shaka.text.Utils.getColorName_(bgColor);\n if (bgColorName) {\n classes += `.bg_${bgColorName}`;\n }\n if (classes) {\n openStyleTags.push(['c', classes]);\n }\n\n return openStyleTags.reduceRight((acc, [tag, classes = '']) => {\n return `<${tag}${classes}>${acc}`;\n }, cue.payload);\n }\n\n /**\n * Gets the color name from a color string.\n *\n * @param {string} string\n * @return {?string}\n * @private\n */\n static getColorName_(string) {\n let colorString = string.toLowerCase();\n const rgb = colorString.replace(/\\s/g, '')\n .match(/^rgba?\\((\\d+),(\\d+),(\\d+),?([^,\\s)]+)?/i);\n if (rgb) {\n colorString = '#' +\n (parseInt(rgb[1], 10) | (1 << 8)).toString(16).slice(1) +\n (parseInt(rgb[2], 10) | (1 << 8)).toString(16).slice(1) +\n (parseInt(rgb[3], 10) | (1 << 8)).toString(16).slice(1);\n } else if (colorString.startsWith('#') && colorString.length > 7) {\n // With this we lose the alpha of the color, but it is better than having\n // no color.\n colorString = colorString.slice(0, 7);\n }\n switch (colorString) {\n case 'white':\n case '#fff':\n case '#ffffff':\n return 'white';\n case 'lime':\n case '#0f0':\n case '#00ff00':\n return 'lime';\n case 'cyan':\n case '#0ff':\n case '#00ffff':\n return 'cyan';\n case 'red':\n case '#f00':\n case '#ff0000':\n return 'red';\n case 'yellow':\n case '#ff0':\n case '#ffff00':\n return 'yellow';\n case 'magenta':\n case '#f0f':\n case '#ff00ff':\n return 'magenta';\n case 'blue':\n case '#00f':\n case '#0000ff':\n return 'blue';\n case 'black':\n case '#000':\n case '#000000':\n return 'black';\n }\n // No color name\n return null;\n }\n\n /**\n * We don't want to modify the array or objects passed in, since we don't\n * technically own them. So we build a new array and replace certain items\n * in it if they need to be flattened.\n * We also don't want to flatten the text payloads starting at a container\n * element; otherwise, for containers encapsulating multiple caption lines,\n * the lines would merge into a single cue. This is undesirable when a\n * subset of the captions are outside of the append time window. To fix\n * this, we only call flattenPayload() starting at elements marked as\n * isContainer = false.\n *\n * @param {!Array.} cues\n * @param {?shaka.text.Cue=} parentCue\n * @return {!Array.}\n */\n static getCuesToFlatten(cues, parentCue) {\n const result = [];\n for (const cue of shaka.text.Utils.removeDuplicates(cues)) {\n if (cue.isContainer) {\n // Recurse to find the actual text payload cues.\n result.push(...shaka.text.Utils.getCuesToFlatten(cue.nestedCues, cue));\n } else {\n // Flatten the payload.\n const flatCue = cue.clone();\n flatCue.nestedCues = [];\n flatCue.payload = shaka.text.Utils.flattenPayload_(cue, parentCue);\n result.push(flatCue);\n }\n }\n return result;\n }\n\n /**\n * @param {!Array.} cues\n * @return {!Array.}\n */\n static removeDuplicates(cues) {\n const uniqueCues = [];\n for (const cue of cues) {\n const isValid = !uniqueCues.some(\n (existingCue) => shaka.text.Cue.equal(cue, existingCue));\n if (isValid) {\n uniqueCues.push(cue);\n }\n }\n return uniqueCues;\n }\n\n /**\n * @param {!shaka.text.Cue} shakaCue\n * @return {TextTrackCue}\n */\n static mapShakaCueToNativeCue(shakaCue) {\n if (shakaCue.startTime >= shakaCue.endTime) {\n // Edge will throw in this case.\n // See issue #501\n shaka.log.warning('Invalid cue times: ' + shakaCue.startTime +\n ' - ' + shakaCue.endTime);\n return null;\n }\n\n const Cue = shaka.text.Cue;\n /** @type {VTTCue} */\n const vttCue = new VTTCue(\n shakaCue.startTime,\n shakaCue.endTime,\n shakaCue.payload);\n\n const hash = (text) => {\n let hash = 5381;\n let i = text.length;\n while (i) {\n hash = (hash * 33) ^ text.charCodeAt(--i);\n }\n return (hash >>> 0).toString();\n };\n\n vttCue.id = hash(shakaCue.startTime.toString()) +\n hash(shakaCue.endTime.toString()) +\n hash(shakaCue.payload);\n\n // NOTE: positionAlign and lineAlign settings are not supported by Chrome\n // at the moment, so setting them will have no effect.\n // The bug on chromium to implement them:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=633690\n\n vttCue.lineAlign = shakaCue.lineAlign;\n vttCue.positionAlign = shakaCue.positionAlign;\n if (shakaCue.size) {\n vttCue.size = shakaCue.size;\n }\n\n try {\n // Safari 10 seems to throw on align='center'.\n vttCue.align = shakaCue.textAlign;\n } catch (exception) {}\n\n if (shakaCue.textAlign == 'center' && vttCue.align != 'center') {\n // We want vttCue.position = 'auto'. By default, |position| is set to\n // \"auto\". If we set it to \"auto\" safari will throw an exception, so we\n // must rely on the default value.\n vttCue.align = 'middle';\n }\n\n if (shakaCue.writingMode ==\n Cue.writingMode.VERTICAL_LEFT_TO_RIGHT) {\n vttCue.vertical = 'lr';\n } else if (shakaCue.writingMode ==\n Cue.writingMode.VERTICAL_RIGHT_TO_LEFT) {\n vttCue.vertical = 'rl';\n }\n\n // snapToLines flag is true by default\n if (shakaCue.lineInterpretation == Cue.lineInterpretation.PERCENTAGE) {\n vttCue.snapToLines = false;\n }\n\n if (shakaCue.line != null) {\n vttCue.line = shakaCue.line;\n }\n\n if (shakaCue.position != null) {\n vttCue.position = shakaCue.position;\n }\n\n return vttCue;\n }\n\n /**\n * @param {!VTTCue} vttCue\n * @return {?shaka.text.Cue}\n */\n static mapNativeCueToShakaCue(vttCue) {\n if (vttCue.endTime === Infinity || vttCue.endTime < vttCue.startTime) {\n return null;\n }\n const cue = new shaka.text.Cue(vttCue.startTime, vttCue.endTime,\n vttCue.text);\n cue.line = typeof vttCue.line === 'number' ? vttCue.line : null;\n if (vttCue.lineAlign) {\n cue.lineAlign = /** @type {shaka.text.Cue.lineAlign} */\n (vttCue.lineAlign);\n }\n cue.lineInterpretation = vttCue.snapToLines ?\n shaka.text.Cue.lineInterpretation.LINE_NUMBER :\n shaka.text.Cue.lineInterpretation.PERCENTAGE;\n cue.position = typeof vttCue.position === 'number' ?\n vttCue.position : null;\n if (vttCue.positionAlign) {\n cue.positionAlign = /** @type {shaka.text.Cue.positionAlign} */\n (vttCue.positionAlign);\n }\n cue.size = vttCue.size;\n cue.textAlign = /** @type {shaka.text.Cue.textAlign} */ (vttCue.align);\n if (vttCue.vertical === 'lr') {\n cue.writingMode = shaka.text.Cue.writingMode.VERTICAL_LEFT_TO_RIGHT;\n } else if (vttCue.vertical === 'rl') {\n cue.writingMode = shaka.text.Cue.writingMode.VERTICAL_RIGHT_TO_LEFT;\n }\n if (vttCue.region) {\n cue.region.id = vttCue.region.id;\n cue.region.height = vttCue.region.lines;\n cue.region.heightUnits = shaka.text.CueRegion.units.LINES;\n cue.region.regionAnchorX = vttCue.region.regionAnchorX;\n cue.region.regionAnchorY = vttCue.region.regionAnchorY;\n cue.region.scroll = /** @type {shaka.text.CueRegion.scrollMode} */\n (vttCue.region.scroll);\n cue.region.viewportAnchorX = vttCue.region.viewportAnchorX;\n cue.region.viewportAnchorY = vttCue.region.viewportAnchorY;\n cue.region.viewportAnchorUnits = shaka.text.CueRegion.units.PERCENTAGE;\n cue.region.width = vttCue.region.width;\n cue.region.widthUnits = shaka.text.CueRegion.units.PERCENTAGE;\n }\n shaka.text.Cue.parseCuePayload(cue);\n\n return cue;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview\n */\n\ngoog.provide('shaka.text.SimpleTextDisplayer');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.text.Utils');\n\n\n/**\n * A text displayer plugin using the browser's native VTTCue interface.\n *\n * @implements {shaka.extern.TextDisplayer}\n * @export\n */\nshaka.text.SimpleTextDisplayer = class {\n /**\n * @param {HTMLMediaElement} video\n * @param {string} label\n */\n constructor(video, label) {\n /** @private {TextTrack} */\n this.textTrack_ = null;\n\n // TODO: Test that in all cases, the built-in CC controls in the video\n // element are toggling our TextTrack.\n\n // If the video element has TextTracks, disable them. If we see one that\n // was created by a previous instance of Shaka Player, reuse it.\n for (const track of Array.from(video.textTracks)) {\n if (track.kind === 'metadata' || track.kind === 'chapters') {\n continue;\n }\n // NOTE: There is no API available to remove a TextTrack from a video\n // element.\n track.mode = 'disabled';\n\n if (track.label == label) {\n this.textTrack_ = track;\n }\n }\n\n if (!this.textTrack_) {\n // As far as I can tell, there is no observable difference between setting\n // kind to 'subtitles' or 'captions' when creating the TextTrack object.\n // The individual text tracks from the manifest will still have their own\n // kinds which can be displayed in the app's UI.\n this.textTrack_ = video.addTextTrack('subtitles', label);\n }\n this.textTrack_.mode = 'hidden';\n }\n\n\n /**\n * @override\n * @export\n */\n configure(config) {\n // Unused.\n }\n\n /**\n * @override\n * @export\n */\n remove(start, end) {\n // Check that the displayer hasn't been destroyed.\n if (!this.textTrack_) {\n return false;\n }\n\n const removeInRange = (cue) => {\n const inside = cue.startTime < end && cue.endTime > start;\n return inside;\n };\n\n shaka.text.SimpleTextDisplayer.removeWhere_(this.textTrack_, removeInRange);\n\n return true;\n }\n\n /**\n * @override\n * @export\n */\n append(cues) {\n if (!this.textTrack_) {\n return;\n }\n const flattenedCues = shaka.text.Utils.getCuesToFlatten(cues);\n\n // Convert cues.\n const textTrackCues = [];\n const cuesInTextTrack = this.textTrack_.cues ?\n Array.from(this.textTrack_.cues) : [];\n\n for (const inCue of flattenedCues) {\n // When a VTT cue spans a segment boundary, the cue will be duplicated\n // into two segments.\n // To avoid displaying duplicate cues, if the current textTrack cues\n // list already contains the cue, skip it.\n const containsCue = cuesInTextTrack.some((cueInTextTrack) => {\n if (cueInTextTrack.startTime == inCue.startTime &&\n cueInTextTrack.endTime == inCue.endTime &&\n cueInTextTrack.text == inCue.payload) {\n return true;\n }\n return false;\n });\n\n if (!containsCue && inCue.payload) {\n const cue =\n shaka.text.Utils.mapShakaCueToNativeCue(inCue);\n if (cue) {\n textTrackCues.push(cue);\n }\n }\n }\n\n // Sort the cues based on start/end times. Make a copy of the array so\n // we can get the index in the original ordering. Out of order cues are\n // rejected by Edge. See https://bit.ly/2K9VX3s\n const sortedCues = textTrackCues.slice().sort((a, b) => {\n if (a.startTime != b.startTime) {\n return a.startTime - b.startTime;\n } else if (a.endTime != b.endTime) {\n return a.endTime - b.startTime;\n } else {\n // The browser will display cues with identical time ranges from the\n // bottom up. Reversing the order of equal cues means the first one\n // parsed will be at the top, as you would expect.\n // See https://github.com/shaka-project/shaka-player/issues/848 for\n // more info.\n // However, this ordering behavior is part of VTTCue's \"line\" field.\n // Some platforms don't have a real VTTCue and use a polyfill instead.\n // When VTTCue is polyfilled or does not support \"line\", we should _not_\n // reverse the order. This occurs on legacy Edge.\n // eslint-disable-next-line no-restricted-syntax\n if ('line' in VTTCue.prototype) {\n // Native VTTCue\n return textTrackCues.indexOf(b) - textTrackCues.indexOf(a);\n } else {\n // Polyfilled VTTCue\n return textTrackCues.indexOf(a) - textTrackCues.indexOf(b);\n }\n }\n });\n\n for (const cue of sortedCues) {\n this.textTrack_.addCue(cue);\n }\n }\n\n /**\n * @override\n * @export\n */\n destroy() {\n if (this.textTrack_) {\n const removeIt = (cue) => true;\n shaka.text.SimpleTextDisplayer.removeWhere_(this.textTrack_, removeIt);\n\n // NOTE: There is no API available to remove a TextTrack from a video\n // element.\n this.textTrack_.mode = 'disabled';\n }\n\n this.textTrack_ = null;\n return Promise.resolve();\n }\n\n /**\n * @override\n * @export\n */\n isTextVisible() {\n if (!this.textTrack_) {\n return false;\n }\n return this.textTrack_.mode == 'showing';\n }\n\n /**\n * @override\n * @export\n */\n setTextVisibility(on) {\n if (this.textTrack_) {\n this.textTrack_.mode = on ? 'showing' : 'hidden';\n }\n }\n\n /**\n * @override\n * @export\n */\n setTextLanguage(language) {\n }\n\n /**\n * Iterate over all the cues in a text track and remove all those for which\n * |predicate(cue)| returns true.\n *\n * @param {!TextTrack} track\n * @param {function(!TextTrackCue):boolean} predicate\n * @private\n */\n static removeWhere_(track, predicate) {\n // Since |track.cues| can be null if |track.mode| is \"disabled\", force it to\n // something other than \"disabled\".\n //\n // If the track is already showing, then we should keep it as showing. But\n // if it something else, we will use hidden so that we don't \"flash\" cues on\n // the screen.\n const oldState = track.mode;\n const tempState = oldState == 'showing' ? 'showing' : 'hidden';\n\n track.mode = tempState;\n\n goog.asserts.assert(\n track.cues,\n 'Cues should be accessible when mode is set to \"' + tempState + '\".');\n\n // Create a copy of the list to avoid errors while iterating.\n for (const cue of Array.from(track.cues)) {\n if (cue && predicate(cue)) {\n track.removeCue(cue);\n }\n }\n\n track.mode = oldState;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.text.StubTextDisplayer');\n\n/**\n* A stub text displayer plugin that does nothing\n*\n* @implements {shaka.extern.TextDisplayer}\n* @export\n*/\nshaka.text.StubTextDisplayer = class {\n /**\n * @override\n * @export\n */\n configure(config) {\n }\n\n /**\n * @override\n * @export\n */\n remove(start, end) {\n }\n\n /**\n * @override\n * @export\n */\n append(cues) {\n }\n\n /**\n * @override\n * @export\n */\n destroy() {\n }\n\n /**\n * @override\n * @export\n */\n isTextVisible() {\n return false;\n }\n\n /**\n * @override\n * @export\n */\n setTextVisibility(on) {\n }\n\n /**\n * @override\n * @export\n */\n setTextLanguage(language) {\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n\ngoog.provide('shaka.text.UITextDisplayer');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.text.Cue');\ngoog.require('shaka.text.CueRegion');\ngoog.require('shaka.text.Utils');\ngoog.require('shaka.util.Dom');\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.Timer');\n\n\n/**\n * The text displayer plugin for the Shaka Player UI. Can also be used directly\n * by providing an appropriate container element.\n *\n * @implements {shaka.extern.TextDisplayer}\n * @final\n * @export\n */\nshaka.text.UITextDisplayer = class {\n /**\n * Constructor.\n * @param {HTMLMediaElement} video\n * @param {HTMLElement} videoContainer\n */\n constructor(video, videoContainer) {\n goog.asserts.assert(videoContainer, 'videoContainer should be valid.');\n\n if (!document.fullscreenEnabled) {\n shaka.log.alwaysWarn('Using UITextDisplayer in a browser without ' +\n 'Fullscreen API support causes subtitles to not be rendered in ' +\n 'fullscreen');\n }\n\n /** @private {boolean} */\n this.isTextVisible_ = false;\n\n /** @private {!Array.} */\n this.cues_ = [];\n\n /** @private {HTMLMediaElement} */\n this.video_ = video;\n\n /** @private {HTMLElement} */\n this.videoContainer_ = videoContainer;\n\n /** @private {?number} */\n this.aspectRatio_ = null;\n\n /** @type {HTMLElement} */\n this.textContainer_ = shaka.util.Dom.createHTMLElement('div');\n this.textContainer_.classList.add('shaka-text-container');\n\n // Set the subtitles text-centered by default.\n this.textContainer_.style.textAlign = 'center';\n\n // Set the captions in the middle horizontally by default.\n this.textContainer_.style.display = 'flex';\n this.textContainer_.style.flexDirection = 'column';\n this.textContainer_.style.alignItems = 'center';\n\n // Set the captions at the bottom by default.\n this.textContainer_.style.justifyContent = 'flex-end';\n\n this.videoContainer_.appendChild(this.textContainer_);\n\n /** @private {shaka.util.Timer} */\n this.captionsTimer_ = new shaka.util.Timer(() => {\n if (!this.video_.paused) {\n this.updateCaptions_();\n }\n }).tickEvery(/* seconds= */ 0.25);\n\n /**\n * Maps cues to cue elements. Specifically points out the wrapper element of\n * the cue (e.g. the HTML element to put nested cues inside).\n * @private {Map.}\n */\n this.currentCuesMap_ = new Map();\n\n /** @private {shaka.util.EventManager} */\n this.eventManager_ = new shaka.util.EventManager();\n\n this.eventManager_.listen(document, 'fullscreenchange', () => {\n this.updateCaptions_(/* forceUpdate= */ true);\n });\n\n this.eventManager_.listen(this.video_, 'seeking', () => {\n this.updateCaptions_(/* forceUpdate= */ true);\n });\n\n // From: https://html.spec.whatwg.org/multipage/media.html#dom-video-videowidth\n // Whenever the natural width or natural height of the video changes\n // (including, for example, because the selected video track was changed),\n // if the element's readyState attribute is not HAVE_NOTHING, the user\n // agent must queue a media element task given the media element to fire an\n // event named resize at the media element.\n this.eventManager_.listen(this.video_, 'resize', () => {\n const element = /** @type {!HTMLVideoElement} */ (this.video_);\n const width = element.videoWidth;\n const height = element.videoHeight;\n if (width && height) {\n this.aspectRatio_ = width / height;\n } else {\n this.aspectRatio_ = null;\n }\n });\n\n /** @private {ResizeObserver} */\n this.resizeObserver_ = null;\n if ('ResizeObserver' in window) {\n this.resizeObserver_ = new ResizeObserver(() => {\n this.updateCaptions_(/* forceUpdate= */ true);\n });\n this.resizeObserver_.observe(this.textContainer_);\n }\n\n /** @private {Map.} */\n this.regionElements_ = new Map();\n }\n\n\n /**\n * @override\n * @export\n */\n configure(config) {\n if (this.captionsTimer_) {\n this.captionsTimer_.tickEvery(config.captionsUpdatePeriod);\n }\n }\n\n\n /**\n * @override\n * @export\n */\n append(cues) {\n // Clone the cues list for performace optimization. We can avoid the cues\n // list growing during the comparisons for duplicate cues.\n // See: https://github.com/shaka-project/shaka-player/issues/3018\n const cuesList = [...this.cues_];\n for (const cue of shaka.text.Utils.removeDuplicates(cues)) {\n // When a VTT cue spans a segment boundary, the cue will be duplicated\n // into two segments.\n // To avoid displaying duplicate cues, if the current cue list already\n // contains the cue, skip it.\n const containsCue = cuesList.some(\n (cueInList) => shaka.text.Cue.equal(cueInList, cue));\n if (!containsCue) {\n this.cues_.push(cue);\n }\n }\n\n this.updateCaptions_();\n }\n\n\n /**\n * @override\n * @export\n */\n destroy() {\n // Return resolved promise if destroy() has been called.\n if (!this.textContainer_) {\n return Promise.resolve();\n }\n\n // Remove the text container element from the UI.\n this.videoContainer_.removeChild(this.textContainer_);\n this.textContainer_ = null;\n\n this.isTextVisible_ = false;\n this.cues_ = [];\n if (this.captionsTimer_) {\n this.captionsTimer_.stop();\n }\n\n this.currentCuesMap_.clear();\n\n // Tear-down the event manager to ensure messages stop moving around.\n if (this.eventManager_) {\n this.eventManager_.release();\n this.eventManager_ = null;\n }\n\n if (this.resizeObserver_) {\n this.resizeObserver_.disconnect();\n this.resizeObserver_ = null;\n }\n\n return Promise.resolve();\n }\n\n\n /**\n * @override\n * @export\n */\n remove(start, end) {\n // Return false if destroy() has been called.\n if (!this.textContainer_) {\n return false;\n }\n\n // Remove the cues out of the time range.\n const oldNumCues = this.cues_.length;\n this.cues_ = this.cues_.filter(\n (cue) => cue.startTime < start || cue.endTime >= end);\n // If anything was actually removed in this process, force the captions to\n // update. This makes sure that the currently-displayed cues will stop\n // displaying if removed (say, due to the user changing languages).\n const forceUpdate = oldNumCues > this.cues_.length;\n this.updateCaptions_(forceUpdate);\n\n return true;\n }\n\n\n /**\n * @override\n * @export\n */\n isTextVisible() {\n return this.isTextVisible_;\n }\n\n /**\n * @override\n * @export\n */\n setTextVisibility(on) {\n this.isTextVisible_ = on;\n this.updateCaptions_(/* forceUpdate= */ true);\n }\n\n /**\n * @override\n * @export\n */\n setTextLanguage(language) {\n if (language && language != 'und') {\n this.textContainer_.setAttribute('lang', language);\n } else {\n this.textContainer_.setAttribute('lang', '');\n }\n }\n\n /**\n * @private\n */\n isElementUnderTextContainer_(elemToCheck) {\n while (elemToCheck != null) {\n if (elemToCheck == this.textContainer_) {\n return true;\n }\n elemToCheck = elemToCheck.parentElement;\n }\n return false;\n }\n\n /**\n * @param {!Array.} cues\n * @param {!HTMLElement} container\n * @param {number} currentTime\n * @param {!Array.} parents\n * @private\n */\n updateCuesRecursive_(cues, container, currentTime, parents) {\n // Set to true if the cues have changed in some way, which will require\n // DOM changes. E.g. if a cue was added or removed.\n let updateDOM = false;\n /**\n * The elements to remove from the DOM.\n * Some of these elements may be added back again, if their corresponding\n * cue is in toPlant.\n * These elements are only removed if updateDOM is true.\n * @type {!Array.}\n */\n const toUproot = [];\n /**\n * The cues whose corresponding elements should be in the DOM.\n * Some of these might be new, some might have been displayed beforehand.\n * These will only be added if updateDOM is true.\n * @type {!Array.}\n */\n const toPlant = [];\n for (const cue of cues) {\n parents.push(cue);\n\n let cueRegistry = this.currentCuesMap_.get(cue);\n const shouldBeDisplayed =\n cue.startTime <= currentTime && cue.endTime > currentTime;\n let wrapper = cueRegistry ? cueRegistry.wrapper : null;\n\n if (cueRegistry) {\n // If the cues are replanted, all existing cues should be uprooted,\n // even ones which are going to be planted again.\n toUproot.push(cueRegistry.cueElement);\n\n // Also uproot all displayed region elements.\n if (cueRegistry.regionElement) {\n toUproot.push(cueRegistry.regionElement);\n }\n\n // If the cue should not be displayed, remove it entirely.\n if (!shouldBeDisplayed) {\n // Since something has to be removed, we will need to update the DOM.\n updateDOM = true;\n this.currentCuesMap_.delete(cue);\n cueRegistry = null;\n }\n }\n\n if (shouldBeDisplayed) {\n toPlant.push(cue);\n if (!cueRegistry) {\n // The cue has to be made!\n this.createCue_(cue, parents);\n cueRegistry = this.currentCuesMap_.get(cue);\n wrapper = cueRegistry.wrapper;\n updateDOM = true;\n } else if (!this.isElementUnderTextContainer_(wrapper)) {\n // We found that the wrapper needs to be in the DOM\n updateDOM = true;\n }\n }\n\n // Recursively check the nested cues, to see if they need to be added or\n // removed.\n // If wrapper is null, that means that the cue is not only not being\n // displayed currently, it also was not removed this tick. So it's\n // guaranteed that the children will neither need to be added nor removed.\n if (cue.nestedCues.length > 0 && wrapper) {\n this.updateCuesRecursive_(\n cue.nestedCues, wrapper, currentTime, parents);\n }\n\n const topCue = parents.pop();\n goog.asserts.assert(topCue == cue, 'Parent cues should be kept in order');\n }\n\n if (updateDOM) {\n for (const element of toUproot) {\n // NOTE: Because we uproot shared region elements, too, we might hit an\n // element here that has no parent because we've already processed it.\n if (element.parentElement) {\n element.parentElement.removeChild(element);\n }\n }\n toPlant.sort((a, b) => {\n if (a.startTime != b.startTime) {\n return a.startTime - b.startTime;\n } else {\n return a.endTime - b.endTime;\n }\n });\n for (const cue of toPlant) {\n const cueRegistry = this.currentCuesMap_.get(cue);\n goog.asserts.assert(cueRegistry, 'cueRegistry should exist.');\n if (cueRegistry.regionElement) {\n if (cueRegistry.regionElement.contains(container)) {\n cueRegistry.regionElement.removeChild(container);\n }\n container.appendChild(cueRegistry.regionElement);\n cueRegistry.regionElement.appendChild(cueRegistry.cueElement);\n } else {\n container.appendChild(cueRegistry.cueElement);\n }\n }\n }\n }\n\n /**\n * Display the current captions.\n * @param {boolean=} forceUpdate\n * @private\n */\n updateCaptions_(forceUpdate = false) {\n if (!this.textContainer_) {\n return;\n }\n\n const currentTime = this.video_.currentTime;\n if (!this.isTextVisible_ || forceUpdate) {\n // Remove child elements from all regions.\n for (const regionElement of this.regionElements_.values()) {\n shaka.util.Dom.removeAllChildren(regionElement);\n }\n // Remove all top-level elements in the text container.\n shaka.util.Dom.removeAllChildren(this.textContainer_);\n // Clear the element maps.\n this.currentCuesMap_.clear();\n this.regionElements_.clear();\n }\n if (this.isTextVisible_) {\n // Log currently attached cue elements for verification, later.\n const previousCuesMap = new Map();\n if (goog.DEBUG) {\n for (const cue of this.currentCuesMap_.keys()) {\n previousCuesMap.set(cue, this.currentCuesMap_.get(cue));\n }\n }\n\n // Update the cues.\n this.updateCuesRecursive_(\n this.cues_, this.textContainer_, currentTime, /* parents= */ []);\n\n if (goog.DEBUG) {\n // Previously, we had an issue (#2076) where cues sometimes were not\n // properly removed from the DOM. It is not clear if this issue still\n // happens, so the previous fix for it has been changed to an assert.\n for (const cue of previousCuesMap.keys()) {\n if (!this.currentCuesMap_.has(cue)) {\n // TODO: If the problem does not appear again, then we should remove\n // this assert (and the previousCuesMap code) in Shaka v4.\n const cueElement = previousCuesMap.get(cue).cueElement;\n goog.asserts.assert(\n !cueElement.parentNode, 'Cue was not properly removed!');\n }\n }\n }\n }\n }\n\n /**\n * Compute a unique internal id:\n * Regions can reuse the id but have different dimensions, we need to\n * consider those differences\n * @param {shaka.text.CueRegion} region\n * @private\n */\n generateRegionId_(region) {\n const percentageUnit = shaka.text.CueRegion.units.PERCENTAGE;\n const heightUnit = region.heightUnits == percentageUnit ? '%' : 'px';\n const viewportAnchorUnit =\n region.viewportAnchorUnits == percentageUnit ? '%' : 'px';\n const uniqueRegionId = `${region.id}_${\n region.width}x${region.height}${heightUnit}-${\n region.viewportAnchorX}x${region.viewportAnchorY}${viewportAnchorUnit}`;\n\n return uniqueRegionId;\n }\n\n /**\n * Get or create a region element corresponding to the cue region. These are\n * cached by ID.\n *\n * @param {!shaka.text.Cue} cue\n * @return {!HTMLElement}\n * @private\n */\n getRegionElement_(cue) {\n const region = cue.region;\n // from https://dvcs.w3.org/hg/text-tracks/raw-file/default/608toVTT/608toVTT.html#caption-window-size\n // if aspect ratio is 4/3, use that value, otherwise, use the 16:9 value\n const lineWidthMultiple = this.aspectRatio_ === 4/3 ? 2.5 : 1.9;\n const lineHeightMultiple = 5.33;\n\n const regionId = this.generateRegionId_(region);\n if (this.regionElements_.has(regionId)) {\n return this.regionElements_.get(regionId);\n }\n\n const regionElement = shaka.util.Dom.createHTMLElement('span');\n\n const linesUnit = shaka.text.CueRegion.units.LINES;\n const percentageUnit = shaka.text.CueRegion.units.PERCENTAGE;\n const pixelUnit = shaka.text.CueRegion.units.PX;\n let heightUnit = region.heightUnits == percentageUnit ? '%' : 'px';\n let widthUnit = region.widthUnits == percentageUnit ? '%' : 'px';\n const viewportAnchorUnit =\n region.viewportAnchorUnits == percentageUnit ? '%' : 'px';\n\n regionElement.id = 'shaka-text-region---' + regionId;\n regionElement.classList.add('shaka-text-region');\n\n regionElement.style.position = 'absolute';\n\n let regionHeight = region.height;\n let regionWidth = region.width;\n\n if (region.heightUnits === linesUnit) {\n regionHeight = region.height * lineHeightMultiple;\n heightUnit = '%';\n }\n if (region.widthUnits === linesUnit) {\n regionWidth = region.width * lineWidthMultiple;\n widthUnit = '%';\n }\n regionElement.style.height = regionHeight + heightUnit;\n regionElement.style.width = regionWidth + widthUnit;\n\n if (region.viewportAnchorUnits === linesUnit) {\n // from https://dvcs.w3.org/hg/text-tracks/raw-file/default/608toVTT/608toVTT.html#positioning-in-cea-708\n let top = region.viewportAnchorY / 75 * 100;\n const windowWidth = this.aspectRatio_ === 4/3 ? 160 : 210;\n let left = region.viewportAnchorX / windowWidth * 100;\n // adjust top and left values based on the region anchor and window size\n top -= region.regionAnchorY * regionHeight / 100;\n left -= region.regionAnchorX * regionWidth / 100;\n regionElement.style.top = top + '%';\n regionElement.style.left = left + '%';\n } else {\n regionElement.style.top = region.viewportAnchorY -\n region.regionAnchorY * regionHeight / 100 + viewportAnchorUnit;\n regionElement.style.left = region.viewportAnchorX -\n region.regionAnchorX * regionWidth / 100 + viewportAnchorUnit;\n }\n if (region.heightUnits !== pixelUnit &&\n region.widthUnits !== pixelUnit &&\n region.viewportAnchorUnits !== pixelUnit) {\n // Clip region\n const top = parseInt(regionElement.style.top.slice(0, -1), 10) || 0;\n const left = parseInt(regionElement.style.left.slice(0, -1), 10) || 0;\n const height = parseInt(regionElement.style.height.slice(0, -1), 10) || 0;\n const width = parseInt(regionElement.style.width.slice(0, -1), 10) || 0;\n const realTop = Math.max(0, Math.min(100 - height, top));\n const realLeft = Math.max(0, Math.min(100 - width, left));\n regionElement.style.top = realTop + '%';\n regionElement.style.left = realLeft + '%';\n }\n\n regionElement.style.display = 'flex';\n regionElement.style.flexDirection = 'column';\n regionElement.style.alignItems = 'center';\n\n if (cue.displayAlign == shaka.text.Cue.displayAlign.BEFORE) {\n regionElement.style.justifyContent = 'flex-start';\n } else if (cue.displayAlign == shaka.text.Cue.displayAlign.CENTER) {\n regionElement.style.justifyContent = 'center';\n } else {\n regionElement.style.justifyContent = 'flex-end';\n }\n\n this.regionElements_.set(regionId, regionElement);\n return regionElement;\n }\n\n /**\n * Creates the object for a cue.\n *\n * @param {!shaka.text.Cue} cue\n * @param {!Array.} parents\n * @private\n */\n createCue_(cue, parents) {\n const isNested = parents.length > 1;\n let type = isNested ? 'span' : 'div';\n if (cue.lineBreak) {\n type = 'br';\n }\n if (cue.rubyTag) {\n type = cue.rubyTag;\n }\n\n const needWrapper = !isNested && cue.nestedCues.length > 0;\n\n // Nested cues are inline elements. Top-level cues are block elements.\n const cueElement = shaka.util.Dom.createHTMLElement(type);\n if (type != 'br') {\n this.setCaptionStyles_(cueElement, cue, parents, needWrapper);\n }\n\n let regionElement = null;\n if (cue.region && cue.region.id) {\n regionElement = this.getRegionElement_(cue);\n }\n\n let wrapper = cueElement;\n if (needWrapper) {\n // Create a wrapper element which will serve to contain all children into\n // a single item. This ensures that nested span elements appear\n // horizontally and br elements occupy no vertical space.\n wrapper = shaka.util.Dom.createHTMLElement('span');\n wrapper.classList.add('shaka-text-wrapper');\n wrapper.style.backgroundColor = cue.backgroundColor;\n wrapper.style.lineHeight = 'normal';\n cueElement.appendChild(wrapper);\n }\n\n this.currentCuesMap_.set(cue, {cueElement, wrapper, regionElement});\n }\n\n /**\n * Compute cue position alignment\n * See https://www.w3.org/TR/webvtt1/#webvtt-cue-position-alignment\n *\n * @param {!shaka.text.Cue} cue\n * @private\n */\n computeCuePositionAlignment_(cue) {\n const Cue = shaka.text.Cue;\n const {direction, positionAlign, textAlign} = cue;\n\n if (positionAlign !== Cue.positionAlign.AUTO) {\n // Position align is not AUTO: use it\n return positionAlign;\n }\n\n // Position align is AUTO: use text align to compute its value\n\n if (textAlign === Cue.textAlign.LEFT ||\n (textAlign === Cue.textAlign.START &&\n direction === Cue.direction.HORIZONTAL_LEFT_TO_RIGHT) ||\n (textAlign === Cue.textAlign.END &&\n direction === Cue.direction.HORIZONTAL_RIGHT_TO_LEFT)) {\n return Cue.positionAlign.LEFT;\n }\n\n if (textAlign === Cue.textAlign.RIGHT ||\n (textAlign === Cue.textAlign.START &&\n direction === Cue.direction.HORIZONTAL_RIGHT_TO_LEFT) ||\n (textAlign === Cue.textAlign.END &&\n direction === Cue.direction.HORIZONTAL_LEFT_TO_RIGHT)) {\n return Cue.positionAlign.RIGHT;\n }\n\n return Cue.positionAlign.CENTER;\n }\n\n /**\n * @param {!HTMLElement} cueElement\n * @param {!shaka.text.Cue} cue\n * @param {!Array.} parents\n * @param {boolean} hasWrapper\n * @private\n */\n setCaptionStyles_(cueElement, cue, parents, hasWrapper) {\n const Cue = shaka.text.Cue;\n const inherit =\n (cb) => shaka.text.UITextDisplayer.inheritProperty_(parents, cb);\n const style = cueElement.style;\n const isLeaf = cue.nestedCues.length == 0;\n const isNested = parents.length > 1;\n\n // TODO: wrapLine is not yet supported. Lines always wrap.\n\n // White space should be preserved if emitted by the text parser. It's the\n // job of the parser to omit any whitespace that should not be displayed.\n // Using 'pre-wrap' means that whitespace is preserved even at the end of\n // the text, but that lines which overflow can still be broken.\n style.whiteSpace = 'pre-wrap';\n\n // Using 'break-spaces' would be better, as it would preserve even trailing\n // spaces, but that only shipped in Chrome 76. As of July 2020, Safari\n // still has not implemented break-spaces, and the original Chromecast will\n // never have this feature since it no longer gets firmware updates.\n // So we need to replace trailing spaces with non-breaking spaces.\n const text = cue.payload.replace(/\\s+$/g, (match) => {\n const nonBreakingSpace = '\\xa0';\n return nonBreakingSpace.repeat(match.length);\n });\n\n style.webkitTextStrokeColor = cue.textStrokeColor;\n style.webkitTextStrokeWidth = cue.textStrokeWidth;\n style.color = cue.color;\n style.direction = cue.direction;\n style.opacity = cue.opacity;\n style.paddingLeft = shaka.text.UITextDisplayer.convertLengthValue_(\n cue.linePadding, cue, this.videoContainer_);\n style.paddingRight =\n shaka.text.UITextDisplayer.convertLengthValue_(\n cue.linePadding, cue, this.videoContainer_);\n style.textCombineUpright = cue.textCombineUpright;\n style.textShadow = cue.textShadow;\n\n if (cue.backgroundImage) {\n style.backgroundImage = 'url(\\'' + cue.backgroundImage + '\\')';\n style.backgroundRepeat = 'no-repeat';\n style.backgroundSize = 'contain';\n style.backgroundPosition = 'center';\n\n if (cue.backgroundColor) {\n style.backgroundColor = cue.backgroundColor;\n }\n\n // Quoting https://www.w3.org/TR/ttml-imsc1.2/:\n // \"The width and height (in pixels) of the image resource referenced by\n // smpte:backgroundImage SHALL be equal to the width and height expressed\n // by the tts:extent attribute of the region in which the div element is\n // presented\".\n style.width = '100%';\n style.height = '100%';\n } else {\n // If we have both text and nested cues, then style everything; otherwise\n // place the text in its own so the background doesn't fill the\n // whole region.\n let elem;\n if (cue.nestedCues.length) {\n elem = cueElement;\n } else {\n elem = shaka.util.Dom.createHTMLElement('span');\n cueElement.appendChild(elem);\n }\n\n if (cue.border) {\n elem.style.border = cue.border;\n }\n if (!hasWrapper) {\n const bgColor = inherit((c) => c.backgroundColor);\n if (bgColor) {\n elem.style.backgroundColor = bgColor;\n } else if (text) {\n // If there is no background, default to a semi-transparent black.\n // Only do this for the text itself.\n elem.style.backgroundColor = 'rgba(0, 0, 0, 0.8)';\n }\n }\n if (text) {\n elem.textContent = text;\n }\n }\n\n // The displayAlign attribute specifies the vertical alignment of the\n // captions inside the text container. Before means at the top of the\n // text container, and after means at the bottom.\n if (isNested && !parents[parents.length - 1].isContainer) {\n style.display = 'inline';\n } else {\n style.display = 'flex';\n style.flexDirection = 'column';\n style.alignItems = 'center';\n if (cue.textAlign == Cue.textAlign.LEFT ||\n cue.textAlign == Cue.textAlign.START) {\n style.width = '100%';\n style.alignItems = 'start';\n } else if (cue.textAlign == Cue.textAlign.RIGHT ||\n cue.textAlign == Cue.textAlign.END) {\n style.width = '100%';\n style.alignItems = 'end';\n }\n\n if (cue.displayAlign == Cue.displayAlign.BEFORE) {\n style.justifyContent = 'flex-start';\n } else if (cue.displayAlign == Cue.displayAlign.CENTER) {\n style.justifyContent = 'center';\n } else {\n style.justifyContent = 'flex-end';\n }\n }\n\n if (!isLeaf) {\n style.margin = '0';\n }\n\n style.fontFamily = cue.fontFamily;\n style.fontWeight = cue.fontWeight.toString();\n style.fontStyle = cue.fontStyle;\n style.letterSpacing = cue.letterSpacing;\n style.fontSize = shaka.text.UITextDisplayer.convertLengthValue_(\n cue.fontSize, cue, this.videoContainer_);\n\n // The line attribute defines the positioning of the text container inside\n // the video container.\n // - The line offsets the text container from the top, the right or left of\n // the video viewport as defined by the writing direction.\n // - The value of the line is either as a number of lines, or a percentage\n // of the video viewport height or width.\n // The lineAlign is an alignment for the text container's line.\n // - The Start alignment means the text container’s top side (for horizontal\n // cues), left side (for vertical growing right), or right side (for\n // vertical growing left) is aligned at the line.\n // - The Center alignment means the text container is centered at the line\n // (to be implemented).\n // - The End Alignment means The text container’s bottom side (for\n // horizontal cues), right side (for vertical growing right), or left side\n // (for vertical growing left) is aligned at the line.\n // TODO: Implement line alignment with line number.\n // TODO: Implement lineAlignment of 'CENTER'.\n let line = cue.line;\n if (line != null) {\n let lineInterpretation = cue.lineInterpretation;\n // HACK: the current implementation of UITextDisplayer only handled\n // PERCENTAGE, so we need convert LINE_NUMBER to PERCENTAGE\n if (lineInterpretation == Cue.lineInterpretation.LINE_NUMBER) {\n lineInterpretation = Cue.lineInterpretation.PERCENTAGE;\n let maxLines = 16;\n // The maximum number of lines is different if it is a vertical video.\n if (this.aspectRatio_ && this.aspectRatio_ < 1) {\n maxLines = 32;\n }\n if (line < 0) {\n line = 100 + line / maxLines * 100;\n } else {\n line = line / maxLines * 100;\n }\n }\n if (lineInterpretation == Cue.lineInterpretation.PERCENTAGE) {\n style.position = 'absolute';\n if (cue.writingMode == Cue.writingMode.HORIZONTAL_TOP_TO_BOTTOM) {\n style.width = '100%';\n if (cue.lineAlign == Cue.lineAlign.START) {\n style.top = line + '%';\n } else if (cue.lineAlign == Cue.lineAlign.END) {\n style.bottom = (100 - line) + '%';\n }\n } else if (cue.writingMode == Cue.writingMode.VERTICAL_LEFT_TO_RIGHT) {\n style.height = '100%';\n if (cue.lineAlign == Cue.lineAlign.START) {\n style.left = line + '%';\n } else if (cue.lineAlign == Cue.lineAlign.END) {\n style.right = (100 - line) + '%';\n }\n } else {\n style.height = '100%';\n if (cue.lineAlign == Cue.lineAlign.START) {\n style.right = line + '%';\n } else if (cue.lineAlign == Cue.lineAlign.END) {\n style.left = (100 - line) + '%';\n }\n }\n }\n }\n\n style.lineHeight = cue.lineHeight;\n\n // The positionAlign attribute is an alignment for the text container in\n // the dimension of the writing direction.\n const computedPositionAlign = this.computeCuePositionAlignment_(cue);\n if (computedPositionAlign == Cue.positionAlign.LEFT) {\n style.cssFloat = 'left';\n if (cue.position !== null) {\n style.position = 'absolute';\n if (cue.writingMode == Cue.writingMode.HORIZONTAL_TOP_TO_BOTTOM) {\n style.left = cue.position + '%';\n style.width = 'auto';\n } else {\n style.top = cue.position + '%';\n }\n }\n } else if (computedPositionAlign == Cue.positionAlign.RIGHT) {\n style.cssFloat = 'right';\n if (cue.position !== null) {\n style.position = 'absolute';\n if (cue.writingMode == Cue.writingMode.HORIZONTAL_TOP_TO_BOTTOM) {\n style.right = (100 - cue.position) + '%';\n style.width = 'auto';\n } else {\n style.bottom = cue.position + '%';\n }\n }\n } else {\n if (cue.position !== null && cue.position != 50) {\n style.position = 'absolute';\n if (cue.writingMode == Cue.writingMode.HORIZONTAL_TOP_TO_BOTTOM) {\n style.left = cue.position + '%';\n style.width = 'auto';\n } else {\n style.top = cue.position + '%';\n }\n }\n }\n\n style.textAlign = cue.textAlign;\n style.textDecoration = cue.textDecoration.join(' ');\n style.writingMode = cue.writingMode;\n\n // Old versions of Chromium, which may be found in certain versions of Tizen\n // and WebOS, may require the prefixed version: webkitWritingMode.\n // https://caniuse.com/css-writing-mode\n // However, testing shows that Tizen 3, at least, has a 'writingMode'\n // property, but the setter for it does nothing. Therefore we need to\n // detect that and fall back to the prefixed version in this case, too.\n if (!('writingMode' in document.documentElement.style) ||\n style.writingMode != cue.writingMode) {\n // Note that here we do not bother to check for webkitWritingMode support\n // explicitly. We try the unprefixed version, then fall back to the\n // prefixed version unconditionally.\n style.webkitWritingMode = cue.writingMode;\n }\n\n // The size is a number giving the size of the text container, to be\n // interpreted as a percentage of the video, as defined by the writing\n // direction.\n if (cue.size) {\n if (cue.writingMode == Cue.writingMode.HORIZONTAL_TOP_TO_BOTTOM) {\n style.width = cue.size + '%';\n } else {\n style.height = cue.size + '%';\n }\n }\n }\n\n /**\n * Returns info about provided lengthValue\n * @example 100px => { value: 100, unit: 'px' }\n * @param {?string} lengthValue\n *\n * @return {?{ value: number, unit: string }}\n * @private\n */\n static getLengthValueInfo_(lengthValue) {\n const matches = new RegExp(/(\\d*\\.?\\d+)([a-z]+|%+)/).exec(lengthValue);\n\n if (!matches) {\n return null;\n }\n\n return {\n value: Number(matches[1]),\n unit: matches[2],\n };\n }\n\n /**\n * Converts length value to an absolute value in pixels.\n * If lengthValue is already an absolute value it will not\n * be modified. Relative lengthValue will be converted to an\n * absolute value in pixels based on Computed Cell Size\n *\n * @param {string} lengthValue\n * @param {!shaka.text.Cue} cue\n * @param {HTMLElement} videoContainer\n * @return {string}\n * @private\n */\n static convertLengthValue_(lengthValue, cue, videoContainer) {\n const lengthValueInfo =\n shaka.text.UITextDisplayer.getLengthValueInfo_(lengthValue);\n\n if (!lengthValueInfo) {\n return lengthValue;\n }\n\n const {unit, value} = lengthValueInfo;\n\n switch (unit) {\n case '%':\n return shaka.text.UITextDisplayer.getAbsoluteLengthInPixels_(\n value / 100, cue, videoContainer);\n case 'c':\n return shaka.text.UITextDisplayer.getAbsoluteLengthInPixels_(\n value, cue, videoContainer);\n default:\n return lengthValue;\n }\n }\n\n /**\n * Returns computed absolute length value in pixels based on cell\n * and a video container size\n * @param {number} value\n * @param {!shaka.text.Cue} cue\n * @param {HTMLElement} videoContainer\n * @return {string}\n *\n * @private\n * */\n static getAbsoluteLengthInPixels_(value, cue, videoContainer) {\n const containerHeight = videoContainer.clientHeight;\n\n return (containerHeight * value / cue.cellResolution.rows) + 'px';\n }\n\n /**\n * Inherits a property from the parent Cue elements. If the value is falsy,\n * it is assumed to be inherited from the parent. This returns null if the\n * value isn't found.\n *\n * @param {!Array.} parents\n * @param {function(!shaka.text.Cue):?T} cb\n * @return {?T}\n * @template T\n * @private\n */\n static inheritProperty_(parents, cb) {\n for (let i = parents.length - 1; i >= 0; i--) {\n const val = cb(parents[i]);\n if (val || val === 0) {\n return val;\n }\n }\n return null;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.CmcdManager');\n\ngoog.require('goog.Uri');\ngoog.require('shaka.log');\ngoog.require('shaka.net.NetworkingEngine');\ngoog.require('shaka.util.ArrayUtils');\n\ngoog.requireType('shaka.media.SegmentReference');\n\n/**\n * @summary\n * A CmcdManager maintains CMCD state as well as a collection of utility\n * functions.\n */\nshaka.util.CmcdManager = class {\n /**\n * @param {shaka.util.CmcdManager.PlayerInterface} playerInterface\n * @param {shaka.extern.CmcdConfiguration} config\n */\n constructor(playerInterface, config) {\n /** @private {shaka.util.CmcdManager.PlayerInterface} */\n this.playerInterface_ = playerInterface;\n\n /** @private {?shaka.extern.CmcdConfiguration} */\n this.config_ = config;\n\n /**\n * Streaming format\n *\n * @private {(shaka.util.CmcdManager.StreamingFormat|undefined)}\n */\n this.sf_ = undefined;\n\n /**\n * @private {boolean}\n */\n this.playbackStarted_ = false;\n\n /**\n * @private {boolean}\n */\n this.buffering_ = true;\n\n /**\n * @private {boolean}\n */\n this.starved_ = false;\n\n /**\n * @private {boolean}\n */\n this.lowLatency_ = false;\n }\n\n /**\n * Called by the Player to provide an updated configuration any time it\n * changes.\n *\n * @param {shaka.extern.CmcdConfiguration} config\n */\n configure(config) {\n this.config_ = config;\n }\n\n\n /**\n * Resets the CmcdManager.\n */\n reset() {\n this.playbackStarted_ = false;\n this.buffering_ = true;\n this.starved_ = false;\n this.lowLatency_ = false;\n }\n\n /**\n * Set the buffering state\n *\n * @param {boolean} buffering\n */\n setBuffering(buffering) {\n if (!buffering && !this.playbackStarted_) {\n this.playbackStarted_ = true;\n }\n\n if (this.playbackStarted_ && buffering) {\n this.starved_ = true;\n }\n\n this.buffering_ = buffering;\n }\n\n /**\n * Set the low latency\n *\n * @param {boolean} lowLatency\n */\n setLowLatency(lowLatency) {\n this.lowLatency_ = lowLatency;\n\n const StreamingFormat = shaka.util.CmcdManager.StreamingFormat;\n if (this.lowLatency_) {\n if (this.sf_ == StreamingFormat.DASH) {\n this.sf_ = StreamingFormat.LOW_LATENCY_DASH;\n } else if (this.sf_ == StreamingFormat.HLS) {\n this.sf_ = StreamingFormat.LOW_LATENCY_HLS;\n }\n } else {\n if (this.sf_ == StreamingFormat.LOW_LATENCY_DASH) {\n this.sf_ = StreamingFormat.DASH;\n } else if (this.sf_ == StreamingFormat.LOW_LATENCY_HLS) {\n this.sf_ = StreamingFormat.HLS;\n }\n }\n }\n\n /**\n * Apply CMCD data to a request.\n *\n * @param {!shaka.net.NetworkingEngine.RequestType} type\n * The request type\n * @param {!shaka.extern.Request} request\n * The request to apply CMCD data to\n * @param {shaka.extern.RequestContext=} context\n * The request context\n */\n applyData(type, request, context = {}) {\n if (!this.config_.enabled) {\n return;\n }\n\n if (request.method === 'HEAD') {\n this.apply_(request);\n return;\n }\n\n const RequestType = shaka.net.NetworkingEngine.RequestType;\n const ObjectType = shaka.util.CmcdManager.ObjectType;\n\n switch (type) {\n case RequestType.MANIFEST:\n this.applyManifestData(request, context);\n break;\n\n case RequestType.SEGMENT:\n this.applySegmentData(request, context);\n break;\n\n case RequestType.LICENSE:\n case RequestType.SERVER_CERTIFICATE:\n case RequestType.KEY:\n this.apply_(request, {ot: ObjectType.KEY});\n break;\n\n case RequestType.TIMING:\n this.apply_(request, {ot: ObjectType.OTHER});\n break;\n }\n }\n\n /**\n * Apply CMCD data to a manifest request.\n *\n * @param {!shaka.extern.Request} request\n * The request to apply CMCD data to\n * @param {shaka.extern.RequestContext} context\n * The request context\n */\n applyManifestData(request, context) {\n try {\n if (!this.config_.enabled) {\n return;\n }\n\n if (context.type) {\n this.sf_ = this.getStreamFormat_(context.type);\n }\n\n this.apply_(request, {\n ot: shaka.util.CmcdManager.ObjectType.MANIFEST,\n su: !this.playbackStarted_,\n });\n } catch (error) {\n shaka.log.warnOnce('CMCD_MANIFEST_ERROR',\n 'Could not generate manifest CMCD data.', error);\n }\n }\n\n /**\n * Apply CMCD data to a segment request\n *\n * @param {!shaka.extern.Request} request\n * @param {shaka.extern.RequestContext} context\n * The request context\n */\n applySegmentData(request, context) {\n try {\n if (!this.config_.enabled) {\n return;\n }\n\n const segment = context.segment;\n\n let duration = 0;\n if (segment) {\n duration = segment.endTime - segment.startTime;\n }\n\n const data = {\n d: duration * 1000,\n st: this.getStreamType_(),\n };\n\n data.ot = this.getObjectType_(context);\n\n const ObjectType = shaka.util.CmcdManager.ObjectType;\n const isMedia = data.ot === ObjectType.VIDEO ||\n data.ot === ObjectType.AUDIO ||\n data.ot === ObjectType.MUXED ||\n data.ot === ObjectType.TIMED_TEXT;\n\n const stream = context.stream;\n if (stream) {\n const playbackRate = this.playerInterface_.getPlaybackRate();\n if (isMedia) {\n data.bl = this.getBufferLength_(stream.type);\n if (data.ot !== ObjectType.TIMED_TEXT) {\n const remainingBufferLength =\n this.getRemainingBufferLength_(stream.type);\n if (playbackRate) {\n data.dl = remainingBufferLength / Math.abs(playbackRate);\n } else {\n data.dl = remainingBufferLength;\n }\n }\n }\n\n if (stream.bandwidth) {\n data.br = stream.bandwidth / 1000;\n }\n\n if (stream.segmentIndex && segment) {\n const reverse = playbackRate < 0;\n const iterator = stream.segmentIndex.getIteratorForTime(\n segment.endTime, /* allowNonIndepedent= */ true, reverse);\n if (iterator) {\n const nextSegment = iterator.next().value;\n if (nextSegment && nextSegment != segment) {\n if (!shaka.util.ArrayUtils.equal(\n segment.getUris(), nextSegment.getUris())) {\n data.nor = this.urlToRelativePath_(\n nextSegment.getUris()[0], request.uris[0]);\n }\n if ((nextSegment.startByte || nextSegment.endByte) &&\n (segment.startByte != nextSegment.startByte ||\n segment.endByte != nextSegment.endByte)) {\n let range = nextSegment.startByte + '-';\n if (nextSegment.endByte) {\n range += nextSegment.endByte;\n }\n data.nrr = range;\n }\n }\n }\n const rtp = this.calculateRtp_(stream, segment);\n if (!isNaN(rtp)) {\n data.rtp = rtp;\n }\n }\n }\n\n if (isMedia && data.ot !== ObjectType.TIMED_TEXT) {\n data.tb = this.getTopBandwidth_(data.ot) / 1000;\n }\n\n this.apply_(request, data);\n } catch (error) {\n shaka.log.warnOnce('CMCD_SEGMENT_ERROR',\n 'Could not generate segment CMCD data.', error);\n }\n }\n\n /**\n * Apply CMCD data to a text request\n *\n * @param {!shaka.extern.Request} request\n */\n applyTextData(request) {\n try {\n if (!this.config_.enabled) {\n return;\n }\n\n this.apply_(request, {\n ot: shaka.util.CmcdManager.ObjectType.CAPTION,\n su: true,\n });\n } catch (error) {\n shaka.log.warnOnce('CMCD_TEXT_ERROR',\n 'Could not generate text CMCD data.', error);\n }\n }\n\n /**\n * Apply CMCD data to streams loaded via src=.\n *\n * @param {string} uri\n * @param {string} mimeType\n * @return {string}\n */\n appendSrcData(uri, mimeType) {\n try {\n if (!this.config_.enabled) {\n return uri;\n }\n\n const data = this.createData_();\n data.ot = this.getObjectTypeFromMimeType_(mimeType);\n data.su = true;\n\n const query = shaka.util.CmcdManager.toQuery(data);\n\n return shaka.util.CmcdManager.appendQueryToUri(uri, query);\n } catch (error) {\n shaka.log.warnOnce('CMCD_SRC_ERROR',\n 'Could not generate src CMCD data.', error);\n return uri;\n }\n }\n\n /**\n * Apply CMCD data to side car text track uri.\n *\n * @param {string} uri\n * @return {string}\n */\n appendTextTrackData(uri) {\n try {\n if (!this.config_.enabled) {\n return uri;\n }\n\n const data = this.createData_();\n data.ot = shaka.util.CmcdManager.ObjectType.CAPTION;\n data.su = true;\n\n const query = shaka.util.CmcdManager.toQuery(data);\n\n return shaka.util.CmcdManager.appendQueryToUri(uri, query);\n } catch (error) {\n shaka.log.warnOnce('CMCD_TEXT_TRACK_ERROR',\n 'Could not generate text track CMCD data.', error);\n return uri;\n }\n }\n\n /**\n * Create baseline CMCD data\n *\n * @return {CmcdData}\n * @private\n */\n createData_() {\n if (!this.config_.sessionId) {\n this.config_.sessionId = window.crypto.randomUUID();\n }\n return {\n v: shaka.util.CmcdManager.Version,\n sf: this.sf_,\n sid: this.config_.sessionId,\n cid: this.config_.contentId,\n mtp: this.playerInterface_.getBandwidthEstimate() / 1000,\n };\n }\n\n /**\n * Apply CMCD data to a request.\n *\n * @param {!shaka.extern.Request} request The request to apply CMCD data to\n * @param {!CmcdData} data The data object\n * @param {boolean} useHeaders Send data via request headers\n * @private\n */\n apply_(request, data = {}, useHeaders = this.config_.useHeaders) {\n if (!this.config_.enabled) {\n return;\n }\n\n // apply baseline data\n Object.assign(data, this.createData_());\n\n data.pr = this.playerInterface_.getPlaybackRate();\n\n const isVideo = data.ot === shaka.util.CmcdManager.ObjectType.VIDEO ||\n data.ot === shaka.util.CmcdManager.ObjectType.MUXED;\n\n if (this.starved_ && isVideo) {\n data.bs = true;\n data.su = true;\n this.starved_ = false;\n }\n\n if (data.su == null) {\n data.su = this.buffering_;\n }\n\n const output = this.filterKeys_(data);\n\n if (useHeaders) {\n const headers = shaka.util.CmcdManager.toHeaders(output);\n if (!Object.keys(headers).length) {\n return;\n }\n\n Object.assign(request.headers, headers);\n } else {\n const query = shaka.util.CmcdManager.toQuery(output);\n if (!query) {\n return;\n }\n\n request.uris = request.uris.map((uri) => {\n return shaka.util.CmcdManager.appendQueryToUri(uri, query);\n });\n }\n }\n\n /**\n * Filter the CMCD data object to include only the keys specified in the\n * configuration.\n *\n * @param {CmcdData} data\n * @return {CmcdData}\n * @private\n */\n filterKeys_(data) {\n const includeKeys = this.config_.includeKeys;\n\n if (!includeKeys.length) {\n return data;\n }\n\n return Object.keys(data).reduce((acc, key) => {\n if (includeKeys.includes(key)) {\n acc[key] = data[key];\n }\n return acc;\n }, {});\n }\n\n /**\n * The CMCD object type.\n *\n * @param {shaka.extern.RequestContext} context\n * The request context\n * @private\n */\n getObjectType_(context) {\n if (context.type ===\n shaka.net.NetworkingEngine.AdvancedRequestType.INIT_SEGMENT) {\n return shaka.util.CmcdManager.ObjectType.INIT;\n }\n\n const stream = context.stream;\n\n if (!stream) {\n return undefined;\n }\n\n const type = stream.type;\n\n if (type == 'video') {\n if (stream.codecs && stream.codecs.includes(',')) {\n return shaka.util.CmcdManager.ObjectType.MUXED;\n }\n return shaka.util.CmcdManager.ObjectType.VIDEO;\n }\n\n if (type == 'audio') {\n return shaka.util.CmcdManager.ObjectType.AUDIO;\n }\n\n if (type == 'text') {\n if (stream.mimeType === 'application/mp4') {\n return shaka.util.CmcdManager.ObjectType.TIMED_TEXT;\n }\n return shaka.util.CmcdManager.ObjectType.CAPTION;\n }\n\n return undefined;\n }\n\n /**\n * The CMCD object type from mimeType.\n *\n * @param {!string} mimeType\n * @return {(shaka.util.CmcdManager.ObjectType|undefined)}\n * @private\n */\n getObjectTypeFromMimeType_(mimeType) {\n switch (mimeType.toLowerCase()) {\n case 'audio/mp4':\n case 'audio/webm':\n case 'audio/ogg':\n case 'audio/mpeg':\n case 'audio/aac':\n case 'audio/flac':\n case 'audio/wav':\n return shaka.util.CmcdManager.ObjectType.AUDIO;\n\n case 'video/webm':\n case 'video/mp4':\n case 'video/mpeg':\n case 'video/mp2t':\n return shaka.util.CmcdManager.ObjectType.MUXED;\n\n case 'application/x-mpegurl':\n case 'application/vnd.apple.mpegurl':\n case 'application/dash+xml':\n case 'video/vnd.mpeg.dash.mpd':\n case 'application/vnd.ms-sstr+xml':\n return shaka.util.CmcdManager.ObjectType.MANIFEST;\n\n default:\n return undefined;\n }\n }\n\n /**\n * Get the buffer length for a media type in milliseconds\n *\n * @param {string} type\n * @return {number}\n * @private\n */\n getBufferLength_(type) {\n const ranges = this.playerInterface_.getBufferedInfo()[type];\n\n if (!ranges.length) {\n return NaN;\n }\n\n const start = this.playerInterface_.getCurrentTime();\n const range = ranges.find((r) => r.start <= start && r.end >= start);\n\n if (!range) {\n return NaN;\n }\n\n return (range.end - start) * 1000;\n }\n\n /**\n * Get the remaining buffer length for a media type in milliseconds\n *\n * @param {string} type\n * @return {number}\n * @private\n */\n getRemainingBufferLength_(type) {\n const ranges = this.playerInterface_.getBufferedInfo()[type];\n\n if (!ranges.length) {\n return 0;\n }\n\n const start = this.playerInterface_.getCurrentTime();\n const range = ranges.find((r) => r.start <= start && r.end >= start);\n\n if (!range) {\n return 0;\n }\n\n return (range.end - start) * 1000;\n }\n\n /**\n * Constructs a relative path from a URL\n *\n * @param {string} url\n * @param {string} base\n * @return {string}\n * @private\n */\n urlToRelativePath_(url, base) {\n const to = new URL(url);\n const from = new URL(base);\n\n if (to.origin !== from.origin) {\n return url;\n }\n\n const toPath = to.pathname.split('/').slice(1);\n const fromPath = from.pathname.split('/').slice(1, -1);\n\n // remove common parents\n while (toPath[0] === fromPath[0]) {\n toPath.shift();\n fromPath.shift();\n }\n\n // add back paths\n while (fromPath.length) {\n fromPath.shift();\n toPath.unshift('..');\n }\n\n return toPath.join('/');\n }\n\n /**\n * Calculate requested maximun throughput\n *\n * @param {shaka.extern.Stream} stream\n * @param {shaka.media.SegmentReference} segment\n * @return {number}\n * @private\n */\n calculateRtp_(stream, segment) {\n const playbackRate = this.playerInterface_.getPlaybackRate() || 1;\n const currentBufferLevel =\n this.getRemainingBufferLength_(stream.type) || 500;\n const bandwidth = stream.bandwidth;\n if (!bandwidth) {\n return NaN;\n }\n const segmentDuration = segment.endTime - segment.startTime;\n // Calculate file size in kilobits\n const segmentSize = bandwidth * segmentDuration / 1000;\n // Calculate time available to load file in seconds\n const timeToLoad = (currentBufferLevel / playbackRate) / 1000;\n // Calculate the exact bandwidth required\n const minBandwidth = segmentSize / timeToLoad;\n // Include a safety buffer\n return minBandwidth * this.config_.rtpSafetyFactor;\n }\n\n /**\n * Get the stream format\n *\n * @param {shaka.net.NetworkingEngine.AdvancedRequestType} type\n * The request's advanced type\n * @return {(shaka.util.CmcdManager.StreamingFormat|undefined)}\n * @private\n */\n getStreamFormat_(type) {\n const AdvancedRequestType = shaka.net.NetworkingEngine.AdvancedRequestType;\n\n switch (type) {\n case AdvancedRequestType.MPD:\n if (this.lowLatency_) {\n return shaka.util.CmcdManager.StreamingFormat.LOW_LATENCY_DASH;\n }\n return shaka.util.CmcdManager.StreamingFormat.DASH;\n\n case AdvancedRequestType.MASTER_PLAYLIST:\n case AdvancedRequestType.MEDIA_PLAYLIST:\n if (this.lowLatency_) {\n return shaka.util.CmcdManager.StreamingFormat.LOW_LATENCY_HLS;\n }\n return shaka.util.CmcdManager.StreamingFormat.HLS;\n\n case AdvancedRequestType.MSS:\n return shaka.util.CmcdManager.StreamingFormat.SMOOTH;\n }\n\n return undefined;\n }\n\n /**\n * Get the stream type\n *\n * @return {shaka.util.CmcdManager.StreamType}\n * @private\n */\n getStreamType_() {\n const isLive = this.playerInterface_.isLive();\n if (isLive) {\n return shaka.util.CmcdManager.StreamType.LIVE;\n } else {\n return shaka.util.CmcdManager.StreamType.VOD;\n }\n }\n\n /**\n * Get the highest bandwidth for a given type.\n *\n * @param {string} type\n * @return {number}\n * @private\n */\n getTopBandwidth_(type) {\n const variants = this.playerInterface_.getVariantTracks();\n if (!variants.length) {\n return NaN;\n }\n\n let top = variants[0];\n\n for (const variant of variants) {\n if (variant.type === 'variant' && variant.bandwidth > top.bandwidth) {\n top = variant;\n }\n }\n\n const ObjectType = shaka.util.CmcdManager.ObjectType;\n\n switch (type) {\n case ObjectType.VIDEO:\n return top.videoBandwidth || NaN;\n\n case ObjectType.AUDIO:\n return top.audioBandwidth || NaN;\n\n default:\n return top.bandwidth;\n }\n }\n\n /**\n * Serialize a CMCD data object according to the rules defined in the\n * section 3.2 of\n * [CTA-5004](https://cdn.cta.tech/cta/media/media/resources/standards/pdfs/cta-5004-final.pdf).\n *\n * @param {CmcdData} data The CMCD data object\n * @return {string}\n */\n static serialize(data) {\n const results = [];\n const isValid = (value) =>\n !Number.isNaN(value) && value != null && value !== '' && value !== false;\n const toRounded = (value) => Math.round(value);\n const toHundred = (value) => toRounded(value / 100) * 100;\n const toUrlSafe = (value) => encodeURIComponent(value);\n const formatters = {\n br: toRounded,\n d: toRounded,\n bl: toHundred,\n dl: toHundred,\n mtp: toHundred,\n nor: toUrlSafe,\n rtp: toHundred,\n tb: toRounded,\n };\n\n const keys = Object.keys(data || {}).sort();\n\n for (const key of keys) {\n let value = data[key];\n\n // ignore invalid values\n if (!isValid(value)) {\n continue;\n }\n\n // Version should only be reported if not equal to 1.\n if (key === 'v' && value === 1) {\n continue;\n }\n\n // Playback rate should only be sent if not equal to 1.\n if (key == 'pr' && value === 1) {\n continue;\n }\n\n // Certain values require special formatting\n const formatter = formatters[key];\n if (formatter) {\n value = formatter(value);\n }\n\n // Serialize the key/value pair\n const type = typeof value;\n let result;\n\n if (type === 'string' && key !== 'ot' && key !== 'sf' && key !== 'st') {\n result = `${key}=${JSON.stringify(value)}`;\n } else if (type === 'boolean') {\n result = key;\n } else if (type === 'symbol') {\n result = `${key}=${value.description}`;\n } else {\n result = `${key}=${value}`;\n }\n\n results.push(result);\n }\n\n return results.join(',');\n }\n\n /**\n * Convert a CMCD data object to request headers according to the rules\n * defined in the section 2.1 and 3.2 of\n * [CTA-5004](https://cdn.cta.tech/cta/media/media/resources/standards/pdfs/cta-5004-final.pdf).\n *\n * @param {CmcdData} data The CMCD data object\n * @return {!Object}\n */\n static toHeaders(data) {\n const keys = Object.keys(data);\n const headers = {};\n const headerNames = ['Object', 'Request', 'Session', 'Status'];\n const headerGroups = [{}, {}, {}, {}];\n const headerMap = {\n br: 0, d: 0, ot: 0, tb: 0,\n bl: 1, dl: 1, mtp: 1, nor: 1, nrr: 1, su: 1,\n cid: 2, pr: 2, sf: 2, sid: 2, st: 2, v: 2,\n bs: 3, rtp: 3,\n };\n\n for (const key of keys) {\n // Unmapped fields are mapped to the Request header\n const index = (headerMap[key] != null) ? headerMap[key] : 1;\n headerGroups[index][key] = data[key];\n }\n\n for (let i = 0; i < headerGroups.length; i++) {\n const value = shaka.util.CmcdManager.serialize(headerGroups[i]);\n if (value) {\n headers[`CMCD-${headerNames[i]}`] = value;\n }\n }\n\n return headers;\n }\n\n /**\n * Convert a CMCD data object to query args according to the rules\n * defined in the section 2.2 and 3.2 of\n * [CTA-5004](https://cdn.cta.tech/cta/media/media/resources/standards/pdfs/cta-5004-final.pdf).\n *\n * @param {CmcdData} data The CMCD data object\n * @return {string}\n */\n static toQuery(data) {\n return shaka.util.CmcdManager.serialize(data);\n }\n\n /**\n * Append query args to a uri.\n *\n * @param {string} uri\n * @param {string} query\n * @return {string}\n */\n static appendQueryToUri(uri, query) {\n if (!query) {\n return uri;\n }\n\n if (uri.includes('offline:')) {\n return uri;\n }\n\n const url = new goog.Uri(uri);\n url.getQueryData().set('CMCD', query);\n return url.toString();\n }\n};\n\n\n/**\n * @typedef {{\n * getBandwidthEstimate: function():number,\n * getBufferedInfo: function():shaka.extern.BufferedInfo,\n * getCurrentTime: function():number,\n * getPlaybackRate: function():number,\n * getVariantTracks: function():Array.,\n * isLive: function():boolean\n * }}\n *\n * @property {function():number} getBandwidthEstimate\n * Get the estimated bandwidth in bits per second.\n * @property {function():shaka.extern.BufferedInfo} getBufferedInfo\n * Get information about what the player has buffered.\n * @property {function():number} getCurrentTime\n * Get the current time\n * @property {function():number} getPlaybackRate\n * Get the playback rate\n * @property {function():Array.} getVariantTracks\n * Get the variant tracks\n * @property {function():boolean} isLive\n * Get if the player is playing live content.\n */\nshaka.util.CmcdManager.PlayerInterface;\n\n\n/**\n * @enum {string}\n */\nshaka.util.CmcdManager.ObjectType = {\n MANIFEST: 'm',\n AUDIO: 'a',\n VIDEO: 'v',\n MUXED: 'av',\n INIT: 'i',\n CAPTION: 'c',\n TIMED_TEXT: 'tt',\n KEY: 'k',\n OTHER: 'o',\n};\n\n\n/**\n * @enum {string}\n */\nshaka.util.CmcdManager.StreamType = {\n VOD: 'v',\n LIVE: 'l',\n};\n\n\n/**\n * @enum {string}\n * @export\n */\nshaka.util.CmcdManager.StreamingFormat = {\n DASH: 'd',\n LOW_LATENCY_DASH: 'ld',\n HLS: 'h',\n LOW_LATENCY_HLS: 'lh',\n SMOOTH: 's',\n OTHER: 'o',\n};\n\n\n/**\n * The CMCD spec version\n * @const {number}\n */\nshaka.util.CmcdManager.Version = 1;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.text.WebVttGenerator');\n\ngoog.require('shaka.text.Cue');\ngoog.require('shaka.text.Utils');\n\n\n/**\n * @summary Manage the conversion to WebVTT.\n * @export\n */\nshaka.text.WebVttGenerator = class {\n /**\n * @param {!Array.} cues\n * @param {!Array.} adCuePoints\n * @return {string}\n */\n static convert(cues, adCuePoints) {\n const webvttTimeString = (time) => {\n let newTime = time;\n for (const adCuePoint of adCuePoints) {\n if (adCuePoint.end && adCuePoint.start < time) {\n const offset = adCuePoint.end - adCuePoint.start;\n newTime += offset;\n }\n }\n const hours = Math.floor(newTime / 3600);\n const minutes = Math.floor(newTime / 60 % 60);\n const seconds = Math.floor(newTime % 60);\n const milliseconds = Math.floor(newTime * 1000 % 1000);\n return (hours < 10 ? '0' : '') + hours + ':' +\n (minutes < 10 ? '0' : '') + minutes + ':' +\n (seconds < 10 ? '0' : '') + seconds + '.' +\n (milliseconds < 100 ? (milliseconds < 10 ? '00' : '0') : '') +\n milliseconds;\n };\n\n const flattenedCues = shaka.text.Utils.getCuesToFlatten(cues);\n\n let webvttString = 'WEBVTT\\n\\n';\n for (const cue of flattenedCues) {\n const webvttSettings = (cue) => {\n const settings = [];\n const Cue = shaka.text.Cue;\n switch (cue.textAlign) {\n case Cue.textAlign.LEFT:\n settings.push('align:left');\n break;\n case Cue.textAlign.RIGHT:\n settings.push('align:right');\n break;\n case Cue.textAlign.CENTER:\n settings.push('align:middle');\n break;\n case Cue.textAlign.START:\n settings.push('align:start');\n break;\n case Cue.textAlign.END:\n settings.push('align:end');\n break;\n }\n switch (cue.writingMode) {\n case Cue.writingMode.VERTICAL_LEFT_TO_RIGHT:\n settings.push('vertical:lr');\n break;\n case Cue.writingMode.VERTICAL_RIGHT_TO_LEFT:\n settings.push('vertical:rl');\n break;\n }\n\n if (settings.length) {\n return ' ' + settings.join(' ');\n }\n return '';\n };\n webvttString += webvttTimeString(cue.startTime) + ' --> ' +\n webvttTimeString(cue.endTime) + webvttSettings(cue) + '\\n';\n webvttString += cue.payload + '\\n\\n';\n }\n return webvttString;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.CmsdManager');\n\ngoog.require('shaka.log');\n\n\n/**\n * @summary\n * A CmsdManager maintains CMSD state as well as a collection of utility\n * functions.\n * @export\n */\nshaka.util.CmsdManager = class {\n /**\n * @param {shaka.extern.CmsdConfiguration} config\n */\n constructor(config) {\n /** @private {shaka.extern.CmsdConfiguration} */\n this.config_ = config;\n\n /** @private {?Map.} */\n this.staticParams_ = null;\n\n /** @private {?Map.} */\n this.dynamicParams_ = null;\n }\n\n /**\n * Called by the Player to provide an updated configuration any time it\n * changes.\n *\n * @param {shaka.extern.CmsdConfiguration} config\n */\n configure(config) {\n this.config_ = config;\n }\n\n\n /**\n * Resets the CmsdManager.\n */\n reset() {\n this.staticParams_ = null;\n this.dynamicParams_ = null;\n }\n\n /**\n * Called by the Player to provide the headers of the latest request.\n *\n * @param {!Object.} headers\n */\n processHeaders(headers) {\n if (!this.config_.enabled) {\n return;\n }\n const CmsdManager = shaka.util.CmsdManager;\n const cmsdStatic = headers[CmsdManager.CMSD_STATIC_HEADER_NAME_];\n if (cmsdStatic) {\n const staticParams = this.parseCMSDStatic_(cmsdStatic);\n if (staticParams) {\n this.staticParams_ = staticParams;\n }\n }\n const cmsdDynamic = headers[CmsdManager.CMSD_DYNAMIC_HEADER_NAME_];\n if (cmsdDynamic) {\n const dynamicParams = this.parseCMSDDynamic_(cmsdDynamic);\n if (dynamicParams) {\n this.dynamicParams_ = dynamicParams;\n }\n }\n }\n\n /**\n * Returns the max bitrate in bits per second. If there is no max bitrate or\n * it's not enabled, it returns null.\n *\n * @return {?number}\n * @export\n */\n getMaxBitrate() {\n const key = shaka.util.CmsdManager.KEYS_.MAX_SUGGESTED_BITRATE;\n if (!this.config_.enabled || !this.config_.applyMaximumSuggestedBitrate ||\n !this.dynamicParams_ || !this.dynamicParams_.has(key)) {\n return null;\n }\n return /** @type {number} */(this.dynamicParams_.get(key)) * 1000;\n }\n\n /**\n * Returns the estimated throughput in bits per second. If there is no\n * estimated throughput or it's not enabled, it returns null.\n *\n * @return {?number}\n * @export\n */\n getEstimatedThroughput() {\n const key = shaka.util.CmsdManager.KEYS_.ESTIMATED_THROUGHPUT;\n if (!this.config_.enabled || !this.dynamicParams_ ||\n !this.dynamicParams_.has(key)) {\n return null;\n }\n return /** @type {number} */(this.dynamicParams_.get(key)) * 1000;\n }\n\n /**\n * Returns the response delay in milliseconds. If there is no response delay\n * or it's not enabled, it returns null.\n *\n * @return {?number}\n * @export\n */\n getResponseDelay() {\n const key = shaka.util.CmsdManager.KEYS_.RESPONSE_DELAY;\n if (!this.config_.enabled || !this.dynamicParams_ ||\n !this.dynamicParams_.has(key)) {\n return null;\n }\n return /** @type {number} */(this.dynamicParams_.get(key));\n }\n\n /**\n * Returns the RTT in milliseconds. If there is no RTT or it's not enabled,\n * it returns null.\n *\n * @return {?number}\n * @export\n */\n getRoundTripTime() {\n const key = shaka.util.CmsdManager.KEYS_.ROUND_TRIP_TIME;\n if (!this.config_.enabled || !this.dynamicParams_ ||\n !this.dynamicParams_.has(key)) {\n return null;\n }\n return /** @type {number} */(this.dynamicParams_.get(key));\n }\n\n /**\n * Gets the current bandwidth estimate.\n *\n * @param {number} defaultEstimate\n * @return {number} The bandwidth estimate in bits per second.\n * @export\n */\n getBandwidthEstimate(defaultEstimate) {\n const estimatedThroughput = this.getEstimatedThroughput();\n if (!estimatedThroughput) {\n return defaultEstimate;\n }\n const etpWeightRatio = this.config_.estimatedThroughputWeightRatio;\n if (etpWeightRatio > 0 && etpWeightRatio <= 1) {\n return (defaultEstimate * (1 - etpWeightRatio)) +\n (estimatedThroughput * etpWeightRatio);\n }\n return defaultEstimate;\n }\n\n /**\n * @param {string} headerValue\n * @return {?Map.}\n * @private\n */\n parseCMSDStatic_(headerValue) {\n try {\n const params = new Map();\n const items = headerValue.split(',');\n for (let i = 0; i < items.length; i++) {\n // =\n const substrs = items[i].split('=');\n const key = substrs[0];\n const value = this.parseParameterValue_(substrs[1]);\n params.set(key, value);\n }\n return params;\n } catch (e) {\n shaka.log.warning(\n 'Failed to parse CMSD-Static response header value:', e);\n return null;\n }\n }\n\n /**\n * @param {string} headerValue\n * @return {?Map.}\n * @private\n */\n parseCMSDDynamic_(headerValue) {\n try {\n const params = new Map();\n const items = headerValue.split(';');\n // Server identifier as 1st item\n for (let i = 1; i < items.length; i++) {\n // =\n const substrs = items[i].split('=');\n const key = substrs[0];\n const value = this.parseParameterValue_(substrs[1]);\n params.set(key, value);\n }\n return params;\n } catch (e) {\n shaka.log.warning(\n 'Failed to parse CMSD-Dynamic response header value:', e);\n return null;\n }\n }\n\n /**\n * @param {string} value\n * @return {(boolean|number|string)}\n * @private\n */\n parseParameterValue_(value) {\n // If the value type is BOOLEAN and the value is TRUE, then the equals\n // sign and the value are omitted\n if (!value) {\n return true;\n }\n // Check if boolean 'false'\n if (value.toLowerCase() === 'false') {\n return false;\n }\n // Check if a number\n if (/^[-0-9]/.test(value)) {\n return parseInt(value, 10);\n }\n // Value is a string, remove double quotes from string value\n return value.replace(/[\"]+/g, '');\n }\n};\n\n/**\n * @const {string}\n * @private\n */\nshaka.util.CmsdManager.CMSD_STATIC_HEADER_NAME_ = 'cmsd-static';\n\n/**\n * @const {string}\n * @private\n */\nshaka.util.CmsdManager.CMSD_DYNAMIC_HEADER_NAME_ = 'cmsd-dynamic';\n\n/**\n * @enum {string}\n * @private\n */\nshaka.util.CmsdManager.KEYS_ = {\n AVAILABILITY_TIME: 'at',\n DURESS: 'du',\n ENCODED_BITRATE: 'br',\n ESTIMATED_THROUGHPUT: 'etp',\n HELD_TIME: 'ht',\n INTERMEDIARY_IDENTIFIER: 'n',\n MAX_SUGGESTED_BITRATE: 'mb',\n NEXT_OBJECT_RESPONSE: 'nor',\n NEXT_RANGE_RESPONSE: 'nrr',\n OBJECT_DURATION: 'd',\n OBJECT_TYPE: 'ot',\n RESPONSE_DELAY: 'rd',\n ROUND_TRIP_TIME: 'rtt',\n STARTUP: 'su',\n STREAM_TYPE: 'st',\n STREAMING_FORMAT: 'sf',\n VERSION: 'v',\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.Mutex');\n\ngoog.require('shaka.log');\n\n\n/**\n * @summary A simple mutex.\n */\nshaka.util.Mutex = class {\n /** Constructs the mutex. */\n constructor() {\n /** @private {?string} */\n this.acquiredIdentifier = null;\n\n /** @private {!Array.} */\n this.unlockQueue = [];\n }\n\n /**\n * Acquires the mutex, as soon as possible.\n * @param {string} identifier\n * @return {!Promise}\n */\n async acquire(identifier) {\n shaka.log.v2(identifier + ' has requested mutex');\n if (this.acquiredIdentifier) {\n await new Promise((resolve) => this.unlockQueue.push(resolve));\n }\n this.acquiredIdentifier = identifier;\n shaka.log.v2(identifier + ' has acquired mutex');\n }\n\n /**\n * Releases your hold on the mutex.\n */\n release() {\n shaka.log.v2(this.acquiredIdentifier + ' has released mutex');\n if (this.unlockQueue.length > 0) {\n this.unlockQueue.shift()();\n } else {\n this.acquiredIdentifier = null;\n }\n }\n\n /**\n * Completely releases the mutex. Meant for use by the tests.\n */\n releaseAll() {\n while (this.acquiredIdentifier) {\n this.release();\n }\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.NumberUtils');\n\n\nshaka.util.NumberUtils = class {\n /**\n * Compare two float numbers, taking a configurable tolerance margin into\n * account.\n *\n * @param {number} a\n * @param {number} b\n * @param {number=} tolerance\n * @return {boolean}\n */\n static isFloatEqual(a, b, tolerance = Number.EPSILON) {\n if (a === b) {\n return true;\n }\n\n const error = Math.abs(a - b);\n\n if (error <= tolerance) {\n return true;\n }\n\n if (tolerance !== Number.EPSILON) {\n return Math.abs(error - tolerance) <= Number.EPSILON;\n }\n\n return false;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.ads.AdsStats');\n\n\n/**\n * This class tracks all the various components (some optional) that are used to\n * populate |shaka.extern.AdsStats| which is passed to the app.\n *\n * @final\n */\nshaka.ads.AdsStats = class {\n /** */\n constructor() {\n /** @private {!Array.} */\n this.loadTimes_ = [];\n /** @private {number} */\n this.started_ = 0;\n /** @private {number} */\n this.playedCompletely_ = 0;\n /** @private {number} */\n this.skipped_ = 0;\n /** @private {number} */\n this.errors_ = 0;\n }\n\n /**\n * Record the time it took to get the final manifest.\n *\n * @param {number} seconds\n */\n addLoadTime(seconds) {\n this.loadTimes_.push(seconds);\n }\n\n /**\n * Increase the number of ads started by one.\n */\n incrementStarted() {\n this.started_++;\n }\n\n /**\n * Increase the number of ads played completely by one.\n */\n incrementPlayedCompletely() {\n this.playedCompletely_++;\n }\n\n /**\n * Increase the number of ads skipped by one.\n */\n incrementSkipped() {\n this.skipped_++;\n }\n\n /**\n * Increase the number of ads with error by one.\n */\n incrementErrors() {\n this.errors_++;\n }\n\n /**\n * @return {number}\n * @private\n */\n getAverageLoadTime_() {\n if (!this.loadTimes_.length) {\n return 0;\n }\n const sum = this.loadTimes_.reduce(\n (accumulator, currentValue) => accumulator + currentValue, 0);\n return sum / this.loadTimes_.length;\n }\n\n /**\n * Create a stats blob that we can pass up to the app. This blob will not\n * reference any internal data.\n *\n * @return {shaka.extern.AdsStats}\n */\n getBlob() {\n return {\n loadTimes: this.loadTimes_,\n averageLoadTime: this.getAverageLoadTime_(),\n started: this.started_,\n playedCompletely: this.playedCompletely_,\n skipped: this.skipped_,\n errors: this.errors_,\n };\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n\ngoog.provide('shaka.ads.ClientSideAd');\n\ngoog.require('shaka.util.EventManager');\n\n\n/**\n * @implements {shaka.extern.IAd}\n * @export\n */\nshaka.ads.ClientSideAd = class {\n /**\n * @param {!google.ima.Ad} imaAd\n * @param {!google.ima.AdsManager} imaAdManager\n * @param {HTMLMediaElement} video\n */\n constructor(imaAd, imaAdManager, video) {\n /** @private {google.ima.Ad} */\n this.ad_ = imaAd;\n\n /** @private {google.ima.AdsManager} */\n this.manager_ = imaAdManager;\n\n /** @private {HTMLMediaElement} */\n this.video_ = video;\n\n /** @private {boolean} */\n this.isPaused_ = false;\n\n /** @private {number} */\n this.volume_ = this.manager_.getVolume();\n\n /** @private {shaka.util.EventManager} */\n this.eventManager_ = new shaka.util.EventManager();\n\n this.eventManager_.listen(this.manager_,\n google.ima.AdEvent.Type.PAUSED, () => {\n this.isPaused_ = true;\n });\n\n this.eventManager_.listen(this.manager_,\n google.ima.AdEvent.Type.RESUMED, () => {\n this.isPaused_ = false;\n });\n }\n\n /**\n * @override\n * @export\n */\n needsSkipUI() {\n return false;\n }\n\n /**\n * @override\n * @export\n */\n isClientRendering() {\n return true;\n }\n\n /**\n * @override\n * @export\n */\n isUsingAnotherMediaElement() {\n return true;\n }\n\n /**\n * @override\n * @export\n */\n getDuration() {\n return this.ad_.getDuration();\n }\n\n /**\n * @override\n * @export\n */\n getMinSuggestedDuration() {\n return this.ad_.getMinSuggestedDuration();\n }\n\n /**\n * @override\n * @export\n */\n getRemainingTime() {\n return this.manager_.getRemainingTime();\n }\n\n /**\n * @override\n * @export\n */\n isPaused() {\n return this.isPaused_;\n }\n\n /**\n * @override\n * @export\n */\n isSkippable() {\n // IMA returns -1 for non-skippable ads. Any positive number is a genuine\n // skip offset, meaning the ad is skippable.\n return this.ad_.getSkipTimeOffset() >= 0;\n }\n\n /**\n * @override\n * @export\n */\n getTimeUntilSkippable() {\n const skipOffset = this.ad_.getSkipTimeOffset();\n const canSkipIn = this.getRemainingTime() - skipOffset;\n return Math.max(canSkipIn, 0);\n }\n\n /**\n * @override\n * @export\n */\n canSkipNow() {\n return this.manager_.getAdSkippableState();\n }\n\n /**\n * @override\n * @export\n */\n skip() {\n return this.manager_.skip();\n }\n\n /**\n * @param {boolean} paused\n */\n setPaused(paused) {\n this.isPaused_ = paused;\n }\n\n /**\n * @override\n * @export\n */\n pause() {\n return this.manager_.pause();\n }\n\n /**\n * @override\n * @export\n */\n play() {\n return this.manager_.resume();\n }\n\n\n /**\n * @override\n * @export\n */\n getVolume() {\n return this.manager_.getVolume();\n }\n\n /**\n * @override\n * @export\n */\n setVolume(volume) {\n this.video_.volume = volume;\n return this.manager_.setVolume(volume);\n }\n\n /**\n * @override\n * @export\n */\n isMuted() {\n return this.manager_.getVolume() == 0;\n }\n\n /**\n * @override\n * @export\n */\n isLinear() {\n return this.ad_.isLinear();\n }\n\n\n /**\n * @override\n * @export\n */\n resize(width, height) {\n let isInFullscreen = false;\n const video = /** @type {HTMLVideoElement} */(this.video_);\n if (document.fullscreenEnabled) {\n isInFullscreen = !!document.fullscreenElement;\n } else if (video.webkitSupportsFullscreen) {\n isInFullscreen = video.webkitDisplayingFullscreen;\n }\n const viewMode = isInFullscreen ?\n google.ima.ViewMode.FULLSCREEN : google.ima.ViewMode.NORMAL;\n this.manager_.resize(width, height, viewMode);\n }\n\n /**\n * @override\n * @export\n */\n setMuted(muted) {\n this.video_.muted = muted;\n // Emulate the \"mute\" functionality, where current, pre-mute\n // volume is saved and can be restored on unmute.\n if (muted) {\n this.volume_ = this.getVolume();\n this.manager_.setVolume(0);\n } else {\n this.manager_.setVolume(this.volume_);\n }\n }\n\n /**\n * It's required for a muted ad to start when autoplaying.\n *\n * @param {number} videoVolume\n */\n setInitialMuted(videoVolume) {\n this.volume_ = videoVolume;\n this.manager_.setVolume(0);\n }\n\n /**\n * @override\n * @export\n */\n getSequenceLength() {\n const podInfo = this.ad_.getAdPodInfo();\n if (podInfo == null) {\n // No pod, just one ad.\n return 1;\n }\n\n return podInfo.getTotalAds();\n }\n\n /**\n * @override\n * @export\n */\n getPositionInSequence() {\n const podInfo = this.ad_.getAdPodInfo();\n if (podInfo == null) {\n // No pod, just one ad.\n return 1;\n }\n\n return podInfo.getAdPosition();\n }\n\n /**\n * @override\n * @export\n */\n getTitle() {\n return this.ad_.getTitle();\n }\n\n /**\n * @override\n * @export\n */\n getDescription() {\n return this.ad_.getDescription();\n }\n\n /**\n * @override\n * @export\n */\n getVastMediaBitrate() {\n return this.ad_.getVastMediaBitrate();\n }\n\n /**\n * @override\n * @export\n */\n getVastMediaHeight() {\n return this.ad_.getVastMediaHeight();\n }\n\n /**\n * @override\n * @export\n */\n getVastMediaWidth() {\n return this.ad_.getVastMediaWidth();\n }\n\n /**\n * @override\n * @export\n */\n getAdId() {\n return this.ad_.getAdId();\n }\n\n /**\n * @override\n * @export\n */\n getCreativeAdId() {\n return this.ad_.getCreativeAdId();\n }\n\n /**\n * @override\n * @export\n */\n getAdvertiserName() {\n return this.ad_.getAdvertiserName();\n }\n\n /**\n * @override\n * @export\n */\n getMediaUrl() {\n return this.ad_.getMediaUrl();\n }\n\n /**\n * @override\n * @export\n */\n getTimeOffset() {\n const podInfo = this.ad_.getAdPodInfo();\n if (podInfo == null) {\n // Defaults to 0 if this ad is not part of a pod, or the pod is not part\n // of an ad playlist.\n return 0;\n }\n\n return podInfo.getTimeOffset();\n }\n\n /**\n * @override\n * @export\n */\n getPodIndex() {\n const podInfo = this.ad_.getAdPodInfo();\n if (podInfo == null) {\n // Defaults to 0 if this ad is not part of a pod, or the pod is not part\n // of an ad playlist.\n return 0;\n }\n\n return podInfo.getPodIndex();\n }\n\n /**\n * @override\n * @export\n */\n release() {\n this.ad_ = null;\n this.manager_ = null;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n\ngoog.provide('shaka.ads.Utils');\n\ngoog.require('shaka.util.TextParser');\ngoog.require('shaka.util.TXml');\n\n\n/**\n * A class responsible for ad utils.\n * @export\n */\nshaka.ads.Utils = class {\n /**\n * @param {!shaka.extern.xml.Node} vast\n * @param {?number} currentTime\n * @return {!Array.}\n */\n static parseVastToInterstitials(vast, currentTime) {\n const TXml = shaka.util.TXml;\n /** @type {!Array.} */\n const interstitials = [];\n\n let startTime = 0;\n if (currentTime != null) {\n startTime = currentTime;\n }\n\n for (const ad of TXml.findChildren(vast, 'Ad')) {\n const inline = TXml.findChild(ad, 'InLine');\n if (!inline) {\n continue;\n }\n const creatives = TXml.findChild(inline, 'Creatives');\n if (!creatives) {\n continue;\n }\n for (const creative of TXml.findChildren(creatives, 'Creative')) {\n const linear = TXml.findChild(creative, 'Linear');\n if (!linear) {\n continue;\n }\n let skipOffset = null;\n if (linear.attributes['skipoffset']) {\n skipOffset = shaka.util.TextParser.parseTime(\n linear.attributes['skipoffset']);\n if (isNaN(skipOffset)) {\n skipOffset = null;\n }\n }\n const mediaFiles = TXml.findChild(linear, 'MediaFiles');\n if (!mediaFiles) {\n continue;\n }\n const medias = TXml.findChildren(mediaFiles, 'MediaFile');\n let checkMedias = medias;\n const streamingMedias = medias.filter((media) => {\n return media.attributes['delivery'] == 'streaming';\n });\n if (streamingMedias.length) {\n checkMedias = streamingMedias;\n }\n const sortedMedias = checkMedias.sort((a, b) => {\n const aHeight = parseInt(a.attributes['height'], 10) || 0;\n const bHeight = parseInt(b.attributes['height'], 10) || 0;\n return bHeight - aHeight;\n });\n for (const media of sortedMedias) {\n const adUrl = TXml.getTextContents(media);\n if (!adUrl) {\n continue;\n }\n interstitials.push({\n id: null,\n startTime: startTime,\n endTime: null,\n uri: adUrl,\n mimeType: media.attributes['type'] || null,\n isSkippable: skipOffset != null,\n skipOffset,\n skipFor: null,\n canJump: false,\n resumeOffset: 0,\n playoutLimit: null,\n once: true,\n pre: currentTime == null,\n post: currentTime == Infinity,\n timelineRange: false,\n });\n break;\n }\n }\n }\n return interstitials;\n }\n\n /**\n * @param {!shaka.extern.xml.Node} vmap\n * @return {!Array.<{time: ?number, uri: string}>}\n */\n static parseVMAP(vmap) {\n const TXml = shaka.util.TXml;\n /** @type {!Array.<{time: ?number, uri: string}>} */\n const ads = [];\n for (const adBreak of TXml.findChildren(vmap, 'vmap:AdBreak')) {\n const timeOffset = adBreak.attributes['timeOffset'];\n if (!timeOffset) {\n continue;\n }\n let time = null;\n if (timeOffset == 'start') {\n time = 0;\n } else if (timeOffset == 'end') {\n time = Infinity;\n } else {\n time = shaka.util.TextParser.parseTime(timeOffset);\n }\n const adSource = TXml.findChild(adBreak, 'vmap:AdSource');\n if (!adSource) {\n continue;\n }\n const adTagURI = TXml.findChild(adSource, 'vmap:AdTagURI');\n if (!adTagURI) {\n continue;\n }\n const uri = TXml.getTextContents(adTagURI);\n if (!uri) {\n continue;\n }\n ads.push({\n time,\n uri,\n });\n }\n return ads;\n }\n};\n\n/**\n * The event name for when a sequence of ads has been loaded.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.ADS_LOADED = 'ads-loaded';\n\n/**\n * The event name for when an ad has started playing.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_STARTED = 'ad-started';\n\n\n/**\n * The event name for when an ad playhead crosses first quartile.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_FIRST_QUARTILE = 'ad-first-quartile';\n\n\n/**\n * The event name for when an ad playhead crosses midpoint.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_MIDPOINT = 'ad-midpoint';\n\n\n/**\n * The event name for when an ad playhead crosses third quartile.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_THIRD_QUARTILE = 'ad-third-quartile';\n\n\n/**\n * The event name for when an ad has completed playing.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_COMPLETE = 'ad-complete';\n\n\n/**\n * The event name for when an ad has finished playing\n * (played all the way through, was skipped, or was unable to proceed\n * due to an error).\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_STOPPED = 'ad-stopped';\n\n\n/**\n * The event name for when an ad is skipped by the user..\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_SKIPPED = 'ad-skipped';\n\n\n/**\n * The event name for when the ad volume has changed.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_VOLUME_CHANGED = 'ad-volume-changed';\n\n\n/**\n * The event name for when the ad was muted.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_MUTED = 'ad-muted';\n\n\n/**\n * The event name for when the ad was paused.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_PAUSED = 'ad-paused';\n\n\n/**\n * The event name for when the ad was resumed after a pause.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_RESUMED = 'ad-resumed';\n\n\n/**\n * The event name for when the ad's skip status changes\n * (usually it becomes skippable when it wasn't before).\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_SKIP_STATE_CHANGED = 'ad-skip-state-changed';\n\n\n/**\n * The event name for when the ad's cue points (start/end markers)\n * have changed.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.CUEPOINTS_CHANGED = 'ad-cue-points-changed';\n\n\n/**\n * The event name for when the native IMA ad manager object has\n * loaded and become available.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.IMA_AD_MANAGER_LOADED = 'ima-ad-manager-loaded';\n\n\n/**\n * The event name for when the native IMA stream manager object has\n * loaded and become available.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.IMA_STREAM_MANAGER_LOADED = 'ima-stream-manager-loaded';\n\n\n/**\n * The event name for when the ad was clicked.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_CLICKED = 'ad-clicked';\n\n\n/**\n * The event name for when there is an update to the current ad's progress.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_PROGRESS = 'ad-progress';\n\n\n/**\n * The event name for when the ad is buffering.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_BUFFERING = 'ad-buffering';\n\n\n/**\n * The event name for when the ad's URL was hit.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_IMPRESSION = 'ad-impression';\n\n\n/**\n * The event name for when the ad's duration changed.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_DURATION_CHANGED = 'ad-duration-changed';\n\n\n/**\n * The event name for when the ad was closed by the user.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_CLOSED = 'ad-closed';\n\n\n/**\n * The event name for when the ad data becomes available.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_LOADED = 'ad-loaded';\n\n\n/**\n * The event name for when all the ads were completed.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.ALL_ADS_COMPLETED = 'all-ads-completed';\n\n\n/**\n * The event name for when the ad changes from or to linear.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_LINEAR_CHANGED = 'ad-linear-changed';\n\n\n/**\n * The event name for when the ad's metadata becomes available.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_METADATA = 'ad-metadata';\n\n\n/**\n * The event name for when the ad display encountered a recoverable\n * error.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_RECOVERABLE_ERROR = 'ad-recoverable-error';\n\n/**\n * The event name for when the ad manager dispatch errors.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_ERROR = 'ad-error';\n\n/**\n * The event name for when the client side SDK signalled its readiness\n * to play a VPAID ad or an ad rule.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_BREAK_READY = 'ad-break-ready';\n\n\n/**\n * The event name for when the interaction callback for the ad was\n * triggered.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_INTERACTION = 'ad-interaction';\n\n\n/**\n * The name of the event for when an ad requires the main content to be paused.\n * Fired when the platform does not support multiple media elements.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_CONTENT_PAUSE_REQUESTED = 'ad-content-pause-requested';\n\n\n/**\n * The name of the event for when an ad requires the main content to be resumed.\n * Fired when the platform does not support multiple media elements.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_CONTENT_RESUME_REQUESTED = 'ad-content-resume-requested';\n\n\n/**\n * The name of the event for when an ad requires the video of the main content\n * to be attached.\n *\n * @const {string}\n * @export\n */\nshaka.ads.Utils.AD_CONTENT_ATTACH_REQUESTED = 'ad-content-attach-requested';\n\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n\ngoog.provide('shaka.ads.ClientSideAdManager');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.Player');\ngoog.require('shaka.ads.ClientSideAd');\ngoog.require('shaka.ads.Utils');\ngoog.require('shaka.log');\ngoog.require('shaka.util.Dom');\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.IReleasable');\n\n/**\n * A class responsible for client-side ad interactions.\n * @implements {shaka.util.IReleasable}\n */\nshaka.ads.ClientSideAdManager = class {\n /**\n * @param {HTMLElement} adContainer\n * @param {HTMLMediaElement} video\n * @param {string} locale\n * @param {?google.ima.AdsRenderingSettings} adsRenderingSettings\n * @param {function(!shaka.util.FakeEvent)} onEvent\n */\n constructor(adContainer, video, locale, adsRenderingSettings, onEvent) {\n /** @private {HTMLElement} */\n this.adContainer_ = adContainer;\n\n /** @private {HTMLMediaElement} */\n this.video_ = video;\n\n /** @private {boolean} */\n this.videoPlayed_ = false;\n\n /** @private {?shaka.extern.AdsConfiguration} */\n this.config_ = null;\n\n /** @private {ResizeObserver} */\n this.resizeObserver_ = null;\n\n /** @private {number} */\n this.requestAdsStartTime_ = NaN;\n\n /** @private {function(!shaka.util.FakeEvent)} */\n this.onEvent_ = onEvent;\n\n /** @private {shaka.ads.ClientSideAd} */\n this.ad_ = null;\n\n /** @private {shaka.util.EventManager} */\n this.eventManager_ = new shaka.util.EventManager();\n\n google.ima.settings.setLocale(locale);\n\n google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true);\n\n /** @private {!google.ima.AdDisplayContainer} */\n this.adDisplayContainer_ = new google.ima.AdDisplayContainer(\n this.adContainer_,\n this.video_);\n\n // TODO: IMA: Must be done as the result of a user action on mobile\n this.adDisplayContainer_.initialize();\n\n // IMA: This instance should be re-used for the entire lifecycle of\n // the page.\n this.adsLoader_ = new google.ima.AdsLoader(this.adDisplayContainer_);\n\n this.adsLoader_.getSettings().setPlayerType('shaka-player');\n this.adsLoader_.getSettings().setPlayerVersion(shaka.Player.version);\n\n /** @private {google.ima.AdsManager} */\n this.imaAdsManager_ = null;\n\n /** @private {!google.ima.AdsRenderingSettings} */\n this.adsRenderingSettings_ =\n adsRenderingSettings || new google.ima.AdsRenderingSettings();\n\n this.eventManager_.listen(this.adsLoader_,\n google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, (e) => {\n this.onAdsManagerLoaded_(\n /** @type {!google.ima.AdsManagerLoadedEvent} */ (e));\n });\n\n this.eventManager_.listen(this.adsLoader_,\n google.ima.AdErrorEvent.Type.AD_ERROR, (e) => {\n this.onAdError_( /** @type {!google.ima.AdErrorEvent} */ (e));\n });\n\n // Notify the SDK when the video has ended, so it can play post-roll ads.\n this.eventManager_.listen(this.video_, 'ended', () => {\n this.adsLoader_.contentComplete();\n });\n\n this.eventManager_.listenOnce(this.video_, 'play', () => {\n this.videoPlayed_ = true;\n });\n }\n\n /**\n * Called by the AdManager to provide an updated configuration any time it\n * changes.\n *\n * @param {shaka.extern.AdsConfiguration} config\n */\n configure(config) {\n this.config_ = config;\n }\n\n /**\n * @param {!google.ima.AdsRequest} imaRequest\n */\n requestAds(imaRequest) {\n goog.asserts.assert(\n imaRequest.adTagUrl || imaRequest.adsResponse,\n 'The ad tag needs to be set up before requesting ads, ' +\n 'or adsResponse must be filled.');\n // Destroy the current AdsManager, in case the tag you requested previously\n // contains post-rolls (don't play those now).\n if (this.imaAdsManager_) {\n this.imaAdsManager_.destroy();\n }\n // Your AdsLoader will be set up on page-load. You should re-use the same\n // AdsLoader for every request.\n if (this.adsLoader_) {\n // Reset the IMA SDK.\n this.adsLoader_.contentComplete();\n }\n this.requestAdsStartTime_ = Date.now() / 1000;\n this.adsLoader_.requestAds(imaRequest);\n }\n\n /**\n * @param {!google.ima.AdsRenderingSettings} adsRenderingSettings\n */\n updateAdsRenderingSettings(adsRenderingSettings) {\n this.adsRenderingSettings_ = adsRenderingSettings;\n if (this.imaAdsManager_) {\n this.imaAdsManager_.updateAdsRenderingSettings(\n this.adsRenderingSettings_);\n }\n }\n\n /**\n * Stop all currently playing ads.\n */\n stop() {\n // this.imaAdsManager_ might not be set yet... if, for example, an ad\n // blocker prevented the ads from ever loading.\n if (this.imaAdsManager_) {\n this.imaAdsManager_.stop();\n }\n if (this.adContainer_) {\n shaka.util.Dom.removeAllChildren(this.adContainer_);\n }\n }\n\n /** @override */\n release() {\n this.stop();\n if (this.resizeObserver_) {\n this.resizeObserver_.disconnect();\n }\n if (this.eventManager_) {\n this.eventManager_.release();\n }\n if (this.imaAdsManager_) {\n this.imaAdsManager_.destroy();\n }\n this.adsLoader_.destroy();\n this.adDisplayContainer_.destroy();\n }\n\n /**\n * @param {!google.ima.AdErrorEvent} e\n * @private\n */\n onAdError_(e) {\n shaka.log.warning(\n 'There was an ad error from the IMA SDK: ' + e.getError());\n shaka.log.warning('Resuming playback.');\n\n const data = (new Map()).set('originalEvent', e);\n this.onEvent_(new shaka.util.FakeEvent(shaka.ads.Utils.AD_ERROR, data));\n\n this.onAdComplete_(/* adEvent= */ null);\n // Remove ad breaks from the timeline\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.CUEPOINTS_CHANGED,\n (new Map()).set('cuepoints', [])));\n }\n\n\n /**\n * @param {!google.ima.AdsManagerLoadedEvent} e\n * @private\n */\n onAdsManagerLoaded_(e) {\n goog.asserts.assert(this.video_ != null, 'Video should not be null!');\n\n const now = Date.now() / 1000;\n const loadTime = now - this.requestAdsStartTime_;\n this.onEvent_(new shaka.util.FakeEvent(shaka.ads.Utils.ADS_LOADED,\n (new Map()).set('loadTime', loadTime)));\n\n if (!this.config_.customPlayheadTracker) {\n this.imaAdsManager_ = e.getAdsManager(this.video_,\n this.adsRenderingSettings_);\n } else {\n const videoPlayHead = {\n currentTime: this.video_.currentTime,\n };\n\n this.imaAdsManager_ = e.getAdsManager(videoPlayHead,\n this.adsRenderingSettings_);\n\n if (this.video_.muted) {\n this.imaAdsManager_.setVolume(0);\n } else {\n this.imaAdsManager_.setVolume(this.video_.volume);\n }\n\n this.eventManager_.listen(this.video_, 'timeupdate', () => {\n if (!this.video_.duration) {\n return;\n }\n videoPlayHead.currentTime = this.video_.currentTime;\n });\n this.eventManager_.listen(this.video_, 'volumechange', () => {\n if (!this.ad_) {\n return;\n }\n this.ad_.setVolume(this.video_.volume);\n if (this.video_.muted) {\n this.ad_.setMuted(true);\n }\n });\n }\n\n this.onEvent_(new shaka.util.FakeEvent(\n shaka.ads.Utils.IMA_AD_MANAGER_LOADED,\n (new Map()).set('imaAdManager', this.imaAdsManager_)));\n\n const cuePointStarts = this.imaAdsManager_.getCuePoints();\n if (cuePointStarts.length) {\n /** @type {!Array.} */\n const cuePoints = [];\n for (const start of cuePointStarts) {\n /** @type {shaka.extern.AdCuePoint} */\n const shakaCuePoint = {\n start: start,\n end: null,\n };\n cuePoints.push(shakaCuePoint);\n }\n\n this.onEvent_(new shaka.util.FakeEvent(\n shaka.ads.Utils.CUEPOINTS_CHANGED,\n (new Map()).set('cuepoints', cuePoints)));\n }\n\n this.addImaEventListeners_();\n\n try {\n const viewMode = this.isFullScreenEnabled_() ?\n google.ima.ViewMode.FULLSCREEN : google.ima.ViewMode.NORMAL;\n\n this.imaAdsManager_.init(this.video_.offsetWidth,\n this.video_.offsetHeight, viewMode);\n\n // Wait on the 'loadeddata' event rather than the 'loadedmetadata' event\n // because 'loadedmetadata' is sometimes called before the video resizes\n // on some platforms (e.g. Safari).\n this.eventManager_.listen(this.video_, 'loadeddata', () => {\n const viewMode = this.isFullScreenEnabled_() ?\n google.ima.ViewMode.FULLSCREEN : google.ima.ViewMode.NORMAL;\n this.imaAdsManager_.resize(this.video_.offsetWidth,\n this.video_.offsetHeight, viewMode);\n });\n\n if ('ResizeObserver' in window) {\n this.resizeObserver_ = new ResizeObserver(() => {\n const viewMode = this.isFullScreenEnabled_() ?\n google.ima.ViewMode.FULLSCREEN : google.ima.ViewMode.NORMAL;\n this.imaAdsManager_.resize(this.video_.offsetWidth,\n this.video_.offsetHeight, viewMode);\n });\n this.resizeObserver_.observe(this.video_);\n } else {\n this.eventManager_.listen(document, 'fullscreenchange', () => {\n const viewMode = this.isFullScreenEnabled_() ?\n google.ima.ViewMode.FULLSCREEN : google.ima.ViewMode.NORMAL;\n this.imaAdsManager_.resize(this.video_.offsetWidth,\n this.video_.offsetHeight, viewMode);\n });\n }\n\n // Single video and overlay ads will start at this time\n // TODO (ismena): Need a better inderstanding of what this does.\n // The docs say it's called to 'start playing the ads,' but I haven't\n // seen the ads actually play until requestAds() is called.\n // Note: We listen for a play event to avoid autoplay issues that might\n // crash IMA.\n if (this.videoPlayed_ || this.config_.skipPlayDetection) {\n this.imaAdsManager_.start();\n } else {\n this.eventManager_.listenOnce(this.video_, 'play', () => {\n this.videoPlayed_ = true;\n this.imaAdsManager_.start();\n });\n }\n } catch (adError) {\n // If there was a problem with the VAST response,\n // we we won't be getting an ad. Hide ad UI if we showed it already\n // and get back to the presentation.\n this.onAdComplete_(/* adEvent= */ null);\n }\n }\n\n\n /**\n * @return {boolean}\n * @private\n */\n isFullScreenEnabled_() {\n if (document.fullscreenEnabled) {\n return !!document.fullscreenElement;\n } else {\n const video = /** @type {HTMLVideoElement} */(this.video_);\n if (video.webkitSupportsFullscreen) {\n return video.webkitDisplayingFullscreen;\n }\n }\n return false;\n }\n\n\n /**\n * @private\n */\n addImaEventListeners_() {\n /**\n * @param {!Event} e\n * @param {string} type\n */\n const convertEventAndSend = (e, type) => {\n const data = (new Map()).set('originalEvent', e);\n this.onEvent_(new shaka.util.FakeEvent(type, data));\n };\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdErrorEvent.Type.AD_ERROR, (error) => {\n this.onAdError_(/** @type {!google.ima.AdErrorEvent} */ (error));\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, (e) => {\n this.onAdStart_(/** @type {!google.ima.AdEvent} */ (e));\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.STARTED, (e) => {\n this.onAdStart_(/** @type {!google.ima.AdEvent} */ (e));\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.FIRST_QUARTILE, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_FIRST_QUARTILE);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.MIDPOINT, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_MIDPOINT);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.THIRD_QUARTILE, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_THIRD_QUARTILE);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.COMPLETE, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_COMPLETE);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, (e) => {\n this.onAdComplete_(/** @type {!google.ima.AdEvent} */ (e));\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.ALL_ADS_COMPLETED, (e) => {\n this.onAdComplete_(/** @type {!google.ima.AdEvent} */ (e));\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.SKIPPED, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_SKIPPED);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.VOLUME_CHANGED, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_VOLUME_CHANGED);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.VOLUME_MUTED, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_MUTED);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.PAUSED, (e) => {\n if (this.ad_) {\n this.ad_.setPaused(true);\n convertEventAndSend(e, shaka.ads.Utils.AD_PAUSED);\n }\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.RESUMED, (e) => {\n if (this.ad_) {\n this.ad_.setPaused(false);\n convertEventAndSend(e, shaka.ads.Utils.AD_RESUMED);\n }\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.SKIPPABLE_STATE_CHANGED, (e) => {\n if (this.ad_) {\n convertEventAndSend(e, shaka.ads.Utils.AD_SKIP_STATE_CHANGED);\n }\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.CLICK, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_CLICKED);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.AD_PROGRESS, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_PROGRESS);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.AD_BUFFERING, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_BUFFERING);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.IMPRESSION, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_IMPRESSION);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.DURATION_CHANGE, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_DURATION_CHANGED);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.USER_CLOSE, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_CLOSED);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.LOADED, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_LOADED);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.ALL_ADS_COMPLETED, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.ALL_ADS_COMPLETED);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.LINEAR_CHANGED, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_LINEAR_CHANGED);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.AD_METADATA, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_METADATA);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.LOG, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_RECOVERABLE_ERROR);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.AD_BREAK_READY, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_BREAK_READY);\n });\n\n this.eventManager_.listen(this.imaAdsManager_,\n google.ima.AdEvent.Type.INTERACTION, (e) => {\n convertEventAndSend(e, shaka.ads.Utils.AD_INTERACTION);\n });\n }\n\n /**\n * @param {!google.ima.AdEvent} e\n * @private\n */\n onAdStart_(e) {\n goog.asserts.assert(this.imaAdsManager_,\n 'Should have an ads manager at this point!');\n\n const imaAd = e.getAd();\n if (!imaAd) {\n // Sometimes the IMA SDK will fire a CONTENT_PAUSE_REQUESTED or STARTED\n // event with no associated ad object.\n // We can't really play an ad in that situation, so just ignore the event.\n shaka.log.alwaysWarn(\n 'The IMA SDK fired a ' + e.type + ' event with no associated ad. ' +\n 'Unable to play ad!');\n return;\n }\n\n this.ad_ = new shaka.ads.ClientSideAd(imaAd,\n this.imaAdsManager_, this.video_);\n if (e.type == google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED &&\n !this.config_.supportsMultipleMediaElements ) {\n this.onEvent_(new shaka.util.FakeEvent(\n shaka.ads.Utils.AD_CONTENT_PAUSE_REQUESTED));\n }\n const data = new Map()\n .set('ad', this.ad_)\n .set('sdkAdObject', imaAd)\n .set('originalEvent', e);\n this.onEvent_(new shaka.util.FakeEvent(\n shaka.ads.Utils.AD_STARTED, data));\n if (this.ad_.isLinear()) {\n this.adContainer_.setAttribute('ad-active', 'true');\n if (!this.config_.customPlayheadTracker) {\n this.video_.pause();\n }\n if (this.video_.muted) {\n this.ad_.setInitialMuted(this.video_.volume);\n } else {\n this.ad_.setVolume(this.video_.volume);\n }\n }\n }\n\n /**\n * @param {?google.ima.AdEvent} e\n * @private\n */\n onAdComplete_(e) {\n if (e && e.type == google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED &&\n !this.config_.supportsMultipleMediaElements) {\n this.onEvent_(new shaka.util.FakeEvent(\n shaka.ads.Utils.AD_CONTENT_RESUME_REQUESTED));\n }\n this.onEvent_(new shaka.util.FakeEvent(shaka.ads.Utils.AD_STOPPED,\n (new Map()).set('originalEvent', e)));\n if (this.ad_ && this.ad_.isLinear()) {\n this.adContainer_.removeAttribute('ad-active');\n if (!this.config_.customPlayheadTracker && !this.video_.ended) {\n this.video_.play();\n }\n }\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n\ngoog.provide('shaka.ads.InterstitialAd');\n\n/**\n * @implements {shaka.extern.IAd}\n * @export\n */\nshaka.ads.InterstitialAd = class {\n /**\n * @param {HTMLMediaElement} video\n * @param {boolean} isSkippable\n * @param {?number} skipOffset\n * @param {?number} skipFor\n * @param {function()} onSkip\n * @param {number} sequenceLength\n * @param {number} adPosition\n * @param {boolean} isUsingAnotherMediaElement\n */\n constructor(video, isSkippable, skipOffset, skipFor, onSkip,\n sequenceLength, adPosition, isUsingAnotherMediaElement) {\n /** @private {HTMLMediaElement} */\n this.video_ = video;\n\n /** @private {boolean} */\n this.isSkippable_ = isSkippable;\n\n /** @private {?number} */\n this.skipOffset_ = isSkippable ? skipOffset || 0 : skipOffset;\n\n /** @private {?number} */\n this.skipFor_ = skipFor;\n\n /** @private {function()} */\n this.onSkip_ = onSkip;\n\n /** @private {number} */\n this.sequenceLength_ = sequenceLength;\n\n /** @private {number} */\n this.adPosition_ = adPosition;\n\n /** @private {boolean} */\n this.isUsingAnotherMediaElement_ = isUsingAnotherMediaElement;\n }\n\n /**\n * @override\n * @export\n */\n needsSkipUI() {\n return true;\n }\n\n /**\n * @override\n * @export\n */\n isClientRendering() {\n return true;\n }\n\n /**\n * @override\n * @export\n */\n isUsingAnotherMediaElement() {\n return this.isUsingAnotherMediaElement_;\n }\n\n /**\n * @override\n * @export\n */\n getDuration() {\n const duration = this.video_.duration;\n if (isNaN(duration)) {\n return -1;\n }\n return duration;\n }\n\n /**\n * @override\n * @export\n */\n getMinSuggestedDuration() {\n return this.getDuration();\n }\n\n /**\n * @override\n * @export\n */\n getRemainingTime() {\n const duration = this.video_.duration;\n if (isNaN(duration)) {\n return -1;\n }\n return duration - this.video_.currentTime;\n }\n\n /**\n * @override\n * @export\n */\n isPaused() {\n return this.video_.paused;\n }\n\n /**\n * @override\n * @export\n */\n isSkippable() {\n if (this.isSkippable_ && this.skipFor_ != null) {\n const position = this.getDuration() - this.getRemainingTime();\n const maxTime = this.skipOffset_ + this.skipFor_;\n return position < maxTime;\n }\n return this.isSkippable_;\n }\n\n /**\n * @override\n * @export\n */\n getTimeUntilSkippable() {\n if (this.isSkippable()) {\n const canSkipIn =\n this.getRemainingTime() + this.skipOffset_ - this.getDuration();\n return Math.max(canSkipIn, 0);\n }\n return Math.max(this.getRemainingTime(), 0);\n }\n\n /**\n * @override\n * @export\n */\n canSkipNow() {\n return this.isSkippable_ && this.getTimeUntilSkippable() == 0;\n }\n\n /**\n * @override\n * @export\n */\n skip() {\n if (this.canSkipNow()) {\n this.onSkip_();\n }\n }\n\n /**\n * @override\n * @export\n */\n pause() {\n return this.video_.pause();\n }\n\n /**\n * @override\n * @export\n */\n play() {\n return this.video_.play();\n }\n\n\n /**\n * @override\n * @export\n */\n getVolume() {\n return this.video_.volume;\n }\n\n /**\n * @override\n * @export\n */\n setVolume(volume) {\n this.video_.volume = volume;\n }\n\n /**\n * @override\n * @export\n */\n isMuted() {\n return this.video_.muted;\n }\n\n /**\n * @override\n * @export\n */\n isLinear() {\n return true;\n }\n\n /**\n * @override\n * @export\n */\n resize(width, height) {\n // Nothing\n }\n\n /**\n * @override\n * @export\n */\n setMuted(muted) {\n this.video_.muted = muted;\n }\n\n\n /**\n * @override\n * @export\n */\n getSequenceLength() {\n return this.sequenceLength_;\n }\n\n /**\n * @override\n * @export\n */\n getPositionInSequence() {\n return this.adPosition_;\n }\n\n /**\n * @override\n * @export\n */\n getTitle() {\n return '';\n }\n\n /**\n * @override\n * @export\n */\n getDescription() {\n return '';\n }\n\n /**\n * @override\n * @export\n */\n getVastMediaBitrate() {\n return 0;\n }\n\n /**\n * @override\n * @export\n */\n getVastMediaHeight() {\n return 0;\n }\n\n /**\n * @override\n * @export\n */\n getVastMediaWidth() {\n return 0;\n }\n\n /**\n * @override\n * @export\n */\n getAdId() {\n return '';\n }\n\n /**\n * @override\n * @export\n */\n getCreativeAdId() {\n return '';\n }\n\n /**\n * @override\n * @export\n */\n getAdvertiserName() {\n return '';\n }\n\n /**\n * @override\n * @export\n */\n getMediaUrl() {\n return null;\n }\n\n /**\n * @override\n * @export\n */\n getTimeOffset() {\n return 0;\n }\n\n /**\n * @override\n * @export\n */\n getPodIndex() {\n return 0;\n }\n\n /**\n * @override\n * @export\n */\n release() {\n this.video_ = null;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n\ngoog.provide('shaka.ads.InterstitialAdManager');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.Player');\ngoog.require('shaka.ads.InterstitialAd');\ngoog.require('shaka.ads.Utils');\ngoog.require('shaka.log');\ngoog.require('shaka.media.PreloadManager');\ngoog.require('shaka.net.NetworkingEngine');\ngoog.require('shaka.util.Dom');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.IReleasable');\ngoog.require('shaka.util.Platform');\ngoog.require('shaka.util.PublicPromise');\ngoog.require('shaka.util.StringUtils');\ngoog.require('shaka.util.Timer');\ngoog.require('shaka.util.TXml');\n\n\n/**\n * A class responsible for Interstitial ad interactions.\n *\n * @implements {shaka.util.IReleasable}\n */\nshaka.ads.InterstitialAdManager = class {\n /**\n * @param {HTMLElement} adContainer\n * @param {shaka.Player} basePlayer\n * @param {HTMLMediaElement} baseVideo\n * @param {function(!shaka.util.FakeEvent)} onEvent\n */\n constructor(adContainer, basePlayer, baseVideo, onEvent) {\n /** @private {?shaka.extern.AdsConfiguration} */\n this.config_ = null;\n\n /** @private {HTMLElement} */\n this.adContainer_ = adContainer;\n\n /** @private {shaka.Player} */\n this.basePlayer_ = basePlayer;\n\n /** @private {HTMLMediaElement} */\n this.baseVideo_ = baseVideo;\n\n /** @private {?HTMLMediaElement} */\n this.adVideo_ = null;\n\n /** @private {boolean} */\n this.usingBaseVideo_ = true;\n\n /** @private {HTMLMediaElement} */\n this.video_ = this.baseVideo_;\n\n /** @private {function(!shaka.util.FakeEvent)} */\n this.onEvent_ = onEvent;\n\n /** @private {!Set.} */\n this.interstitialIds_ = new Set();\n\n /** @private {!Set.} */\n this.interstitials_ = new Set();\n\n /**\n * @private {!Map.>}\n */\n this.preloadManagerInterstitials_ = new Map();\n\n /** @private {shaka.Player} */\n this.player_ = new shaka.Player();\n\n this.updatePlayerConfig_();\n\n /** @private {shaka.util.EventManager} */\n this.eventManager_ = new shaka.util.EventManager();\n\n /** @private {shaka.util.EventManager} */\n this.adEventManager_ = new shaka.util.EventManager();\n\n /** @private {boolean} */\n this.playingAd_ = false;\n\n /** @private {?number} */\n this.lastTime_ = null;\n\n /** @private {?shaka.extern.AdInterstitial} */\n this.lastPlayedAd_ = null;\n\n this.eventManager_.listen(this.baseVideo_, 'timeupdate', () => {\n if (this.playingAd_ || this.lastTime_ ||\n this.basePlayer_.isRemotePlayback()) {\n return;\n }\n this.lastTime_ = this.baseVideo_.currentTime;\n const currentInterstitial = this.getCurrentInterstitial_(\n /* needPreRoll= */ true);\n if (currentInterstitial) {\n this.setupAd_(currentInterstitial, /* sequenceLength= */ 1,\n /* adPosition= */ 1, /* initialTime= */ Date.now());\n }\n });\n\n const checkForInterstitials = () => {\n if (this.playingAd_ || !this.lastTime_ ||\n this.basePlayer_.isRemotePlayback()) {\n return;\n }\n this.lastTime_ = this.baseVideo_.currentTime;\n // Remove last played add when the new time is before to the ad time.\n if (this.lastPlayedAd_ &&\n !this.lastPlayedAd_.pre && !this.lastPlayedAd_.post &&\n this.lastTime_ < this.lastPlayedAd_.startTime) {\n this.lastPlayedAd_ = null;\n }\n const currentInterstitial = this.getCurrentInterstitial_();\n if (currentInterstitial) {\n this.setupAd_(currentInterstitial, /* sequenceLength= */ 1,\n /* adPosition= */ 1, /* initialTime= */ Date.now());\n }\n };\n\n this.eventManager_.listen(this.baseVideo_, 'ended', () => {\n checkForInterstitials();\n });\n\n /** @private {shaka.util.Timer} */\n this.timeUpdateTimer_ = new shaka.util.Timer(checkForInterstitials);\n\n if ('requestVideoFrameCallback' in this.baseVideo_ &&\n !shaka.util.Platform.isSmartTV()) {\n const baseVideo = /** @type {!HTMLVideoElement} */ (this.baseVideo_);\n const videoFrameCallback = () => {\n checkForInterstitials();\n baseVideo.requestVideoFrameCallback(videoFrameCallback);\n };\n baseVideo.requestVideoFrameCallback(videoFrameCallback);\n } else {\n this.timeUpdateTimer_.tickEvery(/* seconds= */ 0.025);\n }\n\n /** @private {shaka.util.Timer} */\n this.pollTimer_ = new shaka.util.Timer(async () => {\n if (this.interstitials_.size && this.lastTime_ != null) {\n const currentLoadMode = this.basePlayer_.getLoadMode();\n if (currentLoadMode == shaka.Player.LoadMode.DESTROYED ||\n currentLoadMode == shaka.Player.LoadMode.NOT_LOADED) {\n return;\n }\n let cuepointsChanged = false;\n const interstitials = Array.from(this.interstitials_);\n const seekRange = this.basePlayer_.seekRange();\n for (const interstitial of interstitials) {\n if (interstitial == this.lastPlayedAd_) {\n continue;\n }\n const comparisonTime = interstitial.endTime || interstitial.startTime;\n if ((seekRange.start - comparisonTime) >= 1) {\n if (this.preloadManagerInterstitials_.has(interstitial)) {\n const preloadManager =\n // eslint-disable-next-line no-await-in-loop\n await this.preloadManagerInterstitials_.get(interstitial);\n if (preloadManager) {\n preloadManager.destroy();\n }\n this.preloadManagerInterstitials_.delete(interstitial);\n }\n const interstitialId = JSON.stringify(interstitial);\n if (this.interstitialIds_.has(interstitialId)) {\n this.interstitialIds_.delete(interstitialId);\n }\n this.interstitials_.delete(interstitial);\n cuepointsChanged = true;\n } else {\n const difference = interstitial.startTime - this.lastTime_;\n if (difference > 0 && difference <= 10) {\n if (!this.preloadManagerInterstitials_.has(interstitial)) {\n this.preloadManagerInterstitials_.set(\n interstitial, this.player_.preload(\n interstitial.uri,\n /* startTime= */ null,\n interstitial.mimeType || undefined));\n }\n }\n }\n }\n if (cuepointsChanged) {\n this.cuepointsChanged_();\n }\n }\n }).tickEvery(/* seconds= */ 1);\n }\n\n /**\n * Called by the AdManager to provide an updated configuration any time it\n * changes.\n *\n * @param {shaka.extern.AdsConfiguration} config\n */\n configure(config) {\n this.config_ = config;\n this.determineIfUsingBaseVideo_();\n }\n\n /**\n * @private\n */\n determineIfUsingBaseVideo_() {\n if (!this.adContainer_ || !this.config_ || this.playingAd_) {\n return;\n }\n let supportsMultipleMediaElements =\n this.config_.supportsMultipleMediaElements;\n const video = /** @type {HTMLVideoElement} */(this.baseVideo_);\n if (video.webkitSupportsFullscreen && video.webkitDisplayingFullscreen) {\n supportsMultipleMediaElements = false;\n }\n if (this.usingBaseVideo_ != supportsMultipleMediaElements) {\n return;\n }\n this.usingBaseVideo_ = !supportsMultipleMediaElements;\n if (this.usingBaseVideo_) {\n this.video_ = this.baseVideo_;\n if (this.adVideo_) {\n if (this.adVideo_.parentElement) {\n this.adContainer_.removeChild(this.adVideo_);\n }\n this.adVideo_ = null;\n }\n } else {\n if (!this.adVideo_) {\n this.adVideo_ = this.createMediaElement_();\n }\n this.video_ = this.adVideo_;\n }\n }\n\n\n /**\n * Resets the Interstitial manager and removes any continuous polling.\n */\n stop() {\n if (this.adEventManager_) {\n this.adEventManager_.removeAll();\n }\n this.interstitialIds_.clear();\n this.interstitials_.clear();\n this.player_.destroyAllPreloads();\n this.preloadManagerInterstitials_.clear();\n this.player_.detach();\n this.playingAd_ = false;\n this.lastTime_ = null;\n this.lastPlayedAd_ = null;\n }\n\n /** @override */\n release() {\n this.stop();\n if (this.eventManager_) {\n this.eventManager_.release();\n }\n if (this.adEventManager_) {\n this.adEventManager_.release();\n }\n if (this.adContainer_) {\n shaka.util.Dom.removeAllChildren(this.adContainer_);\n }\n if (this.timeUpdateTimer_) {\n this.timeUpdateTimer_.stop();\n this.timeUpdateTimer_ = null;\n }\n if (this.pollTimer_) {\n this.pollTimer_.stop();\n this.pollTimer_ = null;\n }\n this.player_.destroy();\n }\n\n\n /**\n * @param {shaka.extern.HLSInterstitial} hlsInterstitial\n */\n async addMetadata(hlsInterstitial) {\n this.updatePlayerConfig_();\n const adInterstitials = await this.getInterstitialsInfo_(hlsInterstitial);\n if (adInterstitials.length) {\n this.addInterstitials(adInterstitials);\n } else {\n shaka.log.alwaysWarn('Unsupported HLS interstitial', hlsInterstitial);\n }\n }\n\n /**\n * @param {shaka.extern.TimelineRegionInfo} region\n */\n addRegion(region) {\n let alternativeMPDUri;\n let alternativeMPDmode;\n for (const node of region.eventNode.children) {\n if (node.tagName == 'AlternativeMPD') {\n const uri = node.attributes['uri'];\n const mode = node.attributes['mode'];\n if (uri) {\n alternativeMPDUri = uri;\n alternativeMPDmode = mode;\n break;\n }\n }\n }\n if (!alternativeMPDUri) {\n shaka.log.alwaysWarn('Unsupported MPD alternate', region);\n return;\n }\n const isReplace = alternativeMPDmode == 'replace';\n const isInsert = alternativeMPDmode == 'insert';\n if (!isReplace && !isInsert) {\n shaka.log.warning('Unsupported MPD alternate', region);\n return;\n }\n\n /** @type {!shaka.extern.AdInterstitial} */\n const interstitial = {\n id: region.id,\n startTime: region.startTime,\n endTime: region.endTime,\n uri: alternativeMPDUri,\n mimeType: null,\n isSkippable: false,\n skipOffset: null,\n skipFor: null,\n canJump: true,\n resumeOffset: isInsert ? 0 : null,\n playoutLimit: null,\n once: false,\n pre: false,\n post: false,\n timelineRange: isReplace && !isInsert,\n };\n this.addInterstitials([interstitial]);\n }\n\n /**\n * @param {string} url\n * @return {!Promise}\n */\n async addAdUrlInterstitial(url) {\n const NetworkingEngine = shaka.net.NetworkingEngine;\n const context = {\n type: NetworkingEngine.AdvancedRequestType.INTERSTITIAL_AD_URL,\n };\n const responseData = await this.makeAdRequest_(url, context);\n const data = shaka.util.TXml.parseXml(responseData, 'VAST,vmap:VMAP');\n if (!data) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.ADS,\n shaka.util.Error.Code.VAST_INVALID_XML);\n }\n let interstitials = [];\n if (data.tagName == 'VAST') {\n interstitials = shaka.ads.Utils.parseVastToInterstitials(\n data, this.lastTime_);\n } else if (data.tagName == 'vmap:VMAP') {\n for (const ad of shaka.ads.Utils.parseVMAP(data)) {\n // eslint-disable-next-line no-await-in-loop\n const vastResponseData = await this.makeAdRequest_(ad.uri, context);\n const vast = shaka.util.TXml.parseXml(vastResponseData, 'VAST');\n if (!vast) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.ADS,\n shaka.util.Error.Code.VAST_INVALID_XML);\n }\n interstitials.push(...shaka.ads.Utils.parseVastToInterstitials(\n vast, ad.time));\n }\n }\n this.addInterstitials(interstitials);\n }\n\n\n /**\n * @param {!Array.} interstitials\n */\n addInterstitials(interstitials) {\n let cuepointsChanged = false;\n for (const interstitial of interstitials) {\n const interstitialId = interstitial.id || JSON.stringify(interstitial);\n if (this.interstitialIds_.has(interstitialId)) {\n continue;\n }\n cuepointsChanged = true;\n this.interstitialIds_.add(interstitialId);\n this.interstitials_.add(interstitial);\n let shouldPreload = false;\n if (interstitial.pre && this.lastTime_ == null) {\n shouldPreload = true;\n } else if (interstitial.startTime == 0 && !interstitial.canJump) {\n shouldPreload = true;\n } else if (this.lastTime_ != null) {\n const difference = interstitial.startTime - this.lastTime_;\n if (difference > 0 && difference <= 10) {\n shouldPreload = true;\n }\n }\n if (shouldPreload) {\n if (!this.preloadManagerInterstitials_.has(interstitial)) {\n this.preloadManagerInterstitials_.set(\n interstitial, this.player_.preload(\n interstitial.uri,\n /* startTime= */ null,\n interstitial.mimeType || undefined));\n }\n }\n }\n if (cuepointsChanged) {\n this.cuepointsChanged_();\n }\n }\n\n /**\n * @return {!HTMLMediaElement}\n * @private\n */\n createMediaElement_() {\n const video = /** @type {!HTMLMediaElement} */(\n document.createElement(this.baseVideo_.tagName));\n video.autoplay = true;\n video.style.position = 'absolute';\n video.style.top = '0';\n video.style.left = '0';\n video.style.width = '100%';\n video.style.height = '100%';\n video.style.backgroundColor = 'rgb(0, 0, 0)';\n video.setAttribute('playsinline', '');\n return video;\n }\n\n\n /**\n * @param {boolean=} needPreRoll\n * @param {?number=} numberToSkip\n * @return {?shaka.extern.AdInterstitial}\n * @private\n */\n getCurrentInterstitial_(needPreRoll = false, numberToSkip = null) {\n let skipped = 0;\n let currentInterstitial = null;\n if (this.interstitials_.size && this.lastTime_ != null) {\n const isEnded = this.baseVideo_.ended;\n const interstitials = Array.from(this.interstitials_).sort((a, b) => {\n return b.startTime - a.startTime;\n });\n const roundDecimals = (number) => {\n return Math.round(number * 1000) / 1000;\n };\n let interstitialsToCheck = interstitials;\n if (needPreRoll) {\n interstitialsToCheck = interstitials.filter((i) => i.pre);\n } else if (isEnded) {\n interstitialsToCheck = interstitials.filter((i) => i.post);\n } else {\n interstitialsToCheck = interstitials.filter((i) => !i.pre && !i.post);\n }\n for (const interstitial of interstitialsToCheck) {\n let isValid = false;\n if (needPreRoll) {\n isValid = interstitial.pre;\n } else if (isEnded) {\n isValid = interstitial.post;\n } else if (!interstitial.pre && !interstitial.post) {\n const difference =\n this.lastTime_ - roundDecimals(interstitial.startTime);\n if (difference > 0 &&\n (difference <= 1 || !interstitial.canJump)) {\n if (numberToSkip == null && this.lastPlayedAd_ &&\n !this.lastPlayedAd_.pre && !this.lastPlayedAd_.post &&\n this.lastPlayedAd_.startTime >= interstitial.startTime) {\n isValid = false;\n } else {\n isValid = true;\n }\n }\n }\n if (isValid && (!this.lastPlayedAd_ ||\n interstitial.startTime >= this.lastPlayedAd_.startTime)) {\n if (skipped == (numberToSkip || 0)) {\n currentInterstitial = interstitial;\n } else if (currentInterstitial && !interstitial.canJump) {\n const currentStartTime =\n roundDecimals(currentInterstitial.startTime);\n const newStartTime =\n roundDecimals(interstitial.startTime);\n if (newStartTime - currentStartTime > 0.001) {\n currentInterstitial = interstitial;\n skipped = 0;\n }\n }\n skipped++;\n }\n }\n }\n return currentInterstitial;\n }\n\n\n /**\n * @param {shaka.extern.AdInterstitial} interstitial\n * @param {number} sequenceLength\n * @param {number} adPosition\n * @param {number} initialTime the clock time the ad started at\n * @param {number=} oncePlayed\n * @private\n */\n async setupAd_(interstitial, sequenceLength, adPosition, initialTime,\n oncePlayed = 0) {\n this.determineIfUsingBaseVideo_();\n goog.asserts.assert(this.video_, 'Must have video');\n\n this.lastPlayedAd_ = interstitial;\n\n shaka.log.info('Starting interstitial',\n interstitial.startTime, 'at', this.lastTime_);\n\n const startTime = Date.now();\n\n if (!this.video_.parentElement && this.adContainer_) {\n this.adContainer_.appendChild(this.video_);\n }\n\n if (adPosition == 1 && sequenceLength == 1) {\n sequenceLength = Array.from(this.interstitials_).filter((i) => {\n if (interstitial.pre) {\n return i.pre == interstitial.pre;\n } else if (interstitial.post) {\n return i.post == interstitial.post;\n }\n return Math.abs(i.startTime - interstitial.startTime) < 0.001;\n }).length;\n }\n\n if (interstitial.once) {\n oncePlayed++;\n this.interstitials_.delete(interstitial);\n this.cuepointsChanged_();\n }\n this.playingAd_ = true;\n\n if (this.usingBaseVideo_ && adPosition == 1) {\n this.onEvent_(new shaka.util.FakeEvent(\n shaka.ads.Utils.AD_CONTENT_PAUSE_REQUESTED,\n (new Map()).set('saveLivePosition', true)));\n const detachBasePlayerPromise = new shaka.util.PublicPromise();\n const checkState = async (e) => {\n if (e['state'] == 'detach') {\n if (shaka.util.Platform.isSmartTV()) {\n await new Promise(\n (resolve) => new shaka.util.Timer(resolve).tickAfter(0.1));\n }\n detachBasePlayerPromise.resolve();\n this.adEventManager_.unlisten(\n this.basePlayer_, 'onstatechange', checkState);\n }\n };\n this.adEventManager_.listen(\n this.basePlayer_, 'onstatechange', checkState);\n await detachBasePlayerPromise;\n }\n if (!this.usingBaseVideo_) {\n this.baseVideo_.pause();\n if (interstitial.resumeOffset != null &&\n interstitial.resumeOffset != 0) {\n this.baseVideo_.currentTime += interstitial.resumeOffset;\n }\n }\n\n let unloadingInterstitial = false;\n /** @type {?shaka.util.Timer} */\n let playoutLimitTimer = null;\n\n const updateBaseVideoTime = () => {\n if (!this.usingBaseVideo_) {\n if (interstitial.resumeOffset == null) {\n if (interstitial.timelineRange && interstitial.endTime &&\n interstitial.endTime != Infinity) {\n if (this.baseVideo_.currentTime != interstitial.endTime) {\n this.baseVideo_.currentTime = interstitial.endTime;\n }\n } else {\n const now = Date.now();\n this.baseVideo_.currentTime += (now - initialTime) / 1000;\n initialTime = now;\n }\n }\n }\n };\n\n const basicTask = async () => {\n updateBaseVideoTime();\n if (playoutLimitTimer) {\n playoutLimitTimer.stop();\n }\n goog.asserts.assert(typeof(oncePlayed) == 'number',\n 'Should be an number!');\n // Optimization to avoid returning to main content when there is another\n // interstitial below.\n const nextCurrentInterstitial = this.getCurrentInterstitial_(\n interstitial.pre, adPosition - oncePlayed);\n if (nextCurrentInterstitial) {\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_STOPPED));\n this.adEventManager_.removeAll();\n this.setupAd_(nextCurrentInterstitial, sequenceLength,\n ++adPosition, initialTime, oncePlayed);\n } else {\n if (interstitial.post) {\n this.lastTime_ = null;\n this.lastPlayedAd_ = null;\n }\n if (this.usingBaseVideo_) {\n await this.player_.detach();\n } else {\n await this.player_.unload();\n }\n if (this.usingBaseVideo_) {\n let offset = interstitial.resumeOffset;\n if (offset == null) {\n if (interstitial.timelineRange && interstitial.endTime &&\n interstitial.endTime != Infinity) {\n offset = interstitial.endTime - (this.lastTime_ || 0);\n } else {\n offset = (Date.now() - initialTime) / 1000;\n }\n }\n this.onEvent_(new shaka.util.FakeEvent(\n shaka.ads.Utils.AD_CONTENT_RESUME_REQUESTED,\n (new Map()).set('offset', offset)));\n }\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_STOPPED));\n this.adEventManager_.removeAll();\n this.playingAd_ = false;\n if (!this.usingBaseVideo_) {\n updateBaseVideoTime();\n if (!this.baseVideo_.ended) {\n this.baseVideo_.play();\n }\n } else {\n this.cuepointsChanged_();\n }\n this.determineIfUsingBaseVideo_();\n }\n };\n const error = async (e) => {\n if (unloadingInterstitial) {\n return;\n }\n unloadingInterstitial = true;\n this.onEvent_(new shaka.util.FakeEvent(shaka.ads.Utils.AD_ERROR,\n (new Map()).set('originalEvent', e)));\n await basicTask();\n };\n const complete = async () => {\n if (unloadingInterstitial) {\n return;\n }\n unloadingInterstitial = true;\n await basicTask();\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_COMPLETE));\n };\n const onSkip = async () => {\n if (unloadingInterstitial) {\n return;\n }\n unloadingInterstitial = true;\n this.onEvent_(new shaka.util.FakeEvent(shaka.ads.Utils.AD_SKIPPED));\n await basicTask();\n };\n\n const ad = new shaka.ads.InterstitialAd(this.video_,\n interstitial.isSkippable, interstitial.skipOffset,\n interstitial.skipFor, onSkip, sequenceLength, adPosition,\n !this.usingBaseVideo_);\n if (!this.usingBaseVideo_) {\n ad.setMuted(this.baseVideo_.muted);\n ad.setVolume(this.baseVideo_.volume);\n }\n\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_STARTED,\n (new Map()).set('ad', ad)));\n\n let prevCanSkipNow = ad.canSkipNow();\n if (prevCanSkipNow) {\n this.onEvent_(new shaka.util.FakeEvent(\n shaka.ads.Utils.AD_SKIP_STATE_CHANGED));\n }\n this.adEventManager_.listenOnce(this.player_, 'error', error);\n this.adEventManager_.listen(this.video_, 'timeupdate', () => {\n const duration = this.video_.duration;\n if (!duration) {\n return;\n }\n const currentCanSkipNow = ad.canSkipNow();\n if (prevCanSkipNow != currentCanSkipNow &&\n ad.getRemainingTime() > 0 && ad.getDuration() > 0) {\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_SKIP_STATE_CHANGED));\n }\n prevCanSkipNow = currentCanSkipNow;\n });\n this.adEventManager_.listenOnce(this.player_, 'firstquartile', () => {\n updateBaseVideoTime();\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_FIRST_QUARTILE));\n });\n this.adEventManager_.listenOnce(this.player_, 'midpoint', () => {\n updateBaseVideoTime();\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_MIDPOINT));\n });\n this.adEventManager_.listenOnce(this.player_, 'thirdquartile', () => {\n updateBaseVideoTime();\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_THIRD_QUARTILE));\n });\n this.adEventManager_.listenOnce(this.player_, 'complete', complete);\n this.adEventManager_.listen(this.video_, 'play', () => {\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_RESUMED));\n });\n this.adEventManager_.listen(this.video_, 'pause', () => {\n // playRangeEnd in src= causes the ended event not to be fired when that\n // position is reached, instead pause event is fired.\n const currentConfig = this.player_.getConfiguration();\n if (this.video_.currentTime >= currentConfig.playRangeEnd) {\n complete();\n return;\n }\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_PAUSED));\n });\n this.adEventManager_.listen(this.video_, 'volumechange', () => {\n if (this.video_.muted) {\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_MUTED));\n } else {\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_VOLUME_CHANGED));\n }\n });\n try {\n this.updatePlayerConfig_();\n if (interstitial.startTime && interstitial.endTime &&\n interstitial.endTime != Infinity &&\n interstitial.startTime != interstitial.endTime) {\n const duration = interstitial.endTime - interstitial.startTime;\n if (duration > 0) {\n this.player_.configure('playRangeEnd', duration);\n }\n }\n if (interstitial.playoutLimit) {\n playoutLimitTimer = new shaka.util.Timer(() => {\n ad.skip();\n }).tickAfter(interstitial.playoutLimit);\n this.player_.configure('playRangeEnd', interstitial.playoutLimit);\n }\n await this.player_.attach(this.video_);\n if (this.preloadManagerInterstitials_.has(interstitial)) {\n const preloadManager =\n await this.preloadManagerInterstitials_.get(interstitial);\n this.preloadManagerInterstitials_.delete(interstitial);\n if (preloadManager) {\n await this.player_.load(preloadManager);\n } else {\n await this.player_.load(\n interstitial.uri,\n /* startTime= */ null,\n interstitial.mimeType || undefined);\n }\n } else {\n await this.player_.load(\n interstitial.uri,\n /* startTime= */ null,\n interstitial.mimeType || undefined);\n }\n if (interstitial.playoutLimit) {\n if (playoutLimitTimer) {\n playoutLimitTimer.stop();\n }\n playoutLimitTimer = new shaka.util.Timer(() => {\n ad.skip();\n }).tickAfter(interstitial.playoutLimit);\n }\n const loadTime = (Date.now() - startTime) / 1000;\n this.onEvent_(new shaka.util.FakeEvent(shaka.ads.Utils.ADS_LOADED,\n (new Map()).set('loadTime', loadTime)));\n if (this.usingBaseVideo_) {\n this.baseVideo_.play();\n }\n } catch (e) {\n error(e);\n }\n }\n\n\n /**\n * @param {shaka.extern.HLSInterstitial} hlsInterstitial\n * @return {!Promise.>}\n * @private\n */\n async getInterstitialsInfo_(hlsInterstitial) {\n const interstitialsAd = [];\n if (!hlsInterstitial) {\n return interstitialsAd;\n }\n const assetUri = hlsInterstitial.values.find((v) => v.key == 'X-ASSET-URI');\n const assetList =\n hlsInterstitial.values.find((v) => v.key == 'X-ASSET-LIST');\n if (!assetUri && !assetList) {\n return interstitialsAd;\n }\n let id = null;\n const hlsInterstitialId = hlsInterstitial.values.find((v) => v.key == 'ID');\n if (hlsInterstitialId) {\n id = /** @type {string} */(hlsInterstitialId.data);\n }\n const startTime = id == null ?\n Math.floor(hlsInterstitial.startTime * 10) / 10:\n hlsInterstitial.startTime;\n let endTime = hlsInterstitial.endTime;\n if (hlsInterstitial.endTime && hlsInterstitial.endTime != Infinity &&\n typeof(hlsInterstitial.endTime) == 'number') {\n endTime = id == null ?\n Math.floor(hlsInterstitial.endTime * 10) / 10:\n hlsInterstitial.endTime;\n }\n const restrict = hlsInterstitial.values.find((v) => v.key == 'X-RESTRICT');\n let isSkippable = true;\n let canJump = true;\n if (restrict && restrict.data) {\n const data = /** @type {string} */(restrict.data);\n isSkippable = !data.includes('SKIP');\n canJump = !data.includes('JUMP');\n }\n let skipOffset = isSkippable ? 0 : null;\n const enableSkipAfter =\n hlsInterstitial.values.find((v) => v.key == 'X-ENABLE-SKIP-AFTER');\n if (enableSkipAfter) {\n const enableSkipAfterString = /** @type {string} */(enableSkipAfter.data);\n skipOffset = parseFloat(enableSkipAfterString);\n if (isNaN(skipOffset)) {\n skipOffset = isSkippable ? 0 : null;\n }\n }\n let skipFor = null;\n const enableSkipFor =\n hlsInterstitial.values.find((v) => v.key == 'X-ENABLE-SKIP-FOR');\n if (enableSkipFor) {\n const enableSkipForString = /** @type {string} */(enableSkipFor.data);\n skipFor = parseFloat(enableSkipForString);\n if (isNaN(skipOffset)) {\n skipFor = null;\n }\n }\n let resumeOffset = null;\n const resume =\n hlsInterstitial.values.find((v) => v.key == 'X-RESUME-OFFSET');\n if (resume) {\n const resumeOffsetString = /** @type {string} */(resume.data);\n resumeOffset = parseFloat(resumeOffsetString);\n if (isNaN(resumeOffset)) {\n resumeOffset = null;\n }\n }\n let playoutLimit = null;\n const playout =\n hlsInterstitial.values.find((v) => v.key == 'X-PLAYOUT-LIMIT');\n if (playout) {\n const playoutLimitString = /** @type {string} */(playout.data);\n playoutLimit = parseFloat(playoutLimitString);\n if (isNaN(playoutLimit)) {\n playoutLimit = null;\n }\n }\n let once = false;\n let pre = false;\n let post = false;\n const cue = hlsInterstitial.values.find((v) => v.key == 'CUE');\n if (cue) {\n const data = /** @type {string} */(cue.data);\n once = data.includes('ONCE');\n pre = data.includes('PRE');\n post = data.includes('POST');\n }\n let timelineRange = false;\n const timelineOccupies =\n hlsInterstitial.values.find((v) => v.key == 'X-TIMELINE-OCCUPIES');\n if (timelineOccupies) {\n const data = /** @type {string} */(timelineOccupies.data);\n timelineRange = data.includes('RANGE');\n } else if (!resume && this.basePlayer_.isLive()) {\n timelineRange = !pre && !post;\n }\n if (assetUri) {\n const uri = /** @type {string} */(assetUri.data);\n if (!uri) {\n return interstitialsAd;\n }\n interstitialsAd.push({\n id,\n startTime,\n endTime,\n uri,\n mimeType: null,\n isSkippable,\n skipOffset,\n skipFor,\n canJump,\n resumeOffset,\n playoutLimit,\n once,\n pre,\n post,\n timelineRange,\n });\n } else if (assetList) {\n const uri = /** @type {string} */(assetList.data);\n if (!uri) {\n return interstitialsAd;\n }\n try {\n const NetworkingEngine = shaka.net.NetworkingEngine;\n const context = {\n type: NetworkingEngine.AdvancedRequestType.INTERSTITIAL_ASSET_LIST,\n };\n const responseData = await this.makeAdRequest_(uri, context);\n const data = shaka.util.StringUtils.fromUTF8(responseData);\n const dataAsJson =\n /** @type {!shaka.ads.InterstitialAdManager.AssetsList} */ (\n JSON.parse(data));\n const skipControl = dataAsJson['SKIP-CONTROL'];\n if (skipControl) {\n const enableSkipAfterValue = skipControl['ENABLE-SKIP-AFTER'];\n if ((typeof enableSkipAfterValue) == 'number') {\n skipOffset = parseFloat(enableSkipAfterValue);\n if (isNaN(enableSkipAfterValue)) {\n skipOffset = isSkippable ? 0 : null;\n }\n }\n const enableSkipForValue = skipControl['ENABLE-SKIP-FOR'];\n if ((typeof enableSkipForValue) == 'number') {\n skipFor = parseFloat(enableSkipForValue);\n if (isNaN(enableSkipForValue)) {\n skipFor = null;\n }\n }\n }\n for (let i = 0; i < dataAsJson['ASSETS'].length; i++) {\n const asset = dataAsJson['ASSETS'][i];\n if (asset['URI']) {\n interstitialsAd.push({\n id: id + '_asset_' + i,\n startTime,\n endTime,\n uri: asset['URI'],\n mimeType: null,\n isSkippable,\n skipOffset,\n skipFor,\n canJump,\n resumeOffset,\n playoutLimit,\n once,\n pre,\n post,\n timelineRange,\n });\n }\n }\n } catch (e) {\n // Ignore errors\n }\n }\n return interstitialsAd;\n }\n\n\n /**\n * @private\n */\n cuepointsChanged_() {\n /** @type {!Array.} */\n const cuePoints = [];\n for (const interstitial of this.interstitials_) {\n /** @type {shaka.extern.AdCuePoint} */\n const shakaCuePoint = {\n start: interstitial.startTime,\n end: null,\n };\n if (interstitial.pre) {\n shakaCuePoint.start = 0;\n shakaCuePoint.end = null;\n } else if (interstitial.post) {\n shakaCuePoint.start = -1;\n shakaCuePoint.end = null;\n } else if (interstitial.timelineRange) {\n shakaCuePoint.end = interstitial.endTime;\n }\n const isValid = !cuePoints.find((c) => {\n return shakaCuePoint.start == c.start && shakaCuePoint.end == c.end;\n });\n if (isValid) {\n cuePoints.push(shakaCuePoint);\n }\n }\n\n this.onEvent_(new shaka.util.FakeEvent(\n shaka.ads.Utils.CUEPOINTS_CHANGED,\n (new Map()).set('cuepoints', cuePoints)));\n }\n\n\n /**\n * @private\n */\n updatePlayerConfig_() {\n goog.asserts.assert(this.player_, 'Must have player');\n goog.asserts.assert(this.basePlayer_, 'Must have base player');\n this.player_.configure(this.basePlayer_.getNonDefaultConfiguration());\n this.player_.configure('ads.disableHLSInterstitial', true);\n this.player_.configure('ads.disableDASHInterstitial', true);\n const netEngine = this.player_.getNetworkingEngine();\n goog.asserts.assert(netEngine, 'Need networking engine');\n netEngine.clearAllRequestFilters();\n netEngine.clearAllResponseFilters();\n this.basePlayer_.getNetworkingEngine().copyFiltersInto(netEngine);\n }\n\n /**\n * @param {string} url\n * @param {shaka.extern.RequestContext=} context\n * @return {!Promise.}\n * @private\n */\n async makeAdRequest_(url, context) {\n const type = shaka.net.NetworkingEngine.RequestType.ADS;\n const request = shaka.net.NetworkingEngine.makeRequest(\n [url],\n shaka.net.NetworkingEngine.defaultRetryParameters());\n const op = this.basePlayer_.getNetworkingEngine()\n .request(type, request, context);\n const response = await op.promise;\n return response.data;\n }\n};\n\n\n/**\n * @typedef {{\n * ASSETS: !Array.,\n * SKIP-CONTROL: ?shaka.ads.InterstitialAdManager.SkipControl\n * }}\n *\n * @property {!Array.} ASSETS\n * @property {shaka.ads.InterstitialAdManager.SkipControl} SKIP-CONTROL\n */\nshaka.ads.InterstitialAdManager.AssetsList;\n\n\n/**\n * @typedef {{\n * URI: string\n * }}\n *\n * @property {string} URI\n */\nshaka.ads.InterstitialAdManager.Asset;\n\n\n/**\n * @typedef {{\n * ENABLE-SKIP-AFTER: number,\n * ENABLE-SKIP-FOR: number\n * }}\n *\n * @property {number} ENABLE-SKIP-AFTER\n * @property {number} ENABLE-SKIP-FOR\n */\nshaka.ads.InterstitialAdManager.SkipControl;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n\ngoog.provide('shaka.ads.MediaTailorAd');\n\ngoog.require('shaka.util.TextParser');\n\n/**\n * @implements {shaka.extern.IAd}\n * @export\n */\nshaka.ads.MediaTailorAd = class {\n /**\n * @param {mediaTailor.Ad} mediaTailorAd\n * @param {number} adPosition\n * @param {number} totalAds\n * @param {HTMLMediaElement} video\n */\n constructor(mediaTailorAd, adPosition, totalAds, isLinear, video) {\n /** @private {?mediaTailor.Ad} */\n this.ad_ = mediaTailorAd;\n\n /** @private {?number} */\n this.skipOffset_ = shaka.util.TextParser.parseTime(this.ad_.skipOffset);\n\n /** @private {HTMLMediaElement} */\n this.video_ = video;\n\n /** @private {?number} */\n this.adPosition_ = adPosition;\n\n /** @private {?number} */\n this.totalAds_ = totalAds;\n\n /** @private {boolean} */\n this.isLinear_ = isLinear;\n\n /** @private {boolean} */\n this.isSkipped_ = false;\n }\n\n /**\n * @override\n * @export\n */\n needsSkipUI() {\n return true;\n }\n\n /**\n * @override\n * @export\n */\n isClientRendering() {\n return false;\n }\n\n /**\n * @override\n * @export\n */\n isUsingAnotherMediaElement() {\n return false;\n }\n\n /**\n * @override\n * @export\n */\n getDuration() {\n return this.ad_.durationInSeconds;\n }\n\n /**\n * @override\n * @export\n */\n getMinSuggestedDuration() {\n return this.getDuration();\n }\n\n /**\n * @override\n * @export\n */\n getRemainingTime() {\n const endTime = this.ad_.startTimeInSeconds + this.ad_.durationInSeconds;\n return endTime - this.video_.currentTime;\n }\n\n /**\n * @override\n * @export\n */\n isPaused() {\n return this.video_.paused;\n }\n\n /**\n * @override\n * @export\n */\n isSkippable() {\n if (typeof this.skipOffset_ == 'number') {\n return true;\n }\n return false;\n }\n\n /**\n * @override\n * @export\n */\n getTimeUntilSkippable() {\n if (typeof this.skipOffset_ != 'number') {\n return this.getRemainingTime();\n }\n const canSkipIn =\n this.getRemainingTime() + this.skipOffset_ - this.getDuration();\n return Math.max(canSkipIn, 0);\n }\n\n /**\n * @override\n * @export\n */\n canSkipNow() {\n return this.getTimeUntilSkippable() == 0;\n }\n\n /**\n * @override\n * @export\n */\n skip() {\n this.isSkipped_ = true;\n this.video_.currentTime += this.getRemainingTime();\n }\n\n /**\n * @override\n * @export\n */\n pause() {\n return this.video_.pause();\n }\n\n /**\n * @override\n * @export\n */\n play() {\n return this.video_.play();\n }\n\n\n /**\n * @override\n * @export\n */\n getVolume() {\n return this.video_.volume;\n }\n\n /**\n * @override\n * @export\n */\n setVolume(volume) {\n this.video_.volume = volume;\n }\n\n /**\n * @override\n * @export\n */\n isMuted() {\n return this.video_.muted;\n }\n\n /**\n * @override\n * @export\n */\n isLinear() {\n return this.isLinear_;\n }\n\n /**\n * @override\n * @export\n */\n resize(width, height) {\n // Nothing\n }\n\n /**\n * @override\n * @export\n */\n setMuted(muted) {\n this.video_.muted = muted;\n }\n\n\n /**\n * @override\n * @export\n */\n getSequenceLength() {\n if (!this.totalAds_) {\n return 1;\n }\n return this.totalAds_;\n }\n\n /**\n * @override\n * @export\n */\n getPositionInSequence() {\n if (!this.adPosition_) {\n return 1;\n }\n return this.adPosition_;\n }\n\n /**\n * @override\n * @export\n */\n getTitle() {\n return this.ad_.adTitle;\n }\n\n /**\n * @override\n * @export\n */\n getDescription() {\n return '';\n }\n\n /**\n * @override\n * @export\n */\n getVastMediaBitrate() {\n return 0;\n }\n\n /**\n * @override\n * @export\n */\n getVastMediaHeight() {\n return 0;\n }\n\n /**\n * @override\n * @export\n */\n getVastMediaWidth() {\n return 0;\n }\n\n /**\n * @override\n * @export\n */\n getAdId() {\n return this.ad_.adId;\n }\n\n /**\n * @override\n * @export\n */\n getCreativeAdId() {\n return this.ad_.creativeId;\n }\n\n /**\n * @override\n * @export\n */\n getAdvertiserName() {\n return '';\n }\n\n /**\n * @override\n * @export\n */\n getMediaUrl() {\n return null;\n }\n\n /**\n * @override\n * @export\n */\n getTimeOffset() {\n return 0;\n }\n\n /**\n * @override\n * @export\n */\n getPodIndex() {\n return 0;\n }\n\n /**\n * @override\n * @export\n */\n release() {\n this.ad_ = null;\n this.video_ = null;\n this.adPosition_ = null;\n this.totalAds_ = null;\n }\n\n /**\n * @return {boolean}\n */\n isSkipped() {\n return this.isSkipped_;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n\ngoog.provide('shaka.ads.MediaTailorAdManager');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.ads.MediaTailorAd');\ngoog.require('shaka.ads.Utils');\ngoog.require('shaka.log');\ngoog.require('shaka.net.NetworkingEngine');\ngoog.require('goog.Uri');\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.IReleasable');\ngoog.require('shaka.util.PublicPromise');\ngoog.require('shaka.util.StringUtils');\n\n\n/**\n * A class responsible for MediaTailor ad interactions.\n *\n * @implements {shaka.util.IReleasable}\n */\nshaka.ads.MediaTailorAdManager = class {\n /**\n * @param {HTMLElement} adContainer\n * @param {shaka.net.NetworkingEngine} networkingEngine\n * @param {HTMLMediaElement} video\n * @param {function(!shaka.util.FakeEvent)} onEvent\n */\n constructor(adContainer, networkingEngine, video, onEvent) {\n /** @private {HTMLElement} */\n this.adContainer_ = adContainer;\n\n /** @private {shaka.net.NetworkingEngine} */\n this.networkingEngine_ = networkingEngine;\n\n /** @private {HTMLMediaElement} */\n this.video_ = video;\n\n /** @private {?shaka.util.PublicPromise.} */\n this.streamPromise_ = null;\n\n /** @private {number} */\n this.streamRequestStartTime_ = NaN;\n\n /** @private {function(!shaka.util.FakeEvent)} */\n this.onEvent_ = onEvent;\n\n /** @private {boolean} */\n this.isLive_ = false;\n\n /**\n * Time to seek to after an ad if that ad was played as the result of\n * snapback.\n * @private {?number}\n */\n this.snapForwardTime_ = null;\n\n /** @private {!Array.} */\n this.adBreaks_ = [];\n\n /** @private {!Array.} */\n this.playedAds_ = [];\n\n /** @private {?shaka.ads.MediaTailorAd} */\n this.ad_ = null;\n\n /** @private {?mediaTailor.Ad} */\n this.mediaTailorAd_ = null;\n\n /** @private {?mediaTailor.AdBreak} */\n this.mediaTailorAdBreak_ = null;\n\n /** @private {!Map.>} */\n this.staticResources_ = new Map();\n\n /** @private {!Array.<{target: EventTarget, type: string,\n * listener: shaka.util.EventManager.ListenerType}>}\n */\n this.adListeners_ = [];\n\n /** @private {!Array.} */\n this.eventsSent = [];\n\n /** @private {string} */\n this.trackingUrl_ = '';\n\n /** @private {boolean} */\n this.firstTrackingRequest_ = true;\n\n /** @private {string} */\n this.backupUrl_ = '';\n\n /** @private {!Array.} */\n this.currentCuePoints_ = [];\n\n /** @private {shaka.util.EventManager} */\n this.eventManager_ = new shaka.util.EventManager();\n }\n\n /**\n * @param {string} url\n * @param {Object} adsParams\n * @param {string} backupUrl\n * @return {!Promise.}\n */\n streamRequest(url, adsParams, backupUrl) {\n if (this.streamPromise_) {\n return Promise.reject(new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.ADS,\n shaka.util.Error.Code.CURRENT_DAI_REQUEST_NOT_FINISHED));\n }\n\n this.streamPromise_ = new shaka.util.PublicPromise();\n this.requestSessionInfo_(url, adsParams);\n this.backupUrl_ = backupUrl || '';\n\n this.streamRequestStartTime_ = Date.now() / 1000;\n\n return this.streamPromise_;\n }\n\n /**\n * @param {string} url\n */\n addTrackingUrl(url) {\n this.trackingUrl_ = url;\n this.onEvent_(new shaka.util.FakeEvent(shaka.ads.Utils.ADS_LOADED,\n (new Map()).set('loadTime', 0)));\n }\n\n /**\n * Resets the MediaTailor manager and removes any continuous polling.\n */\n stop() {\n for (const listener of this.adListeners_) {\n this.eventManager_.unlisten(\n listener.target, listener.type, listener.listener);\n }\n this.onEnded_();\n this.adListeners_ = [];\n this.eventsSent = [];\n this.trackingUrl_ = '';\n this.firstTrackingRequest_ = true;\n this.backupUrl_ = '';\n this.snapForwardTime_ = null;\n this.adBreaks_ = [];\n this.playedAds_ = [];\n this.staticResources_.clear();\n }\n\n /** @override */\n release() {\n this.stop();\n if (this.eventManager_) {\n this.eventManager_.release();\n }\n }\n\n /**\n * Fired when the manifest is updated\n *\n * @param {boolean} isLive\n */\n onManifestUpdated(isLive) {\n this.isLive_ = isLive;\n if (this.trackingUrl_ != '') {\n this.requestTrackingInfo_(\n this.trackingUrl_, this.firstTrackingRequest_);\n this.firstTrackingRequest_ = false;\n }\n }\n\n /**\n * @return {!Array.}\n */\n getCuePoints() {\n const cuePoints = [];\n for (const adbreak of this.adBreaks_) {\n for (const ad of adbreak.ads) {\n /** @type {!shaka.extern.AdCuePoint} */\n const cuePoint = {\n start: ad.startTimeInSeconds,\n end: ad.startTimeInSeconds + ad.durationInSeconds,\n };\n cuePoints.push(cuePoint);\n }\n }\n return cuePoints;\n }\n\n /**\n * @param {string} url\n * @param {Object} adsParams\n * @private\n */\n async requestSessionInfo_(url, adsParams) {\n const NetworkingEngine = shaka.net.NetworkingEngine;\n const type = NetworkingEngine.RequestType.ADS;\n const context = {\n type: NetworkingEngine.AdvancedRequestType.MEDIATAILOR_SESSION_INFO,\n };\n const request = NetworkingEngine.makeRequest(\n [url],\n NetworkingEngine.defaultRetryParameters());\n request.method = 'POST';\n if (adsParams) {\n const body = JSON.stringify(adsParams);\n request.body = shaka.util.StringUtils.toUTF8(body);\n }\n\n const op = this.networkingEngine_.request(type, request, context);\n try {\n const response = await op.promise;\n const data = shaka.util.StringUtils.fromUTF8(response.data);\n const dataAsJson =\n /** @type {!mediaTailor.SessionResponse} */ (JSON.parse(data));\n if (dataAsJson.manifestUrl && dataAsJson.trackingUrl) {\n const baseUri = new goog.Uri(url);\n const relativeTrackingUri = new goog.Uri(dataAsJson.trackingUrl);\n this.trackingUrl_ = baseUri.resolve(relativeTrackingUri).toString();\n const now = Date.now() / 1000;\n const loadTime = now - this.streamRequestStartTime_;\n this.onEvent_(new shaka.util.FakeEvent(shaka.ads.Utils.ADS_LOADED,\n (new Map()).set('loadTime', loadTime)));\n const relativeManifestUri = new goog.Uri(dataAsJson.manifestUrl);\n this.streamPromise_.resolve(\n baseUri.resolve(relativeManifestUri).toString());\n this.streamPromise_ = null;\n } else {\n throw new Error('Insufficient data from MediaTailor.');\n }\n } catch (e) {\n if (!this.backupUrl_.length) {\n this.streamPromise_.reject('MediaTailor request returned an error ' +\n 'and there was no backup asset uri provided.');\n this.streamPromise_ = null;\n return;\n }\n\n shaka.log.warning('MediaTailor request returned an error. ' +\n 'Falling back to the backup asset uri.');\n this.streamPromise_.resolve(this.backupUrl_);\n this.streamPromise_ = null;\n }\n }\n\n /**\n * @param {string} trackingUrl\n * @param {boolean} firstRequest\n * @private\n */\n async requestTrackingInfo_(trackingUrl, firstRequest) {\n const NetworkingEngine = shaka.net.NetworkingEngine;\n const type = NetworkingEngine.RequestType.ADS;\n const context = {\n type: NetworkingEngine.AdvancedRequestType.MEDIATAILOR_TRACKING_INFO,\n };\n const request = NetworkingEngine.makeRequest(\n [trackingUrl],\n NetworkingEngine.defaultRetryParameters());\n\n const op = this.networkingEngine_.request(type, request, context);\n try {\n const response = await op.promise;\n let cuepoints = [];\n const data = shaka.util.StringUtils.fromUTF8(response.data);\n const dataAsJson =\n /** @type {!mediaTailor.TrackingResponse} */ (JSON.parse(data));\n if (dataAsJson.avails.length > 0) {\n if (JSON.stringify(this.adBreaks_) !=\n JSON.stringify(dataAsJson.avails)) {\n this.adBreaks_ = dataAsJson.avails;\n for (const adbreak of this.adBreaks_) {\n for (const nonLinearAd of adbreak.nonLinearAdsList) {\n for (const nonLinearAdResource of nonLinearAd.nonLinearAdList) {\n this.requestStaticResource_(nonLinearAdResource);\n }\n }\n }\n cuepoints = this.getCuePoints();\n this.onEvent_(new shaka.util.FakeEvent(\n shaka.ads.Utils.CUEPOINTS_CHANGED,\n (new Map()).set('cuepoints', cuepoints)));\n }\n } else {\n if (this.adBreaks_.length) {\n this.onEvent_(new shaka.util.FakeEvent(\n shaka.ads.Utils.CUEPOINTS_CHANGED,\n (new Map()).set('cuepoints', cuepoints)));\n }\n this.onEnded_();\n this.adBreaks_ = [];\n }\n if (firstRequest && (this.isLive_ || cuepoints.length > 0)) {\n this.setupAdBreakListeners_();\n }\n } catch (e) {}\n }\n\n /**\n * @param {mediaTailor.NonLinearAd} nonLinearAd\n * @private\n */\n async requestStaticResource_(nonLinearAd) {\n if (!nonLinearAd.staticResource) {\n return;\n }\n const cacheKey = this.getCacheKeyForNonLinear_(nonLinearAd);\n const staticResource = this.staticResources_.get(cacheKey);\n if (staticResource) {\n return;\n }\n\n const NetworkingEngine = shaka.net.NetworkingEngine;\n const type = NetworkingEngine.RequestType.ADS;\n const context = {\n type: NetworkingEngine.AdvancedRequestType.MEDIATAILOR_STATIC_RESOURCE,\n };\n const request = NetworkingEngine.makeRequest(\n [nonLinearAd.staticResource],\n NetworkingEngine.defaultRetryParameters());\n\n const op = this.networkingEngine_.request(type, request, context);\n try {\n this.staticResources_.set(cacheKey, []);\n const response = await op.promise;\n const data = shaka.util.StringUtils.fromUTF8(response.data);\n const dataAsJson =\n /** @type {!mediaTailorExternalResource.Response} */ (JSON.parse(data));\n const apps = dataAsJson.apps;\n this.staticResources_.set(cacheKey, apps);\n } catch (e) {\n this.staticResources_.delete(cacheKey);\n }\n }\n\n /**\n * @param {mediaTailor.NonLinearAd} nonLinearAd\n * @return {string}\n * @private\n */\n getCacheKeyForNonLinear_(nonLinearAd) {\n return [\n nonLinearAd.adId,\n nonLinearAd.adParameters,\n nonLinearAd.adSystem,\n nonLinearAd.adTitle,\n nonLinearAd.creativeAdId,\n nonLinearAd.creativeId,\n nonLinearAd.creativeSequence,\n nonLinearAd.height,\n nonLinearAd.width,\n nonLinearAd.staticResource,\n ].join('');\n }\n\n /**\n * Setup Ad Break listeners\n *\n * @private\n */\n setupAdBreakListeners_() {\n this.onTimeupdate_();\n if (!this.isLive_) {\n this.checkForSnapback_();\n this.eventManager_.listen(this.video_, 'seeked', () => {\n this.checkForSnapback_();\n });\n this.eventManager_.listen(this.video_, 'ended', () => {\n this.onEnded_();\n });\n }\n this.eventManager_.listen(this.video_, 'timeupdate', () => {\n this.onTimeupdate_();\n });\n }\n\n /**\n * If a seek jumped over the ad break, return to the start of the\n * ad break, then complete the seek after the ad played through.\n *\n * @private\n */\n checkForSnapback_() {\n const currentTime = this.video_.currentTime;\n if (currentTime == 0 || this.snapForwardTime_ != null) {\n return;\n }\n\n let previousAdBreak;\n let previousAd;\n for (const adbreak of this.adBreaks_) {\n for (const ad of adbreak.ads) {\n if (!previousAd) {\n if (ad.startTimeInSeconds < currentTime) {\n previousAd = ad;\n previousAdBreak = adbreak;\n }\n } else if (ad.startTimeInSeconds < currentTime &&\n ad.startTimeInSeconds >\n (previousAd.startTimeInSeconds + previousAd.durationInSeconds)) {\n previousAd = ad;\n previousAdBreak = adbreak;\n break;\n }\n }\n }\n\n // The cue point gets marked as 'played' as soon as the playhead hits it\n // (at the start of an ad), so when we come back to this method as a result\n // of seeking back to the user-selected time, the 'played' flag will be set.\n if (previousAdBreak && previousAd &&\n !this.playedAds_.includes(previousAd.adId)) {\n shaka.log.info('Seeking back to the start of the ad break at ' +\n previousAdBreak.startTimeInSeconds +\n ' and will return to ' + currentTime);\n this.snapForwardTime_ = currentTime;\n this.video_.currentTime = previousAdBreak.startTimeInSeconds;\n }\n }\n\n /**\n * @private\n */\n onAdBreakEnded_() {\n const currentTime = this.video_.currentTime;\n // If the ad break was a result of snapping back (a user seeked over\n // an ad break and was returned to it), seek forward to the point,\n // originally chosen by the user.\n if (this.snapForwardTime_ && this.snapForwardTime_ > currentTime) {\n this.video_.currentTime = this.snapForwardTime_;\n }\n this.snapForwardTime_ = null;\n }\n\n /**\n * @private\n */\n onTimeupdate_() {\n if (!this.video_.duration) {\n // Can't play yet. Ignore.\n return;\n }\n if (!this.ad_ && !this.adBreaks_.length) {\n // No ads\n return;\n }\n const currentTime = this.video_.currentTime;\n let previousAd = false;\n if (this.ad_) {\n previousAd = true;\n goog.asserts.assert(this.mediaTailorAd_, 'Ad should be defined');\n this.sendInProgressEvents_(currentTime, this.mediaTailorAd_);\n const remainingTime = this.ad_.getRemainingTime();\n const duration = this.ad_.getDuration();\n if (this.ad_.canSkipNow() && remainingTime > 0 && duration > 0) {\n this.sendTrackingEvent_(\n shaka.ads.MediaTailorAdManager.SKIP_STATE_CHANGED_);\n }\n if (duration > 0 && (remainingTime <= 0 || remainingTime > duration)) {\n this.onEnded_();\n }\n }\n if (!this.ad_ || !this.ad_.isLinear()) {\n this.checkLinearAds_(currentTime);\n if (!this.ad_) {\n this.checkNonLinearAds_(currentTime);\n }\n if (previousAd && !this.ad_) {\n this.onAdBreakEnded_();\n }\n }\n }\n\n /**\n * @param {number} currentTime\n * @param {mediaTailor.Ad} ad\n * @private\n */\n sendInProgressEvents_(currentTime, ad) {\n const MediaTailorAdManager = shaka.ads.MediaTailorAdManager;\n const firstQuartileTime = ad.startTimeInSeconds +\n 0.25 * ad.durationInSeconds;\n const midpointTime = ad.startTimeInSeconds +\n 0.5 * ad.durationInSeconds;\n const thirdQuartileTime = ad.startTimeInSeconds +\n 0.75 * ad.durationInSeconds;\n if (currentTime >= firstQuartileTime &&\n !this.eventsSent.includes(MediaTailorAdManager.FIRSTQUARTILE_)) {\n this.eventsSent.push(MediaTailorAdManager.FIRSTQUARTILE_);\n this.sendTrackingEvent_(MediaTailorAdManager.FIRSTQUARTILE_);\n } else if (currentTime >= midpointTime &&\n !this.eventsSent.includes(MediaTailorAdManager.MIDPOINT_)) {\n this.eventsSent.push(MediaTailorAdManager.MIDPOINT_);\n this.sendTrackingEvent_(MediaTailorAdManager.MIDPOINT_);\n } else if (currentTime >= thirdQuartileTime &&\n !this.eventsSent.includes(MediaTailorAdManager.THIRDQUARTILE_)) {\n this.eventsSent.push(MediaTailorAdManager.THIRDQUARTILE_);\n this.sendTrackingEvent_(MediaTailorAdManager.THIRDQUARTILE_);\n }\n }\n\n /**\n * @param {number} currentTime\n * @private\n */\n checkLinearAds_(currentTime) {\n const MediaTailorAdManager = shaka.ads.MediaTailorAdManager;\n for (const adbreak of this.adBreaks_) {\n if (this.ad_ && this.ad_.isLinear()) {\n break;\n }\n for (let i = 0; i < adbreak.ads.length; i++) {\n const ad = adbreak.ads[i];\n const startTime = ad.startTimeInSeconds;\n const endTime = ad.startTimeInSeconds + ad.durationInSeconds;\n if (startTime <= currentTime && endTime > currentTime) {\n if (this.playedAds_.includes(ad.adId)) {\n if (this.video_.ended) {\n continue;\n }\n this.video_.currentTime = endTime;\n return;\n }\n this.onEnded_();\n this.mediaTailorAdBreak_ = adbreak;\n this.ad_ = new shaka.ads.MediaTailorAd(\n ad,\n /* adPosition= */ i + 1,\n /* totalAds= */ adbreak.ads.length,\n /* isLinear= */ true,\n this.video_);\n this.mediaTailorAd_ = ad;\n if (i === 0) {\n this.sendTrackingEvent_(MediaTailorAdManager.BREAKSTART_);\n }\n this.setupCurrentAdListeners_();\n break;\n }\n }\n }\n }\n\n /**\n * @param {number} currentTime\n * @private\n */\n checkNonLinearAds_(currentTime) {\n const MediaTailorAdManager = shaka.ads.MediaTailorAdManager;\n for (const adbreak of this.adBreaks_) {\n if (this.ad_) {\n break;\n }\n for (let i = 0; i < adbreak.nonLinearAdsList.length; i++) {\n const ad = adbreak.nonLinearAdsList[i];\n if (!ad.nonLinearAdList.length) {\n continue;\n }\n const startTime = adbreak.startTimeInSeconds;\n const cacheKey = this.getCacheKeyForNonLinear_(ad.nonLinearAdList[0]);\n const staticResource = this.staticResources_.get(cacheKey);\n if (startTime <= currentTime &&\n staticResource && staticResource.length) {\n this.onEnded_();\n this.displayNonLinearAd_(staticResource);\n this.mediaTailorAdBreak_ = adbreak;\n this.ad_ = new shaka.ads.MediaTailorAd(\n ad,\n /* adPosition= */ i + 1,\n /* totalAds= */ adbreak.ads.length,\n /* isLinear= */ false,\n this.video_);\n this.mediaTailorAd_ = ad;\n if (i === 0) {\n this.sendTrackingEvent_(MediaTailorAdManager.BREAKSTART_);\n }\n this.setupCurrentAdListeners_();\n break;\n }\n }\n }\n }\n\n /**\n * @param {!Array.} apps\n * @private\n */\n displayNonLinearAd_(apps) {\n for (const app of apps) {\n if (!app.data.source.length) {\n continue;\n }\n const imageElement = /** @type {!HTMLImageElement} */ (\n document.createElement('img'));\n imageElement.src = app.data.source[0].url;\n imageElement.style.top = (app.placeholder.top || 0) + '%';\n imageElement.style.height = (100 - (app.placeholder.top || 0)) + '%';\n imageElement.style.left = (app.placeholder.left || 0) + '%';\n imageElement.style.maxWidth = (100 - (app.placeholder.left || 0)) + '%';\n imageElement.style.objectFit = 'contain';\n imageElement.style.position = 'absolute';\n this.adContainer_.appendChild(imageElement);\n }\n }\n\n /**\n * @private\n */\n onEnded_() {\n if (this.ad_) {\n // Remove all child nodes\n while (this.adContainer_.lastChild) {\n this.adContainer_.removeChild(this.adContainer_.firstChild);\n }\n if (!this.isLive_) {\n this.playedAds_.push(this.mediaTailorAd_.adId);\n }\n this.removeCurrentAdListeners_(this.ad_.isSkipped());\n const position = this.ad_.getPositionInSequence();\n const totalAdsInBreak = this.ad_.getSequenceLength();\n if (position === totalAdsInBreak) {\n this.sendTrackingEvent_(shaka.ads.MediaTailorAdManager.BREAKEND_);\n }\n this.ad_ = null;\n this.mediaTailorAd_ = null;\n this.mediaTailorAdBreak_ = null;\n }\n }\n\n /**\n * @private\n */\n setupCurrentAdListeners_() {\n const MediaTailorAdManager = shaka.ads.MediaTailorAdManager;\n let needFirstEvents = false;\n if (!this.video_.paused) {\n this.sendTrackingEvent_(MediaTailorAdManager.IMPRESSION_);\n this.sendTrackingEvent_(MediaTailorAdManager.START_);\n } else {\n needFirstEvents = true;\n }\n this.adListeners_.push({\n target: this.video_,\n type: 'volumechange',\n listener: () => {\n if (this.video_.muted) {\n this.sendTrackingEvent_(MediaTailorAdManager.MUTE_);\n }\n },\n });\n this.adListeners_.push({\n target: this.video_,\n type: 'volumechange',\n listener: () => {\n if (!this.video_.muted) {\n this.sendTrackingEvent_(MediaTailorAdManager.UNMUTE_);\n }\n },\n });\n this.adListeners_.push({\n target: this.video_,\n type: 'play',\n listener: () => {\n if (needFirstEvents) {\n this.sendTrackingEvent_(MediaTailorAdManager.IMPRESSION_);\n this.sendTrackingEvent_(MediaTailorAdManager.START_);\n needFirstEvents = false;\n } else {\n this.sendTrackingEvent_(MediaTailorAdManager.RESUME_);\n }\n },\n });\n this.adListeners_.push({\n target: this.video_,\n type: 'pause',\n listener: () => {\n this.sendTrackingEvent_(MediaTailorAdManager.PAUSE_);\n },\n });\n for (const listener of this.adListeners_) {\n this.eventManager_.listen(\n listener.target, listener.type, listener.listener);\n }\n }\n\n /**\n * @param {boolean=} skipped\n * @private\n */\n removeCurrentAdListeners_(skipped = false) {\n if (skipped) {\n this.sendTrackingEvent_(shaka.ads.MediaTailorAdManager.SKIPPED_);\n } else {\n this.sendTrackingEvent_(shaka.ads.MediaTailorAdManager.COMPLETE_);\n }\n for (const listener of this.adListeners_) {\n this.eventManager_.unlisten(\n listener.target, listener.type, listener.listener);\n }\n this.adListeners_ = [];\n this.eventsSent = [];\n }\n\n /**\n * @param {string} eventType\n * @private\n */\n sendTrackingEvent_(eventType) {\n let trackingEvent = this.mediaTailorAd_.trackingEvents.find(\n (event) => event.eventType == eventType);\n if (!trackingEvent) {\n trackingEvent = this.mediaTailorAdBreak_.adBreakTrackingEvents.find(\n (event) => event.eventType == eventType);\n }\n if (trackingEvent) {\n const NetworkingEngine = shaka.net.NetworkingEngine;\n const type = NetworkingEngine.RequestType.ADS;\n const context = {\n type: NetworkingEngine.AdvancedRequestType.MEDIATAILOR_TRACKING_EVENT,\n };\n for (const beaconUrl of trackingEvent.beaconUrls) {\n if (!beaconUrl || beaconUrl == '') {\n continue;\n }\n const request = NetworkingEngine.makeRequest(\n [beaconUrl],\n NetworkingEngine.defaultRetryParameters());\n request.method = 'POST';\n this.networkingEngine_.request(type, request, context);\n }\n }\n switch (eventType) {\n case shaka.ads.MediaTailorAdManager.IMPRESSION_:\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_IMPRESSION));\n break;\n case shaka.ads.MediaTailorAdManager.START_:\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_STARTED,\n (new Map()).set('ad', this.ad_)));\n break;\n case shaka.ads.MediaTailorAdManager.MUTE_:\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_MUTED));\n break;\n case shaka.ads.MediaTailorAdManager.UNMUTE_:\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_VOLUME_CHANGED));\n break;\n case shaka.ads.MediaTailorAdManager.RESUME_:\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_RESUMED));\n break;\n case shaka.ads.MediaTailorAdManager.PAUSE_:\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_PAUSED));\n break;\n case shaka.ads.MediaTailorAdManager.FIRSTQUARTILE_:\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_FIRST_QUARTILE));\n break;\n case shaka.ads.MediaTailorAdManager.MIDPOINT_:\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_MIDPOINT));\n break;\n case shaka.ads.MediaTailorAdManager.THIRDQUARTILE_:\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_THIRD_QUARTILE));\n break;\n case shaka.ads.MediaTailorAdManager.COMPLETE_:\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_COMPLETE));\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_STOPPED));\n break;\n case shaka.ads.MediaTailorAdManager.SKIPPED_:\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_SKIPPED));\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_STOPPED));\n break;\n case shaka.ads.MediaTailorAdManager.BREAKSTART_:\n this.adContainer_.setAttribute('ad-active', 'true');\n break;\n case shaka.ads.MediaTailorAdManager.BREAKEND_:\n this.adContainer_.removeAttribute('ad-active');\n break;\n case shaka.ads.MediaTailorAdManager.SKIP_STATE_CHANGED_:\n this.onEvent_(\n new shaka.util.FakeEvent(\n shaka.ads.Utils.AD_SKIP_STATE_CHANGED));\n break;\n }\n }\n};\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.ads.MediaTailorAdManager.IMPRESSION_ = 'impression';\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.ads.MediaTailorAdManager.START_ = 'start';\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.ads.MediaTailorAdManager.MUTE_ = 'mute';\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.ads.MediaTailorAdManager.UNMUTE_ = 'unmute';\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.ads.MediaTailorAdManager.RESUME_ = 'resume';\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.ads.MediaTailorAdManager.PAUSE_ = 'pause';\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.ads.MediaTailorAdManager.FIRSTQUARTILE_ = 'firstQuartile';\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.ads.MediaTailorAdManager.MIDPOINT_ = 'midpoint';\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.ads.MediaTailorAdManager.THIRDQUARTILE_ = 'thirdQuartile';\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.ads.MediaTailorAdManager.COMPLETE_ = 'complete';\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.ads.MediaTailorAdManager.SKIPPED_ = 'skip';\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.ads.MediaTailorAdManager.BREAKSTART_ = 'breakStart';\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.ads.MediaTailorAdManager.BREAKEND_ = 'breakEnd';\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.ads.MediaTailorAdManager.SKIP_STATE_CHANGED_ = 'skipStateChanged';\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n\ngoog.provide('shaka.ads.ServerSideAd');\n\n/**\n * @implements {shaka.extern.IAd}\n * @export\n */\nshaka.ads.ServerSideAd = class {\n /**\n * @param {google.ima.dai.api.Ad} imaAd\n * @param {HTMLMediaElement} video\n */\n constructor(imaAd, video) {\n /** @private {google.ima.dai.api.Ad} */\n this.ad_ = imaAd;\n\n /** @private {?google.ima.dai.api.AdProgressData} */\n this.adProgressData_ = null;\n\n /** @private {HTMLMediaElement} */\n this.video_ = video;\n }\n\n\n /**\n * @param {google.ima.dai.api.AdProgressData} data\n */\n setProgressData(data) {\n this.adProgressData_ = data;\n }\n\n /**\n * @override\n * @export\n */\n needsSkipUI() {\n return true;\n }\n\n /**\n * @override\n * @export\n */\n isClientRendering() {\n return false;\n }\n\n /**\n * @override\n * @export\n */\n isUsingAnotherMediaElement() {\n return false;\n }\n\n /**\n * @override\n * @export\n */\n getDuration() {\n if (!this.adProgressData_) {\n // Unknown yet\n return -1;\n }\n return this.adProgressData_.duration;\n }\n\n /**\n * @override\n * @export\n */\n getMinSuggestedDuration() {\n return this.getDuration();\n }\n\n /**\n * @override\n * @export\n */\n getRemainingTime() {\n if (!this.adProgressData_) {\n // Unknown yet\n return -1;\n }\n\n return this.adProgressData_.duration - this.adProgressData_.currentTime;\n }\n\n /**\n * @override\n * @export\n */\n isPaused() {\n return this.video_.paused;\n }\n\n /**\n * @override\n * @export\n */\n isSkippable() {\n return this.ad_.isSkippable();\n }\n\n /**\n * @override\n * @export\n */\n getTimeUntilSkippable() {\n const skipOffset = this.ad_.getSkipTimeOffset();\n const canSkipIn = this.getRemainingTime() - skipOffset;\n return Math.max(canSkipIn, 0);\n }\n\n /**\n * @override\n * @export\n */\n canSkipNow() {\n return this.getTimeUntilSkippable() == 0;\n }\n\n /**\n * @override\n * @export\n */\n skip() {\n this.video_.currentTime += this.getRemainingTime();\n }\n\n /**\n * @override\n * @export\n */\n pause() {\n return this.video_.pause();\n }\n\n /**\n * @override\n * @export\n */\n play() {\n return this.video_.play();\n }\n\n\n /**\n * @override\n * @export\n */\n getVolume() {\n return this.video_.volume;\n }\n\n /**\n * @override\n * @export\n */\n setVolume(volume) {\n this.video_.volume = volume;\n }\n\n /**\n * @override\n * @export\n */\n isMuted() {\n return this.video_.muted;\n }\n\n /**\n * @override\n * @export\n */\n isLinear() {\n return true;\n }\n\n /**\n * @override\n * @export\n */\n resize(width, height) {\n // Nothing\n }\n\n /**\n * @override\n * @export\n */\n setMuted(muted) {\n this.video_.muted = muted;\n }\n\n\n /**\n * @override\n * @export\n */\n getSequenceLength() {\n const podInfo = this.ad_.getAdPodInfo();\n if (podInfo == null) {\n // No pod, just one ad.\n return 1;\n }\n\n return podInfo.getTotalAds();\n }\n\n /**\n * @override\n * @export\n */\n getPositionInSequence() {\n const podInfo = this.ad_.getAdPodInfo();\n if (podInfo == null) {\n // No pod, just one ad.\n return 1;\n }\n\n return podInfo.getAdPosition();\n }\n\n /**\n * @override\n * @export\n */\n getTitle() {\n return this.ad_.getTitle();\n }\n\n /**\n * @override\n * @export\n */\n getDescription() {\n return this.ad_.getDescription();\n }\n\n /**\n * @override\n * @export\n */\n getVastMediaBitrate() {\n return 0;\n }\n\n /**\n * @override\n * @export\n */\n getVastMediaHeight() {\n return this.ad_.getVastMediaHeight();\n }\n\n /**\n * @override\n * @export\n */\n getVastMediaWidth() {\n return this.ad_.getVastMediaWidth();\n }\n\n /**\n * @override\n * @export\n */\n getAdId() {\n return this.ad_.getAdId();\n }\n\n /**\n * @override\n * @export\n */\n getCreativeAdId() {\n return this.ad_.getCreativeAdId();\n }\n\n /**\n * @override\n * @export\n */\n getAdvertiserName() {\n return this.ad_.getAdvertiserName();\n }\n\n /**\n * @override\n * @export\n */\n getMediaUrl() {\n return null;\n }\n\n /**\n * @override\n * @export\n */\n getTimeOffset() {\n const podInfo = this.ad_.getAdPodInfo();\n if (podInfo == null) {\n // Defaults to 0 if this ad is not part of a pod, or the pod is not part\n // of an ad playlist.\n return 0;\n }\n\n return podInfo.getTimeOffset();\n }\n\n /**\n * @override\n * @export\n */\n getPodIndex() {\n const podInfo = this.ad_.getAdPodInfo();\n if (podInfo == null) {\n // Defaults to 0 if this ad is not part of a pod, or the pod is not part\n // of an ad playlist.\n return 0;\n }\n\n return podInfo.getPodIndex();\n }\n\n /**\n * @override\n * @export\n */\n release() {\n this.ad_ = null;\n this.adProgressData_ = null;\n this.video_ = null;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n\ngoog.provide('shaka.ads.ServerSideAdManager');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.ads.Utils');\ngoog.require('shaka.ads.ServerSideAd');\ngoog.require('shaka.log');\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.IReleasable');\ngoog.require('shaka.util.PublicPromise');\n\n\n/**\n * A class responsible for server-side ad interactions.\n * @implements {shaka.util.IReleasable}\n */\nshaka.ads.ServerSideAdManager = class {\n /**\n * @param {HTMLElement} adContainer\n * @param {HTMLMediaElement} video\n * @param {string} locale\n * @param {function(!shaka.util.FakeEvent)} onEvent\n */\n constructor(adContainer, video, locale, onEvent) {\n /** @private {HTMLElement} */\n this.adContainer_ = adContainer;\n\n /** @private {HTMLMediaElement} */\n this.video_ = video;\n\n /** @private {?shaka.extern.AdsConfiguration} */\n this.config_ = null;\n\n /** @private\n {?shaka.util.PublicPromise.} */\n this.streamPromise_ = null;\n\n /** @private {number} */\n this.streamRequestStartTime_ = NaN;\n\n /** @private {function(!shaka.util.FakeEvent)} */\n this.onEvent_ = onEvent;\n\n /** @private {boolean} */\n this.isLiveContent_ = false;\n\n /**\n * Time to seek to after an ad if that ad was played as the result of\n * snapback.\n * @private {?number}\n */\n this.snapForwardTime_ = null;\n\n /** @private {shaka.ads.ServerSideAd} */\n this.ad_ = null;\n\n /** @private {?google.ima.dai.api.AdProgressData} */\n this.adProgressData_ = null;\n\n /** @private {string} */\n this.backupUrl_ = '';\n\n /** @private {!Array.} */\n this.currentCuePoints_ = [];\n\n /** @private {shaka.util.EventManager} */\n this.eventManager_ = new shaka.util.EventManager();\n\n /** @private {google.ima.dai.api.UiSettings} */\n const uiSettings = new google.ima.dai.api.UiSettings();\n uiSettings.setLocale(locale);\n\n /** @private {google.ima.dai.api.StreamManager} */\n this.streamManager_ = new google.ima.dai.api.StreamManager(\n this.video_, this.adContainer_, uiSettings);\n\n this.onEvent_(new shaka.util.FakeEvent(\n shaka.ads.Utils.IMA_STREAM_MANAGER_LOADED,\n (new Map()).set('imaStreamManager', this.streamManager_)));\n\n // Events\n this.eventManager_.listen(this.streamManager_,\n google.ima.dai.api.StreamEvent.Type.LOADED, (e) => {\n shaka.log.info('Ad SS Loaded');\n this.onLoaded_(\n /** @type {!google.ima.dai.api.StreamEvent} */ (e));\n });\n\n this.eventManager_.listen(this.streamManager_,\n google.ima.dai.api.StreamEvent.Type.ERROR, () => {\n shaka.log.info('Ad SS Error');\n this.onError_();\n });\n\n this.eventManager_.listen(this.streamManager_,\n google.ima.dai.api.StreamEvent.Type.AD_BREAK_STARTED, () => {\n shaka.log.info('Ad Break Started');\n });\n\n this.eventManager_.listen(this.streamManager_,\n google.ima.dai.api.StreamEvent.Type.STARTED, (e) => {\n shaka.log.info('Ad Started');\n this.onAdStart_(/** @type {!google.ima.dai.api.StreamEvent} */ (e));\n });\n\n this.eventManager_.listen(this.streamManager_,\n google.ima.dai.api.StreamEvent.Type.AD_BREAK_ENDED, () => {\n shaka.log.info('Ad Break Ended');\n this.onAdBreakEnded_();\n });\n\n this.eventManager_.listen(this.streamManager_,\n google.ima.dai.api.StreamEvent.Type.AD_PROGRESS, (e) => {\n this.onAdProgress_(\n /** @type {!google.ima.dai.api.StreamEvent} */ (e));\n });\n\n this.eventManager_.listen(this.streamManager_,\n google.ima.dai.api.StreamEvent.Type.FIRST_QUARTILE, () => {\n shaka.log.info('Ad event: First Quartile');\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_FIRST_QUARTILE));\n });\n\n this.eventManager_.listen(this.streamManager_,\n google.ima.dai.api.StreamEvent.Type.MIDPOINT, () => {\n shaka.log.info('Ad event: Midpoint');\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_MIDPOINT));\n });\n\n this.eventManager_.listen(this.streamManager_,\n google.ima.dai.api.StreamEvent.Type.THIRD_QUARTILE, () => {\n shaka.log.info('Ad event: Third Quartile');\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_THIRD_QUARTILE));\n });\n\n this.eventManager_.listen(this.streamManager_,\n google.ima.dai.api.StreamEvent.Type.COMPLETE, () => {\n shaka.log.info('Ad event: Complete');\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_COMPLETE));\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_STOPPED));\n this.adContainer_.removeAttribute('ad-active');\n this.ad_ = null;\n });\n\n this.eventManager_.listen(this.streamManager_,\n google.ima.dai.api.StreamEvent.Type.SKIPPED, () => {\n shaka.log.info('Ad event: Skipped');\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_SKIPPED));\n this.onEvent_(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_STOPPED));\n });\n\n this.eventManager_.listen(this.streamManager_,\n google.ima.dai.api.StreamEvent.Type.CUEPOINTS_CHANGED, (e) => {\n shaka.log.info('Ad event: Cue points changed');\n this.onCuePointsChanged_(\n /** @type {!google.ima.dai.api.StreamEvent} */ (e));\n });\n }\n\n /**\n * Called by the AdManager to provide an updated configuration any time it\n * changes.\n *\n * @param {shaka.extern.AdsConfiguration} config\n */\n configure(config) {\n this.config_ = config;\n }\n\n /**\n * @param {!google.ima.dai.api.StreamRequest} streamRequest\n * @param {string=} backupUrl\n * @return {!Promise.}\n */\n streamRequest(streamRequest, backupUrl) {\n if (this.streamPromise_) {\n return Promise.reject(new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.ADS,\n shaka.util.Error.Code.CURRENT_DAI_REQUEST_NOT_FINISHED));\n }\n if (streamRequest instanceof google.ima.dai.api.LiveStreamRequest) {\n this.isLiveContent_ = true;\n }\n\n this.streamPromise_ = new shaka.util.PublicPromise();\n this.streamManager_.requestStream(streamRequest);\n this.backupUrl_ = backupUrl || '';\n\n this.streamRequestStartTime_ = Date.now() / 1000;\n\n return this.streamPromise_;\n }\n\n /**\n * @param {Object} adTagParameters\n */\n replaceAdTagParameters(adTagParameters) {\n this.streamManager_.replaceAdTagParameters(adTagParameters);\n }\n\n /**\n * Resets the stream manager and removes any continuous polling.\n */\n stop() {\n // TODO:\n // For SS DAI streams, if a different asset gets unloaded as\n // part of the process\n // of loading a DAI asset, stream manager state gets reset and we\n // don't get any ad events.\n // We need to figure out if it makes sense to stop the SS\n // manager on unload, and, if it does, find\n // a way to do it safely.\n // this.streamManager_.reset();\n this.backupUrl_ = '';\n this.snapForwardTime_ = null;\n this.currentCuePoints_ = [];\n }\n\n /** @override */\n release() {\n this.stop();\n if (this.eventManager_) {\n this.eventManager_.release();\n }\n }\n\n /**\n * @param {string} type\n * @param {Uint8Array|string} data\n * Comes as string in DASH and as Uint8Array in HLS.\n * @param {number} timestamp (in seconds)\n */\n onTimedMetadata(type, data, timestamp) {\n this.streamManager_.processMetadata(type, data, timestamp);\n }\n\n /**\n * @param {shaka.extern.MetadataFrame} value\n */\n onCueMetadataChange(value) {\n // Native HLS over Safari/iOS/iPadOS\n // For live event streams, the stream needs some way of informing the SDK\n // that an ad break is coming up or ending. In the IMA DAI SDK, this is\n // done through timed metadata. Timed metadata is carried as part of the\n // DAI stream content and carries ad break timing information used by the\n // SDK to track ad breaks.\n if (value.key && value.data) {\n const metadata = {};\n metadata[value.key] = value.data;\n this.streamManager_.onTimedMetadata(metadata);\n }\n }\n\n /**\n * @return {!Array.}\n */\n getCuePoints() {\n return this.currentCuePoints_;\n }\n\n /**\n * If a seek jumped over the ad break, return to the start of the\n * ad break, then complete the seek after the ad played through.\n * @private\n */\n checkForSnapback_() {\n const currentTime = this.video_.currentTime;\n if (currentTime == 0) {\n return;\n }\n\n this.streamManager_.streamTimeForContentTime(currentTime);\n const previousCuePoint =\n this.streamManager_.previousCuePointForStreamTime(currentTime);\n // The cue point gets marked as 'played' as soon as the playhead hits it\n // (at the start of an ad), so when we come back to this method as a result\n // of seeking back to the user-selected time, the 'played' flag will be set.\n if (previousCuePoint && !previousCuePoint.played) {\n shaka.log.info('Seeking back to the start of the ad break at ' +\n previousCuePoint.start + ' and will return to ' + currentTime);\n this.snapForwardTime_ = currentTime;\n this.video_.currentTime = previousCuePoint.start;\n }\n }\n\n /**\n * @param {!google.ima.dai.api.StreamEvent} e\n * @private\n */\n onAdStart_(e) {\n goog.asserts.assert(this.streamManager_,\n 'Should have a stream manager at this point!');\n\n const imaAd = e.getAd();\n this.ad_ = new shaka.ads.ServerSideAd(imaAd, this.video_);\n\n // Ad object and ad progress data come from two different IMA events.\n // It's a race, and we don't know, which one will fire first - the\n // event that contains an ad object (AD_STARTED) or the one that\n // contains ad progress info (AD_PROGRESS).\n // If the progress event fired first, we must've saved the progress\n // info and can now add it to the ad object.\n if (this.adProgressData_) {\n this.ad_.setProgressData(this.adProgressData_);\n }\n\n this.onEvent_(new shaka.util.FakeEvent(shaka.ads.Utils.AD_STARTED,\n (new Map()).set('ad', this.ad_)));\n this.adContainer_.setAttribute('ad-active', 'true');\n }\n\n /**\n * @private\n */\n onAdBreakEnded_() {\n this.adContainer_.removeAttribute('ad-active');\n const currentTime = this.video_.currentTime;\n // If the ad break was a result of snapping back (a user seeked over\n // an ad break and was returned to it), seek forward to the point,\n // originally chosen by the user.\n if (this.snapForwardTime_ && this.snapForwardTime_ > currentTime) {\n this.video_.currentTime = this.snapForwardTime_;\n this.snapForwardTime_ = null;\n }\n }\n\n /**\n * @param {!google.ima.dai.api.StreamEvent} e\n * @private\n */\n onLoaded_(e) {\n const now = Date.now() / 1000;\n const loadTime = now - this.streamRequestStartTime_;\n this.onEvent_(new shaka.util.FakeEvent(shaka.ads.Utils.ADS_LOADED,\n (new Map()).set('loadTime', loadTime)));\n\n const streamData = e.getStreamData();\n const url = streamData.url;\n this.streamPromise_.resolve(url);\n this.streamPromise_ = null;\n\n if (!this.isLiveContent_) {\n this.eventManager_.listen(this.video_, 'seeked', () => {\n this.checkForSnapback_();\n });\n }\n }\n\n /**\n * @private\n */\n onError_() {\n if (!this.backupUrl_.length) {\n this.streamPromise_.reject('IMA Stream request returned an error ' +\n 'and there was no backup asset uri provided.');\n this.streamPromise_ = null;\n return;\n }\n\n shaka.log.warning('IMA stream request returned an error. ' +\n 'Falling back to the backup asset uri.');\n this.streamPromise_.resolve(this.backupUrl_);\n this.streamPromise_ = null;\n }\n\n\n /**\n * @param {!google.ima.dai.api.StreamEvent} e\n * @private\n */\n onAdProgress_(e) {\n const streamData = e.getStreamData();\n const adProgressData = streamData.adProgressData;\n this.adProgressData_ = adProgressData;\n if (this.ad_) {\n this.ad_.setProgressData(this.adProgressData_);\n }\n }\n\n\n /**\n * @param {!google.ima.dai.api.StreamEvent} e\n * @private\n */\n onCuePointsChanged_(e) {\n const streamData = e.getStreamData();\n\n /** @type {!Array.} */\n const cuePoints = [];\n for (const point of streamData.cuepoints) {\n /** @type {shaka.extern.AdCuePoint} */\n const shakaCuePoint = {\n start: point.start,\n end: point.end,\n };\n cuePoints.push(shakaCuePoint);\n }\n\n this.currentCuePoints_ = cuePoints;\n\n this.onEvent_(new shaka.util.FakeEvent(\n shaka.ads.Utils.CUEPOINTS_CHANGED,\n (new Map()).set('cuepoints', cuePoints)));\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n\ngoog.provide('shaka.ads.AdManager');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.Deprecate');\ngoog.require('shaka.Player');\ngoog.require('shaka.ads.AdsStats');\ngoog.require('shaka.ads.ClientSideAdManager');\ngoog.require('shaka.ads.InterstitialAdManager');\ngoog.require('shaka.ads.MediaTailorAdManager');\ngoog.require('shaka.ads.Utils');\ngoog.require('shaka.ads.ServerSideAdManager');\ngoog.require('shaka.log');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.FakeEventTarget');\ngoog.require('shaka.util.IReleasable');\n\n\n/**\n * @event shaka.ads.AdManager.AdsLoadedEvent\n * @description Fired when a sequence of ads has been loaded.\n * @property {string} type\n * 'ads-loaded'\n * @property {number} loadTime\n * The time it takes to load ads.\n * @exportDoc\n */\n\n/**\n * @event shaka.ads.AdManager.AdStartedEvent\n * @description Fired when an ad has started playing.\n * @property {string} type\n * 'ad-started'\n * @property {!shaka.extern.IAd} ad\n * The ad that has started playing.\n * @property {Object} sdkAdObject\n * The ad object in the SDK format, if there is one.\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdCompleteEvent\n * @description Fired when an ad has played through.\n * @property {string} type\n * 'ad-complete'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdSkippedEvent\n * @description Fired when an ad has been skipped.\n * @property {string} type\n * 'ad-skipped'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdFirstQuartileEvent\n * @description Fired when an ad has played through the first 1/4.\n * @property {string} type\n * 'ad-first-quartile'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdMidpointEvent\n * @description Fired when an ad has played through its midpoint.\n * @property {string} type\n * 'ad-midpoint'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdThirdQuartileEvent\n * @description Fired when an ad has played through the third quartile.\n * @property {string} type\n * 'ad-third-quartile'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdStoppedEvent\n * @description Fired when an ad has stopped playing, was skipped,\n * or was unable to proceed due to an error.\n * @property {string} type\n * 'ad-stopped'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdVolumeChangedEvent\n * @description Fired when an ad's volume changed.\n * @property {string} type\n * 'ad-volume-changed'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdMutedEvent\n * @description Fired when an ad was muted.\n * @property {string} type\n * 'ad-muted'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdPausedEvent\n * @description Fired when an ad was paused.\n * @property {string} type\n * 'ad-paused'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdResumedEvent\n * @description Fired when an ad was resumed after a pause.\n * @property {string} type\n * 'ad-resumed'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdSkipStateChangedEvent\n * @description Fired when an ad's skip state changes (for example, when\n * it becomes possible to skip the ad).\n * @property {string} type\n * 'ad-skip-state-changed'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdCuePointsChangedEvent\n * @description Fired when the ad cue points change, signalling ad breaks\n * change.\n * @property {string} type\n * 'ad-cue-points-changed'\n * @property {!Array.} cuepoints\n * The ad cue points, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdProgressEvent\n * @description Fired when there is an update to the current ad's progress.\n * @property {string} type\n * 'ad-progress'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdBufferingEvent\n * @description Fired when the ad has stalled playback to buffer.\n * @property {string} type\n * 'ad-buffering'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdImpressionEvent\n * @description Fired when the impression URL has been pinged.\n * @property {string} type\n * 'ad-impression'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdClickEvent\n * @description Fired when the ad was clicked.\n * @property {string} type\n * 'ad-clicked'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdDurationChangedEvent\n * @description Fired when the ad's duration changes.\n * @property {string} type\n * 'ad-duration-changed'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdClosedEvent\n * @description Fired when the ad was closed by the user.\n * @property {string} type\n * 'ad-closed'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdLoadedEvent\n * @description Fired when the ad data becomes available.\n * @property {string} type\n * 'ad-loaded'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AllAdsCompletedEvent\n * @description Fired when the ads manager is done playing all the ads.\n * @property {string} type\n * 'all-ads-completed'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdLinearChangedEvent\n * @description Fired when the displayed ad changes from\n * linear to nonlinear, or vice versa.\n * @property {string} type\n * 'ad-linear-changed'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdMetadataEvent\n * @description Fired when the ad's metadata becomes available.\n * @property {string} type\n * 'ad-metadata'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager#AdBreakReadyEvent\n * @description Fired when the client-side SDK is ready to play a\n * VPAID ad or an ad rule.\n * @property {string} type\n * 'ad-break-ready'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdRecoverableErrorEvent\n * @description Fired when the a non-fatal error was encountered.\n * The presentation will continue with the same or next ad playback\n * depending on the error situation.\n * @property {string} type\n * 'ad-recoverable-error'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.Utils.AD_ERROR\n * @description Fired when a fatal error is encountered.\n * @property {string} type\n * 'ad-error'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdInteractionEvent\n * @description Fired when an ad triggers the interaction callback.\n * @property {string} type\n * 'ad-interaction'\n * @property {Object} originalEvent\n * The native SDK event, if available.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager#ImaAdManagerLoadedEvent\n * @description Fired when the native IMA ad manager becomes available.\n * @property {string} type\n * 'ima-ad-manager-loaded'\n * @property {!Object} imaAdManager\n * The native IMA ad manager.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager#ImaStreamManagerLoadedEvent\n * @description Fired when the native IMA stream manager becomes available.\n * @property {string} type\n * 'ima-stream-manager-loaded'\n * @property {!Object} imaStreamManager\n * The native IMA stream manager.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdClickedEvent\n * @description Fired when the ad was clicked.\n * @property {string} type\n * 'ad-clicked'\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdContentPauseRequestedEvent\n * @description Fired when the ad requires the main content to be paused.\n * Fired when the platform does not support multiple media elements.\n * @property {string} type\n * 'ad-content-pause-requested'\n * @property {?boolean} saveLivePosition\n * Indicates whether the live position has to be saved or not.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdContentResumeRequestedEvent\n * @description Fired when the ad requires the main content to be resumed.\n * Fired when the platform does not support multiple media elements.\n * @property {string} type\n * 'ad-content-resume-requested'\n * @property {?number} offset\n * Indicates the offset that should be applied to the previously saved time.\n * @exportDoc\n */\n\n\n/**\n * @event shaka.ads.AdManager.AdContentResumeRequestedEvent\n * @description Fired when the ad requires the video of the main content to be\n * attached.\n * @property {string} type\n * 'ad-content-attach-requested'\n * @exportDoc\n */\n\n\n/**\n * A class responsible for ad-related interactions.\n * @implements {shaka.extern.IAdManager}\n * @implements {shaka.util.IReleasable}\n * @export\n */\nshaka.ads.AdManager = class extends shaka.util.FakeEventTarget {\n /** */\n constructor() {\n super();\n /** @private {shaka.ads.InterstitialAdManager} */\n this.interstitialAdManager_ = null;\n /** @private {shaka.ads.ClientSideAdManager} */\n this.csAdManager_ = null;\n /** @private {shaka.ads.MediaTailorAdManager} */\n this.mtAdManager_ = null;\n /** @private {shaka.ads.ServerSideAdManager} */\n this.ssAdManager_ = null;\n /** @private {shaka.ads.AdsStats} */\n this.stats_ = new shaka.ads.AdsStats();\n /** @private {string} locale */\n this.locale_ = navigator.language;\n /** @private {?shaka.extern.AdsConfiguration} */\n this.config_ = null;\n }\n\n\n /**\n * @override\n * @export\n */\n setLocale(locale) {\n this.locale_ = locale;\n }\n\n\n /**\n * @override\n * @export\n */\n configure(config) {\n this.config_ = config;\n if (this.interstitialAdManager_) {\n this.interstitialAdManager_.configure(this.config_);\n }\n if (this.csAdManager_) {\n this.csAdManager_.configure(this.config_);\n }\n if (this.ssAdManager_) {\n this.ssAdManager_.configure(this.config_);\n }\n }\n\n\n /**\n * @override\n * @export\n */\n initInterstitial(adContainer, basePlayer, baseVideo) {\n if (!adContainer) {\n shaka.log.info('Initializing interstitials without ad container');\n }\n if (this.interstitialAdManager_) {\n this.interstitialAdManager_.release();\n }\n this.interstitialAdManager_ = new shaka.ads.InterstitialAdManager(\n adContainer, basePlayer, baseVideo,\n (e) => this.processAndDispatchEvent_(e));\n\n goog.asserts.assert(this.config_, 'Config must not be null!');\n this.interstitialAdManager_.configure(this.config_);\n }\n\n\n /**\n * @override\n * @export\n */\n initClientSide(adContainer, video, adsRenderingSettings) {\n // Check that Client Side IMA SDK has been included\n // NOTE: (window['google'] && google.ima) check for any\n // IMA SDK, including SDK for Server Side ads.\n // The 3rd check insures we have the right SDK:\n // {google.ima.AdsLoader} is an object that's part of CS IMA SDK\n // but not SS SDK.\n if (!window['google'] || !google.ima || !google.ima.AdsLoader) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.ADS,\n shaka.util.Error.Code.CS_IMA_SDK_MISSING);\n }\n\n if (this.csAdManager_) {\n this.csAdManager_.release();\n }\n\n this.csAdManager_ = new shaka.ads.ClientSideAdManager(\n adContainer, video, this.locale_, adsRenderingSettings,\n (e) => this.processAndDispatchEvent_(e));\n\n goog.asserts.assert(this.config_, 'Config must not be null!');\n this.csAdManager_.configure(this.config_);\n }\n\n\n /**\n * @override\n * @export\n */\n release() {\n if (this.interstitialAdManager_) {\n this.interstitialAdManager_.release();\n this.interstitialAdManager_ = null;\n }\n if (this.csAdManager_) {\n this.csAdManager_.release();\n this.csAdManager_ = null;\n }\n if (this.mtAdManager_) {\n this.mtAdManager_.release();\n this.mtAdManager_ = null;\n }\n if (this.ssAdManager_) {\n this.ssAdManager_.release();\n this.ssAdManager_ = null;\n }\n super.release();\n }\n\n\n /**\n * @override\n * @export\n */\n onAssetUnload() {\n if (this.interstitialAdManager_) {\n this.interstitialAdManager_.stop();\n }\n if (this.csAdManager_) {\n this.csAdManager_.stop();\n }\n if (this.mtAdManager_) {\n this.mtAdManager_.stop();\n }\n if (this.ssAdManager_) {\n this.ssAdManager_.stop();\n }\n\n this.dispatchEvent(\n new shaka.util.FakeEvent(shaka.ads.Utils.AD_STOPPED));\n this.dispatchEvent(new shaka.util.FakeEvent(\n shaka.ads.Utils.AD_CONTENT_ATTACH_REQUESTED));\n\n this.stats_ = new shaka.ads.AdsStats();\n }\n\n\n /**\n * @override\n * @export\n */\n requestClientSideAds(imaRequest) {\n if (!this.csAdManager_) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.ADS,\n shaka.util.Error.Code.CS_AD_MANAGER_NOT_INITIALIZED);\n }\n\n this.csAdManager_.requestAds(imaRequest);\n }\n\n\n /**\n * @override\n * @export\n */\n updateClientSideAdsRenderingSettings(adsRenderingSettings) {\n if (!this.csAdManager_) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.ADS,\n shaka.util.Error.Code.CS_AD_MANAGER_NOT_INITIALIZED);\n }\n\n this.csAdManager_.updateAdsRenderingSettings(adsRenderingSettings);\n }\n\n\n /**\n * @override\n * @export\n */\n initMediaTailor(adContainer, networkingEngine, video) {\n if (this.mtAdManager_) {\n this.mtAdManager_.release();\n }\n\n this.mtAdManager_ = new shaka.ads.MediaTailorAdManager(\n adContainer, networkingEngine, video,\n (e) => this.processAndDispatchEvent_(e));\n }\n\n\n /**\n * @param {string} url\n * @param {Object} adsParams\n * @param {string=} backupUrl\n * @return {!Promise.}\n * @override\n * @export\n */\n requestMediaTailorStream(url, adsParams, backupUrl = '') {\n if (!this.mtAdManager_) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.ADS,\n shaka.util.Error.Code.MT_AD_MANAGER_NOT_INITIALIZED);\n }\n\n return this.mtAdManager_.streamRequest(url, adsParams, backupUrl);\n }\n\n\n /**\n * @param {string} url\n * @override\n * @export\n */\n addMediaTailorTrackingUrl(url) {\n if (!this.mtAdManager_) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.ADS,\n shaka.util.Error.Code.MT_AD_MANAGER_NOT_INITIALIZED);\n }\n\n this.mtAdManager_.addTrackingUrl(url);\n }\n\n\n /**\n * @override\n * @export\n */\n initServerSide(adContainer, video) {\n // Check that Client Side IMA SDK has been included\n // NOTE: (window['google'] && google.ima) check for any\n // IMA SDK, including SDK for Server Side ads.\n // The 3rd check insures we have the right SDK:\n // {google.ima.dai} is an object that's part of DAI IMA SDK\n // but not SS SDK.\n if (!window['google'] || !google.ima || !google.ima.dai) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.ADS,\n shaka.util.Error.Code.SS_IMA_SDK_MISSING);\n }\n\n if (this.ssAdManager_) {\n this.ssAdManager_.release();\n }\n\n this.ssAdManager_ = new shaka.ads.ServerSideAdManager(\n adContainer, video, this.locale_,\n (e) => this.processAndDispatchEvent_(e));\n\n goog.asserts.assert(this.config_, 'Config must not be null!');\n this.ssAdManager_.configure(this.config_);\n }\n\n\n /**\n * @param {!google.ima.dai.api.StreamRequest} imaRequest\n * @param {string=} backupUrl\n * @return {!Promise.}\n * @override\n * @export\n */\n requestServerSideStream(imaRequest, backupUrl = '') {\n if (!this.ssAdManager_) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.ADS,\n shaka.util.Error.Code.SS_AD_MANAGER_NOT_INITIALIZED);\n }\n\n if (!imaRequest.adTagParameters) {\n imaRequest.adTagParameters = {};\n }\n const adTagParams = imaRequest.adTagParameters;\n\n if (adTagParams['mpt'] || adTagParams['mpv']) {\n shaka.log.alwaysWarn('You have attempted to set \"mpt\" and/or \"mpv\" ' +\n 'parameters of the ad tag. Please note that those parameters are ' +\n 'used for Shaka adoption tracking and will be overriden.');\n }\n\n // Set player and version parameters for tracking\n imaRequest.adTagParameters['mpt'] = 'shaka-player';\n imaRequest.adTagParameters['mpv'] = shaka.Player.version;\n return this.ssAdManager_.streamRequest(imaRequest, backupUrl);\n }\n\n\n /**\n * @override\n * @export\n */\n replaceServerSideAdTagParameters(adTagParameters) {\n if (!this.ssAdManager_) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.ADS,\n shaka.util.Error.Code.SS_AD_MANAGER_NOT_INITIALIZED);\n }\n\n if (adTagParameters['mpt'] || adTagParameters['mpv']) {\n shaka.log.alwaysWarn('You have attempted to set \"mpt\" and/or \"mpv\" ' +\n 'parameters of the ad tag. Please note that those parameters are ' +\n 'used for Shaka adoption tracking and will be overriden.');\n }\n\n adTagParameters['mpt'] = 'Shaka Player';\n adTagParameters['mpv'] = shaka.Player.version;\n\n this.ssAdManager_.replaceAdTagParameters(adTagParameters);\n }\n\n\n /**\n * @return {!Array.}\n * @override\n * @export\n */\n getServerSideCuePoints() {\n shaka.Deprecate.deprecateFeature(5,\n 'AdManager.getServerSideCuePoints',\n 'Please use getCuePoints function.');\n return this.getCuePoints();\n }\n\n\n /**\n * @return {!Array.}\n * @override\n * @export\n */\n getCuePoints() {\n let cuepoints = [];\n if (this.ssAdManager_) {\n cuepoints = cuepoints.concat(this.ssAdManager_.getCuePoints());\n }\n if (this.mtAdManager_) {\n cuepoints = cuepoints.concat(this.mtAdManager_.getCuePoints());\n }\n return cuepoints;\n }\n\n\n /**\n * @return {shaka.extern.AdsStats}\n * @override\n * @export\n */\n getStats() {\n return this.stats_.getBlob();\n }\n\n /**\n * @override\n * @export\n */\n onManifestUpdated(isLive) {\n if (this.mtAdManager_) {\n this.mtAdManager_.onManifestUpdated(isLive);\n }\n }\n\n /**\n * @override\n * @export\n */\n onDashTimedMetadata(region) {\n if (this.ssAdManager_ && region.schemeIdUri == 'urn:google:dai:2018') {\n const type = region.schemeIdUri;\n const data = region.eventNode ?\n region.eventNode.attributes['messageData'] : null;\n const timestamp = region.startTime;\n this.ssAdManager_.onTimedMetadata(type, data, timestamp);\n }\n }\n\n /**\n * @override\n * @export\n */\n onHlsTimedMetadata(metadata, timestamp) {\n if (this.ssAdManager_) {\n this.ssAdManager_.onTimedMetadata('ID3', metadata['data'], timestamp);\n }\n }\n\n /**\n * @override\n * @export\n */\n onCueMetadataChange(value) {\n if (this.ssAdManager_) {\n this.ssAdManager_.onCueMetadataChange(value);\n }\n }\n\n /**\n * @override\n * @export\n */\n onHLSInterstitialMetadata(basePlayer, baseVideo, interstitial) {\n if (this.config_ && this.config_.disableHLSInterstitial) {\n return;\n }\n if (!this.interstitialAdManager_) {\n this.initInterstitial(/* adContainer= */ null, basePlayer, baseVideo);\n }\n if (this.interstitialAdManager_) {\n this.interstitialAdManager_.addMetadata(interstitial);\n }\n }\n\n /**\n * @override\n * @export\n */\n onDASHInterstitialMetadata(basePlayer, baseVideo, region) {\n if (this.config_ && this.config_.disableDASHInterstitial) {\n return;\n }\n if (region.schemeIdUri != 'urn:mpeg:dash:event:alternativeMPD:2022') {\n return;\n }\n if (!this.interstitialAdManager_) {\n this.initInterstitial(/* adContainer= */ null, basePlayer, baseVideo);\n }\n if (this.interstitialAdManager_) {\n this.interstitialAdManager_.addRegion(region);\n }\n }\n\n /**\n * @override\n * @export\n */\n addCustomInterstitial(interstitial) {\n if (!this.interstitialAdManager_) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.ADS,\n shaka.util.Error.Code.INTERSTITIAL_AD_MANAGER_NOT_INITIALIZED);\n }\n this.interstitialAdManager_.addInterstitials([interstitial]);\n }\n\n /**\n * @override\n * @export\n */\n addAdUrlInterstitial(url) {\n if (!this.interstitialAdManager_) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.ADS,\n shaka.util.Error.Code.INTERSTITIAL_AD_MANAGER_NOT_INITIALIZED);\n }\n return this.interstitialAdManager_.addAdUrlInterstitial(url);\n }\n\n /**\n * @param {!shaka.util.FakeEvent} event\n * @private\n */\n processAndDispatchEvent_(event) {\n if (event && event.type) {\n switch (event.type) {\n case shaka.ads.Utils.ADS_LOADED: {\n const loadTime = (/** @type {!Object} */ (event))['loadTime'];\n this.stats_.addLoadTime(loadTime);\n break;\n }\n case shaka.ads.Utils.AD_STARTED:\n this.stats_.incrementStarted();\n break;\n case shaka.ads.Utils.AD_COMPLETE:\n this.stats_.incrementPlayedCompletely();\n break;\n case shaka.ads.Utils.AD_SKIPPED:\n this.stats_.incrementSkipped();\n break;\n case shaka.ads.Utils.AD_ERROR:\n this.stats_.incrementErrors();\n break;\n }\n }\n this.dispatchEvent(event);\n }\n};\n\n/**\n * The event name for when a sequence of ads has been loaded.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.ADS_LOADED = 'ads-loaded';\n\n/**\n * The event name for when an ad has started playing.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_STARTED = 'ad-started';\n\n\n/**\n * The event name for when an ad playhead crosses first quartile.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_FIRST_QUARTILE = 'ad-first-quartile';\n\n\n/**\n * The event name for when an ad playhead crosses midpoint.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_MIDPOINT = 'ad-midpoint';\n\n\n/**\n * The event name for when an ad playhead crosses third quartile.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_THIRD_QUARTILE = 'ad-third-quartile';\n\n\n/**\n * The event name for when an ad has completed playing.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_COMPLETE = 'ad-complete';\n\n\n/**\n * The event name for when an ad has finished playing\n * (played all the way through, was skipped, or was unable to proceed\n * due to an error).\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_STOPPED = 'ad-stopped';\n\n\n/**\n * The event name for when an ad is skipped by the user.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_SKIPPED = 'ad-skipped';\n\n\n/**\n * The event name for when the ad volume has changed.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_VOLUME_CHANGED = 'ad-volume-changed';\n\n\n/**\n * The event name for when the ad was muted.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_MUTED = 'ad-muted';\n\n\n/**\n * The event name for when the ad was paused.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_PAUSED = 'ad-paused';\n\n\n/**\n * The event name for when the ad was resumed after a pause.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_RESUMED = 'ad-resumed';\n\n\n/**\n * The event name for when the ad's skip status changes\n * (usually it becomes skippable when it wasn't before).\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_SKIP_STATE_CHANGED = 'ad-skip-state-changed';\n\n\n/**\n * The event name for when the ad's cue points (start/end markers)\n * have changed.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.CUEPOINTS_CHANGED = 'ad-cue-points-changed';\n\n\n/**\n * The event name for when the native IMA ad manager object has\n * loaded and become available.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.IMA_AD_MANAGER_LOADED = 'ima-ad-manager-loaded';\n\n\n/**\n * The event name for when the native IMA stream manager object has\n * loaded and become available.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.IMA_STREAM_MANAGER_LOADED = 'ima-stream-manager-loaded';\n\n\n/**\n * The event name for when the ad was clicked.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_CLICKED = 'ad-clicked';\n\n\n/**\n * The event name for when there is an update to the current ad's progress.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_PROGRESS = 'ad-progress';\n\n\n/**\n * The event name for when the ad is buffering.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_BUFFERING = 'ad-buffering';\n\n\n/**\n * The event name for when the ad's URL was hit.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_IMPRESSION = 'ad-impression';\n\n\n/**\n * The event name for when the ad's duration changed.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_DURATION_CHANGED = 'ad-duration-changed';\n\n\n/**\n * The event name for when the ad was closed by the user.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_CLOSED = 'ad-closed';\n\n\n/**\n * The event name for when the ad data becomes available.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_LOADED = 'ad-loaded';\n\n\n/**\n * The event name for when all the ads were completed.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.ALL_ADS_COMPLETED = 'all-ads-completed';\n\n\n/**\n * The event name for when the ad changes from or to linear.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_LINEAR_CHANGED = 'ad-linear-changed';\n\n\n/**\n * The event name for when the ad's metadata becomes available.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_METADATA = 'ad-metadata';\n\n\n/**\n * The event name for when the ad display encountered a recoverable\n * error.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_RECOVERABLE_ERROR = 'ad-recoverable-error';\n\n/**\n * The event name for when the ad manager dispatch errors.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_ERROR = 'ad-error';\n\n/**\n * The event name for when the client side SDK signalled its readiness\n * to play a VPAID ad or an ad rule.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_BREAK_READY = 'ad-break-ready';\n\n\n/**\n * The event name for when the interaction callback for the ad was\n * triggered.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_INTERACTION = 'ad-interaction';\n\n\n/**\n * The name of the event for when an ad requires the main content to be paused.\n * Fired when the platform does not support multiple media elements.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_CONTENT_PAUSE_REQUESTED = 'ad-content-pause-requested';\n\n\n/**\n * The name of the event for when an ad requires the main content to be resumed.\n * Fired when the platform does not support multiple media elements.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_CONTENT_RESUME_REQUESTED = 'ad-content-resume-requested';\n\n\n/**\n * The name of the event for when an ad requires the video of the main content\n * to be attached.\n *\n * Deprecated, please use {@link shaka.ads.Utils}\n *\n * @const {string}\n * @export\n * @deprecated\n */\nshaka.ads.AdManager.AD_CONTENT_ATTACH_REQUESTED = 'ad-content-attach-requested';\n\n\n/**\n * Set this is a default ad manager for the player.\n * Apps can also set their own ad manager, if they'd like.\n */\nshaka.Player.setAdManagerFactory(() => new shaka.ads.AdManager());\n\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.cast.CastUtils');\n\ngoog.require('shaka.media.TimeRangesUtils');\ngoog.require('shaka.util.FakeEvent');\n\n\n/**\n * @summary A set of cast utility functions and variables shared between sender\n * and receiver.\n */\nshaka.cast.CastUtils = class {\n /**\n * Serialize as JSON, but specially encode things JSON will not otherwise\n * represent.\n * @param {?} thing\n * @return {string}\n */\n static serialize(thing) {\n return JSON.stringify(thing, (key, value) => {\n if (typeof value == 'function') {\n // Functions can't be (safely) serialized.\n return undefined;\n }\n\n if (value instanceof Event || value instanceof shaka.util.FakeEvent) {\n // Events don't serialize to JSON well because of the DOM objects\n // and other complex objects they contain, so we strip these out.\n // Note that using Object.keys or JSON.stringify directly on the event\n // will not capture its properties. We must use a for loop.\n const simpleEvent = {};\n for (const eventKey in value) {\n const eventValue = value[eventKey];\n if (eventValue && typeof eventValue == 'object') {\n if (eventKey == 'detail') {\n // Keep the detail value, because it contains important\n // information for diagnosing errors.\n simpleEvent[eventKey] = eventValue;\n }\n // Strip out non-null object types because they are complex and we\n // don't need them.\n } else if (eventKey in Event) {\n // Strip out keys that are found on Event itself because they are\n // class-level constants we don't need, like Event.MOUSEMOVE == 16.\n } else {\n simpleEvent[eventKey] = eventValue;\n }\n }\n return simpleEvent;\n }\n\n if (value instanceof Error) {\n // Errors don't serialize to JSON well, either. TypeError, for example,\n // turns in \"{}\", leading to messages like \"Error UNKNOWN.UNKNOWN\" when\n // deserialized on the sender and displayed in the demo app.\n return shaka.cast.CastUtils.unpackError_(value);\n }\n\n if (value instanceof TimeRanges) {\n // TimeRanges must be unpacked into plain data for serialization.\n return shaka.cast.CastUtils.unpackTimeRanges_(value);\n }\n\n if (ArrayBuffer.isView(value) &&\n /** @type {TypedArray} */(value).BYTES_PER_ELEMENT === 1) {\n // Some of our code cares about Uint8Arrays actually being Uint8Arrays,\n // so this gives them special treatment.\n return shaka.cast.CastUtils.unpackUint8Array_(\n /** @type {!Uint8Array} */(value));\n }\n\n if (typeof value == 'number') {\n // NaN and infinity cannot be represented directly in JSON.\n if (isNaN(value)) {\n return 'NaN';\n }\n if (isFinite(value)) {\n return value;\n }\n if (value < 0) {\n return '-Infinity';\n }\n return 'Infinity';\n }\n\n return value;\n });\n }\n\n\n /**\n * Deserialize JSON using our special encodings.\n * @param {string} str\n * @return {?}\n */\n static deserialize(str) {\n return JSON.parse(str, (key, value) => {\n if (value == 'NaN') {\n return NaN;\n } else if (value == '-Infinity') {\n return -Infinity;\n } else if (value == 'Infinity') {\n return Infinity;\n } else if (value && typeof value == 'object' &&\n value['__type__'] == 'TimeRanges') {\n // TimeRanges objects have been unpacked and sent as plain data.\n // Simulate the original TimeRanges object.\n return shaka.cast.CastUtils.simulateTimeRanges_(value);\n } else if (value && typeof value == 'object' &&\n value['__type__'] == 'Uint8Array') {\n return shaka.cast.CastUtils.makeUint8Array_(value);\n } else if (value && typeof value == 'object' &&\n value['__type__'] == 'Error') {\n return shaka.cast.CastUtils.makeError_(value);\n }\n return value;\n });\n }\n\n\n /**\n * @param {!TimeRanges} ranges\n * @return {!Object}\n * @private\n */\n static unpackTimeRanges_(ranges) {\n const obj = {\n '__type__': 'TimeRanges', // a signal to deserialize\n 'length': ranges.length,\n 'start': [],\n 'end': [],\n };\n\n const TimeRangesUtils = shaka.media.TimeRangesUtils;\n for (const {start, end} of TimeRangesUtils.getBufferedInfo(ranges)) {\n obj['start'].push(start);\n obj['end'].push(end);\n }\n\n return obj;\n }\n\n\n /**\n * Creates a simulated TimeRanges object from data sent by the cast receiver.\n * @param {?} obj\n * @return {{\n * length: number,\n * start: function(number): number,\n * end: function(number): number\n * }}\n * @private\n */\n static simulateTimeRanges_(obj) {\n return {\n length: obj.length,\n // NOTE: a more complete simulation would throw when |i| was out of range,\n // but for simplicity we will assume a well-behaved application that uses\n // length instead of catch to stop iterating.\n start: (i) => { return obj.start[i]; },\n end: (i) => { return obj.end[i]; },\n };\n }\n\n\n /**\n * @param {!Uint8Array} array\n * @return {!Object}\n * @private\n */\n static unpackUint8Array_(array) {\n return {\n '__type__': 'Uint8Array', // a signal to deserialize\n 'entries': Array.from(array),\n };\n }\n\n\n /**\n * Creates a Uint8Array object from data sent by the cast receiver.\n * @param {?} obj\n * @return {!Uint8Array}\n * @private\n */\n static makeUint8Array_(obj) {\n return new Uint8Array(/** @type {!Array.} */ (obj['entries']));\n }\n\n\n /**\n * @param {!Error} error\n * @return {!Object}\n * @private\n */\n static unpackError_(error) {\n // None of the properties in TypeError are enumerable, but there are some\n // common Error properties we expect. We also enumerate any enumerable\n // properties and \"own\" properties of the type, in case there is an Error\n // subtype with additional properties we don't know about in advance.\n const properties = new Set(['name', 'message', 'stack']);\n for (const key in error) {\n properties.add(key);\n }\n for (const key of Object.getOwnPropertyNames(error)) {\n properties.add(key);\n }\n\n const contents = {};\n for (const key of properties) {\n contents[key] = error[key];\n }\n\n return {\n '__type__': 'Error', // a signal to deserialize\n 'contents': contents,\n };\n }\n\n\n /**\n * Creates an Error object from data sent by the cast receiver.\n * @param {?} obj\n * @return {!Error}\n * @private\n */\n static makeError_(obj) {\n const contents = obj['contents'];\n const error = new Error(contents['message']);\n for (const key in contents) {\n error[key] = contents[key];\n }\n return error;\n }\n};\n\n/**\n * HTMLMediaElement events that are proxied while casting.\n * @const {!Array.}\n */\nshaka.cast.CastUtils.VideoEvents = [\n 'ended',\n 'play',\n 'playing',\n 'pause',\n 'pausing',\n 'ratechange',\n 'seeked',\n 'seeking',\n 'timeupdate',\n 'volumechange',\n];\n\n\n/**\n * HTMLMediaElement attributes that are proxied while casting.\n * @const {!Array.}\n */\nshaka.cast.CastUtils.VideoAttributes = [\n 'buffered',\n 'currentTime',\n 'duration',\n 'ended',\n 'loop',\n 'muted',\n 'paused',\n 'playbackRate',\n 'seeking',\n 'videoHeight',\n 'videoWidth',\n 'volume',\n];\n\n\n/**\n * HTMLMediaElement attributes that are transferred when casting begins.\n * @const {!Array.}\n */\nshaka.cast.CastUtils.VideoInitStateAttributes = [\n 'loop',\n 'playbackRate',\n];\n\n\n/**\n * HTMLMediaElement methods with no return value that are proxied while casting.\n * @const {!Array.}\n */\nshaka.cast.CastUtils.VideoVoidMethods = [\n 'pause',\n 'play',\n];\n\n\n/**\n * Player getter methods that are proxied while casting.\n * The key is the method, the value is the frequency of updates.\n * Frequency 1 translates to every update; frequency 2 to every 2 updates, etc.\n * @const {!Object.}\n */\nshaka.cast.CastUtils.PlayerGetterMethods = {\n // NOTE: The 'drmInfo' property is not proxied, as it is very large.\n 'getAssetUri': 2,\n 'getAudioLanguages': 4,\n 'getAudioLanguagesAndRoles': 4,\n 'getBufferFullness': 1,\n 'getBufferedInfo': 2,\n 'getExpiration': 2,\n 'getKeyStatuses': 2,\n // NOTE: The 'getManifest' property is not proxied, as it is very large.\n // NOTE: The 'getManifestParserFactory' property is not proxied, as it would\n // not serialize.\n 'getPlaybackRate': 2,\n 'getTextLanguages': 4,\n 'getTextLanguagesAndRoles': 4,\n 'getImageTracks': 2,\n 'getThumbnails': 2,\n 'isAudioOnly': 10,\n 'isBuffering': 1,\n 'isInProgress': 1,\n 'isLive': 10,\n 'isTextTrackVisible': 1,\n 'keySystem': 10,\n 'seekRange': 1,\n 'getLoadMode': 10,\n 'getManifestType': 10,\n 'isFullyLoaded': 1,\n 'isEnded': 1,\n};\n\n\n/**\n * Player getter methods with data large enough to be sent in their own update\n * messages, to reduce the size of each message. The format of this is\n * identical to PlayerGetterMethods.\n * @const {!Object.}\n */\nshaka.cast.CastUtils.LargePlayerGetterMethods = {\n // NOTE: The 'getSharedConfiguration' property is not proxied as it would\n // not be possible to share a reference.\n 'getConfiguration': 4,\n 'getStats': 5,\n 'getTextTracks': 2,\n 'getVariantTracks': 2,\n};\n\n\n/**\n * Player getter methods that are proxied while casting, but only when casting\n * a livestream.\n * The key is the method, the value is the frequency of updates.\n * Frequency 1 translates to every update; frequency 2 to every 2 updates, etc.\n * @const {!Object.}\n */\nshaka.cast.CastUtils.PlayerGetterMethodsThatRequireLive = {\n 'getPlayheadTimeAsDate': 1,\n 'getPresentationStartTimeAsDate': 20,\n 'getSegmentAvailabilityDuration': 20,\n};\n\n\n/**\n * Player getter and setter methods that are used to transfer state when casting\n * begins.\n * @const {!Array.>}\n */\nshaka.cast.CastUtils.PlayerInitState = [\n ['getConfiguration', 'configure'],\n];\n\n\n/**\n * Player getter and setter methods that are used to transfer state after\n * load() is resolved.\n * @const {!Array.>}\n */\nshaka.cast.CastUtils.PlayerInitAfterLoadState = [\n ['isTextTrackVisible', 'setTextTrackVisibility'],\n];\n\n\n/**\n * Player methods with no return value that are proxied while casting.\n * @const {!Array.}\n */\nshaka.cast.CastUtils.PlayerVoidMethods = [\n 'addChaptersTrack',\n 'addTextTrackAsync',\n 'addThumbnailsTrack',\n 'cancelTrickPlay',\n 'configure',\n 'getChapters',\n 'getChaptersTracks',\n 'resetConfiguration',\n 'retryStreaming',\n 'selectAudioLanguage',\n 'selectTextLanguage',\n 'selectTextTrack',\n 'selectVariantTrack',\n 'selectVariantsByLabel',\n 'setTextTrackVisibility',\n 'trickPlay',\n 'updateStartTime',\n 'goToLive',\n];\n\n\n/**\n * Player methods returning a Promise that are proxied while casting.\n * @const {!Array.}\n */\nshaka.cast.CastUtils.PlayerPromiseMethods = [\n 'attach',\n 'attachCanvas',\n 'detach',\n // The manifestFactory parameter of load is not supported.\n 'load',\n 'unload',\n];\n\n\n/**\n * @typedef {{\n * video: Object,\n * player: Object,\n * manifest: ?string,\n * startTime: ?number\n * }}\n * @property {Object} video\n * Dictionary of video properties to be set.\n * @property {Object} player\n * Dictionary of player setters to be called.\n * @property {?string} manifest\n * The currently-selected manifest, if present.\n * @property {?number} startTime\n * The playback start time, if currently playing.\n */\nshaka.cast.CastUtils.InitStateType;\n\n\n/**\n * The namespace for Shaka messages on the cast bus.\n * @const {string}\n */\nshaka.cast.CastUtils.SHAKA_MESSAGE_NAMESPACE = 'urn:x-cast:com.google.shaka.v2';\n\n\n/**\n * The namespace for generic messages on the cast bus.\n * @const {string}\n */\nshaka.cast.CastUtils.GENERIC_MESSAGE_NAMESPACE =\n 'urn:x-cast:com.google.cast.media';\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.cast.CastSender');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.cast.CastUtils');\ngoog.require('shaka.log');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.IDestroyable');\ngoog.require('shaka.util.PublicPromise');\ngoog.require('shaka.util.Timer');\n\n\n/**\n * @implements {shaka.util.IDestroyable}\n */\nshaka.cast.CastSender = class {\n /**\n * @param {string} receiverAppId The ID of the cast receiver application.\n * @param {function()} onStatusChanged A callback invoked when the cast status\n * changes.\n * @param {function()} onFirstCastStateUpdate A callback invoked when an\n * \"update\" event has been received for the first time.\n * @param {function(string, !shaka.util.FakeEvent)} onRemoteEvent A callback\n * invoked with target name and event when a remote event is received.\n * @param {function()} onResumeLocal A callback invoked when the local player\n * should resume playback. Called before the cached remote state is wiped.\n * @param {function()} onInitStateRequired A callback to get local player's.\n * state. Invoked when casting is initiated from Chrome's cast button.\n * @param {boolean} androidReceiverCompatible Indicates if the app is\n * compatible with an Android Receiver.\n */\n constructor(receiverAppId, onStatusChanged, onFirstCastStateUpdate,\n onRemoteEvent, onResumeLocal, onInitStateRequired,\n androidReceiverCompatible) {\n /** @private {string} */\n this.receiverAppId_ = receiverAppId;\n\n /** @private {boolean} */\n this.androidReceiverCompatible_ = androidReceiverCompatible;\n\n /** @private {shaka.util.Timer} */\n this.statusChangeTimer_ = new shaka.util.Timer(onStatusChanged);\n\n /** @private {?function()} */\n this.onFirstCastStateUpdate_ = onFirstCastStateUpdate;\n\n /** @private {boolean} */\n this.hasJoinedExistingSession_ = false;\n\n /** @private {?function(string, !shaka.util.FakeEvent)} */\n this.onRemoteEvent_ = onRemoteEvent;\n\n /** @private {?function()} */\n this.onResumeLocal_ = onResumeLocal;\n\n /** @private {?function()} */\n this.onInitStateRequired_ = onInitStateRequired;\n\n /** @private {boolean} */\n this.apiReady_ = false;\n\n /** @private {boolean} */\n this.isCasting_ = false;\n\n /** @private {string} */\n this.receiverName_ = '';\n\n /** @private {Object} */\n this.appData_ = null;\n\n /** @private {?function()} */\n this.onConnectionStatusChangedBound_ =\n () => this.onConnectionStatusChanged_();\n\n /** @private {?function(string, string)} */\n this.onMessageReceivedBound_ = (namespace, serialized) =>\n this.onMessageReceived_(namespace, serialized);\n\n /** @private {Object} */\n this.cachedProperties_ = {\n 'video': {},\n 'player': {},\n };\n\n /** @private {number} */\n this.nextAsyncCallId_ = 0;\n\n /** @private {Object.} */\n this.asyncCallPromises_ = {};\n\n /** @private {shaka.util.PublicPromise} */\n this.castPromise_ = null;\n\n shaka.cast.CastSender.instances_.add(this);\n }\n\n\n /** @override */\n destroy() {\n shaka.cast.CastSender.instances_.delete(this);\n\n this.rejectAllPromises_();\n if (shaka.cast.CastSender.session_) {\n this.removeListeners_();\n // Don't leave the session, so that this session can be re-used later if\n // necessary.\n }\n\n if (this.statusChangeTimer_) {\n this.statusChangeTimer_.stop();\n this.statusChangeTimer_ = null;\n }\n\n this.onRemoteEvent_ = null;\n this.onResumeLocal_ = null;\n this.apiReady_ = false;\n this.isCasting_ = false;\n this.appData_ = null;\n this.cachedProperties_ = null;\n this.asyncCallPromises_ = null;\n this.castPromise_ = null;\n this.onConnectionStatusChangedBound_ = null;\n this.onMessageReceivedBound_ = null;\n\n return Promise.resolve();\n }\n\n\n /**\n * @return {boolean} True if the cast API is available.\n */\n apiReady() {\n return this.apiReady_;\n }\n\n\n /**\n * @return {boolean} True if there are receivers.\n */\n hasReceivers() {\n return shaka.cast.CastSender.hasReceivers_;\n }\n\n\n /**\n * @return {boolean} True if we are currently casting.\n */\n isCasting() {\n return this.isCasting_;\n }\n\n\n /**\n * @return {string} The name of the Cast receiver device, if isCasting().\n */\n receiverName() {\n return this.receiverName_;\n }\n\n\n /**\n * @return {boolean} True if we have a cache of remote properties from the\n * receiver.\n */\n hasRemoteProperties() {\n return Object.keys(this.cachedProperties_['video']).length != 0;\n }\n\n\n /** Initialize the Cast API. */\n init() {\n const CastSender = shaka.cast.CastSender;\n\n if (!this.receiverAppId_.length) {\n // Return if no cast receiver id has been provided.\n // Nothing will be initialized, no global hooks will be installed.\n // If the receiver ID changes before this instance dies, init will be\n // called again.\n return;\n }\n\n // Check for the cast API.\n if (!window.chrome || !chrome.cast || !chrome.cast.isAvailable) {\n // If the API is not available on this platform or is not ready yet,\n // install a hook to be notified when it becomes available.\n // If the API becomes available before this instance dies, init will be\n // called again.\n\n // Check if our callback is already installed.\n if (window.__onGCastApiAvailable !== CastSender.onGCastApiAvailable_) {\n // Save pre-existing __onGCastApiAvailable in order to restore later.\n CastSender.__onGCastApiAvailable_ =\n window.__onGCastApiAvailable || null;\n window.__onGCastApiAvailable = CastSender.onGCastApiAvailable_;\n }\n\n return;\n }\n\n // The API is now available.\n this.apiReady_ = true;\n this.statusChangeTimer_.tickNow();\n\n // Use static versions of the API callbacks, since the ChromeCast API is\n // static. If we used local versions, we might end up retaining references\n // to destroyed players here.\n const sessionRequest = new chrome.cast.SessionRequest(this.receiverAppId_,\n /* capabilities= */ [],\n /* timeout= */ null,\n this.androidReceiverCompatible_,\n /* credentialsData= */null);\n const apiConfig = new chrome.cast.ApiConfig(sessionRequest,\n (session) => CastSender.onExistingSessionJoined_(session),\n (availability) => CastSender.onReceiverStatusChanged_(availability),\n 'origin_scoped');\n\n // TODO: Have never seen this fail. When would it and how should we react?\n chrome.cast.initialize(apiConfig,\n () => { shaka.log.debug('CastSender: init'); },\n (error) => { shaka.log.error('CastSender: init error', error); });\n if (shaka.cast.CastSender.hasReceivers_) {\n // Fire a fake cast status change, to simulate the update that\n // would be fired normally.\n // This is after a brief delay, to give users a chance to add event\n // listeners.\n this.statusChangeTimer_.tickAfter(shaka.cast.CastSender.STATUS_DELAY);\n }\n\n const oldSession = shaka.cast.CastSender.session_;\n if (oldSession && oldSession.status != chrome.cast.SessionStatus.STOPPED) {\n // The old session still exists, so re-use it.\n shaka.log.debug('CastSender: re-using existing connection');\n this.onExistingSessionJoined_(oldSession);\n } else {\n // The session has been canceled in the meantime, so ignore it.\n shaka.cast.CastSender.session_ = null;\n }\n }\n\n\n /**\n * Set application-specific data.\n *\n * @param {Object} appData Application-specific data to relay to the receiver.\n */\n setAppData(appData) {\n this.appData_ = appData;\n if (this.isCasting_) {\n this.sendMessage_({\n 'type': 'appData',\n 'appData': this.appData_,\n });\n }\n }\n\n\n /**\n * @return {!Promise} Resolved when connected to a receiver. Rejected if the\n * connection fails or is canceled by the user.\n */\n async cast() {\n if (!this.apiReady_) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.CAST,\n shaka.util.Error.Code.CAST_API_UNAVAILABLE);\n }\n if (!shaka.cast.CastSender.hasReceivers_) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.CAST,\n shaka.util.Error.Code.NO_CAST_RECEIVERS);\n }\n if (this.isCasting_) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.CAST,\n shaka.util.Error.Code.ALREADY_CASTING);\n }\n\n this.castPromise_ = new shaka.util.PublicPromise();\n chrome.cast.requestSession(\n (session) => this.onSessionInitiated_(session),\n (error) => this.onConnectionError_(error));\n await this.castPromise_;\n }\n\n\n /**\n * Shows user a cast dialog where they can choose to stop\n * casting. Relies on Chrome to perform disconnect if they do.\n * Doesn't do anything if not connected.\n */\n showDisconnectDialog() {\n if (!this.isCasting_) {\n return;\n }\n\n chrome.cast.requestSession(\n (session) => this.onSessionInitiated_(session),\n (error) => this.onConnectionError_(error));\n }\n\n\n /**\n * Forces the receiver app to shut down by disconnecting. Does nothing if not\n * connected.\n */\n forceDisconnect() {\n if (!this.isCasting_) {\n return;\n }\n\n this.rejectAllPromises_();\n\n if (shaka.cast.CastSender.session_) {\n this.removeListeners_();\n\n // This can throw if we've already been disconnected somehow.\n try {\n shaka.cast.CastSender.session_.stop(() => {}, () => {});\n } catch (error) {}\n\n shaka.cast.CastSender.session_ = null;\n }\n\n // Update casting status.\n this.onConnectionStatusChanged_();\n }\n\n\n /**\n * Getter for properties of remote objects.\n * @param {string} targetName\n * @param {string} property\n * @return {?}\n */\n get(targetName, property) {\n goog.asserts.assert(targetName == 'video' || targetName == 'player',\n 'Unexpected target name');\n const CastUtils = shaka.cast.CastUtils;\n if (targetName == 'video') {\n if (CastUtils.VideoVoidMethods.includes(property)) {\n return (...args) => this.remoteCall_(targetName, property, ...args);\n }\n } else if (targetName == 'player') {\n if (CastUtils.PlayerGetterMethodsThatRequireLive[property]) {\n const isLive = this.get('player', 'isLive')();\n goog.asserts.assert(isLive,\n property + ' should be called on a live stream!');\n // If the property shouldn't exist, return a fake function so that the\n // user doesn't call an undefined function and get a second error.\n if (!isLive) {\n return () => undefined;\n }\n }\n if (CastUtils.PlayerVoidMethods.includes(property)) {\n return (...args) => this.remoteCall_(targetName, property, ...args);\n }\n if (CastUtils.PlayerPromiseMethods.includes(property)) {\n return (...args) =>\n this.remoteAsyncCall_(targetName, property, ...args);\n }\n if (CastUtils.PlayerGetterMethods[property] ||\n CastUtils.LargePlayerGetterMethods[property]) {\n return () => this.propertyGetter_(targetName, property);\n }\n }\n\n return this.propertyGetter_(targetName, property);\n }\n\n\n /**\n * Setter for properties of remote objects.\n * @param {string} targetName\n * @param {string} property\n * @param {?} value\n */\n set(targetName, property, value) {\n goog.asserts.assert(targetName == 'video' || targetName == 'player',\n 'Unexpected target name');\n\n this.cachedProperties_[targetName][property] = value;\n this.sendMessage_({\n 'type': 'set',\n 'targetName': targetName,\n 'property': property,\n 'value': value,\n });\n }\n\n\n /**\n * @param {chrome.cast.Session} session\n * @private\n */\n onSessionInitiated_(session) {\n shaka.log.debug('CastSender: onSessionInitiated');\n\n const initState = this.onInitStateRequired_();\n\n this.onSessionCreated_(session);\n\n this.sendMessage_({\n 'type': 'init',\n 'initState': initState,\n 'appData': this.appData_,\n });\n\n this.castPromise_.resolve();\n }\n\n\n /**\n * @param {chrome.cast.Error} error\n * @private\n */\n onConnectionError_(error) {\n // Default error code:\n let code = shaka.util.Error.Code.UNEXPECTED_CAST_ERROR;\n\n switch (error.code) {\n case 'cancel':\n code = shaka.util.Error.Code.CAST_CANCELED_BY_USER;\n break;\n case 'timeout':\n code = shaka.util.Error.Code.CAST_CONNECTION_TIMED_OUT;\n break;\n case 'receiver_unavailable':\n code = shaka.util.Error.Code.CAST_RECEIVER_APP_UNAVAILABLE;\n break;\n }\n\n this.castPromise_.reject(new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.CAST,\n code,\n error));\n }\n\n\n /**\n * @param {string} targetName\n * @param {string} property\n * @return {?}\n * @private\n */\n propertyGetter_(targetName, property) {\n goog.asserts.assert(targetName == 'video' || targetName == 'player',\n 'Unexpected target name');\n return this.cachedProperties_[targetName][property];\n }\n\n\n /**\n * @param {string} targetName\n * @param {string} methodName\n * @param {...*} varArgs\n * @private\n */\n remoteCall_(targetName, methodName, ...varArgs) {\n goog.asserts.assert(targetName == 'video' || targetName == 'player',\n 'Unexpected target name');\n this.sendMessage_({\n 'type': 'call',\n 'targetName': targetName,\n 'methodName': methodName,\n 'args': varArgs,\n });\n }\n\n\n /**\n * @param {string} targetName\n * @param {string} methodName\n * @param {...*} varArgs\n * @return {!Promise}\n * @private\n */\n remoteAsyncCall_(targetName, methodName, ...varArgs) {\n goog.asserts.assert(targetName == 'video' || targetName == 'player',\n 'Unexpected target name');\n\n const p = new shaka.util.PublicPromise();\n const id = this.nextAsyncCallId_.toString();\n this.nextAsyncCallId_++;\n this.asyncCallPromises_[id] = p;\n\n try {\n this.sendMessage_({\n 'type': 'asyncCall',\n 'targetName': targetName,\n 'methodName': methodName,\n 'args': varArgs,\n 'id': id,\n });\n } catch (error) {\n p.reject(error);\n }\n return p;\n }\n\n\n /**\n * A static version of onExistingSessionJoined_, that calls that method for\n * each known instance.\n * @param {chrome.cast.Session} session\n * @private\n */\n static onExistingSessionJoined_(session) {\n for (const instance of shaka.cast.CastSender.instances_) {\n instance.onExistingSessionJoined_(session);\n }\n }\n\n\n /**\n * @param {chrome.cast.Session} session\n * @private\n */\n onExistingSessionJoined_(session) {\n shaka.log.debug('CastSender: onExistingSessionJoined');\n\n this.castPromise_ = new shaka.util.PublicPromise();\n this.hasJoinedExistingSession_ = true;\n\n this.onSessionInitiated_(session);\n }\n\n\n /**\n * A static version of onReceiverStatusChanged_, that calls that method for\n * each known instance.\n * @param {string} availability\n * @private\n */\n static onReceiverStatusChanged_(availability) {\n for (const instance of shaka.cast.CastSender.instances_) {\n instance.onReceiverStatusChanged_(availability);\n }\n }\n\n\n /**\n * @param {string} availability\n * @private\n */\n onReceiverStatusChanged_(availability) {\n // The cast API is telling us whether there are any cast receiver devices\n // available.\n shaka.log.debug('CastSender: receiver status', availability);\n shaka.cast.CastSender.hasReceivers_ = availability == 'available';\n this.statusChangeTimer_.tickNow();\n }\n\n\n /**\n * @param {chrome.cast.Session} session\n * @private\n */\n onSessionCreated_(session) {\n shaka.cast.CastSender.session_ = session;\n session.addUpdateListener(this.onConnectionStatusChangedBound_);\n session.addMessageListener(shaka.cast.CastUtils.SHAKA_MESSAGE_NAMESPACE,\n this.onMessageReceivedBound_);\n this.onConnectionStatusChanged_();\n }\n\n\n /**\n * @private\n */\n removeListeners_() {\n const session = shaka.cast.CastSender.session_;\n session.removeUpdateListener(this.onConnectionStatusChangedBound_);\n session.removeMessageListener(shaka.cast.CastUtils.SHAKA_MESSAGE_NAMESPACE,\n this.onMessageReceivedBound_);\n }\n\n\n /**\n * @private\n */\n onConnectionStatusChanged_() {\n const connected = shaka.cast.CastSender.session_ ?\n shaka.cast.CastSender.session_.status == 'connected' :\n false;\n shaka.log.debug('CastSender: connection status', connected);\n if (this.isCasting_ && !connected) {\n // Tell CastProxy to transfer state back to local player.\n this.onResumeLocal_();\n\n // Clear whatever we have cached.\n for (const targetName in this.cachedProperties_) {\n this.cachedProperties_[targetName] = {};\n }\n\n this.rejectAllPromises_();\n }\n\n this.isCasting_ = connected;\n this.receiverName_ = connected ?\n shaka.cast.CastSender.session_.receiver.friendlyName :\n '';\n this.statusChangeTimer_.tickNow();\n }\n\n\n /**\n * Reject any async call promises that are still pending.\n * @private\n */\n rejectAllPromises_() {\n for (const id in this.asyncCallPromises_) {\n const p = this.asyncCallPromises_[id];\n delete this.asyncCallPromises_[id];\n\n // Reject pending async operations as if they were interrupted.\n // At the moment, load() is the only async operation we are worried about.\n p.reject(new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.PLAYER,\n shaka.util.Error.Code.LOAD_INTERRUPTED));\n }\n }\n\n\n /**\n * @param {string} namespace\n * @param {string} serialized\n * @private\n */\n onMessageReceived_(namespace, serialized) {\n // Since this method is in the compiled library, make sure all messages\n // passed in here were created with quoted property names.\n\n const message = shaka.cast.CastUtils.deserialize(serialized);\n shaka.log.v2('CastSender: message', message);\n\n switch (message['type']) {\n case 'event': {\n const targetName = message['targetName'];\n const event = message['event'];\n const fakeEvent = shaka.util.FakeEvent.fromRealEvent(event);\n this.onRemoteEvent_(targetName, fakeEvent);\n break;\n }\n case 'update': {\n const update = message['update'];\n for (const targetName in update) {\n const target = this.cachedProperties_[targetName] || {};\n for (const property in update[targetName]) {\n target[property] = update[targetName][property];\n }\n }\n if (this.hasJoinedExistingSession_) {\n this.onFirstCastStateUpdate_();\n this.hasJoinedExistingSession_ = false;\n }\n break;\n }\n case 'asyncComplete': {\n const id = message['id'];\n const error = message['error'];\n const p = this.asyncCallPromises_[id];\n delete this.asyncCallPromises_[id];\n\n goog.asserts.assert(p, 'Unexpected async id');\n if (!p) {\n break;\n }\n\n if (error) {\n // This is a hacky way to reconstruct the serialized error.\n const reconstructedError = new shaka.util.Error(\n error.severity, error.category, error.code);\n for (const k in error) {\n (/** @type {Object} */(reconstructedError))[k] = error[k];\n }\n p.reject(reconstructedError);\n } else {\n p.resolve();\n }\n break;\n }\n }\n }\n\n\n /**\n * @param {!Object} message\n * @private\n */\n sendMessage_(message) {\n // Since this method is in the compiled library, make sure all messages\n // passed in here were created with quoted property names.\n\n const serialized = shaka.cast.CastUtils.serialize(message);\n const session = shaka.cast.CastSender.session_;\n\n // NOTE: This takes an error callback that we have not seen fire. We don't\n // know if it would fire synchronously or asynchronously. Until we know how\n // it works, we just log from that callback. But we _have_ seen\n // sendMessage() throw synchronously, so we handle that.\n try {\n session.sendMessage(shaka.cast.CastUtils.SHAKA_MESSAGE_NAMESPACE,\n serialized,\n () => {}, // success callback\n shaka.log.error); // error callback\n } catch (error) {\n shaka.log.error('Cast session sendMessage threw', error);\n\n // Translate the error\n const shakaError = new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.CAST,\n shaka.util.Error.Code.CAST_CONNECTION_TIMED_OUT,\n error);\n\n // Dispatch it through the Player proxy\n const fakeEvent = new shaka.util.FakeEvent(\n 'error', (new Map()).set('detail', shakaError));\n this.onRemoteEvent_('player', fakeEvent);\n\n // Force this session to disconnect and transfer playback to the local\n // device\n this.forceDisconnect();\n\n // Throw the translated error from this getter/setter/method to the UI/app\n throw shakaError;\n }\n }\n};\n\n/** @type {number} */\nshaka.cast.CastSender.STATUS_DELAY = 0.02;\n\n/** @private {boolean} */\nshaka.cast.CastSender.hasReceivers_ = false;\n\n/** @private {chrome.cast.Session} */\nshaka.cast.CastSender.session_ = null;\n\n/** @private {?function(boolean)} */\nshaka.cast.CastSender.__onGCastApiAvailable_ = null;\n\n/**\n * A set of all living CastSender instances. The constructor and destroy\n * methods will add and remove instances from this set.\n *\n * This is used to deal with delayed initialization of the Cast SDK. When the\n * SDK becomes available, instances will be reinitialized.\n *\n * @private {!Set.}\n */\nshaka.cast.CastSender.instances_ = new Set();\n\n/**\n * If the cast SDK is not available yet, it will invoke this callback once it\n * becomes available.\n *\n * @param {boolean} loaded\n * @private\n */\nshaka.cast.CastSender.onSdkLoaded_ = (loaded) => {\n if (loaded) {\n // Any living instances of CastSender should have their init methods called\n // again now that the API is available.\n for (const sender of shaka.cast.CastSender.instances_) {\n sender.init();\n }\n }\n};\n\n/**\n * @param {boolean} available\n * @private\n */\nshaka.cast.CastSender.onGCastApiAvailable_ = (available) => {\n // Restore callback from saved.\n if (shaka.cast.CastSender.__onGCastApiAvailable_) {\n window.__onGCastApiAvailable =\n shaka.cast.CastSender.__onGCastApiAvailable_;\n } else {\n delete window.__onGCastApiAvailable;\n }\n shaka.cast.CastSender.__onGCastApiAvailable_ = null;\n\n // A note about this value: In our testing environment, we load both\n // uncompiled and compiled code. This global callback in uncompiled mode\n // can be overwritten by the same in compiled mode. The two versions will\n // each have their own instances_ map. Therefore the callback must have a\n // name, as opposed to being anonymous. This way, the CastSender tests\n // can invoke the named static method instead of using a global that could\n // be overwritten.\n shaka.cast.CastSender.onSdkLoaded_(available);\n\n // call restored callback (if any)\n if (typeof window.__onGCastApiAvailable === 'function') {\n window.__onGCastApiAvailable(available);\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.cast.CastProxy');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.Player');\ngoog.require('shaka.cast.CastSender');\ngoog.require('shaka.cast.CastUtils');\ngoog.require('shaka.log');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.FakeEventTarget');\ngoog.require('shaka.util.IDestroyable');\n\n\n/**\n * @event shaka.cast.CastProxy.CastStatusChangedEvent\n * @description Fired when cast status changes. The status change will be\n * reflected in canCast() and isCasting().\n * @property {string} type\n * 'caststatuschanged'\n * @exportDoc\n */\n\n\n/**\n * @summary A proxy to switch between local and remote playback for Chromecast\n * in a way that is transparent to the app's controls.\n *\n * @implements {shaka.util.IDestroyable}\n * @export\n */\nshaka.cast.CastProxy = class extends shaka.util.FakeEventTarget {\n /**\n * @param {!HTMLMediaElement} video The local video element associated with\n * the local Player instance.\n * @param {!shaka.Player} player A local Player instance.\n * @param {string} receiverAppId The ID of the cast receiver application.\n * If blank, casting will not be available, but the proxy will still\n * function otherwise.\n * @param {boolean} androidReceiverCompatible Indicates if the app is\n * compatible with an Android Receiver.\n */\n constructor(video, player, receiverAppId,\n androidReceiverCompatible = false) {\n super();\n\n /** @private {HTMLMediaElement} */\n this.localVideo_ = video;\n\n /** @private {shaka.Player} */\n this.localPlayer_ = player;\n\n /** @private {Object} */\n this.videoProxy_ = null;\n\n /** @private {Object} */\n this.playerProxy_ = null;\n\n /** @private {shaka.util.FakeEventTarget} */\n this.videoEventTarget_ = null;\n\n /** @private {shaka.util.FakeEventTarget} */\n this.playerEventTarget_ = null;\n\n /** @private {shaka.util.EventManager} */\n this.eventManager_ = null;\n\n /** @private {string} */\n this.receiverAppId_ = receiverAppId;\n\n /** @private {boolean} */\n this.androidReceiverCompatible_ = androidReceiverCompatible;\n\n /** @private {!Map} */\n this.compiledToExternNames_ = new Map();\n\n /** @private {shaka.cast.CastSender} */\n this.sender_ = new shaka.cast.CastSender(\n receiverAppId,\n () => this.onCastStatusChanged_(),\n () => this.onFirstCastStateUpdate_(),\n (targetName, event) => this.onRemoteEvent_(targetName, event),\n () => this.onResumeLocal_(),\n () => this.getInitState_(),\n androidReceiverCompatible);\n\n\n this.init_();\n }\n\n /**\n * Destroys the proxy and the underlying local Player.\n *\n * @param {boolean=} forceDisconnect If true, force the receiver app to shut\n * down by disconnecting. Does nothing if not connected.\n * @override\n * @export\n */\n destroy(forceDisconnect) {\n if (forceDisconnect) {\n this.sender_.forceDisconnect();\n }\n\n if (this.eventManager_) {\n this.eventManager_.release();\n this.eventManager_ = null;\n }\n\n const waitFor = [];\n if (this.localPlayer_) {\n waitFor.push(this.localPlayer_.destroy());\n this.localPlayer_ = null;\n }\n\n if (this.sender_) {\n waitFor.push(this.sender_.destroy());\n this.sender_ = null;\n }\n\n this.localVideo_ = null;\n this.videoProxy_ = null;\n this.playerProxy_ = null;\n\n // FakeEventTarget implements IReleasable\n super.release();\n\n return Promise.all(waitFor);\n }\n\n /**\n * Get a proxy for the video element that delegates to local and remote video\n * elements as appropriate.\n *\n * @suppress {invalidCasts} to cast proxy Objects to unrelated types\n * @return {!HTMLMediaElement}\n * @export\n */\n getVideo() {\n return /** @type {!HTMLMediaElement} */(this.videoProxy_);\n }\n\n /**\n * Get a proxy for the Player that delegates to local and remote Player\n * objects as appropriate.\n *\n * @suppress {invalidCasts} to cast proxy Objects to unrelated types\n * @return {!shaka.Player}\n * @export\n */\n getPlayer() {\n return /** @type {!shaka.Player} */(this.playerProxy_);\n }\n\n /**\n * @return {boolean} True if the cast API is available and there are\n * receivers.\n * @export\n */\n canCast() {\n return this.sender_.apiReady() && this.sender_.hasReceivers();\n }\n\n /**\n * @return {boolean} True if we are currently casting.\n * @export\n */\n isCasting() {\n return this.sender_.isCasting();\n }\n\n /**\n * @return {string} The name of the Cast receiver device, if isCasting().\n * @export\n */\n receiverName() {\n return this.sender_.receiverName();\n }\n\n /**\n * @return {!Promise} Resolved when connected to a receiver. Rejected if the\n * connection fails or is canceled by the user.\n * @export\n */\n async cast() {\n // TODO: transfer manually-selected tracks?\n // TODO: transfer side-loaded text tracks?\n\n await this.sender_.cast();\n if (!this.localPlayer_) {\n // We've already been destroyed.\n return;\n }\n\n // Unload the local manifest when casting succeeds.\n await this.localPlayer_.unload();\n }\n\n /**\n * Set application-specific data.\n *\n * @param {Object} appData Application-specific data to relay to the receiver.\n * @export\n */\n setAppData(appData) {\n this.sender_.setAppData(appData);\n }\n\n /**\n * Show a dialog where user can choose to disconnect from the cast connection.\n * @export\n */\n suggestDisconnect() {\n this.sender_.showDisconnectDialog();\n }\n\n /**\n * Force the receiver app to shut down by disconnecting.\n * @export\n */\n forceDisconnect() {\n this.sender_.forceDisconnect();\n }\n\n\n /**\n * @param {string} newAppId\n * @param {boolean=} newCastAndroidReceiver\n * @export\n */\n async changeReceiverId(newAppId, newCastAndroidReceiver = false) {\n if (newAppId == this.receiverAppId_ &&\n newCastAndroidReceiver == this.androidReceiverCompatible_) {\n // Nothing to change\n return;\n }\n\n this.receiverAppId_ = newAppId;\n this.androidReceiverCompatible_ = newCastAndroidReceiver;\n\n // Destroy the old sender\n this.sender_.forceDisconnect();\n await this.sender_.destroy();\n this.sender_ = null;\n\n\n // Create the new one\n this.sender_ = new shaka.cast.CastSender(\n newAppId,\n () => this.onCastStatusChanged_(),\n () => this.onFirstCastStateUpdate_(),\n (targetName, event) => this.onRemoteEvent_(targetName, event),\n () => this.onResumeLocal_(),\n () => this.getInitState_(),\n newCastAndroidReceiver);\n\n this.sender_.init();\n }\n\n /**\n * Initialize the Proxies and the Cast sender.\n * @private\n */\n init_() {\n this.sender_.init();\n\n this.eventManager_ = new shaka.util.EventManager();\n\n for (const name of shaka.cast.CastUtils.VideoEvents) {\n this.eventManager_.listen(this.localVideo_, name,\n (event) => this.videoProxyLocalEvent_(event));\n }\n\n for (const key in shaka.util.FakeEvent.EventName) {\n const name = shaka.util.FakeEvent.EventName[key];\n this.eventManager_.listen(this.localPlayer_, name,\n (event) => this.playerProxyLocalEvent_(event));\n }\n\n // We would like to use Proxy here, but it is not supported on Safari.\n this.videoProxy_ = {};\n for (const k in this.localVideo_) {\n Object.defineProperty(this.videoProxy_, k, {\n configurable: false,\n enumerable: true,\n get: () => this.videoProxyGet_(k),\n set: (value) => { this.videoProxySet_(k, value); },\n });\n }\n\n this.playerProxy_ = {};\n this.iterateOverPlayerMethods_((name, method) => {\n goog.asserts.assert(this.playerProxy_, 'Must have player proxy!');\n Object.defineProperty(this.playerProxy_, name, {\n configurable: false,\n enumerable: true,\n get: () => this.playerProxyGet_(name),\n });\n });\n\n if (COMPILED) {\n this.mapCompiledToUncompiledPlayerMethodNames_();\n }\n\n this.videoEventTarget_ = new shaka.util.FakeEventTarget();\n this.videoEventTarget_.dispatchTarget =\n /** @type {EventTarget} */(this.videoProxy_);\n\n this.playerEventTarget_ = new shaka.util.FakeEventTarget();\n this.playerEventTarget_.dispatchTarget =\n /** @type {EventTarget} */(this.playerProxy_);\n }\n\n\n /**\n * Maps compiled to uncompiled player names so we can figure out\n * which method to call in compiled build, while casting.\n * @private\n */\n mapCompiledToUncompiledPlayerMethodNames_() {\n // In compiled mode, UI tries to access player methods by their internal\n // renamed names, but the proxy object doesn't know about those. See\n // https://github.com/shaka-project/shaka-player/issues/2130 for details.\n const methodsToNames = new Map();\n this.iterateOverPlayerMethods_((name, method) => {\n if (methodsToNames.has(method)) {\n // If two method names, point to the same method, add them to the\n // map as aliases of each other.\n const name2 = methodsToNames.get(method);\n // Assumes that the compiled name is shorter\n if (name.length < name2.length) {\n this.compiledToExternNames_.set(name, name2);\n } else {\n this.compiledToExternNames_.set(name2, name);\n }\n } else {\n methodsToNames.set(method, name);\n }\n });\n }\n\n /**\n * Iterates over all of the methods of the player, including inherited methods\n * from FakeEventTarget.\n * @param {function(string, function())} operation\n * @private\n */\n iterateOverPlayerMethods_(operation) {\n goog.asserts.assert(this.localPlayer_, 'Must have player!');\n const player = /** @type {!Object} */ (this.localPlayer_);\n // Avoid accessing any over-written methods in the prototype chain.\n const seenNames = new Set();\n\n /**\n * @param {string} name\n * @return {boolean}\n */\n function shouldAddToTheMap(name) {\n if (name == 'constructor') {\n // Don't proxy the constructor.\n return false;\n }\n\n const method = /** @type {Object} */(player)[name];\n if (typeof method != 'function') {\n // Don't proxy non-methods.\n return false;\n }\n\n // Add if the map does not already have it\n return !seenNames.has(name);\n }\n\n // First, look at the methods on the object itself, so this can properly\n // proxy any methods not on the prototype (for example, in the mock player).\n for (const key in player) {\n if (shouldAddToTheMap(key)) {\n seenNames.add(key);\n operation(key, player[key]);\n }\n }\n\n // The exact length of the prototype chain might vary; for resiliency, this\n // will just look at the entire chain, rather than assuming a set length.\n let proto = /** @type {!Object} */ (Object.getPrototypeOf(player));\n const objProto = /** @type {!Object} */ (Object.getPrototypeOf({}));\n while (proto && proto != objProto) { // Don't proxy Object methods.\n for (const name of Object.getOwnPropertyNames(proto)) {\n if (shouldAddToTheMap(name)) {\n seenNames.add(name);\n operation(name, (player)[name]);\n }\n }\n proto = /** @type {!Object} */ (Object.getPrototypeOf(proto));\n }\n }\n\n /**\n * @return {shaka.cast.CastUtils.InitStateType} initState Video and player\n * state to be sent to the receiver.\n * @private\n */\n getInitState_() {\n const initState = {\n 'video': {},\n 'player': {},\n 'playerAfterLoad': {},\n 'manifest': this.localPlayer_.getAssetUri(),\n 'startTime': null,\n };\n\n // Pause local playback before capturing state.\n this.localVideo_.pause();\n\n for (const name of shaka.cast.CastUtils.VideoInitStateAttributes) {\n initState['video'][name] = this.localVideo_[name];\n }\n\n // If the video is still playing, set the startTime.\n // Has no effect if nothing is loaded.\n if (!this.localVideo_.ended) {\n initState['startTime'] = this.localVideo_.currentTime;\n }\n\n for (const pair of shaka.cast.CastUtils.PlayerInitState) {\n const getter = pair[0];\n const setter = pair[1];\n const value = /** @type {Object} */(this.localPlayer_)[getter]();\n\n initState['player'][setter] = value;\n }\n\n for (const pair of shaka.cast.CastUtils.PlayerInitAfterLoadState) {\n const getter = pair[0];\n const setter = pair[1];\n const value = /** @type {Object} */(this.localPlayer_)[getter]();\n\n initState['playerAfterLoad'][setter] = value;\n }\n\n return initState;\n }\n\n /**\n * Dispatch an event to notify the app that the status has changed.\n * @private\n */\n onCastStatusChanged_() {\n const event = new shaka.util.FakeEvent('caststatuschanged');\n this.dispatchEvent(event);\n }\n\n /**\n * Dispatch a synthetic play or pause event to ensure that the app correctly\n * knows that the player is playing, if joining an existing receiver.\n * @private\n */\n onFirstCastStateUpdate_() {\n const type = this.videoProxy_['paused'] ? 'pause' : 'play';\n const fakeEvent = new shaka.util.FakeEvent(type);\n this.videoEventTarget_.dispatchEvent(fakeEvent);\n }\n\n /**\n * Transfer remote state back and resume local playback.\n * @private\n */\n onResumeLocal_() {\n // Transfer back the player state.\n for (const pair of shaka.cast.CastUtils.PlayerInitState) {\n const getter = pair[0];\n const setter = pair[1];\n const value = this.sender_.get('player', getter)();\n /** @type {Object} */(this.localPlayer_)[setter](value);\n }\n\n // Get the most recent manifest URI and ended state.\n const assetUri = this.sender_.get('player', 'getAssetUri')();\n const ended = this.sender_.get('video', 'ended');\n\n let manifestReady = Promise.resolve();\n const autoplay = this.localVideo_.autoplay;\n\n let startTime = null;\n\n // If the video is still playing, set the startTime.\n // Has no effect if nothing is loaded.\n if (!ended) {\n startTime = this.sender_.get('video', 'currentTime');\n }\n\n let activeTextTrack;\n const textTracks = this.sender_.get('player', 'getTextTracks')();\n\n if (textTracks && textTracks.length) {\n activeTextTrack = textTracks.find((t) => t.active);\n }\n\n const isTextTrackVisible =\n this.sender_.get('player', 'isTextTrackVisible')();\n\n // Now load the manifest, if present.\n if (assetUri) {\n // Don't autoplay the content until we finish setting up initial state.\n this.localVideo_.autoplay = false;\n manifestReady = this.localPlayer_.load(assetUri, startTime);\n }\n\n // Get the video state into a temp variable since we will apply it async.\n const videoState = {};\n for (const name of shaka.cast.CastUtils.VideoInitStateAttributes) {\n videoState[name] = this.sender_.get('video', name);\n }\n\n // Finally, take on video state and player's \"after load\" state.\n manifestReady.then(() => {\n if (!this.localVideo_) {\n // We've already been destroyed.\n return;\n }\n\n for (const name of shaka.cast.CastUtils.VideoInitStateAttributes) {\n this.localVideo_[name] = videoState[name];\n }\n\n for (const pair of shaka.cast.CastUtils.PlayerInitAfterLoadState) {\n const getter = pair[0];\n const setter = pair[1];\n const value = this.sender_.get('player', getter)();\n /** @type {Object} */(this.localPlayer_)[setter](value);\n }\n\n this.localPlayer_.setTextTrackVisibility(isTextTrackVisible);\n if (activeTextTrack) {\n this.localPlayer_.selectTextLanguage(\n activeTextTrack.language,\n activeTextTrack.roles,\n activeTextTrack.forced);\n }\n\n // Restore the original autoplay setting.\n this.localVideo_.autoplay = autoplay;\n if (assetUri) {\n // Resume playback with transferred state.\n this.localVideo_.play();\n }\n }, (error) => {\n // Pass any errors through to the app.\n goog.asserts.assert(error instanceof shaka.util.Error,\n 'Wrong error type!');\n const eventType = shaka.util.FakeEvent.EventName.Error;\n const data = (new Map()).set('detail', error);\n const event = new shaka.util.FakeEvent(eventType, data);\n this.localPlayer_.dispatchEvent(event);\n });\n }\n\n /**\n * @param {string} name\n * @return {?}\n * @private\n */\n videoProxyGet_(name) {\n if (name == 'addEventListener') {\n return (type, listener, options) => {\n return this.videoEventTarget_.addEventListener(type, listener, options);\n };\n }\n if (name == 'removeEventListener') {\n return (type, listener, options) => {\n return this.videoEventTarget_.removeEventListener(\n type, listener, options);\n };\n }\n\n // If we are casting, but the first update has not come in yet, use local\n // values, but not local methods.\n if (this.sender_.isCasting() && !this.sender_.hasRemoteProperties()) {\n const value = this.localVideo_[name];\n if (typeof value != 'function') {\n return value;\n }\n }\n\n // Use local values and methods if we are not casting.\n if (!this.sender_.isCasting()) {\n let value = this.localVideo_[name];\n if (typeof value == 'function') {\n // eslint-disable-next-line no-restricted-syntax\n value = value.bind(this.localVideo_);\n }\n return value;\n }\n\n return this.sender_.get('video', name);\n }\n\n /**\n * @param {string} name\n * @param {?} value\n * @private\n */\n videoProxySet_(name, value) {\n if (!this.sender_.isCasting()) {\n this.localVideo_[name] = value;\n return;\n }\n\n this.sender_.set('video', name, value);\n }\n\n /**\n * @param {!Event} event\n * @private\n */\n videoProxyLocalEvent_(event) {\n if (this.sender_.isCasting()) {\n // Ignore any unexpected local events while casting. Events can still be\n // fired by the local video and Player when we unload() after the Cast\n // connection is complete.\n return;\n }\n\n // Convert this real Event into a FakeEvent for dispatch from our\n // FakeEventListener.\n const fakeEvent = shaka.util.FakeEvent.fromRealEvent(event);\n this.videoEventTarget_.dispatchEvent(fakeEvent);\n }\n\n /**\n * @param {string} name\n * @return {?}\n * @private\n */\n playerProxyGet_(name) {\n // If name is a shortened compiled name, get the original version\n // from our map.\n if (this.compiledToExternNames_.has(name)) {\n name = this.compiledToExternNames_.get(name);\n }\n\n if (name == 'addEventListener') {\n return (type, listener, options) => {\n return this.playerEventTarget_.addEventListener(\n type, listener, options);\n };\n }\n if (name == 'removeEventListener') {\n return (type, listener, options) => {\n return this.playerEventTarget_.removeEventListener(\n type, listener, options);\n };\n }\n\n if (name == 'getMediaElement') {\n return () => this.videoProxy_;\n }\n\n if (name == 'getSharedConfiguration') {\n shaka.log.warning(\n 'Can\\'t share configuration across a network. Returning copy.');\n return this.sender_.get('player', 'getConfiguration');\n }\n\n if (name == 'getNetworkingEngine') {\n // Always returns a local instance, in case you need to make a request.\n // Issues a warning, in case you think you are making a remote request\n // or affecting remote filters.\n if (this.sender_.isCasting()) {\n shaka.log.warning('NOTE: getNetworkingEngine() is always local!');\n }\n return () => this.localPlayer_.getNetworkingEngine();\n }\n\n if (name == 'getDrmEngine') {\n // Always returns a local instance.\n if (this.sender_.isCasting()) {\n shaka.log.warning('NOTE: getDrmEngine() is always local!');\n }\n return () => this.localPlayer_.getDrmEngine();\n }\n\n if (name == 'getAdManager') {\n // Always returns a local instance.\n if (this.sender_.isCasting()) {\n shaka.log.warning('NOTE: getAdManager() is always local!');\n }\n return () => this.localPlayer_.getAdManager();\n }\n\n if (name == 'setVideoContainer') {\n // Always returns a local instance.\n if (this.sender_.isCasting()) {\n shaka.log.warning('NOTE: setVideoContainer() is always local!');\n }\n return (container) => this.localPlayer_.setVideoContainer(container);\n }\n\n if (this.sender_.isCasting()) {\n // These methods are unavailable or otherwise stubbed during casting.\n if (name == 'getManifest' || name == 'drmInfo') {\n return () => {\n shaka.log.alwaysWarn(name + '() does not work while casting!');\n return null;\n };\n }\n\n if (name == 'attach' || name == 'detach') {\n return () => {\n shaka.log.alwaysWarn(name + '() does not work while casting!');\n return Promise.resolve();\n };\n }\n } // if (this.sender_.isCasting())\n\n // If we are casting, but the first update has not come in yet, use local\n // getters, but not local methods.\n if (this.sender_.isCasting() && !this.sender_.hasRemoteProperties()) {\n if (shaka.cast.CastUtils.PlayerGetterMethods[name] ||\n shaka.cast.CastUtils.LargePlayerGetterMethods[name]) {\n const value = /** @type {Object} */(this.localPlayer_)[name];\n goog.asserts.assert(typeof value == 'function',\n 'only methods on Player');\n // eslint-disable-next-line no-restricted-syntax\n return value.bind(this.localPlayer_);\n }\n }\n\n // Use local getters and methods if we are not casting.\n if (!this.sender_.isCasting()) {\n const value = /** @type {Object} */(this.localPlayer_)[name];\n goog.asserts.assert(typeof value == 'function',\n 'only methods on Player');\n // eslint-disable-next-line no-restricted-syntax\n return value.bind(this.localPlayer_);\n }\n\n return this.sender_.get('player', name);\n }\n\n /**\n * @param {!Event} event\n * @private\n */\n playerProxyLocalEvent_(event) {\n if (this.sender_.isCasting()) {\n // Ignore any unexpected local events while casting.\n return;\n }\n\n this.playerEventTarget_.dispatchEvent(event);\n }\n\n /**\n * @param {string} targetName\n * @param {!shaka.util.FakeEvent} event\n * @private\n */\n onRemoteEvent_(targetName, event) {\n goog.asserts.assert(this.sender_.isCasting(),\n 'Should only receive remote events while casting');\n if (!this.sender_.isCasting()) {\n // Ignore any unexpected remote events.\n return;\n }\n\n if (targetName == 'video') {\n this.videoEventTarget_.dispatchEvent(event);\n } else if (targetName == 'player') {\n this.playerEventTarget_.dispatchEvent(event);\n }\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.cast.CastReceiver');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.Player');\ngoog.require('shaka.cast.CastUtils');\ngoog.require('shaka.log');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.FakeEventTarget');\ngoog.require('shaka.util.IDestroyable');\ngoog.require('shaka.util.Platform');\ngoog.require('shaka.util.Timer');\n\n\n/**\n * A receiver to communicate between the Chromecast-hosted player and the\n * sender application.\n *\n * @implements {shaka.util.IDestroyable}\n * @export\n */\nshaka.cast.CastReceiver = class extends shaka.util.FakeEventTarget {\n /**\n * @param {!HTMLMediaElement} video The local video element associated with\n * the local Player instance.\n * @param {!shaka.Player} player A local Player instance.\n * @param {function(Object)=} appDataCallback A callback to handle\n * application-specific data passed from the sender. This can come either\n * from a Shaka-based sender through CastProxy.setAppData, or from a\n * sender using the customData field of the LOAD message of the standard\n * Cast message namespace. It can also be null if no such data is sent.\n * @param {function(string):string=} contentIdCallback A callback to\n * retrieve manifest URI from the provided content id.\n */\n constructor(video, player, appDataCallback, contentIdCallback) {\n super();\n\n /** @private {HTMLMediaElement} */\n this.video_ = video;\n\n /** @private {shaka.Player} */\n this.player_ = player;\n\n /** @private {shaka.util.EventManager} */\n this.eventManager_ = new shaka.util.EventManager();\n\n /** @private {Object} */\n this.targets_ = {\n 'video': video,\n 'player': player,\n };\n\n /** @private {?function(Object)} */\n this.appDataCallback_ = appDataCallback || (() => {});\n\n /** @private {?function(string):string} */\n this.contentIdCallback_ = contentIdCallback ||\n /** @param {string} contentId\n @return {string} */\n ((contentId) => contentId);\n\n /**\n * A Cast metadata object, one of:\n * - https://developers.google.com/cast/docs/reference/messages#GenericMediaMetadata\n * - https://developers.google.com/cast/docs/reference/messages#MovieMediaMetadata\n * - https://developers.google.com/cast/docs/reference/messages#TvShowMediaMetadata\n * - https://developers.google.com/cast/docs/reference/messages#MusicTrackMediaMetadata\n * @private {Object}\n */\n this.metadata_ = null;\n\n /** @private {boolean} */\n this.isConnected_ = false;\n\n /** @private {boolean} */\n this.isIdle_ = true;\n\n /** @private {number} */\n this.updateNumber_ = 0;\n\n /** @private {boolean} */\n this.startUpdatingUpdateNumber_ = false;\n\n /** @private {boolean} */\n this.initialStatusUpdatePending_ = true;\n\n /** @private {cast.receiver.CastMessageBus} */\n this.shakaBus_ = null;\n\n /** @private {cast.receiver.CastMessageBus} */\n this.genericBus_ = null;\n\n /** @private {shaka.util.Timer} */\n this.pollTimer_ = new shaka.util.Timer(() => {\n this.pollAttributes_();\n });\n\n this.init_();\n }\n\n /**\n * @return {boolean} True if the cast API is available and there are\n * receivers.\n * @export\n */\n isConnected() {\n return this.isConnected_;\n }\n\n /**\n * @return {boolean} True if the receiver is not currently doing loading or\n * playing anything.\n * @export\n */\n isIdle() {\n return this.isIdle_;\n }\n\n /**\n * Set all Cast content metadata, as defined by the Cast SDK.\n * Should be called from an appDataCallback.\n *\n * For a simpler way to set basic metadata, see:\n * - setContentTitle()\n * - setContentImage()\n * - setContentArtist()\n *\n * @param {Object} metadata\n * A Cast metadata object, one of:\n * - https://developers.google.com/cast/docs/reference/messages#GenericMediaMetadata\n * - https://developers.google.com/cast/docs/reference/messages#MovieMediaMetadata\n * - https://developers.google.com/cast/docs/reference/messages#TvShowMediaMetadata\n * - https://developers.google.com/cast/docs/reference/messages#MusicTrackMediaMetadata\n * @export\n */\n setContentMetadata(metadata) {\n this.metadata_ = metadata;\n }\n\n /**\n * Clear all Cast content metadata.\n * Should be called from an appDataCallback.\n *\n * @export\n */\n clearContentMetadata() {\n this.metadata_ = null;\n }\n\n /**\n * Set the Cast content's title.\n * Should be called from an appDataCallback.\n *\n * @param {string} title\n * @export\n */\n setContentTitle(title) {\n if (!this.metadata_) {\n this.metadata_ = {\n 'metadataType': cast.receiver.media.MetadataType.GENERIC,\n };\n }\n this.metadata_['title'] = title;\n }\n\n /**\n * Set the Cast content's thumbnail image.\n * Should be called from an appDataCallback.\n *\n * @param {string} imageUrl\n * @export\n */\n setContentImage(imageUrl) {\n if (!this.metadata_) {\n this.metadata_ = {\n 'metadataType': cast.receiver.media.MetadataType.GENERIC,\n };\n }\n this.metadata_['images'] = [\n {\n 'url': imageUrl,\n },\n ];\n }\n\n /**\n * Set the Cast content's artist.\n * Also sets the metadata type to music.\n * Should be called from an appDataCallback.\n *\n * @param {string} artist\n * @export\n */\n setContentArtist(artist) {\n if (!this.metadata_) {\n this.metadata_ = {};\n }\n this.metadata_['artist'] = artist;\n this.metadata_['metadataType'] =\n cast.receiver.media.MetadataType.MUSIC_TRACK;\n }\n\n /**\n * Destroys the underlying Player, then terminates the cast receiver app.\n *\n * @override\n * @export\n */\n async destroy() {\n if (this.eventManager_) {\n this.eventManager_.release();\n this.eventManager_ = null;\n }\n\n const waitFor = [];\n if (this.player_) {\n waitFor.push(this.player_.destroy());\n this.player_ = null;\n }\n\n if (this.pollTimer_) {\n this.pollTimer_.stop();\n this.pollTimer_ = null;\n }\n\n this.video_ = null;\n this.targets_ = null;\n this.appDataCallback_ = null;\n this.isConnected_ = false;\n this.isIdle_ = true;\n this.shakaBus_ = null;\n this.genericBus_ = null;\n\n // FakeEventTarget implements IReleasable\n super.release();\n\n await Promise.all(waitFor);\n\n const manager = cast.receiver.CastReceiverManager.getInstance();\n manager.stop();\n }\n\n /** @private */\n init_() {\n const manager = cast.receiver.CastReceiverManager.getInstance();\n manager.onSenderConnected = () => this.onSendersChanged_();\n manager.onSenderDisconnected = () => this.onSendersChanged_();\n manager.onSystemVolumeChanged = () => this.fakeVolumeChangeEvent_();\n\n this.genericBus_ = manager.getCastMessageBus(\n shaka.cast.CastUtils.GENERIC_MESSAGE_NAMESPACE);\n this.genericBus_.onMessage = (event) => this.onGenericMessage_(event);\n\n this.shakaBus_ = manager.getCastMessageBus(\n shaka.cast.CastUtils.SHAKA_MESSAGE_NAMESPACE);\n this.shakaBus_.onMessage = (event) => this.onShakaMessage_(event);\n\n if (goog.DEBUG) {\n // Sometimes it is useful to load the receiver app in Chrome to work on\n // the UI. To avoid log spam caused by the SDK trying to connect to web\n // sockets that don't exist, in uncompiled mode we check if the hosting\n // browser is a Chromecast before starting the receiver manager. We\n // wouldn't do browser detection except for debugging, so only do this in\n // uncompiled mode.\n if (shaka.util.Platform.isChromecast()) {\n manager.start();\n }\n } else {\n manager.start();\n }\n\n for (const name of shaka.cast.CastUtils.VideoEvents) {\n this.eventManager_.listen(\n this.video_, name, (event) => this.proxyEvent_('video', event));\n }\n\n for (const key in shaka.util.FakeEvent.EventName) {\n const name = shaka.util.FakeEvent.EventName[key];\n this.eventManager_.listen(\n this.player_, name, (event) => this.proxyEvent_('player', event));\n }\n\n // Do not start excluding values from update messages until the video is\n // fully loaded.\n this.eventManager_.listen(this.video_, 'loadeddata', () => {\n this.startUpdatingUpdateNumber_ = true;\n });\n\n // Maintain idle state.\n this.eventManager_.listen(this.player_, 'loading', () => {\n // No longer idle once loading. This allows us to show the spinner during\n // the initial buffering phase.\n this.isIdle_ = false;\n this.onCastStatusChanged_();\n });\n this.eventManager_.listen(this.video_, 'playing', () => {\n // No longer idle once playing. This allows us to replay a video without\n // reloading.\n this.isIdle_ = false;\n this.onCastStatusChanged_();\n });\n this.eventManager_.listen(this.video_, 'pause', () => {\n this.onCastStatusChanged_();\n });\n this.eventManager_.listen(this.player_, 'unloading', () => {\n // Go idle when unloading content.\n this.isIdle_ = true;\n this.onCastStatusChanged_();\n });\n this.eventManager_.listen(this.video_, 'ended', () => {\n // Go idle 5 seconds after 'ended', assuming we haven't started again or\n // been destroyed.\n const timer = new shaka.util.Timer(() => {\n if (this.video_ && this.video_.ended) {\n this.isIdle_ = true;\n this.onCastStatusChanged_();\n }\n });\n\n timer.tickAfter(shaka.cast.CastReceiver.IDLE_INTERVAL);\n });\n\n // Do not start polling until after the sender's 'init' message is handled.\n }\n\n /** @private */\n onSendersChanged_() {\n // Reset update message frequency values, to make sure whomever joined\n // will get a full update message.\n this.updateNumber_ = 0;\n // Don't reset startUpdatingUpdateNumber_, because this operation does not\n // result in new data being loaded.\n this.initialStatusUpdatePending_ = true;\n\n const manager = cast.receiver.CastReceiverManager.getInstance();\n this.isConnected_ = manager.getSenders().length != 0;\n this.onCastStatusChanged_();\n }\n\n /**\n * Dispatch an event to notify the receiver app that the status has changed.\n * @private\n */\n async onCastStatusChanged_() {\n // Do this asynchronously so that synchronous changes to idle state (such as\n // Player calling unload() as part of load()) are coalesced before the event\n // goes out.\n await Promise.resolve();\n if (!this.player_) {\n // We've already been destroyed.\n return;\n }\n\n const event = new shaka.util.FakeEvent('caststatuschanged');\n this.dispatchEvent(event);\n // Send a media status message, with a media info message if appropriate.\n if (!this.maybeSendMediaInfoMessage_()) {\n this.sendMediaStatus_();\n }\n }\n\n /**\n * Take on initial state from the sender.\n * @param {shaka.cast.CastUtils.InitStateType} initState\n * @param {Object} appData\n * @private\n */\n async initState_(initState, appData) {\n // Take on player state first.\n for (const k in initState['player']) {\n const v = initState['player'][k];\n // All player state vars are setters to be called.\n /** @type {Object} */(this.player_)[k](v);\n }\n\n // Now process custom app data, which may add additional player configs:\n this.appDataCallback_(appData);\n\n const autoplay = this.video_.autoplay;\n\n // Now load the manifest, if present.\n if (initState['manifest']) {\n // Don't autoplay the content until we finish setting up initial state.\n this.video_.autoplay = false;\n try {\n await this.player_.load(initState['manifest'], initState['startTime']);\n } catch (error) {\n // Pass any errors through to the app.\n goog.asserts.assert(error instanceof shaka.util.Error,\n 'Wrong error type! Error: ' + error);\n const eventType = shaka.util.FakeEvent.EventName.Error;\n const data = (new Map()).set('detail', error);\n const event = new shaka.util.FakeEvent(eventType, data);\n // Only dispatch the event if the player still exists.\n if (this.player_) {\n this.player_.dispatchEvent(event);\n }\n return;\n }\n } else {\n // Ensure the below happens async.\n await Promise.resolve();\n }\n\n if (!this.player_) {\n // We've already been destroyed.\n return;\n }\n\n // Finally, take on video state and player's \"after load\" state.\n for (const k in initState['video']) {\n const v = initState['video'][k];\n this.video_[k] = v;\n }\n\n for (const k in initState['playerAfterLoad']) {\n const v = initState['playerAfterLoad'][k];\n // All player state vars are setters to be called.\n /** @type {Object} */(this.player_)[k](v);\n }\n\n // Restore original autoplay setting.\n this.video_.autoplay = autoplay;\n if (initState['manifest']) {\n // Resume playback with transferred state.\n this.video_.play();\n // Notify generic controllers of the state change.\n this.sendMediaStatus_();\n }\n }\n\n /**\n * @param {string} targetName\n * @param {!Event} event\n * @private\n */\n proxyEvent_(targetName, event) {\n if (!this.player_) {\n // The receiver is destroyed, so it should ignore further events.\n return;\n }\n\n // Poll and send an update right before we send the event. Some events\n // indicate an attribute change, so that change should be visible when the\n // event is handled.\n this.pollAttributes_();\n\n this.sendMessage_({\n 'type': 'event',\n 'targetName': targetName,\n 'event': event,\n }, this.shakaBus_);\n }\n\n /** @private */\n pollAttributes_() {\n // The poll timer may have been pre-empted by an event (e.g. timeupdate).\n // Calling |start| will cancel any pending calls and therefore will avoid us\n // polling too often.\n this.pollTimer_.tickAfter(shaka.cast.CastReceiver.POLL_INTERVAL);\n\n const update = {\n 'video': {},\n 'player': {},\n };\n\n for (const name of shaka.cast.CastUtils.VideoAttributes) {\n update['video'][name] = this.video_[name];\n }\n\n // TODO: Instead of this variable frequency update system, instead cache the\n // previous player state and only send over changed values, with complete\n // updates every ~20 updates to account for dropped messages.\n\n if (this.player_.isLive()) {\n const PlayerGetterMethodsThatRequireLive =\n shaka.cast.CastUtils.PlayerGetterMethodsThatRequireLive;\n for (const name in PlayerGetterMethodsThatRequireLive) {\n const frequency = PlayerGetterMethodsThatRequireLive[name];\n if (this.updateNumber_ % frequency == 0) {\n update['player'][name] = /** @type {Object} */ (this.player_)[name]();\n }\n }\n }\n for (const name in shaka.cast.CastUtils.PlayerGetterMethods) {\n const frequency = shaka.cast.CastUtils.PlayerGetterMethods[name];\n if (this.updateNumber_ % frequency == 0) {\n update['player'][name] = /** @type {Object} */ (this.player_)[name]();\n }\n }\n\n // Volume attributes are tied to the system volume.\n const manager = cast.receiver.CastReceiverManager.getInstance();\n const systemVolume = manager.getSystemVolume();\n if (systemVolume) {\n update['video']['volume'] = systemVolume.level;\n update['video']['muted'] = systemVolume.muted;\n }\n\n this.sendMessage_({\n 'type': 'update',\n 'update': update,\n }, this.shakaBus_);\n\n // Getters with large outputs each get sent in their own update message.\n for (const name in shaka.cast.CastUtils.LargePlayerGetterMethods) {\n const frequency = shaka.cast.CastUtils.LargePlayerGetterMethods[name];\n if (this.updateNumber_ % frequency == 0) {\n const update = {'player': {}};\n update['player'][name] = /** @type {Object} */ (this.player_)[name]();\n\n this.sendMessage_({\n 'type': 'update',\n 'update': update,\n }, this.shakaBus_);\n }\n }\n\n // Only start progressing the update number once data is loaded,\n // just in case any of the \"rarely changing\" properties with less frequent\n // update messages changes significantly during the loading process.\n if (this.startUpdatingUpdateNumber_) {\n this.updateNumber_ += 1;\n }\n\n this.maybeSendMediaInfoMessage_();\n }\n\n /**\n * Composes and sends a mediaStatus message if appropriate.\n * @return {boolean}\n * @private\n */\n maybeSendMediaInfoMessage_() {\n if (this.initialStatusUpdatePending_ &&\n (this.video_.duration || this.player_.isLive())) {\n // Send over a media status message to set the duration of the cast\n // dialogue.\n this.sendMediaInfoMessage_();\n this.initialStatusUpdatePending_ = false;\n return true;\n }\n return false;\n }\n\n /**\n * Composes and sends a mediaStatus message with a mediaInfo component.\n *\n * @param {number=} requestId\n * @private\n */\n sendMediaInfoMessage_(requestId = 0) {\n const media = {\n 'contentId': this.player_.getAssetUri(),\n 'streamType': this.player_.isLive() ? 'LIVE' : 'BUFFERED',\n // Sending an empty string for now since it's a mandatory field.\n // We don't have this info, and it doesn't seem to be useful, anyway.\n 'contentType': '',\n };\n if (!this.player_.isLive()) {\n // Optional, and only sent when the duration is known.\n media['duration'] = this.video_.duration;\n }\n if (this.metadata_) {\n media['metadata'] = this.metadata_;\n }\n this.sendMediaStatus_(requestId, media);\n }\n\n /**\n * Dispatch a fake 'volumechange' event to mimic the video element, since\n * volume changes are routed to the system volume on the receiver.\n * @private\n */\n fakeVolumeChangeEvent_() {\n // Volume attributes are tied to the system volume.\n const manager = cast.receiver.CastReceiverManager.getInstance();\n const systemVolume = manager.getSystemVolume();\n goog.asserts.assert(systemVolume, 'System volume should not be null!');\n\n if (systemVolume) {\n // Send an update message with just the latest volume level and muted\n // state.\n this.sendMessage_({\n 'type': 'update',\n 'update': {\n 'video': {\n 'volume': systemVolume.level,\n 'muted': systemVolume.muted,\n },\n },\n }, this.shakaBus_);\n }\n\n // Send another message with a 'volumechange' event to update the sender's\n // UI.\n this.sendMessage_({\n 'type': 'event',\n 'targetName': 'video',\n 'event': {'type': 'volumechange'},\n }, this.shakaBus_);\n }\n\n /**\n * Since this method is in the compiled library, make sure all messages are\n * read with quoted properties.\n * @param {!cast.receiver.CastMessageBus.Event} event\n * @private\n */\n onShakaMessage_(event) {\n const message = shaka.cast.CastUtils.deserialize(event.data);\n shaka.log.debug('CastReceiver: message', message);\n\n switch (message['type']) {\n case 'init':\n // Reset update message frequency values after initialization.\n this.updateNumber_ = 0;\n this.startUpdatingUpdateNumber_ = false;\n this.initialStatusUpdatePending_ = true;\n\n this.initState_(message['initState'], message['appData']);\n // The sender is supposed to reflect the cast system volume after\n // connecting. Using fakeVolumeChangeEvent_() would create a race on\n // the sender side, since it would have volume properties, but no\n // others.\n // This would lead to hasRemoteProperties() being true, even though a\n // complete set had never been sent.\n // Now that we have init state, this is a good time for the first update\n // message anyway.\n this.pollAttributes_();\n break;\n case 'appData':\n this.appDataCallback_(message['appData']);\n break;\n case 'set': {\n const targetName = message['targetName'];\n const property = message['property'];\n const value = message['value'];\n\n if (targetName == 'video') {\n // Volume attributes must be rerouted to the system.\n const manager = cast.receiver.CastReceiverManager.getInstance();\n if (property == 'volume') {\n manager.setSystemVolumeLevel(value);\n break;\n } else if (property == 'muted') {\n manager.setSystemVolumeMuted(value);\n break;\n }\n }\n\n this.targets_[targetName][property] = value;\n break;\n }\n case 'call': {\n const targetName = message['targetName'];\n const methodName = message['methodName'];\n const args = message['args'];\n const target = this.targets_[targetName];\n // eslint-disable-next-line prefer-spread\n target[methodName].apply(target, args);\n break;\n }\n case 'asyncCall': {\n const targetName = message['targetName'];\n const methodName = message['methodName'];\n if (targetName == 'player' && methodName == 'load') {\n // Reset update message frequency values after a load.\n this.updateNumber_ = 0;\n this.startUpdatingUpdateNumber_ = false;\n }\n const args = message['args'];\n const id = message['id'];\n const senderId = event.senderId;\n const target = this.targets_[targetName];\n // eslint-disable-next-line prefer-spread\n let p = target[methodName].apply(target, args);\n if (targetName == 'player' && methodName == 'load') {\n // Wait until the manifest has actually loaded to send another media\n // info message, so on a new load it doesn't send the old info over.\n p = p.then(() => {\n this.initialStatusUpdatePending_ = true;\n });\n }\n // Replies must go back to the specific sender who initiated, so that we\n // don't have to deal with conflicting IDs between senders.\n p.then(\n () => this.sendAsyncComplete_(senderId, id, /* error= */ null),\n (error) => this.sendAsyncComplete_(senderId, id, error));\n break;\n }\n }\n }\n\n /**\n * @param {!cast.receiver.CastMessageBus.Event} event\n * @private\n */\n onGenericMessage_(event) {\n const message = shaka.cast.CastUtils.deserialize(event.data);\n shaka.log.debug('CastReceiver: message', message);\n // TODO(ismena): error message on duplicate request id from the same sender\n switch (message['type']) {\n case 'PLAY':\n this.video_.play();\n // Notify generic controllers that the player state changed.\n // requestId=0 (the parameter) means that the message was not\n // triggered by a GET_STATUS request.\n this.sendMediaStatus_();\n break;\n case 'PAUSE':\n this.video_.pause();\n this.sendMediaStatus_();\n break;\n case 'SEEK': {\n const currentTime = message['currentTime'];\n const resumeState = message['resumeState'];\n if (currentTime != null) {\n this.video_.currentTime = Number(currentTime);\n }\n if (resumeState && resumeState == 'PLAYBACK_START') {\n this.video_.play();\n this.sendMediaStatus_();\n } else if (resumeState && resumeState == 'PLAYBACK_PAUSE') {\n this.video_.pause();\n this.sendMediaStatus_();\n }\n break;\n }\n case 'STOP':\n this.player_.unload().then(() => {\n if (!this.player_) {\n // We've already been destroyed.\n return;\n }\n\n this.sendMediaStatus_();\n });\n break;\n case 'GET_STATUS':\n // TODO(ismena): According to the SDK this is supposed to be a\n // unicast message to the sender that requested the status,\n // but it doesn't appear to be working.\n // Look into what's going on there and change this to be a\n // unicast.\n this.sendMediaInfoMessage_(Number(message['requestId']));\n break;\n case 'VOLUME': {\n const volumeObject = message['volume'];\n const level = volumeObject['level'];\n const muted = volumeObject['muted'];\n const oldVolumeLevel = this.video_.volume;\n const oldVolumeMuted = this.video_.muted;\n if (level != null) {\n this.video_.volume = Number(level);\n }\n if (muted != null) {\n this.video_.muted = muted;\n }\n // Notify generic controllers if the volume changed.\n if (oldVolumeLevel != this.video_.volume ||\n oldVolumeMuted != this.video_.muted) {\n this.sendMediaStatus_();\n }\n break;\n }\n case 'LOAD': {\n // Reset update message frequency values after a load.\n this.updateNumber_ = 0;\n this.startUpdatingUpdateNumber_ = false;\n // This already sends an update.\n this.initialStatusUpdatePending_ = false;\n\n const mediaInfo = message['media'];\n const contentId = mediaInfo['contentId'];\n const currentTime = message['currentTime'];\n const assetUri = this.contentIdCallback_(contentId);\n const autoplay = message['autoplay'] || true;\n const customData = mediaInfo['customData'];\n\n this.appDataCallback_(customData);\n\n if (autoplay) {\n this.video_.autoplay = true;\n }\n this.player_.load(assetUri, currentTime).then(() => {\n if (!this.player_) {\n // We've already been destroyed.\n return;\n }\n\n // Notify generic controllers that the media has changed.\n this.sendMediaInfoMessage_();\n }).catch((error) => {\n goog.asserts.assert(error instanceof shaka.util.Error,\n 'Wrong error type!');\n\n // Load failed. Dispatch the error message to the sender.\n let type = 'LOAD_FAILED';\n if (error.category == shaka.util.Error.Category.PLAYER &&\n error.code == shaka.util.Error.Code.LOAD_INTERRUPTED) {\n type = 'LOAD_CANCELLED';\n }\n\n this.sendMessage_({\n 'requestId': Number(message['requestId']),\n 'type': type,\n }, this.genericBus_);\n });\n break;\n }\n default:\n shaka.log.warning(\n 'Unrecognized message type from the generic Chromecast controller!',\n message['type']);\n // Dispatch an error to the sender.\n this.sendMessage_({\n 'requestId': Number(message['requestId']),\n 'type': 'INVALID_REQUEST',\n 'reason': 'INVALID_COMMAND',\n }, this.genericBus_);\n break;\n }\n }\n\n /**\n * Tell the sender that the async operation is complete.\n * @param {string} senderId\n * @param {string} id\n * @param {shaka.util.Error} error\n * @private\n */\n sendAsyncComplete_(senderId, id, error) {\n if (!this.player_) {\n // We've already been destroyed.\n return;\n }\n\n this.sendMessage_({\n 'type': 'asyncComplete',\n 'id': id,\n 'error': error,\n }, this.shakaBus_, senderId);\n }\n\n /**\n * Since this method is in the compiled library, make sure all messages passed\n * in here were created with quoted property names.\n * @param {!Object} message\n * @param {cast.receiver.CastMessageBus} bus\n * @param {string=} senderId\n * @private\n */\n sendMessage_(message, bus, senderId) {\n // Cuts log spam when debugging the receiver UI in Chrome.\n if (!this.isConnected_) {\n return;\n }\n\n const serialized = shaka.cast.CastUtils.serialize(message);\n if (senderId) {\n bus.getCastChannel(senderId).send(serialized);\n } else {\n bus.broadcast(serialized);\n }\n }\n\n /**\n * @return {string}\n * @private\n */\n getPlayState_() {\n const playState = shaka.cast.CastReceiver.PLAY_STATE;\n if (this.isIdle_) {\n return playState.IDLE;\n } else if (this.player_.isBuffering()) {\n return playState.BUFFERING;\n } else if (this.video_.paused) {\n return playState.PAUSED;\n } else {\n return playState.PLAYING;\n }\n }\n\n /**\n * @param {number=} requestId\n * @param {Object=} media\n * @private\n */\n sendMediaStatus_(requestId = 0, media = null) {\n const mediaStatus = {\n // mediaSessionId is a unique ID for the playback of this specific\n // session.\n // It's used to identify a specific instance of a playback.\n // We don't support multiple playbacks, so just return 0.\n 'mediaSessionId': 0,\n 'playbackRate': this.video_.playbackRate,\n 'playerState': this.getPlayState_(),\n 'currentTime': this.video_.currentTime,\n // supportedMediaCommands is a sum of all the flags of commands that the\n // player supports.\n // The list of comands with respective flags is:\n // 1 - Pause\n // 2 - Seek\n // 4 - Stream volume\n // 8 - Stream mute\n // 16 - Skip forward\n // 32 - Skip backward\n // We support all of them, and their sum is 63.\n 'supportedMediaCommands': 63,\n 'volume': {\n 'level': this.video_.volume,\n 'muted': this.video_.muted,\n },\n };\n\n if (media) {\n mediaStatus['media'] = media;\n }\n\n const ret = {\n 'requestId': requestId,\n 'type': 'MEDIA_STATUS',\n 'status': [mediaStatus],\n };\n\n this.sendMessage_(ret, this.genericBus_);\n }\n};\n\n/** @type {number} The interval, in seconds, to poll for changes. */\nshaka.cast.CastReceiver.POLL_INTERVAL = 0.5;\n\n/** @type {number} The interval, in seconds, to go \"idle\". */\nshaka.cast.CastReceiver.IDLE_INTERVAL = 5;\n\n/**\n * @enum {string}\n */\nshaka.cast.CastReceiver.PLAY_STATE = {\n IDLE: 'IDLE',\n PLAYING: 'PLAYING',\n BUFFERING: 'BUFFERING',\n PAUSED: 'PAUSED',\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.cea.CeaUtils');\ngoog.provide('shaka.cea.CeaUtils.StyledChar');\n\ngoog.require('shaka.text.Cue');\n\n\nshaka.cea.CeaUtils = class {\n /**\n * Emits a closed caption based on the state of the buffer.\n * @param {!shaka.text.Cue} topLevelCue\n * @param {string} stream\n * @param {!Array>} memory\n * @param {number} startTime Start time of the cue.\n * @param {number} endTime End time of the cue.\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n */\n static getParsedCaption(topLevelCue, stream, memory, startTime, endTime) {\n if (startTime >= endTime) {\n return null;\n }\n\n // Find the first and last row that contains characters.\n let firstNonEmptyRow = -1;\n let lastNonEmptyRow = -1;\n\n for (let i = 0; i < memory.length; i++) {\n if (memory[i].some((e) => e != null && e.getChar().trim() != '')) {\n firstNonEmptyRow = i;\n break;\n }\n }\n\n for (let i = memory.length - 1; i >= 0; i--) {\n if (memory[i].some((e) => e != null && e.getChar().trim() != '')) {\n lastNonEmptyRow = i;\n break;\n }\n }\n\n // Exit early if no non-empty row was found.\n if (firstNonEmptyRow === -1 || lastNonEmptyRow === -1) {\n return null;\n }\n\n // Keeps track of the current styles for a cue being emitted.\n let currentUnderline = false;\n let currentItalics = false;\n let currentTextColor = shaka.cea.CeaUtils.DEFAULT_TXT_COLOR;\n let currentBackgroundColor = shaka.cea.CeaUtils.DEFAULT_BG_COLOR;\n\n // Create first cue that will be nested in top level cue. Default styles.\n let currentCue = shaka.cea.CeaUtils.createStyledCue(\n startTime, endTime, currentUnderline, currentItalics,\n currentTextColor, currentBackgroundColor);\n\n // Logic: Reduce rows into a single top level cue containing nested cues.\n // Each nested cue corresponds either a style change or a line break.\n\n for (let i = firstNonEmptyRow; i <= lastNonEmptyRow; i++) {\n // Find the first and last non-empty characters in this row. We do this so\n // no styles creep in before/after the first and last non-empty chars.\n const row = memory[i];\n let firstNonEmptyCol = -1;\n let lastNonEmptyCol = -1;\n\n for (let j = 0; j < row.length; j++) {\n if (row[j] != null && row[j].getChar().trim() !== '') {\n firstNonEmptyCol = j;\n break;\n }\n }\n\n for (let j = row.length - 1; j >= 0; j--) {\n if (row[j] != null && row[j].getChar().trim() !== '') {\n lastNonEmptyCol = j;\n break;\n }\n }\n\n // If no non-empty char. was found in this row, it must be a linebreak.\n if (firstNonEmptyCol === -1 || lastNonEmptyCol === -1) {\n const linebreakCue = shaka.cea.CeaUtils\n .createLineBreakCue(startTime, endTime);\n topLevelCue.nestedCues.push(linebreakCue);\n continue;\n }\n\n for (let j = firstNonEmptyCol; j <= lastNonEmptyCol; j++) {\n const styledChar = row[j];\n\n // A null between non-empty cells in a row is handled as a space.\n if (!styledChar) {\n currentCue.payload += ' ';\n continue;\n }\n const underline = styledChar.isUnderlined();\n const italics = styledChar.isItalicized();\n const textColor = styledChar.getTextColor();\n const backgroundColor = styledChar.getBackgroundColor();\n\n // If any style properties have changed, we need to open a new cue.\n if (underline != currentUnderline || italics != currentItalics ||\n textColor != currentTextColor ||\n backgroundColor != currentBackgroundColor) {\n // Push the currently built cue and start a new cue, with new styles.\n if (currentCue.payload) {\n topLevelCue.nestedCues.push(currentCue);\n }\n currentCue = shaka.cea.CeaUtils.createStyledCue(\n startTime, endTime, underline,\n italics, textColor, backgroundColor);\n\n currentUnderline = underline;\n currentItalics = italics;\n currentTextColor = textColor;\n currentBackgroundColor = backgroundColor;\n }\n\n currentCue.payload += styledChar.getChar();\n }\n if (currentCue.payload) {\n topLevelCue.nestedCues.push(currentCue);\n }\n\n // Add a linebreak since the row just ended.\n if (i !== lastNonEmptyRow) {\n const linebreakCue = shaka.cea.CeaUtils\n .createLineBreakCue(startTime, endTime);\n topLevelCue.nestedCues.push(linebreakCue);\n }\n\n // Create a new cue.\n currentCue = shaka.cea.CeaUtils.createStyledCue(\n startTime, endTime, currentUnderline, currentItalics,\n currentTextColor, currentBackgroundColor);\n }\n\n if (topLevelCue.nestedCues.length) {\n return {\n cue: topLevelCue,\n stream,\n };\n }\n\n return null;\n }\n\n /**\n * @param {number} startTime\n * @param {number} endTime\n * @param {boolean} underline\n * @param {boolean} italics\n * @param {string} txtColor\n * @param {string} bgColor\n * @return {!shaka.text.Cue}\n */\n static createStyledCue(startTime, endTime, underline,\n italics, txtColor, bgColor) {\n const cue = new shaka.text.Cue(startTime, endTime, /* payload= */ '');\n if (underline) {\n cue.textDecoration.push(shaka.text.Cue.textDecoration.UNDERLINE);\n }\n if (italics) {\n cue.fontStyle = shaka.text.Cue.fontStyle.ITALIC;\n }\n cue.color = txtColor;\n cue.backgroundColor = bgColor;\n return cue;\n }\n\n /**\n * @param {number} startTime\n * @param {number} endTime\n * @return {!shaka.text.Cue}\n */\n static createLineBreakCue(startTime, endTime) {\n const linebreakCue = new shaka.text.Cue(\n startTime, endTime, /* payload= */ '');\n linebreakCue.lineBreak = true;\n return linebreakCue;\n }\n};\n\nshaka.cea.CeaUtils.StyledChar = class {\n /**\n * @param {string} character\n * @param {boolean} underline\n * @param {boolean} italics\n * @param {string} backgroundColor\n * @param {string} textColor\n */\n constructor(character, underline, italics, backgroundColor, textColor) {\n /**\n * @private {string}\n */\n this.character_ = character;\n\n /**\n * @private {boolean}\n */\n this.underline_ = underline;\n\n /**\n * @private {boolean}\n */\n this.italics_ = italics;\n\n /**\n * @private {string}\n */\n this.backgroundColor_ = backgroundColor;\n\n /**\n * @private {string}\n */\n this.textColor_ = textColor;\n }\n\n /**\n * @return {string}\n */\n getChar() {\n return this.character_;\n }\n\n /**\n * @return {boolean}\n */\n isUnderlined() {\n return this.underline_;\n }\n\n /**\n * @return {boolean}\n */\n isItalicized() {\n return this.italics_;\n }\n\n /**\n * @return {string}\n */\n getBackgroundColor() {\n return this.backgroundColor_;\n }\n\n /**\n * @return {string}\n */\n getTextColor() {\n return this.textColor_;\n }\n};\n\n/**\n * Default background color for text.\n * @const {string}\n */\nshaka.cea.CeaUtils.DEFAULT_BG_COLOR = 'black';\n\n/**\n * Default text color.\n * @const {string}\n */\nshaka.cea.CeaUtils.DEFAULT_TXT_COLOR = 'white';\n\n/**\n * NALU type for Supplemental Enhancement Information (SEI) for H.264.\n * @const {number}\n */\nshaka.cea.CeaUtils.H264_NALU_TYPE_SEI = 0x06;\n\n/**\n * NALU type for Supplemental Enhancement Information (SEI) for H.265.\n * @const {number}\n */\nshaka.cea.CeaUtils.H265_PREFIX_NALU_TYPE_SEI = 0x27;\n\n/**\n * NALU type for Supplemental Enhancement Information (SEI) for H.265.\n * @const {number}\n */\nshaka.cea.CeaUtils.H265_SUFFIX_NALU_TYPE_SEI = 0x28;\n\n/**\n * NALU type for Supplemental Enhancement Information (SEI) for H.266.\n * @const {number}\n */\nshaka.cea.CeaUtils.H266_PREFIX_NALU_TYPE_SEI = 0x17;\n\n/**\n * NALU type for Supplemental Enhancement Information (SEI) for H.266.\n * @const {number}\n */\nshaka.cea.CeaUtils.H266_SUFFIX_NALU_TYPE_SEI = 0x18;\n\n/**\n * Default timescale value for a track.\n * @const {number}\n */\nshaka.cea.CeaUtils.DEFAULT_TIMESCALE_VALUE = 90000;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.cea.Cea608Memory');\n\ngoog.require('shaka.cea.CeaUtils');\ngoog.require('shaka.text.Cue');\n\n\n/**\n * CEA-608 captions memory/buffer.\n */\nshaka.cea.Cea608Memory = class {\n /**\n * @param {number} fieldNum Field number.\n * @param {number} channelNum Channel number.\n */\n constructor(fieldNum, channelNum) {\n /**\n * Buffer for storing decoded characters.\n * @private @const {!Array>}\n */\n this.rows_ = [];\n\n /**\n * Current row.\n * @private {number}\n */\n this.row_ = 1;\n\n /**\n * Number of rows in the scroll window. Used for rollup mode.\n * @private {number}\n */\n this.scrollRows_ = 0;\n\n /**\n * Field number.\n * @private {number}\n */\n this.fieldNum_ = fieldNum;\n\n /**\n * Channel number.\n * @private {number}\n */\n this.channelNum_ = channelNum;\n\n /**\n * @private {boolean}\n */\n this.underline_ = false;\n\n /**\n * @private {boolean}\n */\n this.italics_ = false;\n\n /**\n * @private {string}\n */\n this.textColor_ = shaka.cea.CeaUtils.DEFAULT_TXT_COLOR;\n\n /**\n * @private {string}\n */\n this.backgroundColor_ = shaka.cea.CeaUtils.DEFAULT_BG_COLOR;\n\n /**\n * @private {?number}\n */\n this.offset_ = null;\n\n /**\n * @private {?number}\n */\n this.indent_ = null;\n\n this.reset();\n }\n\n /**\n * Emits a closed caption based on the state of the buffer.\n * @param {number} startTime Start time of the cue.\n * @param {number} endTime End time of the cue.\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n */\n forceEmit(startTime, endTime) {\n const Cea608Memory = shaka.cea.Cea608Memory;\n const stream = `CC${((this.fieldNum_<< 1) | this.channelNum_) + 1}`;\n const topLevelCue = new shaka.text.Cue(\n startTime, endTime, /* payload= */ '');\n topLevelCue.lineInterpretation =\n shaka.text.Cue.lineInterpretation.PERCENTAGE;\n let line = Cea608Memory.ROW_TO_LINE_CONVERSION_.get(this.row_);\n if (line) {\n topLevelCue.line = line;\n }\n if (this.indent_ != null && this.offset_ != null) {\n topLevelCue.position = 10 + Math.min(70, this.indent_ * 10) +\n this.offset_ * 2.5;\n }\n const ret = shaka.cea.CeaUtils.getParsedCaption(\n topLevelCue, stream, this.rows_, startTime, endTime);\n // If the text and its lines are larger than what we can show on the\n // screen, we move the lines up so that the text does not come out of the\n // video.\n if (ret && (this.row_ + ret.cue.nestedCues.length - 3) > 15) {\n const newLinePosition = this.row_ + 3 - ret.cue.nestedCues.length;\n line = Cea608Memory.ROW_TO_LINE_CONVERSION_.get(newLinePosition);\n if (line) {\n topLevelCue.line = line;\n }\n }\n return ret;\n }\n\n /**\n * Resets the memory buffer.\n */\n reset() {\n this.resetAllRows();\n this.row_ = 1;\n }\n\n /**\n * @return {number}\n */\n getRow() {\n return this.row_;\n }\n\n /**\n * @param {number} row\n */\n setRow(row) {\n this.row_ = row;\n }\n\n /**\n * @return {number}\n */\n getScrollSize() {\n return this.scrollRows_;\n }\n\n /**\n * @param {number} scrollRows\n */\n setScrollSize(scrollRows) {\n this.scrollRows_ = scrollRows;\n }\n\n /**\n * Adds a character to the buffer.\n * @param {!shaka.cea.Cea608Memory.CharSet} set Character set.\n * @param {number} b CC byte to add.\n */\n addChar(set, b) {\n // Valid chars are in the range [0x20, 0x7f]\n if (b < 0x20 || b > 0x7f) {\n return;\n }\n\n let char = '';\n switch (set) {\n case shaka.cea.Cea608Memory.CharSet.BASIC_NORTH_AMERICAN:\n if (shaka.cea.Cea608Memory.CharSet.BasicNorthAmericanChars.has(b)) {\n char =\n shaka.cea.Cea608Memory.CharSet.BasicNorthAmericanChars.get(b);\n } else {\n // Regular ASCII\n char = String.fromCharCode(b);\n }\n break;\n case shaka.cea.Cea608Memory.CharSet.SPECIAL_NORTH_AMERICAN:\n char =\n shaka.cea.Cea608Memory.CharSet.SpecialNorthAmericanChars.get(b);\n break;\n case shaka.cea.Cea608Memory.CharSet.SPANISH_FRENCH:\n // Extended charset does a BS over preceding char, 6.4.2 EIA-608-B.\n this.eraseChar();\n char =\n shaka.cea.Cea608Memory.CharSet.ExtendedSpanishFrench.get(b);\n break;\n case shaka.cea.Cea608Memory.CharSet.PORTUGUESE_GERMAN:\n this.eraseChar();\n char =\n shaka.cea.Cea608Memory.CharSet.ExtendedPortugueseGerman.get(b);\n break;\n }\n\n if (char) {\n const styledChar = new shaka.cea.CeaUtils.StyledChar(\n char, this.underline_, this.italics_,\n this.backgroundColor_, this.textColor_);\n this.rows_[this.row_].push(styledChar);\n }\n }\n\n /**\n * Erases a character from the buffer.\n */\n eraseChar() {\n this.rows_[this.row_].pop();\n }\n\n /**\n * Moves rows of characters.\n * @param {number} dst Destination row index.\n * @param {number} src Source row index.\n * @param {number} count Count of rows to move.\n */\n moveRows(dst, src, count) {\n if (src < 0 || dst < 0) {\n return;\n }\n\n if (dst >= src) {\n for (let i = count-1; i >= 0; i--) {\n this.rows_[dst + i] = this.rows_[src + i].map((e) => e);\n }\n } else {\n for (let i = 0; i < count; i++) {\n this.rows_[dst + i] = this.rows_[src + i].map((e) => e);\n }\n }\n }\n\n /**\n * Resets rows of characters.\n * @param {number} idx Starting index.\n * @param {number} count Count of rows to reset.\n */\n resetRows(idx, count) {\n for (let i = 0; i <= count; i++) {\n this.rows_[idx + i] = [];\n }\n }\n\n /**\n * Resets the entire memory buffer.\n */\n resetAllRows() {\n this.resetRows(0, shaka.cea.Cea608Memory.CC_ROWS);\n }\n\n /**\n * Erases entire memory buffer.\n * Doesn't change scroll state or number of rows.\n */\n eraseBuffer() {\n this.row_ = (this.scrollRows_ > 0) ? this.scrollRows_ : 0;\n this.resetAllRows();\n }\n\n /**\n * @param {boolean} underline\n */\n setUnderline(underline) {\n this.underline_ = underline;\n }\n\n /**\n * @param {boolean} italics\n */\n setItalics(italics) {\n this.italics_ = italics;\n }\n\n /**\n * @param {string} color\n */\n setTextColor(color) {\n this.textColor_ = color;\n }\n\n /**\n * @param {string} color\n */\n setBackgroundColor(color) {\n this.backgroundColor_ = color;\n }\n\n /**\n * @param {number} offset\n */\n setOffset(offset) {\n this.offset_ = offset;\n }\n\n /**\n * @param {?number} indent\n */\n setIndent(indent) {\n this.indent_ = indent;\n }\n};\n\n/**\n * Maximum number of rows in the buffer.\n * @const {number}\n */\nshaka.cea.Cea608Memory.CC_ROWS = 15;\n\n/**\n * Characters sets.\n * @const @enum {number}\n */\nshaka.cea.Cea608Memory.CharSet = {\n BASIC_NORTH_AMERICAN: 0,\n SPECIAL_NORTH_AMERICAN: 1,\n SPANISH_FRENCH: 2,\n PORTUGUESE_GERMAN: 3,\n};\n\n/**\n * Basic North American char set deviates from ASCII with these exceptions.\n * @private @const {!Map}\n */\nshaka.cea.Cea608Memory.CharSet.BasicNorthAmericanChars = new Map([\n [0x27, '’'], [0x2a, 'á'], [0x5c, 'é'], [0x5c, 'é'], [0x5e, 'í'], [0x5f, 'ó'],\n [0x60, 'ú'], [0x7b, 'ç'], [0x7c, '÷'], [0x7d, 'Ñ'], [0x7e, 'ñ'], [0x7f, '█'],\n]);\n\n/**\n * Special North American char set.\n * Note: Transparent Space is currently implemented as a regular space.\n * @private @const {!Map}\n */\nshaka.cea.Cea608Memory.CharSet.SpecialNorthAmericanChars = new Map([\n [0x30, '®'], [0x31, '°'], [0x32, '½'], [0x33, '¿'], [0x34, '™'], [0x35, '¢'],\n [0x36, '£'], [0x37, '♪'], [0x38, 'à'], [0x39, ' '], [0x3a, 'è'], [0x3b, 'â'],\n [0x3c, 'ê'], [0x3d, 'î'], [0x3e, 'ô'], [0x3f, 'û'],\n]);\n\n/**\n * Extended Spanish/Misc/French char set.\n * @private @const {!Map}\n */\nshaka.cea.Cea608Memory.CharSet.ExtendedSpanishFrench = new Map([\n [0x20, 'Á'], [0x21, 'É'], [0x22, 'Ó'], [0x23, 'Ú'], [0x24, 'Ü'], [0x25, 'ü'],\n [0x26, '‘'], [0x27, '¡'], [0x28, '*'], [0x29, '\\''], [0x2a, '─'], [0x2b, '©'],\n [0x2c, '℠'], [0x2d, '·'], [0x2e, '“'], [0x2f, '”'], [0x30, 'À'], [0x31, 'Â'],\n [0x32, 'Ç'], [0x33, 'È'], [0x34, 'Ê'], [0x35, 'Ë'], [0x36, 'ë'], [0x37, 'Î'],\n [0x38, 'Ï'], [0x39, 'ï'], [0x3a, 'Ô'], [0x3b, 'Ù'], [0x3c, 'ù'], [0x3d, 'Û'],\n [0x3e, '«'], [0x3f, '»'],\n]);\n\n/**\n * Extended Portuguese/German/Danish char set.\n * @private @const {!Map}\n */\nshaka.cea.Cea608Memory.CharSet.ExtendedPortugueseGerman = new Map([\n [0x20, 'Ã'], [0x21, 'ã'], [0x22, 'Í'], [0x23, 'Ì'], [0x24, 'ì'], [0x25, 'Ò'],\n [0x26, 'ò'], [0x27, 'Õ'], [0x28, 'õ'], [0x29, '{'], [0x2a, '}'], [0x2b, '\\\\'],\n [0x2c, '^'], [0x2d, '_'], [0x2e, '|'], [0x2f, '~'], [0x30, 'Ä'], [0x31, 'ä'],\n [0x32, 'Ö'], [0x33, 'ö'], [0x34, 'ß'], [0x35, '¥'], [0x36, '¤'], [0x37, '│'],\n [0x38, 'Å'], [0x39, 'å'], [0x3a, 'Ø'], [0x3b, 'ø'], [0x3c, '┌'], [0x3d, '┐'],\n [0x3e, '└'], [0x3f, '┘'],\n]);\n\n/**\n * @private @const {!Map}\n */\nshaka.cea.Cea608Memory.ROW_TO_LINE_CONVERSION_ = new Map([\n [1, 10], [2, 15.33], [3, 20.66], [4, 26], [5, 31.33], [6, 36.66], [7, 42],\n [8, 47.33], [9, 52.66], [10, 58], [11, 63.33], [12, 68.66], [13, 74],\n [14, 79.33], [15, 84.66],\n]);\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.cea.Cea608DataChannel');\n\ngoog.require('shaka.cea.Cea608Memory');\ngoog.require('shaka.cea.CeaUtils');\ngoog.require('shaka.log');\n\n\n/**\n * 608 closed captions channel.\n */\nshaka.cea.Cea608DataChannel = class {\n /**\n * @param {number} fieldNum Field number.\n * @param {number} channelNum Channel number.\n */\n constructor(fieldNum, channelNum) {\n /**\n * Current Caption Type.\n * @public {!shaka.cea.Cea608DataChannel.CaptionType}\n */\n this.type_ = shaka.cea.Cea608DataChannel.CaptionType.NONE;\n\n /**\n * Text buffer for CEA-608 \"text mode\". Although, we don't emit text mode.\n * So, this buffer serves as a no-op placeholder, just in case we receive\n * captions that toggle text mode.\n * @private @const {!shaka.cea.Cea608Memory}\n */\n this.text_ =\n new shaka.cea.Cea608Memory(fieldNum, channelNum);\n\n /**\n * Displayed memory.\n * @private {!shaka.cea.Cea608Memory}\n */\n this.displayedMemory_ =\n new shaka.cea.Cea608Memory(fieldNum, channelNum);\n\n /**\n * Non-displayed memory.\n * @private {!shaka.cea.Cea608Memory}\n */\n this.nonDisplayedMemory_ =\n new shaka.cea.Cea608Memory(fieldNum, channelNum);\n\n /**\n * Points to current buffer.\n * @private {!shaka.cea.Cea608Memory}\n */\n this.curbuf_ = this.nonDisplayedMemory_;\n\n /**\n * End time of the previous caption, serves as start time of next caption.\n * @private {number}\n */\n this.prevEndTime_ = 0;\n\n /**\n * Last control pair, 16 bits representing byte 1 and byte 2\n * @private {?number}\n */\n this.lastcp_ = null;\n }\n\n /**\n * Resets channel state.\n */\n reset() {\n this.type_ = shaka.cea.Cea608DataChannel.CaptionType.NONE;\n this.curbuf_ = this.nonDisplayedMemory_;\n this.lastcp_ = null;\n this.displayedMemory_.reset();\n this.nonDisplayedMemory_.reset();\n this.text_.reset();\n }\n\n /**\n * Set the initial PTS, which may not be 0 if we start decoding at a later\n * point in the stream. Without this, the first cue's startTime can be way\n * off.\n *\n * @param {number} pts\n */\n firstPts(pts) {\n this.prevEndTime_ = pts;\n }\n\n /**\n * Gets the row index from a Preamble Address Code byte pair.\n * @param {number} b1 Byte 1.\n * @param {number} b2 Byte 2.\n * @return {number} Row index.\n * @private\n */\n pacToRow_(b1, b2) {\n const ccrowtab = [\n 11, 11, // 0x00 or 0x01\n 1, 2, // 0x02 -> 0x03\n 3, 4, // 0x04 -> 0x05\n 12, 13, // 0x06 -> 0x07\n 14, 15, // 0x08 -> 0x09\n 5, 6, // 0x0A -> 0x0B\n 7, 8, // 0x0C -> 0x0D\n 9, 10, // 0x0E -> 0x0F\n ];\n return ccrowtab[((b1 & 0x07) << 1) | ((b2 >> 5) & 0x01)];\n }\n\n /**\n * PAC - Preamble Address Code.\n * b1 is of the form |P|0|0|1|C|0|ROW|\n * b2 is of the form |P|1|N|ATTRIBUTE|U|\n * @param {number} b1 Byte 1.\n * @param {number} b2 Byte 2.\n * @private\n */\n controlPac_(b1, b2) {\n const row = this.pacToRow_(b1, b2);\n\n // Set up the defaults.\n let textColor = shaka.cea.CeaUtils.DEFAULT_TXT_COLOR;\n let italics = false;\n let indent = null;\n\n // Get PAC index;\n let pacIndex;\n if (b2 > 0x5f) {\n pacIndex = b2 - 0x60;\n } else {\n pacIndex = b2 - 0x40;\n }\n\n if (pacIndex <= 0xd) {\n const colorIndex = Math.floor(pacIndex / 2);\n textColor = shaka.cea.Cea608DataChannel.TEXT_COLORS[colorIndex];\n } else if (pacIndex <= 0xf) {\n italics = true; // color stays white\n } else {\n indent = Math.floor((pacIndex - 0x10) / 2);\n }\n\n // PACs toggle underline on the last bit of b2.\n const underline = (b2 & 0x01) === 0x01;\n\n if (this.type_ === shaka.cea.Cea608DataChannel.CaptionType.TEXT) {\n // Don't execute the PAC if in text mode.\n return;\n }\n\n // Execute the PAC.\n const buf = this.curbuf_;\n\n // Move entire scroll window to a new base in rollup mode.\n if (this.type_ === shaka.cea.Cea608DataChannel.CaptionType.ROLLUP &&\n row !== buf.getRow()) {\n const oldTopRow = 1 + buf.getRow() - buf.getScrollSize();\n const newTopRow = 1 + row - buf.getScrollSize();\n\n // Shift up the scroll window.\n buf.moveRows(newTopRow, oldTopRow, buf.getScrollSize());\n\n // Clear everything outside of the new scroll window.\n buf.resetRows(0, newTopRow - 1);\n buf.resetRows(row + 1,\n shaka.cea.Cea608Memory.CC_ROWS - row);\n }\n buf.setRow(row);\n\n buf.setUnderline(underline);\n buf.setItalics(italics);\n buf.setTextColor(textColor);\n buf.setIndent(indent);\n\n // Clear the background color, since new row (PAC) should reset ALL styles.\n buf.setBackgroundColor(shaka.cea.CeaUtils.DEFAULT_BG_COLOR);\n }\n\n /**\n * Mid-Row control code handler.\n * @param {number} b2 Byte #2.\n * @private\n */\n controlMidrow_(b2) {\n // Clear all pre-existing midrow style attributes.\n this.curbuf_.setUnderline(false);\n this.curbuf_.setItalics(false);\n this.curbuf_.setTextColor(shaka.cea.CeaUtils.DEFAULT_TXT_COLOR);\n\n // Mid-row attrs use a space.\n this.curbuf_.addChar(\n shaka.cea.Cea608Memory.CharSet.BASIC_NORTH_AMERICAN, ' '.charCodeAt(0));\n\n let textColor = shaka.cea.CeaUtils.DEFAULT_TXT_COLOR;\n let italics = false;\n\n // Midrow codes set underline on last (LSB) bit.\n const underline = (b2 & 0x01) === 0x01;\n\n // b2 has the form |P|0|1|0|STYLE|U|\n textColor = shaka.cea.Cea608DataChannel.TEXT_COLORS[(b2 & 0xe) >> 1];\n if (textColor === 'white_italics') {\n textColor = 'white';\n italics = true;\n }\n\n this.curbuf_.setUnderline(underline);\n this.curbuf_.setItalics(italics);\n this.curbuf_.setTextColor(textColor);\n }\n\n /**\n * Background attribute control code handler.\n * @param {number} b1 Byte #1\n * @param {number} b2 Byte #2.\n * @private\n */\n controlBackgroundAttribute_(b1, b2) {\n let backgroundColor = shaka.cea.CeaUtils.DEFAULT_BG_COLOR;\n if ((b1 & 0x07) === 0x0) {\n // If background provided, last 3 bits of b1 are |0|0|0|. Color is in b2.\n backgroundColor = shaka.cea.Cea608DataChannel.BG_COLORS[(b2 & 0xe) >> 1];\n }\n this.curbuf_.setBackgroundColor(backgroundColor);\n }\n\n /**\n * The Cea608DataChannel control methods implement all CC control operations.\n * @param {!shaka.cea.Cea608DataChannel.Cea608Packet} ccPacket\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n * @private\n */\n controlMiscellaneous_(ccPacket) {\n const MiscCmd = shaka.cea.Cea608DataChannel.MiscCmd_;\n const b2 = ccPacket.ccData2;\n const pts = ccPacket.pts;\n let parsedClosedCaption = null;\n\n switch (b2) {\n case MiscCmd.RCL:\n this.controlRcl_();\n break;\n case MiscCmd.BS:\n this.controlBs_();\n break;\n // unused (alarm off and alarm on)\n case MiscCmd.AOD:\n case MiscCmd.AON:\n break;\n case MiscCmd.DER:\n // Delete to End of Row. Not implemented since position not supported.\n break;\n case MiscCmd.RU2:\n parsedClosedCaption = this.controlRu_(2, pts);\n break;\n case MiscCmd.RU3:\n parsedClosedCaption = this.controlRu_(3, pts);\n break;\n case MiscCmd.RU4:\n parsedClosedCaption = this.controlRu_(4, pts);\n break;\n case MiscCmd.FON:\n this.controlFon_();\n break;\n case MiscCmd.RDC:\n this.controlRdc_(pts);\n break;\n case MiscCmd.TR:\n this.controlTr_();\n break;\n case MiscCmd.RTD:\n this.controlRtd_();\n break;\n case MiscCmd.EDM:\n parsedClosedCaption = this.controlEdm_(pts);\n break;\n case MiscCmd.CR:\n parsedClosedCaption = this.controlCr_(pts);\n break;\n case MiscCmd.ENM:\n this.controlEnm_();\n break;\n case MiscCmd.EOC:\n parsedClosedCaption = this.controlEoc_(pts);\n break;\n }\n return parsedClosedCaption;\n }\n\n /**\n * Handles CR - Carriage Return (Start new row).\n * CR only affects scroll windows (Rollup and Text modes).\n * Any currently buffered line needs to be emitted, along\n * with a window scroll action.\n * @param {number} pts in seconds.\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n * @private\n */\n controlCr_(pts) {\n const buf = this.curbuf_;\n // Only rollup and text mode is affected, but we don't emit text mode.\n if (this.type_ !== shaka.cea.Cea608DataChannel.CaptionType.ROLLUP) {\n return null;\n }\n // Force out the scroll window since the top row will cleared.\n const parsedClosedCaption = buf.forceEmit(this.prevEndTime_, pts);\n\n // Calculate the top of the scroll window.\n const toprow = (buf.getRow() - buf.getScrollSize()) + 1;\n\n // Shift up the window one row higher.\n buf.moveRows(toprow - 1, toprow, buf.getScrollSize());\n\n // Clear out anything that's outside of our current scroll window.\n buf.resetRows(0, toprow - 1);\n buf.resetRows(buf.getRow(), shaka.cea.Cea608Memory.CC_ROWS - buf.getRow());\n\n // Update the end time so the next caption emits starting at this time.\n this.prevEndTime_ = pts;\n return parsedClosedCaption;\n }\n\n /**\n * Handles RU2, RU3, RU4 - Roll-Up, N rows.\n * If in TEXT, POPON or PAINTON, any displayed captions are erased.\n * This means must force emit entire display buffer.\n * @param {number} scrollSize New scroll window size.\n * @param {number} pts\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n * @private\n */\n controlRu_(scrollSize, pts) {\n this.curbuf_ = this.displayedMemory_; // Point to displayed memory\n const buf = this.curbuf_;\n let parsedClosedCaption = null;\n\n // For any type except rollup and text mode, it should be emitted,\n // and memories cleared.\n if (this.type_ !== shaka.cea.Cea608DataChannel.CaptionType.ROLLUP &&\n this.type_ !== shaka.cea.Cea608DataChannel.CaptionType.TEXT) {\n parsedClosedCaption = buf.forceEmit(this.prevEndTime_, pts);\n\n // Clear both memories.\n this.displayedMemory_.eraseBuffer();\n this.nonDisplayedMemory_.eraseBuffer();\n\n // Rollup base row defaults to the last row (15).\n buf.setRow(shaka.cea.Cea608Memory.CC_ROWS);\n }\n this.type_ = shaka.cea.Cea608DataChannel.CaptionType.ROLLUP;\n\n // Set the new rollup window size.\n buf.setScrollSize(scrollSize);\n return parsedClosedCaption;\n }\n\n /**\n * Handles flash on.\n * @private\n */\n controlFon_() {\n this.curbuf_.addChar(\n shaka.cea.Cea608Memory.CharSet.BASIC_NORTH_AMERICAN,\n ' '.charCodeAt(0));\n }\n\n\n /**\n * Handles EDM - Erase Displayed Mem\n * Mode check:\n * EDM affects all captioning modes (but not Text mode);\n * @param {number} pts\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n * @private\n */\n controlEdm_(pts) {\n const buf = this.displayedMemory_;\n let parsedClosedCaption = null;\n if (this.type_ !== shaka.cea.Cea608DataChannel.CaptionType.TEXT) {\n // Clearing displayed memory means we now know how long\n // its contents were displayed, so force it out.\n parsedClosedCaption = buf.forceEmit(this.prevEndTime_, pts);\n }\n buf.resetAllRows();\n return parsedClosedCaption;\n }\n\n /**\n * Handles RDC - Resume Direct Captions. Initiates Paint-On captioning mode.\n * RDC does not affect current display, so nothing needs to be forced out yet.\n * @param {number} pts in seconds\n * @private\n */\n controlRdc_(pts) {\n this.type_ = shaka.cea.Cea608DataChannel.CaptionType.PAINTON;\n // Point to displayed memory.\n this.curbuf_ = this.displayedMemory_;\n\n // No scroll window now.\n this.curbuf_.setScrollSize(0);\n\n // The next paint-on caption needs this time as the start time.\n this.prevEndTime_ = pts;\n }\n\n\n /**\n * Handles ENM - Erase Nondisplayed Mem\n * @private\n */\n controlEnm_() {\n this.nonDisplayedMemory_.resetAllRows();\n }\n\n /**\n * Handles EOC - End Of Caption (flip mem)\n * This forces Pop-On mode, and swaps the displayed and nondisplayed memories.\n * @private\n * @param {number} pts\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n */\n controlEoc_(pts) {\n let parsedClosedCaption = null;\n if (this.type_ !== shaka.cea.Cea608DataChannel.CaptionType.TEXT) {\n parsedClosedCaption =\n this.displayedMemory_.forceEmit(this.prevEndTime_, pts);\n }\n // Swap memories\n const buf = this.nonDisplayedMemory_;\n this.nonDisplayedMemory_ = this.displayedMemory_; // Swap buffers\n this.displayedMemory_ = buf;\n\n // Enter Pop-On mode.\n this.controlRcl_();\n\n // The caption ended, and so the previous end time should be updated.\n this.prevEndTime_ = pts;\n return parsedClosedCaption;\n }\n\n /**\n * Handles RCL - Resume Caption Loading\n * Initiates Pop-On style captioning. No need to force anything out upon\n * entering Pop-On mode because it does not affect the current display.\n * @private\n */\n controlRcl_() {\n this.type_ = shaka.cea.Cea608DataChannel.CaptionType.POPON;\n this.curbuf_ = this.nonDisplayedMemory_;\n // No scroll window now\n this.curbuf_.setScrollSize(0);\n }\n\n\n /**\n * Handles BS - BackSpace.\n * @private\n */\n controlBs_() {\n this.curbuf_.eraseChar();\n }\n\n /**\n * Handles TR - Text Restart.\n * Clears text buffer and resumes Text Mode.\n * @private\n */\n controlTr_() {\n this.text_.reset();\n this.controlRtd_(); // Put into text mode.\n }\n\n /**\n * Handles RTD - Resume Text Display.\n * Resumes text mode. No need to force anything out, because Text Mode doesn't\n * affect current display. Also, this decoder does not emit Text Mode anyway.\n * @private\n */\n controlRtd_() {\n shaka.log.warnOnce('Cea608DataChannel',\n 'CEA-608 text mode entered, but is unsupported');\n this.curbuf_ = this.text_;\n this.type_ = shaka.cea.Cea608DataChannel.CaptionType.TEXT;\n }\n\n /**\n * Handles a Basic North American byte pair.\n * @param {number} b1 Byte 1.\n * @param {number} b2 Byte 2.\n */\n handleBasicNorthAmericanChar(b1, b2) {\n this.curbuf_.addChar(\n shaka.cea.Cea608Memory.CharSet.BASIC_NORTH_AMERICAN, b1);\n this.curbuf_.addChar(\n shaka.cea.Cea608Memory.CharSet.BASIC_NORTH_AMERICAN, b2);\n }\n\n /**\n * Handles an Extended Western European byte pair.\n * @param {number} b1 Byte 1.\n * @param {number} b2 Byte 2.\n * @private\n */\n handleExtendedWesternEuropeanChar_(b1, b2) {\n // Get the char set from the LSB, which is the char set toggle bit.\n const charSet = b1 & 0x01 ?\n shaka.cea.Cea608Memory.CharSet.PORTUGUESE_GERMAN:\n shaka.cea.Cea608Memory.CharSet.SPANISH_FRENCH;\n\n this.curbuf_.addChar(charSet, b2);\n }\n\n /**\n * Handles a tab offset.\n *\n * @param {number} offset\n * @private\n */\n handleOffset_(offset) {\n this.curbuf_.setOffset(offset);\n }\n\n /**\n * Decodes control code.\n * Three types of control codes:\n * Preamble Address Codes, Mid-Row Codes, and Miscellaneous Control Codes.\n * @param {!shaka.cea.Cea608DataChannel.Cea608Packet} ccPacket\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n */\n handleControlCode(ccPacket) {\n const b1 = ccPacket.ccData1;\n const b2 = ccPacket.ccData2;\n\n // FCC wants control codes transmitted twice, and that will often be\n // seen in broadcast captures. If the very next frame has a duplicate\n // control code, that duplicate is ignored. Note that this only applies\n // to the very next frame, and only for one match.\n if (this.lastcp_ === ((b1 << 8) | b2)) {\n this.lastcp_ = null;\n return null;\n }\n\n // Remember valid control code for checking in next frame!\n this.lastcp_ = (b1 << 8) | b2;\n\n if (this.isPAC_(b1, b2)) {\n this.controlPac_(b1, b2);\n } else if (this.isMidrowStyleChange_(b1, b2)) {\n this.controlMidrow_(b2);\n } else if (this.isBackgroundAttribute_(b1, b2)) {\n this.controlBackgroundAttribute_(b1, b2);\n } else if (this.isSpecialNorthAmericanChar_(b1, b2)) {\n this.curbuf_.addChar(\n shaka.cea.Cea608Memory.CharSet.SPECIAL_NORTH_AMERICAN, b2);\n } else if (this.isExtendedWesternEuropeanChar_(b1, b2)) {\n this.handleExtendedWesternEuropeanChar_(b1, b2);\n } else if (this.isMiscellaneous_(b1, b2)) {\n return this.controlMiscellaneous_(ccPacket);\n } else if (this.isOffset_(b1, b2)) {\n const offset = b2 - 0x20;\n this.handleOffset_(offset);\n }\n return null;\n }\n\n /**\n * Checks if this is a Miscellaneous control code.\n * @param {number} b1 Byte 1.\n * @param {number} b2 Byte 2.\n * @return {boolean}\n * @private\n */\n isMiscellaneous_(b1, b2) {\n // For Miscellaneous Control Codes, the bytes take the following form:\n // b1 -> |0|0|0|1|C|1|0|F|\n // b2 -> |0|0|1|0|X|X|X|X|\n return ((b1 & 0xf6) === 0x14) && ((b2 & 0xf0) === 0x20);\n }\n\n /**\n * Checks if this is a offset control code.\n * @param {number} b1 Byte 1.\n * @param {number} b2 Byte 2.\n * @return {boolean}\n * @private\n */\n isOffset_(b1, b2) {\n return (b1 == 0x17 || b1 == 0x1f) && b2 >= 0x21 && b2 <= 0x23;\n }\n\n /**\n * Checks if this is a PAC control code.\n * @param {number} b1 Byte 1.\n * @param {number} b2 Byte 2.\n * @return {boolean}\n * @private\n */\n isPAC_(b1, b2) {\n // For Preamble Address Codes, the bytes take the following form:\n // b1 -> |0|0|0|1|X|X|X|X|\n // b2 -> |0|1|X|X|X|X|X|X|\n return ((b1 & 0xf0) === 0x10) && ((b2 & 0xc0) === 0x40);\n }\n\n /**\n * Checks if this is a Midrow style change control code.\n * @param {number} b1 Byte 1.\n * @param {number} b2 Byte 2.\n * @return {boolean}\n * @private\n */\n isMidrowStyleChange_(b1, b2) {\n // For Midrow Control Codes, the bytes take the following form:\n // b1 -> |0|0|0|1|C|0|0|1|\n // b2 -> |0|0|1|0|X|X|X|X|\n return ((b1 & 0xf7) === 0x11) && ((b2 & 0xf0) === 0x20);\n }\n\n /**\n * Checks if this is a background attribute control code.\n * @param {number} b1 Byte 1.\n * @param {number} b2 Byte 2.\n * @return {boolean}\n * @private\n */\n isBackgroundAttribute_(b1, b2) {\n // For Background Attribute Codes, the bytes take the following form:\n // Bg provided: b1 -> |0|0|0|1|C|0|0|0| b2 -> |0|0|1|0|COLOR|T|\n // No Bg: b1 -> |0|0|0|1|C|1|1|1| b2 -> |0|0|1|0|1|1|0|1|\n return (((b1 & 0xf7) === 0x10) && ((b2 & 0xf0) === 0x20)) ||\n (((b1 & 0xf7) === 0x17) && ((b2 & 0xff) === 0x2D));\n }\n\n /**\n * Checks if the character is in the Special North American char. set.\n * @param {number} b1 Byte 1.\n * @param {number} b2 Byte 2.\n * @return {boolean}\n * @private\n */\n isSpecialNorthAmericanChar_(b1, b2) {\n // The bytes take the following form:\n // b1 -> |0|0|0|1|C|0|0|1|\n // b2 -> |0|0|1|1| CHAR |\n return ((b1 & 0xf7) === 0x11) && ((b2 & 0xf0) === 0x30);\n }\n\n /**\n * Checks if the character is in the Extended Western European char. set.\n * @param {number} b1 Byte 1.\n * @param {number} b2 Byte 2.\n * @return {boolean}\n * @private\n */\n isExtendedWesternEuropeanChar_(b1, b2) {\n // The bytes take the following form:\n // b1 -> |0|0|0|1|C|0|1|S|\n // b2 -> |0|0|1|CHARACTER|\n return ((b1 & 0xf6) === 0x12) && ((b2 & 0xe0) === 0x20);\n }\n\n /**\n * Checks if the data contains a control code.\n * @param {number} b1 Byte 1.\n * @return {boolean}\n */\n static isControlCode(b1) {\n // For control codes, the first byte takes the following form:\n // b1 -> |P|0|0|1|X|X|X|X|\n return (b1 & 0x70) === 0x10;\n }\n\n /**\n * Checks if the data contains a XDS control code.\n * @param {number} b1 Byte 1.\n * @return {boolean}\n */\n static isXdsControlCode(b1) {\n return b1 >= 0x01 && b1 <= 0x0F;\n }\n};\n\n/**\n * Command codes.\n * @enum {number}\n * @private\n */\nshaka.cea.Cea608DataChannel.MiscCmd_ = {\n // \"RCL - Resume Caption Loading\"\n RCL: 0x20,\n\n // \"BS - BackSpace\"\n BS: 0x21,\n\n // \"AOD - Unused (alarm off)\"\n AOD: 0x22,\n\n // \"AON - Unused (alarm on)\"\n AON: 0x23,\n\n // \"DER - Delete to End of Row\"\n DER: 0x24,\n\n // \"RU2 - Roll-Up, 2 rows\"\n RU2: 0x25,\n\n // \"RU3 - Roll-Up, 3 rows\"\n RU3: 0x26,\n\n // \"RU4 - Roll-Up, 4 rows\"\n RU4: 0x27,\n\n // \"FON - Flash On\"\n FON: 0x28,\n\n // \"RDC - Resume Direct Captions\"\n RDC: 0x29,\n\n // \"TR - Text Restart\"\n TR: 0x2a,\n\n // \"RTD - Resume Text Display\"\n RTD: 0x2b,\n\n // \"EDM - Erase Displayed Mem\"\n EDM: 0x2c,\n\n // \"CR - Carriage return\"\n CR: 0x2d,\n\n // \"ENM - Erase Nondisplayed Mem\"\n ENM: 0x2e,\n\n // \"EOC - End Of Caption (flip mem)\"\n EOC: 0x2f,\n};\n\n/**\n * Caption type.\n * @private @const @enum {number}\n */\nshaka.cea.Cea608DataChannel.CaptionType = {\n NONE: 0,\n POPON: 1,\n PAINTON: 2,\n ROLLUP: 3,\n TEXT: 4,\n};\n\n/**\n * @const {!Array}\n */\nshaka.cea.Cea608DataChannel.BG_COLORS = [\n 'black',\n 'green',\n 'blue',\n 'cyan',\n 'red',\n 'yellow',\n 'magenta',\n 'black',\n];\n\n/**\n * @const {!Array}\n */\nshaka.cea.Cea608DataChannel.TEXT_COLORS = [\n 'white',\n 'green',\n 'blue',\n 'cyan',\n 'red',\n 'yellow',\n 'magenta',\n 'white_italics',\n];\n\n/**\n * Style associated with a cue.\n * @typedef {{\n * textColor: ?string,\n * backgroundColor: ?string,\n * italics: ?boolean,\n * underline: ?boolean\n * }}\n */\nshaka.cea.Cea608DataChannel.Style;\n\n/**\n * CEA closed captions packet.\n * @typedef {{\n * pts: number,\n * type: number,\n * ccData1: number,\n * ccData2: number,\n * order: number\n * }}\n *\n * @property {number} pts\n * Presentation timestamp (in second) at which this packet was received.\n * @property {number} type\n * Type of the packet. Either 0 or 1, representing the CEA-608 field.\n * @property {number} ccData1 CEA-608 byte 1.\n * @property {number} ccData2 CEA-608 byte 2.\n * @property {number} order\n * A number indicating the order this packet was received in a sequence\n * of packets. Used to break ties in a stable sorting algorithm\n */\nshaka.cea.Cea608DataChannel.Cea608Packet;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.cea.Cea708Window');\n\ngoog.require('shaka.cea.CeaUtils');\ngoog.require('shaka.cea.CeaUtils.StyledChar');\ngoog.require('shaka.text.Cue');\ngoog.require('shaka.text.CueRegion');\n\n\n/**\n * CEA-708 Window. Each CEA-708 service owns 8 of these.\n */\nshaka.cea.Cea708Window = class {\n /**\n * @param {number} windowNum\n */\n constructor(windowNum, parentService) {\n /**\n * Number for the parent service (1 - 63).\n * @private {number}\n */\n this.parentService_ = parentService;\n\n /**\n * A number from 0 - 7 indicating the window number in the\n * service that owns this window.\n * @private {number}\n */\n this.windowNum_ = windowNum;\n\n /**\n * Indicates whether this window is visible.\n * @private {boolean}\n */\n this.visible_ = false;\n\n /**\n * Indicates whether the horizontal and vertical anchors coordinates specify\n * a percentage of the screen, or physical coordinates on the screen.\n * @private {boolean}\n */\n this.relativeToggle_ = false;\n\n /**\n * Horizontal anchor. Loosely corresponds to a WebVTT viewport X anchor.\n * @private {number}\n */\n this.horizontalAnchor_ = 0;\n\n /**\n * Vertical anchor. Loosely corresponds to a WebVTT viewport Y anchor.\n * @private {number}\n */\n this.verticalAnchor_ = 0;\n\n /**\n * If valid, ranges from 0 to 8, specifying one of 9 locations on window:\n * 0________1________2\n * | | |\n * 3________4________5\n * | | |\n * 6________7________8\n * Diagram is valid as per CEA-708-E section 8.4.4.\n * Each of these locations corresponds to a WebVTT region's \"region anchor\".\n * @private {number}\n */\n this.anchorId_ = 0;\n\n /**\n * Indicates the number of rows in this window's buffer/memory.\n * @private {number}\n */\n this.rowCount_ = 0;\n\n /**\n * Indicates the number of columns in this window's buffer/memory.\n * @private {number}\n */\n this.colCount_ = 0;\n\n /**\n * Center by default.\n * @private {!shaka.cea.Cea708Window.TextJustification}\n */\n this.justification_ = shaka.cea.Cea708Window.TextJustification.CENTER;\n\n /**\n * An array of rows of styled characters, representing the\n * current text and styling of text in this window.\n * @private {!Array>}\n */\n this.memory_ = [];\n\n /**\n * @private {number}\n */\n this.startTime_ = 0;\n\n /**\n * Row that the current pen is pointing at.\n * @private {number}\n */\n this.row_ = 0;\n\n /**\n * Column that the current pen is pointing at.\n * @private {number}\n */\n this.col_ = 0;\n\n /**\n * Indicates whether the current pen position is italicized.\n * @private {boolean}\n */\n this.italics_ = false;\n\n /**\n * Indicates whether the current pen position is underlined.\n * @private {boolean}\n */\n this.underline_ = false;\n\n /**\n * Indicates the text color at the current pen position.\n * @private {string}\n */\n this.textColor_ = shaka.cea.CeaUtils.DEFAULT_TXT_COLOR;\n\n /**\n * Indicates the background color at the current pen position.\n * @private {string}\n */\n this.backgroundColor_ = shaka.cea.CeaUtils.DEFAULT_BG_COLOR;\n\n this.resetMemory();\n }\n\n /**\n * @param {boolean} visible\n * @param {number} verticalAnchor\n * @param {number} horizontalAnchor\n * @param {number} anchorId\n * @param {boolean} relativeToggle\n * @param {number} rowCount\n * @param {number} colCount\n */\n defineWindow(visible, verticalAnchor, horizontalAnchor, anchorId,\n relativeToggle, rowCount, colCount) {\n this.visible_ = visible;\n this.verticalAnchor_ = verticalAnchor;\n this.horizontalAnchor_ = horizontalAnchor;\n this.anchorId_ = anchorId;\n this.relativeToggle_ = relativeToggle;\n this.rowCount_ = rowCount;\n this.colCount_ = colCount;\n }\n\n /**\n * Resets the memory buffer.\n */\n resetMemory() {\n this.memory_ = [];\n for (let i = 0; i < shaka.cea.Cea708Window.MAX_ROWS; i++) {\n this.memory_.push(this.createNewRow_());\n }\n }\n\n /**\n * Allocates and returns a new row.\n * @return {!Array}\n * @private\n */\n createNewRow_() {\n const row = [];\n for (let j = 0; j < shaka.cea.Cea708Window.MAX_COLS; j++) {\n row.push(null);\n }\n return row;\n }\n\n /**\n * Sets the unicode value for a char at the current pen location.\n * @param {string} char\n */\n setCharacter(char) {\n // Check if the pen is out of bounds.\n if (!this.isPenInBounds_()) {\n return;\n }\n\n const cea708Char = new shaka.cea.CeaUtils.StyledChar(\n char, this.underline_, this.italics_,\n this.backgroundColor_, this.textColor_);\n this.memory_[this.row_][this.col_] = cea708Char;\n\n // Increment column\n this.col_ ++;\n }\n\n /**\n * Erases a character from the buffer and moves the pen back.\n */\n backspace() {\n if (!this.isPenInBounds_()) {\n return;\n }\n\n // Check if a backspace can be done.\n if (this.col_ <= 0 && this.row_ <= 0) {\n return;\n }\n\n if (this.col_ <= 0) {\n // Move pen back a row.\n this.col_ = this.colCount_ - 1;\n this.row_--;\n } else {\n // Move pen back a column.\n this.col_--;\n }\n\n // Erase the character occupied at that position.\n this.memory_[this.row_][this.col_] = null;\n }\n\n /**\n * @private\n */\n isPenInBounds_() {\n const inRowBounds = this.row_ < this.rowCount_ && this.row_ >= 0;\n const inColBounds = this.col_ < this.colCount_ && this.col_ >= 0;\n return inRowBounds && inColBounds;\n }\n\n /**\n * @return {boolean}\n */\n isVisible() {\n return this.visible_;\n }\n\n /**\n * Moves up rows in the buffer.\n * @param {number} count\n * @private\n */\n moveUpRows_(count) {\n let dst = 0; // Row each row should be moved to.\n\n // Move existing rows up by .\n for (let i = count; i < shaka.cea.Cea708Window.MAX_ROWS; i++, dst++) {\n this.memory_[dst] = this.memory_[i];\n }\n\n // Create new rows at the bottom.\n for (let i = 0; i < count; i++, dst++) {\n this.memory_[dst] = this.createNewRow_();\n }\n }\n\n /**\n * Handles CR. Increments row - if last row, \"roll up\" all rows by one.\n */\n carriageReturn() {\n if (this.row_ + 1 >= this.rowCount_) {\n this.moveUpRows_(1);\n this.col_ = 0;\n return;\n }\n\n this.row_++;\n this.col_ = 0;\n }\n\n /**\n * Handles HCR. Moves the pen to the beginning of the cur. row and clears it.\n */\n horizontalCarriageReturn() {\n this.memory_[this.row_] = this.createNewRow_();\n this.col_ = 0;\n }\n\n /**\n * @param {number} endTime\n * @param {number} serviceNumber Number of the service emitting this caption.\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n */\n forceEmit(endTime, serviceNumber) {\n const stream = `svc${serviceNumber}`;\n const TextJustification = shaka.cea.Cea708Window.TextJustification;\n const topLevelCue = new shaka.text.Cue(\n this.startTime_, endTime, /* payload= */ '');\n\n if (this.justification_ === TextJustification.LEFT) {\n // LEFT justified.\n topLevelCue.textAlign = shaka.text.Cue.textAlign.LEFT;\n } else if (this.justification_ === TextJustification.RIGHT) {\n // RIGHT justified.\n topLevelCue.textAlign = shaka.text.Cue.textAlign.RIGHT;\n } else {\n // CENTER justified. Both FULL and CENTER are handled as CENTER justified.\n topLevelCue.textAlign = shaka.text.Cue.textAlign.CENTER;\n }\n\n this.adjustRegion_(topLevelCue.region);\n\n const caption = shaka.cea.CeaUtils.getParsedCaption(\n topLevelCue, stream, this.memory_, this.startTime_, endTime);\n if (caption) {\n // If a caption is being emitted, then the next caption's start time\n // should be no less than this caption's end time.\n this.setStartTime(endTime);\n }\n return caption;\n }\n\n /**\n * @param {number} row\n * @param {number} col\n */\n setPenLocation(row, col) {\n this.row_ = row;\n this.col_ = col;\n }\n\n /**\n * @param {string} backgroundColor\n */\n setPenBackgroundColor(backgroundColor) {\n this.backgroundColor_ = backgroundColor;\n }\n\n /**\n * @param {string} textColor\n */\n setPenTextColor(textColor) {\n this.textColor_ = textColor;\n }\n\n /**\n * @param {boolean} underline\n */\n setPenUnderline(underline) {\n this.underline_ = underline;\n }\n\n /**\n * @param {boolean} italics\n */\n setPenItalics(italics) {\n this.italics_ = italics;\n }\n\n /** Reset the pen to 0,0 with default styling. */\n resetPen() {\n this.row_ = 0;\n this.col_ = 0;\n this.underline_ = false;\n this.italics_ = false;\n this.textColor_ = shaka.cea.CeaUtils.DEFAULT_TXT_COLOR;\n this.backgroundColor_ = shaka.cea.CeaUtils.DEFAULT_BG_COLOR;\n }\n\n /**\n * @param {!shaka.cea.Cea708Window.TextJustification} justification\n */\n setJustification(justification) {\n this.justification_ = justification;\n }\n\n /**\n * Sets the window to visible.\n */\n display() {\n this.visible_ = true;\n }\n\n /**\n * Sets the window to invisible.\n */\n hide() {\n this.visible_ = false;\n }\n\n /**\n * Toggles the visibility of the window.\n */\n toggle() {\n this.visible_ = !this.visible_;\n }\n\n /**\n * Sets the start time for the cue to be emitted.\n * @param {number} pts\n */\n setStartTime(pts) {\n this.startTime_ = pts;\n }\n\n /**\n * Support window positioning by mapping anchor related values to CueRegion.\n * https://dvcs.w3.org/hg/text-tracks/raw-file/default/608toVTT/608toVTT.html#positioning-in-cea-708\n * @param {shaka.text.CueRegion} region\n * @private\n */\n adjustRegion_(region) {\n if (this.parentService_) {\n region.id += 'svc' + this.parentService_;\n }\n region.id += 'win' + this.windowNum_;\n\n region.height = this.rowCount_;\n region.width = this.colCount_;\n region.heightUnits = shaka.text.CueRegion.units.LINES;\n region.widthUnits = shaka.text.CueRegion.units.LINES;\n\n region.viewportAnchorX = this.horizontalAnchor_;\n region.viewportAnchorY = this.verticalAnchor_;\n // WebVTT's region viewport anchors are technically always in percentages.\n // However, we don't know the aspect ratio of the video at this point,\n // which determines how we interpret the horizontal anchor.\n // So, we expose the additonal flag to reflect whether these viewport anchor\n // values can be used be used as is or should be converted to percentages.\n region.viewportAnchorUnits = this.relativeToggle_ ?\n shaka.text.CueRegion.units.PERCENTAGE : shaka.text.CueRegion.units.LINES;\n\n const AnchorId = shaka.cea.Cea708Window.AnchorId;\n\n switch (this.anchorId_) {\n case AnchorId.UPPER_LEFT:\n region.regionAnchorX = 0;\n region.regionAnchorY = 0;\n break;\n case AnchorId.UPPER_CENTER:\n region.regionAnchorX = 50;\n region.regionAnchorY = 0;\n break;\n case AnchorId.UPPER_RIGHT:\n region.regionAnchorX = 100;\n region.regionAnchorY = 0;\n break;\n case AnchorId.MIDDLE_LEFT:\n region.regionAnchorX = 0;\n region.regionAnchorY = 50;\n break;\n case AnchorId.MIDDLE_CENTER:\n region.regionAnchorX = 50;\n region.regionAnchorY = 50;\n break;\n case AnchorId.MIDDLE_RIGHT:\n region.regionAnchorX = 100;\n region.regionAnchorY = 50;\n break;\n case AnchorId.LOWER_LEFT:\n region.regionAnchorX = 0;\n region.regionAnchorY = 100;\n break;\n case AnchorId.LOWER_CENTER:\n region.regionAnchorX = 50;\n region.regionAnchorY = 100;\n break;\n case AnchorId.LOWER_RIGHT:\n region.regionAnchorX = 100;\n region.regionAnchorY = 100;\n break;\n }\n }\n};\n\n/**\n * Caption type.\n * @const @enum {number}\n */\nshaka.cea.Cea708Window.TextJustification = {\n LEFT: 0,\n RIGHT: 1,\n CENTER: 2,\n FULL: 3,\n};\n\n/**\n * Possible AnchorId values.\n * @const @enum {number}\n */\nshaka.cea.Cea708Window.AnchorId = {\n UPPER_LEFT: 0,\n UPPER_CENTER: 1,\n UPPER_RIGHT: 2,\n MIDDLE_LEFT: 3,\n MIDDLE_CENTER: 4,\n MIDDLE_RIGHT: 5,\n LOWER_LEFT: 6,\n LOWER_CENTER: 7,\n LOWER_RIGHT: 8,\n};\n\n/**\n * Can be indexed 0-31 for 4:3 format, and 0-41 for 16:9 formats.\n * Thus the absolute maximum is 42 columns for the 16:9 format.\n * @private @const {number}\n */\nshaka.cea.Cea708Window.MAX_COLS = 42;\n\n/**\n * Maximum of 16 rows that can be indexed from 0 to 15.\n * @private @const {number}\n */\nshaka.cea.Cea708Window.MAX_ROWS = 16;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.cea.DtvccPacketBuilder');\ngoog.provide('shaka.cea.DtvccPacket');\ngoog.require('shaka.util.Error');\ngoog.requireType('shaka.cea.Cea708Service');\n\n\n/**\n * CEA-708 DTVCC Packet Builder.\n * Builds packets based on Figure 5 CCP State Table in 5.2 of CEA-708-E.\n * Initially, there is no packet. When a DTVCC_PACKET_START payload is received,\n * a packet begins construction. The packet is considered \"built\" once all bytes\n * indicated in the header are read, and ignored if a new packet starts building\n * before the current packet is finished being built.\n */\nshaka.cea.DtvccPacketBuilder = class {\n /** */\n constructor() {\n /**\n * An array containing built DTVCC packets that are ready to be processed.\n * @private {!Array}\n */\n this.builtPackets_ = [];\n\n /**\n * Stores the packet data for the current packet being processed, if any.\n * @private {?Array}\n */\n this.currentPacketBeingBuilt_ = null;\n\n /**\n * Keeps track of the number of bytes left to add in the current packet.\n * @private {number}\n */\n this.bytesLeftToAddInCurrentPacket_ = 0;\n }\n\n /**\n * @param {!shaka.cea.Cea708Service.Cea708Byte} cea708Byte\n */\n addByte(cea708Byte) {\n if (cea708Byte.type === shaka.cea.DtvccPacketBuilder.DTVCC_PACKET_START) {\n // If there was a packet being built that finished, it would have\n // already been added to the built packets when it finished. So if\n // there's an open packet at this point, it must be unfinished. As\n // per the spec, we don't deal with unfinished packets. So we ignore them.\n\n // A new packet should be opened.\n const packetSize = cea708Byte.value & 0x3f;\n\n // As per spec, number of packet data bytes to follow is packetSize*2-1.\n this.bytesLeftToAddInCurrentPacket_ = packetSize * 2 - 1;\n this.currentPacketBeingBuilt_ = [];\n return;\n }\n\n if (!this.currentPacketBeingBuilt_) {\n // There is no packet open. Then an incoming byte should not\n // have come in at all. Ignore it.\n return;\n }\n\n if (this.bytesLeftToAddInCurrentPacket_ > 0) {\n this.currentPacketBeingBuilt_.push(cea708Byte);\n this.bytesLeftToAddInCurrentPacket_--;\n }\n\n if (this.bytesLeftToAddInCurrentPacket_ === 0) {\n // Current packet is complete and ready for processing.\n const packet = new shaka.cea.DtvccPacket(this.currentPacketBeingBuilt_);\n this.builtPackets_.push(packet);\n this.currentPacketBeingBuilt_ = null;\n this.bytesLeftToAddInCurrentPacket_ = 0;\n }\n }\n\n /**\n * @return {!Array}\n */\n getBuiltPackets() {\n return this.builtPackets_;\n }\n\n /** Clear built packets. */\n clearBuiltPackets() {\n this.builtPackets_ = [];\n }\n\n /** Clear built packets and packets in progress. */\n clear() {\n this.builtPackets_ = [];\n this.currentPacketBeingBuilt_ = [];\n this.bytesLeftToAddInCurrentPacket_ = 0;\n }\n};\n\n\nshaka.cea.DtvccPacket = class {\n /**\n * @param {!Array} packetData\n */\n constructor(packetData) {\n /**\n * Keeps track of the position to read the next byte from in the packet.\n * @private {number}\n */\n this.pos_ = 0;\n\n /**\n * Bytes that represent the data in the DTVCC packet.\n * @private {!Array}\n */\n this.packetData_ = packetData;\n }\n\n /**\n * @return {boolean}\n */\n hasMoreData() {\n return this.pos_ < this.packetData_.length;\n }\n\n /**\n * @return {number}\n */\n getPosition() {\n return this.pos_;\n }\n\n /**\n * Reads a byte from the packet. TODO CONSIDER RENAMING THIS TO BLOCK\n * @return {!shaka.cea.Cea708Service.Cea708Byte}\n * @throws {!shaka.util.Error}\n */\n readByte() {\n if (!this.hasMoreData()) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.TEXT,\n shaka.util.Error.Code.BUFFER_READ_OUT_OF_BOUNDS);\n }\n return this.packetData_[this.pos_++];\n }\n\n /**\n * Skips the provided number of blocks in the buffer.\n * @param {number} numBlocks\n * @throws {!shaka.util.Error}\n */\n skip(numBlocks) {\n if (this.pos_ + numBlocks > this.packetData_.length) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.TEXT,\n shaka.util.Error.Code.BUFFER_READ_OUT_OF_BOUNDS);\n }\n this.pos_ += numBlocks;\n }\n};\n\n/**\n * @const {number}\n */\nshaka.cea.DtvccPacketBuilder.DTVCC_PACKET_DATA = 2;\n\n/**\n * @const {number}\n */\nshaka.cea.DtvccPacketBuilder.DTVCC_PACKET_START = 3;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.cea.Cea708Service');\n\ngoog.require('shaka.cea.Cea708Window');\ngoog.require('shaka.cea.DtvccPacket');\n\n\n/**\n * CEA-708 closed captions service as defined by CEA-708-E. A decoder can own up\n * to 63 services. Each service owns eight windows.\n */\nshaka.cea.Cea708Service = class {\n /**\n * @param {number} serviceNumber\n */\n constructor(serviceNumber) {\n /**\n * Number for this specific service (1 - 63).\n * @private {number}\n */\n this.serviceNumber_ = serviceNumber;\n\n /**\n * Eight Cea708 Windows, as defined by the spec.\n * @private {!Array}\n */\n this.windows_ = [\n null, null, null, null, null, null, null, null,\n ];\n\n /**\n * The current window for which window command operate on.\n * @private {?shaka.cea.Cea708Window}\n */\n this.currentWindow_ = null;\n }\n\n /**\n * Processes a CEA-708 control code.\n * @param {!shaka.cea.DtvccPacket} dtvccPacket\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n * @throws {!shaka.util.Error}\n */\n handleCea708ControlCode(dtvccPacket) {\n const blockData = dtvccPacket.readByte();\n let controlCode = blockData.value;\n const pts = blockData.pts;\n\n // Read extended control code if needed.\n if (controlCode === shaka.cea.Cea708Service.EXT_CEA708_CTRL_CODE_BYTE1) {\n const extendedControlCodeBlock = dtvccPacket.readByte();\n controlCode = (controlCode << 16) | extendedControlCodeBlock.value;\n }\n\n // Control codes are in 1 of 4 logical groups:\n // CL (C0, C2), CR (C1, C3), GL (G0, G2), GR (G1, G2).\n if (controlCode >= 0x00 && controlCode <= 0x1f) {\n return this.handleC0_(controlCode, pts);\n } else if (controlCode >= 0x80 && controlCode <= 0x9f) {\n return this.handleC1_(dtvccPacket, controlCode, pts);\n } else if (controlCode >= 0x1000 && controlCode <= 0x101f) {\n this.handleC2_(dtvccPacket, controlCode & 0xff);\n } else if (controlCode >= 0x1080 && controlCode <= 0x109f) {\n this.handleC3_(dtvccPacket, controlCode & 0xff);\n } else if (controlCode >= 0x20 && controlCode <= 0x7f) {\n this.handleG0_(controlCode);\n } else if (controlCode >= 0xa0 && controlCode <= 0xff) {\n this.handleG1_(controlCode);\n } else if (controlCode >= 0x1020 && controlCode <= 0x107f) {\n this.handleG2_(controlCode & 0xff);\n } else if (controlCode >= 0x10a0 && controlCode <= 0x10ff) {\n this.handleG3_(controlCode & 0xff);\n }\n\n return null;\n }\n\n /**\n * Handles G0 group data.\n * @param {number} controlCode\n * @private\n */\n handleG0_(controlCode) {\n if (!this.currentWindow_) {\n return;\n }\n // G0 contains ASCII from 0x20 to 0x7f, with the exception that 0x7f\n // is replaced by a musical note.\n if (controlCode === 0x7f) {\n this.currentWindow_.setCharacter('♪');\n return;\n }\n this.currentWindow_.setCharacter(String.fromCharCode(controlCode));\n }\n\n /**\n * Handles G1 group data.\n * @param {number} controlCode\n * @private\n */\n handleG1_(controlCode) {\n if (!this.currentWindow_) {\n return;\n }\n // G1 is the Latin-1 Character Set from 0xa0 to 0xff.\n this.currentWindow_.setCharacter(String.fromCharCode(controlCode));\n }\n\n /**\n * Handles G2 group data.\n * @param {number} controlCode\n * @private\n */\n handleG2_(controlCode) {\n if (!this.currentWindow_) {\n return;\n }\n if (!shaka.cea.Cea708Service.G2Charset.has(controlCode)) {\n // If the character is unsupported, the spec says to put an underline.\n this.currentWindow_.setCharacter('_');\n return;\n }\n\n const char = shaka.cea.Cea708Service.G2Charset.get(controlCode);\n this.currentWindow_.setCharacter(char);\n }\n\n /**\n * Handles G3 group data.\n * @param {number} controlCode\n * @private\n */\n handleG3_(controlCode) {\n if (!this.currentWindow_) {\n return;\n }\n\n // As of CEA-708-E, the G3 group only contains 1 character. It's a\n // [CC] character which has no unicode value on 0xa0.\n if (controlCode != 0xa0) {\n // Similar to G2, the spec decrees an underline if char is unsupported.\n this.currentWindow_.setCharacter('_');\n return;\n }\n\n this.currentWindow_.setCharacter('[CC]');\n }\n\n /**\n * Handles C0 group data.\n * @param {number} controlCode\n * @param {number} pts\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n * @private\n */\n handleC0_(controlCode, pts) {\n // All these commands pertain to the current window, so ensure it exists.\n if (!this.currentWindow_) {\n return null;\n }\n\n const window = this.currentWindow_;\n let parsedClosedCaption = null;\n\n // Note: This decoder ignores the \"ETX\" (end of text) control code. Since\n // this is JavaScript, a '\\0' is not needed to terminate a string.\n switch (controlCode) {\n case shaka.cea.Cea708Service.ASCII_BACKSPACE:\n window.backspace();\n break;\n case shaka.cea.Cea708Service.ASCII_CARRIAGE_RETURN:\n // Force out the buffer, since the top row could be lost.\n if (window.isVisible()) {\n parsedClosedCaption = window.forceEmit(pts, this.serviceNumber_);\n }\n window.carriageReturn();\n break;\n case shaka.cea.Cea708Service.ASCII_HOR_CARRIAGE_RETURN:\n // Force out the buffer, a row will be erased.\n if (window.isVisible()) {\n parsedClosedCaption = window.forceEmit(pts, this.serviceNumber_);\n }\n window.horizontalCarriageReturn();\n break;\n case shaka.cea.Cea708Service.ASCII_FORM_FEED:\n // Clear window and move pen to (0,0).\n // Force emit if the window is visible.\n if (window.isVisible()) {\n parsedClosedCaption = window.forceEmit(pts, this.serviceNumber_);\n }\n window.resetMemory();\n window.setPenLocation(0, 0);\n break;\n }\n return parsedClosedCaption;\n }\n\n /**\n * Processes C1 group data.\n * These are caption commands.\n * @param {!shaka.cea.DtvccPacket} dtvccPacket\n * @param {number} captionCommand\n * @param {number} pts in seconds\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n * @throws {!shaka.util.Error} a possible out-of-range buffer read.\n * @private\n */\n handleC1_(dtvccPacket, captionCommand, pts) {\n // Note: This decoder ignores delay and delayCancel control codes in the C1.\n // group. These control codes delay processing of data for a set amount of\n // time, however this decoder processes that data immediately.\n\n if (captionCommand >= 0x80 && captionCommand <= 0x87) {\n const windowNum = captionCommand & 0x07;\n this.setCurrentWindow_(windowNum);\n } else if (captionCommand === 0x88) {\n const bitmap = dtvccPacket.readByte().value;\n return this.clearWindows_(bitmap, pts);\n } else if (captionCommand === 0x89) {\n const bitmap = dtvccPacket.readByte().value;\n this.displayWindows_(bitmap, pts);\n } else if (captionCommand === 0x8a) {\n const bitmap = dtvccPacket.readByte().value;\n return this.hideWindows_(bitmap, pts);\n } else if (captionCommand === 0x8b) {\n const bitmap = dtvccPacket.readByte().value;\n return this.toggleWindows_(bitmap, pts);\n } else if (captionCommand === 0x8c) {\n const bitmap = dtvccPacket.readByte().value;\n return this.deleteWindows_(bitmap, pts);\n } else if (captionCommand === 0x8f) {\n return this.reset_(pts);\n } else if (captionCommand === 0x90) {\n this.setPenAttributes_(dtvccPacket);\n } else if (captionCommand === 0x91) {\n this.setPenColor_(dtvccPacket);\n } else if (captionCommand === 0x92) {\n this.setPenLocation_(dtvccPacket);\n } else if (captionCommand === 0x97) {\n this.setWindowAttributes_(dtvccPacket);\n } else if (captionCommand >= 0x98 && captionCommand <= 0x9f) {\n const windowNum = (captionCommand & 0x0f) - 8;\n this.defineWindow_(dtvccPacket, windowNum, pts);\n }\n return null;\n }\n\n /**\n * Handles C2 group data.\n * @param {!shaka.cea.DtvccPacket} dtvccPacket\n * @param {number} controlCode\n * @private\n */\n handleC2_(dtvccPacket, controlCode) {\n // As of the CEA-708-E spec there are no commands on the C2 table, but if\n // seen, then the appropriate number of bytes must be skipped as per spec.\n if (controlCode >= 0x08 && controlCode <= 0x0f) {\n dtvccPacket.skip(1);\n } else if (controlCode >= 0x10 && controlCode <= 0x17) {\n dtvccPacket.skip(2);\n } else if (controlCode >= 0x18 && controlCode <= 0x1f) {\n dtvccPacket.skip(3);\n }\n }\n\n /**\n * Handles C3 group data.\n * @param {!shaka.cea.DtvccPacket} dtvccPacket\n * @param {number} controlCode\n * @private\n */\n handleC3_(dtvccPacket, controlCode) {\n // As of the CEA-708-E spec there are no commands on the C3 table, but if\n // seen, then the appropriate number of bytes must be skipped as per spec.\n if (controlCode >= 0x80 && controlCode <= 0x87) {\n dtvccPacket.skip(4);\n } else if (controlCode >= 0x88 && controlCode <= 0x8f) {\n dtvccPacket.skip(5);\n }\n }\n\n /**\n * @param {number} windowNum\n * @private\n */\n setCurrentWindow_(windowNum) {\n // If the window isn't created, ignore the command.\n if (!this.windows_[windowNum]) {\n return;\n }\n this.currentWindow_ = this.windows_[windowNum];\n }\n\n /**\n * Yields each non-null window specified in the 8-bit bitmap.\n * @param {number} bitmap 8 bits corresponding to each of the 8 windows.\n * @return {!Array.}\n * @private\n */\n getSpecifiedWindowIds_(bitmap) {\n const ids = [];\n for (let i = 0; i < 8; i++) {\n const windowSpecified = (bitmap & 0x01) === 0x01;\n if (windowSpecified && this.windows_[i]) {\n ids.push(i);\n }\n bitmap >>= 1;\n }\n return ids;\n }\n\n /**\n * @param {number} windowsBitmap\n * @param {number} pts\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n * @private\n */\n clearWindows_(windowsBitmap, pts) {\n let parsedClosedCaption = null;\n\n // Clears windows from the 8 bit bitmap.\n for (const windowId of this.getSpecifiedWindowIds_(windowsBitmap)) {\n // If window visible and being cleared, emit buffer and reset start time!\n const window = this.windows_[windowId];\n if (window.isVisible()) {\n parsedClosedCaption = window.forceEmit(pts, this.serviceNumber_);\n }\n window.resetMemory();\n }\n return parsedClosedCaption;\n }\n\n /**\n * @param {number} windowsBitmap\n * @param {number} pts\n * @private\n */\n displayWindows_(windowsBitmap, pts) {\n // Displays windows from the 8 bit bitmap.\n for (const windowId of this.getSpecifiedWindowIds_(windowsBitmap)) {\n const window = this.windows_[windowId];\n if (!window.isVisible()) {\n // We are turning on the visibility, set the start time.\n window.setStartTime(pts);\n }\n window.display();\n }\n }\n\n /**\n * @param {number} windowsBitmap\n * @param {number} pts\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n * @private\n */\n hideWindows_(windowsBitmap, pts) {\n let parsedClosedCaption = null;\n\n // Hides windows from the 8 bit bitmap.\n for (const windowId of this.getSpecifiedWindowIds_(windowsBitmap)) {\n const window = this.windows_[windowId];\n if (window.isVisible()) {\n // We are turning off the visibility, emit!\n parsedClosedCaption = window.forceEmit(pts, this.serviceNumber_);\n }\n window.hide();\n }\n return parsedClosedCaption;\n }\n\n /**\n * @param {number} windowsBitmap\n * @param {number} pts\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n * @private\n */\n toggleWindows_(windowsBitmap, pts) {\n let parsedClosedCaption = null;\n\n // Toggles windows from the 8 bit bitmap.\n for (const windowId of this.getSpecifiedWindowIds_(windowsBitmap)) {\n const window = this.windows_[windowId];\n if (window.isVisible()) {\n // We are turning off the visibility, emit!\n parsedClosedCaption = window.forceEmit(pts, this.serviceNumber_);\n } else {\n // We are turning on visibility, set the start time.\n window.setStartTime(pts);\n }\n\n window.toggle();\n }\n return parsedClosedCaption;\n }\n\n /**\n * @param {number} windowsBitmap\n * @param {number} pts\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n * @private\n */\n deleteWindows_(windowsBitmap, pts) {\n let parsedClosedCaption = null;\n // Deletes windows from the 8 bit bitmap.\n for (const windowId of this.getSpecifiedWindowIds_(windowsBitmap)) {\n const window = this.windows_[windowId];\n if (window.isVisible()) {\n // We are turning off the visibility, emit!\n parsedClosedCaption = window.forceEmit(pts, this.serviceNumber_);\n }\n // Delete the window from the list of windows\n this.windows_[windowId] = null;\n }\n return parsedClosedCaption;\n }\n\n /**\n * Emits anything currently present in any of the windows, and then\n * deletes all windows, cancels all delays, reinitializes the service.\n * @param {number} pts\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n * @private\n */\n reset_(pts) {\n const allWindowsBitmap = 0xff; // All windows should be deleted.\n const caption = this.deleteWindows_(allWindowsBitmap, pts);\n this.clear();\n return caption;\n }\n\n /**\n * Clears the state of the service completely.\n */\n clear() {\n this.currentWindow_ = null;\n this.windows_ = [null, null, null, null, null, null, null, null];\n }\n\n /**\n * @param {!shaka.cea.DtvccPacket} dtvccPacket\n * @throws {!shaka.util.Error}\n * @private\n */\n setPenAttributes_(dtvccPacket) {\n // Two bytes follow. For the purpose of this decoder, we are only concerned\n // with byte 2, which is of the form |I|U|EDTYP|FNTAG|.\n\n // I (1 bit): Italics toggle.\n // U (1 bit): Underline toggle.\n // EDTYP (3 bits): Edge type (unused in this decoder).\n // FNTAG (3 bits): Font tag (unused in this decoder).\n // More info at https://en.wikipedia.org/wiki/CEA-708#SetPenAttributes_(0x90_+_2_bytes)\n\n dtvccPacket.skip(1); // Skip first byte\n const attrByte2 = dtvccPacket.readByte().value;\n\n if (!this.currentWindow_) {\n return;\n }\n\n const italics = (attrByte2 & 0x80) > 0;\n const underline = (attrByte2 & 0x40) > 0;\n\n this.currentWindow_.setPenItalics(italics);\n this.currentWindow_.setPenUnderline(underline);\n }\n\n /**\n * @param {!shaka.cea.DtvccPacket} dtvccPacket\n * @throws {!shaka.util.Error}\n * @private\n */\n setPenColor_(dtvccPacket) {\n // Read foreground and background properties.\n const foregroundByte = dtvccPacket.readByte().value;\n const backgroundByte = dtvccPacket.readByte().value;\n dtvccPacket.skip(1); // Edge color not supported, skip it.\n\n if (!this.currentWindow_) {\n return;\n }\n\n // Byte semantics are described at the following link:\n // https://en.wikipedia.org/wiki/CEA-708#SetPenColor_(0x91_+_3_bytes)\n\n // Foreground color properties: |FOP|F_R|F_G|F_B|.\n const foregroundBlue = foregroundByte & 0x03;\n const foregroundGreen = (foregroundByte & 0x0c) >> 2;\n const foregroundRed = (foregroundByte & 0x30) >> 4;\n\n // Background color properties: |BOP|B_R|B_G|B_B|.\n const backgroundBlue = backgroundByte & 0x03;\n const backgroundGreen = (backgroundByte & 0x0c) >> 2;\n const backgroundRed = (backgroundByte & 0x30) >> 4;\n\n const foregroundColor = this.rgbColorToHex_(\n foregroundRed, foregroundGreen, foregroundBlue);\n\n const backgroundColor = this.rgbColorToHex_(\n backgroundRed, backgroundGreen, backgroundBlue);\n\n this.currentWindow_.setPenTextColor(foregroundColor);\n this.currentWindow_.setPenBackgroundColor(backgroundColor);\n }\n\n /**\n * @param {!shaka.cea.DtvccPacket} dtvccPacket\n * @throws {!shaka.util.Error}\n * @private\n */\n setPenLocation_(dtvccPacket) {\n // Following 2 bytes take the following form:\n // b1 = |0|0|0|0|ROW| and b2 = |0|0|COLUMN|\n const locationByte1 = dtvccPacket.readByte().value;\n const locationByte2 = dtvccPacket.readByte().value;\n\n if (!this.currentWindow_) {\n return;\n }\n\n const row = locationByte1 & 0x0f;\n const col = locationByte2 & 0x3f;\n this.currentWindow_.setPenLocation(row, col);\n }\n\n /**\n * @param {!shaka.cea.DtvccPacket} dtvccPacket\n * @throws {!shaka.util.Error}\n * @private\n */\n setWindowAttributes_(dtvccPacket) {\n // 4 bytes follow, with the following form:\n // Byte 1 contains fill-color information. Unused in this decoder.\n // Byte 2 contains border color information. Unused in this decoder.\n // Byte 3 contains justification information. In this decoder, we only use\n // the last 2 bits, which specifies text justification on the screen.\n // Byte 4 is special effects. Unused in this decoder.\n // More info at https://en.wikipedia.org/wiki/CEA-708#SetWindowAttributes_(0x97_+_4_bytes)\n dtvccPacket.skip(1); // Fill color not supported, skip.\n dtvccPacket.skip(1); // Border colors not supported, skip.\n const b3 = dtvccPacket.readByte().value;\n dtvccPacket.skip(1); // Effects not supported, skip.\n\n if (!this.currentWindow_) {\n return;\n }\n\n // Word wrap is outdated as of CEA-708-E, so we ignore those bits.\n // Extract the text justification and set it on the window.\n const justification =\n /** @type {!shaka.cea.Cea708Window.TextJustification} */ (b3 & 0x03);\n this.currentWindow_.setJustification(justification);\n }\n\n /**\n * @param {!shaka.cea.DtvccPacket} dtvccPacket\n * @param {number} windowNum\n * @param {number} pts\n * @throws {!shaka.util.Error}\n * @private\n */\n defineWindow_(dtvccPacket, windowNum, pts) {\n // Create the window if it doesn't exist.\n const windowAlreadyExists = this.windows_[windowNum] !== null;\n if (!windowAlreadyExists) {\n const window = new shaka.cea.Cea708Window(windowNum, this.serviceNumber_);\n window.setStartTime(pts);\n this.windows_[windowNum] = window;\n }\n\n // 6 Bytes follow, with the following form:\n // b1 = |0|0|V|R|C|PRIOR| , b2 = |P|VERT_ANCHOR| , b3 = |HOR_ANCHOR|\n // b4 = |ANC_ID|ROW_CNT| , b5 = |0|0|COL_COUNT| , b6 = |0|0|WNSTY|PNSTY|\n // Semantics of these bytes at https://en.wikipedia.org/wiki/CEA-708#DefineWindow07_(0x98-0x9F,_+_6_bytes)\n const b1 = dtvccPacket.readByte().value;\n const b2 = dtvccPacket.readByte().value;\n const b3 = dtvccPacket.readByte().value;\n const b4 = dtvccPacket.readByte().value;\n const b5 = dtvccPacket.readByte().value;\n const b6 = dtvccPacket.readByte().value;\n\n // As per 8.4.7 of CEA-708-E, row locks and column locks are to be ignored.\n // So this decoder will ignore these values.\n\n const visible = (b1 & 0x20) > 0;\n const verticalAnchor = b2 & 0x7f;\n const relativeToggle = (b2 & 0x80) > 0;\n const horAnchor = b3;\n const rowCount = (b4 & 0x0f) + 1; // Spec says to add 1.\n const anchorId = (b4 & 0xf0) >> 4;\n const colCount = (b5 & 0x3f) + 1; // Spec says to add 1.\n\n // If pen style = 0 AND window previously existed, keep its pen style.\n // Otherwise, change the pen style (For now, just reset to the default pen).\n // TODO add support for predefined pen styles and fonts.\n const penStyle = b6 & 0x07;\n if (!windowAlreadyExists || penStyle !== 0) {\n this.windows_[windowNum].resetPen();\n }\n\n this.windows_[windowNum].defineWindow(visible, verticalAnchor,\n horAnchor, anchorId, relativeToggle, rowCount, colCount);\n\n // Set the current window to the newly defined window.\n this.currentWindow_ = this.windows_[windowNum];\n }\n\n /**\n * Maps 64 possible CEA-708 colors to 8 CSS colors.\n * @param {number} red value from 0-3\n * @param {number} green value from 0-3\n * @param {number} blue value from 0-3\n * @return {string}\n * @private\n */\n rgbColorToHex_(red, green, blue) {\n // Rather than supporting 64 colors, this decoder supports 8 colors and\n // gets the closest color, as per 9.19 of CEA-708-E. This is because some\n // colors on television such as white, are often sent with lower intensity\n // and often appear dull/greyish on the browser, making them hard to read.\n\n // As per CEA-708-E 9.19, these mappings will map 64 colors to 8 colors.\n const colorMapping = {0: 0, 1: 0, 2: 1, 3: 1};\n red = colorMapping[red];\n green = colorMapping[green];\n blue = colorMapping[blue];\n\n const colorCode = (red << 2) | (green << 1) | blue;\n return shaka.cea.Cea708Service.Colors[colorCode];\n }\n};\n\n/**\n * @private @const {number}\n */\nshaka.cea.Cea708Service.ASCII_BACKSPACE = 0x08;\n\n/**\n * @private @const {number}\n */\nshaka.cea.Cea708Service.ASCII_FORM_FEED = 0x0c;\n\n/**\n * @private @const {number}\n */\nshaka.cea.Cea708Service.ASCII_CARRIAGE_RETURN = 0x0d;\n\n/**\n * @private @const {number}\n */\nshaka.cea.Cea708Service.ASCII_HOR_CARRIAGE_RETURN = 0x0e;\n\n/**\n * For extended control codes in block_data on CEA-708, byte 1 is 0x10.\n * @private @const {number}\n */\nshaka.cea.Cea708Service.EXT_CEA708_CTRL_CODE_BYTE1 = 0x10;\n\n/**\n * Holds characters mapping for bytes that are G2 control codes.\n * @private @const {!Map}\n */\nshaka.cea.Cea708Service.G2Charset = new Map([\n [0x20, ' '], [0x21, '\\xa0'], [0x25, '…'], [0x2a, 'Š'], [0x2c, 'Œ'],\n [0x30, '█'], [0x31, '‘'], [0x32, '’'], [0x33, '“'], [0x34, '”'],\n [0x35, '•'], [0x39, '™'], [0x3a, 'š'], [0x3c, 'œ'], [0x3d, '℠'],\n [0x3f, 'Ÿ'], [0x76, '⅛'], [0x77, '⅜'], [0x78, '⅝'], [0x79, '⅞'],\n [0x7a, '│'], [0x7b, '┐'], [0x7c, '└'], [0x7d, '─'], [0x7e, '┘'], [0x7f, '┌'],\n]);\n\n/**\n * An array of 8 colors that 64 colors can be quantized to. Order here matters.\n * @private @const {!Array}\n */\nshaka.cea.Cea708Service.Colors = [\n 'black', 'blue', 'green', 'cyan',\n 'red', 'magenta', 'yellow', 'white',\n];\n\n/**\n * CEA-708 closed captions byte.\n * @typedef {{\n * pts: number,\n * type: number,\n * value: number,\n * order: number\n * }}\n *\n * @property {number} pts\n * Presentation timestamp (in second) at which this packet was received.\n * @property {number} type\n * Type of the byte. Either 2 or 3, DTVCC Packet Data or a DTVCC Packet Start.\n * @property {number} value The byte containing data relevant to the packet.\n * @property {number} order\n * A number indicating the order this packet was received in a sequence\n * of packets. Used to break ties in a stable sorting algorithm\n */\nshaka.cea.Cea708Service.Cea708Byte;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.cea.CeaDecoder');\n\ngoog.require('shaka.cea.Cea608DataChannel');\ngoog.require('shaka.cea.Cea708Service');\ngoog.require('shaka.cea.DtvccPacketBuilder');\ngoog.require('shaka.log');\ngoog.require('shaka.media.ClosedCaptionParser');\ngoog.require('shaka.util.DataViewReader');\ngoog.require('shaka.util.Error');\ngoog.requireType('shaka.cea.DtvccPacket');\n\n\n/**\n * CEA-X08 captions decoder.\n * @implements {shaka.extern.ICaptionDecoder}\n * @export\n */\nshaka.cea.CeaDecoder = class {\n /** */\n constructor() {\n /**\n * An array of CEA-608 closed caption data extracted for decoding.\n * @private {!Array}\n */\n this.cea608DataArray_ = [];\n\n /**\n * An array of CEA-708 closed caption data extracted for decoding.\n * @private {!Array}\n */\n this.cea708DataArray_ = [];\n\n /**\n * A DTVCC Packet builder for CEA-708 data.\n * @private {!shaka.cea.DtvccPacketBuilder}\n */\n this.dtvccPacketBuilder_ = new shaka.cea.DtvccPacketBuilder();\n\n /**\n * Number of consecutive bad frames decoded on CEA-608.\n * @private {number}\n */\n this.badFrames_ = 0;\n\n /**\n * A map containing the stream for each mode.\n * @private {!Map}\n */\n this.cea608ModeToStream_ = new Map([\n ['CC1', new shaka.cea.Cea608DataChannel(0, 0)], // F1 + C1 -> CC1\n ['CC2', new shaka.cea.Cea608DataChannel(0, 1)], // F1 + C2 -> CC2\n ['CC3', new shaka.cea.Cea608DataChannel(1, 0)], // F2 + C1 -> CC3\n ['CC4', new shaka.cea.Cea608DataChannel(1, 1)], // F2 + C2 -> CC4\n ]);\n\n /**\n * The current channel that is active on CEA-608 field 1.\n * @private {number}\n */\n this.currentField1Channel_ = 0;\n\n /**\n * The current channel that is active on CEA-608 field 2.\n * @private {number}\n */\n this.currentField2Channel_ = 0;\n\n /**\n * Map of service number to CEA-708 services, initially empty. Since there\n * can be up to 63 services, they are created dynamically only when needed.\n * @private {!Map}\n */\n this.serviceNumberToService_ = new Map();\n\n /**\n * @private {boolean}\n */\n this.waitingForFirstPacket_ = true;\n\n /**\n * Set used to track available streams.\n * @private {!Set.}\n */\n this.streams_ = new Set();\n\n this.reset();\n }\n\n /**\n * Clears the decoder.\n * @override\n */\n clear() {\n shaka.log.debug('Clearing CEA decoder');\n this.badFrames_ = 0;\n this.cea608DataArray_ = [];\n this.cea708DataArray_ = [];\n this.dtvccPacketBuilder_.clear();\n this.reset();\n\n // Clear all the CEA-708 services.\n for (const service of this.serviceNumberToService_.values()) {\n service.clear();\n }\n }\n\n /**\n * Resets the decoder.\n */\n reset() {\n shaka.log.debug('Resetting CEA decoder');\n this.currentField1Channel_ = 0;\n this.currentField2Channel_ = 0;\n for (const stream of this.cea608ModeToStream_.values()) {\n stream.reset();\n }\n this.waitingForFirstPacket_ = true;\n }\n\n /**\n * Extracts closed caption bytes from CEA-X08 packets from the stream based on\n * ANSI/SCTE 128 and A/53, Part 4.\n * @override\n */\n extract(userDataSeiMessage, pts) {\n if (this.waitingForFirstPacket_) {\n shaka.log.debug('Setting first pts value to', pts);\n for (const stream of this.cea608ModeToStream_.values()) {\n stream.firstPts(pts);\n }\n this.waitingForFirstPacket_ = false;\n }\n\n const reader = new shaka.util.DataViewReader(\n userDataSeiMessage, shaka.util.DataViewReader.Endianness.BIG_ENDIAN);\n\n if (reader.getLength() < shaka.cea.CeaDecoder.MIN_LENGTH) {\n return;\n }\n if (reader.readUint8() !== shaka.cea.CeaDecoder.USA_COUNTRY_CODE) {\n return;\n }\n if (reader.readUint16() !== shaka.cea.CeaDecoder.ATSC_PROVIDER_CODE) {\n return;\n }\n if (reader.readUint32() !== shaka.cea.CeaDecoder.ATSC1_USER_IDENTIFIER) {\n return;\n }\n\n // user_data_type_code: 0x03 - cc_data()\n if (reader.readUint8() !== 0x03) {\n return;\n }\n\n // 1 bit reserved\n // 1 bit process_cc_data_flag\n // 1 bit zero_bit\n // 5 bits cc_count\n const captionData = reader.readUint8();\n // If process_cc_data_flag is not set, do not process this data.\n if ((captionData & 0x40) === 0) {\n return;\n }\n\n const count = captionData & 0x1f;\n\n // 8 bits reserved\n reader.skip(1);\n\n for (let i = 0; i < count; i++) {\n const cc = reader.readUint8();\n // When ccValid is 0, the next two bytes should be discarded.\n const ccValid = (cc & 0x04) >> 2;\n const ccData1 = reader.readUint8();\n const ccData2 = reader.readUint8();\n\n if (ccValid) {\n const ccType = cc & 0x03;\n // Send the packet to the appropriate data array (CEA-608 or CEA-708).\n if (ccType === shaka.cea.CeaDecoder.NTSC_CC_FIELD_1 ||\n ccType === shaka.cea.CeaDecoder.NTSC_CC_FIELD_2) {\n // CEA-608 NTSC (Line 21) Data.\n this.cea608DataArray_.push({\n pts,\n type: ccType,\n ccData1,\n ccData2,\n order: this.cea608DataArray_.length,\n });\n } else {\n // CEA-708 DTVCC Data.\n this.cea708DataArray_.push({\n pts,\n type: ccType,\n value: ccData1,\n order: this.cea708DataArray_.length,\n });\n\n // The second byte should always be labelled as DTVCC packet data.\n // Even if this pair was a DTVCC packet start, only the first byte\n // contains header info, and the second byte is just packet data.\n this.cea708DataArray_.push({\n pts,\n type: shaka.cea.DtvccPacketBuilder.DTVCC_PACKET_DATA,\n value: ccData2,\n order: this.cea708DataArray_.length,\n });\n }\n }\n }\n }\n\n /**\n * Decodes extracted closed caption data.\n * @override\n */\n decode() {\n /** @type {!Array.} */\n const parsedClosedCaptions = [];\n\n // In some versions of Chrome, and other browsers, the default sorting\n // algorithm isn't stable. This comparator sorts on presentation\n // timestamp, and breaks ties on receive order (position in array).\n const stableComparator =\n (p1, p2) => (p1.pts - p2.pts) || (p1.order - p2.order);\n\n this.cea608DataArray_.sort(stableComparator);\n this.cea708DataArray_.sort(stableComparator);\n\n // CEA-608 packets are just byte pairs. Decode all of them.\n for (const cea608Packet of this.cea608DataArray_) {\n const parsedClosedCaption = this.decodeCea608_(cea608Packet);\n if (parsedClosedCaption) {\n parsedClosedCaptions.push(parsedClosedCaption);\n }\n }\n\n // CEA-708 packets are DTVCC packets composed of many byte pairs. Add all\n // byte pairs to the packet builder, and process + clear any ready packets.\n for (const cea708Byte of this.cea708DataArray_) {\n this.dtvccPacketBuilder_.addByte(cea708Byte);\n }\n const dtvccPackets = this.dtvccPacketBuilder_.getBuiltPackets();\n for (const dtvccPacket of dtvccPackets) {\n const closedCaptions = this.decodeCea708_(dtvccPacket);\n parsedClosedCaptions.push(...closedCaptions);\n }\n\n // Clear all processed data.\n this.dtvccPacketBuilder_.clearBuiltPackets();\n this.cea608DataArray_ = [];\n this.cea708DataArray_ = [];\n\n return parsedClosedCaptions;\n }\n\n /**\n * Decodes a CEA-608 closed caption packet based on ANSI/CEA-608.\n * @param {shaka.cea.Cea608DataChannel.Cea608Packet} ccPacket\n * @return {?shaka.extern.ICaptionDecoder.ClosedCaption}\n * @private\n */\n decodeCea608_(ccPacket) {\n const fieldNum = ccPacket.type;\n\n // If this packet is a control code, then it also sets the channel.\n // For control codes, cc_data_1 has the form |P|0|0|1|C|X|X|X|.\n // \"C\" is the channel bit. It indicates whether to set C2 active.\n if (shaka.cea.Cea608DataChannel.isControlCode(ccPacket.ccData1)) {\n const channelNum = (ccPacket.ccData1 >> 3) & 0x01; // Get channel bit.\n\n // Change the stream based on the field, and the new channel\n if (fieldNum === 0) {\n this.currentField1Channel_ = channelNum;\n } else {\n this.currentField2Channel_ = channelNum;\n }\n }\n\n // Get the correct stream for this caption packet (CC1, ..., CC4)\n const selectedChannel = fieldNum ?\n this.currentField2Channel_ : this.currentField1Channel_;\n const selectedMode = `CC${((fieldNum << 1) | selectedChannel) + 1}`;\n const selectedStream = this.cea608ModeToStream_.get(selectedMode);\n\n // Check for bad frames (bad pairs). This can be two 0xff, two 0x00, or any\n // byte of even parity. ccData1 and ccData2 should be uint8 of odd parity.\n if ((ccPacket.ccData1 === 0xff && ccPacket.ccData2 === 0xff) ||\n (!ccPacket.ccData1 && !ccPacket.ccData2) ||\n !this.isOddParity_(ccPacket.ccData1) ||\n !this.isOddParity_(ccPacket.ccData2)) {\n // Per CEA-608-B C.21, reset the memory after 45 consecutive bad frames.\n if (++this.badFrames_ >= 45) {\n this.reset();\n }\n return null;\n }\n this.badFrames_ = 0;\n\n // Remove the MSB (parity bit).\n ccPacket.ccData1 &= 0x7f;\n ccPacket.ccData2 &= 0x7f;\n\n // Ignore XDS\n if (shaka.cea.Cea608DataChannel.isXdsControlCode(ccPacket.ccData1)) {\n return null;\n }\n\n // Check for empty captions and skip them.\n if (!ccPacket.ccData1 && !ccPacket.ccData2) {\n return null;\n }\n\n // Process the clean CC data pair.\n let parsedClosedCaption = null;\n if (shaka.cea.Cea608DataChannel.isControlCode(ccPacket.ccData1)) {\n this.streams_.add(selectedMode);\n parsedClosedCaption = selectedStream.handleControlCode(ccPacket);\n } else {\n // Handle as a Basic North American Character.\n selectedStream.handleBasicNorthAmericanChar(\n ccPacket.ccData1, ccPacket.ccData2);\n }\n\n return parsedClosedCaption;\n }\n\n /**\n * Decodes a CEA-708 DTVCC packet based on ANSI/CTA-708-E.\n * @param {shaka.cea.DtvccPacket} dtvccPacket\n * @return {!Array}\n * @private\n */\n decodeCea708_(dtvccPacket) {\n const parsedClosedCaptions = [];\n try {\n while (dtvccPacket.hasMoreData()) {\n // Process a service block.\n const serviceBlockHeader = dtvccPacket.readByte().value;\n\n // First 3 bits are service number, next 5 are block size,\n // representing the number of bytes coming in this block\n // (discluding a possible extended service block header byte)\n let serviceNumber = (serviceBlockHeader & 0xe0) >> 5;\n const blockSize = serviceBlockHeader & 0x1f;\n\n if (serviceNumber === /* 0b111 */ 0x07 && blockSize != 0) {\n // 2 bits null padding, 6 bits extended service number\n const extendedServiceBlockHeader = dtvccPacket.readByte().value;\n serviceNumber = extendedServiceBlockHeader & 0x3f;\n }\n\n // As per CEA-708-E, service number 0 is invalid, and should be ignored.\n if (serviceNumber != 0) {\n this.streams_.add('svc'+ serviceNumber);\n // If the service doesn't already exist, create it.\n if (!this.serviceNumberToService_.has(serviceNumber)) {\n const service = new shaka.cea.Cea708Service(serviceNumber);\n this.serviceNumberToService_.set(serviceNumber, service);\n }\n const service = this.serviceNumberToService_.get(serviceNumber);\n\n // Process all control codes.\n const startPos = dtvccPacket.getPosition();\n\n // Execute this loop `blockSize` times, to decode the control codes.\n while (dtvccPacket.getPosition() - startPos < blockSize) {\n const closedCaption = service.handleCea708ControlCode(dtvccPacket);\n if (closedCaption) {\n parsedClosedCaptions.push(closedCaption);\n }\n } // position < end of block\n } // serviceNumber != 0\n } // hasMoreData\n } catch (error) {\n if (error instanceof shaka.util.Error &&\n error.code === shaka.util.Error.Code.BUFFER_READ_OUT_OF_BOUNDS) {\n shaka.log.warnOnce('CEA708_INVALID_DATA',\n 'Buffer read out of bounds / invalid CEA-708 Data.');\n } else {\n // This is an unexpected error, and should be rethrown.\n throw error;\n }\n }\n return parsedClosedCaptions;\n }\n\n /**\n * Checks if a byte has odd parity (Odd number of 1s in binary).\n * @param {number} byte\n * @return {boolean} True if the byte has odd parity.\n * @private\n */\n isOddParity_(byte) {\n let parity = 0;\n while (byte) {\n parity ^= (byte & 1); // toggle parity if low bit is 1\n byte >>= 1; // shift away the low bit\n }\n return parity === 1;\n }\n\n /**\n * Returns the streams that the CEA decoder found.\n *\n * @override\n */\n getStreams() {\n return Array.from(this.streams_);\n }\n};\n\n/**\n * itu_t_35_provider_code for ATSC user_data\n * @private @const {number}\n */\nshaka.cea.CeaDecoder.ATSC_PROVIDER_CODE = 0x0031;\n\n/**\n * When provider is ATSC user data, the ATSC_user_identifier code\n * for ATSC1_data is \"GA94\" (0x47413934)\n * @private @const {number}\n */\nshaka.cea.CeaDecoder.ATSC1_USER_IDENTIFIER = 0x47413934;\n\n/**\n * @private @const {number}\n */\nshaka.cea.CeaDecoder.NTSC_CC_FIELD_1 = 0;\n\n/**\n * @private @const {number}\n */\nshaka.cea.CeaDecoder.NTSC_CC_FIELD_2 = 1;\n\n/**\n * 0xB5 is USA's code (Rec. ITU-T T.35)\n * @private @const {number}\n */\nshaka.cea.CeaDecoder.USA_COUNTRY_CODE = 0xb5;\n\n/**\n * Caption packet min length\n * Country Code + ATSC_PROVIDER_CODE + ATSC_1_USER_IDENTIFIER + USER_DATA_TYPE\n * @private @const {number}\n */\nshaka.cea.CeaDecoder.MIN_LENGTH = 8;\n\nshaka.media.ClosedCaptionParser.registerDecoder(\n () => new shaka.cea.CeaDecoder());\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.cea.SeiProcessor');\n\n\n/**\n * H.264 SEI NALU Parser used for extracting 708 closed caption packets.\n */\nshaka.cea.SeiProcessor = class {\n /**\n * Processes supplemental enhancement information data.\n * @param {!Uint8Array} naluData NALU from which SEI data is to be processed.\n * @return {!Array.}\n */\n process(naluData) {\n const seiPayloads = [];\n const naluClone = this.removeEmu(naluData);\n\n // The following is an implementation of section 7.3.2.3.1\n // in Rec. ITU-T H.264 (06/2019), the H.264 spec.\n let offset = 0;\n\n while (offset < naluClone.length) {\n let payloadType = 0; // SEI payload type as defined by H.264 spec\n while (naluClone[offset] == 0xFF) {\n payloadType += 255;\n offset++;\n }\n payloadType += naluClone[offset++];\n\n let payloadSize = 0; // SEI payload size as defined by H.264 spec\n while (naluClone[offset] == 0xFF) {\n payloadSize += 255;\n offset++;\n }\n payloadSize += naluClone[offset++];\n\n // Payload type 4 is user_data_registered_itu_t_t35, as per the H.264\n // spec. This payload type contains caption data.\n if (payloadType == 0x04) {\n seiPayloads.push(naluClone.subarray(offset, offset + payloadSize));\n }\n offset += payloadSize;\n }\n\n return seiPayloads;\n }\n\n\n /**\n * Removes H.264 emulation prevention bytes from the byte array.\n *\n * Note: Remove bytes by shifting will cause Chromium (VDA) to complain\n * about conformance. Recreating a new array solves it.\n *\n * @param {!Uint8Array} naluData NALU from which EMUs should be removed.\n * @return {!Uint8Array} The NALU with the emulation prevention byte removed.\n */\n removeEmu(naluData) {\n let naluClone = naluData;\n let zeroCount = 0;\n let src = 0;\n while (src < naluClone.length) {\n if (zeroCount == 2 && naluClone[src] == 0x03) {\n // 0x00, 0x00, 0x03 pattern detected\n zeroCount = 0;\n\n // Splice the array and recreate a new one, instead of shifting bytes\n const newArr = [...naluClone];\n newArr.splice(src, 1);\n naluClone = new Uint8Array(newArr);\n } else {\n if (naluClone[src] == 0x00) {\n zeroCount++;\n } else {\n zeroCount = 0;\n }\n }\n src++;\n }\n return naluClone;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.cea.Mp4CeaParser');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.cea.CeaUtils');\ngoog.require('shaka.cea.SeiProcessor');\ngoog.require('shaka.log');\ngoog.require('shaka.media.ClosedCaptionParser');\ngoog.require('shaka.util.DataViewReader');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.Mp4Parser');\ngoog.require('shaka.util.Mp4BoxParsers');\n\n/**\n * MPEG4 stream parser used for extracting 708 closed captions data.\n * @implements {shaka.extern.ICeaParser}\n * @export\n */\nshaka.cea.Mp4CeaParser = class {\n /** */\n constructor() {\n /**\n * SEI data processor.\n * @private\n * @const {!shaka.cea.SeiProcessor}\n */\n this.seiProcessor_ = new shaka.cea.SeiProcessor();\n\n /**\n * Map of track id to corresponding timescale.\n * @private {!Map}\n */\n this.trackIdToTimescale_ = new Map();\n\n /**\n * Default sample duration, as specified by the TREX box.\n * @private {number}\n */\n this.defaultSampleDuration_ = 0;\n\n /**\n * Default sample size, as specified by the TREX box.\n * @private {number}\n */\n this.defaultSampleSize_ = 0;\n\n /**\n * @private {shaka.cea.Mp4CeaParser.BitstreamFormat}\n */\n this.bitstreamFormat_ = shaka.cea.Mp4CeaParser.BitstreamFormat.UNKNOWN;\n }\n\n /**\n * Parses the init segment. Gets Default Sample Duration and Size from the\n * TREX box, and constructs a map of Track IDs to timescales. Each TRAK box\n * contains a track header (TKHD) containing track ID, and a media header box\n * (MDHD) containing the timescale for the track\n * @override\n */\n init(initSegment) {\n const Mp4Parser = shaka.util.Mp4Parser;\n const BitstreamFormat = shaka.cea.Mp4CeaParser.BitstreamFormat;\n const trackIds = [];\n const timescales = [];\n\n const codecBoxParser = (box) => this.setBitstreamFormat_(box.name);\n\n new Mp4Parser()\n .box('moov', Mp4Parser.children)\n .box('mvex', Mp4Parser.children)\n .fullBox('trex', (box) => {\n const parsedTREXBox = shaka.util.Mp4BoxParsers.parseTREX(\n box.reader);\n\n this.defaultSampleDuration_ = parsedTREXBox.defaultSampleDuration;\n this.defaultSampleSize_ = parsedTREXBox.defaultSampleSize;\n })\n .box('trak', Mp4Parser.children)\n .fullBox('tkhd', (box) => {\n goog.asserts.assert(\n box.version != null,\n 'TKHD is a full box and should have a valid version.');\n const parsedTKHDBox = shaka.util.Mp4BoxParsers.parseTKHD(\n box.reader, box.version);\n trackIds.push(parsedTKHDBox.trackId);\n })\n .box('mdia', Mp4Parser.children)\n .fullBox('mdhd', (box) => {\n goog.asserts.assert(\n box.version != null,\n 'MDHD is a full box and should have a valid version.');\n const parsedMDHDBox = shaka.util.Mp4BoxParsers.parseMDHD(\n box.reader, box.version);\n timescales.push(parsedMDHDBox.timescale);\n })\n .box('minf', Mp4Parser.children)\n .box('stbl', Mp4Parser.children)\n .fullBox('stsd', Mp4Parser.sampleDescription)\n\n // These are the various boxes that signal a codec.\n .box('avc1', codecBoxParser)\n .box('avc3', codecBoxParser)\n .box('dvav', codecBoxParser)\n .box('dva1', codecBoxParser)\n .box('hev1', codecBoxParser)\n .box('hvc1', codecBoxParser)\n .box('dvh1', codecBoxParser)\n .box('dvhe', codecBoxParser)\n .box('vvc1', codecBoxParser)\n .box('vvi1', codecBoxParser)\n .box('dvc1', codecBoxParser)\n .box('dvi1', codecBoxParser)\n\n // This signals an encrypted sample, which we can go inside of to find\n // the codec used.\n .box('encv', Mp4Parser.visualSampleEntry)\n .box('sinf', Mp4Parser.children)\n .box('frma', (box) => {\n const {codec} = shaka.util.Mp4BoxParsers.parseFRMA(box.reader);\n this.setBitstreamFormat_(codec);\n })\n\n .parse(initSegment, /* partialOkay= */ true);\n\n // At least one track should exist, and each track should have a\n // corresponding Id in TKHD box, and timescale in its MDHD box\n if (!trackIds.length|| !timescales.length ||\n trackIds.length != timescales.length) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.TEXT,\n shaka.util.Error.Code.INVALID_MP4_CEA);\n }\n\n if (this.bitstreamFormat_ == BitstreamFormat.UNKNOWN) {\n shaka.log.alwaysWarn(\n 'Unable to determine bitstream format for CEA parsing!');\n }\n\n // Populate the map from track Id to timescale\n trackIds.forEach((trackId, idx) => {\n this.trackIdToTimescale_.set(trackId, timescales[idx]);\n });\n }\n\n /**\n * Parses each video segment. In fragmented MP4s, MOOF and MDAT come in\n * pairs. The following logic gets the necessary info from MOOFs to parse\n * MDATs (base media decode time, sample sizes/offsets/durations, etc),\n * and then parses the MDAT boxes for CEA-708 packets using this information.\n * CEA-708 packets are returned in the callback.\n * @override\n */\n parse(mediaSegment) {\n const Mp4Parser = shaka.util.Mp4Parser;\n const BitstreamFormat = shaka.cea.Mp4CeaParser.BitstreamFormat;\n\n if (this.bitstreamFormat_ == BitstreamFormat.UNKNOWN) {\n // We don't know how to extract SEI from this.\n return [];\n }\n\n /** @type {!Array} **/\n const captionPackets = [];\n\n let moofOffset = 0;\n\n /** @type {!Array} */\n let parsedTRAFs = [];\n\n new Mp4Parser()\n .box('moof', (box) => {\n moofOffset = box.start;\n // traf box parsing is reset on each moof.\n parsedTRAFs = [];\n Mp4Parser.children(box);\n })\n .box('traf', (box) => {\n parsedTRAFs.push({\n baseMediaDecodeTime: null,\n defaultSampleDuration: this.defaultSampleDuration_,\n defaultSampleSize: this.defaultSampleSize_,\n parsedTRUNs: [],\n timescale: shaka.cea.CeaUtils.DEFAULT_TIMESCALE_VALUE,\n });\n Mp4Parser.children(box);\n })\n .fullBox('trun', (box) => {\n goog.asserts.assert(\n box.version != null && box.flags != null,\n 'TRUN is a full box and should have a valid version & flags.');\n\n const lastTRAF = parsedTRAFs[parsedTRAFs.length - 1];\n\n const parsedTRUN = shaka.util.Mp4BoxParsers.parseTRUN(\n box.reader, box.version, box.flags);\n lastTRAF.parsedTRUNs.push(parsedTRUN);\n })\n .fullBox('tfhd', (box) => {\n goog.asserts.assert(\n box.flags != null,\n 'TFHD is a full box and should have valid flags.');\n\n const lastTRAF = parsedTRAFs[parsedTRAFs.length - 1];\n\n const parsedTFHD = shaka.util.Mp4BoxParsers.parseTFHD(\n box.reader, box.flags);\n\n // If specified, defaultSampleDuration and defaultSampleSize\n // override the ones specified in the TREX box\n lastTRAF.defaultSampleDuration = parsedTFHD.defaultSampleDuration ||\n this.defaultSampleDuration_;\n\n lastTRAF.defaultSampleSize = parsedTFHD.defaultSampleSize ||\n this.defaultSampleSize_;\n\n const trackId = parsedTFHD.trackId;\n\n // Get the timescale from the track Id\n if (this.trackIdToTimescale_.has(trackId)) {\n lastTRAF.timescale = this.trackIdToTimescale_.get(trackId);\n }\n })\n .fullBox('tfdt', (box) => {\n goog.asserts.assert(\n box.version != null,\n 'TFDT is a full box and should have a valid version.');\n\n const lastTRAF = parsedTRAFs[parsedTRAFs.length - 1];\n\n const parsedTFDT = shaka.util.Mp4BoxParsers.parseTFDTInaccurate(\n box.reader, box.version);\n\n lastTRAF.baseMediaDecodeTime = parsedTFDT.baseMediaDecodeTime;\n })\n .box('mdat', (box) => {\n const offset = moofOffset - box.start - 8;\n const initialPosition = box.reader.getPosition();\n for (const parsedTRAF of parsedTRAFs) {\n if (parsedTRAF.baseMediaDecodeTime === null) {\n // This field should have been populated by the Base Media Decode\n // Time in the tfdt box.\n shaka.log.alwaysWarn(\n 'Unable to find base media decode time for CEA captions!');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.TEXT,\n shaka.util.Error.Code.INVALID_MP4_CEA);\n }\n box.reader.seek(initialPosition);\n this.parseMdat_(box.reader,\n parsedTRAF.baseMediaDecodeTime,\n parsedTRAF.timescale,\n parsedTRAF.defaultSampleDuration,\n parsedTRAF.defaultSampleSize,\n offset,\n parsedTRAF.parsedTRUNs,\n captionPackets);\n }\n })\n .parse(mediaSegment, /* partialOkay= */ false);\n\n return captionPackets;\n }\n\n /**\n * Parse MDAT box.\n * @param {!shaka.util.DataViewReader} reader\n * @param {number} time\n * @param {number} timescale\n * @param {number} defaultSampleDuration\n * @param {number} defaultSampleSize\n * @param {number} offset\n * @param {!Array} parsedTRUNs\n * @param {!Array} captionPackets\n * @private\n */\n parseMdat_(reader, time, timescale, defaultSampleDuration,\n defaultSampleSize, offset, parsedTRUNs, captionPackets) {\n const BitstreamFormat = shaka.cea.Mp4CeaParser.BitstreamFormat;\n const CeaUtils = shaka.cea.CeaUtils;\n let sampleIndex = 0;\n\n // The fields in each ParsedTRUNSample contained in the sampleData\n // array are nullable. In the case of sample data and sample duration,\n // we use the defaults provided by the TREX/TFHD boxes. For sample\n // composition time offset, we default to 0.\n let sampleSize = defaultSampleSize;\n\n // Combine all sample data. This assumes that the samples described across\n // multiple trun boxes are still continuous in the mdat box.\n const sampleDatas = parsedTRUNs.map((t) => t.sampleData);\n const sampleData = [].concat(...sampleDatas);\n\n if (sampleData.length) {\n sampleSize = sampleData[0].sampleSize || defaultSampleSize;\n }\n\n reader.skip(offset + parsedTRUNs[0].dataOffset);\n\n while (reader.hasMoreData()) {\n const naluSize = reader.readUint32();\n const naluHeader = reader.readUint8();\n let naluType = null;\n let isSeiMessage = false;\n let naluHeaderSize = 1;\n\n goog.asserts.assert(this.bitstreamFormat_ != BitstreamFormat.UNKNOWN,\n 'Bitstream format should have been checked before now!');\n switch (this.bitstreamFormat_) {\n case BitstreamFormat.H264:\n naluType = naluHeader & 0x1f;\n isSeiMessage = naluType == CeaUtils.H264_NALU_TYPE_SEI;\n break;\n\n case BitstreamFormat.H265:\n naluHeaderSize = 2;\n reader.skip(1);\n naluType = (naluHeader >> 1) & 0x3f;\n isSeiMessage =\n naluType == CeaUtils.H265_PREFIX_NALU_TYPE_SEI ||\n naluType == CeaUtils.H265_SUFFIX_NALU_TYPE_SEI;\n break;\n\n case BitstreamFormat.H266:\n naluHeaderSize = 2;\n reader.skip(1);\n naluType = (naluHeader >> 1) & 0x3f;\n isSeiMessage =\n naluType == CeaUtils.H266_PREFIX_NALU_TYPE_SEI ||\n naluType == CeaUtils.H266_SUFFIX_NALU_TYPE_SEI;\n break;\n\n default:\n return;\n }\n\n if (isSeiMessage) {\n let timeOffset = 0;\n\n if (sampleIndex < sampleData.length) {\n timeOffset = sampleData[sampleIndex].sampleCompositionTimeOffset || 0;\n }\n\n const pts = (time + timeOffset) / timescale;\n for (const packet of this.seiProcessor_\n .process(reader.readBytes(naluSize - naluHeaderSize))) {\n captionPackets.push({\n packet,\n pts,\n });\n }\n } else {\n try {\n reader.skip(naluSize - naluHeaderSize);\n } catch (e) {\n // It is necessary to ignore this error because it can break the start\n // of playback even if the user does not want to see the subtitles.\n break;\n }\n }\n sampleSize -= (naluSize + 4);\n if (sampleSize == 0) {\n if (sampleIndex < sampleData.length) {\n time += sampleData[sampleIndex].sampleDuration ||\n defaultSampleDuration;\n } else {\n time += defaultSampleDuration;\n }\n\n sampleIndex++;\n\n if (sampleIndex < sampleData.length) {\n sampleSize = sampleData[sampleIndex].sampleSize || defaultSampleSize;\n } else {\n sampleSize = defaultSampleSize;\n }\n }\n }\n }\n\n /**\n * @param {string} codec A fourcc for a codec.\n * @private\n */\n setBitstreamFormat_(codec) {\n if (codec in shaka.cea.Mp4CeaParser.CodecBitstreamMap_) {\n this.bitstreamFormat_ = shaka.cea.Mp4CeaParser.CodecBitstreamMap_[codec];\n }\n }\n};\n\n/** @enum {number} */\nshaka.cea.Mp4CeaParser.BitstreamFormat = {\n UNKNOWN: 0,\n H264: 1,\n H265: 2,\n H266: 3,\n};\n\n/** @private {Object.} */\nshaka.cea.Mp4CeaParser.CodecBitstreamMap_ = {\n // AVC\n 'avc1': shaka.cea.Mp4CeaParser.BitstreamFormat.H264,\n 'avc3': shaka.cea.Mp4CeaParser.BitstreamFormat.H264,\n // Dolby Vision based in AVC\n 'dvav': shaka.cea.Mp4CeaParser.BitstreamFormat.H264,\n 'dva1': shaka.cea.Mp4CeaParser.BitstreamFormat.H264,\n // HEVC\n 'hev1': shaka.cea.Mp4CeaParser.BitstreamFormat.H265,\n 'hvc1': shaka.cea.Mp4CeaParser.BitstreamFormat.H265,\n // Dolby Vision based in HEVC\n 'dvh1': shaka.cea.Mp4CeaParser.BitstreamFormat.H265,\n 'dvhe': shaka.cea.Mp4CeaParser.BitstreamFormat.H265,\n // VVC\n 'vvc1': shaka.cea.Mp4CeaParser.BitstreamFormat.H266,\n 'vvi1': shaka.cea.Mp4CeaParser.BitstreamFormat.H266,\n // Dolby Vision based in VVC\n 'dvc1': shaka.cea.Mp4CeaParser.BitstreamFormat.H266,\n 'dvi1': shaka.cea.Mp4CeaParser.BitstreamFormat.H266,\n};\n\n/**\n * @typedef {{\n * baseMediaDecodeTime: ?number,\n * defaultSampleDuration: number,\n * defaultSampleSize: number,\n * parsedTRUNs: !Array,\n * timescale: number\n * }}\n *\n * @property {?number} baseMediaDecodeTime\n * @property {number} defaultSampleDuration\n * @property {number} defaultSampleSize\n * @property {!Array} parsedTRUNs\n * @property {?number} timescale\n */\nshaka.cea.Mp4CeaParser.ParsedTRAF;\n\nshaka.media.ClosedCaptionParser.registerParser('video/mp4',\n () => new shaka.cea.Mp4CeaParser());\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.cea.TsCeaParser');\n\ngoog.require('shaka.cea.CeaUtils');\ngoog.require('shaka.cea.SeiProcessor');\ngoog.require('shaka.media.ClosedCaptionParser');\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.TsParser');\n\n/**\n * MPEG TS CEA parser.\n * @implements {shaka.extern.ICeaParser}\n * @export\n */\nshaka.cea.TsCeaParser = class {\n /** */\n constructor() {\n /**\n * SEI data processor.\n * @private\n * @const {!shaka.cea.SeiProcessor}\n */\n this.seiProcessor_ = new shaka.cea.SeiProcessor();\n\n /** @private {?shaka.util.TsParser} */\n this.tsParser_ = null;\n }\n\n /**\n * @override\n */\n init(initSegment) {\n // TS hasn't init segment\n }\n\n /**\n * @override\n */\n parse(mediaSegment) {\n const CeaUtils = shaka.cea.CeaUtils;\n\n if (!this.tsParser_) {\n this.tsParser_ = new shaka.util.TsParser();\n } else {\n this.tsParser_.clearData();\n }\n\n /** @type {!Array} **/\n const captionPackets = [];\n\n const uint8ArrayData = shaka.util.BufferUtils.toUint8(mediaSegment);\n if (!shaka.util.TsParser.probe(uint8ArrayData)) {\n return captionPackets;\n }\n const tsParser = this.tsParser_.parse(uint8ArrayData);\n const codecs = tsParser.getCodecs();\n const videoNalus = tsParser.getVideoNalus();\n const validNaluTypes = [];\n switch (codecs.video) {\n case 'avc':\n validNaluTypes.push(CeaUtils.H264_NALU_TYPE_SEI);\n break;\n case 'hvc':\n validNaluTypes.push(CeaUtils.H265_PREFIX_NALU_TYPE_SEI);\n validNaluTypes.push(CeaUtils.H265_SUFFIX_NALU_TYPE_SEI);\n break;\n }\n if (!validNaluTypes.length) {\n return captionPackets;\n }\n for (const nalu of videoNalus) {\n if (validNaluTypes.includes(nalu.type) && nalu.time != null) {\n for (const packet of this.seiProcessor_.process(nalu.data)) {\n captionPackets.push({\n packet: packet,\n pts: nalu.time,\n });\n }\n }\n }\n return captionPackets;\n }\n};\n\nshaka.media.ClosedCaptionParser.registerParser('video/mp2t',\n () => new shaka.cea.TsCeaParser());\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.dash.ContentProtection');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.ManifestParserUtils');\ngoog.require('shaka.util.Platform');\ngoog.require('shaka.util.Pssh');\ngoog.require('shaka.util.StringUtils');\ngoog.require('shaka.util.TXml');\ngoog.require('shaka.util.Uint8ArrayUtils');\n\n\n/**\n * @summary A set of functions for parsing and interpreting ContentProtection\n * elements.\n */\nshaka.dash.ContentProtection = class {\n /**\n * Parses info from the ContentProtection elements at the AdaptationSet level.\n *\n * @param {!Array.} elems\n * @param {boolean} ignoreDrmInfo\n * @param {!Object.} keySystemsByURI\n * @return {shaka.dash.ContentProtection.Context}\n */\n static parseFromAdaptationSet(elems, ignoreDrmInfo, keySystemsByURI) {\n const ContentProtection = shaka.dash.ContentProtection;\n const ManifestParserUtils = shaka.util.ManifestParserUtils;\n const parsed = ContentProtection.parseElements_(elems);\n /** @type {Array.} */\n let defaultInit = null;\n /** @type {!Array.} */\n let drmInfos = [];\n let parsedNonCenc = [];\n /** @type {?shaka.dash.ContentProtection.Aes128Info} */\n let aes128Info = null;\n\n // Get the default key ID; if there are multiple, they must all match.\n const keyIds = new Set(parsed.map((element) => element.keyId));\n // Remove any possible null value (elements may have no key ids).\n keyIds.delete(null);\n\n let encryptionScheme = 'cenc';\n\n if (keyIds.size > 1) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_CONFLICTING_KEY_IDS);\n }\n\n if (!ignoreDrmInfo) {\n const aes128Elements = parsed.filter((elem) => {\n return elem.schemeUri == ContentProtection.Aes128Protection_;\n });\n\n if (aes128Elements.length > 1) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_CONFLICTING_AES_128);\n }\n\n if (aes128Elements.length) {\n aes128Info = ContentProtection.parseAes128_(aes128Elements[0]);\n }\n\n const mp4ProtectionParsed = parsed.find((elem) => {\n return elem.schemeUri == ContentProtection.MP4Protection_;\n });\n\n if (mp4ProtectionParsed && mp4ProtectionParsed.encryptionScheme) {\n encryptionScheme = mp4ProtectionParsed.encryptionScheme;\n }\n\n // Find the default key ID and init data. Create a new array of all the\n // non-CENC elements.\n parsedNonCenc = parsed.filter((elem) => {\n if (elem.schemeUri == ContentProtection.MP4Protection_) {\n goog.asserts.assert(!elem.init || elem.init.length,\n 'Init data must be null or non-empty.');\n defaultInit = elem.init || defaultInit;\n return false;\n } else {\n return elem.schemeUri != ContentProtection.Aes128Protection_;\n }\n });\n\n if (parsedNonCenc.length) {\n drmInfos = ContentProtection.convertElements_(defaultInit,\n encryptionScheme, parsedNonCenc, keySystemsByURI, keyIds);\n\n // If there are no drmInfos after parsing, then add a dummy entry.\n // This may be removed in parseKeyIds.\n if (drmInfos.length == 0) {\n drmInfos = [ManifestParserUtils.createDrmInfo(\n '', encryptionScheme, defaultInit)];\n }\n }\n }\n\n // If there are only CENC element(s) or ignoreDrmInfo flag is set, assume\n // all key-systems are supported.\n if (parsed.length && !aes128Info &&\n (ignoreDrmInfo || !parsedNonCenc.length)) {\n drmInfos = [];\n\n for (const keySystem of Object.values(keySystemsByURI)) {\n // If the manifest doesn't specify any key systems, we shouldn't\n // put clearkey in this list. Otherwise, it may be triggered when\n // a real key system should be used instead.\n if (keySystem != 'org.w3.clearkey') {\n const info = ManifestParserUtils.createDrmInfo(\n keySystem, encryptionScheme, defaultInit);\n drmInfos.push(info);\n }\n }\n }\n\n // If we have a default key id, apply it to every initData.\n const defaultKeyId = Array.from(keyIds)[0] || null;\n\n if (defaultKeyId) {\n for (const info of drmInfos) {\n for (const initData of info.initData) {\n initData.keyId = defaultKeyId;\n }\n }\n }\n\n return {\n defaultKeyId: defaultKeyId,\n defaultInit: defaultInit,\n drmInfos: drmInfos,\n aes128Info: aes128Info,\n firstRepresentation: true,\n };\n }\n\n /**\n * Parses the given ContentProtection elements found at the Representation\n * level. This may update the |context|.\n *\n * @param {!Array.} elems\n * @param {shaka.dash.ContentProtection.Context} context\n * @param {boolean} ignoreDrmInfo\n * @param {!Object.} keySystemsByURI\n * @return {?string} The parsed key ID\n */\n static parseFromRepresentation(\n elems, context, ignoreDrmInfo, keySystemsByURI) {\n const ContentProtection = shaka.dash.ContentProtection;\n const repContext = ContentProtection.parseFromAdaptationSet(\n elems, ignoreDrmInfo, keySystemsByURI);\n\n if (context.firstRepresentation) {\n const asUnknown = context.drmInfos.length == 1 &&\n !context.drmInfos[0].keySystem;\n const asUnencrypted = context.drmInfos.length == 0;\n const repUnencrypted = repContext.drmInfos.length == 0;\n\n // There are two cases where we need to replace the |drmInfos| in the\n // context with those in the Representation:\n // 1. The AdaptationSet does not list any ContentProtection.\n // 2. The AdaptationSet only lists unknown key-systems.\n if (asUnencrypted || (asUnknown && !repUnencrypted)) {\n context.drmInfos = repContext.drmInfos;\n }\n context.firstRepresentation = false;\n } else if (repContext.drmInfos.length > 0) {\n // If this is not the first Representation, then we need to remove entries\n // from the context that do not appear in this Representation.\n context.drmInfos = context.drmInfos.filter((asInfo) => {\n return repContext.drmInfos.some((repInfo) => {\n return repInfo.keySystem == asInfo.keySystem;\n });\n });\n // If we have filtered out all key-systems, throw an error.\n if (context.drmInfos.length == 0) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_NO_COMMON_KEY_SYSTEM);\n }\n }\n\n return repContext.defaultKeyId || context.defaultKeyId;\n }\n\n /**\n * Gets a FairPlay license URL from a content protection element\n * containing a 'dashif:Laurl' element\n *\n * @param {shaka.dash.ContentProtection.Element} element\n * @return {string}\n */\n static getFairPlayLicenseUrl(element) {\n if (shaka.util.Platform.isMediaKeysPolyfilled()) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code\n .DASH_MSE_ENCRYPTED_LEGACY_APPLE_MEDIA_KEYS_NOT_SUPPORTED);\n }\n const dashIfLaurlNode = shaka.util.TXml.findChildNS(\n element.node, shaka.dash.ContentProtection.DashIfNamespaceUri_,\n 'Laurl',\n );\n if (dashIfLaurlNode) {\n const textContents = shaka.util.TXml.getTextContents(dashIfLaurlNode);\n if (textContents) {\n return textContents;\n }\n }\n return '';\n }\n\n /**\n * Gets a Widevine license URL from a content protection element\n * containing a custom `ms:laurl` or 'dashif:Laurl' elements\n *\n * @param {shaka.dash.ContentProtection.Element} element\n * @return {string}\n */\n static getWidevineLicenseUrl(element) {\n const StringUtils = shaka.util.StringUtils;\n const dashIfLaurlNode = shaka.util.TXml.findChildNS(\n element.node, shaka.dash.ContentProtection.DashIfNamespaceUri_,\n 'Laurl',\n );\n if (dashIfLaurlNode) {\n const textContents = shaka.util.TXml.getTextContents(dashIfLaurlNode);\n if (textContents) {\n return textContents;\n }\n }\n const mslaurlNode = shaka.util.TXml.findChildNS(\n element.node, 'urn:microsoft', 'laurl');\n if (mslaurlNode) {\n return StringUtils.htmlUnescape(\n mslaurlNode.attributes['licenseUrl']) || '';\n }\n return '';\n }\n\n /**\n * Gets a ClearKey license URL from a content protection element\n * containing a custom `clearkey::Laurl` or 'dashif:Laurl' elements\n *\n * @param {shaka.dash.ContentProtection.Element} element\n * @return {string}\n */\n static getClearKeyLicenseUrl(element) {\n const dashIfLaurlNode = shaka.util.TXml.findChildNS(\n element.node, shaka.dash.ContentProtection.DashIfNamespaceUri_,\n 'Laurl',\n );\n if (dashIfLaurlNode) {\n const textContents = shaka.util.TXml.getTextContents(dashIfLaurlNode);\n if (textContents) {\n return textContents;\n }\n }\n const clearKeyLaurlNode = shaka.util.TXml.findChildNS(\n element.node, shaka.dash.ContentProtection.ClearKeyNamespaceUri_,\n 'Laurl',\n );\n if (clearKeyLaurlNode &&\n clearKeyLaurlNode.attributes['Lic_type'] === 'EME-1.0') {\n if (clearKeyLaurlNode) {\n const textContents = shaka.util.TXml.getTextContents(clearKeyLaurlNode);\n if (textContents) {\n return textContents;\n }\n }\n }\n return '';\n }\n\n /**\n * Parses an Array buffer starting at byteOffset for PlayReady Object Records.\n * Each PRO Record is preceded by its PlayReady Record type and length in\n * bytes.\n *\n * PlayReady Object Record format: https://goo.gl/FTcu46\n *\n * @param {!DataView} view\n * @param {number} byteOffset\n * @return {!Array.}\n * @private\n */\n static parseMsProRecords_(view, byteOffset) {\n const records = [];\n\n while (byteOffset < view.byteLength - 1) {\n const type = view.getUint16(byteOffset, true);\n byteOffset += 2;\n\n const byteLength = view.getUint16(byteOffset, true);\n byteOffset += 2;\n\n if ((byteLength & 1) != 0 || byteLength + byteOffset > view.byteLength) {\n shaka.log.warning('Malformed MS PRO object');\n return [];\n }\n\n const recordValue = shaka.util.BufferUtils.toUint8(\n view, byteOffset, byteLength);\n records.push({\n type: type,\n value: recordValue,\n });\n\n byteOffset += byteLength;\n }\n\n return records;\n }\n\n /**\n * Parses a buffer for PlayReady Objects. The data\n * should contain a 32-bit integer indicating the length of\n * the PRO in bytes. Following that, a 16-bit integer for\n * the number of PlayReady Object Records in the PRO. Lastly,\n * a byte array of the PRO Records themselves.\n *\n * PlayReady Object format: https://goo.gl/W8yAN4\n *\n * @param {BufferSource} data\n * @return {!Array.}\n * @private\n */\n static parseMsPro_(data) {\n let byteOffset = 0;\n const view = shaka.util.BufferUtils.toDataView(data);\n\n // First 4 bytes is the PRO length (DWORD)\n const byteLength = view.getUint32(byteOffset, /* littleEndian= */ true);\n byteOffset += 4;\n\n if (byteLength != data.byteLength) {\n // Malformed PRO\n shaka.log.warning('PlayReady Object with invalid length encountered.');\n return [];\n }\n\n // Skip PRO Record count (WORD)\n byteOffset += 2;\n\n // Rest of the data contains the PRO Records\n const ContentProtection = shaka.dash.ContentProtection;\n return ContentProtection.parseMsProRecords_(view, byteOffset);\n }\n\n /**\n * PlayReady Header format: https://goo.gl/dBzxNA\n *\n * @param {!shaka.extern.xml.Node} xml\n * @return {string}\n * @private\n */\n static getLaurl_(xml) {\n const TXml = shaka.util.TXml;\n // LA_URL element is optional and no more than one is\n // allowed inside the DATA element. Only absolute URLs are allowed.\n // If the LA_URL element exists, it must not be empty.\n for (const elem of TXml.getElementsByTagName(xml, 'DATA')) {\n if (elem.children) {\n for (const child of elem.children) {\n if (child.tagName == 'LA_URL') {\n return /** @type{string} */(shaka.util.TXml.getTextContents(child));\n }\n }\n }\n }\n\n // Not found\n return '';\n }\n\n /**\n * Gets a PlayReady license URL from a content protection element\n * containing a PlayReady Header Object\n *\n * @param {shaka.dash.ContentProtection.Element} element\n * @return {string}\n */\n static getPlayReadyLicenseUrl(element) {\n const dashIfLaurlNode = shaka.util.TXml.findChildNS(\n element.node, shaka.dash.ContentProtection.DashIfNamespaceUri_,\n 'Laurl',\n );\n if (dashIfLaurlNode) {\n const textContents = shaka.util.TXml.getTextContents(dashIfLaurlNode);\n if (textContents) {\n return textContents;\n }\n }\n\n const proNode = shaka.util.TXml.findChildNS(\n element.node, 'urn:microsoft:playready', 'pro');\n\n if (!proNode || !shaka.util.TXml.getTextContents(proNode)) {\n return '';\n }\n\n const ContentProtection = shaka.dash.ContentProtection;\n const PLAYREADY_RECORD_TYPES = ContentProtection.PLAYREADY_RECORD_TYPES;\n\n const textContent =\n /** @type {string} */ (shaka.util.TXml.getTextContents(proNode));\n const bytes = shaka.util.Uint8ArrayUtils.fromBase64(textContent);\n const records = ContentProtection.parseMsPro_(bytes);\n const record = records.filter((record) => {\n return record.type === PLAYREADY_RECORD_TYPES.RIGHTS_MANAGEMENT;\n })[0];\n\n if (!record) {\n return '';\n }\n\n const xml = shaka.util.StringUtils.fromUTF16(record.value, true);\n const rootElement = shaka.util.TXml.parseXmlString(xml, 'WRMHEADER');\n if (!rootElement) {\n return '';\n }\n\n return ContentProtection.getLaurl_(rootElement);\n }\n\n /**\n * Gets a PlayReady initData from a content protection element\n * containing a PlayReady Pro Object\n *\n * @param {shaka.dash.ContentProtection.Element} element\n * @return {?Array.}\n * @private\n */\n static getInitDataFromPro_(element) {\n const proNode = shaka.util.TXml.findChildNS(\n element.node, 'urn:microsoft:playready', 'pro');\n if (!proNode || !shaka.util.TXml.getTextContents(proNode)) {\n return null;\n }\n\n const Uint8ArrayUtils = shaka.util.Uint8ArrayUtils;\n const textContent =\n /** @type{string} */ (shaka.util.TXml.getTextContents(proNode));\n const data = Uint8ArrayUtils.fromBase64(textContent);\n const systemId = new Uint8Array([\n 0x9a, 0x04, 0xf0, 0x79, 0x98, 0x40, 0x42, 0x86,\n 0xab, 0x92, 0xe6, 0x5b, 0xe0, 0x88, 0x5f, 0x95,\n ]);\n const keyIds = new Set();\n const psshVersion = 0;\n const pssh =\n shaka.util.Pssh.createPssh(data, systemId, keyIds, psshVersion);\n return [\n {\n initData: pssh,\n initDataType: 'cenc',\n keyId: element.keyId,\n },\n ];\n }\n\n /**\n * Creates ClearKey initData from Default_KID value retrieved from previously\n * parsed ContentProtection tag.\n * @param {shaka.dash.ContentProtection.Element} element\n * @param {!Set.} keyIds\n * @return {?Array.}\n * @private\n */\n static getInitDataClearKey_(element, keyIds) {\n if (keyIds.size == 0) {\n return null;\n }\n\n const systemId = new Uint8Array([\n 0x10, 0x77, 0xef, 0xec, 0xc0, 0xb2, 0x4d, 0x02,\n 0xac, 0xe3, 0x3c, 0x1e, 0x52, 0xe2, 0xfb, 0x4b,\n ]);\n const data = new Uint8Array([]);\n const psshVersion = 1;\n const pssh =\n shaka.util.Pssh.createPssh(data, systemId, keyIds, psshVersion);\n\n return [\n {\n initData: pssh,\n initDataType: 'cenc',\n keyId: element.keyId,\n },\n ];\n }\n\n /**\n * Creates DrmInfo objects from the given element.\n *\n * @param {Array.} defaultInit\n * @param {string} encryptionScheme\n * @param {!Array.} elements\n * @param {!Object.} keySystemsByURI\n * @param {!Set.} keyIds\n * @return {!Array.}\n * @private\n */\n static convertElements_(defaultInit, encryptionScheme, elements,\n keySystemsByURI, keyIds) {\n const ContentProtection = shaka.dash.ContentProtection;\n const ManifestParserUtils = shaka.util.ManifestParserUtils;\n const licenseUrlParsers = ContentProtection.licenseUrlParsers_;\n\n /** @type {!Array.} */\n const out = [];\n\n for (const element of elements) {\n const keySystem = keySystemsByURI[element.schemeUri];\n if (keySystem) {\n goog.asserts.assert(\n !element.init || element.init.length,\n 'Init data must be null or non-empty.');\n\n const proInitData = ContentProtection.getInitDataFromPro_(element);\n let clearKeyInitData = null;\n if (element.schemeUri ===\n shaka.dash.ContentProtection.ClearKeySchemeUri_) {\n clearKeyInitData =\n ContentProtection.getInitDataClearKey_(element, keyIds);\n }\n const initData = element.init || defaultInit || proInitData ||\n clearKeyInitData;\n const info = ManifestParserUtils.createDrmInfo(\n keySystem, encryptionScheme, initData);\n const licenseParser = licenseUrlParsers.get(keySystem);\n if (licenseParser) {\n info.licenseServerUri = licenseParser(element);\n }\n\n out.push(info);\n }\n }\n\n return out;\n }\n\n /**\n * Parses the given ContentProtection elements. If there is an error, it\n * removes those elements.\n *\n * @param {!Array.} elems\n * @return {!Array.}\n * @private\n */\n static parseElements_(elems) {\n /** @type {!Array.} */\n const out = [];\n\n for (const elem of elems) {\n const parsed = shaka.dash.ContentProtection.parseElement_(elem);\n if (parsed) {\n out.push(parsed);\n }\n }\n\n return out;\n }\n\n /**\n * Parses the given ContentProtection element.\n *\n * @param {!shaka.extern.xml.Node} elem\n * @return {?shaka.dash.ContentProtection.Element}\n * @private\n */\n static parseElement_(elem) {\n const NS = shaka.dash.ContentProtection.CencNamespaceUri_;\n const TXml = shaka.util.TXml;\n\n /** @type {?string} */\n let schemeUri = elem.attributes['schemeIdUri'];\n /** @type {?string} */\n let keyId = TXml.getAttributeNS(elem, NS, 'default_KID');\n /** @type {!Array.} */\n const psshs = TXml.findChildrenNS(elem, NS, 'pssh')\n .map(TXml.getContents);\n\n const encryptionScheme = elem.attributes['value'];\n\n if (!schemeUri) {\n shaka.log.error('Missing required schemeIdUri attribute on',\n 'ContentProtection element', elem);\n return null;\n }\n\n schemeUri = schemeUri.toLowerCase();\n if (keyId) {\n keyId = keyId.replace(/-/g, '').toLowerCase();\n if (keyId.includes(' ')) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_MULTIPLE_KEY_IDS_NOT_SUPPORTED);\n }\n }\n\n /** @type {!Array.} */\n let init = [];\n try {\n // Try parsing PSSH data.\n init = psshs.map((pssh) => {\n return {\n initDataType: 'cenc',\n initData: shaka.util.Uint8ArrayUtils.fromBase64(pssh),\n keyId: null,\n };\n });\n } catch (e) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_PSSH_BAD_ENCODING);\n }\n\n return {\n node: elem,\n schemeUri,\n keyId,\n init: (init.length > 0 ? init : null),\n encryptionScheme,\n };\n }\n\n /**\n * Parses the given AES-128 ContentProtection element.\n *\n * @param {shaka.dash.ContentProtection.Element} element\n * @return {?shaka.dash.ContentProtection.Aes128Info}\n * @private\n */\n static parseAes128_(element) {\n // Check if the Web Crypto API is available.\n if (!window.crypto || !window.crypto.subtle) {\n shaka.log.alwaysWarn('Web Crypto API is not available to decrypt ' +\n 'AES-128. (Web Crypto only exists in secure origins like https)');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.NO_WEB_CRYPTO_API);\n }\n\n const namespace = 'urn:mpeg:dash:schema:sea:2012';\n const segmentEncryption = shaka.util.TXml.findChildNS(\n element.node, namespace, 'SegmentEncryption');\n\n if (!segmentEncryption) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_UNSUPPORTED_AES_128);\n }\n\n const aesSchemeIdUri = 'urn:mpeg:dash:sea:aes128-cbc:2013';\n const segmentEncryptionSchemeIdUri =\n segmentEncryption.attributes['schemeIdUri'];\n if (segmentEncryptionSchemeIdUri != aesSchemeIdUri) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_UNSUPPORTED_AES_128);\n }\n\n const cryptoPeriod = shaka.util.TXml.findChildNS(\n element.node, namespace, 'CryptoPeriod');\n\n if (!cryptoPeriod) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_UNSUPPORTED_AES_128);\n }\n\n const ivHex = cryptoPeriod.attributes['IV'];\n const keyUri = shaka.util.StringUtils.htmlUnescape(\n cryptoPeriod.attributes['keyUriTemplate']);\n if (!ivHex || !keyUri) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_UNSUPPORTED_AES_128);\n }\n\n // Exclude 0x at the start of string.\n const iv = shaka.util.Uint8ArrayUtils.fromHex(ivHex.substr(2));\n if (iv.byteLength != 16) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.AES_128_INVALID_IV_LENGTH);\n }\n\n return {\n keyUri,\n iv,\n };\n }\n};\n\n/**\n * @typedef {{\n * type: number,\n * value: !Uint8Array\n * }}\n *\n * @description\n * The parsed result of a PlayReady object record.\n *\n * @property {number} type\n * Type of data stored in the record.\n * @property {!Uint8Array} value\n * Record content.\n */\nshaka.dash.ContentProtection.PlayReadyRecord;\n\n/**\n * Enum for PlayReady record types.\n * @enum {number}\n */\nshaka.dash.ContentProtection.PLAYREADY_RECORD_TYPES = {\n RIGHTS_MANAGEMENT: 0x001,\n RESERVED: 0x002,\n EMBEDDED_LICENSE: 0x003,\n};\n\n/**\n * @typedef {{\n * defaultKeyId: ?string,\n * defaultInit: Array.,\n * drmInfos: !Array.,\n * aes128Info: ?shaka.dash.ContentProtection.Aes128Info,\n * firstRepresentation: boolean\n * }}\n *\n * @description\n * Contains information about the ContentProtection elements found at the\n * AdaptationSet level.\n *\n * @property {?string} defaultKeyId\n * The default key ID to use. This is used by parseKeyIds as a default. This\n * can be null to indicate that there is no default.\n * @property {Array.} defaultInit\n * The default init data override. This can be null to indicate that there\n * is no default.\n * @property {!Array.} drmInfos\n * The DrmInfo objects.\n * @property {?shaka.dash.ContentProtection.Aes128Info} aes128Info\n * The AES-128 key info.\n * @property {boolean} firstRepresentation\n * True when first parsed; changed to false after the first call to\n * parseKeyIds. This is used to determine if a dummy key-system should be\n * overwritten; namely that the first representation can replace the dummy\n * from the AdaptationSet.\n */\nshaka.dash.ContentProtection.Context;\n\n/**\n * @typedef {{\n * keyUri: string,\n * iv: !Uint8Array\n * }}\n *\n * @description\n * Contains information about the AES-128 keyUri and IV found at the\n * AdaptationSet level.\n *\n * @property {string} method\n * The keyUri in the manifest.\n * @property {!Uint8Array} iv\n * The IV in the manifest.\n */\nshaka.dash.ContentProtection.Aes128Info;\n\n/**\n * @typedef {{\n * node: !shaka.extern.xml.Node,\n * schemeUri: string,\n * keyId: ?string,\n * init: Array.,\n * encryptionScheme: ?string\n * }}\n *\n * @description\n * The parsed result of a single ContentProtection element.\n *\n * @property {!shaka.extern.xml.Node} node\n * The ContentProtection XML element.\n * @property {string} schemeUri\n * The scheme URI.\n * @property {?string} keyId\n * The default key ID, if present.\n * @property {Array.} init\n * The init data, if present. If there is no init data, it will be null. If\n * this is non-null, there is at least one element.\n * @property {?string} encryptionScheme\n * The encryption scheme, if present.\n */\nshaka.dash.ContentProtection.Element;\n\n/**\n * A map of key system name to license server url parser.\n *\n * @const {!Map.}\n * @private\n */\nshaka.dash.ContentProtection.licenseUrlParsers_ = new Map()\n .set('com.apple.fps',\n shaka.dash.ContentProtection.getFairPlayLicenseUrl)\n .set('com.widevine.alpha',\n shaka.dash.ContentProtection.getWidevineLicenseUrl)\n .set('com.microsoft.playready',\n shaka.dash.ContentProtection.getPlayReadyLicenseUrl)\n .set('com.microsoft.playready.recommendation',\n shaka.dash.ContentProtection.getPlayReadyLicenseUrl)\n .set('com.microsoft.playready.software',\n shaka.dash.ContentProtection.getPlayReadyLicenseUrl)\n .set('com.microsoft.playready.hardware',\n shaka.dash.ContentProtection.getPlayReadyLicenseUrl)\n .set('org.w3.clearkey',\n shaka.dash.ContentProtection.getClearKeyLicenseUrl);\n\n/**\n * @const {string}\n * @private\n */\nshaka.dash.ContentProtection.MP4Protection_ =\n 'urn:mpeg:dash:mp4protection:2011';\n\n/**\n * @const {string}\n * @private\n */\nshaka.dash.ContentProtection.Aes128Protection_ =\n 'urn:mpeg:dash:sea:2012';\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.dash.ContentProtection.CencNamespaceUri_ = 'urn:mpeg:cenc:2013';\n\n/**\n * @const {string}\n * @private\n */\nshaka.dash.ContentProtection.ClearKeyNamespaceUri_ =\n 'http://dashif.org/guidelines/clearKey';\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.dash.ContentProtection.ClearKeySchemeUri_ =\n 'urn:uuid:e2719d58-a985-b3c9-781a-b030af78d30e';\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.dash.ContentProtection.DashIfNamespaceUri_ =\n 'https://dashif.org/CPS';\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.dash.MpdUtils');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.net.NetworkingEngine');\ngoog.require('shaka.util.AbortableOperation');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.Functional');\ngoog.require('shaka.util.ManifestParserUtils');\ngoog.require('shaka.util.TXml');\ngoog.requireType('shaka.dash.DashParser');\ngoog.requireType('shaka.media.PresentationTimeline');\n\n\n/**\n * @summary MPD processing utility functions.\n */\nshaka.dash.MpdUtils = class {\n /**\n * Fills a SegmentTemplate URI template. This function does not validate the\n * resulting URI.\n *\n * @param {string} uriTemplate\n * @param {?string} representationId\n * @param {?number} number\n * @param {?number} subNumber\n * @param {?number} bandwidth\n * @param {?(number|bigint)} time\n * @return {string} A URI string.\n * @see ISO/IEC 23009-1:2014 section 5.3.9.4.4\n */\n static fillUriTemplate(\n uriTemplate, representationId, number, subNumber, bandwidth, time) {\n /** @type {!Object.} */\n const valueTable = {\n 'RepresentationID': representationId,\n 'Number': number,\n 'SubNumber': subNumber,\n 'Bandwidth': bandwidth,\n 'Time': time,\n };\n\n const re = /\\$(RepresentationID|Number|SubNumber|Bandwidth|Time)?(?:%0([0-9]+)([diouxX]))?\\$/g; // eslint-disable-line max-len\n const uri = uriTemplate.replace(re, (match, name, widthStr, format) => {\n if (match == '$$') {\n return '$';\n }\n\n let value = valueTable[name];\n goog.asserts.assert(value !== undefined, 'Unrecognized identifier');\n\n // Note that |value| may be 0 or ''.\n if (value == null) {\n shaka.log.warning(\n 'URL template does not have an available substitution for ',\n 'identifier \"' + name + '\":',\n uriTemplate);\n return match;\n }\n\n if (name == 'RepresentationID' && widthStr) {\n shaka.log.warning(\n 'URL template should not contain a width specifier for identifier',\n '\"RepresentationID\":',\n uriTemplate);\n widthStr = undefined;\n }\n\n if (name == 'Time') {\n if (typeof value != 'bigint') {\n goog.asserts.assert(typeof value == 'number',\n 'Time value should be a number or bigint!');\n if (Math.abs(value - Math.round(value)) >= 0.2) {\n shaka.log.alwaysWarn(\n 'Calculated $Time$ values must be close to integers');\n }\n value = Math.round(value);\n }\n }\n\n /** @type {string} */\n let valueString;\n switch (format) {\n case undefined: // Happens if there is no format specifier.\n case 'd':\n case 'i':\n case 'u':\n valueString = value.toString();\n break;\n case 'o':\n valueString = value.toString(8);\n break;\n case 'x':\n valueString = value.toString(16);\n break;\n case 'X':\n valueString = value.toString(16).toUpperCase();\n break;\n default:\n goog.asserts.assert(false, 'Unhandled format specifier');\n valueString = value.toString();\n break;\n }\n\n // Create a padding string.\n const width = window.parseInt(widthStr, 10) || 1;\n const paddingSize = Math.max(0, width - valueString.length);\n const padding = (new Array(paddingSize + 1)).join('0');\n\n return padding + valueString;\n });\n\n return uri;\n }\n\n /**\n * Expands a SegmentTimeline into an array-based timeline. The results are in\n * seconds.\n *\n * @param {Array} timePoints\n * @param {number} timescale\n * @param {number} unscaledPresentationTimeOffset\n * @param {number} periodDuration The Period's duration in seconds.\n * Infinity indicates that the Period continues indefinitely.\n * @param {number} startNumber\n * @return {!Array.}\n */\n static createTimeline(\n timePoints, timescale, unscaledPresentationTimeOffset,\n periodDuration, startNumber) {\n goog.asserts.assert(\n timescale > 0 && timescale < Infinity,\n 'timescale must be a positive, finite integer');\n goog.asserts.assert(\n periodDuration > 0, 'period duration must be a positive integer');\n\n // Alias.\n const TXml = shaka.util.TXml;\n\n /** @type {!Array.} */\n const timeline = [];\n let lastEndTime = -unscaledPresentationTimeOffset;\n\n for (let i = 0; i < timePoints.length; ++i) {\n const timePoint = timePoints[i];\n const next = timePoints[i + 1];\n let t = TXml.parseAttr(timePoint, 't', TXml.parseNonNegativeInt);\n const d =\n TXml.parseAttr(timePoint, 'd', TXml.parseNonNegativeInt);\n const r = TXml.parseAttr(timePoint, 'r', TXml.parseInt);\n\n const k = TXml.parseAttr(timePoint, 'k', TXml.parseInt);\n\n const partialSegments = k || 0;\n\n // Adjust the start time to account for the presentation time offset.\n if (t != null) {\n t -= unscaledPresentationTimeOffset;\n }\n\n if (!d) {\n shaka.log.warning(\n '\"S\" element must have a duration: ignoring this element.',\n timePoint);\n continue;\n }\n\n let startTime = t != null ? t : lastEndTime;\n\n let repeat = r || 0;\n if (repeat < 0) {\n if (next) {\n const nextStartTime =\n TXml.parseAttr(next, 't', TXml.parseNonNegativeInt);\n if (nextStartTime == null) {\n shaka.log.warning(\n 'An \"S\" element cannot have a negative repeat',\n 'if the next \"S\" element does not have a valid start time:',\n 'ignoring the remaining \"S\" elements.', timePoint);\n return timeline;\n } else if (startTime >= nextStartTime) {\n shaka.log.warning(\n 'An \"S\" element cannot have a negative repeatif its start ',\n 'time exceeds the next \"S\" element\\'s start time:',\n 'ignoring the remaining \"S\" elements.', timePoint);\n return timeline;\n }\n repeat = Math.ceil((nextStartTime - startTime) / d) - 1;\n } else {\n if (periodDuration == Infinity) {\n // The DASH spec. actually allows the last \"S\" element to have a\n // negative repeat value even when the Period has an infinite\n // duration. No one uses this feature and no one ever should,\n // ever.\n shaka.log.warning(\n 'The last \"S\" element cannot have a negative repeat',\n 'if the Period has an infinite duration:',\n 'ignoring the last \"S\" element.', timePoint);\n return timeline;\n } else if (startTime / timescale >= periodDuration) {\n shaka.log.warning(\n 'The last \"S\" element cannot have a negative repeat',\n 'if its start time exceeds the Period\\'s duration:',\n 'igoring the last \"S\" element.', timePoint);\n return timeline;\n }\n repeat = Math.ceil((periodDuration * timescale - startTime) / d) - 1;\n }\n }\n\n // The end of the last segment may be before the start of the current\n // segment (a gap) or after the start of the current segment (an\n // overlap). If there is a gap/overlap then stretch/compress the end of\n // the last segment to the start of the current segment.\n //\n // Note: it is possible to move the start of the current segment to the\n // end of the last segment, but this would complicate the computation of\n // the $Time$ placeholder later on.\n if ((timeline.length > 0) && (startTime != lastEndTime)) {\n const delta = startTime - lastEndTime;\n\n if (Math.abs(delta / timescale) >=\n shaka.util.ManifestParserUtils.GAP_OVERLAP_TOLERANCE_SECONDS) {\n shaka.log.warning(\n 'SegmentTimeline contains a large gap/overlap:',\n 'the content may have errors in it.', timePoint);\n }\n\n timeline[timeline.length - 1].end = startTime / timescale;\n }\n\n for (let j = 0; j <= repeat; ++j) {\n const endTime = startTime + d;\n const item = {\n start: startTime / timescale,\n end: endTime / timescale,\n unscaledStart: startTime,\n partialSegments: partialSegments,\n segmentPosition: timeline.length + startNumber,\n };\n timeline.push(item);\n\n startTime = endTime;\n lastEndTime = endTime;\n }\n }\n\n return timeline;\n }\n\n /**\n * Parses common segment info for SegmentList and SegmentTemplate.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {function(?shaka.dash.DashParser.InheritanceFrame):\n * ?shaka.extern.xml.Node} callback\n * Gets the element that contains the segment info.\n * @return {shaka.dash.MpdUtils.SegmentInfo}\n */\n static parseSegmentInfo(context, callback) {\n goog.asserts.assert(\n callback(context.representation),\n 'There must be at least one element of the given type.');\n const MpdUtils = shaka.dash.MpdUtils;\n const TXml = shaka.util.TXml;\n\n const timescaleStr =\n MpdUtils.inheritAttribute(context, callback, 'timescale');\n let timescale = 1;\n if (timescaleStr) {\n timescale = TXml.parsePositiveInt(timescaleStr) || 1;\n }\n\n const durationStr =\n MpdUtils.inheritAttribute(context, callback, 'duration');\n let segmentDuration = TXml.parsePositiveInt(durationStr || '');\n if (segmentDuration) {\n segmentDuration /= timescale;\n }\n\n const startNumberStr =\n MpdUtils.inheritAttribute(context, callback, 'startNumber');\n const unscaledPresentationTimeOffset =\n Number(MpdUtils.inheritAttribute(context, callback,\n 'presentationTimeOffset')) || 0;\n let startNumber = TXml.parseNonNegativeInt(startNumberStr || '');\n if (startNumberStr == null || startNumber == null) {\n startNumber = 1;\n }\n\n /** @type {Array.} */\n let timeline = null;\n const timelineNode =\n MpdUtils.inheritChild(context, callback, 'SegmentTimeline');\n if (timelineNode) {\n const timePoints = TXml.findChildren(timelineNode, 'S');\n timeline = MpdUtils.createTimeline(\n timePoints, timescale, unscaledPresentationTimeOffset,\n context.periodInfo.duration || Infinity, startNumber);\n }\n\n const scaledPresentationTimeOffset =\n (unscaledPresentationTimeOffset / timescale) || 0;\n return {\n timescale: timescale,\n segmentDuration: segmentDuration,\n startNumber: startNumber,\n scaledPresentationTimeOffset: scaledPresentationTimeOffset,\n unscaledPresentationTimeOffset: unscaledPresentationTimeOffset,\n timeline: timeline,\n };\n }\n\n /**\n * Parses common attributes for Representation, AdaptationSet, and Period.\n * @param {shaka.dash.DashParser.Context} context\n * @param {function(?shaka.dash.DashParser.InheritanceFrame):\n * ?shaka.extern.xml.Node} callback\n * @return {!Array.}\n */\n static getNodes(context, callback) {\n const Functional = shaka.util.Functional;\n goog.asserts.assert(\n callback(context.representation),\n 'There must be at least one element of the given type.',\n );\n\n return [\n callback(context.representation),\n callback(context.adaptationSet),\n callback(context.period),\n ].filter(Functional.isNotNull);\n }\n\n /**\n * Searches the inheritance for a Segment* with the given attribute.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {function(?shaka.dash.DashParser.InheritanceFrame):\n * ?shaka.extern.xml.Node} callback\n * Gets the Element that contains the attribute to inherit.\n * @param {string} attribute\n * @return {?string}\n */\n static inheritAttribute(context, callback, attribute) {\n const MpdUtils = shaka.dash.MpdUtils;\n const nodes = MpdUtils.getNodes(context, callback);\n\n let result = null;\n for (const node of nodes) {\n result = node.attributes[attribute];\n if (result) {\n break;\n }\n }\n return result;\n }\n\n /**\n * Searches the inheritance for a Segment* with the given child.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {function(?shaka.dash.DashParser.InheritanceFrame):\n * ?shaka.extern.xml.Node} callback\n * Gets the Element that contains the child to inherit.\n * @param {string} child\n * @return {?shaka.extern.xml.Node}\n */\n static inheritChild(context, callback, child) {\n const MpdUtils = shaka.dash.MpdUtils;\n const nodes = MpdUtils.getNodes(context, callback);\n\n const TXml = shaka.util.TXml;\n let result = null;\n for (const node of nodes) {\n result = TXml.findChild(node, child);\n if (result) {\n break;\n }\n }\n return result;\n }\n\n /**\n * Follow the xlink link contained in the given element.\n * It also strips the xlink properties off of the element,\n * even if the process fails.\n *\n * @param {!shaka.extern.xml.Node} element\n * @param {!shaka.extern.RetryParameters} retryParameters\n * @param {boolean} failGracefully\n * @param {string} baseUri\n * @param {!shaka.net.NetworkingEngine} networkingEngine\n * @param {number} linkDepth\n * @return {!shaka.util.AbortableOperation.}\n * @private\n */\n static handleXlinkInElement_(\n element, retryParameters, failGracefully, baseUri, networkingEngine,\n linkDepth) {\n const MpdUtils = shaka.dash.MpdUtils;\n const TXml = shaka.util.TXml;\n const Error = shaka.util.Error;\n const ManifestParserUtils = shaka.util.ManifestParserUtils;\n const NS = MpdUtils.XlinkNamespaceUri_;\n\n const xlinkHref = TXml.getAttributeNS(element, NS, 'href');\n const xlinkActuate =\n TXml.getAttributeNS(element, NS, 'actuate') || 'onRequest';\n\n // Remove the xlink properties, so it won't download again\n // when re-processed.\n for (const key of Object.keys(element.attributes)) {\n const segs = key.split(':');\n const namespace = shaka.util.TXml.getKnownNameSpace(NS);\n if (segs[0] == namespace) {\n delete element.attributes[key];\n }\n }\n\n if (linkDepth >= 5) {\n return shaka.util.AbortableOperation.failed(new Error(\n Error.Severity.CRITICAL, Error.Category.MANIFEST,\n Error.Code.DASH_XLINK_DEPTH_LIMIT));\n }\n\n if (xlinkActuate != 'onLoad') {\n // Only xlink:actuate=\"onLoad\" is supported.\n // When no value is specified, the assumed value is \"onRequest\".\n return shaka.util.AbortableOperation.failed(new Error(\n Error.Severity.CRITICAL, Error.Category.MANIFEST,\n Error.Code.DASH_UNSUPPORTED_XLINK_ACTUATE));\n }\n\n // Resolve the xlink href, in case it's a relative URL.\n const uris = ManifestParserUtils.resolveUris([baseUri], [xlinkHref]);\n\n // Load in the linked elements.\n const requestType = shaka.net.NetworkingEngine.RequestType.MANIFEST;\n const request =\n shaka.net.NetworkingEngine.makeRequest(uris, retryParameters);\n\n const requestOperation = networkingEngine.request(requestType, request);\n // The interface is abstract, but we know it was implemented with the\n // more capable internal class.\n goog.asserts.assert(\n requestOperation instanceof shaka.util.AbortableOperation,\n 'Unexpected implementation of IAbortableOperation!');\n // Satisfy the compiler with a cast.\n const networkOperation =\n /** @type {!shaka.util.AbortableOperation.} */ (\n requestOperation);\n\n // Chain onto that operation.\n return networkOperation.chain(\n (response) => {\n // This only supports the case where the loaded xml has a single\n // top-level element. If there are multiple roots, it will be\n // rejected.\n const rootElem =\n TXml.parseXml(response.data, element.tagName);\n if (!rootElem) {\n // It was not valid XML.\n return shaka.util.AbortableOperation.failed(new Error(\n Error.Severity.CRITICAL, Error.Category.MANIFEST,\n Error.Code.DASH_INVALID_XML, xlinkHref));\n }\n\n // Now that there is no other possibility of the process erroring,\n // the element can be changed further.\n\n // Remove the current contents of the node.\n element.children = [];\n\n // Move the children of the loaded xml into the current element.\n while (rootElem.children.length) {\n const child = rootElem.children.shift();\n element.children.push(child);\n }\n\n // Move the attributes of the loaded xml into the current element.\n for (const key of Object.keys(rootElem.attributes)) {\n element.attributes[key] = rootElem.attributes[key];\n }\n\n return shaka.dash.MpdUtils.processXlinks(\n element, retryParameters, failGracefully, uris[0],\n networkingEngine, linkDepth + 1);\n });\n }\n\n /**\n * Filter the contents of a node recursively, replacing xlink links\n * with their associated online data.\n *\n * @param {!shaka.extern.xml.Node} element\n * @param {!shaka.extern.RetryParameters} retryParameters\n * @param {boolean} failGracefully\n * @param {string} baseUri\n * @param {!shaka.net.NetworkingEngine} networkingEngine\n * @param {number=} linkDepth, default set to 0\n * @return {!shaka.util.AbortableOperation.}\n */\n static processXlinks(\n element, retryParameters,\n failGracefully, baseUri, networkingEngine,\n linkDepth = 0) {\n const MpdUtils = shaka.dash.MpdUtils;\n const TXml = shaka.util.TXml;\n const NS = MpdUtils.XlinkNamespaceUri_;\n\n if (TXml.getAttributeNS(element, NS, 'href')) {\n let handled = MpdUtils.handleXlinkInElement_(\n element, retryParameters, failGracefully,\n baseUri, networkingEngine, linkDepth);\n if (failGracefully) {\n // Catch any error and go on.\n handled = handled.chain(undefined, (error) => {\n // handleXlinkInElement_ strips the xlink properties off of the\n // element even if it fails, so calling processXlinks again will\n // handle whatever contents the element natively has.\n return MpdUtils.processXlinks(\n element, retryParameters, failGracefully, baseUri,\n networkingEngine, linkDepth);\n });\n }\n return handled;\n }\n\n const childOperations = [];\n for (const child of shaka.util.TXml.getChildNodes(element)) {\n const resolveToZeroString = 'urn:mpeg:dash:resolve-to-zero:2013';\n if (TXml.getAttributeNS(child, NS, 'href') == resolveToZeroString) {\n // This is a 'resolve to zero' code; it means the element should\n // be removed, as specified by the mpeg-dash rules for xlink.\n element.children = element.children.filter(\n (elem) => elem !== child);\n } else if (child.tagName != 'SegmentTimeline') {\n // Don't recurse into a SegmentTimeline since xlink attributes\n // aren't valid in there and looking at each segment can take a long\n // time with larger manifests.\n\n // Replace the child with its processed form.\n childOperations.push(shaka.dash.MpdUtils.processXlinks(\n /** @type {!shaka.extern.xml.Node} */ (child),\n retryParameters, failGracefully,\n baseUri, networkingEngine, linkDepth));\n }\n }\n\n return shaka.util.AbortableOperation.all(childOperations).chain(() => {\n return element;\n });\n }\n};\n\n\n/**\n * @typedef {{\n * timescale: number,\n * segmentDuration: ?number,\n * startNumber: number,\n * scaledPresentationTimeOffset: number,\n * unscaledPresentationTimeOffset: number,\n * timeline: Array.\n * }}\n *\n * @description\n * Contains common information between SegmentList and SegmentTemplate items.\n *\n * @property {number} timescale\n * The time-scale of the representation.\n * @property {?number} segmentDuration\n * The duration of the segments in seconds, if given.\n * @property {number} startNumber\n * The start number of the segments; 1 or greater.\n * @property {number} scaledPresentationTimeOffset\n * The presentation time offset of the representation, in seconds.\n * @property {number} unscaledPresentationTimeOffset\n * The presentation time offset of the representation, in timescale units.\n * @property {Array.} timeline\n * The timeline of the representation, if given. Times in seconds.\n */\nshaka.dash.MpdUtils.SegmentInfo;\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.dash.MpdUtils.XlinkNamespaceUri_ = 'http://www.w3.org/1999/xlink';\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.Mp4SegmentIndexParser');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.media.InitSegmentReference');\ngoog.require('shaka.media.SegmentReference');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.Mp4Parser');\n\n\nshaka.media.Mp4SegmentIndexParser = class {\n /**\n * Parses SegmentReferences from an ISO BMFF SIDX structure.\n * @param {BufferSource} sidxData The MP4's container's SIDX.\n * @param {number} sidxOffset The SIDX's offset, in bytes, from the start of\n * the MP4 container.\n * @param {!Array.} uris The possible locations of the MP4 file that\n * contains the segments.\n * @param {shaka.media.InitSegmentReference} initSegmentReference\n * @param {number} timestampOffset\n * @param {number} appendWindowStart\n * @param {number} appendWindowEnd\n * @return {!Array.}\n */\n static parse(\n sidxData, sidxOffset, uris, initSegmentReference, timestampOffset,\n appendWindowStart, appendWindowEnd) {\n const Mp4SegmentIndexParser = shaka.media.Mp4SegmentIndexParser;\n\n let references;\n\n const parser = new shaka.util.Mp4Parser()\n .fullBox('sidx', (box) => {\n references = Mp4SegmentIndexParser.parseSIDX_(\n sidxOffset,\n initSegmentReference,\n timestampOffset,\n appendWindowStart,\n appendWindowEnd,\n uris,\n box);\n });\n\n if (sidxData) {\n parser.parse(sidxData);\n }\n\n if (references) {\n return references;\n } else {\n shaka.log.error('Invalid box type, expected \"sidx\".');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.MP4_SIDX_WRONG_BOX_TYPE);\n }\n }\n\n\n /**\n * Parse a SIDX box from the given reader.\n *\n * @param {number} sidxOffset\n * @param {shaka.media.InitSegmentReference} initSegmentReference\n * @param {number} timestampOffset\n * @param {number} appendWindowStart\n * @param {number} appendWindowEnd\n * @param {!Array.} uris The possible locations of the MP4 file that\n * contains the segments.\n * @param {!shaka.extern.ParsedBox} box\n * @return {!Array.}\n * @private\n */\n static parseSIDX_(\n sidxOffset, initSegmentReference, timestampOffset, appendWindowStart,\n appendWindowEnd, uris, box) {\n goog.asserts.assert(\n box.version != null,\n 'SIDX is a full box and should have a valid version.');\n\n const references = [];\n\n // Parse the SIDX structure.\n // Skip reference_ID (32 bits).\n box.reader.skip(4);\n\n const timescale = box.reader.readUint32();\n\n if (timescale == 0) {\n shaka.log.error('Invalid timescale.');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.MP4_SIDX_INVALID_TIMESCALE);\n }\n\n let earliestPresentationTime;\n let firstOffset;\n\n if (box.version == 0) {\n earliestPresentationTime = box.reader.readUint32();\n firstOffset = box.reader.readUint32();\n } else {\n earliestPresentationTime = box.reader.readUint64();\n firstOffset = box.reader.readUint64();\n }\n\n // Skip reserved (16 bits).\n box.reader.skip(2);\n\n // Add references.\n const referenceCount = box.reader.readUint16();\n\n // Subtract the presentation time offset\n let unscaledStartTime = earliestPresentationTime;\n let startByte = sidxOffset + box.size + firstOffset;\n\n for (let i = 0; i < referenceCount; i++) {\n // |chunk| is 1 bit for |referenceType|, and 31 bits for |referenceSize|.\n const chunk = box.reader.readUint32();\n const referenceType = (chunk & 0x80000000) >>> 31;\n const referenceSize = chunk & 0x7FFFFFFF;\n\n const subsegmentDuration = box.reader.readUint32();\n\n // Skipping 1 bit for |startsWithSap|, 3 bits for |sapType|, and 28 bits\n // for |sapDelta|.\n box.reader.skip(4);\n\n // If |referenceType| is 1 then the reference is to another SIDX.\n // We do not support this.\n if (referenceType == 1) {\n shaka.log.error('Heirarchical SIDXs are not supported.');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.MP4_SIDX_TYPE_NOT_SUPPORTED);\n }\n\n // The media timestamps inside the container.\n const nativeStartTime = unscaledStartTime / timescale;\n const nativeEndTime =\n (unscaledStartTime + subsegmentDuration) / timescale;\n\n references.push(\n new shaka.media.SegmentReference(\n nativeStartTime + timestampOffset,\n nativeEndTime + timestampOffset,\n (() => { return uris; }),\n startByte,\n startByte + referenceSize - 1,\n initSegmentReference,\n timestampOffset,\n appendWindowStart,\n appendWindowEnd));\n\n unscaledStartTime += subsegmentDuration;\n startByte += referenceSize;\n }\n\n box.parser.stop();\n return references;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.EbmlElement');\ngoog.provide('shaka.util.EbmlParser');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.DataViewReader');\ngoog.require('shaka.util.Error');\n\n\n/**\n * @summary\n * Extensible Binary Markup Language (EBML) parser.\n */\nshaka.util.EbmlParser = class {\n /**\n * @param {BufferSource} data\n */\n constructor(data) {\n /** @private {!DataView} */\n this.dataView_ = shaka.util.BufferUtils.toDataView(data);\n\n /** @private {!shaka.util.DataViewReader} */\n this.reader_ = new shaka.util.DataViewReader(\n this.dataView_, shaka.util.DataViewReader.Endianness.BIG_ENDIAN);\n }\n\n\n /**\n * @return {boolean} True if the parser has more data, false otherwise.\n */\n hasMoreData() {\n return this.reader_.hasMoreData();\n }\n\n\n /**\n * Parses an EBML element from the parser's current position, and advances\n * the parser.\n * @return {!shaka.util.EbmlElement} The EBML element.\n * @see http://matroska.org/technical/specs/rfc/index.html\n */\n parseElement() {\n const id = this.parseId_();\n\n // Parse the element's size.\n const vint = this.parseVint_();\n let size;\n if (shaka.util.EbmlParser.isDynamicSizeValue_(vint)) {\n // If this has an unknown size, assume that it takes up the rest of the\n // data.\n size = this.dataView_.byteLength - this.reader_.getPosition();\n } else {\n size = shaka.util.EbmlParser.getVintValue_(vint);\n }\n\n // Note that if the element's size is larger than the buffer then we are\n // parsing a \"partial element\". This may occur if for example we are\n // parsing the beginning of some WebM container data, but our buffer does\n // not contain the entire WebM container data.\n const elementSize =\n this.reader_.getPosition() + size <= this.dataView_.byteLength ?\n size :\n this.dataView_.byteLength - this.reader_.getPosition();\n\n const dataView = shaka.util.BufferUtils.toDataView(\n this.dataView_, this.reader_.getPosition(), elementSize);\n\n this.reader_.skip(elementSize);\n\n return new shaka.util.EbmlElement(id, dataView);\n }\n\n\n /**\n * Parses an EBML ID from the parser's current position, and advances the\n * parser.\n * @return {number} The EBML ID.\n * @private\n */\n parseId_() {\n const vint = this.parseVint_();\n\n if (vint.length > 7) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.EBML_OVERFLOW);\n }\n\n let id = 0;\n for (const /* byte */ b of vint) {\n // Note that we cannot use << since |value| may exceed 32 bits.\n id = (256 * id) + b;\n }\n\n return id;\n }\n\n\n /**\n * Parses a variable sized integer from the parser's current position, and\n * advances the parser.\n * For example:\n * 1 byte wide: 1xxx xxxx\n * 2 bytes wide: 01xx xxxx xxxx xxxx\n * 3 bytes wide: 001x xxxx xxxx xxxx xxxx xxxx\n * @return {!Uint8Array} The variable sized integer.\n * @private\n */\n parseVint_() {\n const position = this.reader_.getPosition();\n const firstByte = this.reader_.readUint8();\n if (firstByte == 0) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.EBML_OVERFLOW);\n }\n\n // Determine the index of the highest bit set.\n const index = Math.floor(Math.log2(firstByte));\n const numBytes = 8 - index;\n goog.asserts.assert(numBytes <= 8 && numBytes >= 1, 'Incorrect log2 value');\n this.reader_.skip(numBytes - 1);\n return shaka.util.BufferUtils.toUint8(this.dataView_, position, numBytes);\n }\n\n\n /**\n * Gets the value of a variable sized integer.\n * For example, the x's below are part of the vint's value.\n * 7-bit value: 1xxx xxxx\n * 14-bit value: 01xx xxxx xxxx xxxx\n * 21-bit value: 001x xxxx xxxx xxxx xxxx xxxx\n * @param {!Uint8Array} vint The variable sized integer.\n * @return {number} The value of the variable sized integer.\n * @private\n */\n static getVintValue_(vint) {\n // If |vint| is 8 bytes wide then we must ensure that it does not have more\n // than 53 meaningful bits. For example, assume |vint| is 8 bytes wide,\n // so it has the following structure,\n // 0000 0001 | xxxx xxxx ...\n // Thus, the first 3 bits following the first byte of |vint| must be 0.\n if ((vint.length == 8) && (vint[1] & 0xe0)) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.JS_INTEGER_OVERFLOW);\n }\n\n let value = 0;\n for (let i = 0; i < vint.length; i++) {\n const item = vint[i];\n if (i == 0) {\n // Mask out the first few bits of |vint|'s first byte to get the most\n // significant bits of |vint|'s value. If |vint| is 8 bytes wide then\n // |value| will be set to 0.\n const mask = 0x1 << (8 - vint.length);\n value = item & (mask - 1);\n } else {\n // Note that we cannot use << since |value| may exceed 32 bits.\n value = (256 * value) + item;\n }\n }\n\n return value;\n }\n\n\n /**\n * Checks if the given variable sized integer represents a dynamic size value.\n * @param {!Uint8Array} vint The variable sized integer.\n * @return {boolean} true if |vint| represents a dynamic size value,\n * false otherwise.\n * @private\n */\n static isDynamicSizeValue_(vint) {\n const EbmlParser = shaka.util.EbmlParser;\n const BufferUtils = shaka.util.BufferUtils;\n\n for (const dynamicSizeConst of EbmlParser.DYNAMIC_SIZES) {\n if (BufferUtils.equal(vint, new Uint8Array(dynamicSizeConst))) {\n return true;\n }\n }\n\n return false;\n }\n};\n\n\n/**\n * A list of EBML dynamic size constants.\n * @const {!Array.>}\n */\nshaka.util.EbmlParser.DYNAMIC_SIZES = [\n [0xff],\n [0x7f, 0xff],\n [0x3f, 0xff, 0xff],\n [0x1f, 0xff, 0xff, 0xff],\n [0x0f, 0xff, 0xff, 0xff, 0xff],\n [0x07, 0xff, 0xff, 0xff, 0xff, 0xff],\n [0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff],\n [0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff],\n];\n\n\nshaka.util.EbmlElement = class {\n /**\n * @param {number} id The ID.\n * @param {!DataView} dataView The DataView.\n */\n constructor(id, dataView) {\n /** @type {number} */\n this.id = id;\n\n /** @private {!DataView} */\n this.dataView_ = dataView;\n }\n\n\n /**\n * Gets the element's offset from the beginning of the buffer.\n * @return {number}\n */\n getOffset() {\n return this.dataView_.byteOffset;\n }\n\n\n /**\n * Interpret the element's data as a list of sub-elements.\n * @return {!shaka.util.EbmlParser} A parser over the sub-elements.\n */\n createParser() {\n return new shaka.util.EbmlParser(this.dataView_);\n }\n\n\n /**\n * Interpret the element's data as an unsigned integer.\n * @return {number}\n */\n getUint() {\n if (this.dataView_.byteLength > 8) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.EBML_OVERFLOW);\n }\n\n // Ensure we have at most 53 meaningful bits.\n if ((this.dataView_.byteLength == 8) &&\n (this.dataView_.getUint8(0) & 0xe0)) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.JS_INTEGER_OVERFLOW);\n }\n\n let value = 0;\n\n for (let i = 0; i < this.dataView_.byteLength; i++) {\n const chunk = this.dataView_.getUint8(i);\n value = (256 * value) + chunk;\n }\n\n return value;\n }\n\n\n /**\n * Interpret the element's data as a floating point number\n * (32 bits or 64 bits). 80-bit floating point numbers are not supported.\n * @return {number}\n */\n getFloat() {\n if (this.dataView_.byteLength == 4) {\n return this.dataView_.getFloat32(0);\n } else if (this.dataView_.byteLength == 8) {\n return this.dataView_.getFloat64(0);\n } else {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.EBML_BAD_FLOATING_POINT_SIZE);\n }\n }\n};\n\n\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.media.WebmSegmentIndexParser');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.media.InitSegmentReference');\ngoog.require('shaka.media.SegmentReference');\ngoog.require('shaka.util.EbmlElement');\ngoog.require('shaka.util.EbmlParser');\ngoog.require('shaka.util.Error');\n\n\nshaka.media.WebmSegmentIndexParser = class {\n /**\n * Parses SegmentReferences from a WebM container.\n * @param {BufferSource} cuesData The WebM container's \"Cueing Data\" section.\n * @param {BufferSource} initData The WebM container's headers.\n * @param {!Array.} uris The possible locations of the WebM file that\n * contains the segments.\n * @param {shaka.media.InitSegmentReference} initSegmentReference\n * @param {number} timestampOffset\n * @param {number} appendWindowStart\n * @param {number} appendWindowEnd\n * @return {!Array.}\n * @see http://www.matroska.org/technical/specs/index.html\n * @see http://www.webmproject.org/docs/container/\n */\n static parse(\n cuesData, initData, uris, initSegmentReference, timestampOffset,\n appendWindowStart, appendWindowEnd) {\n const tuple =\n shaka.media.WebmSegmentIndexParser.parseWebmContainer_(initData);\n const parser = new shaka.util.EbmlParser(cuesData);\n const cuesElement = parser.parseElement();\n if (cuesElement.id != shaka.media.WebmSegmentIndexParser.CUES_ID) {\n shaka.log.error('Not a Cues element.');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.WEBM_CUES_ELEMENT_MISSING);\n }\n\n return shaka.media.WebmSegmentIndexParser.parseCues_(\n cuesElement, tuple.segmentOffset, tuple.timecodeScale, tuple.duration,\n uris, initSegmentReference, timestampOffset, appendWindowStart,\n appendWindowEnd);\n }\n\n\n /**\n * Parses a WebM container to get the segment's offset, timecode scale, and\n * duration.\n *\n * @param {BufferSource} initData\n * @return {{segmentOffset: number, timecodeScale: number, duration: number}}\n * The segment's offset in bytes, the segment's timecode scale in seconds,\n * and the duration in seconds.\n * @private\n */\n static parseWebmContainer_(initData) {\n const parser = new shaka.util.EbmlParser(initData);\n\n // Check that the WebM container data starts with the EBML header, but\n // skip its contents.\n const ebmlElement = parser.parseElement();\n if (ebmlElement.id != shaka.media.WebmSegmentIndexParser.EBML_ID) {\n shaka.log.error('Not an EBML element.');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.WEBM_EBML_HEADER_ELEMENT_MISSING);\n }\n\n const segmentElement = parser.parseElement();\n if (segmentElement.id != shaka.media.WebmSegmentIndexParser.SEGMENT_ID) {\n shaka.log.error('Not a Segment element.');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.WEBM_SEGMENT_ELEMENT_MISSING);\n }\n\n // This value is used as the initial offset to the first referenced segment.\n const segmentOffset = segmentElement.getOffset();\n\n // Parse the Segment element to get the segment info.\n const segmentInfo = shaka.media.WebmSegmentIndexParser.parseSegment_(\n segmentElement);\n return {\n segmentOffset: segmentOffset,\n timecodeScale: segmentInfo.timecodeScale,\n duration: segmentInfo.duration,\n };\n }\n\n\n /**\n * Parses a WebM Info element to get the segment's timecode scale and\n * duration.\n * @param {!shaka.util.EbmlElement} segmentElement\n * @return {{timecodeScale: number, duration: number}} The segment's timecode\n * scale in seconds and duration in seconds.\n * @private\n */\n static parseSegment_(segmentElement) {\n const parser = segmentElement.createParser();\n\n // Find the Info element.\n let infoElement = null;\n while (parser.hasMoreData()) {\n const elem = parser.parseElement();\n if (elem.id != shaka.media.WebmSegmentIndexParser.INFO_ID) {\n continue;\n }\n\n infoElement = elem;\n\n break;\n }\n\n if (!infoElement) {\n shaka.log.error('Not an Info element.');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.WEBM_INFO_ELEMENT_MISSING);\n }\n\n return shaka.media.WebmSegmentIndexParser.parseInfo_(infoElement);\n }\n\n\n /**\n * Parses a WebM Info element to get the segment's timecode scale and\n * duration.\n * @param {!shaka.util.EbmlElement} infoElement\n * @return {{timecodeScale: number, duration: number}} The segment's timecode\n * scale in seconds and duration in seconds.\n * @private\n */\n static parseInfo_(infoElement) {\n const parser = infoElement.createParser();\n\n // The timecode scale factor in units of [nanoseconds / T], where [T] are\n // the units used to express all other time values in the WebM container.\n // By default it's assumed that [T] == [milliseconds].\n let timecodeScaleNanoseconds = 1000000;\n /** @type {?number} */\n let durationScale = null;\n\n while (parser.hasMoreData()) {\n const elem = parser.parseElement();\n if (elem.id == shaka.media.WebmSegmentIndexParser.TIMECODE_SCALE_ID) {\n timecodeScaleNanoseconds = elem.getUint();\n } else if (elem.id == shaka.media.WebmSegmentIndexParser.DURATION_ID) {\n durationScale = elem.getFloat();\n }\n }\n if (durationScale == null) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.WEBM_DURATION_ELEMENT_MISSING);\n }\n\n // The timecode scale factor in units of [seconds / T].\n const timecodeScale = timecodeScaleNanoseconds / 1000000000;\n // The duration is stored in units of [T]\n const durationSeconds = durationScale * timecodeScale;\n\n return {timecodeScale: timecodeScale, duration: durationSeconds};\n }\n\n\n /**\n * Parses a WebM CuesElement.\n * @param {!shaka.util.EbmlElement} cuesElement\n * @param {number} segmentOffset\n * @param {number} timecodeScale\n * @param {number} duration\n * @param {!Array.} uris\n * @param {shaka.media.InitSegmentReference} initSegmentReference\n * @param {number} timestampOffset\n * @param {number} appendWindowStart\n * @param {number} appendWindowEnd\n * @return {!Array.}\n * @private\n */\n static parseCues_(cuesElement, segmentOffset, timecodeScale, duration,\n uris, initSegmentReference, timestampOffset, appendWindowStart,\n appendWindowEnd) {\n const references = [];\n const getUris = () => uris;\n\n const parser = cuesElement.createParser();\n\n let lastTime = null;\n let lastOffset = null;\n\n while (parser.hasMoreData()) {\n const elem = parser.parseElement();\n if (elem.id != shaka.media.WebmSegmentIndexParser.CUE_POINT_ID) {\n continue;\n }\n\n const tuple = shaka.media.WebmSegmentIndexParser.parseCuePoint_(elem);\n if (!tuple) {\n continue;\n }\n\n // Subtract the presentation time offset from the unscaled time\n const currentTime = timecodeScale * tuple.unscaledTime;\n const currentOffset = segmentOffset + tuple.relativeOffset;\n\n if (lastTime != null) {\n goog.asserts.assert(lastOffset != null, 'last offset cannot be null');\n\n references.push(\n new shaka.media.SegmentReference(\n lastTime + timestampOffset,\n currentTime + timestampOffset,\n getUris,\n /* startByte= */ lastOffset, /* endByte= */ currentOffset - 1,\n initSegmentReference,\n timestampOffset,\n appendWindowStart,\n appendWindowEnd));\n }\n\n lastTime = currentTime;\n lastOffset = currentOffset;\n }\n\n if (lastTime != null) {\n goog.asserts.assert(lastOffset != null, 'last offset cannot be null');\n\n references.push(\n new shaka.media.SegmentReference(\n lastTime + timestampOffset,\n duration + timestampOffset,\n getUris,\n /* startByte= */ lastOffset, /* endByte= */ null,\n initSegmentReference,\n timestampOffset,\n appendWindowStart,\n appendWindowEnd));\n }\n\n return references;\n }\n\n\n /**\n * Parses a WebM CuePointElement to get an \"unadjusted\" segment reference.\n * @param {shaka.util.EbmlElement} cuePointElement\n * @return {{unscaledTime: number, relativeOffset: number}} The referenced\n * segment's start time in units of [T] (see parseInfo_()), and the\n * referenced segment's offset in bytes, relative to a WebM Segment\n * element.\n * @private\n */\n static parseCuePoint_(cuePointElement) {\n const parser = cuePointElement.createParser();\n\n // Parse CueTime element.\n const cueTimeElement = parser.parseElement();\n if (cueTimeElement.id != shaka.media.WebmSegmentIndexParser.CUE_TIME_ID) {\n shaka.log.warning('Not a CueTime element.');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.WEBM_CUE_TIME_ELEMENT_MISSING);\n }\n const unscaledTime = cueTimeElement.getUint();\n\n // Parse CueTrackPositions element.\n const cueTrackPositionsElement = parser.parseElement();\n if (cueTrackPositionsElement.id !=\n shaka.media.WebmSegmentIndexParser.CUE_TRACK_POSITIONS_ID) {\n shaka.log.warning('Not a CueTrackPositions element.');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MEDIA,\n shaka.util.Error.Code.WEBM_CUE_TRACK_POSITIONS_ELEMENT_MISSING);\n }\n\n const cueTrackParser = cueTrackPositionsElement.createParser();\n let relativeOffset = 0;\n\n while (cueTrackParser.hasMoreData()) {\n const elem = cueTrackParser.parseElement();\n if (elem.id != shaka.media.WebmSegmentIndexParser.CUE_CLUSTER_POSITION) {\n continue;\n }\n\n relativeOffset = elem.getUint();\n break;\n }\n\n return {unscaledTime: unscaledTime, relativeOffset: relativeOffset};\n }\n};\n\n\n/** @const {number} */\nshaka.media.WebmSegmentIndexParser.EBML_ID = 0x1a45dfa3;\n\n\n/** @const {number} */\nshaka.media.WebmSegmentIndexParser.SEGMENT_ID = 0x18538067;\n\n\n/** @const {number} */\nshaka.media.WebmSegmentIndexParser.INFO_ID = 0x1549a966;\n\n\n/** @const {number} */\nshaka.media.WebmSegmentIndexParser.TIMECODE_SCALE_ID = 0x2ad7b1;\n\n\n/** @const {number} */\nshaka.media.WebmSegmentIndexParser.DURATION_ID = 0x4489;\n\n\n/** @const {number} */\nshaka.media.WebmSegmentIndexParser.CUES_ID = 0x1c53bb6b;\n\n\n/** @const {number} */\nshaka.media.WebmSegmentIndexParser.CUE_POINT_ID = 0xbb;\n\n\n/** @const {number} */\nshaka.media.WebmSegmentIndexParser.CUE_TIME_ID = 0xb3;\n\n\n/** @const {number} */\nshaka.media.WebmSegmentIndexParser.CUE_TRACK_POSITIONS_ID = 0xb7;\n\n\n/** @const {number} */\nshaka.media.WebmSegmentIndexParser.CUE_CLUSTER_POSITION = 0xf1;\n\n\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.dash.SegmentBase');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.dash.MpdUtils');\ngoog.require('shaka.log');\ngoog.require('shaka.media.InitSegmentReference');\ngoog.require('shaka.media.Mp4SegmentIndexParser');\ngoog.require('shaka.media.SegmentIndex');\ngoog.require('shaka.media.WebmSegmentIndexParser');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.ManifestParserUtils');\ngoog.require('shaka.util.ObjectUtils');\ngoog.require('shaka.util.StringUtils');\ngoog.require('shaka.util.TXml');\ngoog.requireType('shaka.dash.DashParser');\ngoog.requireType('shaka.media.PresentationTimeline');\ngoog.requireType('shaka.media.SegmentReference');\n\n\n/**\n * @summary A set of functions for parsing SegmentBase elements.\n */\nshaka.dash.SegmentBase = class {\n /**\n * Creates an init segment reference from a Context object.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {function(?shaka.dash.DashParser.InheritanceFrame):\n * ?shaka.extern.xml.Node} callback\n * @param {shaka.extern.aesKey|undefined} aesKey\n * @return {shaka.media.InitSegmentReference}\n */\n static createInitSegment(context, callback, aesKey) {\n const MpdUtils = shaka.dash.MpdUtils;\n const TXml = shaka.util.TXml;\n const ManifestParserUtils = shaka.util.ManifestParserUtils;\n const StringUtils = shaka.util.StringUtils;\n\n const initialization =\n MpdUtils.inheritChild(context, callback, 'Initialization');\n if (!initialization) {\n return null;\n }\n\n let resolvedUris = context.representation.getBaseUris();\n const uri = initialization.attributes['sourceURL'];\n if (uri) {\n resolvedUris = ManifestParserUtils.resolveUris(resolvedUris, [\n StringUtils.htmlUnescape(uri),\n ], context.urlParams());\n }\n\n let startByte = 0;\n let endByte = null;\n const range = TXml.parseAttr(initialization, 'range', TXml.parseRange);\n if (range) {\n startByte = range.start;\n endByte = range.end;\n }\n\n const getUris = () => resolvedUris;\n const qualityInfo = shaka.dash.SegmentBase.createQualityInfo(context);\n const ref = new shaka.media.InitSegmentReference(\n getUris,\n startByte,\n endByte,\n qualityInfo,\n /* timescale= */ null,\n /* segmentData= */ null,\n aesKey);\n ref.codecs = context.representation.codecs;\n ref.mimeType = context.representation.mimeType;\n return ref;\n }\n\n /**\n * Creates a new StreamInfo object.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {shaka.dash.DashParser.RequestSegmentCallback} requestSegment\n * @param {shaka.extern.aesKey|undefined} aesKey\n * @return {shaka.dash.DashParser.StreamInfo}\n */\n static createStreamInfo(context, requestSegment, aesKey) {\n goog.asserts.assert(context.representation.segmentBase,\n 'Should only be called with SegmentBase');\n // Since SegmentBase does not need updates, simply treat any call as\n // the initial parse.\n const MpdUtils = shaka.dash.MpdUtils;\n const SegmentBase = shaka.dash.SegmentBase;\n const TXml = shaka.util.TXml;\n\n const unscaledPresentationTimeOffset = Number(MpdUtils.inheritAttribute(\n context, SegmentBase.fromInheritance_, 'presentationTimeOffset')) || 0;\n\n const timescaleStr = MpdUtils.inheritAttribute(\n context, SegmentBase.fromInheritance_, 'timescale');\n let timescale = 1;\n if (timescaleStr) {\n timescale = TXml.parsePositiveInt(timescaleStr) || 1;\n }\n\n const scaledPresentationTimeOffset =\n (unscaledPresentationTimeOffset / timescale) || 0;\n\n const initSegmentReference = SegmentBase.createInitSegment(\n context, SegmentBase.fromInheritance_, aesKey);\n\n // Throws an immediate error if the format is unsupported.\n SegmentBase.checkSegmentIndexRangeSupport_(context, initSegmentReference);\n\n // Direct fields of context will be reassigned by the parser before\n // generateSegmentIndex is called. So we must make a shallow copy first,\n // and use that in the generateSegmentIndex callbacks.\n const shallowCopyOfContext =\n shaka.util.ObjectUtils.shallowCloneObject(context);\n\n return {\n generateSegmentIndex: () => {\n return SegmentBase.generateSegmentIndex_(\n shallowCopyOfContext, requestSegment, initSegmentReference,\n scaledPresentationTimeOffset);\n },\n };\n }\n\n /**\n * Creates a SegmentIndex for the given URIs and context.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {shaka.dash.DashParser.RequestSegmentCallback} requestSegment\n * @param {shaka.media.InitSegmentReference} initSegmentReference\n * @param {!Array.} uris\n * @param {number} startByte\n * @param {?number} endByte\n * @param {number} scaledPresentationTimeOffset\n * @return {!Promise.}\n */\n static async generateSegmentIndexFromUris(\n context, requestSegment, initSegmentReference, uris, startByte,\n endByte, scaledPresentationTimeOffset) {\n // Unpack context right away, before we start an async process.\n // This immunizes us against changes to the context object later.\n /** @type {shaka.media.PresentationTimeline} */\n const presentationTimeline = context.presentationTimeline;\n const fitLast = !context.dynamic || !context.periodInfo.isLastPeriod;\n const periodStart = context.periodInfo.start;\n const periodDuration = context.periodInfo.duration;\n const containerType = context.representation.mimeType.split('/')[1];\n\n // Create a local variable to bind to so we can set to null to help the GC.\n let localRequest = requestSegment;\n let segmentIndex = null;\n\n const responses = [\n localRequest(uris, startByte, endByte, /* isInit= */ false),\n containerType == 'webm' ?\n localRequest(\n initSegmentReference.getUris(),\n initSegmentReference.startByte,\n initSegmentReference.endByte,\n /* isInit= */ true) :\n null,\n ];\n\n localRequest = null;\n const results = await Promise.all(responses);\n const indexData = results[0];\n const initData = results[1] || null;\n /** @type {Array.} */\n let references = null;\n\n const timestampOffset = periodStart - scaledPresentationTimeOffset;\n const appendWindowStart = periodStart;\n const appendWindowEnd = periodDuration ?\n periodStart + periodDuration : Infinity;\n\n if (containerType == 'mp4') {\n references = shaka.media.Mp4SegmentIndexParser.parse(\n indexData, startByte, uris, initSegmentReference, timestampOffset,\n appendWindowStart, appendWindowEnd);\n } else {\n goog.asserts.assert(initData, 'WebM requires init data');\n references = shaka.media.WebmSegmentIndexParser.parse(\n indexData, initData, uris, initSegmentReference, timestampOffset,\n appendWindowStart, appendWindowEnd);\n }\n for (const ref of references) {\n ref.codecs = context.representation.codecs;\n ref.mimeType = context.representation.mimeType;\n ref.bandwidth = context.bandwidth;\n }\n\n presentationTimeline.notifySegments(references);\n\n // Since containers are never updated, we don't need to store the\n // segmentIndex in the map.\n goog.asserts.assert(!segmentIndex,\n 'Should not call generateSegmentIndex twice');\n\n segmentIndex = new shaka.media.SegmentIndex(references);\n if (fitLast) {\n segmentIndex.fit(appendWindowStart, appendWindowEnd, /* isNew= */ true);\n }\n return segmentIndex;\n }\n\n /**\n * @param {?shaka.dash.DashParser.InheritanceFrame} frame\n * @return {?shaka.extern.xml.Node}\n * @private\n */\n static fromInheritance_(frame) {\n return frame.segmentBase;\n }\n\n /**\n * Compute the byte range of the segment index from the container.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @return {?{start: number, end: number}}\n * @private\n */\n static computeIndexRange_(context) {\n const MpdUtils = shaka.dash.MpdUtils;\n const SegmentBase = shaka.dash.SegmentBase;\n const TXml = shaka.util.TXml;\n\n const representationIndex = MpdUtils.inheritChild(\n context, SegmentBase.fromInheritance_, 'RepresentationIndex');\n const indexRangeElem = MpdUtils.inheritAttribute(\n context, SegmentBase.fromInheritance_, 'indexRange');\n\n let indexRange = TXml.parseRange(indexRangeElem || '');\n if (representationIndex) {\n indexRange = TXml.parseAttr(\n representationIndex, 'range', TXml.parseRange, indexRange);\n }\n return indexRange;\n }\n\n /**\n * Compute the URIs of the segment index from the container.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @return {!Array.}\n * @private\n */\n static computeIndexUris_(context) {\n const ManifestParserUtils = shaka.util.ManifestParserUtils;\n const MpdUtils = shaka.dash.MpdUtils;\n const SegmentBase = shaka.dash.SegmentBase;\n const StringUtils = shaka.util.StringUtils;\n\n const representationIndex = MpdUtils.inheritChild(\n context, SegmentBase.fromInheritance_, 'RepresentationIndex');\n\n let indexUris = context.representation.getBaseUris();\n if (representationIndex) {\n const representationUri =\n StringUtils.htmlUnescape(representationIndex.attributes['sourceURL']);\n if (representationUri) {\n indexUris = ManifestParserUtils.resolveUris(\n indexUris, [representationUri], context.urlParams());\n }\n }\n\n return indexUris;\n }\n\n /**\n * Check if this type of segment index is supported. This allows for\n * immediate errors during parsing, as opposed to an async error from\n * createSegmentIndex().\n *\n * Also checks for a valid byte range, which is not required for callers from\n * SegmentTemplate.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {shaka.media.InitSegmentReference} initSegmentReference\n * @private\n */\n static checkSegmentIndexRangeSupport_(context, initSegmentReference) {\n const SegmentBase = shaka.dash.SegmentBase;\n\n SegmentBase.checkSegmentIndexSupport(context, initSegmentReference);\n\n const indexRange = SegmentBase.computeIndexRange_(context);\n if (!indexRange) {\n shaka.log.error(\n 'SegmentBase does not contain sufficient segment information:',\n 'the SegmentBase does not contain @indexRange',\n 'or a RepresentationIndex element.',\n context.representation);\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_NO_SEGMENT_INFO);\n }\n }\n\n /**\n * Check if this type of segment index is supported. This allows for\n * immediate errors during parsing, as opposed to an async error from\n * createSegmentIndex().\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {shaka.media.InitSegmentReference} initSegmentReference\n */\n static checkSegmentIndexSupport(context, initSegmentReference) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n const contentType = context.representation.contentType;\n const containerType = context.representation.mimeType.split('/')[1];\n\n if (contentType != ContentType.TEXT && containerType != 'mp4' &&\n containerType != 'webm') {\n shaka.log.error(\n 'SegmentBase specifies an unsupported container type.',\n context.representation);\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_UNSUPPORTED_CONTAINER);\n }\n\n if ((containerType == 'webm') && !initSegmentReference) {\n shaka.log.error(\n 'SegmentBase does not contain sufficient segment information:',\n 'the SegmentBase uses a WebM container,',\n 'but does not contain an Initialization element.',\n context.representation);\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_WEBM_MISSING_INIT);\n }\n }\n\n /**\n * Generate a SegmentIndex from a Context object.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {shaka.dash.DashParser.RequestSegmentCallback} requestSegment\n * @param {shaka.media.InitSegmentReference} initSegmentReference\n * @param {number} scaledPresentationTimeOffset\n * @return {!Promise.}\n * @private\n */\n static generateSegmentIndex_(\n context, requestSegment, initSegmentReference,\n scaledPresentationTimeOffset) {\n const SegmentBase = shaka.dash.SegmentBase;\n\n const indexUris = SegmentBase.computeIndexUris_(context);\n const indexRange = SegmentBase.computeIndexRange_(context);\n goog.asserts.assert(indexRange, 'Index range should not be null!');\n\n return shaka.dash.SegmentBase.generateSegmentIndexFromUris(\n context, requestSegment, initSegmentReference, indexUris,\n indexRange.start, indexRange.end,\n scaledPresentationTimeOffset);\n }\n\n /**\n * Create a MediaQualityInfo object from a Context object.\n *\n * @param {!shaka.dash.DashParser.Context} context\n * @return {!shaka.extern.MediaQualityInfo}\n */\n static createQualityInfo(context) {\n const representation = context.representation;\n return {\n bandwidth: context.bandwidth,\n audioSamplingRate: representation.audioSamplingRate,\n codecs: representation.codecs,\n contentType: representation.contentType,\n frameRate: representation.frameRate || null,\n height: representation.height || null,\n mimeType: representation.mimeType,\n channelsCount: representation.numChannels,\n pixelAspectRatio: representation.pixelAspectRatio || null,\n width: representation.width || null,\n label: context.adaptationSet.label || null,\n roles: context.roles || null,\n language: context.adaptationSet.language || null,\n };\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.dash.SegmentList');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.dash.MpdUtils');\ngoog.require('shaka.dash.SegmentBase');\ngoog.require('shaka.log');\ngoog.require('shaka.media.InitSegmentReference');\ngoog.require('shaka.media.SegmentIndex');\ngoog.require('shaka.media.SegmentReference');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.Functional');\ngoog.require('shaka.util.ManifestParserUtils');\ngoog.require('shaka.util.StringUtils');\ngoog.require('shaka.util.TXml');\ngoog.requireType('shaka.dash.DashParser');\ngoog.requireType('shaka.media.PresentationTimeline');\n\n\n/**\n * @summary A set of functions for parsing SegmentList elements.\n */\nshaka.dash.SegmentList = class {\n /**\n * Creates a new StreamInfo object.\n * Updates the existing SegmentIndex, if any.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {!Object.} streamMap\n * @param {shaka.extern.aesKey|undefined} aesKey\n * @return {shaka.dash.DashParser.StreamInfo}\n */\n static createStreamInfo(context, streamMap, aesKey) {\n goog.asserts.assert(context.representation.segmentList,\n 'Should only be called with SegmentList');\n const SegmentList = shaka.dash.SegmentList;\n\n const initSegmentReference = shaka.dash.SegmentBase.createInitSegment(\n context, SegmentList.fromInheritance_, aesKey);\n const info = SegmentList.parseSegmentListInfo_(context);\n\n SegmentList.checkSegmentListInfo_(context, info);\n\n /** @type {shaka.media.SegmentIndex} */\n let segmentIndex = null;\n let stream = null;\n if (context.period.id && context.representation.id) {\n // Only check/store the index if period and representation IDs are set.\n const id = context.period.id + ',' + context.representation.id;\n stream = streamMap[id];\n if (stream) {\n segmentIndex = stream.segmentIndex;\n }\n }\n\n const references = SegmentList.createSegmentReferences_(\n context.periodInfo.start, context.periodInfo.duration,\n info.startNumber, context.representation.getBaseUris, info,\n initSegmentReference, aesKey, context.representation.mimeType,\n context.representation.codecs, context.bandwidth, context.urlParams);\n\n const isNew = !segmentIndex;\n if (segmentIndex) {\n const start = context.presentationTimeline.getSegmentAvailabilityStart();\n segmentIndex.mergeAndEvict(references, start);\n } else {\n segmentIndex = new shaka.media.SegmentIndex(references);\n }\n context.presentationTimeline.notifySegments(references);\n\n if (!context.dynamic || !context.periodInfo.isLastPeriod) {\n const periodStart = context.periodInfo.start;\n const periodEnd = context.periodInfo.duration ?\n context.periodInfo.start + context.periodInfo.duration : Infinity;\n segmentIndex.fit(periodStart, periodEnd, isNew);\n }\n\n if (stream) {\n stream.segmentIndex = segmentIndex;\n }\n\n return {\n generateSegmentIndex: () => {\n if (!segmentIndex || segmentIndex.isEmpty()) {\n segmentIndex.merge(references);\n }\n return Promise.resolve(segmentIndex);\n },\n };\n }\n\n /**\n * @param {?shaka.dash.DashParser.InheritanceFrame} frame\n * @return {?shaka.extern.xml.Node}\n * @private\n */\n static fromInheritance_(frame) {\n return frame.segmentList;\n }\n\n /**\n * Parses the SegmentList items to create an info object.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @return {shaka.dash.SegmentList.SegmentListInfo}\n * @private\n */\n static parseSegmentListInfo_(context) {\n const SegmentList = shaka.dash.SegmentList;\n const MpdUtils = shaka.dash.MpdUtils;\n\n const mediaSegments = SegmentList.parseMediaSegments_(context);\n const segmentInfo =\n MpdUtils.parseSegmentInfo(context, SegmentList.fromInheritance_);\n\n let startNumber = segmentInfo.startNumber;\n if (startNumber == 0) {\n shaka.log.warning('SegmentList@startNumber must be > 0');\n startNumber = 1;\n }\n\n let startTime = 0;\n if (segmentInfo.segmentDuration) {\n // See DASH sec. 5.3.9.5.3\n // Don't use presentationTimeOffset for @duration.\n startTime = segmentInfo.segmentDuration * (startNumber - 1);\n } else if (segmentInfo.timeline && segmentInfo.timeline.length > 0) {\n // The presentationTimeOffset was considered in timeline creation.\n startTime = segmentInfo.timeline[0].start;\n }\n\n return {\n segmentDuration: segmentInfo.segmentDuration,\n startTime: startTime,\n startNumber: startNumber,\n scaledPresentationTimeOffset: segmentInfo.scaledPresentationTimeOffset,\n timeline: segmentInfo.timeline,\n mediaSegments: mediaSegments,\n };\n }\n\n /**\n * Checks whether a SegmentListInfo object is valid.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {shaka.dash.SegmentList.SegmentListInfo} info\n * @private\n */\n static checkSegmentListInfo_(context, info) {\n if (!info.segmentDuration && !info.timeline &&\n info.mediaSegments.length > 1) {\n shaka.log.warning(\n 'SegmentList does not contain sufficient segment information:',\n 'the SegmentList specifies multiple segments,',\n 'but does not specify a segment duration or timeline.',\n context.representation);\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_NO_SEGMENT_INFO);\n }\n\n if (!info.segmentDuration && !context.periodInfo.duration &&\n !info.timeline && info.mediaSegments.length == 1) {\n shaka.log.warning(\n 'SegmentList does not contain sufficient segment information:',\n 'the SegmentList specifies one segment,',\n 'but does not specify a segment duration, period duration,',\n 'or timeline.',\n context.representation);\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_NO_SEGMENT_INFO);\n }\n\n if (info.timeline && info.timeline.length == 0) {\n shaka.log.warning(\n 'SegmentList does not contain sufficient segment information:',\n 'the SegmentList has an empty timeline.',\n context.representation);\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_NO_SEGMENT_INFO);\n }\n }\n\n /**\n * Creates an array of segment references for the given data.\n *\n * @param {number} periodStart in seconds.\n * @param {?number} periodDuration in seconds.\n * @param {number} startNumber\n * @param {function():!Array.} getBaseUris\n * @param {shaka.dash.SegmentList.SegmentListInfo} info\n * @param {shaka.media.InitSegmentReference} initSegmentReference\n * @param {shaka.extern.aesKey|undefined} aesKey\n * @param {string} mimeType\n * @param {string} codecs\n * @param {number} bandwidth\n * @param {function():string} urlParams\n * @return {!Array.}\n * @private\n */\n static createSegmentReferences_(\n periodStart, periodDuration, startNumber, getBaseUris, info,\n initSegmentReference, aesKey, mimeType, codecs, bandwidth, urlParams) {\n const ManifestParserUtils = shaka.util.ManifestParserUtils;\n\n let max = info.mediaSegments.length;\n if (info.timeline && info.timeline.length != info.mediaSegments.length) {\n max = Math.min(info.timeline.length, info.mediaSegments.length);\n shaka.log.warning(\n 'The number of items in the segment timeline and the number of ',\n 'segment URLs do not match, truncating', info.mediaSegments.length,\n 'to', max);\n }\n\n const timestampOffset = periodStart - info.scaledPresentationTimeOffset;\n const appendWindowStart = periodStart;\n const appendWindowEnd = periodDuration ?\n periodStart + periodDuration : Infinity;\n\n /** @type {!Array.} */\n const references = [];\n let prevEndTime = info.startTime;\n for (let i = 0; i < max; i++) {\n const segment = info.mediaSegments[i];\n const startTime = prevEndTime;\n let endTime;\n\n if (info.segmentDuration != null) {\n endTime = startTime + info.segmentDuration;\n } else if (info.timeline) {\n // Ignore the timepoint start since they are continuous.\n endTime = info.timeline[i].end;\n } else {\n // If segmentDuration and timeline are null then there must\n // be exactly one segment.\n goog.asserts.assert(\n info.mediaSegments.length == 1 && periodDuration,\n 'There should be exactly one segment with a Period duration.');\n endTime = startTime + periodDuration;\n }\n\n let uris = null;\n const getUris = () => {\n if (uris == null) {\n uris = ManifestParserUtils.resolveUris(\n getBaseUris(), [segment.mediaUri], urlParams());\n }\n return uris;\n };\n\n const ref = new shaka.media.SegmentReference(\n periodStart + startTime,\n periodStart + endTime,\n getUris,\n segment.start,\n segment.end,\n initSegmentReference,\n timestampOffset,\n appendWindowStart, appendWindowEnd,\n /* partialReferences= */ [],\n /* tilesLayout= */ '',\n /* tileDuration= */ null,\n /* syncTime= */ null,\n shaka.media.SegmentReference.Status.AVAILABLE,\n aesKey);\n ref.codecs = codecs;\n ref.mimeType = mimeType;\n ref.bandwidth = bandwidth;\n references.push(ref);\n prevEndTime = endTime;\n }\n\n return references;\n }\n\n /**\n * Parses the media URIs from the context.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @return {!Array.}\n * @private\n */\n static parseMediaSegments_(context) {\n const Functional = shaka.util.Functional;\n /** @type {!Array.} */\n const segmentLists = [\n context.representation.segmentList,\n context.adaptationSet.segmentList,\n context.period.segmentList,\n ].filter(Functional.isNotNull);\n\n const TXml = shaka.util.TXml;\n const StringUtils = shaka.util.StringUtils;\n // Search each SegmentList for one with at least one SegmentURL element,\n // select the first one, and convert each SegmentURL element to a tuple.\n return segmentLists\n .map((node) => { return TXml.findChildren(node, 'SegmentURL'); })\n .reduce((all, part) => { return all.length > 0 ? all : part; })\n .map((urlNode) => {\n if (urlNode.attributes['indexRange'] &&\n !context.indexRangeWarningGiven) {\n context.indexRangeWarningGiven = true;\n shaka.log.warning(\n 'We do not support the SegmentURL@indexRange attribute on ' +\n 'SegmentList. We only use the SegmentList@duration ' +\n 'attribute or SegmentTimeline, which must be accurate.');\n }\n\n const uri = StringUtils.htmlUnescape(urlNode.attributes['media']);\n const range = TXml.parseAttr(\n urlNode, 'mediaRange', TXml.parseRange,\n {start: 0, end: null});\n return {mediaUri: uri, start: range.start, end: range.end};\n });\n }\n};\n\n/**\n * @typedef {{\n * mediaUri: string,\n * start: number,\n * end: ?number\n * }}\n *\n * @property {string} mediaUri\n * The URI of the segment.\n * @property {number} start\n * The start byte of the segment.\n * @property {?number} end\n * The end byte of the segment, or null.\n */\nshaka.dash.SegmentList.MediaSegment;\n\n/**\n * @typedef {{\n * segmentDuration: ?number,\n * startTime: number,\n * startNumber: number,\n * scaledPresentationTimeOffset: number,\n * timeline: Array.,\n * mediaSegments: !Array.\n * }}\n * @private\n *\n * @description\n * Contains information about a SegmentList.\n *\n * @property {?number} segmentDuration\n * The duration of the segments, if given.\n * @property {number} startTime\n * The start time of the first segment, in seconds.\n * @property {number} startNumber\n * The start number of the segments; 1 or greater.\n * @property {number} scaledPresentationTimeOffset\n * The scaledPresentationTimeOffset of the representation, in seconds.\n * @property {Array.} timeline\n * The timeline of the representation, if given. Times in seconds.\n * @property {!Array.} mediaSegments\n * The URI and byte-ranges of the media segments.\n */\nshaka.dash.SegmentList.SegmentListInfo;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.dash.SegmentTemplate');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.dash.MpdUtils');\ngoog.require('shaka.dash.SegmentBase');\ngoog.require('shaka.log');\ngoog.require('shaka.media.InitSegmentReference');\ngoog.require('shaka.media.SegmentIndex');\ngoog.require('shaka.media.SegmentReference');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.IReleasable');\ngoog.require('shaka.util.ManifestParserUtils');\ngoog.require('shaka.util.ObjectUtils');\ngoog.require('shaka.util.StringUtils');\ngoog.require('shaka.util.TXml');\ngoog.requireType('shaka.dash.DashParser');\ngoog.requireType('shaka.media.PresentationTimeline');\n\n\n/**\n * @summary A set of functions for parsing SegmentTemplate elements.\n */\nshaka.dash.SegmentTemplate = class {\n /**\n * Creates a new StreamInfo object.\n * Updates the existing SegmentIndex, if any.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {shaka.dash.DashParser.RequestSegmentCallback} requestSegment\n * @param {!Object.} streamMap\n * @param {boolean} isUpdate True if the manifest is being updated.\n * @param {number} segmentLimit The maximum number of segments to generate for\n * a SegmentTemplate with fixed duration.\n * @param {!Object.} periodDurationMap\n * @param {shaka.extern.aesKey|undefined} aesKey\n * @param {?number} lastSegmentNumber\n * @param {boolean} isPatchUpdate\n * @return {shaka.dash.DashParser.StreamInfo}\n */\n static createStreamInfo(\n context, requestSegment, streamMap, isUpdate, segmentLimit,\n periodDurationMap, aesKey, lastSegmentNumber, isPatchUpdate) {\n goog.asserts.assert(context.representation.segmentTemplate,\n 'Should only be called with SegmentTemplate ' +\n 'or segment info defined');\n const MpdUtils = shaka.dash.MpdUtils;\n const SegmentTemplate = shaka.dash.SegmentTemplate;\n const TimelineSegmentIndex = shaka.dash.TimelineSegmentIndex;\n\n if (!isPatchUpdate && !context.representation.initialization) {\n context.representation.initialization =\n MpdUtils.inheritAttribute(\n context, SegmentTemplate.fromInheritance_, 'initialization');\n }\n\n const initSegmentReference = context.representation.initialization ?\n SegmentTemplate.createInitSegment_(context, aesKey) : null;\n\n /** @type {shaka.dash.SegmentTemplate.SegmentTemplateInfo} */\n const info = SegmentTemplate.parseSegmentTemplateInfo_(context);\n\n SegmentTemplate.checkSegmentTemplateInfo_(context, info);\n\n // Direct fields of context will be reassigned by the parser before\n // generateSegmentIndex is called. So we must make a shallow copy first,\n // and use that in the generateSegmentIndex callbacks.\n const shallowCopyOfContext =\n shaka.util.ObjectUtils.shallowCloneObject(context);\n\n if (info.indexTemplate) {\n shaka.dash.SegmentBase.checkSegmentIndexSupport(\n context, initSegmentReference);\n\n return {\n generateSegmentIndex: () => {\n return SegmentTemplate.generateSegmentIndexFromIndexTemplate_(\n shallowCopyOfContext, requestSegment, initSegmentReference,\n info);\n },\n };\n } else if (info.segmentDuration) {\n if (!isUpdate &&\n context.adaptationSet.contentType !== 'image' &&\n context.adaptationSet.contentType !== 'text') {\n const periodStart = context.periodInfo.start;\n const periodId = context.period.id;\n const initialPeriodDuration = context.periodInfo.duration;\n const periodDuration =\n (periodId != null && periodDurationMap[periodId]) ||\n initialPeriodDuration;\n const periodEnd = periodDuration ?\n (periodStart + periodDuration) : Infinity;\n\n context.presentationTimeline.notifyMaxSegmentDuration(\n info.segmentDuration);\n context.presentationTimeline.notifyPeriodDuration(\n periodStart, periodEnd);\n }\n\n return {\n generateSegmentIndex: () => {\n return SegmentTemplate.generateSegmentIndexFromDuration_(\n shallowCopyOfContext, info, segmentLimit, initSegmentReference,\n periodDurationMap, aesKey, lastSegmentNumber,\n context.representation.segmentSequenceCadence);\n },\n };\n } else {\n /** @type {shaka.media.SegmentIndex} */\n let segmentIndex = null;\n let id = null;\n let stream = null;\n if (context.period.id && context.representation.id) {\n // Only check/store the index if period and representation IDs are set.\n id = context.period.id + ',' + context.representation.id;\n stream = streamMap[id];\n if (stream) {\n segmentIndex = stream.segmentIndex;\n }\n }\n\n const periodStart = context.periodInfo.start;\n const periodEnd = context.periodInfo.duration ? periodStart +\n context.periodInfo.duration : Infinity;\n\n shaka.log.debug(`New manifest ${periodStart} - ${periodEnd}`);\n\n /* When to fit segments. All refactors should honor/update this table:\n *\n * | dynamic | infinite | last | should | notes |\n * | | period | period | fit | |\n * | ------- | -------- | ------ | ------ | ------------------------- |\n * | F | F | X | T | typical VOD |\n * | F | T | X | X | impossible: infinite VOD |\n * | T | F | F | T | typical live, old period |\n * | T | F | T | F | typical IPR |\n * | T | T | F | X | impossible: old, infinite |\n * | T | T | T | F | typical live, new period |\n */\n\n // We never fit the final period of dynamic content, which could be\n // infinite live (with no limit to fit to) or IPR (which would expand the\n // most recent segment to the end of the presentation).\n const shouldFit = !(context.dynamic && context.periodInfo.isLastPeriod);\n\n if (!segmentIndex) {\n shaka.log.debug(`Creating TSI with end ${periodEnd}`);\n segmentIndex = new TimelineSegmentIndex(\n info,\n context.representation.id,\n context.bandwidth,\n context.representation.getBaseUris,\n context.urlParams,\n periodStart,\n periodEnd,\n initSegmentReference,\n shouldFit,\n aesKey,\n context.representation.segmentSequenceCadence,\n );\n } else {\n const tsi = /** @type {!TimelineSegmentIndex} */(segmentIndex);\n tsi.appendTemplateInfo(\n info, periodStart, periodEnd, shouldFit, initSegmentReference);\n\n const availabilityStart =\n context.presentationTimeline.getSegmentAvailabilityStart();\n tsi.evict(availabilityStart);\n }\n\n if (info.timeline &&\n context.adaptationSet.contentType !== 'image' &&\n context.adaptationSet.contentType !== 'text') {\n const timeline = info.timeline;\n context.presentationTimeline.notifyTimeRange(\n timeline,\n periodStart);\n }\n\n if (stream && context.dynamic) {\n stream.segmentIndex = segmentIndex;\n }\n\n return {\n generateSegmentIndex: () => {\n // If segmentIndex is deleted, or segmentIndex's references are\n // released by closeSegmentIndex(), we should set the value of\n // segmentIndex again.\n if (segmentIndex instanceof shaka.dash.TimelineSegmentIndex &&\n segmentIndex.isEmpty()) {\n segmentIndex.appendTemplateInfo(info, periodStart,\n periodEnd, shouldFit, initSegmentReference);\n }\n return Promise.resolve(segmentIndex);\n },\n };\n }\n }\n\n /**\n * Ingests Patch MPD segments into timeline.\n *\n * @param {!shaka.dash.DashParser.Context} context\n * @param {shaka.extern.xml.Node} patchNode\n */\n static modifyTimepoints(context, patchNode) {\n const MpdUtils = shaka.dash.MpdUtils;\n const SegmentTemplate = shaka.dash.SegmentTemplate;\n const TXml = shaka.util.TXml;\n\n const timelineNode = MpdUtils.inheritChild(context,\n SegmentTemplate.fromInheritance_, 'SegmentTimeline');\n goog.asserts.assert(timelineNode, 'timeline node not found');\n const timepoints = TXml.findChildren(timelineNode, 'S');\n\n goog.asserts.assert(timepoints, 'timepoints should exist');\n TXml.modifyNodes(timepoints, patchNode);\n timelineNode.children = timepoints;\n }\n\n /**\n * Removes all segments from timeline.\n *\n * @param {!shaka.dash.DashParser.Context} context\n */\n static removeTimepoints(context) {\n const MpdUtils = shaka.dash.MpdUtils;\n const SegmentTemplate = shaka.dash.SegmentTemplate;\n\n const timelineNode = MpdUtils.inheritChild(context,\n SegmentTemplate.fromInheritance_, 'SegmentTimeline');\n goog.asserts.assert(timelineNode, 'timeline node not found');\n timelineNode.children = [];\n }\n\n /**\n * @param {?shaka.dash.DashParser.InheritanceFrame} frame\n * @return {?shaka.extern.xml.Node}\n * @private\n */\n static fromInheritance_(frame) {\n return frame.segmentTemplate;\n }\n\n /**\n * Parses a SegmentTemplate element into an info object.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @return {shaka.dash.SegmentTemplate.SegmentTemplateInfo}\n * @private\n */\n static parseSegmentTemplateInfo_(context) {\n const SegmentTemplate = shaka.dash.SegmentTemplate;\n const MpdUtils = shaka.dash.MpdUtils;\n const StringUtils = shaka.util.StringUtils;\n const segmentInfo =\n MpdUtils.parseSegmentInfo(context, SegmentTemplate.fromInheritance_);\n\n const media = MpdUtils.inheritAttribute(\n context, SegmentTemplate.fromInheritance_, 'media');\n\n const index = MpdUtils.inheritAttribute(\n context, SegmentTemplate.fromInheritance_, 'index');\n\n const k = MpdUtils.inheritAttribute(\n context, SegmentTemplate.fromInheritance_, 'k');\n\n let numChunks = 0;\n if (k) {\n numChunks = parseInt(k, 10);\n }\n\n return {\n segmentDuration: segmentInfo.segmentDuration,\n timescale: segmentInfo.timescale,\n startNumber: segmentInfo.startNumber,\n scaledPresentationTimeOffset: segmentInfo.scaledPresentationTimeOffset,\n unscaledPresentationTimeOffset:\n segmentInfo.unscaledPresentationTimeOffset,\n timeline: segmentInfo.timeline,\n mediaTemplate: media && StringUtils.htmlUnescape(media),\n indexTemplate: index,\n mimeType: context.representation.mimeType,\n codecs: context.representation.codecs,\n bandwidth: context.bandwidth,\n numChunks: numChunks,\n };\n }\n\n /**\n * Verifies a SegmentTemplate info object.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {shaka.dash.SegmentTemplate.SegmentTemplateInfo} info\n * @private\n */\n static checkSegmentTemplateInfo_(context, info) {\n let n = 0;\n n += info.indexTemplate ? 1 : 0;\n n += info.timeline ? 1 : 0;\n n += info.segmentDuration ? 1 : 0;\n\n if (n == 0) {\n shaka.log.error(\n 'SegmentTemplate does not contain any segment information:',\n 'the SegmentTemplate must contain either an index URL template',\n 'a SegmentTimeline, or a segment duration.',\n context.representation);\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_NO_SEGMENT_INFO);\n } else if (n != 1) {\n shaka.log.warning(\n 'SegmentTemplate containes multiple segment information sources:',\n 'the SegmentTemplate should only contain an index URL template,',\n 'a SegmentTimeline or a segment duration.',\n context.representation);\n if (info.indexTemplate) {\n shaka.log.info('Using the index URL template by default.');\n info.timeline = null;\n info.segmentDuration = null;\n } else {\n goog.asserts.assert(info.timeline, 'There should be a timeline');\n shaka.log.info('Using the SegmentTimeline by default.');\n info.segmentDuration = null;\n }\n }\n\n if (!info.indexTemplate && !info.mediaTemplate) {\n shaka.log.error(\n 'SegmentTemplate does not contain sufficient segment information:',\n 'the SegmentTemplate\\'s media URL template is missing.',\n context.representation);\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_NO_SEGMENT_INFO);\n }\n }\n\n /**\n * Generates a SegmentIndex from an index URL template.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {shaka.dash.DashParser.RequestSegmentCallback} requestSegment\n * @param {shaka.media.InitSegmentReference} init\n * @param {shaka.dash.SegmentTemplate.SegmentTemplateInfo} info\n * @return {!Promise.}\n * @private\n */\n static generateSegmentIndexFromIndexTemplate_(\n context, requestSegment, init, info) {\n const MpdUtils = shaka.dash.MpdUtils;\n const ManifestParserUtils = shaka.util.ManifestParserUtils;\n\n goog.asserts.assert(info.indexTemplate, 'must be using index template');\n const filledTemplate = MpdUtils.fillUriTemplate(\n info.indexTemplate, context.representation.id,\n null, null, context.bandwidth || null, null);\n\n const resolvedUris = ManifestParserUtils.resolveUris(\n context.representation.getBaseUris(), [filledTemplate]);\n\n return shaka.dash.SegmentBase.generateSegmentIndexFromUris(\n context, requestSegment, init, resolvedUris, 0, null,\n info.scaledPresentationTimeOffset);\n }\n\n /**\n * Generates a SegmentIndex from fixed-duration segments.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {shaka.dash.SegmentTemplate.SegmentTemplateInfo} info\n * @param {number} segmentLimit The maximum number of segments to generate.\n * @param {shaka.media.InitSegmentReference} initSegmentReference\n * @param {!Object.} periodDurationMap\n * @param {shaka.extern.aesKey|undefined} aesKey\n * @param {?number} lastSegmentNumber\n * @param {number} segmentSequenceCadence\n * @return {!Promise.}\n * @private\n */\n static generateSegmentIndexFromDuration_(\n context, info, segmentLimit, initSegmentReference, periodDurationMap,\n aesKey, lastSegmentNumber, segmentSequenceCadence) {\n goog.asserts.assert(info.mediaTemplate,\n 'There should be a media template with duration');\n\n const MpdUtils = shaka.dash.MpdUtils;\n const ManifestParserUtils = shaka.util.ManifestParserUtils;\n\n const presentationTimeline = context.presentationTimeline;\n\n // Capture values that could change as the parsing context moves on to\n // other parts of the manifest.\n const periodStart = context.periodInfo.start;\n const periodId = context.period.id;\n const initialPeriodDuration = context.periodInfo.duration;\n\n // For multi-period live streams the period duration may not be known until\n // the following period appears in an updated manifest. periodDurationMap\n // provides the updated period duration.\n const getPeriodEnd = () => {\n const periodDuration =\n (periodId != null && periodDurationMap[periodId]) ||\n initialPeriodDuration;\n const periodEnd = periodDuration ?\n (periodStart + periodDuration) : Infinity;\n return periodEnd;\n };\n\n const segmentDuration = info.segmentDuration;\n goog.asserts.assert(\n segmentDuration != null, 'Segment duration must not be null!');\n\n const startNumber = info.startNumber;\n const timescale = info.timescale;\n\n const template = info.mediaTemplate;\n const bandwidth = context.bandwidth || null;\n const id = context.representation.id;\n const getBaseUris = context.representation.getBaseUris;\n const urlParams = context.urlParams;\n\n const timestampOffset = periodStart - info.scaledPresentationTimeOffset;\n\n // Computes the range of presentation timestamps both within the period and\n // available. This is an intersection of the period range and the\n // availability window.\n const computeAvailablePeriodRange = () => {\n return [\n Math.max(\n presentationTimeline.getSegmentAvailabilityStart(),\n periodStart),\n\n Math.min(\n presentationTimeline.getSegmentAvailabilityEnd(),\n getPeriodEnd()),\n ];\n };\n\n // Computes the range of absolute positions both within the period and\n // available. The range is inclusive. These are the positions for which we\n // will generate segment references.\n const computeAvailablePositionRange = () => {\n // In presentation timestamps.\n const availablePresentationTimes = computeAvailablePeriodRange();\n goog.asserts.assert(availablePresentationTimes.every(isFinite),\n 'Available presentation times must be finite!');\n goog.asserts.assert(availablePresentationTimes.every((x) => x >= 0),\n 'Available presentation times must be positive!');\n goog.asserts.assert(segmentDuration != null,\n 'Segment duration must not be null!');\n\n // In period-relative timestamps.\n const availablePeriodTimes =\n availablePresentationTimes.map((x) => x - periodStart);\n // These may sometimes be reversed ([1] <= [0]) if the period is\n // completely unavailable. The logic will still work if this happens,\n // because we will simply generate no references.\n\n // In period-relative positions (0-based).\n const availablePeriodPositions = [\n Math.ceil(availablePeriodTimes[0] / segmentDuration),\n Math.ceil(availablePeriodTimes[1] / segmentDuration) - 1,\n ];\n\n // For Low Latency we can request the partial current position.\n if (context.representation.availabilityTimeOffset) {\n availablePeriodPositions[1]++;\n }\n\n // In absolute positions.\n const availablePresentationPositions =\n availablePeriodPositions.map((x) => x + startNumber);\n return availablePresentationPositions;\n };\n\n // For Live, we must limit the initial SegmentIndex in size, to avoid\n // consuming too much CPU or memory for content with gigantic\n // timeShiftBufferDepth (which can have values up to and including\n // Infinity).\n const range = computeAvailablePositionRange();\n const minPosition = context.dynamic ?\n Math.max(range[0], range[1] - segmentLimit + 1) :\n range[0];\n const maxPosition = lastSegmentNumber || range[1];\n\n const references = [];\n const createReference = (position) => {\n // These inner variables are all scoped to the inner loop, and can be used\n // safely in the callback below.\n\n goog.asserts.assert(segmentDuration != null,\n 'Segment duration must not be null!');\n\n // Relative to the period start.\n const positionWithinPeriod = position - startNumber;\n const segmentPeriodTime = positionWithinPeriod * segmentDuration;\n\n // What will appear in the actual segment files. The media timestamp is\n // what is expected in the $Time$ template.\n const segmentMediaTime = segmentPeriodTime +\n info.scaledPresentationTimeOffset;\n\n // Relative to the presentation.\n const segmentStart = segmentPeriodTime + periodStart;\n const trueSegmentEnd = segmentStart + segmentDuration;\n // Cap the segment end at the period end so that references from the\n // next period will fit neatly after it.\n const segmentEnd = Math.min(trueSegmentEnd, getPeriodEnd());\n\n // This condition will be true unless the segmentStart was >= periodEnd.\n // If we've done the position calculations correctly, this won't happen.\n goog.asserts.assert(segmentStart < segmentEnd,\n 'Generated a segment outside of the period!');\n\n const partialSegmentRefs = [];\n\n const numChunks = info.numChunks;\n if (numChunks) {\n const partialDuration = (segmentEnd - segmentStart) / numChunks;\n\n for (let i = 0; i < numChunks; i++) {\n const start = segmentStart + partialDuration * i;\n const end = start + partialDuration;\n const subNumber = i + 1;\n const getPartialUris = () => {\n let time = segmentMediaTime * timescale;\n if ('BigInt' in window && time > Number.MAX_SAFE_INTEGER) {\n time = BigInt(segmentMediaTime) * BigInt(timescale);\n }\n const mediaUri = MpdUtils.fillUriTemplate(\n template, id, position, subNumber, bandwidth, time);\n return ManifestParserUtils.resolveUris(\n getBaseUris(), [mediaUri], urlParams());\n };\n const partial = new shaka.media.SegmentReference(\n start,\n end,\n getPartialUris,\n /* startByte= */ 0,\n /* endByte= */ null,\n initSegmentReference,\n timestampOffset,\n /* appendWindowStart= */ periodStart,\n /* appendWindowEnd= */ getPeriodEnd(),\n /* partialReferences= */ [],\n /* tilesLayout= */ '',\n /* tileDuration= */ null,\n /* syncTime= */ null,\n shaka.media.SegmentReference.Status.AVAILABLE,\n aesKey);\n partial.codecs = context.representation.codecs;\n partial.mimeType = context.representation.mimeType;\n if (segmentSequenceCadence == 0) {\n if (i > 0) {\n partial.markAsNonIndependent();\n }\n } else if ((i % segmentSequenceCadence) != 0) {\n partial.markAsNonIndependent();\n }\n partialSegmentRefs.push(partial);\n }\n }\n\n const getUris = () => {\n if (numChunks) {\n return [];\n }\n let time = segmentMediaTime * timescale;\n if ('BigInt' in window && time > Number.MAX_SAFE_INTEGER) {\n time = BigInt(segmentMediaTime) * BigInt(timescale);\n }\n const mediaUri = MpdUtils.fillUriTemplate(\n template, id, position, /* subNumber= */ null, bandwidth, time);\n return ManifestParserUtils.resolveUris(\n getBaseUris(), [mediaUri], urlParams());\n };\n\n const ref = new shaka.media.SegmentReference(\n segmentStart,\n segmentEnd,\n getUris,\n /* startByte= */ 0,\n /* endByte= */ null,\n initSegmentReference,\n timestampOffset,\n /* appendWindowStart= */ periodStart,\n /* appendWindowEnd= */ getPeriodEnd(),\n partialSegmentRefs,\n /* tilesLayout= */ '',\n /* tileDuration= */ null,\n /* syncTime= */ null,\n shaka.media.SegmentReference.Status.AVAILABLE,\n aesKey,\n partialSegmentRefs.length > 0);\n ref.codecs = context.representation.codecs;\n ref.mimeType = context.representation.mimeType;\n ref.bandwidth = context.bandwidth;\n // This is necessary information for thumbnail streams:\n ref.trueEndTime = trueSegmentEnd;\n return ref;\n };\n\n for (let position = minPosition; position <= maxPosition; ++position) {\n const reference = createReference(position);\n references.push(reference);\n }\n\n /** @type {shaka.media.SegmentIndex} */\n const segmentIndex = new shaka.media.SegmentIndex(references);\n\n // If the availability timeline currently ends before the period, we will\n // need to add references over time.\n const willNeedToAddReferences =\n presentationTimeline.getSegmentAvailabilityEnd() < getPeriodEnd();\n\n // When we start a live stream with a period that ends within the\n // availability window we will not need to add more references, but we will\n // need to evict old references.\n const willNeedToEvictReferences = presentationTimeline.isLive();\n\n if (willNeedToAddReferences || willNeedToEvictReferences) {\n // The period continues to get longer over time, so check for new\n // references once every |segmentDuration| seconds.\n // We clamp to |minPosition| in case the initial range was reversed and no\n // references were generated. Otherwise, the update would start creating\n // negative positions for segments in periods which begin in the future.\n let nextPosition = Math.max(minPosition, maxPosition + 1);\n let updateTime = segmentDuration;\n // For low latency we need to evict very frequently.\n if (context.representation.availabilityTimeOffset) {\n updateTime = 0.1;\n }\n segmentIndex.updateEvery(updateTime, () => {\n // Evict any references outside the window.\n const availabilityStartTime =\n presentationTimeline.getSegmentAvailabilityStart();\n segmentIndex.evict(availabilityStartTime);\n\n // Compute any new references that need to be added.\n const [_, maxPosition] = computeAvailablePositionRange();\n const references = [];\n while (nextPosition <= maxPosition) {\n const reference = createReference(nextPosition);\n references.push(reference);\n nextPosition++;\n }\n\n // The timer must continue firing until the entire period is\n // unavailable, so that all references will be evicted.\n if (availabilityStartTime > getPeriodEnd() && !references.length) {\n // Signal stop.\n return null;\n }\n return references;\n });\n }\n\n return Promise.resolve(segmentIndex);\n }\n\n /**\n * Creates an init segment reference from a context object.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {shaka.extern.aesKey|undefined} aesKey\n * @return {shaka.media.InitSegmentReference}\n * @private\n */\n static createInitSegment_(context, aesKey) {\n const MpdUtils = shaka.dash.MpdUtils;\n const ManifestParserUtils = shaka.util.ManifestParserUtils;\n const SegmentTemplate = shaka.dash.SegmentTemplate;\n\n let initialization = context.representation.initialization;\n if (!initialization) {\n initialization = MpdUtils.inheritAttribute(\n context, SegmentTemplate.fromInheritance_, 'initialization');\n }\n if (!initialization) {\n return null;\n }\n initialization = shaka.util.StringUtils.htmlUnescape(initialization);\n\n const repId = context.representation.id;\n const bandwidth = context.bandwidth || null;\n const getBaseUris = context.representation.getBaseUris;\n const urlParams = context.urlParams;\n const getUris = () => {\n goog.asserts.assert(initialization, 'Should have returned earler');\n const filledTemplate = MpdUtils.fillUriTemplate(\n initialization, repId, null, null, bandwidth, null);\n const resolvedUris = ManifestParserUtils.resolveUris(\n getBaseUris(), [filledTemplate], urlParams());\n return resolvedUris;\n };\n const qualityInfo = shaka.dash.SegmentBase.createQualityInfo(context);\n const ref = new shaka.media.InitSegmentReference(\n getUris,\n /* startByte= */ 0,\n /* endByte= */ null,\n qualityInfo,\n /* timescale= */ null,\n /* segmentData= */ null,\n aesKey);\n ref.codecs = context.representation.codecs;\n ref.mimeType = context.representation.mimeType;\n return ref;\n }\n};\n\n\n/**\n * A SegmentIndex that returns segments references on demand from\n * a segment timeline.\n *\n * @extends shaka.media.SegmentIndex\n * @implements {shaka.util.IReleasable}\n * @implements {Iterable.}\n *\n * @private\n *\n */\nshaka.dash.TimelineSegmentIndex = class extends shaka.media.SegmentIndex {\n /**\n *\n * @param {!shaka.dash.SegmentTemplate.SegmentTemplateInfo} templateInfo\n * @param {?string} representationId\n * @param {number} bandwidth\n * @param {function():Array.} getBaseUris\n * @param {function():string} urlParams\n * @param {number} periodStart\n * @param {number} periodEnd\n * @param {shaka.media.InitSegmentReference} initSegmentReference\n * @param {boolean} shouldFit\n * @param {shaka.extern.aesKey|undefined} aesKey\n * @param {number} segmentSequenceCadence\n */\n constructor(templateInfo, representationId, bandwidth, getBaseUris,\n urlParams, periodStart, periodEnd, initSegmentReference, shouldFit,\n aesKey, segmentSequenceCadence) {\n super([]);\n\n /** @private {?shaka.dash.SegmentTemplate.SegmentTemplateInfo} */\n this.templateInfo_ = templateInfo;\n /** @private {?string} */\n this.representationId_ = representationId;\n /** @private {number} */\n this.bandwidth_ = bandwidth;\n /** @private {function():Array.} */\n this.getBaseUris_ = getBaseUris;\n /** @private {function():string} */\n this.urlParams_ = urlParams;\n /** @private {number} */\n this.periodStart_ = periodStart;\n /** @private {number} */\n this.periodEnd_ = periodEnd;\n /** @private {shaka.media.InitSegmentReference} */\n this.initSegmentReference_ = initSegmentReference;\n /** @private {shaka.extern.aesKey|undefined} */\n this.aesKey_ = aesKey;\n /** @private {number} */\n this.segmentSequenceCadence_ = segmentSequenceCadence;\n\n\n if (shouldFit) {\n this.fitTimeline();\n }\n }\n\n /**\n * @override\n */\n getNumReferences() {\n if (this.templateInfo_) {\n return this.templateInfo_.timeline.length;\n } else {\n return 0;\n }\n }\n\n /**\n * @override\n */\n release() {\n super.release();\n this.templateInfo_ = null;\n // We cannot release other fields, as segment index can\n // be recreated using only template info.\n }\n\n\n /**\n * @override\n */\n evict(time) {\n if (!this.templateInfo_) {\n return;\n }\n shaka.log.debug(`${this.representationId_} Evicting at ${time}`);\n let numToEvict = 0;\n const timeline = this.templateInfo_.timeline;\n\n for (let i = 0; i < timeline.length; i += 1) {\n const range = timeline[i];\n const end = range.end + this.periodStart_;\n const start = range.start + this.periodStart_;\n\n if (end <= time) {\n shaka.log.debug(`Evicting ${start} - ${end}`);\n numToEvict += 1;\n } else {\n break;\n }\n }\n\n if (numToEvict > 0) {\n this.templateInfo_.timeline = timeline.slice(numToEvict);\n if (this.references.length >= numToEvict) {\n this.references = this.references.slice(numToEvict);\n }\n\n this.numEvicted_ += numToEvict;\n\n if (this.getNumReferences() === 0) {\n this.release();\n }\n }\n }\n\n /**\n * Merge new template info\n * @param {shaka.dash.SegmentTemplate.SegmentTemplateInfo} info\n * @param {number} periodStart\n * @param {number} periodEnd\n * @param {boolean} shouldFit\n * @param {shaka.media.InitSegmentReference} initSegmentReference\n */\n appendTemplateInfo(info, periodStart, periodEnd, shouldFit,\n initSegmentReference) {\n this.updateInitSegmentReference(initSegmentReference);\n if (!this.templateInfo_) {\n this.templateInfo_ = info;\n this.periodStart_ = periodStart;\n this.periodEnd_ = periodEnd;\n } else {\n const currentTimeline = this.templateInfo_.timeline;\n\n if (this.templateInfo_.mediaTemplate !== info.mediaTemplate) {\n this.templateInfo_.mediaTemplate = info.mediaTemplate;\n }\n\n // Append timeline\n let newEntries;\n if (currentTimeline.length) {\n const lastCurrentEntry = currentTimeline[currentTimeline.length - 1];\n newEntries = info.timeline.filter((entry) => {\n return entry.end > lastCurrentEntry.end;\n });\n } else {\n newEntries = info.timeline.slice();\n }\n\n if (newEntries.length > 0) {\n shaka.log.debug(`Appending ${newEntries.length} entries`);\n this.templateInfo_.timeline.push(...newEntries);\n }\n\n if (this.periodEnd_ !== periodEnd) {\n this.periodEnd_ = periodEnd;\n }\n }\n\n if (shouldFit) {\n this.fitTimeline();\n }\n }\n\n /**\n * Updates the init segment reference and propagates the update to all\n * references.\n * @param {shaka.media.InitSegmentReference} initSegmentReference\n */\n updateInitSegmentReference(initSegmentReference) {\n if (this.initSegmentReference_ === initSegmentReference) {\n return;\n }\n\n this.initSegmentReference_ = initSegmentReference;\n for (const reference of this.references) {\n if (reference) {\n reference.updateInitSegmentReference(initSegmentReference);\n }\n }\n }\n\n /**\n *\n * @param {number} time\n */\n isBeforeFirstEntry(time) {\n const hasTimeline = this.templateInfo_ &&\n this.templateInfo_.timeline && this.templateInfo_.timeline.length;\n\n if (hasTimeline) {\n const timeline = this.templateInfo_.timeline;\n return time < timeline[0].start + this.periodStart_;\n } else {\n return false;\n }\n }\n\n /**\n * Fit timeline entries to period boundaries\n */\n fitTimeline() {\n if (this.getIsImmutable()) {\n return;\n }\n const timeline = this.templateInfo_.timeline;\n while (timeline.length) {\n const lastTimePeriod = timeline[timeline.length - 1];\n if (lastTimePeriod.start >= this.periodEnd_) {\n timeline.pop();\n } else {\n break;\n }\n }\n\n this.evict(this.periodStart_);\n\n // Do NOT adjust last range to match period end! With high precision\n // timestamps several recalculations may give wrong results on less precise\n // platforms. To mitigate that, we're using cached |periodEnd_| value in\n // find/get() methods whenever possible.\n }\n\n /**\n * @override\n */\n find(time) {\n shaka.log.debug(`Find ${time}`);\n\n if (this.isBeforeFirstEntry(time)) {\n return this.numEvicted_;\n }\n\n if (!this.templateInfo_) {\n return null;\n }\n\n const timeline = this.templateInfo_.timeline;\n\n // Early exit if the time isn't within this period\n if (time < this.periodStart_ || time >= this.periodEnd_) {\n return null;\n }\n\n const lastIndex = timeline.length - 1;\n\n for (let i = 0; i < timeline.length; i++) {\n const range = timeline[i];\n const start = range.start + this.periodStart_;\n // A rounding error can cause /time/ to equal e.endTime or fall in between\n // the references by a fraction of a second. To account for this, we use\n // the start of the next segment as /end/, unless this is the last\n // reference, in which case we use the period end as the /end/\n let end;\n\n if (i < lastIndex) {\n end = timeline[i + 1].start + this.periodStart_;\n } else if (this.periodEnd_ === Infinity) {\n end = range.end + this.periodStart_;\n } else {\n end = this.periodEnd_;\n }\n\n if ((time >= start) && (time < end)) {\n return i + this.numEvicted_;\n }\n }\n\n return null;\n }\n\n /**\n * @override\n */\n get(position) {\n const correctedPosition = position - this.numEvicted_;\n if (correctedPosition < 0 ||\n correctedPosition >= this.getNumReferences() || !this.templateInfo_) {\n return null;\n }\n\n let ref = this.references[correctedPosition];\n\n if (!ref) {\n const range = this.templateInfo_.timeline[correctedPosition];\n const segmentReplacement = range.segmentPosition;\n const timeReplacement = this.templateInfo_\n .unscaledPresentationTimeOffset + range.unscaledStart;\n const timestampOffset = this.periodStart_ -\n this.templateInfo_.scaledPresentationTimeOffset;\n const trueSegmentEnd = this.periodStart_ + range.end;\n let segmentEnd = trueSegmentEnd;\n if (correctedPosition === this.getNumReferences() - 1 &&\n this.periodEnd_ !== Infinity) {\n segmentEnd = this.periodEnd_;\n }\n const codecs = this.templateInfo_.codecs;\n const mimeType = this.templateInfo_.mimeType;\n const bandwidth = this.templateInfo_.bandwidth;\n\n const partialSegmentRefs = [];\n\n const partialDuration = (range.end - range.start) / range.partialSegments;\n\n for (let i = 0; i < range.partialSegments; i++) {\n const start = range.start + partialDuration * i;\n const end = start + partialDuration;\n const subNumber = i + 1;\n let uris = null;\n const getPartialUris = () => {\n if (!this.templateInfo_) {\n return [];\n }\n if (uris == null) {\n uris = shaka.dash.TimelineSegmentIndex.createUris_(\n this.templateInfo_.mediaTemplate,\n this.representationId_,\n segmentReplacement,\n this.bandwidth_,\n timeReplacement,\n subNumber,\n this.getBaseUris_,\n this.urlParams_);\n }\n return uris;\n };\n const partial = new shaka.media.SegmentReference(\n this.periodStart_ + start,\n this.periodStart_ + end,\n getPartialUris,\n /* startByte= */ 0,\n /* endByte= */ null,\n this.initSegmentReference_,\n timestampOffset,\n this.periodStart_,\n this.periodEnd_,\n /* partialReferences= */ [],\n /* tilesLayout= */ '',\n /* tileDuration= */ null,\n /* syncTime= */ null,\n shaka.media.SegmentReference.Status.AVAILABLE,\n this.aesKey_);\n partial.codecs = codecs;\n partial.mimeType = mimeType;\n partial.bandwidth = bandwidth;\n if (this.segmentSequenceCadence_ == 0) {\n if (i > 0) {\n partial.markAsNonIndependent();\n }\n } else if ((i % this.segmentSequenceCadence_) != 0) {\n partial.markAsNonIndependent();\n }\n partialSegmentRefs.push(partial);\n }\n\n const createUrisCb = () => {\n if (range.partialSegments > 0 || !this.templateInfo_) {\n return [];\n }\n return shaka.dash.TimelineSegmentIndex\n .createUris_(\n this.templateInfo_.mediaTemplate,\n this.representationId_,\n segmentReplacement,\n this.bandwidth_,\n timeReplacement,\n /* subNumber= */ null,\n this.getBaseUris_,\n this.urlParams_,\n );\n };\n\n ref = new shaka.media.SegmentReference(\n this.periodStart_ + range.start,\n segmentEnd,\n createUrisCb,\n /* startByte= */ 0,\n /* endByte= */ null,\n this.initSegmentReference_,\n timestampOffset,\n this.periodStart_,\n this.periodEnd_,\n partialSegmentRefs,\n /* tilesLayout= */ '',\n /* tileDuration= */ null,\n /* syncTime= */ null,\n shaka.media.SegmentReference.Status.AVAILABLE,\n this.aesKey_,\n /* allPartialSegments= */ range.partialSegments > 0);\n ref.codecs = codecs;\n ref.mimeType = mimeType;\n ref.trueEndTime = trueSegmentEnd;\n ref.bandwidth = bandwidth;\n this.references[correctedPosition] = ref;\n }\n\n return ref;\n }\n\n /**\n * @override\n */\n forEachTopLevelReference(fn) {\n this.fitTimeline();\n for (let i = 0; i < this.getNumReferences(); i++) {\n const reference = this.get(i + this.numEvicted_);\n if (reference) {\n fn(reference);\n }\n }\n }\n\n /**\n * Fill in a specific template with values to get the segment uris\n *\n * @return {!Array.}\n * @private\n */\n static createUris_(mediaTemplate, repId, segmentReplacement,\n bandwidth, timeReplacement, subNumber, getBaseUris, urlParams) {\n const mediaUri = shaka.dash.MpdUtils.fillUriTemplate(\n mediaTemplate, repId,\n segmentReplacement, subNumber, bandwidth || null, timeReplacement);\n return shaka.util.ManifestParserUtils\n .resolveUris(getBaseUris(), [mediaUri], urlParams())\n .map((g) => {\n return g.toString();\n });\n }\n};\n\n/**\n * @typedef {{\n * timescale: number,\n * segmentDuration: ?number,\n * startNumber: number,\n * scaledPresentationTimeOffset: number,\n * unscaledPresentationTimeOffset: number,\n * timeline: Array.,\n * mediaTemplate: ?string,\n * indexTemplate: ?string,\n * mimeType: string,\n * codecs: string,\n * bandwidth: number,\n * numChunks: number\n * }}\n *\n * @description\n * Contains information about a SegmentTemplate.\n *\n * @property {number} timescale\n * The time-scale of the representation.\n * @property {?number} segmentDuration\n * The duration of the segments in seconds, if given.\n * @property {number} startNumber\n * The start number of the segments; 1 or greater.\n * @property {number} scaledPresentationTimeOffset\n * The presentation time offset of the representation, in seconds.\n * @property {number} unscaledPresentationTimeOffset\n * The presentation time offset of the representation, in timescale units.\n * @property {Array.} timeline\n * The timeline of the representation, if given. Times in seconds.\n * @property {?string} mediaTemplate\n * The media URI template, if given.\n * @property {?string} indexTemplate\n * The index URI template, if given.\n * @property {string} mimeType\n * The mimeType.\n * @property {string} codecs\n * The codecs.\n * @property {number} bandwidth\n * The bandwidth.\n * @property {number} numChunks\n * The number of chunks in each segment.\n */\nshaka.dash.SegmentTemplate.SegmentTemplateInfo;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.ContentSteeringManager');\n\ngoog.require('goog.Uri');\ngoog.require('shaka.media.ManifestParser');\ngoog.require('shaka.net.NetworkingEngine');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.IDestroyable');\ngoog.require('shaka.util.ManifestParserUtils');\ngoog.require('shaka.util.OperationManager');\ngoog.require('shaka.util.StringUtils');\ngoog.require('shaka.util.Timer');\n\n\n/**\n * Create a Content Steering manager.\n *\n * @implements {shaka.util.IDestroyable}\n */\nshaka.util.ContentSteeringManager = class {\n /**\n * @param {shaka.extern.ManifestParser.PlayerInterface} playerInterface\n */\n constructor(playerInterface) {\n /** @private {?shaka.extern.ManifestConfiguration} */\n this.config_ = null;\n\n /** @private {?shaka.extern.ManifestParser.PlayerInterface} */\n this.playerInterface_ = playerInterface;\n\n /** @private {!shaka.util.OperationManager} */\n this.operationManager_ = new shaka.util.OperationManager();\n\n /** @private {!Array.} */\n this.baseUris_ = [];\n\n /** @private {?string} */\n this.defaultPathwayId_ = null;\n\n /** @private {!Array.} */\n this.pathwayPriority_ = [];\n\n /** @private {?string} */\n this.lastPathwayUsed_ = null;\n\n /** @private {!Array.} */\n this.pathwayClones_ = [];\n\n /**\n * Default to 5 minutes. Value in seconds.\n *\n * @private {number}\n */\n this.lastTTL_ = 300;\n\n /** @private {!Map.<(string|number), !Map.>} */\n this.locations_ = new Map();\n\n /** @private {!Map.} */\n this.bannedLocations_ = new Map();\n\n /** @private {?shaka.util.Timer} */\n this.updateTimer_ = null;\n\n /** @private {string} */\n this.manifestType_ = shaka.media.ManifestParser.UNKNOWN;\n }\n\n /**\n * @param {shaka.extern.ManifestConfiguration} config\n */\n configure(config) {\n this.config_ = config;\n }\n\n\n /** @override */\n destroy() {\n this.config_ = null;\n this.playerInterface_ = null;\n this.baseUris_ = [];\n this.defaultPathwayId_ = null;\n this.pathwayPriority_ = [];\n this.pathwayClones_ = [];\n this.locations_.clear();\n\n if (this.updateTimer_ != null) {\n this.updateTimer_.stop();\n this.updateTimer_ = null;\n }\n\n return this.operationManager_.destroy();\n }\n\n /**\n * @param {string} manifestType\n */\n setManifestType(manifestType) {\n this.manifestType_ = manifestType;\n }\n\n /**\n * @param {!Array.} baseUris\n */\n setBaseUris(baseUris) {\n this.baseUris_ = baseUris;\n }\n\n /**\n * @param {?string} defaultPathwayId\n */\n setDefaultPathwayId(defaultPathwayId) {\n this.defaultPathwayId_ = defaultPathwayId;\n }\n\n /**\n * Request the Content Steering info.\n *\n * @param {string} uri\n * @return {!Promise}\n */\n async requestInfo(uri) {\n const uris = shaka.util.ManifestParserUtils.resolveUris(\n this.baseUris_, [this.addQueryParams_(uri)]);\n const type = shaka.net.NetworkingEngine.RequestType.CONTENT_STEERING;\n const request = shaka.net.NetworkingEngine.makeRequest(\n uris, this.config_.retryParameters);\n\n const op = this.playerInterface_.networkingEngine.request(type, request);\n this.operationManager_.manage(op);\n try {\n const response = await op.promise;\n const str = shaka.util.StringUtils.fromUTF8(response.data);\n const steeringManifest =\n /** @type {shaka.util.ContentSteeringManager.SteeringManifest} */\n (JSON.parse(str));\n if (steeringManifest.VERSION == 1) {\n this.processManifest_(steeringManifest, response.uri);\n }\n } catch (e) {\n if (e && e.code == shaka.util.Error.Code.OPERATION_ABORTED) {\n return;\n }\n if (this.updateTimer_ != null) {\n this.updateTimer_.stop();\n this.updateTimer_ = null;\n }\n this.updateTimer_ = new shaka.util.Timer(() => {\n this.requestInfo(uri);\n });\n this.updateTimer_.tickAfter(this.lastTTL_);\n }\n }\n\n /** @private */\n addQueryParams_(uri) {\n if (!this.pathwayPriority_.length) {\n return uri;\n }\n const finalUri = new goog.Uri(uri);\n const currentPathwayID = this.lastPathwayUsed_ || this.pathwayPriority_[0];\n const currentBandwidth =\n Math.round(this.playerInterface_.getBandwidthEstimate());\n const queryData = finalUri.getQueryData();\n if (this.manifestType_ == shaka.media.ManifestParser.DASH) {\n queryData.add('_DASH_pathway', currentPathwayID);\n queryData.add('_DASH_throughput', String(currentBandwidth));\n } else if (this.manifestType_ == shaka.media.ManifestParser.HLS) {\n queryData.add('_HLS_pathway', currentPathwayID);\n queryData.add('_HLS_throughput', String(currentBandwidth));\n }\n if (queryData.getCount()) {\n finalUri.setQueryData(queryData);\n }\n return finalUri.toString();\n }\n\n /**\n * @param {shaka.util.ContentSteeringManager.SteeringManifest} manifest\n * @param {string} finalManifestUri\n * @private\n */\n processManifest_(manifest, finalManifestUri) {\n if (this.updateTimer_ != null) {\n this.updateTimer_.stop();\n this.updateTimer_ = null;\n }\n const uri = manifest['RELOAD-URI'] || finalManifestUri;\n this.updateTimer_ = new shaka.util.Timer(() => {\n this.requestInfo(uri);\n });\n const newTTL = manifest['TTL'];\n if (newTTL) {\n this.lastTTL_ = newTTL;\n }\n this.updateTimer_.tickAfter(this.lastTTL_);\n this.pathwayPriority_ = manifest['PATHWAY-PRIORITY'] || [];\n this.pathwayClones_ = manifest['PATHWAY-CLONES'] || [];\n }\n\n /**\n * Clear the previous locations added.\n */\n clearPreviousLocations() {\n this.locations_.clear();\n }\n\n /**\n * @param {string|number} streamId\n * @param {string} pathwayId\n * @param {string} uri\n */\n addLocation(streamId, pathwayId, uri) {\n let streamLocations = this.locations_.get(streamId);\n if (!streamLocations) {\n streamLocations = new Map();\n }\n streamLocations.set(pathwayId, uri);\n this.locations_.set(streamId, streamLocations);\n }\n\n /**\n * @param {string} uri\n */\n banLocation(uri) {\n const bannedUntil = Date.now() + 60000;\n this.bannedLocations_.set(uri, bannedUntil);\n }\n\n /**\n * Get the base locations ordered according the priority.\n *\n * @param {string|number} streamId\n * @param {boolean=} ignoreBaseUrls\n * @return {!Array.}\n */\n getLocations(streamId, ignoreBaseUrls = false) {\n const streamLocations = this.locations_.get(streamId) || new Map();\n /** @type {!Array.} */\n let locationsPathwayIdMap = [];\n for (const pathwayId of this.pathwayPriority_) {\n const location = streamLocations.get(pathwayId);\n if (location) {\n locationsPathwayIdMap.push({pathwayId, location});\n } else {\n const clone = this.pathwayClones_.find((c) => c.ID == pathwayId);\n if (clone) {\n const cloneLocation = streamLocations.get(clone['BASE-ID']);\n if (cloneLocation) {\n if (clone['URI-REPLACEMENT'].HOST) {\n const uri = new goog.Uri(cloneLocation);\n uri.setDomain(clone['URI-REPLACEMENT'].HOST);\n locationsPathwayIdMap.push({\n pathwayId: pathwayId,\n location: uri.toString(),\n });\n } else {\n locationsPathwayIdMap.push({\n pathwayId: pathwayId,\n location: cloneLocation,\n });\n }\n }\n }\n }\n }\n\n const now = Date.now();\n for (const uri of this.bannedLocations_.keys()) {\n const bannedUntil = this.bannedLocations_.get(uri);\n if (now > bannedUntil) {\n this.bannedLocations_.delete(uri);\n }\n }\n locationsPathwayIdMap = locationsPathwayIdMap.filter((l) => {\n for (const uri of this.bannedLocations_.keys()) {\n if (uri.includes(new goog.Uri(l.location).getDomain())) {\n return false;\n }\n }\n return true;\n });\n\n if (locationsPathwayIdMap.length) {\n this.lastPathwayUsed_ = locationsPathwayIdMap[0].pathwayId;\n }\n\n const locations = locationsPathwayIdMap.map((l) => l.location);\n\n if (!locations.length && this.defaultPathwayId_) {\n for (const pathwayId of this.defaultPathwayId_.split(',')) {\n const location = streamLocations.get(pathwayId);\n if (location) {\n this.lastPathwayUsed_ = this.defaultPathwayId_;\n locations.push(location);\n }\n }\n }\n if (!locations.length) {\n for (const location of streamLocations.values()) {\n locations.push(location);\n }\n }\n if (ignoreBaseUrls) {\n return locations;\n }\n return shaka.util.ManifestParserUtils.resolveUris(\n this.baseUris_, locations);\n }\n};\n\n\n/**\n * @typedef {{\n * VERSION: number,\n * TTL: number,\n * RELOAD-URI: string,\n * PATHWAY-PRIORITY: !Array.,\n * PATHWAY-CLONES: !Array.\n * }}\n *\n * @description\n * Contains information about the Steering Manifest\n *\n * @property {string} VERSION\n * @property {number} TTL\n * @property {string RELOAD-URI\n * @property {!Array.} PATHWAY-PRIORITY\n * @property {!Array.<\n * shaka.util.ContentSteeringManager.PathawayClone>} PATHWAY-CLONES\n */\nshaka.util.ContentSteeringManager.SteeringManifest;\n\n\n/**\n * @typedef {{\n * BASE-ID: string,\n * ID: string,\n * URI-REPLACEMENT: !Array.\n * }}\n *\n * @property {string} BASE-ID\n * @property {string} ID\n * @property {!Array.<\n * shaka.util.ContentSteeringManager.UriReplacement>} URI-REPLACEMENT\n */\nshaka.util.ContentSteeringManager.PathawayClone;\n\n\n/**\n * @typedef {{\n * HOST: string\n * }}\n *\n * @property {string} HOST\n */\nshaka.util.ContentSteeringManager.UriReplacement;\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.PeriodCombiner');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.media.MetaSegmentIndex');\ngoog.require('shaka.media.SegmentIndex');\ngoog.require('shaka.util.DrmUtils');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.IReleasable');\ngoog.require('shaka.util.LanguageUtils');\ngoog.require('shaka.util.ManifestParserUtils');\ngoog.require('shaka.util.MimeUtils');\n\n/**\n * A utility to combine streams across periods.\n *\n * @implements {shaka.util.IReleasable}\n * @final\n * @export\n */\nshaka.util.PeriodCombiner = class {\n /** */\n constructor() {\n /** @private {!Array.} */\n this.variants_ = [];\n\n /** @private {!Array.} */\n this.audioStreams_ = [];\n\n /** @private {!Array.} */\n this.videoStreams_ = [];\n\n /** @private {!Array.} */\n this.textStreams_ = [];\n\n /** @private {!Array.} */\n this.imageStreams_ = [];\n\n /** @private {boolean} */\n this.multiTypeVariantsAllowed_ = false;\n\n /** @private {boolean} */\n this.useStreamOnce_ = false;\n\n /**\n * The IDs of the periods we have already used to generate streams.\n * This helps us identify the periods which have been added when a live\n * stream is updated.\n *\n * @private {!Set.}\n */\n this.usedPeriodIds_ = new Set();\n }\n\n /** @override */\n release() {\n const allStreams =\n this.audioStreams_.concat(this.videoStreams_, this.textStreams_,\n this.imageStreams_);\n\n for (const stream of allStreams) {\n if (stream.segmentIndex) {\n stream.segmentIndex.release();\n }\n }\n\n this.audioStreams_ = [];\n this.videoStreams_ = [];\n this.textStreams_ = [];\n this.imageStreams_ = [];\n this.variants_ = [];\n this.multiTypeVariantsAllowed_ = false;\n this.useStreamOnce_ = false;\n this.usedPeriodIds_.clear();\n }\n\n /**\n * @return {!Array.}\n *\n * @export\n */\n getVariants() {\n return this.variants_;\n }\n\n /**\n * @return {!Array.}\n *\n * @export\n */\n getTextStreams() {\n // Return a copy of the array because makeTextStreamsForClosedCaptions\n // may make changes to the contents of the array. Those changes should not\n // propagate back to the PeriodCombiner.\n return this.textStreams_.slice();\n }\n\n /**\n * @return {!Array.}\n *\n * @export\n */\n getImageStreams() {\n return this.imageStreams_;\n }\n\n /**\n * Deletes a stream from matchedStreams because it is no longer needed\n *\n * @param {?shaka.extern.Stream} stream\n * @param {string} periodId\n *\n * @export\n */\n deleteStream(stream, periodId) {\n if (!stream) {\n return;\n }\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n if (stream.type == ContentType.AUDIO) {\n for (const audioStream of this.audioStreams_) {\n audioStream.matchedStreams = audioStream.matchedStreams.filter((s) => {\n return s !== stream;\n });\n }\n } else if (stream.type == ContentType.VIDEO) {\n for (const videoStream of this.videoStreams_) {\n videoStream.matchedStreams = videoStream.matchedStreams.filter((s) => {\n return s !== stream;\n });\n if (videoStream.trickModeVideo) {\n videoStream.trickModeVideo.matchedStreams =\n videoStream.trickModeVideo.matchedStreams.filter((s) => {\n return s !== stream;\n });\n }\n }\n } else if (stream.type == ContentType.TEXT) {\n for (const textStream of this.textStreams_) {\n textStream.matchedStreams = textStream.matchedStreams.filter((s) => {\n return s !== stream;\n });\n }\n } else if (stream.type == ContentType.IMAGE) {\n for (const imageStream of this.imageStreams_) {\n imageStream.matchedStreams = imageStream.matchedStreams.filter((s) => {\n return s !== stream;\n });\n }\n }\n if (stream.segmentIndex) {\n stream.closeSegmentIndex();\n }\n this.usedPeriodIds_.delete(periodId);\n }\n\n /**\n * Returns an object that contains arrays of streams by type\n * @param {!Array} periods\n * @param {boolean} addDummy\n * @return {{\n * audioStreamsPerPeriod: !Array>,\n * videoStreamsPerPeriod: !Array>,\n * textStreamsPerPeriod: !Array>,\n * imageStreamsPerPeriod: !Array>\n * }}\n * @private\n */\n getStreamsPerPeriod_(periods, addDummy) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const PeriodCombiner = shaka.util.PeriodCombiner;\n\n const audioStreamsPerPeriod = [];\n const videoStreamsPerPeriod = [];\n const textStreamsPerPeriod = [];\n const imageStreamsPerPeriod = [];\n\n for (const period of periods) {\n const audioMap = new Map(period.audioStreams.map((s) =>\n [PeriodCombiner.generateAudioKey_(s), s]));\n const videoMap = new Map(period.videoStreams.map((s) =>\n [PeriodCombiner.generateVideoKey_(s), s]));\n const textMap = new Map(period.textStreams.map((s) =>\n [PeriodCombiner.generateTextKey_(s), s]));\n const imageMap = new Map(period.imageStreams.map((s) =>\n [PeriodCombiner.generateImageKey_(s), s]));\n\n // It's okay to have a period with no text or images, but our algorithm\n // fails on any period without matching streams. So we add dummy streams\n // to each period. Since we combine text streams by language and image\n // streams by resolution, we might need a dummy even in periods with these\n // streams already.\n if (addDummy) {\n const dummyText = PeriodCombiner.dummyStream_(ContentType.TEXT);\n textMap.set(PeriodCombiner.generateTextKey_(dummyText), dummyText);\n const dummyImage = PeriodCombiner.dummyStream_(ContentType.IMAGE);\n imageMap.set(PeriodCombiner.generateImageKey_(dummyImage), dummyImage);\n }\n\n audioStreamsPerPeriod.push(audioMap);\n videoStreamsPerPeriod.push(videoMap);\n textStreamsPerPeriod.push(textMap);\n imageStreamsPerPeriod.push(imageMap);\n }\n return {\n audioStreamsPerPeriod,\n videoStreamsPerPeriod,\n textStreamsPerPeriod,\n imageStreamsPerPeriod,\n };\n }\n\n /**\n * @param {!Array.} periods\n * @param {boolean} isDynamic\n * @param {boolean=} isPatchUpdate\n * @return {!Promise}\n *\n * @export\n */\n async combinePeriods(periods, isDynamic, isPatchUpdate = false) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n // Optimization: for single-period VOD, do nothing. This makes sure\n // single-period DASH content will be 100% accurately represented in the\n // output.\n if (!isDynamic && periods.length == 1) {\n // We need to filter out duplicates, so call getStreamsPerPeriod()\n // so it will do that by usage of Map.\n const {\n audioStreamsPerPeriod,\n videoStreamsPerPeriod,\n textStreamsPerPeriod,\n imageStreamsPerPeriod,\n } = this.getStreamsPerPeriod_(periods, /* addDummy= */ false);\n this.audioStreams_ = Array.from(audioStreamsPerPeriod[0].values());\n this.videoStreams_ = Array.from(videoStreamsPerPeriod[0].values());\n this.textStreams_ = Array.from(textStreamsPerPeriod[0].values());\n this.imageStreams_ = Array.from(imageStreamsPerPeriod[0].values());\n } else {\n // How many periods we've seen before which are not included in this call.\n const periodsMissing = isPatchUpdate ? this.usedPeriodIds_.size : 0;\n // Find the first period we haven't seen before. Tag all the periods we\n // see now as \"used\".\n let firstNewPeriodIndex = -1;\n for (let i = 0; i < periods.length; i++) {\n const period = periods[i];\n if (this.usedPeriodIds_.has(period.id)) {\n // This isn't new.\n } else {\n // This one _is_ new.\n this.usedPeriodIds_.add(period.id);\n\n if (firstNewPeriodIndex == -1) {\n // And it's the _first_ new one.\n firstNewPeriodIndex = i;\n }\n }\n }\n\n if (firstNewPeriodIndex == -1) {\n // Nothing new? Nothing to do.\n return;\n }\n\n const {\n audioStreamsPerPeriod,\n videoStreamsPerPeriod,\n textStreamsPerPeriod,\n imageStreamsPerPeriod,\n } = this.getStreamsPerPeriod_(periods, /* addDummy= */ true);\n\n await Promise.all([\n this.combine_(\n this.audioStreams_,\n audioStreamsPerPeriod,\n firstNewPeriodIndex,\n shaka.util.PeriodCombiner.cloneStream_,\n shaka.util.PeriodCombiner.concatenateStreams_,\n periodsMissing),\n this.combine_(\n this.videoStreams_,\n videoStreamsPerPeriod,\n firstNewPeriodIndex,\n shaka.util.PeriodCombiner.cloneStream_,\n shaka.util.PeriodCombiner.concatenateStreams_,\n periodsMissing),\n this.combine_(\n this.textStreams_,\n textStreamsPerPeriod,\n firstNewPeriodIndex,\n shaka.util.PeriodCombiner.cloneStream_,\n shaka.util.PeriodCombiner.concatenateStreams_,\n periodsMissing),\n this.combine_(\n this.imageStreams_,\n imageStreamsPerPeriod,\n firstNewPeriodIndex,\n shaka.util.PeriodCombiner.cloneStream_,\n shaka.util.PeriodCombiner.concatenateStreams_,\n periodsMissing),\n ]);\n }\n\n // Create variants for all audio/video combinations.\n let nextVariantId = 0;\n const variants = [];\n if (!this.videoStreams_.length || !this.audioStreams_.length) {\n // For audio-only or video-only content, just give each stream its own\n // variant.\n const streams = this.videoStreams_.length ? this.videoStreams_ :\n this.audioStreams_;\n for (const stream of streams) {\n const id = nextVariantId++;\n variants.push({\n id,\n language: stream.language,\n disabledUntilTime: 0,\n primary: stream.primary,\n audio: stream.type == ContentType.AUDIO ? stream : null,\n video: stream.type == ContentType.VIDEO ? stream : null,\n bandwidth: stream.bandwidth || 0,\n drmInfos: stream.drmInfos,\n allowedByApplication: true,\n allowedByKeySystem: true,\n decodingInfos: [],\n });\n }\n } else {\n for (const audio of this.audioStreams_) {\n for (const video of this.videoStreams_) {\n const commonDrmInfos = shaka.util.DrmUtils.getCommonDrmInfos(\n audio.drmInfos, video.drmInfos);\n\n if (audio.drmInfos.length && video.drmInfos.length &&\n !commonDrmInfos.length) {\n shaka.log.warning(\n 'Incompatible DRM in audio & video, skipping variant creation.',\n audio, video);\n continue;\n }\n\n const id = nextVariantId++;\n variants.push({\n id,\n language: audio.language,\n disabledUntilTime: 0,\n primary: audio.primary,\n audio,\n video,\n bandwidth: (audio.bandwidth || 0) + (video.bandwidth || 0),\n drmInfos: commonDrmInfos,\n allowedByApplication: true,\n allowedByKeySystem: true,\n decodingInfos: [],\n });\n }\n }\n }\n\n this.variants_ = variants;\n }\n\n\n /**\n * Stitch together DB streams across periods, taking a mix of stream types.\n * The offline database does not separate these by type.\n *\n * Unlike the DASH case, this does not need to maintain any state for manifest\n * updates.\n *\n * @param {!Array.>} streamDbsPerPeriod\n * @return {!Promise.>}\n */\n static async combineDbStreams(streamDbsPerPeriod) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const PeriodCombiner = shaka.util.PeriodCombiner;\n\n // Optimization: for single-period content, do nothing. This makes sure\n // single-period DASH or any HLS content stored offline will be 100%\n // accurately represented in the output.\n if (streamDbsPerPeriod.length == 1) {\n return streamDbsPerPeriod[0];\n }\n\n const audioStreamDbsPerPeriod = streamDbsPerPeriod.map(\n (streams) => new Map(streams\n .filter((s) => s.type === ContentType.AUDIO)\n .map((s) => [PeriodCombiner.generateAudioKey_(s), s])));\n const videoStreamDbsPerPeriod = streamDbsPerPeriod.map(\n (streams) => new Map(streams\n .filter((s) => s.type === ContentType.VIDEO)\n .map((s) => [PeriodCombiner.generateVideoKey_(s), s])));\n const textStreamDbsPerPeriod = streamDbsPerPeriod.map(\n (streams) => new Map(streams\n .filter((s) => s.type === ContentType.TEXT)\n .map((s) => [PeriodCombiner.generateTextKey_(s), s])));\n const imageStreamDbsPerPeriod = streamDbsPerPeriod.map(\n (streams) => new Map(streams\n .filter((s) => s.type === ContentType.IMAGE)\n .map((s) => [PeriodCombiner.generateImageKey_(s), s])));\n\n // It's okay to have a period with no text or images, but our algorithm\n // fails on any period without matching streams. So we add dummy streams to\n // each period. Since we combine text streams by language and image streams\n // by resolution, we might need a dummy even in periods with these streams\n // already.\n for (const textStreams of textStreamDbsPerPeriod) {\n const dummy = PeriodCombiner.dummyStreamDB_(ContentType.TEXT);\n textStreams.set(PeriodCombiner.generateTextKey_(dummy), dummy);\n }\n for (const imageStreams of imageStreamDbsPerPeriod) {\n const dummy = PeriodCombiner.dummyStreamDB_(ContentType.IMAGE);\n imageStreams.set(PeriodCombiner.generateImageKey_(dummy), dummy);\n }\n\n const periodCombiner = new shaka.util.PeriodCombiner();\n\n const combinedAudioStreamDbs = await periodCombiner.combine_(\n /* outputStreams= */ [],\n audioStreamDbsPerPeriod,\n /* firstNewPeriodIndex= */ 0,\n shaka.util.PeriodCombiner.cloneStreamDB_,\n shaka.util.PeriodCombiner.concatenateStreamDBs_,\n /* periodsMissing= */ 0);\n\n const combinedVideoStreamDbs = await periodCombiner.combine_(\n /* outputStreams= */ [],\n videoStreamDbsPerPeriod,\n /* firstNewPeriodIndex= */ 0,\n shaka.util.PeriodCombiner.cloneStreamDB_,\n shaka.util.PeriodCombiner.concatenateStreamDBs_,\n /* periodsMissing= */ 0);\n\n const combinedTextStreamDbs = await periodCombiner.combine_(\n /* outputStreams= */ [],\n textStreamDbsPerPeriod,\n /* firstNewPeriodIndex= */ 0,\n shaka.util.PeriodCombiner.cloneStreamDB_,\n shaka.util.PeriodCombiner.concatenateStreamDBs_,\n /* periodsMissing= */ 0);\n\n const combinedImageStreamDbs = await periodCombiner.combine_(\n /* outputStreams= */ [],\n imageStreamDbsPerPeriod,\n /* firstNewPeriodIndex= */ 0,\n shaka.util.PeriodCombiner.cloneStreamDB_,\n shaka.util.PeriodCombiner.concatenateStreamDBs_,\n /* periodsMissing= */ 0);\n\n // Recreate variantIds from scratch in the output.\n // HLS content is always single-period, so the early return at the top of\n // this method would catch all HLS content. DASH content stored with v3.0\n // will already be flattened before storage. Therefore the only content\n // that reaches this point is multi-period DASH content stored before v3.0.\n // Such content always had variants generated from all combinations of audio\n // and video, so we can simply do that now without loss of correctness.\n let nextVariantId = 0;\n if (!combinedVideoStreamDbs.length || !combinedAudioStreamDbs.length) {\n // For audio-only or video-only content, just give each stream its own\n // variant ID.\n const combinedStreamDbs =\n combinedVideoStreamDbs.concat(combinedAudioStreamDbs);\n for (const stream of combinedStreamDbs) {\n stream.variantIds = [nextVariantId++];\n }\n } else {\n for (const audio of combinedAudioStreamDbs) {\n for (const video of combinedVideoStreamDbs) {\n const id = nextVariantId++;\n video.variantIds.push(id);\n audio.variantIds.push(id);\n }\n }\n }\n\n return combinedVideoStreamDbs\n .concat(combinedAudioStreamDbs)\n .concat(combinedTextStreamDbs)\n .concat(combinedImageStreamDbs);\n }\n\n /**\n * Combine input Streams per period into flat output Streams.\n * Templatized to handle both DASH Streams and offline StreamDBs.\n *\n * @param {!Array.} outputStreams A list of existing output streams, to\n * facilitate updates for live DASH content. Will be modified and returned.\n * @param {!Array>} streamsPerPeriod A list of maps of Streams\n * from each period.\n * @param {number} firstNewPeriodIndex An index into streamsPerPeriod which\n * represents the first new period that hasn't been processed yet.\n * @param {function(T):T} clone Make a clone of an input stream.\n * @param {function(T, T)} concat Concatenate the second stream onto the end\n * of the first.\n * @param {number} periodsMissing The number of periods missing\n *\n * @return {!Promise.>} The same array passed to outputStreams,\n * modified to include any newly-created streams.\n *\n * @template T\n * Accepts either a StreamDB or Stream type.\n *\n * @private\n */\n async combine_(\n outputStreams, streamsPerPeriod, firstNewPeriodIndex, clone, concat,\n periodsMissing) {\n const unusedStreamsPerPeriod = [];\n\n for (let i = 0; i < streamsPerPeriod.length; i++) {\n if (i >= firstNewPeriodIndex) {\n // This periods streams are all new.\n unusedStreamsPerPeriod.push(new Set(streamsPerPeriod[i].values()));\n } else {\n // This period's streams have all been used already.\n unusedStreamsPerPeriod.push(new Set());\n }\n }\n\n // First, extend all existing output Streams into the new periods.\n for (const outputStream of outputStreams) {\n // eslint-disable-next-line no-await-in-loop\n const ok = await this.extendExistingOutputStream_(\n outputStream, streamsPerPeriod, firstNewPeriodIndex, concat,\n unusedStreamsPerPeriod, periodsMissing);\n if (!ok) {\n // This output Stream was not properly extended to include streams from\n // the new period. This is likely a bug in our algorithm, so throw an\n // error.\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.PERIOD_FLATTENING_FAILED);\n }\n\n // This output stream is now complete with content from all known\n // periods.\n } // for (const outputStream of outputStreams)\n\n for (const unusedStreams of unusedStreamsPerPeriod) {\n for (const stream of unusedStreams) {\n // Create a new output stream which includes this input stream.\n const outputStream = this.createNewOutputStream_(\n stream, streamsPerPeriod, clone, concat,\n unusedStreamsPerPeriod);\n if (outputStream) {\n outputStreams.push(outputStream);\n } else {\n // This is not a stream we can build output from, but it may become\n // part of another output based on another period's stream.\n }\n } // for (const stream of unusedStreams)\n } // for (const unusedStreams of unusedStreamsPerPeriod)\n\n for (const unusedStreams of unusedStreamsPerPeriod) {\n for (const stream of unusedStreams) {\n if (shaka.util.PeriodCombiner.isDummy_(stream)) {\n // This is one of our dummy streams, so ignore it. We may not use\n // them all, and that's fine.\n continue;\n }\n // If this stream has a different codec/MIME than any other stream,\n // then we can't play it.\n const hasCodec = outputStreams.some((s) => {\n return this.areAVStreamsCompatible_(stream, s);\n });\n if (!hasCodec) {\n continue;\n }\n\n // Any other unused stream is likely a bug in our algorithm, so throw\n // an error.\n shaka.log.error('Unused stream in period-flattening!',\n stream, outputStreams);\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.PERIOD_FLATTENING_FAILED);\n }\n }\n\n return outputStreams;\n }\n\n /**\n * @param {T} outputStream An existing output stream which needs to be\n * extended into new periods.\n * @param {!Array>} streamsPerPeriod A list of maps of Streams\n * from each period.\n * @param {number} firstNewPeriodIndex An index into streamsPerPeriod which\n * represents the first new period that hasn't been processed yet.\n * @param {function(T, T)} concat Concatenate the second stream onto the end\n * of the first.\n * @param {!Array.>} unusedStreamsPerPeriod An array of sets of\n * unused streams from each period.\n * @param {number} periodsMissing How many periods are missing in this update.\n *\n * @return {!Promise.}\n *\n * @template T\n * Should only be called with a Stream type in practice, but has call sites\n * from other templated functions that also accept a StreamDB.\n *\n * @private\n */\n async extendExistingOutputStream_(\n outputStream, streamsPerPeriod, firstNewPeriodIndex, concat,\n unusedStreamsPerPeriod, periodsMissing) {\n this.findMatchesInAllPeriods_(streamsPerPeriod,\n outputStream, periodsMissing > 0);\n\n // This only exists where T == Stream, and this should only ever be called\n // on Stream types. StreamDB should not have pre-existing output streams.\n goog.asserts.assert(outputStream.createSegmentIndex,\n 'outputStream should be a Stream type!');\n\n if (!outputStream.matchedStreams) {\n // We were unable to extend this output stream.\n shaka.log.error('No matches extending output stream!',\n outputStream, streamsPerPeriod);\n return false;\n }\n // We need to create all the per-period segment indexes and append them to\n // the output's MetaSegmentIndex.\n if (outputStream.segmentIndex) {\n await shaka.util.PeriodCombiner.extendOutputSegmentIndex_(outputStream,\n firstNewPeriodIndex + periodsMissing);\n }\n\n shaka.util.PeriodCombiner.extendOutputStream_(outputStream,\n firstNewPeriodIndex, concat, unusedStreamsPerPeriod, periodsMissing);\n return true;\n }\n\n /**\n * Creates the segment indexes for an array of input streams, and append them\n * to the output stream's segment index.\n *\n * @param {shaka.extern.Stream} outputStream\n * @param {number} firstNewPeriodIndex An index into streamsPerPeriod which\n * represents the first new period that hasn't been processed yet.\n * @private\n */\n static async extendOutputSegmentIndex_(outputStream, firstNewPeriodIndex) {\n const operations = [];\n const streams = outputStream.matchedStreams;\n goog.asserts.assert(streams, 'matched streams should be valid');\n\n for (let i = firstNewPeriodIndex; i < streams.length; i++) {\n const stream = streams[i];\n operations.push(stream.createSegmentIndex());\n if (stream.trickModeVideo && !stream.trickModeVideo.segmentIndex) {\n operations.push(stream.trickModeVideo.createSegmentIndex());\n }\n }\n await Promise.all(operations);\n\n // Concatenate the new matches onto the stream, starting at the first new\n // period.\n // Satisfy the compiler about the type.\n // Also checks if the segmentIndex is still valid after the async\n // operations, to make sure we stop if the active stream has changed.\n if (outputStream.segmentIndex instanceof shaka.media.MetaSegmentIndex) {\n for (let i = firstNewPeriodIndex; i < streams.length; i++) {\n const match = streams[i];\n goog.asserts.assert(match.segmentIndex,\n 'stream should have a segmentIndex.');\n if (match.segmentIndex) {\n outputStream.segmentIndex.appendSegmentIndex(match.segmentIndex);\n }\n }\n }\n }\n\n /**\n * Create a new output Stream based on a particular input Stream. Locates\n * matching Streams in all other periods and combines them into an output\n * Stream.\n * Templatized to handle both DASH Streams and offline StreamDBs.\n *\n * @param {T} stream An input stream on which to base the output stream.\n * @param {!Array>} streamsPerPeriod A list of maps of Streams\n * from each period.\n * @param {function(T):T} clone Make a clone of an input stream.\n * @param {function(T, T)} concat Concatenate the second stream onto the end\n * of the first.\n * @param {!Array.>} unusedStreamsPerPeriod An array of sets of\n * unused streams from each period.\n *\n * @return {?T} A newly-created output Stream, or null if matches\n * could not be found.`\n *\n * @template T\n * Accepts either a StreamDB or Stream type.\n *\n * @private\n */\n createNewOutputStream_(\n stream, streamsPerPeriod, clone, concat, unusedStreamsPerPeriod) {\n // Check do we want to create output stream from dummy stream\n // and if so, return quickly.\n if (shaka.util.PeriodCombiner.isDummy_(stream)) {\n return null;\n }\n // Start by cloning the stream without segments, key IDs, etc.\n const outputStream = clone(stream);\n\n // Find best-matching streams in all periods.\n this.findMatchesInAllPeriods_(streamsPerPeriod, outputStream);\n\n // This only exists where T == Stream.\n if (outputStream.createSegmentIndex) {\n // Override the createSegmentIndex function of the outputStream.\n outputStream.createSegmentIndex = async () => {\n if (!outputStream.segmentIndex) {\n outputStream.segmentIndex = new shaka.media.MetaSegmentIndex();\n await shaka.util.PeriodCombiner.extendOutputSegmentIndex_(\n outputStream, /* firstNewPeriodIndex= */ 0);\n }\n };\n // For T == Stream, we need to create all the per-period segment indexes\n // in advance. concat() will add them to the output's MetaSegmentIndex.\n }\n\n if (!outputStream.matchedStreams || !outputStream.matchedStreams.length) {\n // This is not a stream we can build output from, but it may become part\n // of another output based on another period's stream.\n return null;\n }\n shaka.util.PeriodCombiner.extendOutputStream_(outputStream,\n /* firstNewPeriodIndex= */ 0, concat, unusedStreamsPerPeriod,\n /* periodsMissing= */ 0);\n\n return outputStream;\n }\n\n /**\n * @param {T} outputStream An existing output stream which needs to be\n * extended into new periods.\n * @param {number} firstNewPeriodIndex An index into streamsPerPeriod which\n * represents the first new period that hasn't been processed yet.\n * @param {function(T, T)} concat Concatenate the second stream onto the end\n * of the first.\n * @param {!Array.>} unusedStreamsPerPeriod An array of sets of\n * unused streams from each period.\n * @param {number} periodsMissing How many periods are missing in this update\n *\n * @template T\n * Accepts either a StreamDB or Stream type.\n *\n * @private\n */\n static extendOutputStream_(\n outputStream, firstNewPeriodIndex, concat, unusedStreamsPerPeriod,\n periodsMissing) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const LanguageUtils = shaka.util.LanguageUtils;\n const matches = outputStream.matchedStreams;\n\n // Assure the compiler that matches didn't become null during the async\n // operation before.\n goog.asserts.assert(outputStream.matchedStreams,\n 'matchedStreams should be non-null');\n\n // Concatenate the new matches onto the stream, starting at the first new\n // period.\n const start = firstNewPeriodIndex + periodsMissing;\n for (let i = start; i < matches.length; i++) {\n const match = matches[i];\n concat(outputStream, match);\n\n // We only consider an audio stream \"used\" if its language is related to\n // the output language. There are scenarios where we want to generate\n // separate tracks for each language, even when we are forced to connect\n // unrelated languages across periods.\n let used = true;\n if (outputStream.type == ContentType.AUDIO) {\n const relatedness = LanguageUtils.relatedness(\n outputStream.language, match.language);\n if (relatedness == 0) {\n used = false;\n }\n }\n\n if (used) {\n unusedStreamsPerPeriod[i - periodsMissing].delete(match);\n // Add the full mimetypes to the stream.\n if (match.fullMimeTypes) {\n for (const fullMimeType of match.fullMimeTypes.values()) {\n outputStream.fullMimeTypes.add(fullMimeType);\n }\n }\n }\n }\n }\n\n /**\n * Clone a Stream to make an output Stream for combining others across\n * periods.\n *\n * @param {shaka.extern.Stream} stream\n * @return {shaka.extern.Stream}\n * @private\n */\n static cloneStream_(stream) {\n const clone = /** @type {shaka.extern.Stream} */(Object.assign({}, stream));\n\n // These are wiped out now and rebuilt later from the various per-period\n // streams that match this output.\n clone.originalId = null;\n clone.createSegmentIndex = () => Promise.resolve();\n clone.closeSegmentIndex = () => {\n if (clone.segmentIndex) {\n clone.segmentIndex.release();\n clone.segmentIndex = null;\n }\n // Close the segment index of the matched streams.\n if (clone.matchedStreams) {\n for (const match of clone.matchedStreams) {\n if (match.segmentIndex) {\n match.segmentIndex.release();\n match.segmentIndex = null;\n }\n }\n }\n };\n\n // Clone roles array so this output stream can own it.\n clone.roles = clone.roles.slice();\n clone.segmentIndex = null;\n clone.emsgSchemeIdUris = [];\n clone.keyIds = new Set();\n clone.closedCaptions = stream.closedCaptions ?\n new Map(stream.closedCaptions) : null;\n clone.trickModeVideo = null;\n\n return clone;\n }\n\n /**\n * Clone a StreamDB to make an output stream for combining others across\n * periods.\n *\n * @param {shaka.extern.StreamDB} streamDb\n * @return {shaka.extern.StreamDB}\n * @private\n */\n static cloneStreamDB_(streamDb) {\n const clone = /** @type {shaka.extern.StreamDB} */(Object.assign(\n {}, streamDb));\n\n // Clone roles array so this output stream can own it.\n clone.roles = clone.roles.slice();\n // These are wiped out now and rebuilt later from the various per-period\n // streams that match this output.\n clone.keyIds = new Set();\n clone.segments = [];\n clone.variantIds = [];\n clone.closedCaptions = streamDb.closedCaptions ?\n new Map(streamDb.closedCaptions) : null;\n\n return clone;\n }\n\n /**\n * Combine the various fields of the input Stream into the output.\n *\n * @param {shaka.extern.Stream} output\n * @param {shaka.extern.Stream} input\n * @private\n */\n static concatenateStreams_(output, input) {\n // We keep the original stream's resolution, frame rate,\n // sample rate, and channel count to ensure that it's properly\n // matched with similar content in other periods further down\n // the line.\n\n // Combine arrays, keeping only the unique elements\n const combineArrays = (output, input) => {\n if (!output) {\n output = [];\n }\n for (const item of input) {\n if (!output.includes(item)) {\n output.push(item);\n }\n }\n return output;\n };\n output.roles = combineArrays(output.roles, input.roles);\n\n if (input.emsgSchemeIdUris) {\n output.emsgSchemeIdUris = combineArrays(\n output.emsgSchemeIdUris, input.emsgSchemeIdUris);\n }\n\n for (const keyId of input.keyIds) {\n output.keyIds.add(keyId);\n }\n\n if (output.originalId == null) {\n output.originalId = input.originalId;\n } else {\n const newOriginalId = (input.originalId || '');\n if (newOriginalId && !output.originalId.endsWith(newOriginalId)) {\n output.originalId += ',' + newOriginalId;\n }\n }\n\n const commonDrmInfos = shaka.util.DrmUtils.getCommonDrmInfos(\n output.drmInfos, input.drmInfos);\n if (input.drmInfos.length && output.drmInfos.length &&\n !commonDrmInfos.length) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.INCONSISTENT_DRM_ACROSS_PERIODS);\n }\n output.drmInfos = commonDrmInfos;\n\n // The output is encrypted if any input was encrypted.\n output.encrypted = output.encrypted || input.encrypted;\n\n // Combine the closed captions maps.\n if (input.closedCaptions) {\n if (!output.closedCaptions) {\n output.closedCaptions = new Map();\n }\n for (const [key, value] of input.closedCaptions) {\n output.closedCaptions.set(key, value);\n }\n }\n\n // Prioritize the highest bandwidth\n if (output.bandwidth && input.bandwidth) {\n output.bandwidth = Math.max(output.bandwidth, input.bandwidth);\n }\n\n // Combine trick-play video streams, if present.\n if (input.trickModeVideo) {\n if (!output.trickModeVideo) {\n // Create a fresh output stream for trick-mode playback.\n output.trickModeVideo = shaka.util.PeriodCombiner.cloneStream_(\n input.trickModeVideo);\n output.trickModeVideo.matchedStreams = [];\n output.trickModeVideo.createSegmentIndex = () => {\n if (output.trickModeVideo.segmentIndex) {\n return Promise.resolve();\n }\n const segmentIndex = new shaka.media.MetaSegmentIndex();\n goog.asserts.assert(output.trickModeVideo.matchedStreams,\n 'trickmode matched streams should exist');\n for (const stream of output.trickModeVideo.matchedStreams) {\n goog.asserts.assert(stream.segmentIndex,\n 'trickmode segment index should exist');\n segmentIndex.appendSegmentIndex(stream.segmentIndex);\n }\n output.trickModeVideo.segmentIndex = segmentIndex;\n\n return Promise.resolve();\n };\n }\n\n // Concatenate the trick mode input onto the trick mode output.\n output.trickModeVideo.matchedStreams.push(input.trickModeVideo);\n shaka.util.PeriodCombiner.concatenateStreams_(\n output.trickModeVideo, input.trickModeVideo);\n } else if (output.trickModeVideo) {\n // We have a trick mode output, but no input from this Period. Fill it in\n // from the standard input Stream.\n output.trickModeVideo.matchedStreams.push(input);\n shaka.util.PeriodCombiner.concatenateStreams_(\n output.trickModeVideo, input);\n }\n }\n\n /**\n * Combine the various fields of the input StreamDB into the output.\n *\n * @param {shaka.extern.StreamDB} output\n * @param {shaka.extern.StreamDB} input\n * @private\n */\n static concatenateStreamDBs_(output, input) {\n // Combine arrays, keeping only the unique elements\n const combineArrays = (output, input) => {\n if (!output) {\n output = [];\n }\n for (const item of input) {\n if (!output.includes(item)) {\n output.push(item);\n }\n }\n return output;\n };\n output.roles = combineArrays(output.roles, input.roles);\n\n for (const keyId of input.keyIds) {\n output.keyIds.add(keyId);\n }\n\n // The output is encrypted if any input was encrypted.\n output.encrypted = output.encrypted && input.encrypted;\n\n // Concatenate segments without de-duping.\n output.segments.push(...input.segments);\n\n // Combine the closed captions maps.\n if (input.closedCaptions) {\n if (!output.closedCaptions) {\n output.closedCaptions = new Map();\n }\n for (const [key, value] of input.closedCaptions) {\n output.closedCaptions.set(key, value);\n }\n }\n }\n\n /**\n * Finds streams in all periods which match the output stream.\n *\n * @param {!Array>} streamsPerPeriod\n * @param {T} outputStream\n * @param {boolean=} shouldAppend\n *\n * @template T\n * Accepts either a StreamDB or Stream type.\n *\n * @private\n */\n findMatchesInAllPeriods_(streamsPerPeriod, outputStream,\n shouldAppend = false) {\n const matches = shouldAppend ? outputStream.matchedStreams : [];\n for (const streams of streamsPerPeriod) {\n const match = this.findBestMatchInPeriod_(streams, outputStream);\n if (!match) {\n return;\n }\n matches.push(match);\n }\n outputStream.matchedStreams = matches;\n }\n\n /**\n * Find the best match for the output stream.\n *\n * @param {!Map} streams\n * @param {T} outputStream\n * @return {?T} Returns null if no match can be found.\n *\n * @template T\n * Accepts either a StreamDB or Stream type.\n *\n * @private\n */\n findBestMatchInPeriod_(streams, outputStream) {\n const getKey = {\n 'audio': shaka.util.PeriodCombiner.generateAudioKey_,\n 'video': shaka.util.PeriodCombiner.generateVideoKey_,\n 'text': shaka.util.PeriodCombiner.generateTextKey_,\n 'image': shaka.util.PeriodCombiner.generateImageKey_,\n }[outputStream.type];\n\n let best = null;\n const key = getKey(outputStream);\n if (streams.has(key)) {\n // We've found exact match by hashing.\n best = streams.get(key);\n } else {\n // We haven't found exact match, try to find the best one via\n // linear search.\n const areCompatible = {\n 'audio': (os, s) => this.areAVStreamsCompatible_(os, s),\n 'video': (os, s) => this.areAVStreamsCompatible_(os, s),\n 'text': shaka.util.PeriodCombiner.areTextStreamsCompatible_,\n 'image': shaka.util.PeriodCombiner.areImageStreamsCompatible_,\n }[outputStream.type];\n const isBetterMatch = {\n 'audio': shaka.util.PeriodCombiner.isAudioStreamBetterMatch_,\n 'video': shaka.util.PeriodCombiner.isVideoStreamBetterMatch_,\n 'text': shaka.util.PeriodCombiner.isTextStreamBetterMatch_,\n 'image': shaka.util.PeriodCombiner.isImageStreamBetterMatch_,\n }[outputStream.type];\n\n for (const stream of streams.values()) {\n if (!areCompatible(outputStream, stream)) {\n continue;\n }\n\n if (outputStream.fastSwitching != stream.fastSwitching) {\n continue;\n }\n\n if (!best || isBetterMatch(outputStream, best, stream)) {\n best = stream;\n }\n }\n }\n\n // Remove just found stream if configured to, so possible future linear\n // searches can be faster.\n if (this.useStreamOnce_ && !shaka.util.PeriodCombiner.isDummy_(best)) {\n streams.delete(getKey(best));\n }\n\n return best;\n }\n\n /**\n * @param {T} a\n * @param {T} b\n * @return {boolean}\n *\n * @template T\n * Accepts either a StreamDB or Stream type.\n *\n * @private\n */\n static areAVStreamsExactMatch_(a, b) {\n if (a.mimeType != b.mimeType) {\n return false;\n }\n return shaka.util.PeriodCombiner.getCodec_(a.codecs) ===\n shaka.util.PeriodCombiner.getCodec_(b.codecs);\n }\n\n /**\n * @param {boolean} allowed If set to true, multi-mimeType or multi-codec\n * variants will be allowed.\n * @export\n */\n setAllowMultiTypeVariants(allowed) {\n this.multiTypeVariantsAllowed_ = allowed;\n }\n\n /**\n * @param {boolean} useOnce if true, stream will be used only once in period\n * flattening algoritnm.\n * @export\n */\n setUseStreamOnce(useOnce) {\n this.useStreamOnce_ = useOnce;\n }\n\n /**\n * @param {T} outputStream An audio or video output stream\n * @param {T} candidate A candidate stream to be combined with the output\n * @return {boolean} True if the candidate could be combined with the\n * output stream\n *\n * @template T\n * Accepts either a StreamDB or Stream type.\n *\n * @private\n */\n areAVStreamsCompatible_(outputStream, candidate) {\n // Check for an exact match.\n if (!shaka.util.PeriodCombiner.areAVStreamsExactMatch_(\n outputStream, candidate)) {\n // It's not an exact match. See if we can do multi-codec or multi-mimeType\n // stream instead, using SourceBuffer.changeType.\n if (!this.multiTypeVariantsAllowed_) {\n return false;\n }\n }\n\n // This field is only available on Stream, not StreamDB.\n if (outputStream.drmInfos) {\n // Check for compatible DRM systems. Note that clear streams are\n // implicitly compatible with any DRM and with each other.\n if (!shaka.util.DrmUtils.areDrmCompatible(outputStream.drmInfos,\n candidate.drmInfos)) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * @param {T} outputStream A text output stream\n * @param {T} candidate A candidate stream to be combined with the output\n * @return {boolean} True if the candidate could be combined with the\n * output\n *\n * @template T\n * Accepts either a StreamDB or Stream type.\n *\n * @private\n */\n static areTextStreamsCompatible_(outputStream, candidate) {\n const LanguageUtils = shaka.util.LanguageUtils;\n\n // For text, we don't care about MIME type or codec. We can always switch\n // between text types.\n\n // If the candidate is a dummy, then it is compatible, and we could use it\n // if nothing else matches.\n if (!candidate.language) {\n return true;\n }\n\n // Forced subtitles should be treated as unique streams\n if (outputStream.forced !== candidate.forced) {\n return false;\n }\n\n const languageRelatedness = LanguageUtils.relatedness(\n outputStream.language, candidate.language);\n\n // We will strictly avoid combining text across languages or \"kinds\"\n // (caption vs subtitle).\n if (languageRelatedness == 0 ||\n candidate.kind != outputStream.kind) {\n return false;\n }\n\n return true;\n }\n\n /**\n * @param {T} outputStream A image output stream\n * @param {T} candidate A candidate stream to be combined with the output\n * @return {boolean} True if the candidate could be combined with the\n * output\n *\n * @template T\n * Accepts either a StreamDB or Stream type.\n *\n * @private\n */\n static areImageStreamsCompatible_(outputStream, candidate) {\n // For image, we don't care about MIME type. We can always switch\n // between image types.\n\n return true;\n }\n\n /**\n * @param {T} outputStream An audio output stream\n * @param {T} best The best match so far for this period\n * @param {T} candidate A candidate stream which might be better\n * @return {boolean} True if the candidate is a better match\n *\n * @template T\n * Accepts either a StreamDB or Stream type.\n *\n * @private\n */\n static isAudioStreamBetterMatch_(outputStream, best, candidate) {\n const LanguageUtils = shaka.util.LanguageUtils;\n const {BETTER, EQUAL, WORSE} = shaka.util.PeriodCombiner.BetterOrWorse;\n\n // An exact match is better than a non-exact match.\n const bestIsExact = shaka.util.PeriodCombiner.areAVStreamsExactMatch_(\n outputStream, best);\n const candidateIsExact = shaka.util.PeriodCombiner.areAVStreamsExactMatch_(\n outputStream, candidate);\n if (bestIsExact && !candidateIsExact) {\n return false;\n }\n if (!bestIsExact && candidateIsExact) {\n return true;\n }\n\n // The most important thing is language. In some cases, we will accept a\n // different language across periods when we must.\n const bestRelatedness = LanguageUtils.relatedness(\n outputStream.language, best.language);\n const candidateRelatedness = LanguageUtils.relatedness(\n outputStream.language, candidate.language);\n\n if (candidateRelatedness > bestRelatedness) {\n return true;\n }\n if (candidateRelatedness < bestRelatedness) {\n return false;\n }\n\n // If language-based differences haven't decided this, look at labels.\n // If available options differ, look does any matches with output stream.\n if (best.label !== candidate.label) {\n if (outputStream.label === best.label) {\n return false;\n }\n if (outputStream.label === candidate.label) {\n return true;\n }\n }\n\n // If label-based differences haven't decided this, look at roles. If\n // the candidate has more roles in common with the output, upgrade to the\n // candidate.\n if (outputStream.roles.length) {\n const bestRoleMatches =\n best.roles.filter((role) => outputStream.roles.includes(role));\n const candidateRoleMatches =\n candidate.roles.filter((role) => outputStream.roles.includes(role));\n if (candidateRoleMatches.length > bestRoleMatches.length) {\n return true;\n } else if (candidateRoleMatches.length < bestRoleMatches.length) {\n return false;\n } else if (candidate.roles.length !== best.roles.length) {\n // Both streams have the same role overlap with the outputStream\n // If this is the case, choose the stream with the fewer roles overall.\n // Streams that match best together tend to be streams with the same\n // roles, e g stream1 with roles [r1, r2] is likely a better match\n // for stream2 with roles [r1, r2] vs stream3 with roles\n // [r1, r2, r3, r4].\n // If we match stream1 with stream3 due to the same role overlap,\n // stream2 is likely to be left unmatched and error out later.\n // See https://github.com/shaka-project/shaka-player/issues/2542 for\n // more details.\n return candidate.roles.length < best.roles.length;\n }\n } else if (!candidate.roles.length && best.roles.length) {\n // If outputStream has no roles, and only one of the streams has no roles,\n // choose the one with no roles.\n return true;\n } else if (candidate.roles.length && !best.roles.length) {\n return false;\n }\n\n // If the language doesn't match, but the candidate is the \"primary\"\n // language, then that should be preferred as a fallback.\n if (!best.primary && candidate.primary) {\n return true;\n }\n if (best.primary && !candidate.primary) {\n return false;\n }\n\n // If language-based and role-based features are equivalent, take the audio\n // with the closes channel count to the output.\n const channelsBetterOrWorse =\n shaka.util.PeriodCombiner.compareClosestPreferLower(\n outputStream.channelsCount,\n best.channelsCount,\n candidate.channelsCount);\n if (channelsBetterOrWorse == BETTER) {\n return true;\n } else if (channelsBetterOrWorse == WORSE) {\n return false;\n }\n\n // If channels are equal, take the closest sample rate to the output.\n const sampleRateBetterOrWorse =\n shaka.util.PeriodCombiner.compareClosestPreferLower(\n outputStream.audioSamplingRate,\n best.audioSamplingRate,\n candidate.audioSamplingRate);\n if (sampleRateBetterOrWorse == BETTER) {\n return true;\n } else if (sampleRateBetterOrWorse == WORSE) {\n return false;\n }\n\n if (outputStream.bandwidth) {\n // Take the audio with the closest bandwidth to the output.\n const bandwidthBetterOrWorse =\n shaka.util.PeriodCombiner.compareClosestPreferMinimalAbsDiff_(\n outputStream.bandwidth,\n best.bandwidth,\n candidate.bandwidth);\n if (bandwidthBetterOrWorse == BETTER) {\n return true;\n } else if (bandwidthBetterOrWorse == WORSE) {\n return false;\n }\n }\n\n // If the result of each comparison was inconclusive, default to false.\n return false;\n }\n\n /**\n * @param {T} outputStream A video output stream\n * @param {T} best The best match so far for this period\n * @param {T} candidate A candidate stream which might be better\n * @return {boolean} True if the candidate is a better match\n *\n * @template T\n * Accepts either a StreamDB or Stream type.\n *\n * @private\n */\n static isVideoStreamBetterMatch_(outputStream, best, candidate) {\n const {BETTER, EQUAL, WORSE} = shaka.util.PeriodCombiner.BetterOrWorse;\n\n // An exact match is better than a non-exact match.\n const bestIsExact = shaka.util.PeriodCombiner.areAVStreamsExactMatch_(\n outputStream, best);\n const candidateIsExact = shaka.util.PeriodCombiner.areAVStreamsExactMatch_(\n outputStream, candidate);\n if (bestIsExact && !candidateIsExact) {\n return false;\n }\n if (!bestIsExact && candidateIsExact) {\n return true;\n }\n\n // Take the video with the closest resolution to the output.\n const resolutionBetterOrWorse =\n shaka.util.PeriodCombiner.compareClosestPreferLower(\n outputStream.width * outputStream.height,\n best.width * best.height,\n candidate.width * candidate.height);\n if (resolutionBetterOrWorse == BETTER) {\n return true;\n } else if (resolutionBetterOrWorse == WORSE) {\n return false;\n }\n\n // We may not know the frame rate for the content, in which case this gets\n // skipped.\n if (outputStream.frameRate) {\n // Take the video with the closest frame rate to the output.\n const frameRateBetterOrWorse =\n shaka.util.PeriodCombiner.compareClosestPreferLower(\n outputStream.frameRate,\n best.frameRate,\n candidate.frameRate);\n if (frameRateBetterOrWorse == BETTER) {\n return true;\n } else if (frameRateBetterOrWorse == WORSE) {\n return false;\n }\n }\n\n\n if (outputStream.bandwidth) {\n // Take the video with the closest bandwidth to the output.\n const bandwidthBetterOrWorse =\n shaka.util.PeriodCombiner.compareClosestPreferMinimalAbsDiff_(\n outputStream.bandwidth,\n best.bandwidth,\n candidate.bandwidth);\n if (bandwidthBetterOrWorse == BETTER) {\n return true;\n } else if (bandwidthBetterOrWorse == WORSE) {\n return false;\n }\n }\n\n // If the result of each comparison was inconclusive, default to false.\n return false;\n }\n\n /**\n * @param {T} outputStream A text output stream\n * @param {T} best The best match so far for this period\n * @param {T} candidate A candidate stream which might be better\n * @return {boolean} True if the candidate is a better match\n *\n * @template T\n * Accepts either a StreamDB or Stream type.\n *\n * @private\n */\n static isTextStreamBetterMatch_(outputStream, best, candidate) {\n const LanguageUtils = shaka.util.LanguageUtils;\n\n // The most important thing is language. In some cases, we will accept a\n // different language across periods when we must.\n const bestRelatedness = LanguageUtils.relatedness(\n outputStream.language, best.language);\n const candidateRelatedness = LanguageUtils.relatedness(\n outputStream.language, candidate.language);\n\n if (candidateRelatedness > bestRelatedness) {\n return true;\n }\n if (candidateRelatedness < bestRelatedness) {\n return false;\n }\n\n // If the language doesn't match, but the candidate is the \"primary\"\n // language, then that should be preferred as a fallback.\n if (!best.primary && candidate.primary) {\n return true;\n }\n if (best.primary && !candidate.primary) {\n return false;\n }\n\n // If language-based differences haven't decided this, look at labels.\n // If available options differ, look does any matches with output stream.\n if (best.label !== candidate.label) {\n if (outputStream.label === best.label) {\n return false;\n }\n if (outputStream.label === candidate.label) {\n return true;\n }\n }\n\n // If the candidate has more roles in common with the output, upgrade to the\n // candidate.\n if (outputStream.roles.length) {\n const bestRoleMatches =\n best.roles.filter((role) => outputStream.roles.includes(role));\n const candidateRoleMatches =\n candidate.roles.filter((role) => outputStream.roles.includes(role));\n if (candidateRoleMatches.length > bestRoleMatches.length) {\n return true;\n }\n if (candidateRoleMatches.length < bestRoleMatches.length) {\n return false;\n }\n } else if (!candidate.roles.length && best.roles.length) {\n // If outputStream has no roles, and only one of the streams has no roles,\n // choose the one with no roles.\n return true;\n } else if (candidate.roles.length && !best.roles.length) {\n return false;\n }\n\n // If the candidate has the same MIME type and codec, upgrade to the\n // candidate. It's not required that text streams use the same format\n // across periods, but it's a helpful signal. Some content in our demo app\n // contains the same languages repeated with two different text formats in\n // each period. This condition ensures that all text streams are used.\n // Otherwise, we wind up with some one stream of each language left unused,\n // triggering a failure.\n if (candidate.mimeType == outputStream.mimeType &&\n candidate.codecs == outputStream.codecs &&\n (best.mimeType != outputStream.mimeType ||\n best.codecs != outputStream.codecs)) {\n return true;\n }\n\n // If the result of each comparison was inconclusive, default to false.\n return false;\n }\n\n /**\n * @param {T} outputStream A image output stream\n * @param {T} best The best match so far for this period\n * @param {T} candidate A candidate stream which might be better\n * @return {boolean} True if the candidate is a better match\n *\n * @template T\n * Accepts either a StreamDB or Stream type.\n *\n * @private\n */\n static isImageStreamBetterMatch_(outputStream, best, candidate) {\n const {BETTER, EQUAL, WORSE} = shaka.util.PeriodCombiner.BetterOrWorse;\n\n // Take the image with the closest resolution to the output.\n const resolutionBetterOrWorse =\n shaka.util.PeriodCombiner.compareClosestPreferLower(\n outputStream.width * outputStream.height,\n best.width * best.height,\n candidate.width * candidate.height);\n if (resolutionBetterOrWorse == BETTER) {\n return true;\n } else if (resolutionBetterOrWorse == WORSE) {\n return false;\n }\n\n // If the result of each comparison was inconclusive, default to false.\n return false;\n }\n\n /**\n * Create a dummy StreamDB to fill in periods that are missing a certain type,\n * to avoid failing the general flattening algorithm. This won't be used for\n * audio or video, since those are strictly required in all periods if they\n * exist in any period.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} type\n * @return {shaka.extern.StreamDB}\n * @private\n */\n static dummyStreamDB_(type) {\n return {\n id: 0,\n originalId: '',\n groupId: null,\n primary: false,\n type,\n mimeType: '',\n codecs: '',\n language: '',\n originalLanguage: null,\n label: null,\n width: null,\n height: null,\n encrypted: false,\n keyIds: new Set(),\n segments: [],\n variantIds: [],\n roles: [],\n forced: false,\n channelsCount: null,\n audioSamplingRate: null,\n spatialAudio: false,\n closedCaptions: null,\n external: false,\n fastSwitching: false,\n isAudioMuxedInVideo: false,\n };\n }\n\n /**\n * Create a dummy Stream to fill in periods that are missing a certain type,\n * to avoid failing the general flattening algorithm. This won't be used for\n * audio or video, since those are strictly required in all periods if they\n * exist in any period.\n *\n * @param {shaka.util.ManifestParserUtils.ContentType} type\n * @return {shaka.extern.Stream}\n * @private\n */\n static dummyStream_(type) {\n return {\n id: 0,\n originalId: '',\n groupId: null,\n createSegmentIndex: () => Promise.resolve(),\n segmentIndex: new shaka.media.SegmentIndex([]),\n mimeType: '',\n codecs: '',\n encrypted: false,\n drmInfos: [],\n keyIds: new Set(),\n language: '',\n originalLanguage: null,\n label: null,\n type,\n primary: false,\n trickModeVideo: null,\n emsgSchemeIdUris: null,\n roles: [],\n forced: false,\n channelsCount: null,\n audioSamplingRate: null,\n spatialAudio: false,\n closedCaptions: null,\n accessibilityPurpose: null,\n external: false,\n fastSwitching: false,\n fullMimeTypes: new Set(),\n isAudioMuxedInVideo: false,\n };\n }\n\n /**\n * Compare the best value so far with the candidate value and the output\n * value. Decide if the candidate is better, equal, or worse than the best\n * so far. Any value less than or equal to the output is preferred over a\n * larger value, and closer to the output is better than farther.\n *\n * This provides us a generic way to choose things that should match as\n * closely as possible, like resolution, frame rate, audio channels, or\n * sample rate. If we have to go higher to make a match, we will. But if\n * the user selects 480p, for example, we don't want to surprise them with\n * 720p and waste bandwidth if there's another choice available to us.\n *\n * @param {number} outputValue\n * @param {number} bestValue\n * @param {number} candidateValue\n * @return {shaka.util.PeriodCombiner.BetterOrWorse}\n */\n static compareClosestPreferLower(outputValue, bestValue, candidateValue) {\n const {BETTER, EQUAL, WORSE} = shaka.util.PeriodCombiner.BetterOrWorse;\n\n // If one is the exact match for the output value, and the other isn't,\n // prefer the one that is the exact match.\n if (bestValue == outputValue && outputValue != candidateValue) {\n return WORSE;\n } else if (candidateValue == outputValue && outputValue != bestValue) {\n return BETTER;\n }\n\n if (bestValue > outputValue) {\n if (candidateValue <= outputValue) {\n // Any smaller-or-equal-to-output value is preferable to a\n // bigger-than-output value.\n return BETTER;\n }\n\n // Both \"best\" and \"candidate\" are greater than the output. Take\n // whichever is closer.\n if (candidateValue - outputValue < bestValue - outputValue) {\n return BETTER;\n } else if (candidateValue - outputValue > bestValue - outputValue) {\n return WORSE;\n }\n } else {\n // The \"best\" so far is less than or equal to the output. If the\n // candidate is bigger than the output, we don't want it.\n if (candidateValue > outputValue) {\n return WORSE;\n }\n\n // Both \"best\" and \"candidate\" are less than or equal to the output.\n // Take whichever is closer.\n if (outputValue - candidateValue < outputValue - bestValue) {\n return BETTER;\n } else if (outputValue - candidateValue > outputValue - bestValue) {\n return WORSE;\n }\n }\n\n return EQUAL;\n }\n\n /**\n * @param {number} outputValue\n * @param {number} bestValue\n * @param {number} candidateValue\n * @return {shaka.util.PeriodCombiner.BetterOrWorse}\n * @private\n */\n static compareClosestPreferMinimalAbsDiff_(\n outputValue, bestValue, candidateValue) {\n const {BETTER, EQUAL, WORSE} = shaka.util.PeriodCombiner.BetterOrWorse;\n\n const absDiffBest = Math.abs(outputValue - bestValue);\n const absDiffCandidate = Math.abs(outputValue - candidateValue);\n if (absDiffCandidate < absDiffBest) {\n return BETTER;\n } else if (absDiffBest < absDiffCandidate) {\n return WORSE;\n }\n\n return EQUAL;\n }\n\n /**\n * @param {T} stream\n * @return {boolean}\n * @template T\n * Accepts either a StreamDB or Stream type.\n * @private\n */\n static isDummy_(stream) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n switch (stream.type) {\n case ContentType.TEXT:\n return !stream.language;\n case ContentType.IMAGE:\n return !stream.tilesLayout;\n default:\n return false;\n }\n }\n\n /**\n * @param {T} v\n * @return {string}\n * @template T\n * Accepts either a StreamDB or Stream type.\n * @private\n */\n static generateVideoKey_(v) {\n return shaka.util.PeriodCombiner.generateKey_([\n v.fastSwitching,\n v.width,\n v.frameRate,\n shaka.util.PeriodCombiner.getCodec_(v.codecs),\n v.mimeType,\n v.label,\n v.roles,\n v.closedCaptions ? Array.from(v.closedCaptions.entries()) : null,\n v.bandwidth,\n ]);\n }\n\n /**\n * @param {T} a\n * @return {string}\n * @template T\n * Accepts either a StreamDB or Stream type.\n * @private\n */\n static generateAudioKey_(a) {\n return shaka.util.PeriodCombiner.generateKey_([\n a.fastSwitching,\n a.channelsCount,\n a.language,\n a.bandwidth,\n a.label,\n shaka.util.PeriodCombiner.getCodec_(a.codecs),\n a.mimeType,\n a.roles,\n a.audioSamplingRate,\n a.primary,\n ]);\n }\n\n /**\n * @param {T} t\n * @return {string}\n * @template T\n * Accepts either a StreamDB or Stream type.\n * @private\n */\n static generateTextKey_(t) {\n return shaka.util.PeriodCombiner.generateKey_([\n t.language,\n t.label,\n t.codecs,\n t.mimeType,\n t.bandwidth,\n t.roles,\n ]);\n }\n\n /**\n * @param {T} i\n * @return {string}\n * @template T\n * Accepts either a StreamDB or Stream type.\n * @private\n */\n static generateImageKey_(i) {\n return shaka.util.PeriodCombiner.generateKey_([\n i.width,\n i.codecs,\n i.mimeType,\n ]);\n }\n\n /**\n * @param {!Array<*>} values\n * @return {string}\n * @private\n */\n static generateKey_(values) {\n return JSON.stringify(values);\n }\n\n /**\n * @param {string} codecs\n * @return {string}\n * @private\n */\n static getCodec_(codecs) {\n if (!shaka.util.PeriodCombiner.memoizedCodecs.has(codecs)) {\n const normalizedCodec = shaka.util.MimeUtils.getNormalizedCodec(codecs);\n shaka.util.PeriodCombiner.memoizedCodecs.set(codecs, normalizedCodec);\n }\n return shaka.util.PeriodCombiner.memoizedCodecs.get(codecs);\n }\n};\n\n/**\n * @enum {number}\n */\nshaka.util.PeriodCombiner.BetterOrWorse = {\n BETTER: 1,\n EQUAL: 0,\n WORSE: -1,\n};\n\n/**\n * @private {Map}\n */\nshaka.util.PeriodCombiner.memoizedCodecs = new Map();\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.util.XmlUtils');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.log');\ngoog.require('shaka.util.Lazy');\ngoog.require('shaka.util.StringUtils');\n\n\n/**\n * @summary A set of XML utility functions.\n */\nshaka.util.XmlUtils = class {\n /**\n * Parse a string and return the resulting root element if it was valid XML.\n *\n * @param {string} xmlString\n * @param {string} expectedRootElemName\n * @return {Element}\n */\n static parseXmlString(xmlString, expectedRootElemName) {\n const parser = new DOMParser();\n const unsafeXmlString =\n shaka.util.XmlUtils.trustedHTMLFromString_.value()(xmlString);\n let unsafeXml = null;\n try {\n unsafeXml = parser.parseFromString(unsafeXmlString, 'text/xml');\n } catch (exception) {\n shaka.log.error('XML parsing exception:', exception);\n return null;\n }\n\n // According to MDN, parseFromString never returns null.\n goog.asserts.assert(unsafeXml, 'Parsed XML document cannot be null!');\n\n // Check for empty documents.\n const rootElem = unsafeXml.documentElement;\n if (!rootElem) {\n shaka.log.error('XML document was empty!');\n return null;\n }\n\n // Check for parser errors.\n const parserErrorElements = rootElem.getElementsByTagName('parsererror');\n if (parserErrorElements.length) {\n shaka.log.error('XML parser error found:', parserErrorElements[0]);\n return null;\n }\n\n // The top-level element in the loaded XML should have the name we expect.\n if (rootElem.tagName != expectedRootElemName) {\n shaka.log.error(\n `XML tag name does not match expected \"${expectedRootElemName}\":`,\n rootElem.tagName);\n return null;\n }\n\n // Cobalt browser doesn't support document.createNodeIterator.\n if (!('createNodeIterator' in document)) {\n return rootElem;\n }\n\n // SECURITY: Verify that the document does not contain elements from the\n // HTML or SVG namespaces, which could trigger script execution and XSS.\n const iterator = document.createNodeIterator(\n unsafeXml,\n NodeFilter.SHOW_ALL,\n );\n let currentNode;\n while (currentNode = iterator.nextNode()) {\n if (currentNode instanceof HTMLElement ||\n currentNode instanceof SVGElement) {\n shaka.log.error('XML document embeds unsafe content!');\n return null;\n }\n }\n\n return rootElem;\n }\n\n\n /**\n * Parse some data (auto-detecting the encoding) and return the resulting\n * root element if it was valid XML.\n * @param {BufferSource} data\n * @param {string} expectedRootElemName\n * @return {Element}\n */\n static parseXml(data, expectedRootElemName) {\n try {\n const string = shaka.util.StringUtils.fromBytesAutoDetect(data);\n return shaka.util.XmlUtils.parseXmlString(string, expectedRootElemName);\n } catch (exception) {\n shaka.log.error('parseXmlString threw!', exception);\n return null;\n }\n }\n\n\n /**\n * Converts a Element to BufferSource.\n * @param {!Element} elem\n * @return {!ArrayBuffer}\n */\n static toArrayBuffer(elem) {\n return shaka.util.StringUtils.toUTF8(elem.outerHTML);\n }\n};\n\n/**\n * Promote a string to TrustedHTML. This function is security-sensitive and\n * should only be used with security approval where the string is guaranteed not\n * to cause an XSS vulnerability.\n *\n * @private {!shaka.util.Lazy.}\n */\nshaka.util.XmlUtils.trustedHTMLFromString_ = new shaka.util.Lazy(() => {\n if (typeof trustedTypes !== 'undefined') {\n // Create a Trusted Types policy for promoting the string to TrustedHTML.\n // The Lazy wrapper ensures this policy is only created once.\n const policy = trustedTypes.createPolicy('shaka-player#xml', {\n createHTML: (s) => s,\n });\n return (s) => policy.createHTML(s);\n }\n // Fall back to strings in environments that don't support Trusted Types.\n return (s) => s;\n});\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.dash.DashParser');\n\ngoog.require('goog.asserts');\ngoog.require('goog.Uri');\ngoog.require('shaka.Deprecate');\ngoog.require('shaka.abr.Ewma');\ngoog.require('shaka.dash.ContentProtection');\ngoog.require('shaka.dash.MpdUtils');\ngoog.require('shaka.dash.SegmentBase');\ngoog.require('shaka.dash.SegmentList');\ngoog.require('shaka.dash.SegmentTemplate');\ngoog.require('shaka.log');\ngoog.require('shaka.media.Capabilities');\ngoog.require('shaka.media.ManifestParser');\ngoog.require('shaka.media.PresentationTimeline');\ngoog.require('shaka.media.SegmentIndex');\ngoog.require('shaka.media.SegmentUtils');\ngoog.require('shaka.net.NetworkingEngine');\ngoog.require('shaka.text.TextEngine');\ngoog.require('shaka.util.ContentSteeringManager');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.Functional');\ngoog.require('shaka.util.LanguageUtils');\ngoog.require('shaka.util.ManifestParserUtils');\ngoog.require('shaka.util.MimeUtils');\ngoog.require('shaka.util.Networking');\ngoog.require('shaka.util.ObjectUtils');\ngoog.require('shaka.util.OperationManager');\ngoog.require('shaka.util.PeriodCombiner');\ngoog.require('shaka.util.PlayerConfiguration');\ngoog.require('shaka.util.StreamUtils');\ngoog.require('shaka.util.StringUtils');\ngoog.require('shaka.util.Timer');\ngoog.require('shaka.util.TXml');\ngoog.require('shaka.util.XmlUtils');\n\n\n/**\n * Creates a new DASH parser.\n *\n * @implements {shaka.extern.ManifestParser}\n * @export\n */\nshaka.dash.DashParser = class {\n /** Creates a new DASH parser. */\n constructor() {\n /** @private {?shaka.extern.ManifestConfiguration} */\n this.config_ = null;\n\n /** @private {?shaka.extern.ManifestParser.PlayerInterface} */\n this.playerInterface_ = null;\n\n /** @private {!Array.} */\n this.manifestUris_ = [];\n\n /** @private {?shaka.extern.Manifest} */\n this.manifest_ = null;\n\n /** @private {number} */\n this.globalId_ = 1;\n\n /** @private {!Array} */\n this.patchLocationNodes_ = [];\n\n /**\n * A context of the living manifest used for processing\n * Patch MPD's\n * @private {!shaka.dash.DashParser.PatchContext}\n */\n this.manifestPatchContext_ = {\n mpdId: '',\n type: '',\n profiles: [],\n mediaPresentationDuration: null,\n availabilityTimeOffset: 0,\n getBaseUris: null,\n publishTime: 0,\n };\n\n /**\n * This is a cache is used the store a snapshot of the context\n * object which is built up throughout node traversal to maintain\n * a current state. This data needs to be preserved for parsing\n * patches.\n * The key is a combination period and representation id's.\n * @private {!Map}\n */\n this.contextCache_ = new Map();\n\n /**\n * A map of IDs to Stream objects.\n * ID: Period@id,Representation@id\n * e.g.: '1,23'\n * @private {!Object.}\n */\n this.streamMap_ = {};\n\n /**\n * A map of Period IDs to Stream Map IDs.\n * Use to have direct access to streamMap key.\n * @private {!Object.>}\n */\n this.indexStreamMap_ = {};\n\n /**\n * A map of period ids to their durations\n * @private {!Object.}\n */\n this.periodDurations_ = {};\n\n /** @private {shaka.util.PeriodCombiner} */\n this.periodCombiner_ = new shaka.util.PeriodCombiner();\n\n /**\n * The update period in seconds, or 0 for no updates.\n * @private {number}\n */\n this.updatePeriod_ = 0;\n\n /**\n * An ewma that tracks how long updates take.\n * This is to mitigate issues caused by slow parsing on embedded devices.\n * @private {!shaka.abr.Ewma}\n */\n this.averageUpdateDuration_ = new shaka.abr.Ewma(5);\n\n /** @private {shaka.util.Timer} */\n this.updateTimer_ = new shaka.util.Timer(() => {\n if (this.mediaElement_ && !this.config_.continueLoadingWhenPaused) {\n this.eventManager_.unlisten(this.mediaElement_, 'timeupdate');\n if (this.mediaElement_.paused) {\n this.eventManager_.listenOnce(\n this.mediaElement_, 'timeupdate', () => this.onUpdate_());\n return;\n }\n }\n this.onUpdate_();\n });\n\n /** @private {!shaka.util.OperationManager} */\n this.operationManager_ = new shaka.util.OperationManager();\n\n /**\n * Largest period start time seen.\n * @private {?number}\n */\n this.largestPeriodStartTime_ = null;\n\n /**\n * Period IDs seen in previous manifest.\n * @private {!Array.}\n */\n this.lastManifestUpdatePeriodIds_ = [];\n\n /**\n * The minimum of the availabilityTimeOffset values among the adaptation\n * sets.\n * @private {number}\n */\n this.minTotalAvailabilityTimeOffset_ = Infinity;\n\n /** @private {boolean} */\n this.lowLatencyMode_ = false;\n\n /** @private {?shaka.util.ContentSteeringManager} */\n this.contentSteeringManager_ = null;\n\n /** @private {number} */\n this.gapCount_ = 0;\n\n /** @private {boolean} */\n this.isLowLatency_ = false;\n\n /** @private {shaka.util.EventManager} */\n this.eventManager_ = new shaka.util.EventManager();\n\n /** @private {HTMLMediaElement} */\n this.mediaElement_ = null;\n\n /** @private {boolean} */\n this.isTransitionFromDynamicToStatic_ = false;\n\n /** @private {string} */\n this.lastManifestQueryParams_ = '';\n\n /** @private {function():boolean} */\n this.isPreloadFn_ = () => false;\n\n /** @private {?Array.} */\n this.lastCalculatedBaseUris_ = [];\n }\n\n /**\n * @param {shaka.extern.ManifestConfiguration} config\n * @param {(function():boolean)=} isPreloadFn\n * @override\n * @exportInterface\n */\n configure(config, isPreloadFn) {\n goog.asserts.assert(config.dash != null,\n 'DashManifestConfiguration should not be null!');\n const needFireUpdate = this.playerInterface_ &&\n config.dash.updatePeriod != this.config_.dash.updatePeriod &&\n config.dash.updatePeriod >= 0;\n this.config_ = config;\n if (isPreloadFn) {\n this.isPreloadFn_ = isPreloadFn;\n }\n if (needFireUpdate && this.manifest_ &&\n this.manifest_.presentationTimeline.isLive()) {\n this.updateNow_();\n }\n if (this.contentSteeringManager_) {\n this.contentSteeringManager_.configure(this.config_);\n }\n\n if (this.periodCombiner_) {\n this.periodCombiner_.setAllowMultiTypeVariants(\n this.config_.dash.multiTypeVariantsAllowed &&\n shaka.media.Capabilities.isChangeTypeSupported());\n this.periodCombiner_.setUseStreamOnce(\n this.config_.dash.useStreamOnceInPeriodFlattening);\n }\n }\n\n /**\n * @override\n * @exportInterface\n */\n async start(uri, playerInterface) {\n goog.asserts.assert(this.config_, 'Must call configure() before start()!');\n this.lowLatencyMode_ = playerInterface.isLowLatencyMode();\n this.manifestUris_ = [uri];\n this.playerInterface_ = playerInterface;\n\n const updateDelay = await this.requestManifest_();\n\n if (this.playerInterface_) {\n this.setUpdateTimer_(updateDelay);\n }\n\n // Make sure that the parser has not been destroyed.\n if (!this.playerInterface_) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.PLAYER,\n shaka.util.Error.Code.OPERATION_ABORTED);\n }\n\n goog.asserts.assert(this.manifest_, 'Manifest should be non-null!');\n return this.manifest_;\n }\n\n /**\n * @override\n * @exportInterface\n */\n stop() {\n // When the parser stops, release all segment indexes, which stops their\n // timers, as well.\n for (const stream of Object.values(this.streamMap_)) {\n if (stream.segmentIndex) {\n stream.segmentIndex.release();\n }\n }\n\n if (this.periodCombiner_) {\n this.periodCombiner_.release();\n }\n\n this.playerInterface_ = null;\n this.config_ = null;\n this.manifestUris_ = [];\n this.manifest_ = null;\n this.streamMap_ = {};\n this.indexStreamMap_ = {};\n this.contextCache_.clear();\n this.manifestPatchContext_ = {\n mpdId: '',\n type: '',\n profiles: [],\n mediaPresentationDuration: null,\n availabilityTimeOffset: 0,\n getBaseUris: null,\n publishTime: 0,\n };\n this.periodCombiner_ = null;\n\n if (this.updateTimer_ != null) {\n this.updateTimer_.stop();\n this.updateTimer_ = null;\n }\n\n if (this.contentSteeringManager_) {\n this.contentSteeringManager_.destroy();\n }\n\n if (this.eventManager_) {\n this.eventManager_.release();\n this.eventManager_ = null;\n }\n\n return this.operationManager_.destroy();\n }\n\n /**\n * @override\n * @exportInterface\n */\n async update() {\n try {\n await this.requestManifest_();\n } catch (error) {\n if (!this.playerInterface_ || !error) {\n return;\n }\n goog.asserts.assert(error instanceof shaka.util.Error, 'Bad error type');\n this.playerInterface_.onError(error);\n }\n }\n\n /**\n * @override\n * @exportInterface\n */\n onExpirationUpdated(sessionId, expiration) {\n // No-op\n }\n\n /**\n * @override\n * @exportInterface\n */\n onInitialVariantChosen(variant) {\n // For live it is necessary that the first time we update the manifest with\n // a shorter time than indicated to take into account that the last segment\n // added could be halfway, for example\n if (this.manifest_ && this.manifest_.presentationTimeline.isLive()) {\n const stream = variant.video || variant.audio;\n if (stream && stream.segmentIndex) {\n const availabilityEnd =\n this.manifest_.presentationTimeline.getSegmentAvailabilityEnd();\n const position = stream.segmentIndex.find(availabilityEnd);\n if (position == null) {\n return;\n }\n const reference = stream.segmentIndex.get(position);\n if (!reference) {\n return;\n }\n this.updatePeriod_ = reference.endTime - availabilityEnd;\n this.setUpdateTimer_(/* offset= */ 0);\n }\n }\n }\n\n /**\n * @override\n * @exportInterface\n */\n banLocation(uri) {\n if (this.contentSteeringManager_) {\n this.contentSteeringManager_.banLocation(uri);\n }\n }\n\n /**\n * @override\n * @exportInterface\n */\n setMediaElement(mediaElement) {\n this.mediaElement_ = mediaElement;\n }\n\n /**\n * Makes a network request for the manifest and parses the resulting data.\n *\n * @return {!Promise.} Resolves with the time it took, in seconds, to\n * fulfill the request and parse the data.\n * @private\n */\n async requestManifest_() {\n const requestType = shaka.net.NetworkingEngine.RequestType.MANIFEST;\n let type = shaka.net.NetworkingEngine.AdvancedRequestType.MPD;\n let rootElement = 'MPD';\n const patchLocationUris = this.getPatchLocationUris_();\n let manifestUris = this.manifestUris_;\n if (patchLocationUris.length) {\n manifestUris = patchLocationUris;\n rootElement = 'Patch';\n type = shaka.net.NetworkingEngine.AdvancedRequestType.MPD_PATCH;\n } else if (this.manifestUris_.length > 1 && this.contentSteeringManager_) {\n const locations = this.contentSteeringManager_.getLocations(\n 'Location', /* ignoreBaseUrls= */ true);\n if (locations.length) {\n manifestUris = locations;\n }\n }\n const request = shaka.net.NetworkingEngine.makeRequest(\n manifestUris, this.config_.retryParameters);\n const startTime = Date.now();\n\n const response = await this.makeNetworkRequest_(\n request, requestType, {type});\n\n // Detect calls to stop().\n if (!this.playerInterface_) {\n return 0;\n }\n\n // For redirections add the response uri to the first entry in the\n // Manifest Uris array.\n if (response.uri && response.uri != response.originalUri &&\n !this.manifestUris_.includes(response.uri)) {\n this.manifestUris_.unshift(response.uri);\n }\n\n const uriObj = new goog.Uri(response.uri);\n this.lastManifestQueryParams_ = uriObj.getQueryData().toString();\n\n // This may throw, but it will result in a failed promise.\n await this.parseManifest_(response.data, response.uri, rootElement);\n // Keep track of how long the longest manifest update took.\n const endTime = Date.now();\n const updateDuration = (endTime - startTime) / 1000.0;\n this.averageUpdateDuration_.sample(1, updateDuration);\n\n // Let the caller know how long this update took.\n return updateDuration;\n }\n\n /**\n * Parses the manifest XML. This also handles updates and will update the\n * stored manifest.\n *\n * @param {BufferSource} data\n * @param {string} finalManifestUri The final manifest URI, which may\n * differ from this.manifestUri_ if there has been a redirect.\n * @param {string} rootElement MPD or Patch, depending on context\n * @return {!Promise}\n * @private\n */\n async parseManifest_(data, finalManifestUri, rootElement) {\n let manifestData = data;\n const manifestPreprocessor = this.config_.dash.manifestPreprocessor;\n const defaultManifestPreprocessor =\n shaka.util.PlayerConfiguration.defaultManifestPreprocessor;\n if (manifestPreprocessor != defaultManifestPreprocessor) {\n shaka.Deprecate.deprecateFeature(5,\n 'manifest.dash.manifestPreprocessor configuration',\n 'Please Use manifest.dash.manifestPreprocessorTXml instead.');\n const mpdElement =\n shaka.util.XmlUtils.parseXml(manifestData, rootElement);\n if (!mpdElement) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_INVALID_XML,\n finalManifestUri);\n }\n manifestPreprocessor(mpdElement);\n manifestData = shaka.util.XmlUtils.toArrayBuffer(mpdElement);\n }\n const mpd = shaka.util.TXml.parseXml(manifestData, rootElement);\n if (!mpd) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_INVALID_XML,\n finalManifestUri);\n }\n const manifestPreprocessorTXml =\n this.config_.dash.manifestPreprocessorTXml;\n const defaultManifestPreprocessorTXml =\n shaka.util.PlayerConfiguration.defaultManifestPreprocessorTXml;\n if (manifestPreprocessorTXml != defaultManifestPreprocessorTXml) {\n manifestPreprocessorTXml(mpd);\n }\n\n if (rootElement === 'Patch') {\n return this.processPatchManifest_(mpd);\n }\n\n const disableXlinkProcessing = this.config_.dash.disableXlinkProcessing;\n if (disableXlinkProcessing) {\n return this.processManifest_(mpd, finalManifestUri);\n }\n\n // Process the mpd to account for xlink connections.\n const failGracefully = this.config_.dash.xlinkFailGracefully;\n const xlinkOperation = shaka.dash.MpdUtils.processXlinks(\n mpd, this.config_.retryParameters, failGracefully, finalManifestUri,\n this.playerInterface_.networkingEngine);\n this.operationManager_.manage(xlinkOperation);\n const finalMpd = await xlinkOperation.promise;\n return this.processManifest_(finalMpd, finalManifestUri);\n }\n\n\n /**\n * Takes a formatted MPD and converts it into a manifest.\n *\n * @param {!shaka.extern.xml.Node} mpd\n * @param {string} finalManifestUri The final manifest URI, which may\n * differ from this.manifestUri_ if there has been a redirect.\n * @return {!Promise}\n * @private\n */\n async processManifest_(mpd, finalManifestUri) {\n const TXml = shaka.util.TXml;\n\n goog.asserts.assert(this.config_,\n 'Must call configure() before processManifest_()!');\n\n if (this.contentSteeringManager_) {\n this.contentSteeringManager_.clearPreviousLocations();\n }\n\n // Get any Location elements. This will update the manifest location and\n // the base URI.\n /** @type {!Array.} */\n let manifestBaseUris = [finalManifestUri];\n /** @type {!Array.} */\n const locations = [];\n /** @type {!Map.} */\n const locationsMapping = new Map();\n const locationsObjs = TXml.findChildren(mpd, 'Location');\n for (const locationsObj of locationsObjs) {\n const serviceLocation = locationsObj.attributes['serviceLocation'];\n const uri = TXml.getContents(locationsObj);\n if (!uri) {\n continue;\n }\n const finalUri = shaka.util.ManifestParserUtils.resolveUris(\n manifestBaseUris, [uri])[0];\n if (serviceLocation) {\n if (this.contentSteeringManager_) {\n this.contentSteeringManager_.addLocation(\n 'Location', serviceLocation, finalUri);\n } else {\n locationsMapping.set(serviceLocation, finalUri);\n }\n }\n locations.push(finalUri);\n }\n if (this.contentSteeringManager_) {\n const steeringlocations = this.contentSteeringManager_.getLocations(\n 'Location', /* ignoreBaseUrls= */ true);\n if (steeringlocations.length > 0) {\n this.manifestUris_ = steeringlocations;\n manifestBaseUris = steeringlocations;\n }\n } else if (locations.length) {\n this.manifestUris_ = locations;\n manifestBaseUris = locations;\n }\n\n this.manifestPatchContext_.mpdId = mpd.attributes['id'] || '';\n this.manifestPatchContext_.publishTime =\n TXml.parseAttr(mpd, 'publishTime', TXml.parseDate) || 0;\n this.patchLocationNodes_ = TXml.findChildren(mpd, 'PatchLocation');\n\n let contentSteeringPromise = Promise.resolve();\n\n const contentSteering = TXml.findChild(mpd, 'ContentSteering');\n if (contentSteering && this.playerInterface_) {\n const defaultPathwayId =\n contentSteering.attributes['defaultServiceLocation'];\n if (!this.contentSteeringManager_) {\n this.contentSteeringManager_ =\n new shaka.util.ContentSteeringManager(this.playerInterface_);\n this.contentSteeringManager_.configure(this.config_);\n this.contentSteeringManager_.setManifestType(\n shaka.media.ManifestParser.DASH);\n this.contentSteeringManager_.setBaseUris(manifestBaseUris);\n this.contentSteeringManager_.setDefaultPathwayId(defaultPathwayId);\n const uri = TXml.getContents(contentSteering);\n if (uri) {\n const queryBeforeStart =\n TXml.parseAttr(contentSteering, 'queryBeforeStart',\n TXml.parseBoolean, /* defaultValue= */ false);\n if (queryBeforeStart) {\n contentSteeringPromise =\n this.contentSteeringManager_.requestInfo(uri);\n } else {\n this.contentSteeringManager_.requestInfo(uri);\n }\n }\n } else {\n this.contentSteeringManager_.setBaseUris(manifestBaseUris);\n this.contentSteeringManager_.setDefaultPathwayId(defaultPathwayId);\n }\n for (const serviceLocation of locationsMapping.keys()) {\n const uri = locationsMapping.get(serviceLocation);\n this.contentSteeringManager_.addLocation(\n 'Location', serviceLocation, uri);\n }\n }\n\n const uriObjs = TXml.findChildren(mpd, 'BaseURL');\n let someLocationValid = false;\n if (this.contentSteeringManager_) {\n for (const uriObj of uriObjs) {\n const serviceLocation = uriObj.attributes['serviceLocation'];\n const uri = TXml.getContents(uriObj);\n if (serviceLocation && uri) {\n this.contentSteeringManager_.addLocation(\n 'BaseURL', serviceLocation, uri);\n someLocationValid = true;\n }\n }\n }\n this.lastCalculatedBaseUris_ = null;\n if (!someLocationValid || !this.contentSteeringManager_) {\n const uris = uriObjs.map(TXml.getContents);\n this.lastCalculatedBaseUris_ = shaka.util.ManifestParserUtils.resolveUris(\n manifestBaseUris, uris);\n }\n\n const getBaseUris = () => {\n if (this.contentSteeringManager_ && someLocationValid) {\n return this.contentSteeringManager_.getLocations('BaseURL');\n }\n if (this.lastCalculatedBaseUris_) {\n return this.lastCalculatedBaseUris_;\n }\n return [];\n };\n\n this.manifestPatchContext_.getBaseUris = getBaseUris;\n\n let availabilityTimeOffset = 0;\n if (uriObjs && uriObjs.length) {\n availabilityTimeOffset = TXml.parseAttr(uriObjs[0],\n 'availabilityTimeOffset', TXml.parseFloat) || 0;\n }\n this.manifestPatchContext_.availabilityTimeOffset = availabilityTimeOffset;\n\n const ignoreMinBufferTime = this.config_.dash.ignoreMinBufferTime;\n let minBufferTime = 0;\n if (!ignoreMinBufferTime) {\n minBufferTime =\n TXml.parseAttr(mpd, 'minBufferTime', TXml.parseDuration) || 0;\n }\n\n this.updatePeriod_ = /** @type {number} */ (TXml.parseAttr(\n mpd, 'minimumUpdatePeriod', TXml.parseDuration, -1));\n\n const presentationStartTime = TXml.parseAttr(\n mpd, 'availabilityStartTime', TXml.parseDate);\n let segmentAvailabilityDuration = TXml.parseAttr(\n mpd, 'timeShiftBufferDepth', TXml.parseDuration);\n\n const ignoreSuggestedPresentationDelay =\n this.config_.dash.ignoreSuggestedPresentationDelay;\n let suggestedPresentationDelay = null;\n if (!ignoreSuggestedPresentationDelay) {\n suggestedPresentationDelay = TXml.parseAttr(\n mpd, 'suggestedPresentationDelay', TXml.parseDuration);\n }\n\n const ignoreMaxSegmentDuration =\n this.config_.dash.ignoreMaxSegmentDuration;\n let maxSegmentDuration = null;\n if (!ignoreMaxSegmentDuration) {\n maxSegmentDuration = TXml.parseAttr(\n mpd, 'maxSegmentDuration', TXml.parseDuration);\n }\n const mpdType = mpd.attributes['type'] || 'static';\n\n if (this.manifest_ && this.manifest_.presentationTimeline) {\n this.isTransitionFromDynamicToStatic_ =\n this.manifest_.presentationTimeline.isLive() && mpdType == 'static';\n }\n\n this.manifestPatchContext_.type = mpdType;\n /** @type {!shaka.media.PresentationTimeline} */\n let presentationTimeline;\n if (this.manifest_) {\n presentationTimeline = this.manifest_.presentationTimeline;\n\n // Before processing an update, evict from all segment indexes. Some of\n // them may not get updated otherwise if their corresponding Period\n // element has been dropped from the manifest since the last update.\n // Without this, playback will still work, but this is necessary to\n // maintain conditions that we assert on for multi-Period content.\n // This gives us confidence that our state is maintained correctly, and\n // that the complex logic of multi-Period eviction and period-flattening\n // is correct. See also:\n // https://github.com/shaka-project/shaka-player/issues/3169#issuecomment-823580634\n for (const stream of Object.values(this.streamMap_)) {\n if (stream.segmentIndex) {\n stream.segmentIndex.evict(\n presentationTimeline.getSegmentAvailabilityStart());\n }\n }\n } else {\n // DASH IOP v3.0 suggests using a default delay between minBufferTime\n // and timeShiftBufferDepth. This is literally the range of all\n // feasible choices for the value. Nothing older than\n // timeShiftBufferDepth is still available, and anything less than\n // minBufferTime will cause buffering issues.\n //\n // We have decided that our default will be the configured value, or\n // 1.5 * minBufferTime if not configured. This is fairly conservative.\n // Content providers should provide a suggestedPresentationDelay whenever\n // possible to optimize the live streaming experience.\n const defaultPresentationDelay =\n this.config_.defaultPresentationDelay || minBufferTime * 1.5;\n const presentationDelay = suggestedPresentationDelay != null ?\n suggestedPresentationDelay : defaultPresentationDelay;\n presentationTimeline = new shaka.media.PresentationTimeline(\n presentationStartTime, presentationDelay,\n this.config_.dash.autoCorrectDrift);\n }\n\n presentationTimeline.setStatic(mpdType == 'static');\n\n const isLive = presentationTimeline.isLive();\n\n // If it's live, we check for an override.\n if (isLive && !isNaN(this.config_.availabilityWindowOverride)) {\n segmentAvailabilityDuration = this.config_.availabilityWindowOverride;\n }\n\n // If it's null, that means segments are always available. This is always\n // the case for VOD, and sometimes the case for live.\n if (segmentAvailabilityDuration == null) {\n segmentAvailabilityDuration = Infinity;\n }\n\n presentationTimeline.setSegmentAvailabilityDuration(\n segmentAvailabilityDuration);\n\n const profiles = mpd.attributes['profiles'] || '';\n this.manifestPatchContext_.profiles = profiles.split(',');\n\n /** @type {shaka.dash.DashParser.Context} */\n const context = {\n // Don't base on updatePeriod_ since emsg boxes can cause manifest\n // updates.\n dynamic: mpdType != 'static',\n presentationTimeline: presentationTimeline,\n period: null,\n periodInfo: null,\n adaptationSet: null,\n representation: null,\n bandwidth: 0,\n indexRangeWarningGiven: false,\n availabilityTimeOffset: availabilityTimeOffset,\n mediaPresentationDuration: null,\n profiles: profiles.split(','),\n roles: null,\n urlParams: () => '',\n };\n\n this.gapCount_ = 0;\n const periodsAndDuration = this.parsePeriods_(\n context, getBaseUris, mpd, /* newPeriod= */ false);\n const duration = periodsAndDuration.duration;\n const periods = periodsAndDuration.periods;\n\n if ((mpdType == 'static' && !this.isTransitionFromDynamicToStatic_) ||\n !periodsAndDuration.durationDerivedFromPeriods) {\n // Ignore duration calculated from Period lengths if this is dynamic.\n presentationTimeline.setDuration(duration || Infinity);\n }\n\n // The segments are available earlier than the availability start time.\n // If the stream is low latency and the user has not configured the\n // lowLatencyMode, but if it has been configured to activate the\n // lowLatencyMode if a stream of this type is detected, we automatically\n // activate the lowLatencyMode.\n if (this.isLowLatency_ && !this.lowLatencyMode_) {\n const autoLowLatencyMode = this.playerInterface_.isAutoLowLatencyMode();\n if (autoLowLatencyMode) {\n this.playerInterface_.enableLowLatencyMode();\n this.lowLatencyMode_ = this.playerInterface_.isLowLatencyMode();\n }\n }\n\n if (this.lowLatencyMode_) {\n presentationTimeline.setAvailabilityTimeOffset(\n this.minTotalAvailabilityTimeOffset_);\n }\n\n // Use @maxSegmentDuration to override smaller, derived values.\n presentationTimeline.notifyMaxSegmentDuration(maxSegmentDuration || 1);\n if (goog.DEBUG && !this.isTransitionFromDynamicToStatic_) {\n presentationTimeline.assertIsValid();\n }\n\n await contentSteeringPromise;\n\n // Set minBufferTime to 0 for low-latency DASH live stream to achieve the\n // best latency\n if (this.lowLatencyMode_) {\n minBufferTime = 0;\n const presentationDelay = suggestedPresentationDelay != null ?\n suggestedPresentationDelay : this.config_.defaultPresentationDelay;\n presentationTimeline.setDelay(presentationDelay);\n }\n\n // These steps are not done on manifest update.\n if (!this.manifest_) {\n await this.periodCombiner_.combinePeriods(periods, context.dynamic);\n\n this.manifest_ = {\n presentationTimeline: presentationTimeline,\n variants: this.periodCombiner_.getVariants(),\n textStreams: this.periodCombiner_.getTextStreams(),\n imageStreams: this.periodCombiner_.getImageStreams(),\n offlineSessionIds: [],\n minBufferTime: minBufferTime || 0,\n sequenceMode: this.config_.dash.sequenceMode,\n ignoreManifestTimestampsInSegmentsMode: false,\n type: shaka.media.ManifestParser.DASH,\n serviceDescription: this.parseServiceDescription_(mpd),\n nextUrl: this.parseMpdChaining_(mpd),\n periodCount: periods.length,\n gapCount: this.gapCount_,\n isLowLatency: this.isLowLatency_,\n startTime: null,\n };\n\n // We only need to do clock sync when we're using presentation start\n // time. This condition also excludes VOD streams.\n if (presentationTimeline.usingPresentationStartTime()) {\n const TXml = shaka.util.TXml;\n const timingElements = TXml.findChildren(mpd, 'UTCTiming');\n const offset = await this.parseUtcTiming_(getBaseUris, timingElements);\n // Detect calls to stop().\n if (!this.playerInterface_) {\n return;\n }\n presentationTimeline.setClockOffset(offset);\n }\n\n // This is the first point where we have a meaningful presentation start\n // time, and we need to tell PresentationTimeline that so that it can\n // maintain consistency from here on.\n presentationTimeline.lockStartTime();\n } else {\n this.manifest_.periodCount = periods.length;\n this.manifest_.gapCount = this.gapCount_;\n await this.postPeriodProcessing_(periods, /* isPatchUpdate= */ false);\n }\n\n // Add text streams to correspond to closed captions. This happens right\n // after period combining, while we still have a direct reference, so that\n // any new streams will appear in the period combiner.\n this.playerInterface_.makeTextStreamsForClosedCaptions(this.manifest_);\n\n this.cleanStreamMap_();\n }\n\n /**\n * Handles common procedures after processing new periods.\n *\n * @param {!Array} periods to be appended\n * @param {boolean} isPatchUpdate does call comes from mpd patch update\n * @private\n */\n async postPeriodProcessing_(periods, isPatchUpdate) {\n await this.periodCombiner_.combinePeriods(periods, true, isPatchUpdate);\n\n // Just update the variants and text streams, which may change as periods\n // are added or removed.\n this.manifest_.variants = this.periodCombiner_.getVariants();\n const textStreams = this.periodCombiner_.getTextStreams();\n if (textStreams.length > 0) {\n this.manifest_.textStreams = textStreams;\n }\n this.manifest_.imageStreams = this.periodCombiner_.getImageStreams();\n\n // Re-filter the manifest. This will check any configured restrictions on\n // new variants, and will pass any new init data to DrmEngine to ensure\n // that key rotation works correctly.\n this.playerInterface_.filter(this.manifest_);\n }\n\n /**\n * Takes a formatted Patch MPD and converts it into a manifest.\n *\n * @param {!shaka.extern.xml.Node} mpd\n * @return {!Promise}\n * @private\n */\n async processPatchManifest_(mpd) {\n const TXml = shaka.util.TXml;\n\n const mpdId = mpd.attributes['mpdId'];\n const originalPublishTime = TXml.parseAttr(mpd, 'originalPublishTime',\n TXml.parseDate);\n if (!mpdId || mpdId !== this.manifestPatchContext_.mpdId ||\n originalPublishTime !== this.manifestPatchContext_.publishTime) {\n // Clean patch location nodes, so it will force full MPD update.\n this.patchLocationNodes_ = [];\n throw new shaka.util.Error(\n shaka.util.Error.Severity.RECOVERABLE,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_INVALID_PATCH);\n }\n\n /** @type {!Array} */\n const newPeriods = [];\n /** @type {!Array} */\n const periodAdditions = [];\n /** @type {!Set} */\n const modifiedTimelines = new Set();\n\n for (const patchNode of TXml.getChildNodes(mpd)) {\n let handled = true;\n const paths = TXml.parseXpath(patchNode.attributes['sel'] || '');\n const node = paths[paths.length - 1];\n const content = TXml.getContents(patchNode) || '';\n\n if (node.name === 'MPD') {\n if (node.attribute === 'mediaPresentationDuration') {\n const content = TXml.getContents(patchNode) || '';\n this.parsePatchMediaPresentationDurationChange_(content);\n } else if (node.attribute === 'type') {\n this.parsePatchMpdTypeChange_(content);\n } else if (node.attribute === 'publishTime') {\n this.manifestPatchContext_.publishTime = TXml.parseDate(content) || 0;\n } else if (node.attribute === null && patchNode.tagName === 'add') {\n periodAdditions.push(patchNode);\n } else {\n handled = false;\n }\n } else if (node.name === 'PatchLocation') {\n this.updatePatchLocationNodes_(patchNode);\n } else if (node.name === 'Period') {\n if (patchNode.tagName === 'add') {\n periodAdditions.push(patchNode);\n } else if (patchNode.tagName === 'remove' && node.id) {\n this.removePatchPeriod_(node.id);\n }\n } else if (node.name === 'SegmentTemplate') {\n const timelines = this.modifySegmentTemplate_(patchNode);\n for (const timeline of timelines) {\n modifiedTimelines.add(timeline);\n }\n } else if (node.name === 'SegmentTimeline' || node.name === 'S') {\n const timelines = this.modifyTimepoints_(patchNode);\n for (const timeline of timelines) {\n modifiedTimelines.add(timeline);\n }\n } else {\n handled = false;\n }\n if (!handled) {\n shaka.log.warning('Unhandled ' + patchNode.tagName + ' operation',\n patchNode.attributes['sel']);\n }\n }\n\n for (const timeline of modifiedTimelines) {\n this.parsePatchSegment_(timeline);\n }\n\n // Add new periods after extending timelines, as new periods\n // remove context cache of previous periods.\n for (const periodAddition of periodAdditions) {\n newPeriods.push(...this.parsePatchPeriod_(periodAddition));\n }\n\n if (newPeriods.length) {\n this.manifest_.periodCount += newPeriods.length;\n this.manifest_.gapCount = this.gapCount_;\n await this.postPeriodProcessing_(newPeriods, /* isPatchUpdate= */ true);\n }\n if (this.manifestPatchContext_.type == 'static') {\n const duration = this.manifestPatchContext_.mediaPresentationDuration;\n this.manifest_.presentationTimeline.setDuration(duration || Infinity);\n }\n }\n\n /**\n * Handles manifest type changes, this transition is expected to be\n * \"dyanmic\" to \"static\".\n *\n * @param {!string} mpdType\n * @private\n */\n parsePatchMpdTypeChange_(mpdType) {\n this.manifest_.presentationTimeline.setStatic(mpdType == 'static');\n this.manifestPatchContext_.type = mpdType;\n for (const context of this.contextCache_.values()) {\n context.dynamic = mpdType == 'dynamic';\n }\n if (mpdType == 'static') {\n // Manifest is no longer dynamic, so stop live updates.\n this.updatePeriod_ = -1;\n }\n }\n\n /**\n * @param {string} durationString\n * @private\n */\n parsePatchMediaPresentationDurationChange_(durationString) {\n const duration = shaka.util.TXml.parseDuration(durationString);\n if (duration == null) {\n return;\n }\n this.manifestPatchContext_.mediaPresentationDuration = duration;\n for (const context of this.contextCache_.values()) {\n context.mediaPresentationDuration = duration;\n }\n }\n\n /**\n * Ingests a full MPD period element from a patch update\n *\n * @param {!shaka.extern.xml.Node} periods\n * @private\n */\n parsePatchPeriod_(periods) {\n goog.asserts.assert(this.manifestPatchContext_.getBaseUris,\n 'Must provide getBaseUris on manifestPatchContext_');\n\n /** @type {shaka.dash.DashParser.Context} */\n const context = {\n dynamic: this.manifestPatchContext_.type == 'dynamic',\n presentationTimeline: this.manifest_.presentationTimeline,\n period: null,\n periodInfo: null,\n adaptationSet: null,\n representation: null,\n bandwidth: 0,\n indexRangeWarningGiven: false,\n availabilityTimeOffset: this.manifestPatchContext_.availabilityTimeOffset,\n profiles: this.manifestPatchContext_.profiles,\n mediaPresentationDuration:\n this.manifestPatchContext_.mediaPresentationDuration,\n roles: null,\n urlParams: () => '',\n };\n\n const periodsAndDuration = this.parsePeriods_(context,\n this.manifestPatchContext_.getBaseUris, periods, /* newPeriod= */ true);\n\n return periodsAndDuration.periods;\n }\n\n /**\n * @param {string} periodId\n * @private\n */\n removePatchPeriod_(periodId) {\n const SegmentTemplate = shaka.dash.SegmentTemplate;\n this.manifest_.periodCount--;\n for (const contextId of this.contextCache_.keys()) {\n if (contextId.startsWith(periodId)) {\n const context = this.contextCache_.get(contextId);\n SegmentTemplate.removeTimepoints(context);\n this.parsePatchSegment_(contextId);\n this.contextCache_.delete(contextId);\n }\n }\n const newPeriods = this.lastManifestUpdatePeriodIds_.filter((pID) => {\n return pID !== periodId;\n });\n this.lastManifestUpdatePeriodIds_ = newPeriods;\n }\n\n /**\n * @param {!Array} paths\n * @return {!Array}\n * @private\n */\n getContextIdsFromPath_(paths) {\n let periodId = '';\n let adaptationSetId = '';\n let adaptationSetPosition = -1;\n let representationId = '';\n for (const node of paths) {\n if (node.name === 'Period') {\n periodId = node.id;\n } else if (node.name === 'AdaptationSet') {\n adaptationSetId = node.id;\n if (node.position !== null) {\n adaptationSetPosition = node.position;\n }\n } else if (node.name === 'Representation') {\n representationId = node.id;\n }\n }\n\n /** @type {!Array} */\n const contextIds = [];\n\n if (representationId) {\n contextIds.push(periodId + ',' + representationId);\n } else {\n if (adaptationSetId) {\n for (const context of this.contextCache_.values()) {\n if (context.period.id === periodId &&\n context.adaptationSet.id === adaptationSetId &&\n context.representation.id) {\n contextIds.push(periodId + ',' + context.representation.id);\n }\n }\n } else {\n if (adaptationSetPosition > -1) {\n for (const context of this.contextCache_.values()) {\n if (context.period.id === periodId &&\n context.adaptationSet.position === adaptationSetPosition &&\n context.representation.id) {\n contextIds.push(periodId + ',' + context.representation.id);\n }\n }\n }\n }\n }\n\n return contextIds;\n }\n\n /**\n * Modifies SegmentTemplate based on MPD patch.\n *\n * @param {!shaka.extern.xml.Node} patchNode\n * @return {!Array} context ids with updated timeline\n * @private\n */\n modifySegmentTemplate_(patchNode) {\n const TXml = shaka.util.TXml;\n const paths = TXml.parseXpath(patchNode.attributes['sel'] || '');\n const lastPath = paths[paths.length - 1];\n if (!lastPath.attribute) {\n return [];\n }\n const contextIds = this.getContextIdsFromPath_(paths);\n const content = TXml.getContents(patchNode) || '';\n\n for (const contextId of contextIds) {\n /** @type {shaka.dash.DashParser.Context} */\n const context = this.contextCache_.get(contextId);\n goog.asserts.assert(context && context.representation.segmentTemplate,\n 'cannot modify segment template');\n TXml.modifyNodeAttribute(context.representation.segmentTemplate,\n patchNode.tagName, lastPath.attribute, content);\n }\n return contextIds;\n }\n\n /**\n * Ingests Patch MPD segments into timeline.\n *\n * @param {!shaka.extern.xml.Node} patchNode\n * @return {!Array} context ids with updated timeline\n * @private\n */\n modifyTimepoints_(patchNode) {\n const TXml = shaka.util.TXml;\n const SegmentTemplate = shaka.dash.SegmentTemplate;\n\n const paths = TXml.parseXpath(patchNode.attributes['sel'] || '');\n const contextIds = this.getContextIdsFromPath_(paths);\n\n for (const contextId of contextIds) {\n /** @type {shaka.dash.DashParser.Context} */\n const context = this.contextCache_.get(contextId);\n SegmentTemplate.modifyTimepoints(context, patchNode);\n }\n return contextIds;\n }\n\n /**\n * Parses modified segments.\n *\n * @param {string} contextId\n * @private\n */\n parsePatchSegment_(contextId) {\n /** @type {shaka.dash.DashParser.Context} */\n const context = this.contextCache_.get(contextId);\n\n const currentStream = this.streamMap_[contextId];\n goog.asserts.assert(currentStream, 'stream should exist');\n\n if (currentStream.segmentIndex) {\n currentStream.segmentIndex.evict(\n this.manifest_.presentationTimeline.getSegmentAvailabilityStart());\n }\n\n try {\n const requestSegment = (uris, startByte, endByte, isInit) => {\n return this.requestSegment_(uris, startByte, endByte, isInit);\n };\n // TODO we should obtain lastSegmentNumber if possible\n const streamInfo = shaka.dash.SegmentTemplate.createStreamInfo(\n context, requestSegment, this.streamMap_, /* isUpdate= */ true,\n this.config_.dash.initialSegmentLimit, this.periodDurations_,\n context.representation.aesKey, /* lastSegmentNumber= */ null,\n /* isPatchUpdate= */ true);\n currentStream.createSegmentIndex = async () => {\n if (!currentStream.segmentIndex) {\n currentStream.segmentIndex =\n await streamInfo.generateSegmentIndex();\n }\n };\n } catch (error) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n const contentType = context.representation.contentType;\n const isText = contentType == ContentType.TEXT ||\n contentType == ContentType.APPLICATION;\n const isImage = contentType == ContentType.IMAGE;\n if (!(isText || isImage) ||\n error.code != shaka.util.Error.Code.DASH_NO_SEGMENT_INFO) {\n // We will ignore any DASH_NO_SEGMENT_INFO errors for text/image\n throw error;\n }\n }\n }\n\n /**\n * Reads maxLatency and maxPlaybackRate properties from service\n * description element.\n *\n * @param {!shaka.extern.xml.Node} mpd\n * @return {?shaka.extern.ServiceDescription}\n * @private\n */\n parseServiceDescription_(mpd) {\n const TXml = shaka.util.TXml;\n const elem = TXml.findChild(mpd, 'ServiceDescription');\n\n if (!elem ) {\n return null;\n }\n\n const latencyNode = TXml.findChild(elem, 'Latency');\n const playbackRateNode = TXml.findChild(elem, 'PlaybackRate');\n\n if (!latencyNode && !playbackRateNode) {\n return null;\n }\n\n const description = {};\n\n if (latencyNode) {\n if ('target' in latencyNode.attributes) {\n description.targetLatency =\n parseInt(latencyNode.attributes['target'], 10) / 1000;\n }\n if ('max' in latencyNode.attributes) {\n description.maxLatency =\n parseInt(latencyNode.attributes['max'], 10) / 1000;\n }\n if ('min' in latencyNode.attributes) {\n description.minLatency =\n parseInt(latencyNode.attributes['min'], 10) / 1000;\n }\n }\n\n if (playbackRateNode) {\n if ('max' in playbackRateNode.attributes) {\n description.maxPlaybackRate =\n parseFloat(playbackRateNode.attributes['max']);\n }\n if ('min' in playbackRateNode.attributes) {\n description.minPlaybackRate =\n parseFloat(playbackRateNode.attributes['min']);\n }\n }\n\n return description;\n }\n\n /**\n * Reads chaining url.\n *\n * @param {!shaka.extern.xml.Node} mpd\n * @return {?string}\n * @private\n */\n parseMpdChaining_(mpd) {\n const TXml = shaka.util.TXml;\n const supplementalProperties =\n TXml.findChildren(mpd, 'SupplementalProperty');\n\n if (!supplementalProperties.length) {\n return null;\n }\n\n for (const prop of supplementalProperties) {\n const schemeId = prop.attributes['schemeIdUri'];\n if (schemeId == 'urn:mpeg:dash:chaining:2016') {\n return prop.attributes['value'];\n }\n }\n\n return null;\n }\n\n /**\n * Reads and parses the periods from the manifest. This first does some\n * partial parsing so the start and duration is available when parsing\n * children.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {function():!Array.} getBaseUris\n * @param {!shaka.extern.xml.Node} mpd\n * @param {!boolean} newPeriod\n * @return {{\n * periods: !Array.,\n * duration: ?number,\n * durationDerivedFromPeriods: boolean\n * }}\n * @private\n */\n parsePeriods_(context, getBaseUris, mpd, newPeriod) {\n const TXml = shaka.util.TXml;\n let presentationDuration = context.mediaPresentationDuration;\n\n if (!presentationDuration) {\n presentationDuration = TXml.parseAttr(\n mpd, 'mediaPresentationDuration', TXml.parseDuration);\n this.manifestPatchContext_.mediaPresentationDuration =\n presentationDuration;\n }\n\n let seekRangeStart = 0;\n if (this.manifest_ && this.manifest_.presentationTimeline &&\n this.isTransitionFromDynamicToStatic_) {\n seekRangeStart = this.manifest_.presentationTimeline.getSeekRangeStart();\n }\n\n const periods = [];\n let prevEnd = seekRangeStart;\n const periodNodes = TXml.findChildren(mpd, 'Period');\n for (let i = 0; i < periodNodes.length; i++) {\n const elem = periodNodes[i];\n const next = periodNodes[i + 1];\n let start = /** @type {number} */ (\n TXml.parseAttr(elem, 'start', TXml.parseDuration, prevEnd));\n const periodId = elem.attributes['id'];\n const givenDuration =\n TXml.parseAttr(elem, 'duration', TXml.parseDuration);\n start = (i == 0 && start == 0 && this.isTransitionFromDynamicToStatic_) ?\n seekRangeStart : start;\n\n let periodDuration = null;\n if (next) {\n // \"The difference between the start time of a Period and the start time\n // of the following Period is the duration of the media content\n // represented by this Period.\"\n const nextStart =\n TXml.parseAttr(next, 'start', TXml.parseDuration);\n if (nextStart != null) {\n periodDuration = nextStart - start + seekRangeStart;\n }\n } else if (presentationDuration != null) {\n // \"The Period extends until the Period.start of the next Period, or\n // until the end of the Media Presentation in the case of the last\n // Period.\"\n periodDuration = presentationDuration - start + seekRangeStart;\n }\n\n const threshold =\n shaka.util.ManifestParserUtils.GAP_OVERLAP_TOLERANCE_SECONDS;\n if (periodDuration && givenDuration &&\n Math.abs(periodDuration - givenDuration) > threshold) {\n shaka.log.warning('There is a gap/overlap between Periods', elem);\n\n // This means it's a gap, the distance between period starts is\n // larger than the period's duration\n if (periodDuration > givenDuration) {\n this.gapCount_++;\n }\n }\n // Only use the @duration in the MPD if we can't calculate it. We should\n // favor the @start of the following Period. This ensures that there\n // aren't gaps between Periods.\n if (periodDuration == null) {\n periodDuration = givenDuration;\n }\n\n /**\n * This is to improve robustness when the player observes manifest with\n * past periods that are inconsistent to previous ones.\n *\n * This may happen when a CDN or proxy server switches its upstream from\n * one encoder to another redundant encoder.\n *\n * Skip periods that match all of the following criteria:\n * - Start time is earlier than latest period start time ever seen\n * - Period ID is never seen in the previous manifest\n * - Not the last period in the manifest\n *\n * Periods that meet the aforementioned criteria are considered invalid\n * and should be safe to discard.\n */\n\n if (this.largestPeriodStartTime_ !== null &&\n periodId !== null && start !== null &&\n start < this.largestPeriodStartTime_ &&\n !this.lastManifestUpdatePeriodIds_.includes(periodId) &&\n i + 1 != periodNodes.length) {\n shaka.log.debug(\n `Skipping Period with ID ${periodId} as its start time is smaller` +\n ' than the largest period start time that has been seen, and ID ' +\n 'is unseen before');\n continue;\n }\n\n\n // Save maximum period start time if it is the last period\n if (start !== null &&\n (this.largestPeriodStartTime_ === null ||\n start > this.largestPeriodStartTime_)) {\n this.largestPeriodStartTime_ = start;\n }\n\n // Parse child nodes.\n const info = {\n start: start,\n duration: periodDuration,\n node: elem,\n isLastPeriod: periodDuration == null || !next,\n };\n const period = this.parsePeriod_(context, getBaseUris, info);\n periods.push(period);\n\n if (context.period.id && periodDuration) {\n this.periodDurations_[context.period.id] = periodDuration;\n }\n\n if (periodDuration == null) {\n if (next) {\n // If the duration is still null and we aren't at the end, then we\n // will skip any remaining periods.\n shaka.log.warning(\n 'Skipping Period', i + 1, 'and any subsequent Periods:', 'Period',\n i + 1, 'does not have a valid start time.', next);\n }\n\n // The duration is unknown, so the end is unknown.\n prevEnd = null;\n break;\n }\n\n prevEnd = start + periodDuration;\n } // end of period parsing loop\n\n if (newPeriod) {\n // append new period from the patch manifest\n for (const el of periods) {\n const periodID = el.id;\n if (!this.lastManifestUpdatePeriodIds_.includes(periodID)) {\n this.lastManifestUpdatePeriodIds_.push(periodID);\n }\n }\n } else {\n // Replace previous seen periods with the current one.\n this.lastManifestUpdatePeriodIds_ = periods.map((el) => el.id);\n }\n\n if (presentationDuration != null) {\n if (prevEnd != null) {\n const threshold =\n shaka.util.ManifestParserUtils.GAP_OVERLAP_TOLERANCE_SECONDS;\n const diference = prevEnd - seekRangeStart - presentationDuration;\n if (Math.abs(diference) > threshold) {\n shaka.log.warning(\n '@mediaPresentationDuration does not match the total duration ',\n 'of all Periods.');\n // Assume @mediaPresentationDuration is correct.\n }\n }\n return {\n periods: periods,\n duration: presentationDuration + seekRangeStart,\n durationDerivedFromPeriods: false,\n };\n } else {\n return {\n periods: periods,\n duration: prevEnd,\n durationDerivedFromPeriods: true,\n };\n }\n }\n\n /**\n * Clean StreamMap Object to remove reference of deleted Stream Object\n * @private\n */\n cleanStreamMap_() {\n const oldPeriodIds = Object.keys(this.indexStreamMap_);\n const diffPeriodsIDs = oldPeriodIds.filter((pId) => {\n return !this.lastManifestUpdatePeriodIds_.includes(pId);\n });\n for (const pId of diffPeriodsIDs) {\n let shouldDeleteIndex = true;\n for (const contextId of this.indexStreamMap_[pId]) {\n const stream = this.streamMap_[contextId];\n if (!stream) {\n continue;\n }\n if (stream.segmentIndex && !stream.segmentIndex.isEmpty()) {\n shouldDeleteIndex = false;\n continue;\n }\n if (this.periodCombiner_) {\n this.periodCombiner_.deleteStream(this.streamMap_[contextId], pId);\n }\n delete this.streamMap_[contextId];\n }\n if (shouldDeleteIndex) {\n delete this.indexStreamMap_[pId];\n }\n }\n }\n\n /**\n * Parses a Period XML element. Unlike the other parse methods, this is not\n * given the Node; it is given a PeriodInfo structure. Also, partial parsing\n * was done before this was called so start and duration are valid.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {function():!Array.} getBaseUris\n * @param {shaka.dash.DashParser.PeriodInfo} periodInfo\n * @return {shaka.extern.Period}\n * @private\n */\n parsePeriod_(context, getBaseUris, periodInfo) {\n const Functional = shaka.util.Functional;\n const TXml = shaka.util.TXml;\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n goog.asserts.assert(periodInfo.node, 'periodInfo.node should exist');\n context.period = this.createFrame_(periodInfo.node, null, getBaseUris);\n context.periodInfo = periodInfo;\n context.period.availabilityTimeOffset = context.availabilityTimeOffset;\n\n // If the period doesn't have an ID, give it one based on its start time.\n if (!context.period.id) {\n shaka.log.info(\n 'No Period ID given for Period with start time ' + periodInfo.start +\n ', Assigning a default');\n context.period.id = '__shaka_period_' + periodInfo.start;\n }\n\n const eventStreamNodes =\n TXml.findChildren(periodInfo.node, 'EventStream');\n const availabilityStart =\n context.presentationTimeline.getSegmentAvailabilityStart();\n\n for (const node of eventStreamNodes) {\n this.parseEventStream_(\n periodInfo.start, periodInfo.duration, node, availabilityStart);\n }\n\n\n const supplementalProperties =\n TXml.findChildren(periodInfo.node, 'SupplementalProperty');\n for (const prop of supplementalProperties) {\n const schemeId = prop.attributes['schemeIdUri'];\n if (schemeId == 'urn:mpeg:dash:urlparam:2014') {\n const urlParams = this.getURLParametersFunction_(prop);\n if (urlParams) {\n context.urlParams = urlParams;\n }\n }\n }\n\n const adaptationSetNodes =\n TXml.findChildren(periodInfo.node, 'AdaptationSet');\n const adaptationSets = adaptationSetNodes\n .map((node, position) =>\n this.parseAdaptationSet_(context, position, node))\n .filter(Functional.isNotNull);\n\n // For dynamic manifests, we use rep IDs internally, and they must be\n // unique.\n if (context.dynamic) {\n const ids = [];\n for (const set of adaptationSets) {\n for (const id of set.representationIds) {\n ids.push(id);\n }\n }\n\n const uniqueIds = new Set(ids);\n\n if (ids.length != uniqueIds.size) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_DUPLICATE_REPRESENTATION_ID);\n }\n }\n\n const normalAdaptationSets = adaptationSets\n .filter((as) => { return !as.trickModeFor; });\n\n const trickModeAdaptationSets = adaptationSets\n .filter((as) => { return as.trickModeFor; });\n\n // Attach trick mode tracks to normal tracks.\n if (!this.config_.disableIFrames) {\n for (const trickModeSet of trickModeAdaptationSets) {\n const targetIds = trickModeSet.trickModeFor.split(' ');\n for (const normalSet of normalAdaptationSets) {\n if (targetIds.includes(normalSet.id)) {\n for (const stream of normalSet.streams) {\n shaka.util.StreamUtils.setBetterIFrameStream(\n stream, trickModeSet.streams);\n }\n }\n }\n }\n }\n\n const audioStreams = this.getStreamsFromSets_(\n this.config_.disableAudio,\n normalAdaptationSets,\n ContentType.AUDIO);\n const videoStreams = this.getStreamsFromSets_(\n this.config_.disableVideo,\n normalAdaptationSets,\n ContentType.VIDEO);\n const textStreams = this.getStreamsFromSets_(\n this.config_.disableText,\n normalAdaptationSets,\n ContentType.TEXT);\n const imageStreams = this.getStreamsFromSets_(\n this.config_.disableThumbnails,\n normalAdaptationSets,\n ContentType.IMAGE);\n\n if (videoStreams.length === 0 && audioStreams.length === 0) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_EMPTY_PERIOD,\n );\n }\n\n return {\n id: context.period.id,\n audioStreams,\n videoStreams,\n textStreams,\n imageStreams,\n };\n }\n\n /**\n * Gets the streams from the given sets or returns an empty array if disabled\n * or no streams are found.\n * @param {boolean} disabled\n * @param {!Array.} adaptationSets\n * @param {string} contentType\n @private\n */\n getStreamsFromSets_(disabled, adaptationSets, contentType) {\n if (disabled || !adaptationSets.length) {\n return [];\n }\n\n return adaptationSets.reduce((all, part) => {\n if (part.contentType != contentType) {\n return all;\n }\n\n all.push(...part.streams);\n return all;\n }, []);\n }\n\n /**\n * Parses an AdaptationSet XML element.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {number} position\n * @param {!shaka.extern.xml.Node} elem The AdaptationSet element.\n * @return {?shaka.dash.DashParser.AdaptationInfo}\n * @private\n */\n parseAdaptationSet_(context, position, elem) {\n const TXml = shaka.util.TXml;\n const Functional = shaka.util.Functional;\n const ManifestParserUtils = shaka.util.ManifestParserUtils;\n const ContentType = ManifestParserUtils.ContentType;\n const ContentProtection = shaka.dash.ContentProtection;\n\n context.adaptationSet = this.createFrame_(elem, context.period, null);\n context.adaptationSet.position = position;\n\n let main = false;\n const roleElements = TXml.findChildren(elem, 'Role');\n const roleValues = roleElements.map((role) => {\n return role.attributes['value'];\n }).filter(Functional.isNotNull);\n\n // Default kind for text streams is 'subtitle' if unspecified in the\n // manifest.\n let kind = undefined;\n const isText = context.adaptationSet.contentType == ContentType.TEXT;\n if (isText) {\n kind = ManifestParserUtils.TextStreamKind.SUBTITLE;\n }\n\n for (const roleElement of roleElements) {\n const scheme = roleElement.attributes['schemeIdUri'];\n if (scheme == null || scheme == 'urn:mpeg:dash:role:2011') {\n // These only apply for the given scheme, but allow them to be specified\n // if there is no scheme specified.\n // See: DASH section 5.8.5.5\n const value = roleElement.attributes['value'];\n switch (value) {\n case 'main':\n main = true;\n break;\n case 'caption':\n case 'subtitle':\n kind = value;\n break;\n }\n }\n }\n\n // Parallel for HLS VIDEO-RANGE as defined in DASH-IF IOP v4.3 6.2.5.1.\n let videoRange;\n\n let colorGamut;\n\n // Ref. https://dashif.org/docs/DASH-IF-IOP-v4.3.pdf\n // If signaled, a Supplemental or Essential Property descriptor\n // shall be used, with the schemeIdUri set to\n // urn:mpeg:mpegB:cicp: as defined in\n // ISO/IEC 23001-8 [49] and one of the\n // following: ColourPrimaries, TransferCharacteristics,\n // or MatrixCoefficients.\n const scheme = 'urn:mpeg:mpegB:cicp';\n const transferCharacteristicsScheme = `${scheme}:TransferCharacteristics`;\n const colourPrimariesScheme = `${scheme}:ColourPrimaries`;\n const matrixCoefficientsScheme = `${scheme}:MatrixCoefficients`;\n\n const getVideoRangeFromTransferCharacteristicCICP = (cicp) => {\n switch (cicp) {\n case 1:\n case 6:\n case 13:\n case 14:\n case 15:\n return 'SDR';\n case 16:\n return 'PQ';\n case 18:\n return 'HLG';\n }\n return undefined;\n };\n\n const getColorGamutFromColourPrimariesCICP = (cicp) => {\n switch (cicp) {\n case 1:\n case 5:\n case 6:\n case 7:\n return 'srgb';\n case 9:\n return 'rec2020';\n case 11:\n case 12:\n return 'p3';\n }\n return undefined;\n };\n\n const parseFont = (prop) => {\n const fontFamily = prop.attributes['dvb:fontFamily'];\n const fontUrl = prop.attributes['dvb:url'];\n if (fontFamily && fontUrl) {\n const uris = shaka.util.ManifestParserUtils.resolveUris(\n context.adaptationSet.getBaseUris(), [fontUrl],\n context.urlParams());\n this.playerInterface_.addFont(fontFamily, uris[0]);\n }\n };\n\n const essentialProperties =\n TXml.findChildren(elem, 'EssentialProperty');\n // ID of real AdaptationSet if this is a trick mode set:\n let trickModeFor = null;\n let isFastSwitching = false;\n let adaptationSetUrlParams = null;\n let unrecognizedEssentialProperty = false;\n for (const prop of essentialProperties) {\n const schemeId = prop.attributes['schemeIdUri'];\n if (schemeId == 'http://dashif.org/guidelines/trickmode') {\n trickModeFor = prop.attributes['value'];\n } else if (schemeId == transferCharacteristicsScheme) {\n videoRange = getVideoRangeFromTransferCharacteristicCICP(\n parseInt(prop.attributes['value'], 10),\n );\n } else if (schemeId == colourPrimariesScheme) {\n colorGamut = getColorGamutFromColourPrimariesCICP(\n parseInt(prop.attributes['value'], 10),\n );\n } else if (schemeId == matrixCoefficientsScheme) {\n continue;\n } else if (schemeId == 'urn:mpeg:dash:ssr:2023' &&\n this.config_.dash.enableFastSwitching) {\n isFastSwitching = true;\n } else if (schemeId == 'urn:dvb:dash:fontdownload:2014') {\n parseFont(prop);\n } else if (schemeId == 'urn:mpeg:dash:urlparam:2014') {\n adaptationSetUrlParams = this.getURLParametersFunction_(prop);\n if (!adaptationSetUrlParams) {\n unrecognizedEssentialProperty = true;\n }\n } else {\n unrecognizedEssentialProperty = true;\n }\n }\n\n // According to DASH spec (2014) section 5.8.4.8, \"the successful processing\n // of the descriptor is essential to properly use the information in the\n // parent element\". According to DASH IOP v3.3, section 3.3.4, \"if the\n // scheme or the value\" for EssentialProperty is not recognized, \"the DASH\n // client shall ignore the parent element.\"\n if (unrecognizedEssentialProperty) {\n // Stop parsing this AdaptationSet and let the caller filter out the\n // nulls.\n return null;\n }\n\n let lastSegmentNumber = null;\n\n const supplementalProperties =\n TXml.findChildren(elem, 'SupplementalProperty');\n for (const prop of supplementalProperties) {\n const schemeId = prop.attributes['schemeIdUri'];\n if (schemeId == 'http://dashif.org/guidelines/last-segment-number') {\n lastSegmentNumber = parseInt(prop.attributes['value'], 10) - 1;\n } else if (schemeId == transferCharacteristicsScheme) {\n videoRange = getVideoRangeFromTransferCharacteristicCICP(\n parseInt(prop.attributes['value'], 10),\n );\n } else if (schemeId == colourPrimariesScheme) {\n colorGamut = getColorGamutFromColourPrimariesCICP(\n parseInt(prop.attributes['value'], 10),\n );\n } else if (schemeId == 'urn:dvb:dash:fontdownload:2014') {\n parseFont(prop);\n } else if (schemeId == 'urn:mpeg:dash:urlparam:2014') {\n adaptationSetUrlParams = this.getURLParametersFunction_(prop);\n }\n }\n\n if (adaptationSetUrlParams) {\n context.urlParams = adaptationSetUrlParams;\n }\n\n const accessibilities = TXml.findChildren(elem, 'Accessibility');\n const LanguageUtils = shaka.util.LanguageUtils;\n const closedCaptions = new Map();\n /** @type {?shaka.media.ManifestParser.AccessibilityPurpose} */\n let accessibilityPurpose;\n for (const prop of accessibilities) {\n const schemeId = prop.attributes['schemeIdUri'];\n const value = prop.attributes['value'];\n if (schemeId == 'urn:scte:dash:cc:cea-608:2015' &&\n !this.config_.disableText) {\n let channelId = 1;\n if (value != null) {\n const channelAssignments = value.split(';');\n for (const captionStr of channelAssignments) {\n let channel;\n let language;\n // Some closed caption descriptions have channel number and\n // language (\"CC1=eng\") others may only have language (\"eng,spa\").\n if (!captionStr.includes('=')) {\n // When the channel assignemnts are not explicitly provided and\n // there are only 2 values provided, it is highly likely that the\n // assignments are CC1 and CC3 (most commonly used CC streams).\n // Otherwise, cycle through all channels arbitrarily (CC1 - CC4)\n // in order of provided langs.\n channel = `CC${channelId}`;\n if (channelAssignments.length == 2) {\n channelId += 2;\n } else {\n channelId ++;\n }\n language = captionStr;\n } else {\n const channelAndLanguage = captionStr.split('=');\n // The channel info can be '1' or 'CC1'.\n // If the channel info only has channel number(like '1'), add 'CC'\n // as prefix so that it can be a full channel id (like 'CC1').\n channel = channelAndLanguage[0].startsWith('CC') ?\n channelAndLanguage[0] : `CC${channelAndLanguage[0]}`;\n\n // 3 letters (ISO 639-2). In b/187442669, we saw a blank string\n // (CC2=;CC3=), so default to \"und\" (the code for \"undetermined\").\n language = channelAndLanguage[1] || 'und';\n }\n closedCaptions.set(channel, LanguageUtils.normalize(language));\n }\n } else {\n // If channel and language information has not been provided, assign\n // 'CC1' as channel id and 'und' as language info.\n closedCaptions.set('CC1', 'und');\n }\n } else if (schemeId == 'urn:scte:dash:cc:cea-708:2015' &&\n !this.config_.disableText) {\n let serviceNumber = 1;\n if (value != null) {\n for (const captionStr of value.split(';')) {\n let service;\n let language;\n // Similar to CEA-608, it is possible that service # assignments\n // are not explicitly provided e.g. \"eng;deu;swe\" In this case,\n // we just cycle through the services for each language one by one.\n if (!captionStr.includes('=')) {\n service = `svc${serviceNumber}`;\n serviceNumber ++;\n language = captionStr;\n } else {\n // Otherwise, CEA-708 caption values take the form \"\n // 1=lang:eng;2=lang:deu\" i.e. serviceNumber=lang:threelettercode.\n const serviceAndLanguage = captionStr.split('=');\n service = `svc${serviceAndLanguage[0]}`;\n\n // The language info can be different formats, lang:eng',\n // or 'lang:eng,war:1,er:1'. Extract the language info.\n language = serviceAndLanguage[1].split(',')[0].split(':').pop();\n }\n closedCaptions.set(service, LanguageUtils.normalize(language));\n }\n } else {\n // If service and language information has not been provided, assign\n // 'svc1' as service number and 'und' as language info.\n closedCaptions.set('svc1', 'und');\n }\n } else if (schemeId == 'urn:mpeg:dash:role:2011') {\n // See DASH IOP 3.9.2 Table 4.\n if (value != null) {\n roleValues.push(value);\n if (value == 'captions') {\n kind = ManifestParserUtils.TextStreamKind.CLOSED_CAPTION;\n }\n }\n } else if (schemeId == 'urn:tva:metadata:cs:AudioPurposeCS:2007') {\n // See DASH DVB Document A168 Rev.6 Table 5.\n if (value == '1') {\n accessibilityPurpose =\n shaka.media.ManifestParser.AccessibilityPurpose.VISUALLY_IMPAIRED;\n } else if (value == '2') {\n accessibilityPurpose =\n shaka.media.ManifestParser.AccessibilityPurpose.HARD_OF_HEARING;\n }\n }\n }\n\n const contentProtectionElems =\n TXml.findChildren(elem, 'ContentProtection');\n const contentProtection = ContentProtection.parseFromAdaptationSet(\n contentProtectionElems,\n this.config_.dash.ignoreDrmInfo,\n this.config_.dash.keySystemsByURI);\n\n const language = shaka.util.LanguageUtils.normalize(\n context.adaptationSet.language || 'und');\n\n const label = context.adaptationSet.label;\n\n // Parse Representations into Streams.\n const representations = TXml.findChildren(elem, 'Representation');\n const streams = representations.map((representation) => {\n const parsedRepresentation = this.parseRepresentation_(context,\n contentProtection, kind, language, label, main, roleValues,\n closedCaptions, representation, accessibilityPurpose,\n lastSegmentNumber);\n if (parsedRepresentation) {\n parsedRepresentation.hdr = parsedRepresentation.hdr || videoRange;\n parsedRepresentation.colorGamut =\n parsedRepresentation.colorGamut || colorGamut;\n parsedRepresentation.fastSwitching = isFastSwitching;\n }\n return parsedRepresentation;\n }).filter((s) => !!s);\n\n if (streams.length == 0) {\n const isImage = context.adaptationSet.contentType == ContentType.IMAGE;\n // Ignore empty AdaptationSets if ignoreEmptyAdaptationSet is true\n // or they are for text/image content.\n if (this.config_.dash.ignoreEmptyAdaptationSet || isText || isImage) {\n return null;\n }\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.DASH_EMPTY_ADAPTATION_SET);\n }\n\n // If AdaptationSet's type is unknown or is ambiguously \"application\",\n // guess based on the information in the first stream. If the attributes\n // mimeType and codecs are split across levels, they will both be inherited\n // down to the stream level by this point, so the stream will have all the\n // necessary information.\n if (!context.adaptationSet.contentType ||\n context.adaptationSet.contentType == ContentType.APPLICATION) {\n const mimeType = streams[0].mimeType;\n const codecs = streams[0].codecs;\n context.adaptationSet.contentType =\n shaka.dash.DashParser.guessContentType_(mimeType, codecs);\n\n for (const stream of streams) {\n stream.type = context.adaptationSet.contentType;\n }\n }\n\n const adaptationId = context.adaptationSet.id ||\n ('__fake__' + this.globalId_++);\n\n for (const stream of streams) {\n // Some DRM license providers require that we have a default\n // key ID from the manifest in the wrapped license request.\n // Thus, it should be put in drmInfo to be accessible to request filters.\n for (const drmInfo of contentProtection.drmInfos) {\n drmInfo.keyIds = drmInfo.keyIds && stream.keyIds ?\n new Set([...drmInfo.keyIds, ...stream.keyIds]) :\n drmInfo.keyIds || stream.keyIds;\n }\n stream.groupId = adaptationId;\n }\n\n const repIds = representations\n .map((node) => { return node.attributes['id']; })\n .filter(shaka.util.Functional.isNotNull);\n\n return {\n id: adaptationId,\n contentType: context.adaptationSet.contentType,\n language: language,\n main: main,\n streams: streams,\n drmInfos: contentProtection.drmInfos,\n trickModeFor: trickModeFor,\n representationIds: repIds,\n };\n }\n\n /**\n * @param {!shaka.extern.xml.Node} elem\n * @return {?function():string}\n * @private\n */\n getURLParametersFunction_(elem) {\n const TXml = shaka.util.TXml;\n const urlQueryInfo = TXml.findChildNS(\n elem, shaka.dash.DashParser.UP_NAMESPACE_, 'UrlQueryInfo');\n if (urlQueryInfo && TXml.parseAttr(urlQueryInfo, 'useMPDUrlQuery',\n TXml.parseBoolean, /* defaultValue= */ false)) {\n const queryTemplate = urlQueryInfo.attributes['queryTemplate'];\n if (queryTemplate) {\n return () => {\n if (queryTemplate == '$querypart$') {\n return this.lastManifestQueryParams_;\n }\n const parameters = queryTemplate.split('&').map((param) => {\n if (param == '$querypart$') {\n return this.lastManifestQueryParams_;\n } else {\n const regex = /\\$query:(.*?)\\$/g;\n const parts = regex.exec(param);\n if (parts && parts.length == 2) {\n const paramName = parts[1];\n const queryData =\n new goog.Uri.QueryData(this.lastManifestQueryParams_);\n const value = queryData.get(paramName);\n if (value.length) {\n return paramName + '=' + value[0];\n }\n }\n return param;\n }\n });\n return parameters.join('&');\n };\n }\n }\n return null;\n }\n\n /**\n * Parses a Representation XML element.\n *\n * @param {shaka.dash.DashParser.Context} context\n * @param {shaka.dash.ContentProtection.Context} contentProtection\n * @param {(string|undefined)} kind\n * @param {string} language\n * @param {?string} label\n * @param {boolean} isPrimary\n * @param {!Array.} roles\n * @param {Map.} closedCaptions\n * @param {!shaka.extern.xml.Node} node\n * @param {?shaka.media.ManifestParser.AccessibilityPurpose}\n * accessibilityPurpose\n * @param {?number} lastSegmentNumber\n *\n * @return {?shaka.extern.Stream} The Stream, or null when there is a\n * non-critical parsing error.\n * @private\n */\n parseRepresentation_(context, contentProtection, kind, language, label,\n isPrimary, roles, closedCaptions, node, accessibilityPurpose,\n lastSegmentNumber) {\n const TXml = shaka.util.TXml;\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n context.representation =\n this.createFrame_(node, context.adaptationSet, null);\n\n const representationId = context.representation.id;\n\n this.minTotalAvailabilityTimeOffset_ =\n Math.min(this.minTotalAvailabilityTimeOffset_,\n context.representation.availabilityTimeOffset);\n\n this.isLowLatency_ = this.minTotalAvailabilityTimeOffset_ > 0;\n\n if (!this.verifyRepresentation_(context.representation)) {\n shaka.log.warning('Skipping Representation', context.representation);\n return null;\n }\n const periodStart = context.periodInfo.start;\n\n // NOTE: bandwidth is a mandatory attribute according to the spec, and zero\n // does not make sense in the DASH spec's bandwidth formulas.\n // In some content, however, the attribute is missing or zero.\n // To avoid NaN at the variant level on broken content, fall back to zero.\n // https://github.com/shaka-project/shaka-player/issues/938#issuecomment-317278180\n context.bandwidth =\n TXml.parseAttr(node, 'bandwidth', TXml.parsePositiveInt) || 0;\n\n context.roles = roles;\n\n const supplementalPropertyElems =\n TXml.findChildren(node, 'SupplementalProperty');\n const essentialPropertyElems =\n TXml.findChildren(node, 'EssentialProperty');\n\n let representationUrlParams = null;\n let urlParamsElement = essentialPropertyElems.find((element) => {\n const schemeId = element.attributes['schemeIdUri'];\n return schemeId == 'urn:mpeg:dash:urlparam:2014';\n });\n if (urlParamsElement) {\n representationUrlParams =\n this.getURLParametersFunction_(urlParamsElement);\n } else {\n urlParamsElement = supplementalPropertyElems.find((element) => {\n const schemeId = element.attributes['schemeIdUri'];\n return schemeId == 'urn:mpeg:dash:urlparam:2014';\n });\n if (urlParamsElement) {\n representationUrlParams =\n this.getURLParametersFunction_(urlParamsElement);\n }\n }\n\n if (representationUrlParams) {\n context.urlParams = representationUrlParams;\n }\n\n /** @type {?shaka.dash.DashParser.StreamInfo} */\n let streamInfo;\n\n const contentType = context.representation.contentType;\n const isText = contentType == ContentType.TEXT ||\n contentType == ContentType.APPLICATION;\n const isImage = contentType == ContentType.IMAGE;\n\n try {\n /** @type {shaka.extern.aesKey|undefined} */\n let aesKey = undefined;\n if (contentProtection.aes128Info) {\n const getBaseUris = context.representation.getBaseUris;\n const urlParams = context.urlParams;\n const uris = shaka.util.ManifestParserUtils.resolveUris(\n getBaseUris(), [contentProtection.aes128Info.keyUri], urlParams());\n const requestType = shaka.net.NetworkingEngine.RequestType.KEY;\n const request = shaka.net.NetworkingEngine.makeRequest(\n uris, this.config_.retryParameters);\n\n aesKey = {\n bitsKey: 128,\n blockCipherMode: 'CBC',\n iv: contentProtection.aes128Info.iv,\n firstMediaSequenceNumber: 0,\n };\n\n // Don't download the key object until the segment is parsed, to\n // avoid a startup delay for long manifests with lots of keys.\n aesKey.fetchKey = async () => {\n const keyResponse =\n await this.makeNetworkRequest_(request, requestType);\n\n // keyResponse.status is undefined when URI is\n // \"data:text/plain;base64,\"\n if (!keyResponse.data || keyResponse.data.byteLength != 16) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.AES_128_INVALID_KEY_LENGTH);\n }\n\n const algorithm = {\n name: 'AES-CBC',\n };\n aesKey.cryptoKey = await window.crypto.subtle.importKey(\n 'raw', keyResponse.data, algorithm, true, ['decrypt']);\n aesKey.fetchKey = undefined; // No longer needed.\n };\n }\n context.representation.aesKey = aesKey;\n\n const requestSegment = (uris, startByte, endByte, isInit) => {\n return this.requestSegment_(uris, startByte, endByte, isInit);\n };\n if (context.representation.segmentBase) {\n streamInfo = shaka.dash.SegmentBase.createStreamInfo(\n context, requestSegment, aesKey);\n } else if (context.representation.segmentList) {\n streamInfo = shaka.dash.SegmentList.createStreamInfo(\n context, this.streamMap_, aesKey);\n } else if (context.representation.segmentTemplate) {\n const hasManifest = !!this.manifest_;\n\n streamInfo = shaka.dash.SegmentTemplate.createStreamInfo(\n context, requestSegment, this.streamMap_, hasManifest,\n this.config_.dash.initialSegmentLimit, this.periodDurations_,\n aesKey, lastSegmentNumber, /* isPatchUpdate= */ false);\n } else {\n goog.asserts.assert(isText,\n 'Must have Segment* with non-text streams.');\n\n const duration = context.periodInfo.duration || 0;\n const getBaseUris = context.representation.getBaseUris;\n const mimeType = context.representation.mimeType;\n const codecs = context.representation.codecs;\n streamInfo = {\n generateSegmentIndex: () => {\n const segmentIndex = shaka.media.SegmentIndex.forSingleSegment(\n periodStart, duration, getBaseUris());\n segmentIndex.forEachTopLevelReference((ref) => {\n ref.mimeType = mimeType;\n ref.codecs = codecs;\n });\n return Promise.resolve(segmentIndex);\n },\n };\n }\n } catch (error) {\n if ((isText || isImage) &&\n error.code == shaka.util.Error.Code.DASH_NO_SEGMENT_INFO) {\n // We will ignore any DASH_NO_SEGMENT_INFO errors for text/image\n // streams.\n return null;\n }\n\n // For anything else, re-throw.\n throw error;\n }\n\n const contentProtectionElems =\n TXml.findChildren(node, 'ContentProtection');\n const keyId = shaka.dash.ContentProtection.parseFromRepresentation(\n contentProtectionElems, contentProtection,\n this.config_.dash.ignoreDrmInfo,\n this.config_.dash.keySystemsByURI);\n const keyIds = new Set(keyId ? [keyId] : []);\n\n // Detect the presence of E-AC3 JOC audio content, using DD+JOC signaling.\n // See: ETSI TS 103 420 V1.2.1 (2018-10)\n const hasJoc = supplementalPropertyElems.some((element) => {\n const expectedUri = 'tag:dolby.com,2018:dash:EC3_ExtensionType:2018';\n const expectedValue = 'JOC';\n return element.attributes['schemeIdUri'] == expectedUri &&\n element.attributes['value'] == expectedValue;\n });\n let spatialAudio = false;\n if (hasJoc) {\n spatialAudio = true;\n }\n\n let forced = false;\n if (isText) {\n // See: https://github.com/shaka-project/shaka-player/issues/2122 and\n // https://github.com/Dash-Industry-Forum/DASH-IF-IOP/issues/165\n forced = roles.includes('forced_subtitle') ||\n roles.includes('forced-subtitle');\n }\n\n let tilesLayout;\n if (isImage) {\n const thumbnailTileElem = essentialPropertyElems.find((element) => {\n const expectedUris = [\n 'http://dashif.org/thumbnail_tile',\n 'http://dashif.org/guidelines/thumbnail_tile',\n ];\n return expectedUris.includes(element.attributes['schemeIdUri']);\n });\n if (thumbnailTileElem) {\n tilesLayout = thumbnailTileElem.attributes['value'];\n }\n // Filter image adaptation sets that has no tilesLayout.\n if (!tilesLayout) {\n return null;\n }\n }\n\n let hdr;\n const profiles = context.profiles;\n const codecs = context.representation.codecs;\n\n const hevcHDR = 'http://dashif.org/guidelines/dash-if-uhd#hevc-hdr-pq10';\n if (profiles.includes(hevcHDR) && (codecs.includes('hvc1.2.4.L153.B0') ||\n codecs.includes('hev1.2.4.L153.B0'))) {\n hdr = 'PQ';\n }\n\n const contextId = context.representation.id ?\n context.period.id + ',' + context.representation.id : '';\n\n if (this.patchLocationNodes_.length && representationId) {\n this.contextCache_.set(`${context.period.id},${representationId}`,\n this.cloneContext_(context));\n }\n\n /** @type {shaka.extern.Stream} */\n let stream;\n\n if (contextId && this.streamMap_[contextId]) {\n stream = this.streamMap_[contextId];\n } else {\n stream = {\n id: this.globalId_++,\n originalId: context.representation.id,\n groupId: null,\n createSegmentIndex: () => Promise.resolve(),\n closeSegmentIndex: () => {\n if (stream.segmentIndex) {\n stream.segmentIndex.release();\n stream.segmentIndex = null;\n }\n },\n segmentIndex: null,\n mimeType: context.representation.mimeType,\n codecs,\n frameRate: context.representation.frameRate,\n pixelAspectRatio: context.representation.pixelAspectRatio,\n bandwidth: context.bandwidth,\n width: context.representation.width,\n height: context.representation.height,\n kind,\n encrypted: contentProtection.drmInfos.length > 0,\n drmInfos: contentProtection.drmInfos,\n keyIds,\n language,\n originalLanguage: context.adaptationSet.language,\n label,\n type: context.adaptationSet.contentType,\n primary: isPrimary,\n trickModeVideo: null,\n emsgSchemeIdUris:\n context.representation.emsgSchemeIdUris,\n roles,\n forced,\n channelsCount: context.representation.numChannels,\n audioSamplingRate: context.representation.audioSamplingRate,\n spatialAudio,\n closedCaptions,\n hdr,\n colorGamut: undefined,\n videoLayout: undefined,\n tilesLayout,\n accessibilityPurpose,\n external: false,\n fastSwitching: false,\n fullMimeTypes: new Set([shaka.util.MimeUtils.getFullType(\n context.representation.mimeType, context.representation.codecs)]),\n isAudioMuxedInVideo: false,\n };\n }\n\n stream.createSegmentIndex = async () => {\n if (!stream.segmentIndex) {\n stream.segmentIndex = await streamInfo.generateSegmentIndex();\n }\n };\n\n if (contextId && context.dynamic && !this.streamMap_[contextId]) {\n const periodId = context.period.id || '';\n if (!this.indexStreamMap_[periodId]) {\n this.indexStreamMap_[periodId] = [];\n }\n this.streamMap_[contextId] = stream;\n this.indexStreamMap_[periodId].push(contextId);\n }\n\n return stream;\n }\n\n /**\n * Clone context and remove xml document references.\n *\n * @param {!shaka.dash.DashParser.Context} context\n * @return {!shaka.dash.DashParser.Context}\n * @private\n */\n cloneContext_(context) {\n /**\n * @param {?shaka.dash.DashParser.InheritanceFrame} frame\n * @return {?shaka.dash.DashParser.InheritanceFrame}\n */\n const cloneFrame = (frame) => {\n if (!frame) {\n return null;\n }\n const clone = shaka.util.ObjectUtils.shallowCloneObject(frame);\n clone.segmentBase = null;\n clone.segmentList = null;\n clone.segmentTemplate = shaka.util.TXml.cloneNode(clone.segmentTemplate);\n return clone;\n };\n const contextClone = shaka.util.ObjectUtils.shallowCloneObject(context);\n contextClone.period = cloneFrame(contextClone.period);\n contextClone.adaptationSet = cloneFrame(contextClone.adaptationSet);\n contextClone.representation = cloneFrame(contextClone.representation);\n\n if (contextClone.periodInfo) {\n contextClone.periodInfo =\n shaka.util.ObjectUtils.shallowCloneObject(contextClone.periodInfo);\n contextClone.periodInfo.node = null;\n }\n\n return contextClone;\n }\n\n /**\n * Called when the update timer ticks.\n *\n * @return {!Promise}\n * @private\n */\n async onUpdate_() {\n goog.asserts.assert(this.updatePeriod_ >= 0,\n 'There should be an update period');\n\n shaka.log.info('Updating manifest...');\n\n // Default the update delay to 0 seconds so that if there is an error we can\n // try again right away.\n let updateDelay = 0;\n\n try {\n updateDelay = await this.requestManifest_();\n } catch (error) {\n goog.asserts.assert(error instanceof shaka.util.Error,\n 'Should only receive a Shaka error');\n\n // Try updating again, but ensure we haven't been destroyed.\n if (this.playerInterface_) {\n if (this.config_.raiseFatalErrorOnManifestUpdateRequestFailure) {\n this.playerInterface_.onError(error);\n return;\n }\n // We will retry updating, so override the severity of the error.\n error.severity = shaka.util.Error.Severity.RECOVERABLE;\n this.playerInterface_.onError(error);\n }\n }\n\n // Detect a call to stop()\n if (!this.playerInterface_) {\n return;\n }\n\n this.playerInterface_.onManifestUpdated();\n\n this.setUpdateTimer_(updateDelay);\n }\n\n /**\n * Update now the manifest\n *\n * @private\n */\n updateNow_() {\n this.updateTimer_.tickNow();\n }\n\n /**\n * Sets the update timer. Does nothing if the manifest does not specify an\n * update period.\n *\n * @param {number} offset An offset, in seconds, to apply to the manifest's\n * update period.\n * @private\n */\n setUpdateTimer_(offset) {\n // NOTE: An updatePeriod_ of -1 means the attribute was missing.\n // An attribute which is present and set to 0 should still result in\n // periodic updates. For more, see:\n // https://github.com/Dash-Industry-Forum/Guidelines-TimingModel/issues/48\n if (this.updatePeriod_ < 0) {\n return;\n }\n let updateTime = this.updatePeriod_;\n if (this.config_.dash.updatePeriod >= 0) {\n updateTime = this.config_.dash.updatePeriod;\n }\n\n const finalDelay = Math.max(\n updateTime - offset,\n this.averageUpdateDuration_.getEstimate());\n\n // We do not run the timer as repeating because part of update is async and\n // we need schedule the update after it finished.\n this.updateTimer_.tickAfter(/* seconds= */ finalDelay);\n }\n\n /**\n * Creates a new inheritance frame for the given element.\n *\n * @param {!shaka.extern.xml.Node} elem\n * @param {?shaka.dash.DashParser.InheritanceFrame} parent\n * @param {?function():!Array.} getBaseUris\n * @return {shaka.dash.DashParser.InheritanceFrame}\n * @private\n */\n createFrame_(elem, parent, getBaseUris) {\n goog.asserts.assert(parent || getBaseUris,\n 'Must provide either parent or getBaseUris');\n const SCTE214 = shaka.dash.DashParser.SCTE214_;\n const SegmentUtils = shaka.media.SegmentUtils;\n const ManifestParserUtils = shaka.util.ManifestParserUtils;\n const TXml = shaka.util.TXml;\n parent = parent || /** @type {shaka.dash.DashParser.InheritanceFrame} */ ({\n contentType: '',\n mimeType: '',\n codecs: '',\n emsgSchemeIdUris: [],\n frameRate: undefined,\n pixelAspectRatio: undefined,\n numChannels: null,\n audioSamplingRate: null,\n availabilityTimeOffset: 0,\n segmentSequenceCadence: 0,\n });\n getBaseUris = getBaseUris || parent.getBaseUris;\n\n const parseNumber = TXml.parseNonNegativeInt;\n const evalDivision = TXml.evalDivision;\n\n const id = elem.attributes['id'];\n const uriObjs = TXml.findChildren(elem, 'BaseURL');\n let calculatedBaseUris;\n let someLocationValid = false;\n if (this.contentSteeringManager_) {\n for (const uriObj of uriObjs) {\n const serviceLocation = uriObj.attributes['serviceLocation'];\n const uri = TXml.getContents(uriObj);\n if (serviceLocation && uri) {\n this.contentSteeringManager_.addLocation(\n id, serviceLocation, uri);\n someLocationValid = true;\n }\n }\n }\n if (!someLocationValid || !this.contentSteeringManager_) {\n calculatedBaseUris = uriObjs.map(TXml.getContents);\n }\n\n const getFrameUris = () => {\n if (!uriObjs.length) {\n return [];\n }\n if (this.contentSteeringManager_ && someLocationValid) {\n return this.contentSteeringManager_.getLocations(id);\n }\n if (calculatedBaseUris) {\n return calculatedBaseUris;\n }\n return [];\n };\n\n let contentType = elem.attributes['contentType'] || parent.contentType;\n const mimeType = elem.attributes['mimeType'] || parent.mimeType;\n const allCodecs = [\n elem.attributes['codecs'] || parent.codecs,\n ];\n const supplementalCodecs =\n TXml.getAttributeNS(elem, SCTE214, 'supplementalCodecs');\n if (supplementalCodecs) {\n allCodecs.push(supplementalCodecs);\n }\n const codecs = SegmentUtils.codecsFiltering(allCodecs).join(',');\n const frameRate =\n TXml.parseAttr(elem, 'frameRate', evalDivision) || parent.frameRate;\n const pixelAspectRatio =\n elem.attributes['sar'] || parent.pixelAspectRatio;\n const emsgSchemeIdUris = this.emsgSchemeIdUris_(\n TXml.findChildren(elem, 'InbandEventStream'),\n parent.emsgSchemeIdUris);\n const audioChannelConfigs =\n TXml.findChildren(elem, 'AudioChannelConfiguration');\n const numChannels =\n this.parseAudioChannels_(audioChannelConfigs) || parent.numChannels;\n const audioSamplingRate =\n TXml.parseAttr(elem, 'audioSamplingRate', parseNumber) ||\n parent.audioSamplingRate;\n\n if (!contentType) {\n contentType = shaka.dash.DashParser.guessContentType_(mimeType, codecs);\n }\n\n const segmentBase = TXml.findChild(elem, 'SegmentBase');\n const segmentTemplate = TXml.findChild(elem, 'SegmentTemplate');\n\n // The availabilityTimeOffset is the sum of all @availabilityTimeOffset\n // values that apply to the adaptation set, via BaseURL, SegmentBase,\n // or SegmentTemplate elements.\n const segmentBaseAto = segmentBase ?\n (TXml.parseAttr(segmentBase, 'availabilityTimeOffset',\n TXml.parseFloat) || 0) : 0;\n const segmentTemplateAto = segmentTemplate ?\n (TXml.parseAttr(segmentTemplate, 'availabilityTimeOffset',\n TXml.parseFloat) || 0) : 0;\n const baseUriAto = uriObjs && uriObjs.length ?\n (TXml.parseAttr(uriObjs[0], 'availabilityTimeOffset',\n TXml.parseFloat) || 0) : 0;\n\n const availabilityTimeOffset = parent.availabilityTimeOffset + baseUriAto +\n segmentBaseAto + segmentTemplateAto;\n\n let segmentSequenceCadence = null;\n const segmentSequenceProperties =\n TXml.findChild(elem, 'SegmentSequenceProperties');\n if (segmentSequenceProperties) {\n const sap = TXml.findChild(segmentSequenceProperties, 'SAP');\n if (sap) {\n segmentSequenceCadence = TXml.parseAttr(sap, 'cadence',\n TXml.parseInt);\n }\n }\n\n // This attribute is currently non-standard, but it is supported by Kaltura.\n let label = elem.attributes['label'];\n\n // See DASH IOP 4.3 here https://dashif.org/docs/DASH-IF-IOP-v4.3.pdf (page 35)\n const labelElements = TXml.findChildren(elem, 'Label');\n if (labelElements && labelElements.length) {\n // NOTE: Right now only one label field is supported.\n const firstLabelElement = labelElements[0];\n if (TXml.getTextContents(firstLabelElement)) {\n label = TXml.getTextContents(firstLabelElement);\n }\n }\n\n return {\n getBaseUris:\n () => ManifestParserUtils.resolveUris(getBaseUris(), getFrameUris()),\n segmentBase: segmentBase || parent.segmentBase,\n segmentList:\n TXml.findChild(elem, 'SegmentList') || parent.segmentList,\n segmentTemplate: segmentTemplate || parent.segmentTemplate,\n width: TXml.parseAttr(elem, 'width', parseNumber) || parent.width,\n height: TXml.parseAttr(elem, 'height', parseNumber) || parent.height,\n contentType: contentType,\n mimeType: mimeType,\n codecs: codecs,\n frameRate: frameRate,\n pixelAspectRatio: pixelAspectRatio,\n emsgSchemeIdUris: emsgSchemeIdUris,\n id: id,\n language: elem.attributes['lang'],\n numChannels: numChannels,\n audioSamplingRate: audioSamplingRate,\n availabilityTimeOffset: availabilityTimeOffset,\n initialization: null,\n segmentSequenceCadence:\n segmentSequenceCadence || parent.segmentSequenceCadence,\n label: label || null,\n };\n }\n\n /**\n * Returns a new array of InbandEventStream schemeIdUri containing the union\n * of the ones parsed from inBandEventStreams and the ones provided in\n * emsgSchemeIdUris.\n *\n * @param {!Array.} inBandEventStreams\n * Array of InbandEventStream\n * elements to parse and add to the returned array.\n * @param {!Array.} emsgSchemeIdUris Array of parsed\n * InbandEventStream schemeIdUri attributes to add to the returned array.\n * @return {!Array.} schemeIdUris Array of parsed\n * InbandEventStream schemeIdUri attributes.\n * @private\n */\n emsgSchemeIdUris_(inBandEventStreams, emsgSchemeIdUris) {\n const schemeIdUris = emsgSchemeIdUris.slice();\n for (const event of inBandEventStreams) {\n const schemeIdUri = event.attributes['schemeIdUri'];\n if (!schemeIdUris.includes(schemeIdUri)) {\n schemeIdUris.push(schemeIdUri);\n }\n }\n return schemeIdUris;\n }\n\n /**\n * @param {!Array.} audioChannelConfigs An array of\n * AudioChannelConfiguration elements.\n * @return {?number} The number of audio channels, or null if unknown.\n * @private\n */\n parseAudioChannels_(audioChannelConfigs) {\n for (const elem of audioChannelConfigs) {\n const scheme = elem.attributes['schemeIdUri'];\n if (!scheme) {\n continue;\n }\n\n const value = elem.attributes['value'];\n if (!value) {\n continue;\n }\n\n switch (scheme) {\n case 'urn:mpeg:dash:outputChannelPositionList:2012':\n // A space-separated list of speaker positions, so the number of\n // channels is the length of this list.\n return value.trim().split(/ +/).length;\n\n case 'urn:mpeg:dash:23003:3:audio_channel_configuration:2011':\n case 'urn:dts:dash:audio_channel_configuration:2012': {\n // As far as we can tell, this is a number of channels.\n const intValue = parseInt(value, 10);\n if (!intValue) { // 0 or NaN\n shaka.log.warning('Channel parsing failure! ' +\n 'Ignoring scheme and value', scheme, value);\n continue;\n }\n return intValue;\n }\n\n case 'tag:dolby.com,2015:dash:audio_channel_configuration:2015': {\n // ETSI TS 103 190-2 v1.2.1, Annex G.3\n // LSB-to-MSB order\n const channelCountMapping =\n [2, 1, 2, 2, 2, 2, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 2, 2];\n const hexValue = parseInt(value, 16);\n if (!hexValue) { // 0 or NaN\n shaka.log.warning('Channel parsing failure! ' +\n 'Ignoring scheme and value', scheme, value);\n continue;\n }\n let numBits = 0;\n for (let i = 0; i < channelCountMapping.length; i++) {\n if (hexValue & (1< noValue && intValue < channelCountMapping.length) {\n return channelCountMapping[intValue];\n }\n continue;\n }\n\n default:\n shaka.log.warning(\n 'Unrecognized audio channel scheme:', scheme, value);\n continue;\n }\n }\n\n return null;\n }\n\n /**\n * Verifies that a Representation has exactly one Segment* element. Prints\n * warnings if there is a problem.\n *\n * @param {shaka.dash.DashParser.InheritanceFrame} frame\n * @return {boolean} True if the Representation is usable; otherwise return\n * false.\n * @private\n */\n verifyRepresentation_(frame) {\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n\n let n = 0;\n n += frame.segmentBase ? 1 : 0;\n n += frame.segmentList ? 1 : 0;\n n += frame.segmentTemplate ? 1 : 0;\n\n if (n == 0) {\n // TODO: Extend with the list of MIME types registered to TextEngine.\n if (frame.contentType == ContentType.TEXT ||\n frame.contentType == ContentType.APPLICATION) {\n return true;\n } else {\n shaka.log.warning(\n 'Representation does not contain a segment information source:',\n 'the Representation must contain one of SegmentBase, SegmentList,',\n 'SegmentTemplate, or explicitly indicate that it is \"text\".',\n frame);\n return false;\n }\n }\n\n if (n != 1) {\n shaka.log.warning(\n 'Representation contains multiple segment information sources:',\n 'the Representation should only contain one of SegmentBase,',\n 'SegmentList, or SegmentTemplate.',\n frame);\n if (frame.segmentBase) {\n shaka.log.info('Using SegmentBase by default.');\n frame.segmentList = null;\n frame.segmentTemplate = null;\n } else {\n goog.asserts.assert(frame.segmentList, 'There should be a SegmentList');\n shaka.log.info('Using SegmentList by default.');\n frame.segmentTemplate = null;\n }\n }\n\n return true;\n }\n\n /**\n * Makes a request to the given URI and calculates the clock offset.\n *\n * @param {function():!Array.} getBaseUris\n * @param {string} uri\n * @param {string} method\n * @return {!Promise.}\n * @private\n */\n async requestForTiming_(getBaseUris, uri, method) {\n const uris = [shaka.util.StringUtils.htmlUnescape(uri)];\n const requestUris =\n shaka.util.ManifestParserUtils.resolveUris(getBaseUris(), uris);\n const request = shaka.net.NetworkingEngine.makeRequest(\n requestUris, this.config_.retryParameters);\n request.method = method;\n const type = shaka.net.NetworkingEngine.RequestType.TIMING;\n\n const operation =\n this.playerInterface_.networkingEngine.request(\n type, request, {isPreload: this.isPreloadFn_()});\n this.operationManager_.manage(operation);\n\n const response = await operation.promise;\n let text;\n if (method == 'HEAD') {\n if (!response.headers || !response.headers['date']) {\n shaka.log.warning('UTC timing response is missing',\n 'expected date header');\n return 0;\n }\n text = response.headers['date'];\n } else {\n text = shaka.util.StringUtils.fromUTF8(response.data);\n }\n const date = Date.parse(text);\n if (isNaN(date)) {\n shaka.log.warning('Unable to parse date from UTC timing response');\n return 0;\n }\n return (date - Date.now());\n }\n\n /**\n * Parses an array of UTCTiming elements.\n *\n * @param {function():!Array.} getBaseUris\n * @param {!Array.} elems\n * @return {!Promise.}\n * @private\n */\n async parseUtcTiming_(getBaseUris, elems) {\n const schemesAndValues = elems.map((elem) => {\n return {\n scheme: elem.attributes['schemeIdUri'],\n value: elem.attributes['value'],\n };\n });\n\n // If there's nothing specified in the manifest, but we have a default from\n // the config, use that.\n const clockSyncUri = this.config_.dash.clockSyncUri;\n if (!schemesAndValues.length && clockSyncUri) {\n schemesAndValues.push({\n scheme: 'urn:mpeg:dash:utc:http-head:2014',\n value: clockSyncUri,\n });\n }\n\n for (const sv of schemesAndValues) {\n try {\n const scheme = sv.scheme;\n const value = sv.value;\n switch (scheme) {\n // See DASH IOP Guidelines Section 4.7\n // https://bit.ly/DashIop3-2\n // Some old ISO23009-1 drafts used 2012.\n case 'urn:mpeg:dash:utc:http-head:2014':\n case 'urn:mpeg:dash:utc:http-head:2012':\n // eslint-disable-next-line no-await-in-loop\n return await this.requestForTiming_(getBaseUris, value, 'HEAD');\n case 'urn:mpeg:dash:utc:http-xsdate:2014':\n case 'urn:mpeg:dash:utc:http-iso:2014':\n case 'urn:mpeg:dash:utc:http-xsdate:2012':\n case 'urn:mpeg:dash:utc:http-iso:2012':\n // eslint-disable-next-line no-await-in-loop\n return await this.requestForTiming_(getBaseUris, value, 'GET');\n case 'urn:mpeg:dash:utc:direct:2014':\n case 'urn:mpeg:dash:utc:direct:2012': {\n const date = Date.parse(value);\n return isNaN(date) ? 0 : (date - Date.now());\n }\n\n case 'urn:mpeg:dash:utc:http-ntp:2014':\n case 'urn:mpeg:dash:utc:ntp:2014':\n case 'urn:mpeg:dash:utc:sntp:2014':\n shaka.log.alwaysWarn('NTP UTCTiming scheme is not supported');\n break;\n default:\n shaka.log.alwaysWarn(\n 'Unrecognized scheme in UTCTiming element', scheme);\n break;\n }\n } catch (e) {\n shaka.log.warning('Error fetching time from UTCTiming elem', e.message);\n }\n }\n\n shaka.log.alwaysWarn(\n 'A UTCTiming element should always be given in live manifests! ' +\n 'This content may not play on clients with bad clocks!');\n return 0;\n }\n\n /**\n * Parses an EventStream element.\n *\n * @param {number} periodStart\n * @param {?number} periodDuration\n * @param {!shaka.extern.xml.Node} elem\n * @param {number} availabilityStart\n * @private\n */\n parseEventStream_(periodStart, periodDuration, elem, availabilityStart) {\n const TXml = shaka.util.TXml;\n const parseNumber = shaka.util.TXml.parseNonNegativeInt;\n\n const schemeIdUri = elem.attributes['schemeIdUri'] || '';\n const value = elem.attributes['value'] || '';\n const timescale = TXml.parseAttr(elem, 'timescale', parseNumber) || 1;\n const presentationTimeOffset =\n TXml.parseAttr(elem, 'presentationTimeOffset', parseNumber) || 0;\n\n for (const eventNode of TXml.findChildren(elem, 'Event')) {\n const presentationTime =\n TXml.parseAttr(eventNode, 'presentationTime', parseNumber) || 0;\n const duration =\n TXml.parseAttr(eventNode, 'duration', parseNumber) || 0;\n\n // Ensure start time won't be lower than period start.\n let startTime = Math.max(\n (presentationTime - presentationTimeOffset) / timescale + periodStart,\n periodStart);\n let endTime = startTime + (duration / timescale);\n if (periodDuration != null) {\n // An event should not go past the Period, even if the manifest says so.\n // See: Dash sec. 5.10.2.1\n startTime = Math.min(startTime, periodStart + periodDuration);\n endTime = Math.min(endTime, periodStart + periodDuration);\n }\n\n // Don't add unavailable regions to the timeline.\n if (endTime < availabilityStart) {\n continue;\n }\n\n /** @type {shaka.extern.TimelineRegionInfo} */\n const region = {\n schemeIdUri: schemeIdUri,\n value: value,\n startTime: startTime,\n endTime: endTime,\n id: eventNode.attributes['id'] || '',\n eventElement: TXml.txmlNodeToDomElement(eventNode),\n eventNode: TXml.cloneNode(eventNode),\n };\n\n this.playerInterface_.onTimelineRegionAdded(region);\n }\n }\n\n /**\n * Makes a network request on behalf of SegmentBase.createStreamInfo.\n *\n * @param {!Array.} uris\n * @param {?number} startByte\n * @param {?number} endByte\n * @param {boolean} isInit\n * @return {!Promise.}\n * @private\n */\n async requestSegment_(uris, startByte, endByte, isInit) {\n const requestType = shaka.net.NetworkingEngine.RequestType.SEGMENT;\n const type = isInit ?\n shaka.net.NetworkingEngine.AdvancedRequestType.INIT_SEGMENT :\n shaka.net.NetworkingEngine.AdvancedRequestType.MEDIA_SEGMENT;\n\n const request = shaka.util.Networking.createSegmentRequest(\n uris,\n startByte,\n endByte,\n this.config_.retryParameters);\n\n const response = await this.makeNetworkRequest_(\n request, requestType, {type});\n return response.data;\n }\n\n /**\n * Guess the content type based on MIME type and codecs.\n *\n * @param {string} mimeType\n * @param {string} codecs\n * @return {string}\n * @private\n */\n static guessContentType_(mimeType, codecs) {\n const fullMimeType = shaka.util.MimeUtils.getFullType(mimeType, codecs);\n\n if (shaka.text.TextEngine.isTypeSupported(fullMimeType)) {\n // If it's supported by TextEngine, it's definitely text.\n // We don't check MediaSourceEngine, because that would report support\n // for platform-supported video and audio types as well.\n return shaka.util.ManifestParserUtils.ContentType.TEXT;\n }\n\n // Otherwise, just split the MIME type. This handles video and audio\n // types well.\n return mimeType.split('/')[0];\n }\n\n\n /**\n * Create a networking request. This will manage the request using the\n * parser's operation manager.\n *\n * @param {shaka.extern.Request} request\n * @param {shaka.net.NetworkingEngine.RequestType} type\n * @param {shaka.extern.RequestContext=} context\n * @return {!Promise.}\n * @private\n */\n makeNetworkRequest_(request, type, context) {\n if (!context) {\n context = {};\n }\n context.isPreload = this.isPreloadFn_();\n const op = this.playerInterface_.networkingEngine.request(\n type, request, context);\n this.operationManager_.manage(op);\n return op.promise;\n }\n\n /**\n * @param {!shaka.extern.xml.Node} patchNode\n * @private\n */\n updatePatchLocationNodes_(patchNode) {\n const TXml = shaka.util.TXml;\n TXml.modifyNodes(this.patchLocationNodes_, patchNode);\n }\n\n /**\n * @return {!Array}\n * @private\n */\n getPatchLocationUris_() {\n const TXml = shaka.util.TXml;\n const mpdId = this.manifestPatchContext_.mpdId;\n const publishTime = this.manifestPatchContext_.publishTime;\n if (!mpdId || !publishTime || !this.patchLocationNodes_.length) {\n return [];\n }\n const now = Date.now() / 1000;\n const patchLocations = this.patchLocationNodes_.filter((patchLocation) => {\n const ttl = TXml.parseNonNegativeInt(patchLocation.attributes['ttl']);\n return !ttl || publishTime + ttl > now;\n })\n .map(TXml.getContents)\n .filter(shaka.util.Functional.isNotNull);\n\n if (!patchLocations.length) {\n return [];\n }\n return shaka.util.ManifestParserUtils.resolveUris(\n this.manifestUris_, patchLocations);\n }\n};\n\n/**\n * @typedef {{\n * mpdId: string,\n * type: string,\n * mediaPresentationDuration: ?number,\n * profiles: !Array.,\n * availabilityTimeOffset: number,\n * getBaseUris: ?function():!Array.,\n * publishTime: number\n * }}\n *\n * @property {string} mpdId\n * ID of the original MPD file.\n * @property {string} type\n * Specifies the type of the dash manifest i.e. \"static\"\n * @property {?number} mediaPresentationDuration\n * Media presentation duration, or null if unknown.\n * @property {!Array.} profiles\n * Profiles of DASH are defined to enable interoperability and the\n * signaling of the use of features.\n * @property {number} availabilityTimeOffset\n * Specifies the total availabilityTimeOffset of the segment.\n * @property {?function():!Array.} getBaseUris\n * An array of absolute base URIs.\n * @property {number} publishTime\n * Time when manifest has been published, in seconds.\n */\nshaka.dash.DashParser.PatchContext;\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.dash.DashParser.SCTE214_ = 'urn:scte:dash:scte214-extensions';\n\n\n/**\n * @const {string}\n * @private\n */\nshaka.dash.DashParser.UP_NAMESPACE_ = 'urn:mpeg:dash:schema:urlparam:2014';\n\n\n/**\n * @typedef {\n * function(!Array., ?number, ?number, boolean):\n * !Promise.\n * }\n */\nshaka.dash.DashParser.RequestSegmentCallback;\n\n\n/**\n * @typedef {{\n * segmentBase: ?shaka.extern.xml.Node,\n * segmentList: ?shaka.extern.xml.Node,\n * segmentTemplate: ?shaka.extern.xml.Node,\n * getBaseUris: function():!Array.,\n * width: (number|undefined),\n * height: (number|undefined),\n * contentType: string,\n * mimeType: string,\n * codecs: string,\n * frameRate: (number|undefined),\n * pixelAspectRatio: (string|undefined),\n * emsgSchemeIdUris: !Array.,\n * id: ?string,\n * position: (number|undefined),\n * language: ?string,\n * numChannels: ?number,\n * audioSamplingRate: ?number,\n * availabilityTimeOffset: number,\n * initialization: ?string,\n * aesKey: (shaka.extern.aesKey|undefined),\n * segmentSequenceCadence: number,\n * label: ?string\n * }}\n *\n * @description\n * A collection of elements and properties which are inherited across levels\n * of a DASH manifest.\n *\n * @property {?shaka.extern.xml.Node} segmentBase\n * The XML node for SegmentBase.\n * @property {?shaka.extern.xml.Node} segmentList\n * The XML node for SegmentList.\n * @property {?shaka.extern.xml.Node} segmentTemplate\n * The XML node for SegmentTemplate.\n * @property {function():!Array.} getBaseUris\n * Function than returns an array of absolute base URIs for the frame.\n * @property {(number|undefined)} width\n * The inherited width value.\n * @property {(number|undefined)} height\n * The inherited height value.\n * @property {string} contentType\n * The inherited media type.\n * @property {string} mimeType\n * The inherited MIME type value.\n * @property {string} codecs\n * The inherited codecs value.\n * @property {(number|undefined)} frameRate\n * The inherited framerate value.\n * @property {(string|undefined)} pixelAspectRatio\n * The inherited pixel aspect ratio value.\n * @property {!Array.} emsgSchemeIdUris\n * emsg registered schemeIdUris.\n * @property {?string} id\n * The ID of the element.\n * @property {number|undefined} position\n * Position of the element used for indexing in case of no id\n * @property {?string} language\n * The original language of the element.\n * @property {?number} numChannels\n * The number of audio channels, or null if unknown.\n * @property {?number} audioSamplingRate\n * Specifies the maximum sampling rate of the content, or null if unknown.\n * @property {number} availabilityTimeOffset\n * Specifies the total availabilityTimeOffset of the segment, or 0 if unknown.\n * @property {?string} initialization\n * Specifies the file where the init segment is located, or null.\n * @property {(shaka.extern.aesKey|undefined)} aesKey\n * AES-128 Content protection key\n * @property {number} segmentSequenceCadence\n * Specifies the cadence of independent segments in Segment Sequence\n * Representation.\n * @property {?string} label\n * Label or null if unknown.\n */\nshaka.dash.DashParser.InheritanceFrame;\n\n\n/**\n * @typedef {{\n * dynamic: boolean,\n * presentationTimeline: !shaka.media.PresentationTimeline,\n * period: ?shaka.dash.DashParser.InheritanceFrame,\n * periodInfo: ?shaka.dash.DashParser.PeriodInfo,\n * adaptationSet: ?shaka.dash.DashParser.InheritanceFrame,\n * representation: ?shaka.dash.DashParser.InheritanceFrame,\n * bandwidth: number,\n * indexRangeWarningGiven: boolean,\n * availabilityTimeOffset: number,\n * mediaPresentationDuration: ?number,\n * profiles: !Array.,\n * roles: ?Array.,\n * urlParams: function():string\n * }}\n *\n * @description\n * Contains context data for the streams. This is designed to be\n * shallow-copyable, so the parser must overwrite (not modify) each key as the\n * parser moves through the manifest and the parsing context changes.\n *\n * @property {boolean} dynamic\n * True if the MPD is dynamic (not all segments available at once)\n * @property {!shaka.media.PresentationTimeline} presentationTimeline\n * The PresentationTimeline.\n * @property {?shaka.dash.DashParser.InheritanceFrame} period\n * The inheritance from the Period element.\n * @property {?shaka.dash.DashParser.PeriodInfo} periodInfo\n * The Period info for the current Period.\n * @property {?shaka.dash.DashParser.InheritanceFrame} adaptationSet\n * The inheritance from the AdaptationSet element.\n * @property {?shaka.dash.DashParser.InheritanceFrame} representation\n * The inheritance from the Representation element.\n * @property {number} bandwidth\n * The bandwidth of the Representation, or zero if missing.\n * @property {boolean} indexRangeWarningGiven\n * True if the warning about SegmentURL@indexRange has been printed.\n * @property {number} availabilityTimeOffset\n * The sum of the availabilityTimeOffset values that apply to the element.\n * @property {!Array.} profiles\n * Profiles of DASH are defined to enable interoperability and the signaling\n * of the use of features.\n * @property {?number} mediaPresentationDuration\n * Media presentation duration, or null if unknown.\n * @property {function():string} urlParams\n * The query params for the segments.\n */\nshaka.dash.DashParser.Context;\n\n\n/**\n * @typedef {{\n * start: number,\n * duration: ?number,\n * node: ?shaka.extern.xml.Node,\n * isLastPeriod: boolean\n * }}\n *\n * @description\n * Contains information about a Period element.\n *\n * @property {number} start\n * The start time of the period.\n * @property {?number} duration\n * The duration of the period; or null if the duration is not given. This\n * will be non-null for all periods except the last.\n * @property {?shaka.extern.xml.Node} node\n * The XML Node for the Period.\n * @property {boolean} isLastPeriod\n * Whether this Period is the last one in the manifest.\n */\nshaka.dash.DashParser.PeriodInfo;\n\n\n/**\n * @typedef {{\n * id: string,\n * contentType: ?string,\n * language: string,\n * main: boolean,\n * streams: !Array.,\n * drmInfos: !Array.,\n * trickModeFor: ?string,\n * representationIds: !Array.\n * }}\n *\n * @description\n * Contains information about an AdaptationSet element.\n *\n * @property {string} id\n * The unique ID of the adaptation set.\n * @property {?string} contentType\n * The content type of the AdaptationSet.\n * @property {string} language\n * The language of the AdaptationSet.\n * @property {boolean} main\n * Whether the AdaptationSet has the 'main' type.\n * @property {!Array.} streams\n * The streams this AdaptationSet contains.\n * @property {!Array.} drmInfos\n * The DRM info for the AdaptationSet.\n * @property {?string} trickModeFor\n * If non-null, this AdaptationInfo represents trick mode tracks. This\n * property is the ID of the normal AdaptationSet these tracks should be\n * associated with.\n * @property {!Array.} representationIds\n * An array of the IDs of the Representations this AdaptationSet contains.\n */\nshaka.dash.DashParser.AdaptationInfo;\n\n\n/**\n * @typedef {function():!Promise.}\n * @description\n * An async function which generates and returns a SegmentIndex.\n */\nshaka.dash.DashParser.GenerateSegmentIndexFunction;\n\n\n/**\n * @typedef {{\n * generateSegmentIndex: shaka.dash.DashParser.GenerateSegmentIndexFunction\n * }}\n *\n * @description\n * Contains information about a Stream. This is passed from the createStreamInfo\n * methods.\n *\n * @property {shaka.dash.DashParser.GenerateSegmentIndexFunction}\n * generateSegmentIndex\n * An async function to create the SegmentIndex for the stream.\n */\nshaka.dash.DashParser.StreamInfo;\n\n\nshaka.media.ManifestParser.registerParserByMime(\n 'application/dash+xml', () => new shaka.dash.DashParser());\nshaka.media.ManifestParser.registerParserByMime(\n 'video/vnd.mpeg.dash.mpd', () => new shaka.dash.DashParser());\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.dependencies');\n\ngoog.require('shaka.Deprecate');\n\n/**\n * @export\n */\nshaka.dependencies = class {\n /**\n * Registers a new dependency.\n *\n * @param {shaka.dependencies.Allowed} key which is used for retrieving a\n * dependency\n * @param {?} dep a dependency\n * @export\n */\n static add(key, dep) {\n if (!shaka.dependencies.Allowed[key]) {\n throw new Error(`${key} is not supported`);\n }\n if (key == shaka.dependencies.Allowed.muxjs) {\n shaka.Deprecate.deprecateFeature(5,\n 'mux.js',\n 'mux.js is no longer used in Shaka Player.');\n return;\n }\n shaka.dependencies.dependencies_.set(key, () => dep);\n }\n\n /**\n * Check if we have a dependency for the key.\n *\n * @param {shaka.dependencies.Allowed} key key\n * @return {boolean}\n * @export\n */\n static has(key) {\n return shaka.dependencies.dependencies_.has(key);\n }\n\n /** @return {?ISOBoxer} */\n static isoBoxer() {\n return /** @type {?ISOBoxer} */ (shaka.dependencies.dependencies_.get(\n shaka.dependencies.Allowed.ISOBoxer)());\n }\n};\n\n/**\n * @export\n * @enum {string}\n */\nshaka.dependencies.Allowed = {\n muxjs: 'muxjs',\n ISOBoxer: 'ISOBoxer',\n};\n\n/**\n * Contains accessor functions to shared dependencies that could be used by\n * other components. The default accessors can be overridden.\n *\n * @private {!Map.}\n */\nshaka.dependencies.dependencies_ = new Map([\n [shaka.dependencies.Allowed.ISOBoxer, () => window.ISOBoxer],\n]);\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.hls.Attribute');\ngoog.provide('shaka.hls.Playlist');\ngoog.provide('shaka.hls.PlaylistType');\ngoog.provide('shaka.hls.Segment');\ngoog.provide('shaka.hls.Tag');\n\ngoog.require('goog.asserts');\ngoog.require('shaka.util.Error');\n\n\n/**\n * HLS playlist class.\n */\nshaka.hls.Playlist = class {\n /**\n * @param {!shaka.hls.PlaylistType} type\n * @param {!Array.} tags\n * @param {!Array.=} segments\n */\n constructor(type, tags, segments) {\n /** @const {shaka.hls.PlaylistType} */\n this.type = type;\n\n /** @const {!Array.} */\n this.tags = tags;\n\n /** @const {Array.} */\n this.segments = segments || null;\n }\n};\n\n\n/**\n * @enum {number}\n */\nshaka.hls.PlaylistType = {\n MASTER: 0,\n MEDIA: 1,\n};\n\n\n/**\n * HLS tag class.\n */\nshaka.hls.Tag = class {\n /**\n * @param {number} id\n * @param {string} name\n * @param {!Array.} attributes\n * @param {?string=} value\n */\n constructor(id, name, attributes, value = null) {\n /** @const {number} */\n this.id = id;\n\n /** @type {string} */\n this.name = name;\n\n /** @const {!Array.} */\n this.attributes = attributes;\n\n /** @const {?string} */\n this.value = value;\n }\n\n /**\n * Create the string representation of the tag.\n *\n * For the DRM system - the full tag needs to be passed down to the CDM.\n * There are two ways of doing this (1) save the original tag or (2) recreate\n * the tag.\n * As in some cases (like in tests) the tag never existed in string form, it\n * is far easier to recreate the tag from the parsed form.\n *\n * @param {?Set.=} attributesToSkip\n * @return {string}\n * @override\n */\n toString(attributesToSkip) {\n /**\n * @param {shaka.hls.Attribute} attr\n * @return {string}\n */\n const attrToStr = (attr) => {\n const isNumericAttr = !isNaN(Number(attr.value));\n const value = (isNumericAttr ? attr.value : '\"' + attr.value + '\"');\n return attr.name + '=' + value;\n };\n // A valid tag can only follow 1 of 4 patterns.\n // 1) :\n // 2) :\n // 3) \n // 4) :,\n\n let tagStr = '#' + this.name;\n const appendages = this.attributes ? this.attributes.filter((attr) => {\n if (!attributesToSkip) {\n return true;\n }\n return !attributesToSkip.has(attr.name);\n }).map(attrToStr) : [];\n\n if (this.value) {\n appendages.unshift(this.value);\n }\n\n if (appendages.length > 0) {\n tagStr += ':' + appendages.join(',');\n }\n\n return tagStr;\n }\n\n /**\n * Create the string key of the tag.\n *\n * @param {boolean} keepAllAtributtes\n * @return {string}\n */\n getTagKey(keepAllAtributtes) {\n if (keepAllAtributtes) {\n return this.toString();\n }\n const attributesToSkip = new Set()\n .add('AUDIO')\n .add('VIDEO')\n .add('SUBTITLES')\n .add('PATHWAY-ID')\n .add('GROUP-ID')\n .add('URI');\n return this.toString(attributesToSkip);\n }\n\n /**\n * Adds an attribute to an HLS Tag.\n *\n * @param {!shaka.hls.Attribute} attribute\n */\n addAttribute(attribute) {\n this.attributes.push(attribute);\n }\n\n\n /**\n * Gets the first attribute of the tag with a specified name.\n *\n * @param {string} name\n * @return {?shaka.hls.Attribute} attribute\n */\n getAttribute(name) {\n const attributes = this.attributes.filter((attr) => {\n return attr.name == name;\n });\n\n goog.asserts.assert(attributes.length < 2,\n 'A tag should not have multiple attributes ' +\n 'with the same name!');\n\n if (attributes.length) {\n return attributes[0];\n } else {\n return null;\n }\n }\n\n /**\n * Gets the value of the first attribute of the tag with a specified name.\n * If not found, returns an optional default value.\n *\n * @param {string} name\n * @param {string=} defaultValue\n * @return {?string}\n */\n getAttributeValue(name, defaultValue) {\n const attribute = this.getAttribute(name);\n return attribute ? attribute.value : (defaultValue || null);\n }\n\n\n /**\n * Finds the attribute and returns its value.\n * Throws an error if attribute was not found.\n *\n * @param {string} name\n * @return {string}\n */\n getRequiredAttrValue(name) {\n const attribute = this.getAttribute(name);\n if (!attribute) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.HLS_REQUIRED_ATTRIBUTE_MISSING,\n name);\n }\n\n return attribute.value;\n }\n\n /**\n * Set the name of the tag. Used only for Preload hinted MAP tag.\n * @param {string} name\n */\n setName(name) {\n this.name = name;\n }\n};\n\n\n/**\n * HLS segment class.\n */\nshaka.hls.Segment = class {\n /**\n * Creates an HLS segment object.\n *\n * @param {string} verbatimSegmentUri verbatim segment URI.\n * @param {!Array.} tags\n * @param {!Array.=} partialSegments\n */\n constructor(verbatimSegmentUri, tags, partialSegments=[]) {\n /** @const {!Array.} */\n this.tags = tags;\n\n /** @const {?string} */\n this.verbatimSegmentUri = verbatimSegmentUri;\n\n /** @type {!Array.} */\n this.partialSegments = partialSegments;\n }\n};\n\n\n/**\n * HLS Attribute class.\n */\nshaka.hls.Attribute = class {\n /**\n * Creates an HLS attribute object.\n *\n * @param {string} name\n * @param {string} value\n */\n constructor(name, value) {\n /** @const {string} */\n this.name = name;\n\n /** @const {string} */\n this.value = value;\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.hls.Utils');\n\ngoog.require('shaka.log');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.ManifestParserUtils');\ngoog.requireType('shaka.hls.Tag');\n\n\nshaka.hls.Utils = class {\n /**\n *\n * @param {!Array.} tags\n * @param {string} name\n * @return {!Array.}\n */\n static filterTagsByName(tags, name) {\n return tags.filter((tag) => {\n return tag.name == name;\n });\n }\n\n\n /**\n *\n * @param {!Array.} tags\n * @param {string} type\n * @return {!Array.}\n */\n static filterTagsByType(tags, type) {\n return tags.filter((tag) => {\n const tagType = tag.getRequiredAttrValue('TYPE');\n return tagType == type;\n });\n }\n\n\n /**\n *\n * @param {!Array.} tags\n * @param {string} name\n * @return {?shaka.hls.Tag}\n */\n static getFirstTagWithName(tags, name) {\n for (const tag of tags) {\n if (tag.name === name) {\n return tag;\n }\n }\n return null;\n }\n\n /**\n * Get the numerical value of the first tag with given name if available.\n * Return the default value if the tag is not present.\n *\n * @param {!Array.} tags\n * @param {string} name\n * @param {number=} defaultValue\n * @return {number}\n */\n static getFirstTagWithNameAsNumber(tags, name, defaultValue = 0) {\n const tag = shaka.hls.Utils.getFirstTagWithName(tags, name);\n const value = tag ? Number(tag.value) : defaultValue;\n return value;\n }\n\n /**\n * @param {!Array.} baseUris\n * @param {?string} relativeUri\n * @param {?Map.=} variables\n * @return {!Array.}\n */\n static constructSegmentUris(baseUris, relativeUri, variables) {\n if (!relativeUri) {\n return [];\n }\n return shaka.hls.Utils.constructUris(baseUris, [relativeUri], variables);\n }\n\n\n /**\n * @param {!Array.} baseUris\n * @param {!Array.} relativeUris\n * @param {?Map.=} variables\n * @return {!Array.}\n */\n static constructUris(baseUris, relativeUris, variables) {\n if (!relativeUris.length) {\n return [];\n }\n const resolvedUris = shaka.util.ManifestParserUtils.resolveUris(\n baseUris, relativeUris);\n\n const uris = [];\n for (const uri of resolvedUris) {\n uris.push(shaka.hls.Utils.variableSubstitution(uri, variables));\n }\n\n return uris;\n }\n\n /**\n * Replaces the variables of a given URI.\n *\n * @param {string} uri\n * @param {?Map.=} variables\n * @return {string}\n */\n static variableSubstitution(uri, variables) {\n if (!variables || !variables.size) {\n return uri;\n }\n let newUri = String(uri).replace(/%7B/g, '{').replace(/%7D/g, '}');\n\n const uriVariables = newUri.match(/{\\$\\w*}/g);\n if (uriVariables) {\n for (const variable of uriVariables) {\n // Note: All variables have the structure {$...}\n const variableName = variable.slice(2, variable.length - 1);\n const replaceValue = variables.get(variableName);\n if (replaceValue) {\n newUri = newUri.replace(variable, replaceValue);\n } else {\n shaka.log.error('A variable has been found that is not declared',\n variableName);\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.HLS_VARIABLE_NOT_FOUND,\n variableName);\n }\n }\n }\n return newUri;\n }\n\n\n /**\n * Matches a string to an HLS comment format and returns the result.\n *\n * @param {string} line\n * @return {boolean}\n */\n static isComment(line) {\n return /^#(?!EXT)/m.test(line);\n }\n};\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.hls.ManifestTextParser');\n\ngoog.require('shaka.hls.Attribute');\ngoog.require('shaka.hls.Playlist');\ngoog.require('shaka.hls.PlaylistType');\ngoog.require('shaka.hls.Segment');\ngoog.require('shaka.hls.Tag');\ngoog.require('shaka.hls.Utils');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.StringUtils');\ngoog.require('shaka.util.TextParser');\n\n\n/**\n * HlS manifest text parser.\n */\nshaka.hls.ManifestTextParser = class {\n /** */\n constructor() {\n /** @private {number} */\n this.globalId_ = 0;\n }\n\n /**\n * @param {BufferSource} data\n * @return {!shaka.hls.Playlist}\n */\n parsePlaylist(data) {\n const MEDIA_PLAYLIST_TAGS =\n shaka.hls.ManifestTextParser.MEDIA_PLAYLIST_TAGS;\n const SEGMENT_TAGS = shaka.hls.ManifestTextParser.SEGMENT_TAGS;\n\n // Get the input as a string. Normalize newlines to \\n.\n let str = shaka.util.StringUtils.fromUTF8(data);\n str = str.replace(/\\r\\n|\\r(?=[^\\n]|$)/gm, '\\n').trim();\n\n const lines = str.split(/\\n+/m);\n\n if (!/^#EXTM3U($|[ \\t\\n])/m.test(lines[0])) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.HLS_PLAYLIST_HEADER_MISSING);\n }\n\n /** shaka.hls.PlaylistType */\n let playlistType = shaka.hls.PlaylistType.MASTER;\n\n // First, look for media playlist tags, so that we know what the playlist\n // type really is before we start parsing.\n // TODO: refactor the for loop for better readability.\n // Whether to skip the next element; initialize to true to skip first elem.\n let skip = true;\n for (const line of lines) {\n // Ignore comments.\n if (shaka.hls.Utils.isComment(line) || skip) {\n skip = false;\n continue;\n }\n const tag = this.parseTag_(line);\n // These tags won't actually be used, so don't increment the global\n // id.\n this.globalId_ -= 1;\n\n if (MEDIA_PLAYLIST_TAGS.includes(tag.name)) {\n playlistType = shaka.hls.PlaylistType.MEDIA;\n break;\n } else if (tag.name == 'EXT-X-STREAM-INF') {\n skip = true;\n }\n }\n\n /** {Array.} */\n const tags = [];\n // Initialize to \"true\" to skip the first element.\n skip = true;\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const next = lines[i + 1];\n // Skip comments\n if (shaka.hls.Utils.isComment(line) || skip) {\n skip = false;\n continue;\n }\n\n const tag = this.parseTag_(line);\n if (SEGMENT_TAGS.includes(tag.name)) {\n if (playlistType != shaka.hls.PlaylistType.MEDIA) {\n // Only media playlists should contain segment tags\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.HLS_INVALID_PLAYLIST_HIERARCHY);\n }\n\n const segmentsData = lines.splice(i, lines.length - i);\n const segments = this.parseSegments_(segmentsData, tags);\n return new shaka.hls.Playlist(playlistType, tags, segments);\n }\n\n tags.push(tag);\n\n // An EXT-X-STREAM-INF tag is followed by a URI of a media playlist.\n // Add the URI to the tag object.\n if (tag.name == 'EXT-X-STREAM-INF') {\n const tagUri = new shaka.hls.Attribute('URI', next);\n tag.addAttribute(tagUri);\n skip = true;\n }\n }\n\n return new shaka.hls.Playlist(playlistType, tags);\n }\n\n /**\n * Parses an array of strings into an array of HLS Segment objects.\n *\n * @param {!Array.} lines\n * @param {!Array.} playlistTags\n * @return {!Array.}\n * @private\n */\n parseSegments_(lines, playlistTags) {\n /** @type {!Array.} */\n const segments = [];\n /** @type {!Array.} */\n let segmentTags = [];\n\n /** @type {!Array.} */\n let partialSegmentTags = [];\n\n // The last parsed EXT-X-MAP tag.\n /** @type {?shaka.hls.Tag} */\n let currentMapTag = null;\n\n for (const line of lines) {\n if (/^(#EXT)/.test(line)) {\n const tag = this.parseTag_(line);\n if (shaka.hls.ManifestTextParser.MEDIA_PLAYLIST_TAGS.includes(\n tag.name)) {\n playlistTags.push(tag);\n } else {\n // Mark the the EXT-X-MAP tag, and add it to the segment tags\n // following it later.\n if (tag.name == 'EXT-X-MAP') {\n currentMapTag = tag;\n } else if (tag.name == 'EXT-X-PART') {\n partialSegmentTags.push(tag);\n } else if (tag.name == 'EXT-X-PRELOAD-HINT') {\n if (tag.getAttributeValue('TYPE') == 'PART') {\n partialSegmentTags.push(tag);\n } else if (tag.getAttributeValue('TYPE') == 'MAP') {\n // Rename the Preload Hint tag to be a Map tag.\n tag.setName('EXT-X-MAP');\n currentMapTag = tag;\n }\n } else {\n segmentTags.push(tag);\n }\n }\n } else if (shaka.hls.Utils.isComment(line)) {\n // Skip comments.\n } else {\n const verbatimSegmentUri = line.trim();\n // Attach the last parsed EXT-X-MAP tag to the segment.\n if (currentMapTag) {\n segmentTags.push(currentMapTag);\n }\n // The URI appears after all of the tags describing the segment.\n const segment = new shaka.hls.Segment(\n verbatimSegmentUri, segmentTags, partialSegmentTags);\n segments.push(segment);\n segmentTags = [];\n partialSegmentTags = [];\n }\n }\n // After all the partial segments of a regular segment is published,\n // a EXTINF tag and Uri for a regular segment containing the same media\n // content will get published at last.\n // If no EXTINF tag follows the list of partial segment tags at the end,\n // create a segment to wrap the partial segment tags.\n if (partialSegmentTags.length) {\n if (currentMapTag) {\n segmentTags.push(currentMapTag);\n }\n const segment = new shaka.hls.Segment('', segmentTags,\n partialSegmentTags);\n segments.push(segment);\n }\n\n return segments;\n }\n\n /**\n * Parses a string into an HLS Tag object while tracking what id to use next.\n *\n * @param {string} word\n * @return {!shaka.hls.Tag}\n * @private\n */\n parseTag_(word) {\n return shaka.hls.ManifestTextParser.parseTag(this.globalId_++, word);\n }\n\n /**\n * Parses a string into an HLS Tag object.\n *\n * @param {number} id\n * @param {string} word\n * @return {!shaka.hls.Tag}\n */\n static parseTag(id, word) {\n /* HLS tags start with '#EXT'. A tag can have a set of attributes\n (#EXT-:) and/or a value (#EXT-:).\n An attribute's format is 'AttributeName=AttributeValue'.\n The parsing logic goes like this:\n 1. Everything before ':' is a name (we ignore '#').\n 2. Everything after ':' is a list of comma-seprated items,\n 2a. The first item might be a value, if it does not contain '='.\n 2b. Otherwise, items are attributes.\n 3. If there is no \":\", it's a simple tag with no attributes and no value.\n */\n const blocks = word.match(/^#(EXT[^:]*)(?::(.*))?$/);\n if (!blocks) {\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.MANIFEST,\n shaka.util.Error.Code.INVALID_HLS_TAG,\n word);\n }\n const name = blocks[1];\n const data = blocks[2];\n const attributes = [];\n let value;\n\n if (data) {\n const parser = new shaka.util.TextParser(data);\n let blockAttrs;\n\n // Regex: any number of non-equals-sign characters at the beginning\n // terminated by comma or end of line\n const valueRegex = /^([^,=]+)(?:,|$)/g;\n\n const blockValue = parser.readRegex(valueRegex);\n\n if (blockValue) {\n value = blockValue[1];\n }\n\n // Regex:\n // 1. Key name ([1])\n // 2. Equals sign\n // 3. Either:\n // a. A quoted string (everything up to the next quote, [2])\n // b. An unquoted string\n // (everything up to the next comma or end of line, [3])\n // 4. Either:\n // a. A comma\n // b. End of line\n const attributeRegex = /([^=]+)=(?:\"([^\"]*)\"|([^\",]*))(?:,|$)/g;\n\n while ((blockAttrs = parser.readRegex(attributeRegex))) {\n const attrName = blockAttrs[1];\n const attrValue = blockAttrs[2] || blockAttrs[3];\n const attribute = new shaka.hls.Attribute(attrName, attrValue);\n attributes.push(attribute);\n parser.skipWhitespace();\n }\n }\n\n return new shaka.hls.Tag(id, name, attributes, value);\n }\n};\n\n\n/**\n * HLS tags that only appear on Media Playlists.\n * Used to determine a playlist type.\n *\n * @const {!Array.}\n */\nshaka.hls.ManifestTextParser.MEDIA_PLAYLIST_TAGS = [\n 'EXT-X-TARGETDURATION',\n 'EXT-X-MEDIA-SEQUENCE',\n 'EXT-X-DISCONTINUITY-SEQUENCE',\n 'EXT-X-PLAYLIST-TYPE',\n 'EXT-X-I-FRAMES-ONLY',\n 'EXT-X-ENDLIST',\n 'EXT-X-SERVER-CONTROL',\n 'EXT-X-SKIP',\n 'EXT-X-PART-INF',\n 'EXT-X-DATERANGE',\n];\n\n\n/**\n * HLS tags that only appear on Segments in a Media Playlists.\n * Used to determine the start of the segments info.\n *\n * @const {!Array.}\n */\nshaka.hls.ManifestTextParser.SEGMENT_TAGS = [\n 'EXTINF',\n 'EXT-X-BYTERANGE',\n 'EXT-X-DISCONTINUITY',\n 'EXT-X-PROGRAM-DATE-TIME',\n 'EXT-X-KEY',\n 'EXT-X-DATERANGE',\n 'EXT-X-MAP',\n 'EXT-X-GAP',\n];\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\ngoog.provide('shaka.net.DataUriPlugin');\n\ngoog.require('shaka.log');\ngoog.require('shaka.net.NetworkingEngine');\ngoog.require('shaka.util.AbortableOperation');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.StringUtils');\ngoog.require('shaka.util.Uint8ArrayUtils');\n\n\n/**\n * @summary A networking plugin to handle data URIs.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/data_URIs\n * @export\n */\nshaka.net.DataUriPlugin = class {\n /**\n * @param {string} uri\n * @param {shaka.extern.Request} request\n * @param {shaka.net.NetworkingEngine.RequestType} requestType\n * @param {shaka.extern.ProgressUpdated} progressUpdated Called when a\n * progress event happened.\n * @return {!shaka.extern.IAbortableOperation.}\n * @export\n */\n static parse(uri, request, requestType, progressUpdated) {\n try {\n const parsed = shaka.net.DataUriPlugin.parseRaw(uri);\n\n /** @type {shaka.extern.Response} */\n const response = {\n uri: uri,\n originalUri: uri,\n data: parsed.data,\n headers: {\n 'content-type': parsed.contentType,\n },\n };\n\n return shaka.util.AbortableOperation.completed(response);\n } catch (error) {\n return shaka.util.AbortableOperation.failed(error);\n }\n }\n\n /**\n * @param {string} uri\n * @return {{data: BufferSource, contentType: string}}\n */\n static parseRaw(uri) {\n // Extract the scheme.\n const parts = uri.split(':');\n if (parts.length < 2 || parts[0] != 'data') {\n shaka.log.error('Bad data URI, failed to parse scheme');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.NETWORK,\n shaka.util.Error.Code.MALFORMED_DATA_URI,\n uri);\n }\n const path = parts.slice(1).join(':');\n\n // Extract the encoding and MIME type (required but can be empty).\n const infoAndData = path.split(',');\n if (infoAndData.length < 2) {\n shaka.log.error('Bad data URI, failed to extract encoding and MIME type');\n throw new shaka.util.Error(\n shaka.util.Error.Severity.CRITICAL,\n shaka.util.Error.Category.NETWORK,\n shaka.util.Error.Code.MALFORMED_DATA_URI,\n uri);\n }\n const info = infoAndData[0];\n const dataStr = window.decodeURIComponent(infoAndData.slice(1).join(','));\n\n // The MIME type is always the first thing in the semicolon-separated list\n // of type parameters. It may be blank.\n const typeInfoList = info.split(';');\n const contentType = typeInfoList[0];\n\n // Check for base64 encoding, which is always the last in the\n // semicolon-separated list if present.\n let base64Encoded = false;\n if (typeInfoList.length > 1 &&\n typeInfoList[typeInfoList.length - 1] == 'base64') {\n base64Encoded = true;\n typeInfoList.pop();\n }\n\n // Convert the data.\n /** @type {BufferSource} */\n let data;\n if (base64Encoded) {\n data = shaka.util.Uint8ArrayUtils.fromBase64(dataStr);\n } else {\n data = shaka.util.StringUtils.toUTF8(dataStr);\n }\n\n return {data: data, contentType};\n }\n};\n\n\nshaka.net.NetworkingEngine.registerScheme(\n 'data', shaka.net.DataUriPlugin.parse);\n","/*! @license\n * Shaka Player\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n\ngoog.provide('shaka.hls.HlsParser');\n\ngoog.require('goog.Uri');\ngoog.require('goog.asserts');\ngoog.require('shaka.abr.Ewma');\ngoog.require('shaka.hls.ManifestTextParser');\ngoog.require('shaka.hls.Playlist');\ngoog.require('shaka.hls.PlaylistType');\ngoog.require('shaka.hls.Tag');\ngoog.require('shaka.hls.Utils');\ngoog.require('shaka.log');\ngoog.require('shaka.media.InitSegmentReference');\ngoog.require('shaka.media.ManifestParser');\ngoog.require('shaka.media.PresentationTimeline');\ngoog.require('shaka.media.QualityObserver');\ngoog.require('shaka.media.SegmentIndex');\ngoog.require('shaka.media.SegmentReference');\ngoog.require('shaka.net.DataUriPlugin');\ngoog.require('shaka.net.NetworkingEngine');\ngoog.require('shaka.net.NetworkingEngine.PendingRequest');\ngoog.require('shaka.util.ArrayUtils');\ngoog.require('shaka.util.BufferUtils');\ngoog.require('shaka.util.DrmUtils');\ngoog.require('shaka.util.ContentSteeringManager');\ngoog.require('shaka.util.Error');\ngoog.require('shaka.util.EventManager');\ngoog.require('shaka.util.FakeEvent');\ngoog.require('shaka.util.LanguageUtils');\ngoog.require('shaka.util.ManifestParserUtils');\ngoog.require('shaka.util.MimeUtils');\ngoog.require('shaka.util.Networking');\ngoog.require('shaka.util.OperationManager');\ngoog.require('shaka.util.Pssh');\ngoog.require('shaka.media.SegmentUtils');\ngoog.require('shaka.util.Timer');\ngoog.require('shaka.util.TsParser');\ngoog.require('shaka.util.TXml');\ngoog.require('shaka.util.Platform');\ngoog.require('shaka.util.StreamUtils');\ngoog.require('shaka.util.Uint8ArrayUtils');\ngoog.requireType('shaka.hls.Segment');\n\n\n/**\n * HLS parser.\n *\n * @implements {shaka.extern.ManifestParser}\n * @export\n */\nshaka.hls.HlsParser = class {\n /**\n * Creates an Hls Parser object.\n */\n constructor() {\n /** @private {?shaka.extern.ManifestParser.PlayerInterface} */\n this.playerInterface_ = null;\n\n /** @private {?shaka.extern.ManifestConfiguration} */\n this.config_ = null;\n\n /** @private {number} */\n this.globalId_ = 1;\n\n /** @private {!Map.} */\n this.globalVariables_ = new Map();\n\n /**\n * A map from group id to stream infos created from the media tags.\n * @private {!Map.>}\n */\n this.groupIdToStreamInfosMap_ = new Map();\n\n /**\n * For media playlist lazy-loading to work in livestreams, we have to assume\n * that each stream of a type (video, audio, etc) has the same mappings of\n * sequence number to start time.\n * This map stores those relationships.\n * Only used during livestreams; we do not assume that VOD content is\n * aligned in that way.\n * @private {!Map.>}\n */\n this.mediaSequenceToStartTimeByType_ = new Map();\n\n // Set initial maps.\n const ContentType = shaka.util.ManifestParserUtils.ContentType;\n this.mediaSequenceToStartTimeByType_.set(ContentType.VIDEO, new Map());\n this.mediaSequenceToStartTimeByType_.set(ContentType.AUDIO, new Map());\n this.mediaSequenceToStartTimeByType_.set(ContentType.TEXT, new Map());\n this.mediaSequenceToStartTimeByType_.set(ContentType.IMAGE, new Map());\n\n /**\n * The values are strings of the form \"