shaka-player 4.6.4 → 4.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/controls.css +1 -1
- package/dist/controls.css.map +1 -1
- package/dist/deps.js +9 -5
- package/dist/locales.js +29 -29
- package/dist/shaka-player.compiled.d.ts +46 -3
- package/dist/shaka-player.compiled.debug.d.ts +46 -3
- package/dist/shaka-player.compiled.debug.externs.js +45 -0
- package/dist/shaka-player.compiled.debug.js +382 -351
- package/dist/shaka-player.compiled.debug.map +4 -4
- package/dist/shaka-player.compiled.externs.js +45 -0
- package/dist/shaka-player.compiled.js +1135 -1121
- package/dist/shaka-player.compiled.map +4 -4
- package/dist/shaka-player.ui.d.ts +68 -4
- package/dist/shaka-player.ui.debug.d.ts +68 -4
- package/dist/shaka-player.ui.debug.externs.js +77 -0
- package/dist/shaka-player.ui.debug.js +428 -392
- package/dist/shaka-player.ui.debug.map +4 -4
- package/dist/shaka-player.ui.externs.js +77 -0
- package/dist/shaka-player.ui.js +1304 -1290
- package/dist/shaka-player.ui.map +4 -4
- package/externs/mediasession.js +7 -0
- package/externs/shaka/abr_manager.js +8 -0
- package/externs/shaka/manifest.js +3 -3
- package/externs/shaka/player.js +59 -4
- package/lib/abr/simple_abr_manager.js +41 -15
- package/lib/cea/cea708_service.js +1 -1
- package/lib/cea/cea708_window.js +95 -7
- package/lib/dash/dash_parser.js +55 -11
- package/lib/media/adaptation_set_criteria.js +76 -10
- package/lib/media/media_source_engine.js +42 -18
- package/lib/media/segment_reference.js +12 -0
- package/lib/media/streaming_engine.js +55 -3
- package/lib/player.js +92 -6
- package/lib/util/cmsd_manager.js +269 -0
- package/lib/util/content_steering_manager.js +5 -1
- package/lib/util/mime_utils.js +6 -2
- package/lib/util/periods.js +108 -39
- package/lib/util/player_configuration.js +19 -5
- package/lib/util/stream_utils.js +82 -13
- package/package.json +1 -1
- package/ui/audio_language_selection.js +3 -0
- package/ui/controls.js +60 -0
- package/ui/externs/ui.js +12 -1
- package/ui/hidden_fast_forward_button.js +32 -0
- package/ui/hidden_rewind_button.js +32 -0
- package/ui/hidden_seek_button.js +121 -0
- package/ui/less/buttons.less +50 -0
- package/ui/less/containers.less +18 -0
- package/ui/resolution_selection.js +2 -0
- package/ui/ui.js +2 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -75
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -26
- package/.github/ISSUE_TEMPLATE/question.md +0 -26
- package/.github/config.yml +0 -1
- package/.github/workflows/appspot.yaml +0 -39
- package/.github/workflows/build-and-test.yaml +0 -222
- package/.github/workflows/compute-incremental-coverage.py +0 -265
- package/.github/workflows/custom-actions/prep-for-appspot/action.yaml +0 -56
- package/.github/workflows/custom-actions/set-commit-status/action.yaml +0 -37
- package/.github/workflows/deflake.yaml +0 -31
- package/.github/workflows/demo-version-index.yaml +0 -43
- package/.github/workflows/nightly-demo.yaml +0 -42
- package/.github/workflows/release-please.yaml +0 -193
- package/.github/workflows/report-incremental-coverage.yaml +0 -39
- package/.github/workflows/safari-homedir-launcher.sh +0 -18
- package/.github/workflows/selenium-lab-tests.yaml +0 -370
- package/.github/workflows/shaka-bot-commands/command-help.sh +0 -27
- package/.github/workflows/shaka-bot-commands/command-test.sh +0 -56
- package/.github/workflows/shaka-bot-commands/lib.sh +0 -83
- package/.github/workflows/shaka-bot-commands/main.sh +0 -51
- package/.github/workflows/sync-labels.yaml +0 -33
- package/.github/workflows/talk-to-shaka-bot.yaml +0 -29
- package/.github/workflows/update-issues.yaml +0 -31
- package/.github/workflows/update-screenshots.yaml +0 -142
- package/.github/workflows/validate-pr-title.yaml +0 -27
- package/CHANGELOG.md +0 -5774
- package/CODE_OF_CONDUCT.md +0 -93
- package/CONTRIBUTING.md +0 -76
- package/demo/TengwarTelcontar.woff2 +0 -0
- package/demo/app_logo_144.png +0 -0
- package/demo/app_logo_192.png +0 -0
- package/demo/app_logo_256.png +0 -0
- package/demo/app_logo_384.png +0 -0
- package/demo/app_logo_512.png +0 -0
- package/demo/app_manifest.json +0 -29
- package/demo/asset_card.js +0 -410
- package/demo/autoTemplate.txt +0 -61
- package/demo/cast_receiver/idle1.jpg +0 -0
- package/demo/cast_receiver/idle2.jpg +0 -0
- package/demo/cast_receiver/idle3.jpg +0 -0
- package/demo/cast_receiver/index.html +0 -75
- package/demo/cast_receiver/receiver_app.css +0 -111
- package/demo/cast_receiver/receiver_app.js +0 -158
- package/demo/close_button.js +0 -60
- package/demo/common/asset.js +0 -510
- package/demo/common/assets.js +0 -1634
- package/demo/config.js +0 -859
- package/demo/custom.js +0 -907
- package/demo/customWarning.txt +0 -8
- package/demo/demo.less +0 -591
- package/demo/demo_uncompiled.js +0 -11
- package/demo/demo_utils.js +0 -113
- package/demo/favicon.ico +0 -0
- package/demo/front.js +0 -156
- package/demo/icons/README.md +0 -4
- package/demo/icons/baseline-audiotrack-24px.svg +0 -1
- package/demo/icons/baseline-closed_caption-24px.svg +0 -1
- package/demo/icons/baseline-fast_forward-24px.svg +0 -1
- package/demo/icons/baseline-language-24px.svg +0 -1
- package/demo/icons/baseline-live_tv-24px.svg +0 -1
- package/demo/icons/baseline-subtitles-24px.svg +0 -1
- package/demo/icons/baseline-surround_sound-24px.svg +0 -1
- package/demo/icons/custom_ad.svg +0 -1
- package/demo/icons/custom_box_with_text.svg +0 -1
- package/demo/icons/custom_clear_key.svg +0 -1
- package/demo/icons/custom_high_definition.svg +0 -1
- package/demo/icons/custom_playready.svg +0 -1
- package/demo/icons/custom_ultra_high_definition.svg +0 -1
- package/demo/icons/custom_widevine.svg +0 -1
- package/demo/index.html +0 -173
- package/demo/input.js +0 -270
- package/demo/input_container.js +0 -218
- package/demo/load.js +0 -156
- package/demo/main.js +0 -1854
- package/demo/search.js +0 -452
- package/demo/service_worker.js +0 -355
- package/demo/shaka_logo_trans.png +0 -0
- package/demo/tooltip.js +0 -29
- package/demo/visualizer.js +0 -335
- package/demo/visualizer_button.js +0 -84
- package/dist/demo.compiled.debug.js +0 -340
- package/dist/demo.compiled.debug.map +0 -8
- package/dist/demo.compiled.js +0 -340
- package/dist/demo.compiled.map +0 -8
- package/dist/demo.css +0 -6
- package/dist/demo.css.map +0 -1
- package/dist/receiver.compiled.debug.js +0 -187
- package/dist/receiver.compiled.debug.map +0 -8
- package/dist/receiver.compiled.js +0 -187
- package/dist/receiver.compiled.map +0 -8
- package/docs/announcement-list-join-group.png +0 -0
- package/docs/api-mainpage.md +0 -28
- package/docs/design/REDESIGN.md +0 -283
- package/docs/design/architecture.md +0 -13
- package/docs/design/bg-fetch-after.gv +0 -29
- package/docs/design/bg-fetch-after.gv.png +0 -0
- package/docs/design/bg-fetch-before.gv +0 -18
- package/docs/design/bg-fetch-before.gv.png +0 -0
- package/docs/design/bg-fetch.md +0 -134
- package/docs/design/cast.gv +0 -35
- package/docs/design/cast.gv.png +0 -0
- package/docs/design/chromecast.md +0 -151
- package/docs/design/codec_preferences.md +0 -158
- package/docs/design/dash-audio-channels.md +0 -123
- package/docs/design/dash-manifests.md +0 -248
- package/docs/design/dash-timeline.svg +0 -4
- package/docs/design/dataflow.gv +0 -66
- package/docs/design/dataflow.gv.png +0 -0
- package/docs/design/export.md +0 -70
- package/docs/design/fuzzy-locale-matching.md +0 -40
- package/docs/design/gap-jumping.md +0 -151
- package/docs/design/lcevc-architecture.png +0 -0
- package/docs/design/lcevc-demo.png +0 -0
- package/docs/design/lcevc-integration.md +0 -72
- package/docs/design/locale_compatibility.svg +0 -1
- package/docs/design/locales_tree.svg +0 -1
- package/docs/design/localization-design-principles.md +0 -158
- package/docs/design/newdemo.gv +0 -83
- package/docs/design/newdemo.gv.png +0 -0
- package/docs/design/offline.gv +0 -43
- package/docs/design/offline.gv.png +0 -0
- package/docs/design/offline.md +0 -153
- package/docs/design/ownership.gv +0 -76
- package/docs/design/ownership.gv.png +0 -0
- package/docs/design/preload.md +0 -299
- package/docs/design/preload.png +0 -0
- package/docs/design/talking-about-languages.md +0 -46
- package/docs/design/timeline.svg +0 -152
- package/docs/design/ui.md +0 -31
- package/docs/design/ui_player_relationships.svg +0 -1
- package/docs/jsdoc-plugin.js +0 -74
- package/docs/jsdoc-template/README.md +0 -1
- package/docs/jsdoc-template/publish.js +0 -879
- package/docs/jsdoc-template/static/fonts/OpenSans-Bold-webfont.eot +0 -0
- package/docs/jsdoc-template/static/fonts/OpenSans-Bold-webfont.svg +0 -1830
- package/docs/jsdoc-template/static/fonts/OpenSans-Bold-webfont.woff +0 -0
- package/docs/jsdoc-template/static/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
- package/docs/jsdoc-template/static/fonts/OpenSans-BoldItalic-webfont.svg +0 -1830
- package/docs/jsdoc-template/static/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
- package/docs/jsdoc-template/static/fonts/OpenSans-Italic-webfont.eot +0 -0
- package/docs/jsdoc-template/static/fonts/OpenSans-Italic-webfont.svg +0 -1830
- package/docs/jsdoc-template/static/fonts/OpenSans-Italic-webfont.woff +0 -0
- package/docs/jsdoc-template/static/fonts/OpenSans-Light-webfont.eot +0 -0
- package/docs/jsdoc-template/static/fonts/OpenSans-Light-webfont.svg +0 -1831
- package/docs/jsdoc-template/static/fonts/OpenSans-Light-webfont.woff +0 -0
- package/docs/jsdoc-template/static/fonts/OpenSans-LightItalic-webfont.eot +0 -0
- package/docs/jsdoc-template/static/fonts/OpenSans-LightItalic-webfont.svg +0 -1835
- package/docs/jsdoc-template/static/fonts/OpenSans-LightItalic-webfont.woff +0 -0
- package/docs/jsdoc-template/static/fonts/OpenSans-Regular-webfont.eot +0 -0
- package/docs/jsdoc-template/static/fonts/OpenSans-Regular-webfont.svg +0 -1831
- package/docs/jsdoc-template/static/fonts/OpenSans-Regular-webfont.woff +0 -0
- package/docs/jsdoc-template/static/scripts/linenumber.js +0 -44
- package/docs/jsdoc-template/static/scripts/show-widget.js +0 -55
- package/docs/jsdoc-template/static/styles/jsdoc-default.css +0 -438
- package/docs/jsdoc-template/tmpl/augments.tmpl +0 -10
- package/docs/jsdoc-template/tmpl/container.tmpl +0 -205
- package/docs/jsdoc-template/tmpl/details.tmpl +0 -152
- package/docs/jsdoc-template/tmpl/example.tmpl +0 -2
- package/docs/jsdoc-template/tmpl/examples.tmpl +0 -13
- package/docs/jsdoc-template/tmpl/exceptions.tmpl +0 -32
- package/docs/jsdoc-template/tmpl/layout.tmpl +0 -50
- package/docs/jsdoc-template/tmpl/mainpage.tmpl +0 -14
- package/docs/jsdoc-template/tmpl/members.tmpl +0 -47
- package/docs/jsdoc-template/tmpl/method.tmpl +0 -140
- package/docs/jsdoc-template/tmpl/modifies.tmpl +0 -14
- package/docs/jsdoc-template/tmpl/params.tmpl +0 -131
- package/docs/jsdoc-template/tmpl/properties.tmpl +0 -125
- package/docs/jsdoc-template/tmpl/returns.tmpl +0 -19
- package/docs/jsdoc-template/tmpl/source.tmpl +0 -8
- package/docs/jsdoc-template/tmpl/tutorial.tmpl +0 -21
- package/docs/jsdoc-template/tmpl/type.tmpl +0 -7
- package/docs/jsdoc.conf.json +0 -38
- package/docs/shaka-player-logo.png +0 -0
- package/docs/style.md +0 -174
- package/docs/tutorials/a11y.md +0 -64
- package/docs/tutorials/ad_monetization.md +0 -292
- package/docs/tutorials/application-level-redirects.md +0 -94
- package/docs/tutorials/architecture.md +0 -32
- package/docs/tutorials/basic-usage.md +0 -89
- package/docs/tutorials/blob-url.md +0 -15
- package/docs/tutorials/config.md +0 -148
- package/docs/tutorials/debugging.md +0 -189
- package/docs/tutorials/drm-config.md +0 -274
- package/docs/tutorials/errors.md +0 -95
- package/docs/tutorials/fairplay.md +0 -242
- package/docs/tutorials/faq.md +0 -252
- package/docs/tutorials/index.json +0 -29
- package/docs/tutorials/lcevc.md +0 -118
- package/docs/tutorials/license-server-auth.md +0 -248
- package/docs/tutorials/license-wrapping.md +0 -168
- package/docs/tutorials/manifest-parser.md +0 -365
- package/docs/tutorials/network-and-buffering-config.md +0 -119
- package/docs/tutorials/offline.md +0 -683
- package/docs/tutorials/plugins.md +0 -184
- package/docs/tutorials/selenium-grid-config.md +0 -174
- package/docs/tutorials/service-worker.md +0 -106
- package/docs/tutorials/ui-customization.md +0 -288
- package/docs/tutorials/ui.md +0 -232
- package/docs/tutorials/upgrade-manifest.md +0 -281
- package/docs/tutorials/upgrade.md +0 -104
- package/docs/tutorials/welcome.md +0 -108
- package/docs/tutorials/widevine-service-certs.md +0 -45
- package/karma.conf.js +0 -879
- package/maintained-branches.md +0 -15
- package/roadmap.md +0 -186
- package/test/abr/simple_abr_manager_unit.js +0 -398
- package/test/ads/ad_manager_unit.js +0 -260
- package/test/assumptions/uint8_array_unit.js +0 -22
- package/test/cast/cast_proxy_unit.js +0 -736
- package/test/cast/cast_receiver_integration.js +0 -488
- package/test/cast/cast_receiver_unit.js +0 -1183
- package/test/cast/cast_sender_unit.js +0 -973
- package/test/cast/cast_utils_unit.js +0 -311
- package/test/cea/cea608_memory_unit.js +0 -411
- package/test/cea/cea708_service_unit.js +0 -674
- package/test/cea/cea708_window_unit.js +0 -373
- package/test/cea/cea_decoder_unit.js +0 -615
- package/test/cea/dtvcc_packet_builder_unit.js +0 -158
- package/test/cea/dtvcc_packet_unit.js +0 -60
- package/test/cea/mp4_cea_parser_unit.js +0 -127
- package/test/codec_switching/codec_switching_integration.js +0 -182
- package/test/dash/dash_parser_content_protection_unit.js +0 -998
- package/test/dash/dash_parser_integration.js +0 -74
- package/test/dash/dash_parser_live_unit.js +0 -1542
- package/test/dash/dash_parser_manifest_unit.js +0 -3121
- package/test/dash/dash_parser_segment_base_unit.js +0 -421
- package/test/dash/dash_parser_segment_list_unit.js +0 -380
- package/test/dash/dash_parser_segment_template_unit.js +0 -910
- package/test/dash/mpd_utils_unit.js +0 -794
- package/test/demo/demo_unit.js +0 -108
- package/test/deprecate/enforcer_unit.js +0 -74
- package/test/deprecate/version_unit.js +0 -57
- package/test/hls/hls_live_unit.js +0 -1330
- package/test/hls/hls_parser_unit.js +0 -5276
- package/test/hls/manifest_text_parser_unit.js +0 -545
- package/test/media/adaptation_set_criteria_unit.js +0 -806
- package/test/media/adaptation_set_unit.js +0 -229
- package/test/media/buffering_observer_unit.js +0 -143
- package/test/media/closed_caption_parser_unit.js +0 -18
- package/test/media/content_workarounds_unit.js +0 -43
- package/test/media/drm_engine_integration.js +0 -356
- package/test/media/drm_engine_unit.js +0 -2805
- package/test/media/media_source_engine_integration.js +0 -691
- package/test/media/media_source_engine_unit.js +0 -1512
- package/test/media/mp4_segment_index_parser_unit.js +0 -80
- package/test/media/play_rate_controller_unit.js +0 -69
- package/test/media/playhead_unit.js +0 -1394
- package/test/media/presentation_timeline_unit.js +0 -477
- package/test/media/quality_observer_unit.js +0 -138
- package/test/media/region_observer_unit.js +0 -374
- package/test/media/region_timeline_unit.js +0 -139
- package/test/media/segment_index_unit.js +0 -1080
- package/test/media/segment_prefetch_unit.js +0 -243
- package/test/media/segment_reference_unit.js +0 -63
- package/test/media/stall_detector_unit.js +0 -184
- package/test/media/streaming_engine_integration.js +0 -632
- package/test/media/streaming_engine_unit.js +0 -4211
- package/test/media/time_ranges_utils_unit.js +0 -123
- package/test/media/webm_segment_index_parser_unit.js +0 -90
- package/test/mss/mss_parser_content_protection_unit.js +0 -49
- package/test/mss/mss_parser_unit.js +0 -474
- package/test/mss/mss_player_integration.js +0 -124
- package/test/net/data_uri_plugin_unit.js +0 -105
- package/test/net/http_plugin_unit.js +0 -439
- package/test/net/networking_engine_unit.js +0 -1236
- package/test/net/networking_utils_unit.js +0 -37
- package/test/offline/download_progress_estimator_unit.js +0 -90
- package/test/offline/indexeddb_storage_unit.js +0 -192
- package/test/offline/manifest_convert_unit.js +0 -622
- package/test/offline/offline_integration.js +0 -168
- package/test/offline/offline_manifest_parser_unit.js +0 -231
- package/test/offline/offline_scheme_unit.js +0 -154
- package/test/offline/offline_uri_unit.js +0 -59
- package/test/offline/storage_compatibility_unit.js +0 -344
- package/test/offline/storage_integration.js +0 -1858
- package/test/player_external.js +0 -237
- package/test/player_integration.js +0 -1371
- package/test/player_load_graph_integration.js +0 -865
- package/test/player_src_equals_external.js +0 -154
- package/test/player_src_equals_integration.js +0 -527
- package/test/player_unit.js +0 -4434
- package/test/polyfill/media_capabilities_unit.js +0 -277
- package/test/polyfill/patchedmediakeys_apple_unit.js +0 -130
- package/test/test/assets/3675/chunk-stream0-00001.m4s +0 -0
- package/test/test/assets/3675/chunk-stream0-00002.m4s +0 -0
- package/test/test/assets/3675/chunk-stream0-00003.m4s +0 -0
- package/test/test/assets/3675/chunk-stream0-00004.m4s +0 -0
- package/test/test/assets/3675/chunk-stream0-00005.m4s +0 -0
- package/test/test/assets/3675/chunk-stream0-00006.m4s +0 -0
- package/test/test/assets/3675/chunk-stream0-00007.m4s +0 -0
- package/test/test/assets/3675/dash_0.mpd +0 -30
- package/test/test/assets/3675/dash_1.mpd +0 -30
- package/test/test/assets/3675/dash_2.mpd +0 -30
- package/test/test/assets/3675/dash_3.mpd +0 -30
- package/test/test/assets/3675/dash_4.mpd +0 -30
- package/test/test/assets/3675/dash_5.mpd +0 -26
- package/test/test/assets/3675/init-stream0.m4s +0 -0
- package/test/test/assets/audio-xhe-aac.mp4 +0 -0
- package/test/test/assets/audio.ts +0 -0
- package/test/test/assets/captions-test.ts +0 -0
- package/test/test/assets/cea-init.mp4 +0 -0
- package/test/test/assets/cea-segment.mp4 +0 -0
- package/test/test/assets/chapters.srt +0 -11
- package/test/test/assets/chapters.vtt +0 -10
- package/test/test/assets/chapters2.vtt +0 -10
- package/test/test/assets/dash-aes-128/Fragments(video=0,format=mpd-time-csf) +0 -0
- package/test/test/assets/dash-aes-128/Fragments(video=20000000,format=mpd-time-csf) +0 -0
- package/test/test/assets/dash-aes-128/Fragments(video=40000000,format=mpd-time-csf) +0 -0
- package/test/test/assets/dash-aes-128/Fragments(video=60000000,format=mpd-time-csf) +0 -0
- package/test/test/assets/dash-aes-128/Fragments(video=i,format=mpd-time-csf) +0 -0
- package/test/test/assets/dash-aes-128/dash.mpd +0 -18
- package/test/test/assets/dash-aes-128/license +0 -1
- package/test/test/assets/dash-multi-codec/audio_en_2c_128k_aac.mp4 +0 -0
- package/test/test/assets/dash-multi-codec/audio_es_2c_64k_opus.webm +0 -0
- package/test/test/assets/dash-multi-codec/dash.mpd +0 -32
- package/test/test/assets/dash-multi-codec/video_144p_108k_h264.mp4 +0 -0
- package/test/test/assets/db-dump-v1.json +0 -1
- package/test/test/assets/db-dump-v2-broken.json +0 -1
- package/test/test/assets/db-dump-v2-clean.json +0 -1
- package/test/test/assets/db-dump-v3.json +0 -1
- package/test/test/assets/db-dump-v4-broken.json +0 -1
- package/test/test/assets/db-dump-v5.json +0 -1
- package/test/test/assets/empty_caption_video_init.mp4 +0 -0
- package/test/test/assets/empty_caption_video_segment.mp4 +0 -0
- package/test/test/assets/encrypted-sintel-audio-init.mp4 +0 -0
- package/test/test/assets/encrypted-sintel-audio-segment.mp4 +0 -0
- package/test/test/assets/encrypted-sintel-video-init.mp4 +0 -0
- package/test/test/assets/encrypted-sintel-video-segment.mp4 +0 -0
- package/test/test/assets/green-pixel.mp4 +0 -0
- package/test/test/assets/green-pixel.txt +0 -15
- package/test/test/assets/h265-cea-init.mp4 +0 -0
- package/test/test/assets/h265-cea-segment.mp4 +0 -0
- package/test/test/assets/hls-raw-aac/fileSequence0.aac +0 -0
- package/test/test/assets/hls-raw-aac/fileSequence1.aac +0 -0
- package/test/test/assets/hls-raw-aac/fileSequence2.aac +0 -0
- package/test/test/assets/hls-raw-aac/fileSequence3.aac +0 -0
- package/test/test/assets/hls-raw-aac/manifest.m3u8 +0 -4
- package/test/test/assets/hls-raw-aac/stream.m4a.m3u8 +0 -14
- package/test/test/assets/hls-raw-ac3/fileSequence0.ac3 +0 -0
- package/test/test/assets/hls-raw-ac3/fileSequence1.ac3 +0 -0
- package/test/test/assets/hls-raw-ac3/fileSequence2.ac3 +0 -0
- package/test/test/assets/hls-raw-ac3/fileSequence3.ac3 +0 -0
- package/test/test/assets/hls-raw-ac3/fileSequence4.ac3 +0 -0
- package/test/test/assets/hls-raw-ac3/fileSequence5.ac3 +0 -0
- package/test/test/assets/hls-raw-ac3/fileSequence6.ac3 +0 -0
- package/test/test/assets/hls-raw-ac3/fileSequence7.ac3 +0 -0
- package/test/test/assets/hls-raw-ac3/prog_index.m3u8 +0 -31
- package/test/test/assets/hls-raw-ec3/fileSequence0.ec3 +0 -0
- package/test/test/assets/hls-raw-ec3/fileSequence1.ec3 +0 -0
- package/test/test/assets/hls-raw-ec3/fileSequence2.ec3 +0 -0
- package/test/test/assets/hls-raw-ec3/fileSequence3.ec3 +0 -0
- package/test/test/assets/hls-raw-ec3/fileSequence4.ec3 +0 -0
- package/test/test/assets/hls-raw-ec3/fileSequence5.ec3 +0 -0
- package/test/test/assets/hls-raw-ec3/fileSequence6.ec3 +0 -0
- package/test/test/assets/hls-raw-ec3/fileSequence7.ec3 +0 -0
- package/test/test/assets/hls-raw-ec3/prog_index.m3u8 +0 -31
- package/test/test/assets/hls-raw-mp3/chunklist_w905519204.m3u8 +0 -13
- package/test/test/assets/hls-raw-mp3/media_w905519204_0.mp3 +0 -0
- package/test/test/assets/hls-raw-mp3/media_w905519204_1.mp3 +0 -0
- package/test/test/assets/hls-raw-mp3/media_w905519204_2.mp3 +0 -0
- package/test/test/assets/hls-raw-mp3/media_w905519204_3.mp3 +0 -0
- package/test/test/assets/hls-raw-mp3/playlist.m3u8 +0 -4
- package/test/test/assets/hls-ts-aac/playlist.m3u8 +0 -23
- package/test/test/assets/hls-ts-aac/segment_0.ts +0 -0
- package/test/test/assets/hls-ts-aac/segment_1.ts +0 -0
- package/test/test/assets/hls-ts-aac/segment_2.ts +0 -0
- package/test/test/assets/hls-ts-aac/segment_3.ts +0 -0
- package/test/test/assets/hls-ts-aac/segment_4.ts +0 -0
- package/test/test/assets/hls-ts-aac/segment_5.ts +0 -0
- package/test/test/assets/hls-ts-aac/segment_6.ts +0 -0
- package/test/test/assets/hls-ts-aac/segment_7.ts +0 -0
- package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0000.ts +0 -0
- package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0001.ts +0 -0
- package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0002.ts +0 -0
- package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0003.ts +0 -0
- package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0004.ts +0 -0
- package/test/test/assets/hls-ts-ac3/ChID_voices_6ch_640kbps_dd_sub_0005.ts +0 -0
- package/test/test/assets/hls-ts-ac3/prog_index.m3u8 +0 -19
- package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0000.ts +0 -0
- package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0001.ts +0 -0
- package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0002.ts +0 -0
- package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0003.ts +0 -0
- package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0004.ts +0 -0
- package/test/test/assets/hls-ts-ec3/ChID_voices_6ch_256kbps_ddp_sub_0005.ts +0 -0
- package/test/test/assets/hls-ts-ec3/prog_index.m3u8 +0 -19
- package/test/test/assets/hls-ts-h264/fileSequence0.ts +0 -0
- package/test/test/assets/hls-ts-h264/fileSequence1.ts +0 -0
- package/test/test/assets/hls-ts-h264/fileSequence2.ts +0 -0
- package/test/test/assets/hls-ts-h264/fileSequence3.ts +0 -0
- package/test/test/assets/hls-ts-h264/fileSequence4.ts +0 -0
- package/test/test/assets/hls-ts-h264/fileSequence5.ts +0 -0
- package/test/test/assets/hls-ts-h264/prog_index.m3u8 +0 -25
- package/test/test/assets/hls-ts-h265/0.ts +0 -0
- package/test/test/assets/hls-ts-h265/hevc.m3u8 +0 -6
- package/test/test/assets/hls-ts-h265/index.m3u8 +0 -7
- package/test/test/assets/hls-ts-mp3/manifest.m3u8 +0 -13
- package/test/test/assets/hls-ts-mp3/media_w239891843_0.ts +0 -0
- package/test/test/assets/hls-ts-mp3/media_w239891843_1.ts +0 -0
- package/test/test/assets/hls-ts-mp3/media_w239891843_2.ts +0 -0
- package/test/test/assets/hls-ts-mp3/media_w239891843_3.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h264/chunk.m3u8 +0 -17
- package/test/test/assets/hls-ts-muxed-aac-h264/n_0_0_0.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h264/n_1_0_0.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h264/n_2_0_0.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h264/n_3_0_0.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h264/n_4_0_0.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h264/n_5_0_0.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h264/playlist.m3u8 +0 -4
- package/test/test/assets/hls-ts-muxed-aac-h265/0.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h265/1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-aac-h265/media.m3u8 +0 -9
- package/test/test/assets/hls-ts-muxed-ac3-h264/media.m3u8 +0 -24
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00000.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00001.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00002.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00003.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00004.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ac3-h264/s_00005.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0000.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0001.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0002.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ec3-h264/ChID_voices_1280x720p_25fps_h264_6ch_256kbps_ddp_sub_0003.ts +0 -0
- package/test/test/assets/hls-ts-muxed-ec3-h264/prog_index.m3u8 +0 -14
- package/test/test/assets/hls-ts-muxed-mp3-h264/index.m3u8 +0 -23
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-1-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-2-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-3-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-4-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-5-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-6-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-7-v1-a1.ts +0 -0
- package/test/test/assets/hls-ts-muxed-mp3-h264/seg-8-v1-a1.ts +0 -0
- package/test/test/assets/id3-metadata.aac +0 -0
- package/test/test/assets/id3-metadata.ts +0 -0
- package/test/test/assets/index-segment.mp4 +0 -0
- package/test/test/assets/index-segment.webm +0 -0
- package/test/test/assets/init-segment.webm +0 -0
- package/test/test/assets/large_file.mpd +0 -4930
- package/test/test/assets/multidrm-audio-init.mp4 +0 -0
- package/test/test/assets/multidrm-audio-segment.mp4 +0 -0
- package/test/test/assets/multidrm-video-init.mp4 +0 -0
- package/test/test/assets/multidrm-video-segment.mp4 +0 -0
- package/test/test/assets/multiple-trun-init.mp4 +0 -0
- package/test/test/assets/multiple-trun-segment.mp4 +0 -0
- package/test/test/assets/sintel-audio-init.mp4 +0 -0
- package/test/test/assets/sintel-audio-segment.mp4 +0 -0
- package/test/test/assets/sintel-video-init.mp4 +0 -0
- package/test/test/assets/sintel-video-segment.mp4 +0 -0
- package/test/test/assets/small.mp4 +0 -0
- package/test/test/assets/text-clip-alt.vtt +0 -63
- package/test/test/assets/text-clip.vtt +0 -63
- package/test/test/assets/thumbnails-sprites.vtt +0 -10
- package/test/test/assets/thumbnails.vtt +0 -10
- package/test/test/assets/ttml-init.mp4 +0 -0
- package/test/test/assets/ttml-segment-multiplemdat.mp4 +0 -0
- package/test/test/assets/ttml-segment.mp4 +0 -0
- package/test/test/assets/video.ts +0 -0
- package/test/test/assets/vtt-init.mp4 +0 -0
- package/test/test/assets/vtt-segment-multi-payload.mp4 +0 -0
- package/test/test/assets/vtt-segment-no-duration.mp4 +0 -0
- package/test/test/assets/vtt-segment-settings.mp4 +0 -0
- package/test/test/assets/vtt-segment.mp4 +0 -0
- package/test/test/boot.js +0 -495
- package/test/test/externs/filters.js +0 -44
- package/test/test/externs/fontfaceonload.js +0 -29
- package/test/test/externs/jasmine.js +0 -670
- package/test/test/externs/karma.js +0 -26
- package/test/test/externs/require.js +0 -21
- package/test/test/externs/sprintf.js +0 -18
- package/test/test/namespace.js +0 -10
- package/test/test/util/canned_idb.js +0 -379
- package/test/test/util/cea_utils.js +0 -60
- package/test/test/util/dash_parser_util.js +0 -329
- package/test/test/util/fake_ad.js +0 -321
- package/test/test/util/fake_ad_manager.js +0 -122
- package/test/test/util/fake_demo_main.js +0 -144
- package/test/test/util/fake_drm_engine.js +0 -103
- package/test/test/util/fake_media_source_engine.js +0 -464
- package/test/test/util/fake_networking_engine.js +0 -381
- package/test/test/util/fake_segment_prefetch.js +0 -84
- package/test/test/util/fake_text_displayer.js +0 -60
- package/test/test/util/id3_generator.js +0 -100
- package/test/test/util/indexeddb_utils.js +0 -124
- package/test/test/util/jasmine_fetch.js +0 -382
- package/test/test/util/layout_tests.js +0 -435
- package/test/test/util/loader.js +0 -88
- package/test/test/util/manifest_generator.js +0 -705
- package/test/test/util/manifest_parser_util.js +0 -101
- package/test/test/util/mss_parser_util.js +0 -119
- package/test/test/util/offline_utils.js +0 -105
- package/test/test/util/simple_fakes.js +0 -535
- package/test/test/util/stream_generator.js +0 -676
- package/test/test/util/streaming_engine_util.js +0 -506
- package/test/test/util/test_scheme.js +0 -778
- package/test/test/util/ttml_utils.js +0 -77
- package/test/test/util/ui_utils.js +0 -183
- package/test/test/util/util.js +0 -374
- package/test/test/util/waiter.js +0 -406
- package/test/text/cue_integration.js +0 -51
- package/test/text/lrc_text_parser_unit.js +0 -98
- package/test/text/mp4_ttml_parser_unit.js +0 -171
- package/test/text/mp4_vtt_parser_unit.js +0 -195
- package/test/text/sbv_text_parser_unit.js +0 -81
- package/test/text/simple_text_displayer_unit.js +0 -468
- package/test/text/srt_text_parser_unit.js +0 -163
- package/test/text/ssa_text_parser_unit.js +0 -382
- package/test/text/text_displayer_layout_unit.js +0 -323
- package/test/text/text_engine_unit.js +0 -500
- package/test/text/text_track_integration.js +0 -186
- package/test/text/ttml_text_parser_unit.js +0 -2176
- package/test/text/ui_text_displayer_unit.js +0 -608
- package/test/text/vtt_text_parser_unit.js +0 -1363
- package/test/text/web_vtt_generator_unit.js +0 -144
- package/test/text/web_vtt_layout_integration.js +0 -524
- package/test/transmuxer/transmuxer_engine_integration.js +0 -69
- package/test/transmuxer/transmuxer_integration.js +0 -443
- package/test/ui/ad_ui_unit.js +0 -369
- package/test/ui/localization_unit.js +0 -508
- package/test/ui/ui_customization_unit.js +0 -208
- package/test/ui/ui_integration.js +0 -669
- package/test/ui/ui_unit.js +0 -902
- package/test/util/abortable_operation_unit.js +0 -624
- package/test/util/array_utils_unit.js +0 -58
- package/test/util/buffer_utils_unit.js +0 -185
- package/test/util/cmcd_manager_unit.js +0 -440
- package/test/util/content_steering_manager_unit.js +0 -427
- package/test/util/data_view_reader_unit.js +0 -254
- package/test/util/ebml_parser_unit.js +0 -297
- package/test/util/event_manager_unit.js +0 -185
- package/test/util/fake_event_target_unit.js +0 -123
- package/test/util/id3_utils_unit.js +0 -168
- package/test/util/iterables_unit.js +0 -68
- package/test/util/language_utils_unit.js +0 -240
- package/test/util/manifest_parser_utils_unit.js +0 -55
- package/test/util/mime_utils_unit.js +0 -64
- package/test/util/mp4_box_parsers_unit.js +0 -246
- package/test/util/mp4_parser_unit.js +0 -373
- package/test/util/multi_map_unit.js +0 -94
- package/test/util/object_utils_unit.js +0 -79
- package/test/util/periods_unit.js +0 -1623
- package/test/util/pssh_unit.js +0 -226
- package/test/util/state_history_unit.js +0 -101
- package/test/util/stream_utils_unit.js +0 -1068
- package/test/util/string_utils_unit.js +0 -166
- package/test/util/text_parser_unit.js +0 -165
- package/test/util/ts_parser_unit.js +0 -77
- package/test/util/xml_utils_unit.js +0 -444
package/maintained-branches.md
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
# Maintained Shaka Player Branches
|
|
2
|
-
|
|
3
|
-
We are currently maintaining the following branches of Shaka Player:
|
|
4
|
-
|
|
5
|
-
- v4.6 (latest)
|
|
6
|
-
- v4.5 (previous)
|
|
7
|
-
- v4.3 (in use by the Cast Application Framework)
|
|
8
|
-
- No active LTS branches at this time
|
|
9
|
-
|
|
10
|
-
Other branches are no longer receiving bug fixes, and we recommend you upgrade
|
|
11
|
-
to a maintained branch. For details on upgrading, please see our
|
|
12
|
-
[upgrade guide](https://shaka-player-demo.appspot.com/docs/api/tutorial-upgrade.html).
|
|
13
|
-
|
|
14
|
-
For more information on how these branches are chosen, please refer to our
|
|
15
|
-
[Branch Maintenance Policy](https://shaka-project.github.io/maintenance/shaka-player.html#branch-maintenance-policy).
|
package/roadmap.md
DELETED
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
# Shaka Player Roadmap
|
|
2
|
-
|
|
3
|
-
This doc shows all past and planned future milestones for Shaka Player, with
|
|
4
|
-
brief details about the goals and rough dates of each milestone. This is not a
|
|
5
|
-
comprehensive list of features or fixes for each release. For that, see
|
|
6
|
-
CHANGELOG.md.
|
|
7
|
-
|
|
8
|
-
The goals of future milestones are fluid until we begin that development cycle,
|
|
9
|
-
so the exact milestone for future features is not pre-determined.
|
|
10
|
-
|
|
11
|
-
Candidate features for future release cycles:
|
|
12
|
-
- Official TypeScript defs, generated from source
|
|
13
|
-
https://github.com/shaka-project/shaka-player/issues/1030
|
|
14
|
-
- Background fetch for offline storage
|
|
15
|
-
https://github.com/shaka-project/shaka-player/issues/879
|
|
16
|
-
- A method to stitch together clips
|
|
17
|
-
https://github.com/shaka-project/shaka-player/issues/764
|
|
18
|
-
- Predict next segment in DASH SegmentTimeline
|
|
19
|
-
https://github.com/shaka-project/shaka-player/issues/898
|
|
20
|
-
- Smaller, more modular binary
|
|
21
|
-
|
|
22
|
-
v5.0 - 2024 Q1
|
|
23
|
-
- Preload API
|
|
24
|
-
https://github.com/shaka-project/shaka-player/issues/880
|
|
25
|
-
- Common Media Server Data (CMSD)
|
|
26
|
-
https://github.com/shaka-project/shaka-player/issues/5890
|
|
27
|
-
|
|
28
|
-
=====
|
|
29
|
-
|
|
30
|
-
v4.6 - 2023 Q4
|
|
31
|
-
- Content Steering
|
|
32
|
-
https://github.com/shaka-project/shaka-player/issues/5704
|
|
33
|
-
- New DASH protocol for Low Latency.
|
|
34
|
-
- ManagedMediaSource
|
|
35
|
-
https://github.com/shaka-project/shaka-player/issues/5271
|
|
36
|
-
- Add thumbnails support in src=
|
|
37
|
-
- Remove state engine
|
|
38
|
-
|
|
39
|
-
v4.5 - 2023 Q4
|
|
40
|
-
- Built-in transmuxer support for muxed content streams (audio+video)
|
|
41
|
-
- Built-in transmuxer support for H265 streams
|
|
42
|
-
- Remove optional mux.js dependency
|
|
43
|
-
- Codec switching
|
|
44
|
-
https://github.com/shaka-project/shaka-player/issues/1528
|
|
45
|
-
- AES-128 in DASH.
|
|
46
|
-
https://github.com/shaka-project/shaka-player/issues/5622
|
|
47
|
-
- AWS Elemental MediaTailor
|
|
48
|
-
|
|
49
|
-
v4.4 - 2023 Q3
|
|
50
|
-
- Built-in transmuxer for common cases, no mux.js required:
|
|
51
|
-
- Raw AAC, AC3, or EC3 to MP4 container
|
|
52
|
-
- AAC, AC3, EC3, MP3, or H264 in TS to MP4 container
|
|
53
|
-
- MP3-in-TS to raw MP3
|
|
54
|
-
- Ads API improvements
|
|
55
|
-
- CEA parser for TS
|
|
56
|
-
- HLS support for non-sequence mode (as we had in v3)
|
|
57
|
-
- Partial support for large timestamps
|
|
58
|
-
- UI support for thumbnails on seek
|
|
59
|
-
- Microsoft SmoothStreaming support
|
|
60
|
-
- Segment prefetch
|
|
61
|
-
- Low latency improvements
|
|
62
|
-
|
|
63
|
-
v4.3 - 2022 Q4
|
|
64
|
-
- Support ID3 tags in mp4
|
|
65
|
-
https://github.com/shaka-project/shaka-player/issues/3351
|
|
66
|
-
- Lazy-load HLS playlists on adaptation
|
|
67
|
-
https://github.com/shaka-project/shaka-player/issues/1936
|
|
68
|
-
- HLS key rotation
|
|
69
|
-
https://github.com/shaka-project/shaka-player/issues/741
|
|
70
|
-
|
|
71
|
-
v4.2 - 2022 Q3
|
|
72
|
-
- Automatic ABR quality restrictions based on size
|
|
73
|
-
https://github.com/shaka-project/shaka-player/issues/2333
|
|
74
|
-
- HLS support for AES-128 encryption
|
|
75
|
-
https://github.com/shaka-project/shaka-player/issues/850
|
|
76
|
-
|
|
77
|
-
v4.1 - 2022 Q2
|
|
78
|
-
- HLS support for EXT-X-GAP
|
|
79
|
-
https://github.com/shaka-project/shaka-player/issues/1308
|
|
80
|
-
- Temporarily disable the active variant after `HTTP_ERROR`
|
|
81
|
-
https://github.com/shaka-project/shaka-player/issues/1542
|
|
82
|
-
|
|
83
|
-
v4.0 - 2022 Q2
|
|
84
|
-
- MSE support for FairPlay
|
|
85
|
-
https://github.com/shaka-project/shaka-player/issues/3346
|
|
86
|
-
- Support containerless formats
|
|
87
|
-
https://github.com/shaka-project/shaka-player/issues/2337
|
|
88
|
-
|
|
89
|
-
v3.3 - 2022 Q1
|
|
90
|
-
- Common Media Client Data (CMCD) logging support
|
|
91
|
-
https://github.com/shaka-project/shaka-player/issues/3619
|
|
92
|
-
- Non-linear IMA CS ads
|
|
93
|
-
https://github.com/shaka-project/shaka-player/pull/3639
|
|
94
|
-
|
|
95
|
-
v3.2 - 2021 Q3
|
|
96
|
-
- MediaCapabilities to make performance-based decisions
|
|
97
|
-
https://github.com/shaka-project/shaka-player/issues/1391
|
|
98
|
-
- Configurable key-system priority
|
|
99
|
-
https://github.com/shaka-project/shaka-player/issues/3002
|
|
100
|
-
- Codec order preferences
|
|
101
|
-
https://github.com/shaka-project/shaka-player/issues/2179
|
|
102
|
-
|
|
103
|
-
v3.1 - 2021 Q2
|
|
104
|
-
- Low-latency live (LL-HLS, LL-DASH)
|
|
105
|
-
https://github.com/shaka-project/shaka-player/issues/1525
|
|
106
|
-
- Own CEA parser, use mux.js only for TS
|
|
107
|
-
https://github.com/shaka-project/shaka-player/issues/2648
|
|
108
|
-
- Thumbnail tracks
|
|
109
|
-
DASH: https://github.com/shaka-project/shaka-player/issues/559
|
|
110
|
-
HLS: https://github.com/shaka-project/shaka-player/issues/2429
|
|
111
|
-
|
|
112
|
-
v3.0 - 2020 Q2
|
|
113
|
-
- Code health improvements
|
|
114
|
-
- Conversion to ES6
|
|
115
|
-
- Isolate DASH periods to the DASH parser
|
|
116
|
-
- HLS discontinuity support
|
|
117
|
-
- IMA ad SDK integration
|
|
118
|
-
- Ad controls in the UI
|
|
119
|
-
- Concurrent Storage operations
|
|
120
|
-
|
|
121
|
-
v2.5 - 2019 Q2
|
|
122
|
-
- Video controls UI API
|
|
123
|
-
- FairPlay & iOS support
|
|
124
|
-
- CEA captions in HLS/CMAF and DASH w/ mux.js
|
|
125
|
-
- Single-file playback
|
|
126
|
-
- DASH drift tolerance
|
|
127
|
-
|
|
128
|
-
v2.4 - 2018 Q2
|
|
129
|
-
- TTML and VTT regions
|
|
130
|
-
- CEA captions in HLS/TS
|
|
131
|
-
- Attach/detach API
|
|
132
|
-
|
|
133
|
-
v2.3 - 2017 Q4
|
|
134
|
-
- HLS live
|
|
135
|
-
- Transmux TS w/ mux.js
|
|
136
|
-
- NetworkInformation API to improve bandwidth estimates
|
|
137
|
-
- ES6 transition begins
|
|
138
|
-
|
|
139
|
-
v2.2 - 2017 Q3
|
|
140
|
-
- HLS event-type playlists
|
|
141
|
-
- TextDisplayer interface
|
|
142
|
-
- DASH xlink support
|
|
143
|
-
|
|
144
|
-
v2.1 - 2017 Q2
|
|
145
|
-
- HLS VOD, clear & Widevine only, no CEA
|
|
146
|
-
- DASH trick mode tracks
|
|
147
|
-
- Async network filters
|
|
148
|
-
|
|
149
|
-
v2.0 - 2016 Q3
|
|
150
|
-
- Multi-period DASH
|
|
151
|
-
- Chromecast API
|
|
152
|
-
- TTML, VTT-in-MP4, and TTML-in-MP4
|
|
153
|
-
- Safari, Firefox, & Opera support
|
|
154
|
-
- Plugin system (manifest parsers, network filters, text parsers)
|
|
155
|
-
- DASH emsg box support
|
|
156
|
-
- DASH IPR support
|
|
157
|
-
|
|
158
|
-
v1.6 - 2015 Q4
|
|
159
|
-
- IE11, Edge, & PlayReady support
|
|
160
|
-
- Chromecast added to demo app
|
|
161
|
-
|
|
162
|
-
v1.5 - 2015 Q3
|
|
163
|
-
- Unified configuration system
|
|
164
|
-
- Multiple DASH BaseURL elements for failover
|
|
165
|
-
- Side-loaded text streams
|
|
166
|
-
|
|
167
|
-
v1.4 - 2015 Q3
|
|
168
|
-
- Code health release
|
|
169
|
-
- DASH Location element support
|
|
170
|
-
- Buffering config API
|
|
171
|
-
- License preprocessing API
|
|
172
|
-
|
|
173
|
-
v1.3 - 2015 Q2
|
|
174
|
-
- DASH live
|
|
175
|
-
- Offline playback
|
|
176
|
-
|
|
177
|
-
v1.2 - 2015 Q1
|
|
178
|
-
- DASH Role element support
|
|
179
|
-
|
|
180
|
-
v1.1 - 2015 Q1
|
|
181
|
-
- EME API updates
|
|
182
|
-
|
|
183
|
-
v1.0 - 2014 Q4
|
|
184
|
-
- DASH VOD (MP4 & WebM)
|
|
185
|
-
- VTT subtitles, rendered by the browser
|
|
186
|
-
- Widevine support
|
|
@@ -1,398 +0,0 @@
|
|
|
1
|
-
/*! @license
|
|
2
|
-
* Shaka Player
|
|
3
|
-
* Copyright 2016 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
describe('SimpleAbrManager', () => {
|
|
8
|
-
const sufficientBWMultiplier = 1.06;
|
|
9
|
-
const defaultBandwidthEstimate = 500e3; // 500kbps
|
|
10
|
-
const oldDateNow = Date.now;
|
|
11
|
-
|
|
12
|
-
/** @type {shaka.extern.AbrConfiguration} */
|
|
13
|
-
let config;
|
|
14
|
-
/** @type {!jasmine.Spy} */
|
|
15
|
-
let switchCallback;
|
|
16
|
-
/** @type {!shaka.abr.SimpleAbrManager} */
|
|
17
|
-
let abrManager;
|
|
18
|
-
/** @type {shaka.extern.Manifest} */
|
|
19
|
-
let manifest;
|
|
20
|
-
/** @type {!Array.<shaka.extern.Variant>} */
|
|
21
|
-
let variants;
|
|
22
|
-
|
|
23
|
-
beforeEach(() => {
|
|
24
|
-
Date.now = () => 0;
|
|
25
|
-
switchCallback = jasmine.createSpy('switchCallback');
|
|
26
|
-
|
|
27
|
-
// Keep unsorted.
|
|
28
|
-
manifest = shaka.test.ManifestGenerator.generate((manifest) => {
|
|
29
|
-
manifest.addVariant(100, (variant) => {
|
|
30
|
-
variant.bandwidth = 4e5; // 400 kbps
|
|
31
|
-
variant.addAudio(0);
|
|
32
|
-
variant.addVideo(1);
|
|
33
|
-
});
|
|
34
|
-
manifest.addVariant(101, (variant) => {
|
|
35
|
-
variant.bandwidth = 1e6; // 1000 kbps
|
|
36
|
-
variant.addAudio(2);
|
|
37
|
-
variant.addVideo(3);
|
|
38
|
-
});
|
|
39
|
-
manifest.addVariant(102, (variant) => {
|
|
40
|
-
variant.bandwidth = 5e5; // 500 kbps
|
|
41
|
-
variant.addAudio(4);
|
|
42
|
-
variant.addVideo(5);
|
|
43
|
-
});
|
|
44
|
-
manifest.addVariant(103, (variant) => {
|
|
45
|
-
variant.bandwidth = 2e6;
|
|
46
|
-
variant.addAudio(6);
|
|
47
|
-
variant.addVideo(7);
|
|
48
|
-
});
|
|
49
|
-
manifest.addVariant(104, (variant) => {
|
|
50
|
-
variant.bandwidth = 2e6; // Identical on purpose.
|
|
51
|
-
variant.addAudio(8);
|
|
52
|
-
variant.addVideo(9);
|
|
53
|
-
});
|
|
54
|
-
manifest.addVariant(105, (variant) => {
|
|
55
|
-
variant.bandwidth = 6e5;
|
|
56
|
-
variant.addAudio(10);
|
|
57
|
-
variant.addVideo(11);
|
|
58
|
-
});
|
|
59
|
-
manifest.addTextStream(20);
|
|
60
|
-
manifest.addTextStream(21);
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
config = shaka.util.PlayerConfiguration.createDefault().abr;
|
|
64
|
-
config.defaultBandwidthEstimate = defaultBandwidthEstimate;
|
|
65
|
-
config.useNetworkInformation = false;
|
|
66
|
-
|
|
67
|
-
variants = manifest.variants;
|
|
68
|
-
|
|
69
|
-
abrManager = new shaka.abr.SimpleAbrManager();
|
|
70
|
-
abrManager.init(shaka.test.Util.spyFunc(switchCallback));
|
|
71
|
-
abrManager.configure(config);
|
|
72
|
-
abrManager.setVariants(variants);
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
afterEach(() => {
|
|
76
|
-
abrManager.stop();
|
|
77
|
-
Date.now = oldDateNow;
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
it('can choose audio and video Streams right away', () => {
|
|
81
|
-
const chosen = abrManager.chooseVariant();
|
|
82
|
-
expect(chosen).not.toBe(null);
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
it('uses custom default estimate', () => {
|
|
86
|
-
config.defaultBandwidthEstimate = 3e6;
|
|
87
|
-
abrManager.configure(config);
|
|
88
|
-
const chosen = abrManager.chooseVariant();
|
|
89
|
-
expect(chosen.id).toBe(103);
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
it('can handle empty variants', () => {
|
|
93
|
-
abrManager.setVariants([]);
|
|
94
|
-
const chosen = abrManager.chooseVariant();
|
|
95
|
-
expect(chosen).toBe(null);
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
it('can choose from audio only variants', () => {
|
|
99
|
-
manifest = shaka.test.ManifestGenerator.generate((manifest) => {
|
|
100
|
-
manifest.addVariant(0, (variant) => {
|
|
101
|
-
variant.bandwidth = 4e5;
|
|
102
|
-
variant.addAudio(0);
|
|
103
|
-
});
|
|
104
|
-
manifest.addVariant(1, (variant) => {
|
|
105
|
-
variant.bandwidth = 1e6;
|
|
106
|
-
variant.addAudio(2);
|
|
107
|
-
});
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
abrManager.setVariants(manifest.variants);
|
|
111
|
-
const chosen = abrManager.chooseVariant();
|
|
112
|
-
expect(chosen).not.toBe(null);
|
|
113
|
-
expect(chosen.audio).not.toBe(null);
|
|
114
|
-
expect(chosen.video).toBe(null);
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
it('can choose from video only variants', () => {
|
|
118
|
-
manifest = shaka.test.ManifestGenerator.generate((manifest) => {
|
|
119
|
-
manifest.addVariant(0, (variant) => {
|
|
120
|
-
variant.bandwidth = 4e5;
|
|
121
|
-
variant.addVideo(0);
|
|
122
|
-
});
|
|
123
|
-
manifest.addVariant(1, (variant) => {
|
|
124
|
-
variant.bandwidth = 1e6;
|
|
125
|
-
variant.addVideo(2);
|
|
126
|
-
});
|
|
127
|
-
});
|
|
128
|
-
|
|
129
|
-
abrManager.setVariants(manifest.variants);
|
|
130
|
-
const chosen = abrManager.chooseVariant();
|
|
131
|
-
expect(chosen).not.toBe(null);
|
|
132
|
-
expect(chosen.audio).toBe(null);
|
|
133
|
-
expect(chosen.video).not.toBe(null);
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
for (const bandwidth of [5e5, 6e5]) {
|
|
137
|
-
// Simulate some segments being downloaded just above the desired
|
|
138
|
-
// bandwidth.
|
|
139
|
-
const bytesPerSecond = sufficientBWMultiplier * bandwidth / 8.0;
|
|
140
|
-
|
|
141
|
-
const bandwidthKbps = bandwidth / 1000.0;
|
|
142
|
-
const description = 'picks correct Variant at ' + bandwidthKbps + ' kbps';
|
|
143
|
-
|
|
144
|
-
it(description, () => {
|
|
145
|
-
abrManager.setVariants(variants);
|
|
146
|
-
abrManager.chooseVariant();
|
|
147
|
-
|
|
148
|
-
abrManager.segmentDownloaded(1000, bytesPerSecond, true);
|
|
149
|
-
abrManager.segmentDownloaded(1000, bytesPerSecond, true);
|
|
150
|
-
|
|
151
|
-
abrManager.enable();
|
|
152
|
-
|
|
153
|
-
// Make another call to segmentDownloaded() so switchCallback() is
|
|
154
|
-
// called.
|
|
155
|
-
abrManager.segmentDownloaded(1000, bytesPerSecond, true);
|
|
156
|
-
|
|
157
|
-
// Expect variants 2 to be chosen for bandwidth = 5e5
|
|
158
|
-
// and variant 5 - for bandwidth = 6e5
|
|
159
|
-
const expectedVariant = (bandwidth == 6e5) ? variants[5] : variants[2];
|
|
160
|
-
|
|
161
|
-
expect(switchCallback).toHaveBeenCalledWith(expectedVariant, false, 0);
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
it('can handle 0 duration segments', () => {
|
|
166
|
-
// Makes sure bandwidth estimate doesn't get set to NaN
|
|
167
|
-
// when a 0 duration segment is encountered.
|
|
168
|
-
// https://github.com/shaka-project/shaka-player/issues/582
|
|
169
|
-
const bandwidth = 5e5;
|
|
170
|
-
const bytesPerSecond = sufficientBWMultiplier * bandwidth / 8.0;
|
|
171
|
-
|
|
172
|
-
abrManager.setVariants(variants);
|
|
173
|
-
abrManager.chooseVariant();
|
|
174
|
-
|
|
175
|
-
// 0 duration segment shouldn't cause us to get stuck on the lowest variant
|
|
176
|
-
abrManager.segmentDownloaded(0, bytesPerSecond, true);
|
|
177
|
-
abrManager.segmentDownloaded(1000, bytesPerSecond, true);
|
|
178
|
-
|
|
179
|
-
abrManager.enable();
|
|
180
|
-
|
|
181
|
-
abrManager.segmentDownloaded(1000, bytesPerSecond, true);
|
|
182
|
-
|
|
183
|
-
expect(abrManager.getBandwidthEstimate()).toBeTruthy();
|
|
184
|
-
});
|
|
185
|
-
|
|
186
|
-
it('picks lowest variant when there is insufficient bandwidth', () => {
|
|
187
|
-
const bandwidth = 2e6;
|
|
188
|
-
|
|
189
|
-
abrManager.setVariants(variants);
|
|
190
|
-
abrManager.chooseVariant();
|
|
191
|
-
|
|
192
|
-
// Simulate some segments being downloaded just above the desired
|
|
193
|
-
// bandwidth.
|
|
194
|
-
const bytesPerSecond = sufficientBWMultiplier * bandwidth / 8.0;
|
|
195
|
-
|
|
196
|
-
abrManager.segmentDownloaded(1000, bytesPerSecond, true);
|
|
197
|
-
abrManager.segmentDownloaded(1000, bytesPerSecond, true);
|
|
198
|
-
|
|
199
|
-
abrManager.enable();
|
|
200
|
-
|
|
201
|
-
// Make another call to segmentDownloaded() so switchCallback() is
|
|
202
|
-
// called.
|
|
203
|
-
abrManager.segmentDownloaded(1000, bytesPerSecond, true);
|
|
204
|
-
|
|
205
|
-
// Expect variants 4 to be chosen
|
|
206
|
-
const expectedVariant = variants[3];
|
|
207
|
-
|
|
208
|
-
expect(switchCallback).toHaveBeenCalledWith(expectedVariant, false, 0);
|
|
209
|
-
});
|
|
210
|
-
|
|
211
|
-
it('does not call switchCallback() if not enabled', () => {
|
|
212
|
-
const bandwidth = 5e5;
|
|
213
|
-
const bytesPerSecond = sufficientBWMultiplier * bandwidth / 8.0;
|
|
214
|
-
|
|
215
|
-
abrManager.setVariants(variants);
|
|
216
|
-
abrManager.chooseVariant();
|
|
217
|
-
|
|
218
|
-
// Don't enable AbrManager.
|
|
219
|
-
abrManager.segmentDownloaded(1000, bytesPerSecond, true);
|
|
220
|
-
abrManager.segmentDownloaded(1000, bytesPerSecond, true);
|
|
221
|
-
abrManager.segmentDownloaded(1000, bytesPerSecond, true);
|
|
222
|
-
expect(switchCallback).not.toHaveBeenCalled();
|
|
223
|
-
});
|
|
224
|
-
|
|
225
|
-
it('does not call switchCallback() in switch interval', () => {
|
|
226
|
-
let bandwidth = 5e5;
|
|
227
|
-
let bytesPerSecond = sufficientBWMultiplier * bandwidth / 8.0;
|
|
228
|
-
|
|
229
|
-
abrManager.setVariants(variants);
|
|
230
|
-
abrManager.chooseVariant();
|
|
231
|
-
|
|
232
|
-
abrManager.segmentDownloaded(1000, bytesPerSecond, true);
|
|
233
|
-
abrManager.segmentDownloaded(1000, bytesPerSecond, true);
|
|
234
|
-
|
|
235
|
-
abrManager.enable();
|
|
236
|
-
|
|
237
|
-
abrManager.segmentDownloaded(1000, bytesPerSecond, true);
|
|
238
|
-
expect(switchCallback).toHaveBeenCalled();
|
|
239
|
-
switchCallback.calls.reset();
|
|
240
|
-
|
|
241
|
-
// Simulate drop in bandwidth.
|
|
242
|
-
bandwidth = 2e6;
|
|
243
|
-
bytesPerSecond = sufficientBWMultiplier * bandwidth / 8.0;
|
|
244
|
-
|
|
245
|
-
abrManager.segmentDownloaded(1000, bytesPerSecond, true);
|
|
246
|
-
abrManager.segmentDownloaded(1000, bytesPerSecond, true);
|
|
247
|
-
abrManager.segmentDownloaded(1000, bytesPerSecond, true);
|
|
248
|
-
abrManager.segmentDownloaded(1000, bytesPerSecond, true);
|
|
249
|
-
abrManager.segmentDownloaded(1000, bytesPerSecond, true);
|
|
250
|
-
abrManager.segmentDownloaded(1000, bytesPerSecond, true);
|
|
251
|
-
abrManager.segmentDownloaded(1000, bytesPerSecond, true);
|
|
252
|
-
|
|
253
|
-
// Stay inside switch interval.
|
|
254
|
-
Date.now = () => (config.switchInterval - 2) * 1e3;
|
|
255
|
-
abrManager.segmentDownloaded(1000, bytesPerSecond, true);
|
|
256
|
-
|
|
257
|
-
expect(switchCallback).not.toHaveBeenCalled();
|
|
258
|
-
|
|
259
|
-
// Move outside switch interval.
|
|
260
|
-
Date.now = () => (config.switchInterval + 2) * 1e3;
|
|
261
|
-
abrManager.segmentDownloaded(1000, bytesPerSecond, true);
|
|
262
|
-
|
|
263
|
-
expect(switchCallback).toHaveBeenCalled();
|
|
264
|
-
});
|
|
265
|
-
|
|
266
|
-
it('does not clear the buffer on upgrade', () => {
|
|
267
|
-
// Simulate some segments being downloaded at a high rate, to trigger an
|
|
268
|
-
// upgrade.
|
|
269
|
-
const bandwidth = 5e5;
|
|
270
|
-
const bytesPerSecond = sufficientBWMultiplier * bandwidth / 8.0;
|
|
271
|
-
|
|
272
|
-
abrManager.setVariants(variants);
|
|
273
|
-
abrManager.chooseVariant();
|
|
274
|
-
|
|
275
|
-
abrManager.segmentDownloaded(1000, bytesPerSecond, true);
|
|
276
|
-
abrManager.segmentDownloaded(1000, bytesPerSecond, true);
|
|
277
|
-
|
|
278
|
-
abrManager.enable();
|
|
279
|
-
|
|
280
|
-
// Make another call to segmentDownloaded(). switchCallback() will be
|
|
281
|
-
// called to upgrade.
|
|
282
|
-
abrManager.segmentDownloaded(1000, bytesPerSecond, true);
|
|
283
|
-
|
|
284
|
-
// The second parameter is missing to indicate that the buffer should not be
|
|
285
|
-
// cleared.
|
|
286
|
-
expect(switchCallback).toHaveBeenCalledWith(jasmine.any(Object), false, 0);
|
|
287
|
-
});
|
|
288
|
-
|
|
289
|
-
it('does clear the buffer on upgrade with safemargin to 4', () => {
|
|
290
|
-
// Simulate some segments being downloaded at a high rate, to trigger an
|
|
291
|
-
// upgrade.
|
|
292
|
-
const bandwidth = 5e5;
|
|
293
|
-
const bytesPerSecond = sufficientBWMultiplier * bandwidth / 8.0;
|
|
294
|
-
|
|
295
|
-
// Set the clear buffer to true and the safe margin to 4.
|
|
296
|
-
config.clearBufferSwitch = true;
|
|
297
|
-
config.safeMarginSwitch = 4;
|
|
298
|
-
abrManager.configure(config);
|
|
299
|
-
|
|
300
|
-
abrManager.setVariants(variants);
|
|
301
|
-
abrManager.chooseVariant();
|
|
302
|
-
|
|
303
|
-
abrManager.segmentDownloaded(1000, bytesPerSecond, true);
|
|
304
|
-
abrManager.segmentDownloaded(1000, bytesPerSecond, true);
|
|
305
|
-
|
|
306
|
-
abrManager.enable();
|
|
307
|
-
|
|
308
|
-
// Make another call to segmentDownloaded(). switchCallback() will be
|
|
309
|
-
// called to upgrade.
|
|
310
|
-
abrManager.segmentDownloaded(1000, bytesPerSecond, true);
|
|
311
|
-
|
|
312
|
-
// The second parameter is missing to indicate that the buffer should not be
|
|
313
|
-
// cleared.
|
|
314
|
-
expect(switchCallback).toHaveBeenCalledWith(jasmine.any(Object), true, 4);
|
|
315
|
-
});
|
|
316
|
-
|
|
317
|
-
it('does not clear the buffer on downgrade', () => {
|
|
318
|
-
// Simulate some segments being downloaded at a low rate, to trigger a
|
|
319
|
-
// downgrade.
|
|
320
|
-
const bandwidth = 5e5;
|
|
321
|
-
const bytesPerSecond = sufficientBWMultiplier * bandwidth / 8.0;
|
|
322
|
-
|
|
323
|
-
// Set the default high so that the initial choice will be high-quality.
|
|
324
|
-
config.defaultBandwidthEstimate = 4e6;
|
|
325
|
-
abrManager.configure(config);
|
|
326
|
-
|
|
327
|
-
abrManager.setVariants(variants);
|
|
328
|
-
abrManager.chooseVariant();
|
|
329
|
-
|
|
330
|
-
abrManager.segmentDownloaded(1000, bytesPerSecond, true);
|
|
331
|
-
abrManager.segmentDownloaded(1000, bytesPerSecond, true);
|
|
332
|
-
|
|
333
|
-
abrManager.enable();
|
|
334
|
-
|
|
335
|
-
// Make another call to segmentDownloaded(). switchCallback() will be
|
|
336
|
-
// called to downgrade.
|
|
337
|
-
abrManager.segmentDownloaded(1000, bytesPerSecond, true);
|
|
338
|
-
|
|
339
|
-
// The second parameter is missing to indicate that the buffer should not be
|
|
340
|
-
// cleared.
|
|
341
|
-
expect(switchCallback).toHaveBeenCalledWith(jasmine.any(Object), false, 0);
|
|
342
|
-
});
|
|
343
|
-
|
|
344
|
-
it('will respect restrictions', () => {
|
|
345
|
-
manifest = shaka.test.ManifestGenerator.generate((manifest) => {
|
|
346
|
-
manifest.addVariant(10, (variant) => {
|
|
347
|
-
variant.bandwidth = 1e5;
|
|
348
|
-
variant.addVideo(0, (stream) => {
|
|
349
|
-
stream.size(50, 50);
|
|
350
|
-
});
|
|
351
|
-
});
|
|
352
|
-
manifest.addVariant(11, (variant) => {
|
|
353
|
-
variant.bandwidth = 2e5;
|
|
354
|
-
variant.addVideo(1, (stream) => {
|
|
355
|
-
stream.size(200, 200);
|
|
356
|
-
});
|
|
357
|
-
});
|
|
358
|
-
});
|
|
359
|
-
|
|
360
|
-
abrManager.setVariants(manifest.variants);
|
|
361
|
-
let chosen = abrManager.chooseVariant();
|
|
362
|
-
expect(chosen.id).toBe(11);
|
|
363
|
-
|
|
364
|
-
config.restrictions.maxWidth = 100;
|
|
365
|
-
abrManager.configure(config);
|
|
366
|
-
|
|
367
|
-
chosen = abrManager.chooseVariant();
|
|
368
|
-
expect(chosen.id).toBe(10);
|
|
369
|
-
});
|
|
370
|
-
|
|
371
|
-
it('uses lowest-bandwidth variant when restrictions cannot be met', () => {
|
|
372
|
-
manifest = shaka.test.ManifestGenerator.generate((manifest) => {
|
|
373
|
-
manifest.addVariant(10, (variant) => {
|
|
374
|
-
variant.bandwidth = 1e5;
|
|
375
|
-
variant.addVideo(0, (stream) => {
|
|
376
|
-
stream.size(50, 50);
|
|
377
|
-
});
|
|
378
|
-
});
|
|
379
|
-
manifest.addVariant(11, (variant) => {
|
|
380
|
-
variant.bandwidth = 2e5;
|
|
381
|
-
variant.addVideo(1, (stream) => {
|
|
382
|
-
stream.size(200, 200);
|
|
383
|
-
});
|
|
384
|
-
});
|
|
385
|
-
});
|
|
386
|
-
|
|
387
|
-
abrManager.setVariants(manifest.variants);
|
|
388
|
-
let chosen = abrManager.chooseVariant();
|
|
389
|
-
expect(chosen.id).toBe(11);
|
|
390
|
-
|
|
391
|
-
// This restriction cannot be met, but we shouldn't fail.
|
|
392
|
-
config.restrictions.maxWidth = 1;
|
|
393
|
-
abrManager.configure(config);
|
|
394
|
-
|
|
395
|
-
chosen = abrManager.chooseVariant();
|
|
396
|
-
expect(chosen.id).toBe(10);
|
|
397
|
-
});
|
|
398
|
-
});
|