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
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
# Debugging
|
|
2
|
-
|
|
3
|
-
#### Create an error
|
|
4
|
-
|
|
5
|
-
Let's say that we have some kind of error, and we want to debug it.
|
|
6
|
-
To simulate this, we'll start with the code from {@tutorial basic-usage}
|
|
7
|
-
and make a bad change.
|
|
8
|
-
|
|
9
|
-
First, let's change `manifestUri` by removing the last letter.
|
|
10
|
-
|
|
11
|
-
```js
|
|
12
|
-
const manifestUri =
|
|
13
|
-
'https://storage.googleapis.com/shaka-demo-assets/angel-one/dash.mp';
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
Now reload the page. This causes an error in the JS console that says "Error
|
|
17
|
-
code 1001".
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
#### Looking up error codes
|
|
21
|
-
|
|
22
|
-
Look at the Error we just logged. It has `category: 1`, `code: 1001`. To find
|
|
23
|
-
out what that means, check the docs for {@link shaka.util.Error}. There we find
|
|
24
|
-
that `1001` means `BAD_HTTP_STATUS`:
|
|
25
|
-
|
|
26
|
-
> An HTTP network request returned an HTTP status that indicated a failure.
|
|
27
|
-
> error.data[0] is the URI.
|
|
28
|
-
> ...
|
|
29
|
-
|
|
30
|
-
So some HTTP request failed, and we can see the failed URI in `data[0]`.
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
#### Loading the debug library
|
|
34
|
-
|
|
35
|
-
The compiled library has no usable stack traces and no logging. So to get more
|
|
36
|
-
information, we need to switch to the debug library. The debug library is still
|
|
37
|
-
compiled into a single bundle, but logging and other debug features are enabled.
|
|
38
|
-
|
|
39
|
-
To load the debug version of the library instead of the compiled version, just
|
|
40
|
-
change "compiled.js" to "compiled.debug.js" in our HTML file:
|
|
41
|
-
|
|
42
|
-
```html
|
|
43
|
-
<head>
|
|
44
|
-
<!-- Shaka Player debug library: -->
|
|
45
|
-
<script src="shaka-player.compiled.debug.js"></script>
|
|
46
|
-
|
|
47
|
-
<!-- Your application source: -->
|
|
48
|
-
<script src="myapp.js"></script>
|
|
49
|
-
</head>
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
Once we're using the debug library, we will be able to see detailed logs and
|
|
53
|
-
line numbers for errors.
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
Reload the page and look in the JavaScript console. Now we see something
|
|
57
|
-
similar to this (formatted a bit differently in the console):
|
|
58
|
-
|
|
59
|
-
```js
|
|
60
|
-
HEAD http://storage.googleapis.com/shaka-demo-assets/angel-one/dash.mp 404 (Not Found) http_plugin.js:94
|
|
61
|
-
|
|
62
|
-
HEAD http://storage.googleapis.com/shaka-demo-assets/angel-one/dash.mp 404 (Not Found) http_plugin.js:94
|
|
63
|
-
|
|
64
|
-
HEAD request to guess manifest type failed! shaka.util.Error manifest_parser.js:179
|
|
65
|
-
|
|
66
|
-
Error code 1001 object shaka.util.Error myapp.js:45
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
We have a little more information from the library now, and we can expand the
|
|
70
|
-
Error object and see a human-readable message and a stack trace:
|
|
71
|
-
|
|
72
|
-
```js
|
|
73
|
-
shaka.util.Error
|
|
74
|
-
category: 1
|
|
75
|
-
code: 1001
|
|
76
|
-
data: Array[3]
|
|
77
|
-
0: "http://storage.googleapis.com/shaka-demo-assets/angel-one/dash.mp"
|
|
78
|
-
1: 404
|
|
79
|
-
2: ""
|
|
80
|
-
length: 3
|
|
81
|
-
message:
|
|
82
|
-
"Shaka Error NETWORK.BAD_HTTP_STATUS (...)"
|
|
83
|
-
stack: "Error: Shaka Error NETWORK.BAD_HTTP_STATUS (http://storage.googleapis.com/shaka-demo-assets/angel-one/dash.mp,404,)
|
|
84
|
-
at new shaka.util.Error (http://localhost/shaka/lib/util/error.js:77:13)
|
|
85
|
-
at XMLHttpRequest.xhr.onload (http://localhost/shaka/lib/net/http_plugin.js:70:16)"
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
With the information from the debug library, we have the error name as well as
|
|
89
|
-
the code. So we could avoid looking up the number in the documentation. The
|
|
90
|
-
stack trace gives us clues about where the error was generated, so we can look
|
|
91
|
-
more closely at the source code if we need to.
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
#### Setting the log level
|
|
95
|
-
|
|
96
|
-
Sometimes the error and stack trace isn't enough. Sometimes you need to see a
|
|
97
|
-
long sequence of events leading up to an error. You may also be asked to attach
|
|
98
|
-
logs as part of a bug report to help the Shaka Player team understand your bug.
|
|
99
|
-
|
|
100
|
-
For this, you want to set the log level. The log level lets you control what
|
|
101
|
-
logs are shown by the debug library. To set the log level, add one of these to
|
|
102
|
-
the top of `initApp()` in myapp.js:
|
|
103
|
-
|
|
104
|
-
```js
|
|
105
|
-
// Debug logs, when the default of INFO isn't enough:
|
|
106
|
-
shaka.log.setLevel(shaka.log.Level.DEBUG);
|
|
107
|
-
|
|
108
|
-
// Verbose logs, which can generate a lot of output:
|
|
109
|
-
shaka.log.setLevel(shaka.log.Level.V1);
|
|
110
|
-
|
|
111
|
-
// Verbose 2, which is extremely noisy:
|
|
112
|
-
shaka.log.setLevel(shaka.log.Level.V2);
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
Please note that this method is not available from the compiled library.
|
|
116
|
-
|
|
117
|
-
If we set the level to `V1` and reload, we get something like this in the
|
|
118
|
-
JavaScript console:
|
|
119
|
-
|
|
120
|
-
```js
|
|
121
|
-
HEAD http://storage.googleapis.com/shaka-demo-assets/angel-one/dash.mp 404 (Not Found) http_plugin.js:94
|
|
122
|
-
|
|
123
|
-
Unable to find byte-order-mark, making an educated guess. string_utils.js:130
|
|
124
|
-
|
|
125
|
-
HTTP error text: http_plugin.js:69
|
|
126
|
-
|
|
127
|
-
HEAD http://storage.googleapis.com/shaka-demo-assets/angel-one/dash.mp 404 (Not Found) http_plugin.js:94
|
|
128
|
-
|
|
129
|
-
Unable to find byte-order-mark, making an educated guess. string_utils.js:130
|
|
130
|
-
|
|
131
|
-
HTTP error text: http_plugin.js:69
|
|
132
|
-
|
|
133
|
-
HEAD request to guess manifest type failed! shaka.util.Error manifest_parser.js:179
|
|
134
|
-
|
|
135
|
-
load() failed: shaka.util.Error player.js:498
|
|
136
|
-
|
|
137
|
-
Error code 1001 object shaka.util.Error myapp.js:48
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
So much more information! We can now see that the failed HEAD request caused
|
|
141
|
-
`load()` to fail.
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
#### Advanced: Loading the uncompiled library
|
|
145
|
-
|
|
146
|
-
To do rapid testing and development, you can also load the uncompiled library.
|
|
147
|
-
This allows you to edit files and just hit the "reload" button in the browser
|
|
148
|
-
to see changes immediately. This approach is trickier than using the debug
|
|
149
|
-
library, because the entire source tree needs to be available to your web
|
|
150
|
-
server, and because the individual sources can't be moved relative to the files
|
|
151
|
-
in `dist/`.
|
|
152
|
-
|
|
153
|
-
Instead of the single-file compiled library, we need to load three scripts in
|
|
154
|
-
our HTML file:
|
|
155
|
-
|
|
156
|
-
1. Closure's base library. (This is a small JavaScript library related to the
|
|
157
|
-
Closure compiler used when we build Shaka.) This is what loads Shaka without
|
|
158
|
-
requiring you to list all 50+ source files.
|
|
159
|
-
2. A dependency file which maps Shaka's class names to source files. This is
|
|
160
|
-
how Closure's base library can locate all of Shaka's individual source files.
|
|
161
|
-
3. The uncompiled Shaka library's bootstrap file, "shaka-player.uncompiled.js".
|
|
162
|
-
This uses Closure to load the top-level parts of the library. Each of those
|
|
163
|
-
files in turn load their internal dependencies.
|
|
164
|
-
|
|
165
|
-
Once we're using the uncompiled library, we will be able to reload quickly
|
|
166
|
-
without rebuilding.
|
|
167
|
-
|
|
168
|
-
```html
|
|
169
|
-
<head>
|
|
170
|
-
<!-- Closure base: -->
|
|
171
|
-
<script src="node_modules/google-closure-library/closure/goog/base.js"></script>
|
|
172
|
-
<!-- Deps file: -->
|
|
173
|
-
<script src="dist/deps.js"></script>
|
|
174
|
-
<!-- Shaka Player uncompiled library: -->
|
|
175
|
-
<script src="shaka-player.uncompiled.js"></script>
|
|
176
|
-
|
|
177
|
-
<!-- Your application source: -->
|
|
178
|
-
<script src="myapp.js"></script>
|
|
179
|
-
</head>
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
#### Wrap up
|
|
184
|
-
|
|
185
|
-
To sum up, remember these points when debugging your application:
|
|
186
|
-
|
|
187
|
-
- Use the debug version of Shaka Player for debugging and integration work
|
|
188
|
-
- Refer to the docs for error codes
|
|
189
|
-
- Increase the log level when you need more detail
|
|
@@ -1,274 +0,0 @@
|
|
|
1
|
-
# DRM Configuration
|
|
2
|
-
|
|
3
|
-
#### NOTE: EME and http URLs
|
|
4
|
-
|
|
5
|
-
EME requires a secure URL to use. This means you have to use `https` or be on
|
|
6
|
-
`localhost`. Currently only Chrome enforces it, but other browsers will in the
|
|
7
|
-
future. Also, because of mixed content requirements, if your site is using
|
|
8
|
-
`https`, then your manifest and every segment will also need to use `https` too.
|
|
9
|
-
|
|
10
|
-
See: Chrome's [announcement][], Firefox's [intent to remove][firefox_bug], and
|
|
11
|
-
how to [disable for testing][allow_http].
|
|
12
|
-
|
|
13
|
-
[allow_http]: https://www.chromium.org/Home/chromium-security/deprecating-powerful-features-on-insecure-origins
|
|
14
|
-
[announcement]: https://groups.google.com/a/chromium.org/forum/#!msg/blink-dev/tXmKPlXsnCQ/ptOETCUvBwAJ
|
|
15
|
-
[firefox_bug]: https://bugzilla.mozilla.org/show_bug.cgi?id=1322517
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
#### License Servers
|
|
19
|
-
|
|
20
|
-
Without DRM configuration, Shaka only plays clear content. To play protected
|
|
21
|
-
content, the application only needs to tell Shaka one basic thing: the URL(s)
|
|
22
|
-
of its license server(s).
|
|
23
|
-
|
|
24
|
-
We've made this simple through `player.configure()`. The field `drm.servers` is
|
|
25
|
-
an object mapping key system IDs to server URLs. For example, to set license
|
|
26
|
-
servers for both Widevine and Playready:
|
|
27
|
-
|
|
28
|
-
```js
|
|
29
|
-
player.configure({
|
|
30
|
-
drm: {
|
|
31
|
-
servers: {
|
|
32
|
-
'com.widevine.alpha': 'https://foo.bar/drm/widevine',
|
|
33
|
-
'com.microsoft.playready': 'https://foo.bar/drm/playready'
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
Assuming your manifest uses the standard UUIDs for those key systems, that's
|
|
40
|
-
all you need to do.
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
#### Choosing a Key System
|
|
44
|
-
|
|
45
|
-
Shaka Player is key-system-agnostic, meaning we don't prefer any key systems
|
|
46
|
-
over any others. We use EME to ask the browser what it supports, and make no
|
|
47
|
-
assumptions. If your browser supports multiple key systems, the first supported
|
|
48
|
-
key system in the manifest is used.
|
|
49
|
-
|
|
50
|
-
The interoperable encryption standard that DRM vendors are implementing is
|
|
51
|
-
called Common Encryption (CENC). Some DASH manifests don't specify any
|
|
52
|
-
particular key system at all, but instead state that any CENC system will do:
|
|
53
|
-
|
|
54
|
-
```xml
|
|
55
|
-
<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc"/>
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
If this is the only `<ContentProtection>` element in the manifest, Shaka will
|
|
59
|
-
try all key systems it knows. (Based on keySystemsByURI in
|
|
60
|
-
{@linksource shaka.extern.DashManifestConfiguration}.)
|
|
61
|
-
|
|
62
|
-
Through `player.configure()`, you can update the dash key systems mapping by
|
|
63
|
-
scheme URI:
|
|
64
|
-
|
|
65
|
-
```js
|
|
66
|
-
player.configure({
|
|
67
|
-
manifest: {
|
|
68
|
-
dash: {
|
|
69
|
-
keySystemsByURI: {
|
|
70
|
-
'urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95': 'com.microsoft.playready.recommendation',
|
|
71
|
-
'urn:uuid:79f0049a-4098-8642-ab92-e65be0885f95': 'com.microsoft.playready.recommendation',
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
If the browser supports it and you configured a license server URL for it, we'll
|
|
79
|
-
use it.
|
|
80
|
-
|
|
81
|
-
Alternative there are a config for make a mapping of keysystem if you know that
|
|
82
|
-
is broadly supported. For example, `com.microsoft.playready.recommendation`:
|
|
83
|
-
|
|
84
|
-
```js
|
|
85
|
-
player.configure({
|
|
86
|
-
drm: {
|
|
87
|
-
keySystemsMapping: {
|
|
88
|
-
'com.microsoft.playready': 'com.microsoft.playready.recommendation',
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
});
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
With the previous configuration you will choose the `recommendation` keySystem
|
|
95
|
-
when your manifest (HLS or DASH) uses PlayReady.
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
#### Clear Key
|
|
99
|
-
|
|
100
|
-
The EME spec requires browsers to support a common key system called "Clear
|
|
101
|
-
Key". *(At the time of this writing (April 2016), only Chrome and Firefox
|
|
102
|
-
have implemented "Clear Key".)*
|
|
103
|
-
Clear Key uses unencrypted keys to decrypt CENC content, and can be useful
|
|
104
|
-
for diagnosing problems and testing integrations. To configure Clear Key,
|
|
105
|
-
use the configuration field `drm.clearKeys` and provide a map of key IDs to
|
|
106
|
-
content keys (both in hex):
|
|
107
|
-
|
|
108
|
-
```js
|
|
109
|
-
player.configure({
|
|
110
|
-
drm: {
|
|
111
|
-
clearKeys: {
|
|
112
|
-
// 'key-id-in-hex': 'key-in-hex',
|
|
113
|
-
'deadbeefdeadbeefdeadbeefdeadbeef': '18675309186753091867530918675309',
|
|
114
|
-
'02030507011013017019023029031037': '03050701302303204201080425098033'
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
This will force the use of Clear Key for decryption, regardless of what is in
|
|
121
|
-
your manifest. Use this when you need to confirm that your keys are correct.
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
#### Clear Key Licenses
|
|
125
|
-
|
|
126
|
-
If your manifest actually specifies Clear Key, you can also use the normal
|
|
127
|
-
license request mechanism to retrieve keys based on key IDs. The EME spec
|
|
128
|
-
defines a JSON-based [license request format] and [license format] for the
|
|
129
|
-
Clear Key CDM. If you have a server that understands these, just configure
|
|
130
|
-
a license server as normal:
|
|
131
|
-
|
|
132
|
-
```js
|
|
133
|
-
player.configure({
|
|
134
|
-
drm: {
|
|
135
|
-
servers: {
|
|
136
|
-
'org.w3.clearkey': 'http://foo.bar/drm/clearkey'
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
});
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
[license request format]: https://w3c.github.io/encrypted-media/#clear-key-request-format
|
|
143
|
-
[license format]: https://w3c.github.io/encrypted-media/#clear-key-license-format
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
#### Advanced DRM Configuration
|
|
147
|
-
|
|
148
|
-
We have several {@link shaka.extern.AdvancedDrmConfiguration advanced options}
|
|
149
|
-
available to give you access to the full EME configuration. The config field
|
|
150
|
-
`drm.advanced` is an object mapping key system IDs to their advanced settings.
|
|
151
|
-
For example, to require hardware security in Widevine:
|
|
152
|
-
|
|
153
|
-
```js
|
|
154
|
-
player.configure({
|
|
155
|
-
drm: {
|
|
156
|
-
servers: {
|
|
157
|
-
'com.widevine.alpha': 'https://foo.bar/drm/widevine'
|
|
158
|
-
},
|
|
159
|
-
advanced: {
|
|
160
|
-
'com.widevine.alpha': {
|
|
161
|
-
'videoRobustness': 'HW_SECURE_ALL',
|
|
162
|
-
'audioRobustness': 'HW_SECURE_ALL'
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
});
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
If you don't need them, you can leave these at their default settings.
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
#### Robustness
|
|
173
|
-
|
|
174
|
-
Robustness refers to how securely the content is handled by the key system. This
|
|
175
|
-
is a key-system-specific string that specifies the requirements for successful
|
|
176
|
-
playback. Passing in a higher security level than can be supported will cause
|
|
177
|
-
`player.load()` to fail with `REQUESTED_KEY_SYSTEM_CONFIG_UNAVAILABLE`. The
|
|
178
|
-
default is the empty string, which is the lowest security level supported by the
|
|
179
|
-
key system.
|
|
180
|
-
|
|
181
|
-
Each key system has their own values for robustness.
|
|
182
|
-
|
|
183
|
-
##### Widevine
|
|
184
|
-
|
|
185
|
-
Chromium sources: https://cs.chromium.org/chromium/src/components/cdm/renderer/widevine_key_system_properties.h?q=SW_SECURE_CRYPTO&l=22
|
|
186
|
-
|
|
187
|
-
- `SW_SECURE_CRYPTO`
|
|
188
|
-
- `SW_SECURE_DECODE`
|
|
189
|
-
- `HW_SECURE_CRYPTO`
|
|
190
|
-
- `HW_SECURE_DECODE`
|
|
191
|
-
- `HW_SECURE_ALL`
|
|
192
|
-
|
|
193
|
-
##### PlayReady
|
|
194
|
-
|
|
195
|
-
Microsoft Documentation: https://docs.microsoft.com/en-us/playready/overview/security-level
|
|
196
|
-
|
|
197
|
-
- `3000`
|
|
198
|
-
- `2000`
|
|
199
|
-
- `150`
|
|
200
|
-
|
|
201
|
-
`com.microsoft.playready` key system ignores given robustness and stays at a
|
|
202
|
-
`2000` decryption level.
|
|
203
|
-
|
|
204
|
-
NB: Audio Hardware DRM is not supported (PlayReady limitation)
|
|
205
|
-
|
|
206
|
-
##### FairPlay
|
|
207
|
-
|
|
208
|
-
Based on [Apple's Documentation](https://developer.apple.com/streaming/fps/),
|
|
209
|
-
you should provide an empty string as robustness
|
|
210
|
-
|
|
211
|
-
##### Other key-systems
|
|
212
|
-
|
|
213
|
-
Values for other key systems are not known to us at this time.
|
|
214
|
-
|
|
215
|
-
#### Re-use persistent license DRM for online playback
|
|
216
|
-
|
|
217
|
-
If your DRM provider configuration allows you to deliver persistent license,
|
|
218
|
-
you could re-use the created MediaKeys session for the next online playback.
|
|
219
|
-
|
|
220
|
-
Configure Shaka to start DRM sessions with the `persistent-license` type
|
|
221
|
-
instead of the `temporary` one:
|
|
222
|
-
|
|
223
|
-
```js
|
|
224
|
-
player.configure({
|
|
225
|
-
drm: {
|
|
226
|
-
advanced: {
|
|
227
|
-
'com.widevine.alpha': {
|
|
228
|
-
'sessionType': 'persistent-license'
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
});
|
|
233
|
-
```
|
|
234
|
-
|
|
235
|
-
**Using `persistent-license` might not work on every devices, use this feature
|
|
236
|
-
carefully.**
|
|
237
|
-
|
|
238
|
-
When the playback starts, you can retrieve the sessions metadata:
|
|
239
|
-
|
|
240
|
-
```js
|
|
241
|
-
const activeDrmSessions = this.player.getActiveSessionsMetadata();
|
|
242
|
-
const persistentDrmSessions = activeDrmSessions.filter(
|
|
243
|
-
({ sessionType }) => sessionType === 'persistent-license');
|
|
244
|
-
|
|
245
|
-
// Add your own storage mechanism here, give it an unique known identifier for
|
|
246
|
-
// the playing video
|
|
247
|
-
```
|
|
248
|
-
|
|
249
|
-
When starting the same video again, retrieve the metadata from the storage, and
|
|
250
|
-
set it back to Shaka's configuration.
|
|
251
|
-
|
|
252
|
-
Shaka will load the given DRM persistent sessions and will only request a
|
|
253
|
-
license if some keys are missing for the content.
|
|
254
|
-
|
|
255
|
-
```js
|
|
256
|
-
player.configure({
|
|
257
|
-
drm: {
|
|
258
|
-
persistentSessionOnlinePlayback: true,
|
|
259
|
-
persistentSessionsMetadata: [{
|
|
260
|
-
sessionId: 'deadbeefdeadbeefdeadbeefdeadbeef',
|
|
261
|
-
initData: new InitData(0),
|
|
262
|
-
initDataType: 'cenc'
|
|
263
|
-
}]
|
|
264
|
-
}
|
|
265
|
-
});
|
|
266
|
-
```
|
|
267
|
-
|
|
268
|
-
NB: Shaka doesn't provide a out-of-the-box storage mechanism for the sessions
|
|
269
|
-
metadata.
|
|
270
|
-
|
|
271
|
-
#### Continue the Tutorials
|
|
272
|
-
|
|
273
|
-
Next, check out {@tutorial license-server-auth}.
|
|
274
|
-
Or check out {@tutorial fairplay}.
|
package/docs/tutorials/errors.md
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
# Error Handling
|
|
2
|
-
|
|
3
|
-
The basics for handling native Error and {@link shaka.util.Error} thrown by Shaka.
|
|
4
|
-
|
|
5
|
-
## Listening To and Handling Errors
|
|
6
|
-
|
|
7
|
-
```javascript
|
|
8
|
-
const handleError = (error) => {
|
|
9
|
-
if (error instanceof Error) {
|
|
10
|
-
// shaka crashed with an unhandled native error
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
if (error.severity === shaka.util.Error.Severity.CRITICAL) {
|
|
14
|
-
// handle fatal error, playback can not continue
|
|
15
|
-
} else {
|
|
16
|
-
// handle non-fatal error, playback can continue
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
const player = new shaka.Player();
|
|
21
|
-
await player.attach(video);
|
|
22
|
-
|
|
23
|
-
// handle errors that occur after load
|
|
24
|
-
player.addEventListener('error', handleError);
|
|
25
|
-
|
|
26
|
-
// there are two options for catching errors that occur during load
|
|
27
|
-
|
|
28
|
-
// it's possible to listen directly on the promise
|
|
29
|
-
player.load(url).catch(handleError);
|
|
30
|
-
|
|
31
|
-
// or to use async/await with a try/catch
|
|
32
|
-
try {
|
|
33
|
-
await player.load(url);
|
|
34
|
-
} catch (e) {
|
|
35
|
-
handleError(e);
|
|
36
|
-
}
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
## Custom Handling of Streaming Errors
|
|
40
|
-
|
|
41
|
-
The `streaming.failureCallback` property of {@link shaka.extern.PlayerConfiguration} can be used to add custom handling or error conversion of errors that occur during streaming.
|
|
42
|
-
|
|
43
|
-
```javascript
|
|
44
|
-
player.configure('streaming.failureCallback', (error) => {
|
|
45
|
-
if (error.severity === shaka.util.Error.Severity.CRITICAL) {
|
|
46
|
-
// custom handling of critical error
|
|
47
|
-
// e.g. player.retryStreaming();
|
|
48
|
-
} else {
|
|
49
|
-
// custom handling of recoverable error
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
## Custom Handling of Retries
|
|
55
|
-
|
|
56
|
-
When configuring retry parameters in Shaka there may be known error codes that should not be retried, or the need to break out of an infinite retry loop in a live context. Retries for failed network requests are not reported as `RECOVERABLE` errors.
|
|
57
|
-
|
|
58
|
-
For example, if a VOD manifest is missing, unlike when a LIVE manifest is missing, it can be expected to not show up and there is no need to retry.
|
|
59
|
-
|
|
60
|
-
This is how to convert a retry into a critical error, see {@link shaka.net.NetworkingEngine.RetryEvent} and {@link shaka.util.Error} to decipher how the event can be parsed:
|
|
61
|
-
|
|
62
|
-
```javascript
|
|
63
|
-
const nwEngine = player.getNetworkingEngine();
|
|
64
|
-
|
|
65
|
-
const vodManifestNotFoundHandler = (event /* shaka.net.NetworkingEngine.RetryEvent */) => {
|
|
66
|
-
const code = event.error.code;
|
|
67
|
-
const data = event.error.data;
|
|
68
|
-
|
|
69
|
-
if (code === shaka.util.Error.Code.BAD_HTTP_STATUS) {
|
|
70
|
-
if (
|
|
71
|
-
// each type of error has its own data structure (or none at all), tread with care
|
|
72
|
-
Array.isArray(data) &&
|
|
73
|
-
data[1] === 404 &&
|
|
74
|
-
data[4] === shaka.net.NetworkingEngine.RequestType.MANIFEST
|
|
75
|
-
) {
|
|
76
|
-
// Throwing inside a retry callback will immediately stop retries
|
|
77
|
-
throw error;
|
|
78
|
-
|
|
79
|
-
// A proprietary error code can also be thrown
|
|
80
|
-
// throw new shaka.util.Error(
|
|
81
|
-
// shaka.util.Error.Severity.CRITICAL,
|
|
82
|
-
// shaka.util.Error.Category.NETWORK,
|
|
83
|
-
// 'RECOGNIZABLE_ERROR_MESSAGE'
|
|
84
|
-
// );
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
};
|
|
88
|
-
|
|
89
|
-
nwEngine.addEventListener('retry', vodManifestNotFoundHandler);
|
|
90
|
-
|
|
91
|
-
player.addEventListener('load'() => {
|
|
92
|
-
nwEngine.removeEventListener('retry', vodManifestNotFoundHandler);
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
```
|