@tarojs/components 4.0.0-canary.4 → 4.0.0-canary.6
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/dist/cjs/{hls-00fec546.js → hls-dfcad743.js} +280 -156
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/taro-ad-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-ad-custom-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-animation-video-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-animation-view-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-ar-camera-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-audio-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-aweme-data-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-block-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-button-core.cjs.entry.js +2 -2
- package/dist/cjs/taro-camera-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-canvas-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-channel-live-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-channel-video-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-checkbox-core_2.cjs.entry.js +1 -1
- package/dist/cjs/taro-comment-detail-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-comment-list-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-components.cjs.js +1 -1
- package/dist/cjs/taro-contact-button-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-cover-image-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-cover-view-core.cjs.entry.js +2 -2
- package/dist/cjs/taro-custom-wrapper-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-editor-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-follow-swan-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-form-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-functional-page-navigator-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-grid-view-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-icon-core.cjs.entry.js +2 -2
- package/dist/cjs/taro-image-core.cjs.entry.js +2 -2
- package/dist/cjs/taro-inline-payment-panel-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-input-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-keyboard-accessory-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-label-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-lifestyle-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-like-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-list-view-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-live-player-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-live-pusher-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-login-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-lottie-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-map-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-match-media-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-movable-area-core_2.cjs.entry.js +1 -1
- package/dist/cjs/taro-native-slot-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-navigation-bar-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-navigator-core.cjs.entry.js +2 -2
- package/dist/cjs/taro-official-account-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-open-data-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-page-container-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-page-meta-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-picker-core_2.cjs.entry.js +2 -2
- package/dist/cjs/taro-picker-view-column-core_2.cjs.entry.js +2 -2
- package/dist/cjs/taro-progress-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-pull-to-refresh-core.cjs.entry.js +2 -2
- package/dist/cjs/taro-radio-core_2.cjs.entry.js +1 -1
- package/dist/cjs/taro-rich-text-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-root-portal-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-rtc-room-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-rtc-room-item-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-scroll-view-core.cjs.entry.js +2 -2
- package/dist/cjs/taro-share-element-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-slider-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-slot-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-snapshot-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-sticky-header-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-sticky-section-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-swiper-core_2.cjs.entry.js +2 -2
- package/dist/cjs/taro-switch-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-tab-item-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-tabbar.cjs.entry.js +2 -2
- package/dist/cjs/taro-tabs-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-text-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-textarea-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-video-control_3.cjs.entry.js +3 -3
- package/dist/cjs/taro-view-core.cjs.entry.js +2 -2
- package/dist/cjs/taro-voip-room-core.cjs.entry.js +1 -1
- package/dist/cjs/taro-web-view-core.cjs.entry.js +1 -1
- package/dist/components/hls.js +280 -156
- package/dist/esm/{hls-4018c7ea.js → hls-268fc25b.js} +280 -156
- package/dist/esm/loader.js +2 -2
- package/dist/esm/taro-ad-core.entry.js +1 -1
- package/dist/esm/taro-ad-custom-core.entry.js +1 -1
- package/dist/esm/taro-animation-video-core.entry.js +1 -1
- package/dist/esm/taro-animation-view-core.entry.js +1 -1
- package/dist/esm/taro-ar-camera-core.entry.js +1 -1
- package/dist/esm/taro-audio-core.entry.js +1 -1
- package/dist/esm/taro-aweme-data-core.entry.js +1 -1
- package/dist/esm/taro-block-core.entry.js +1 -1
- package/dist/esm/taro-button-core.entry.js +2 -2
- package/dist/esm/taro-camera-core.entry.js +1 -1
- package/dist/esm/taro-canvas-core.entry.js +1 -1
- package/dist/esm/taro-channel-live-core.entry.js +1 -1
- package/dist/esm/taro-channel-video-core.entry.js +1 -1
- package/dist/esm/taro-checkbox-core_2.entry.js +1 -1
- package/dist/esm/taro-comment-detail-core.entry.js +1 -1
- package/dist/esm/taro-comment-list-core.entry.js +1 -1
- package/dist/esm/taro-components.js +2 -2
- package/dist/esm/taro-contact-button-core.entry.js +1 -1
- package/dist/esm/taro-cover-image-core.entry.js +1 -1
- package/dist/esm/taro-cover-view-core.entry.js +2 -2
- package/dist/esm/taro-custom-wrapper-core.entry.js +1 -1
- package/dist/esm/taro-editor-core.entry.js +1 -1
- package/dist/esm/taro-follow-swan-core.entry.js +1 -1
- package/dist/esm/taro-form-core.entry.js +1 -1
- package/dist/esm/taro-functional-page-navigator-core.entry.js +1 -1
- package/dist/esm/taro-grid-view-core.entry.js +1 -1
- package/dist/esm/taro-icon-core.entry.js +2 -2
- package/dist/esm/taro-image-core.entry.js +2 -2
- package/dist/esm/taro-inline-payment-panel-core.entry.js +1 -1
- package/dist/esm/taro-input-core.entry.js +1 -1
- package/dist/esm/taro-keyboard-accessory-core.entry.js +1 -1
- package/dist/esm/taro-label-core.entry.js +1 -1
- package/dist/esm/taro-lifestyle-core.entry.js +1 -1
- package/dist/esm/taro-like-core.entry.js +1 -1
- package/dist/esm/taro-list-view-core.entry.js +1 -1
- package/dist/esm/taro-live-player-core.entry.js +1 -1
- package/dist/esm/taro-live-pusher-core.entry.js +1 -1
- package/dist/esm/taro-login-core.entry.js +1 -1
- package/dist/esm/taro-lottie-core.entry.js +1 -1
- package/dist/esm/taro-map-core.entry.js +1 -1
- package/dist/esm/taro-match-media-core.entry.js +1 -1
- package/dist/esm/taro-movable-area-core_2.entry.js +1 -1
- package/dist/esm/taro-native-slot-core.entry.js +1 -1
- package/dist/esm/taro-navigation-bar-core.entry.js +1 -1
- package/dist/esm/taro-navigator-core.entry.js +2 -2
- package/dist/esm/taro-official-account-core.entry.js +1 -1
- package/dist/esm/taro-open-data-core.entry.js +1 -1
- package/dist/esm/taro-page-container-core.entry.js +1 -1
- package/dist/esm/taro-page-meta-core.entry.js +1 -1
- package/dist/esm/taro-picker-core_2.entry.js +2 -2
- package/dist/esm/taro-picker-view-column-core_2.entry.js +2 -2
- package/dist/esm/taro-progress-core.entry.js +1 -1
- package/dist/esm/taro-pull-to-refresh-core.entry.js +2 -2
- package/dist/esm/taro-radio-core_2.entry.js +1 -1
- package/dist/esm/taro-rich-text-core.entry.js +1 -1
- package/dist/esm/taro-root-portal-core.entry.js +1 -1
- package/dist/esm/taro-rtc-room-core.entry.js +1 -1
- package/dist/esm/taro-rtc-room-item-core.entry.js +1 -1
- package/dist/esm/taro-scroll-view-core.entry.js +2 -2
- package/dist/esm/taro-share-element-core.entry.js +1 -1
- package/dist/esm/taro-slider-core.entry.js +1 -1
- package/dist/esm/taro-slot-core.entry.js +1 -1
- package/dist/esm/taro-snapshot-core.entry.js +1 -1
- package/dist/esm/taro-sticky-header-core.entry.js +1 -1
- package/dist/esm/taro-sticky-section-core.entry.js +1 -1
- package/dist/esm/taro-swiper-core_2.entry.js +2 -2
- package/dist/esm/taro-switch-core.entry.js +1 -1
- package/dist/esm/taro-tab-item-core.entry.js +1 -1
- package/dist/esm/taro-tabbar.entry.js +2 -2
- package/dist/esm/taro-tabs-core.entry.js +1 -1
- package/dist/esm/taro-text-core.entry.js +1 -1
- package/dist/esm/taro-textarea-core.entry.js +1 -1
- package/dist/esm/taro-video-control_3.entry.js +3 -3
- package/dist/esm/taro-view-core.entry.js +2 -2
- package/dist/esm/taro-voip-room-core.entry.js +1 -1
- package/dist/esm/taro-web-view-core.entry.js +1 -1
- package/dist/esm-es5/hls-268fc25b.js +1 -0
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/taro-ad-core.entry.js +1 -1
- package/dist/esm-es5/taro-ad-custom-core.entry.js +1 -1
- package/dist/esm-es5/taro-animation-video-core.entry.js +1 -1
- package/dist/esm-es5/taro-animation-view-core.entry.js +1 -1
- package/dist/esm-es5/taro-ar-camera-core.entry.js +1 -1
- package/dist/esm-es5/taro-audio-core.entry.js +1 -1
- package/dist/esm-es5/taro-aweme-data-core.entry.js +1 -1
- package/dist/esm-es5/taro-block-core.entry.js +1 -1
- package/dist/esm-es5/taro-button-core.entry.js +1 -1
- package/dist/esm-es5/taro-camera-core.entry.js +1 -1
- package/dist/esm-es5/taro-canvas-core.entry.js +1 -1
- package/dist/esm-es5/taro-channel-live-core.entry.js +1 -1
- package/dist/esm-es5/taro-channel-video-core.entry.js +1 -1
- package/dist/esm-es5/taro-checkbox-core_2.entry.js +1 -1
- package/dist/esm-es5/taro-comment-detail-core.entry.js +1 -1
- package/dist/esm-es5/taro-comment-list-core.entry.js +1 -1
- package/dist/esm-es5/taro-components.js +1 -1
- package/dist/esm-es5/taro-contact-button-core.entry.js +1 -1
- package/dist/esm-es5/taro-cover-image-core.entry.js +1 -1
- package/dist/esm-es5/taro-cover-view-core.entry.js +1 -1
- package/dist/esm-es5/taro-custom-wrapper-core.entry.js +1 -1
- package/dist/esm-es5/taro-editor-core.entry.js +1 -1
- package/dist/esm-es5/taro-follow-swan-core.entry.js +1 -1
- package/dist/esm-es5/taro-form-core.entry.js +1 -1
- package/dist/esm-es5/taro-functional-page-navigator-core.entry.js +1 -1
- package/dist/esm-es5/taro-grid-view-core.entry.js +1 -1
- package/dist/esm-es5/taro-icon-core.entry.js +1 -1
- package/dist/esm-es5/taro-image-core.entry.js +1 -1
- package/dist/esm-es5/taro-inline-payment-panel-core.entry.js +1 -1
- package/dist/esm-es5/taro-input-core.entry.js +1 -1
- package/dist/esm-es5/taro-keyboard-accessory-core.entry.js +1 -1
- package/dist/esm-es5/taro-label-core.entry.js +1 -1
- package/dist/esm-es5/taro-lifestyle-core.entry.js +1 -1
- package/dist/esm-es5/taro-like-core.entry.js +1 -1
- package/dist/esm-es5/taro-list-view-core.entry.js +1 -1
- package/dist/esm-es5/taro-live-player-core.entry.js +1 -1
- package/dist/esm-es5/taro-live-pusher-core.entry.js +1 -1
- package/dist/esm-es5/taro-login-core.entry.js +1 -1
- package/dist/esm-es5/taro-lottie-core.entry.js +1 -1
- package/dist/esm-es5/taro-map-core.entry.js +1 -1
- package/dist/esm-es5/taro-match-media-core.entry.js +1 -1
- package/dist/esm-es5/taro-movable-area-core_2.entry.js +1 -1
- package/dist/esm-es5/taro-native-slot-core.entry.js +1 -1
- package/dist/esm-es5/taro-navigation-bar-core.entry.js +1 -1
- package/dist/esm-es5/taro-navigator-core.entry.js +1 -1
- package/dist/esm-es5/taro-official-account-core.entry.js +1 -1
- package/dist/esm-es5/taro-open-data-core.entry.js +1 -1
- package/dist/esm-es5/taro-page-container-core.entry.js +1 -1
- package/dist/esm-es5/taro-page-meta-core.entry.js +1 -1
- package/dist/esm-es5/taro-picker-core_2.entry.js +1 -1
- package/dist/esm-es5/taro-picker-view-column-core_2.entry.js +1 -1
- package/dist/esm-es5/taro-progress-core.entry.js +1 -1
- package/dist/esm-es5/taro-pull-to-refresh-core.entry.js +1 -1
- package/dist/esm-es5/taro-radio-core_2.entry.js +1 -1
- package/dist/esm-es5/taro-rich-text-core.entry.js +1 -1
- package/dist/esm-es5/taro-root-portal-core.entry.js +1 -1
- package/dist/esm-es5/taro-rtc-room-core.entry.js +1 -1
- package/dist/esm-es5/taro-rtc-room-item-core.entry.js +1 -1
- package/dist/esm-es5/taro-scroll-view-core.entry.js +1 -1
- package/dist/esm-es5/taro-share-element-core.entry.js +1 -1
- package/dist/esm-es5/taro-slider-core.entry.js +1 -1
- package/dist/esm-es5/taro-slot-core.entry.js +1 -1
- package/dist/esm-es5/taro-snapshot-core.entry.js +1 -1
- package/dist/esm-es5/taro-sticky-header-core.entry.js +1 -1
- package/dist/esm-es5/taro-sticky-section-core.entry.js +1 -1
- package/dist/esm-es5/taro-swiper-core_2.entry.js +1 -1
- package/dist/esm-es5/taro-switch-core.entry.js +1 -1
- package/dist/esm-es5/taro-tab-item-core.entry.js +1 -1
- package/dist/esm-es5/taro-tabbar.entry.js +1 -1
- package/dist/esm-es5/taro-tabs-core.entry.js +1 -1
- package/dist/esm-es5/taro-text-core.entry.js +1 -1
- package/dist/esm-es5/taro-textarea-core.entry.js +1 -1
- package/dist/esm-es5/taro-video-control_3.entry.js +1 -1
- package/dist/esm-es5/taro-view-core.entry.js +1 -1
- package/dist/esm-es5/taro-voip-room-core.entry.js +1 -1
- package/dist/esm-es5/taro-web-view-core.entry.js +1 -1
- package/dist/taro-components/{p-eee6e075.system.entry.js → p-00113225.system.entry.js} +1 -1
- package/dist/taro-components/{p-ed331c06.system.js → p-0030841b.system.js} +1 -1
- package/dist/taro-components/p-028ad016.system.entry.js +1 -0
- package/dist/taro-components/p-03538d40.system.entry.js +1 -0
- package/dist/taro-components/p-039e15a4.system.entry.js +1 -0
- package/dist/taro-components/{p-9fe49bab.entry.js → p-0780df27.entry.js} +1 -1
- package/dist/taro-components/p-0910d414.entry.js +1 -0
- package/dist/taro-components/{p-1b789738.system.entry.js → p-0b6e9013.system.entry.js} +1 -1
- package/dist/taro-components/{p-0fe855c6.entry.js → p-0e37fb54.entry.js} +1 -1
- package/dist/taro-components/p-11c962b9.entry.js +1 -0
- package/dist/taro-components/p-139d64f1.entry.js +1 -0
- package/dist/taro-components/{p-be96eb59.system.entry.js → p-1411cd2e.system.entry.js} +1 -1
- package/dist/taro-components/p-175edd50.entry.js +1 -0
- package/dist/taro-components/p-178cb282.system.entry.js +1 -0
- package/dist/taro-components/{p-ccc64042.system.entry.js → p-18ea7e10.system.entry.js} +1 -1
- package/dist/taro-components/{p-ef322936.entry.js → p-1ac9622e.entry.js} +1 -1
- package/dist/taro-components/{p-a4951dd6.entry.js → p-1c1d9be8.entry.js} +1 -1
- package/dist/taro-components/{p-8ca82a56.entry.js → p-1c95795d.entry.js} +1 -1
- package/dist/taro-components/{p-5870248f.system.entry.js → p-1d3ed211.system.entry.js} +1 -1
- package/dist/taro-components/{p-600e89cc.system.entry.js → p-1eb875d0.system.entry.js} +1 -1
- package/dist/taro-components/p-1f36cd5f.entry.js +1 -0
- package/dist/taro-components/p-1f88349b.entry.js +1 -0
- package/dist/taro-components/{p-43720011.entry.js → p-20e38f24.entry.js} +1 -1
- package/dist/taro-components/p-2145dccb.entry.js +1 -0
- package/dist/taro-components/p-215881b4.entry.js +1 -0
- package/dist/taro-components/{p-8ccaf5e8.entry.js → p-222573ad.entry.js} +1 -1
- package/dist/taro-components/{p-c99e14b5.entry.js → p-2339a4d3.entry.js} +1 -1
- package/dist/taro-components/{p-ebc7b6fc.entry.js → p-23f15c7b.entry.js} +1 -1
- package/dist/taro-components/{p-de96861c.system.entry.js → p-25fffbbe.system.entry.js} +1 -1
- package/dist/taro-components/{p-2da9c8fd.entry.js → p-2713fc1a.entry.js} +1 -1
- package/dist/taro-components/{p-657cb6e4.system.entry.js → p-277892fe.system.entry.js} +1 -1
- package/dist/taro-components/{p-e67755f0.system.entry.js → p-27c756c5.system.entry.js} +1 -1
- package/dist/taro-components/p-2aff4cdb.entry.js +1 -0
- package/dist/taro-components/p-2e2487bf.system.entry.js +1 -0
- package/dist/taro-components/{p-15624788.system.entry.js → p-32b41faa.system.entry.js} +1 -1
- package/dist/taro-components/{p-9eeba192.entry.js → p-332dc867.entry.js} +1 -1
- package/dist/taro-components/{p-425c209a.entry.js → p-333305e3.entry.js} +1 -1
- package/dist/taro-components/{p-b641e598.entry.js → p-345cb56f.entry.js} +1 -1
- package/dist/taro-components/{p-92d04741.system.entry.js → p-346162b4.system.entry.js} +1 -1
- package/dist/taro-components/p-35160fd2.entry.js +1 -0
- package/dist/taro-components/{p-c913b635.system.entry.js → p-3708575b.system.entry.js} +1 -1
- package/dist/taro-components/{p-f02b6f70.entry.js → p-37edf3f6.entry.js} +1 -1
- package/dist/taro-components/p-3967311b.system.entry.js +1 -0
- package/dist/taro-components/p-3aaf0fb7.system.entry.js +1 -0
- package/dist/taro-components/{p-cbcaad0e.system.entry.js → p-3ad92100.system.entry.js} +1 -1
- package/dist/taro-components/{p-e6481671.system.entry.js → p-3cd71da3.system.entry.js} +1 -1
- package/dist/taro-components/p-3d7626a9.system.entry.js +1 -0
- package/dist/taro-components/{p-085076c5.system.entry.js → p-401743f9.system.entry.js} +1 -1
- package/dist/taro-components/{p-7726b789.system.entry.js → p-443fe754.system.entry.js} +1 -1
- package/dist/taro-components/{p-58cc2e6d.system.entry.js → p-46a9adcf.system.entry.js} +1 -1
- package/dist/taro-components/{p-519fbe84.system.entry.js → p-475f9ed3.system.entry.js} +1 -1
- package/dist/taro-components/{p-30805bdf.entry.js → p-48c52124.entry.js} +1 -1
- package/dist/taro-components/{p-a94e3347.system.entry.js → p-4aeb3859.system.entry.js} +1 -1
- package/dist/taro-components/{p-bf0e0394.entry.js → p-4cc2e06e.entry.js} +1 -1
- package/dist/taro-components/{p-dab28e1f.system.entry.js → p-4d609ebb.system.entry.js} +1 -1
- package/dist/taro-components/p-4d89b685.entry.js +1 -0
- package/dist/taro-components/{p-7e8e355b.system.entry.js → p-4ff6ad99.system.entry.js} +1 -1
- package/dist/taro-components/{p-7b68dee8.entry.js → p-527c55ca.entry.js} +1 -1
- package/dist/taro-components/p-550c350a.entry.js +1 -0
- package/dist/taro-components/{p-6cde54e5.system.entry.js → p-58d410c6.system.entry.js} +1 -1
- package/dist/taro-components/p-5b028f1b.js +1 -0
- package/dist/taro-components/{p-e09451c5.system.entry.js → p-619b9fe5.system.entry.js} +1 -1
- package/dist/taro-components/p-635fe530.system.entry.js +1 -0
- package/dist/taro-components/{p-8d990f1c.system.entry.js → p-67dcb636.system.entry.js} +1 -1
- package/dist/taro-components/{p-5e91398a.system.entry.js → p-680ba5a1.system.entry.js} +1 -1
- package/dist/taro-components/{p-aa04f605.entry.js → p-6c48d884.entry.js} +1 -1
- package/dist/taro-components/{p-fac4ce6f.system.entry.js → p-6d1e33e1.system.entry.js} +1 -1
- package/dist/taro-components/{p-f420680c.system.entry.js → p-6d7165eb.system.entry.js} +1 -1
- package/dist/taro-components/{p-9b0298bf.entry.js → p-6df6fd58.entry.js} +1 -1
- package/dist/taro-components/{p-21c07cb3.system.entry.js → p-6e1f0e6d.system.entry.js} +1 -1
- package/dist/taro-components/{p-0ec2e88a.entry.js → p-6f45f110.entry.js} +1 -1
- package/dist/taro-components/p-6f5e162d.entry.js +1 -0
- package/dist/taro-components/{p-dadd02ca.entry.js → p-70bd0541.entry.js} +1 -1
- package/dist/taro-components/{p-69c43a81.entry.js → p-70c81b7e.entry.js} +1 -1
- package/dist/taro-components/{p-117633e9.system.entry.js → p-728b6f8f.system.entry.js} +1 -1
- package/dist/taro-components/{p-3004e71a.system.entry.js → p-72d7fae0.system.entry.js} +1 -1
- package/dist/taro-components/{p-5994d9f2.system.entry.js → p-747bdbaa.system.entry.js} +1 -1
- package/dist/taro-components/p-79b675c8.entry.js +1 -0
- package/dist/taro-components/p-7ad33036.system.entry.js +1 -0
- package/dist/taro-components/{p-d5c8380d.system.entry.js → p-7b39971e.system.entry.js} +1 -1
- package/dist/taro-components/{p-6b454506.entry.js → p-7ba17143.entry.js} +1 -1
- package/dist/taro-components/p-7be1f603.entry.js +1 -0
- package/dist/taro-components/{p-f78823a1.entry.js → p-7de7d96c.entry.js} +1 -1
- package/dist/taro-components/p-7dee8f07.system.entry.js +1 -0
- package/dist/taro-components/{p-ce303d12.system.entry.js → p-810b9a86.system.entry.js} +1 -1
- package/dist/taro-components/{p-0cedad18.system.entry.js → p-817b319c.system.entry.js} +1 -1
- package/dist/taro-components/{p-9ea4f297.entry.js → p-8b604d50.entry.js} +1 -1
- package/dist/taro-components/{p-d2e0b15c.entry.js → p-8c93f3e0.entry.js} +1 -1
- package/dist/taro-components/{p-9e03bc7a.system.entry.js → p-8d797863.system.entry.js} +1 -1
- package/dist/taro-components/{p-a1763153.entry.js → p-907d2fe0.entry.js} +1 -1
- package/dist/taro-components/p-93a3d6ee.entry.js +1 -0
- package/dist/taro-components/{p-b5b30493.system.entry.js → p-9c566d7d.system.entry.js} +1 -1
- package/dist/taro-components/{p-1e739fcb.system.entry.js → p-9c91aee3.system.entry.js} +1 -1
- package/dist/taro-components/{p-962f28cb.entry.js → p-9e788d33.entry.js} +1 -1
- package/dist/taro-components/{p-b1d2b575.system.entry.js → p-9f5ebe09.system.entry.js} +1 -1
- package/dist/taro-components/{p-2a071adf.system.entry.js → p-9feeee0f.system.entry.js} +1 -1
- package/dist/taro-components/p-a3dad439.entry.js +1 -0
- package/dist/taro-components/{p-01e163f8.system.entry.js → p-a4ea7a51.system.entry.js} +1 -1
- package/dist/taro-components/p-a54735cb.entry.js +1 -0
- package/dist/taro-components/{p-d025a415.system.entry.js → p-a5adbf15.system.entry.js} +1 -1
- package/dist/taro-components/{p-99e16df8.entry.js → p-a744e7aa.entry.js} +1 -1
- package/dist/taro-components/{p-a6e2dd48.entry.js → p-a7ecb97a.entry.js} +1 -1
- package/dist/taro-components/{p-208e438c.system.entry.js → p-aa1ea71b.system.entry.js} +1 -1
- package/dist/taro-components/{p-29638de3.entry.js → p-aae38fe8.entry.js} +1 -1
- package/dist/taro-components/{p-a90221ab.system.entry.js → p-abd51173.system.entry.js} +1 -1
- package/dist/taro-components/p-b1977132.entry.js +1 -0
- package/dist/taro-components/p-b2ad9709.entry.js +1 -0
- package/dist/taro-components/{p-9feff958.system.entry.js → p-b3780eab.system.entry.js} +1 -1
- package/dist/taro-components/{p-fd7ff0f3.system.entry.js → p-b4e3f72e.system.entry.js} +1 -1
- package/dist/taro-components/{p-06671eee.entry.js → p-b69bcd43.entry.js} +1 -1
- package/dist/taro-components/{p-38ee526a.entry.js → p-b94dcfbe.entry.js} +1 -1
- package/dist/taro-components/p-b9c2a210.system.entry.js +1 -0
- package/dist/taro-components/p-bb454378.entry.js +1 -0
- package/dist/taro-components/p-bbbe728b.system.entry.js +1 -0
- package/dist/taro-components/p-bd6574cf.entry.js +1 -0
- package/dist/taro-components/p-bfea77f9.entry.js +1 -0
- package/dist/taro-components/p-c0a59843.entry.js +1 -0
- package/dist/taro-components/{p-473afc8e.system.entry.js → p-c2259653.system.entry.js} +1 -1
- package/dist/taro-components/{p-0d7a705b.system.entry.js → p-c3c69a95.system.entry.js} +1 -1
- package/dist/taro-components/{p-124ac21f.entry.js → p-c7679d57.entry.js} +1 -1
- package/dist/taro-components/{p-b07cd197.system.entry.js → p-c968ea43.system.entry.js} +1 -1
- package/dist/taro-components/p-cb21f4f1.entry.js +1 -0
- package/dist/taro-components/p-cd0f3444.entry.js +1 -0
- package/dist/taro-components/{p-36d4407e.system.entry.js → p-cd34c92e.system.entry.js} +1 -1
- package/dist/taro-components/{p-9edea30f.system.entry.js → p-d42968e9.system.entry.js} +1 -1
- package/dist/taro-components/{p-b0fc8752.entry.js → p-d55f870d.entry.js} +1 -1
- package/dist/taro-components/p-d81577b8.system.entry.js +1 -0
- package/dist/taro-components/p-d86ce035.system.entry.js +1 -0
- package/dist/taro-components/p-d8f78d99.system.entry.js +1 -0
- package/dist/taro-components/p-daabfc6e.entry.js +1 -0
- package/dist/taro-components/p-dda03c84.entry.js +1 -0
- package/dist/taro-components/{p-a74c970c.system.entry.js → p-dea67974.system.entry.js} +1 -1
- package/dist/taro-components/p-deff0bb8.entry.js +1 -0
- package/dist/taro-components/{p-c1a3fecf.system.entry.js → p-e487b8b4.system.entry.js} +1 -1
- package/dist/taro-components/{p-a940a65b.entry.js → p-e6e3c1d7.entry.js} +1 -1
- package/dist/taro-components/p-e7232d54.system.entry.js +1 -0
- package/dist/taro-components/p-e769cea4.system.entry.js +1 -0
- package/dist/taro-components/p-e82e16a1.entry.js +1 -0
- package/dist/taro-components/{p-f2c86846.entry.js → p-eab8a6b0.entry.js} +1 -1
- package/dist/taro-components/p-edb9e04e.system.entry.js +1 -0
- package/dist/taro-components/p-ee4da4db.system.js +1 -0
- package/dist/taro-components/{p-f0340edf.entry.js → p-f003caad.entry.js} +1 -1
- package/dist/taro-components/{p-9d76d7a9.system.entry.js → p-f094089c.system.entry.js} +1 -1
- package/dist/taro-components/p-f111303f.entry.js +1 -0
- package/dist/taro-components/{p-d1756770.entry.js → p-f232cf02.entry.js} +1 -1
- package/dist/taro-components/{p-22bf7daf.entry.js → p-f43ba9ed.entry.js} +1 -1
- package/dist/taro-components/{p-6aa2ac6a.system.entry.js → p-f75d094e.system.entry.js} +1 -1
- package/dist/taro-components/{p-0fa96970.entry.js → p-f8970571.entry.js} +1 -1
- package/dist/taro-components/{p-0e3b37e9.entry.js → p-fbc2b53e.entry.js} +1 -1
- package/dist/taro-components/p-fbec1f96.entry.js +1 -0
- package/dist/taro-components/{p-a2141e85.system.entry.js → p-fdccd9b3.system.entry.js} +1 -1
- package/dist/taro-components/p-feddde29.system.entry.js +1 -0
- package/dist/taro-components/{p-bc541cd8.entry.js → p-fff30a48.entry.js} +1 -1
- package/dist/taro-components/taro-components.esm.js +1 -1
- package/dist/taro-components/taro-components.js +1 -1
- package/lib/react/node_modules/.pnpm/{registry.npmjs.org_tslib@2.5.0 → tslib@2.6.2}/node_modules/tslib/tslib.es6.js +82 -5
- package/lib/react/node_modules/.pnpm/{registry.npmjs.org_tslib@2.5.0 → tslib@2.6.2}/node_modules/tslib/tslib.es6.js.map +1 -1
- package/lib/react/react-component-lib/createComponent.js +1 -1
- package/lib/react/react-component-lib/createOverlayComponent.js +1 -1
- package/lib/vue2/components-loader.js +1 -1
- package/package.json +4 -4
- package/types/common.d.ts +1 -1
- package/dist/esm-es5/hls-4018c7ea.js +0 -1
- package/dist/taro-components/p-00ed4bbb.entry.js +0 -1
- package/dist/taro-components/p-065a10d7.entry.js +0 -1
- package/dist/taro-components/p-08b7ecd7.system.entry.js +0 -1
- package/dist/taro-components/p-0a250d71.system.entry.js +0 -1
- package/dist/taro-components/p-0e8199b7.entry.js +0 -1
- package/dist/taro-components/p-1cf16dfa.entry.js +0 -1
- package/dist/taro-components/p-1f118969.system.entry.js +0 -1
- package/dist/taro-components/p-24d9836e.entry.js +0 -1
- package/dist/taro-components/p-32e9981a.system.entry.js +0 -1
- package/dist/taro-components/p-357ba712.system.entry.js +0 -1
- package/dist/taro-components/p-3f3abe55.system.entry.js +0 -1
- package/dist/taro-components/p-43efbf30.js +0 -1
- package/dist/taro-components/p-4cedbe5e.system.entry.js +0 -1
- package/dist/taro-components/p-4fc40739.entry.js +0 -1
- package/dist/taro-components/p-5756cf00.system.entry.js +0 -1
- package/dist/taro-components/p-5ebc7010.system.entry.js +0 -1
- package/dist/taro-components/p-64eb91f7.entry.js +0 -1
- package/dist/taro-components/p-72b118b0.entry.js +0 -1
- package/dist/taro-components/p-76996fcb.entry.js +0 -1
- package/dist/taro-components/p-78e4805e.entry.js +0 -1
- package/dist/taro-components/p-7bfc5f3d.entry.js +0 -1
- package/dist/taro-components/p-84958ace.entry.js +0 -1
- package/dist/taro-components/p-862b38b9.entry.js +0 -1
- package/dist/taro-components/p-9a5fbb2e.entry.js +0 -1
- package/dist/taro-components/p-9dcba4a7.system.entry.js +0 -1
- package/dist/taro-components/p-a20fed0a.entry.js +0 -1
- package/dist/taro-components/p-a2d590ad.entry.js +0 -1
- package/dist/taro-components/p-a5a51112.entry.js +0 -1
- package/dist/taro-components/p-a7d31b01.system.entry.js +0 -1
- package/dist/taro-components/p-ad9b04e0.entry.js +0 -1
- package/dist/taro-components/p-b201ff38.entry.js +0 -1
- package/dist/taro-components/p-bd4ed8b1.entry.js +0 -1
- package/dist/taro-components/p-bf0c8449.system.entry.js +0 -1
- package/dist/taro-components/p-c0080d83.entry.js +0 -1
- package/dist/taro-components/p-cb406f85.system.entry.js +0 -1
- package/dist/taro-components/p-d550aea9.system.entry.js +0 -1
- package/dist/taro-components/p-d867e333.system.entry.js +0 -1
- package/dist/taro-components/p-d9dcc6c6.entry.js +0 -1
- package/dist/taro-components/p-da3db323.entry.js +0 -1
- package/dist/taro-components/p-dc5d65a0.system.entry.js +0 -1
- package/dist/taro-components/p-e2cd5dd3.system.entry.js +0 -1
- package/dist/taro-components/p-e598f47b.entry.js +0 -1
- package/dist/taro-components/p-e740320c.entry.js +0 -1
- package/dist/taro-components/p-e78775ce.system.js +0 -1
- package/dist/taro-components/p-e976c6c9.system.entry.js +0 -1
- package/dist/taro-components/p-ea0d5d4f.system.entry.js +0 -1
- package/dist/taro-components/p-f1304456.entry.js +0 -1
- package/dist/taro-components/p-f2235cbb.entry.js +0 -1
- package/dist/taro-components/p-f23cfdc8.entry.js +0 -1
- package/dist/taro-components/p-f4d86882.entry.js +0 -1
- package/dist/taro-components/p-f533bc2f.entry.js +0 -1
- package/dist/taro-components/p-f658de2e.entry.js +0 -1
- package/dist/taro-components/p-f6f6a996.system.entry.js +0 -1
- package/dist/taro-components/p-fbb2446e.entry.js +0 -1
- /package/dist/cjs/{index-e751dfe3.js → index-5a8221ec.js} +0 -0
- /package/dist/cjs/{index-f6805218.js → index-b8c435ee.js} +0 -0
- /package/dist/esm/{index-980f930f.js → index-6bb77c5f.js} +0 -0
- /package/dist/esm/{index-c3e4004b.js → index-a74b6944.js} +0 -0
- /package/dist/esm-es5/{index-980f930f.js → index-6bb77c5f.js} +0 -0
- /package/dist/esm-es5/{index-c3e4004b.js → index-a74b6944.js} +0 -0
- /package/dist/taro-components/{p-de951a46.js → p-19f218e6.js} +0 -0
- /package/dist/taro-components/{p-2ec68968.system.js → p-34de4101.system.js} +0 -0
- /package/dist/taro-components/{p-9137dcab.js → p-7e90dfef.js} +0 -0
- /package/dist/taro-components/{p-7e6b54cb.system.js → p-cdd48677.system.js} +0 -0
- /package/lib/vue2/node_modules/.pnpm/{registry.npmjs.org_vue-fragment@1.6.0_vue@2.7.14 → vue-fragment@1.6.0_vue@2.7.15}/node_modules/vue-fragment/dist/vue-fragment.esm.js +0 -0
- /package/lib/vue2/node_modules/.pnpm/{registry.npmjs.org_vue-fragment@1.6.0_vue@2.7.14 → vue-fragment@1.6.0_vue@2.7.15}/node_modules/vue-fragment/dist/vue-fragment.esm.js.map +0 -0
|
@@ -240,10 +240,17 @@ function _toPropertyKey(arg) {
|
|
|
240
240
|
return typeof key === "symbol" ? key : String(key);
|
|
241
241
|
}
|
|
242
242
|
|
|
243
|
+
// https://caniuse.com/mdn-javascript_builtins_number_isfinite
|
|
243
244
|
const isFiniteNumber = Number.isFinite || function (value) {
|
|
244
245
|
return typeof value === 'number' && isFinite(value);
|
|
245
246
|
};
|
|
246
247
|
|
|
248
|
+
// https://caniuse.com/mdn-javascript_builtins_number_issafeinteger
|
|
249
|
+
const isSafeInteger = Number.isSafeInteger || function (value) {
|
|
250
|
+
return typeof value === 'number' && Math.abs(value) <= MAX_SAFE_INTEGER;
|
|
251
|
+
};
|
|
252
|
+
const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;
|
|
253
|
+
|
|
247
254
|
let Events = /*#__PURE__*/function (Events) {
|
|
248
255
|
Events["MEDIA_ATTACHING"] = "hlsMediaAttaching";
|
|
249
256
|
Events["MEDIA_ATTACHED"] = "hlsMediaAttached";
|
|
@@ -402,7 +409,7 @@ function enableLogs(debugConfig, id) {
|
|
|
402
409
|
// Some browsers don't allow to use bind on console object anyway
|
|
403
410
|
// fallback to default if needed
|
|
404
411
|
try {
|
|
405
|
-
exportedLogger.log(`Debug logs enabled for "${id}" in hls.js version ${"1.4.
|
|
412
|
+
exportedLogger.log(`Debug logs enabled for "${id}" in hls.js version ${"1.4.13"}`);
|
|
406
413
|
} catch (e) {
|
|
407
414
|
exportedLogger = fakeLogger;
|
|
408
415
|
}
|
|
@@ -927,7 +934,7 @@ class LevelDetails {
|
|
|
927
934
|
}
|
|
928
935
|
const partSnDiff = this.lastPartSn - previous.lastPartSn;
|
|
929
936
|
const partIndexDiff = this.lastPartIndex - previous.lastPartIndex;
|
|
930
|
-
this.updated = this.endSN !== previous.endSN || !!partIndexDiff || !!partSnDiff;
|
|
937
|
+
this.updated = this.endSN !== previous.endSN || !!partIndexDiff || !!partSnDiff || !this.live;
|
|
931
938
|
this.advanced = this.endSN > previous.endSN || partSnDiff > 0 || partSnDiff === 0 && partIndexDiff > 0;
|
|
932
939
|
if (this.updated || this.advanced) {
|
|
933
940
|
this.misses = Math.floor(previous.misses * 0.6);
|
|
@@ -1823,13 +1830,13 @@ function getStartDTS(initData, fmp4) {
|
|
|
1823
1830
|
const scale = track.timescale || 90e3;
|
|
1824
1831
|
// convert base time to seconds
|
|
1825
1832
|
const startTime = baseTime / scale;
|
|
1826
|
-
if (
|
|
1833
|
+
if (isFiniteNumber(startTime) && (result === null || startTime < result)) {
|
|
1827
1834
|
return startTime;
|
|
1828
1835
|
}
|
|
1829
1836
|
}
|
|
1830
1837
|
return result;
|
|
1831
1838
|
}, null);
|
|
1832
|
-
if (start !== null &&
|
|
1839
|
+
if (start !== null && isFiniteNumber(start) && (result === null || start < result)) {
|
|
1833
1840
|
return start;
|
|
1834
1841
|
}
|
|
1835
1842
|
return result;
|
|
@@ -2348,7 +2355,7 @@ function parseEmsg(data) {
|
|
|
2348
2355
|
const rightPresentationTime = readUint32(data, offset);
|
|
2349
2356
|
offset += 4;
|
|
2350
2357
|
presentationTime = 2 ** 32 * leftPresentationTime + rightPresentationTime;
|
|
2351
|
-
if (!
|
|
2358
|
+
if (!isSafeInteger(presentationTime)) {
|
|
2352
2359
|
presentationTime = Number.MAX_SAFE_INTEGER;
|
|
2353
2360
|
logger.warn('Presentation time exceeds safe integer limit and wrapped to max safe integer in parsing emsg box');
|
|
2354
2361
|
}
|
|
@@ -3991,9 +3998,13 @@ function addCueToTrack(track, cue) {
|
|
|
3991
3998
|
}
|
|
3992
3999
|
} catch (err) {
|
|
3993
4000
|
logger.debug(`[texttrack-utils]: ${err}`);
|
|
3994
|
-
|
|
3995
|
-
|
|
3996
|
-
|
|
4001
|
+
try {
|
|
4002
|
+
const textTrackCue = new self.TextTrackCue(cue.startTime, cue.endTime, cue.text);
|
|
4003
|
+
textTrackCue.id = cue.id;
|
|
4004
|
+
track.addCue(textTrackCue);
|
|
4005
|
+
} catch (err2) {
|
|
4006
|
+
logger.debug(`[texttrack-utils]: Legacy TextTrackCue fallback failed: ${err2}`);
|
|
4007
|
+
}
|
|
3997
4008
|
}
|
|
3998
4009
|
}
|
|
3999
4010
|
if (mode === 'disabled') {
|
|
@@ -4089,11 +4100,21 @@ var MetadataSchema = {
|
|
|
4089
4100
|
const MIN_CUE_DURATION = 0.25;
|
|
4090
4101
|
function getCueClass() {
|
|
4091
4102
|
if (typeof self === 'undefined') return undefined;
|
|
4092
|
-
|
|
4093
|
-
|
|
4094
|
-
|
|
4095
|
-
|
|
4096
|
-
|
|
4103
|
+
return self.VTTCue || self.TextTrackCue;
|
|
4104
|
+
}
|
|
4105
|
+
function createCueWithDataFields(Cue, startTime, endTime, data, type) {
|
|
4106
|
+
let cue = new Cue(startTime, endTime, '');
|
|
4107
|
+
try {
|
|
4108
|
+
cue.value = data;
|
|
4109
|
+
if (type) {
|
|
4110
|
+
cue.type = type;
|
|
4111
|
+
}
|
|
4112
|
+
} catch (e) {
|
|
4113
|
+
cue = new Cue(startTime, endTime, JSON.stringify(type ? _objectSpread2({
|
|
4114
|
+
type
|
|
4115
|
+
}, data) : data));
|
|
4116
|
+
}
|
|
4117
|
+
return cue;
|
|
4097
4118
|
}
|
|
4098
4119
|
|
|
4099
4120
|
// VTTCue latest draft allows an infinite duration, fallback
|
|
@@ -4101,7 +4122,7 @@ function getCueClass() {
|
|
|
4101
4122
|
const MAX_CUE_ENDTIME = (() => {
|
|
4102
4123
|
const Cue = getCueClass();
|
|
4103
4124
|
try {
|
|
4104
|
-
new Cue(0, Number.POSITIVE_INFINITY, '');
|
|
4125
|
+
Cue && new Cue(0, Number.POSITIVE_INFINITY, '');
|
|
4105
4126
|
} catch (e) {
|
|
4106
4127
|
return Number.MAX_VALUE;
|
|
4107
4128
|
}
|
|
@@ -4213,6 +4234,9 @@ class ID3TrackController {
|
|
|
4213
4234
|
this.id3Track = this.createTrack(this.media);
|
|
4214
4235
|
}
|
|
4215
4236
|
const Cue = getCueClass();
|
|
4237
|
+
if (!Cue) {
|
|
4238
|
+
return;
|
|
4239
|
+
}
|
|
4216
4240
|
for (let i = 0; i < samples.length; i++) {
|
|
4217
4241
|
const type = samples[i].type;
|
|
4218
4242
|
if (type === MetadataSchema.emsg && !enableEmsgMetadataCues || !enableID3MetadataCues) {
|
|
@@ -4234,25 +4258,23 @@ class ID3TrackController {
|
|
|
4234
4258
|
// Safari doesn't put the timestamp frame in the TextTrack
|
|
4235
4259
|
if (!isTimeStampFrame(frame)) {
|
|
4236
4260
|
// add a bounds to any unbounded cues
|
|
4237
|
-
this.updateId3CueEnds(startTime);
|
|
4238
|
-
const cue =
|
|
4239
|
-
cue
|
|
4240
|
-
|
|
4241
|
-
cue.type = type;
|
|
4261
|
+
this.updateId3CueEnds(startTime, type);
|
|
4262
|
+
const cue = createCueWithDataFields(Cue, startTime, endTime, frame, type);
|
|
4263
|
+
if (cue) {
|
|
4264
|
+
this.id3Track.addCue(cue);
|
|
4242
4265
|
}
|
|
4243
|
-
this.id3Track.addCue(cue);
|
|
4244
4266
|
}
|
|
4245
4267
|
}
|
|
4246
4268
|
}
|
|
4247
4269
|
}
|
|
4248
4270
|
}
|
|
4249
|
-
updateId3CueEnds(startTime) {
|
|
4271
|
+
updateId3CueEnds(startTime, type) {
|
|
4250
4272
|
var _this$id3Track;
|
|
4251
4273
|
const cues = (_this$id3Track = this.id3Track) == null ? void 0 : _this$id3Track.cues;
|
|
4252
4274
|
if (cues) {
|
|
4253
4275
|
for (let i = cues.length; i--;) {
|
|
4254
4276
|
const cue = cues[i];
|
|
4255
|
-
if (cue.startTime < startTime && cue.endTime === MAX_CUE_ENDTIME) {
|
|
4277
|
+
if (cue.type === type && cue.startTime < startTime && cue.endTime === MAX_CUE_ENDTIME) {
|
|
4256
4278
|
cue.endTime = startTime;
|
|
4257
4279
|
}
|
|
4258
4280
|
}
|
|
@@ -4354,25 +4376,25 @@ class ID3TrackController {
|
|
|
4354
4376
|
if (!isDateRangeCueAttribute(key)) {
|
|
4355
4377
|
continue;
|
|
4356
4378
|
}
|
|
4357
|
-
|
|
4379
|
+
const cue = cues[key];
|
|
4358
4380
|
if (cue) {
|
|
4359
4381
|
if (durationKnown && !appendedDateRangeCues.durationKnown) {
|
|
4360
4382
|
cue.endTime = endTime;
|
|
4361
4383
|
}
|
|
4362
|
-
} else {
|
|
4384
|
+
} else if (Cue) {
|
|
4363
4385
|
let data = dateRange.attr[key];
|
|
4364
|
-
cue = new Cue(startTime, endTime, '');
|
|
4365
4386
|
if (isSCTE35Attribute(key)) {
|
|
4366
4387
|
data = hexToArrayBuffer(data);
|
|
4367
4388
|
}
|
|
4368
|
-
|
|
4389
|
+
const _cue = createCueWithDataFields(Cue, startTime, endTime, {
|
|
4369
4390
|
key,
|
|
4370
4391
|
data
|
|
4371
|
-
};
|
|
4372
|
-
|
|
4373
|
-
|
|
4374
|
-
|
|
4375
|
-
|
|
4392
|
+
}, MetadataSchema.dateRange);
|
|
4393
|
+
if (_cue) {
|
|
4394
|
+
_cue.id = id;
|
|
4395
|
+
this.id3Track.addCue(_cue);
|
|
4396
|
+
cues[key] = _cue;
|
|
4397
|
+
}
|
|
4376
4398
|
}
|
|
4377
4399
|
}
|
|
4378
4400
|
dateRangeCuesAppended[id] = {
|
|
@@ -5282,6 +5304,7 @@ class ErrorController {
|
|
|
5282
5304
|
const hls = this.hls;
|
|
5283
5305
|
hls.on(Events.ERROR, this.onError, this);
|
|
5284
5306
|
hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);
|
|
5307
|
+
hls.on(Events.LEVEL_UPDATED, this.onLevelUpdated, this);
|
|
5285
5308
|
}
|
|
5286
5309
|
unregisterListeners() {
|
|
5287
5310
|
const hls = this.hls;
|
|
@@ -5291,6 +5314,7 @@ class ErrorController {
|
|
|
5291
5314
|
hls.off(Events.ERROR, this.onError, this);
|
|
5292
5315
|
hls.off(Events.ERROR, this.onErrorOut, this);
|
|
5293
5316
|
hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);
|
|
5317
|
+
hls.off(Events.LEVEL_UPDATED, this.onLevelUpdated, this);
|
|
5294
5318
|
}
|
|
5295
5319
|
destroy() {
|
|
5296
5320
|
this.unregisterListeners();
|
|
@@ -5309,8 +5333,11 @@ class ErrorController {
|
|
|
5309
5333
|
this.playlistError = 0;
|
|
5310
5334
|
this.penalizedRenditions = {};
|
|
5311
5335
|
}
|
|
5336
|
+
onLevelUpdated() {
|
|
5337
|
+
this.playlistError = 0;
|
|
5338
|
+
}
|
|
5312
5339
|
onError(event, data) {
|
|
5313
|
-
var _data$level;
|
|
5340
|
+
var _data$frag, _data$level;
|
|
5314
5341
|
if (data.fatal) {
|
|
5315
5342
|
return;
|
|
5316
5343
|
}
|
|
@@ -5323,8 +5350,17 @@ class ErrorController {
|
|
|
5323
5350
|
case ErrorDetails.KEY_LOAD_TIMEOUT:
|
|
5324
5351
|
data.errorAction = this.getFragRetryOrSwitchAction(data);
|
|
5325
5352
|
return;
|
|
5326
|
-
case ErrorDetails.FRAG_GAP:
|
|
5327
5353
|
case ErrorDetails.FRAG_PARSING_ERROR:
|
|
5354
|
+
// ignore empty segment errors marked as gap
|
|
5355
|
+
if ((_data$frag = data.frag) != null && _data$frag.gap) {
|
|
5356
|
+
data.errorAction = {
|
|
5357
|
+
action: NetworkErrorAction.DoNothing,
|
|
5358
|
+
flags: ErrorActionFlags.None
|
|
5359
|
+
};
|
|
5360
|
+
return;
|
|
5361
|
+
}
|
|
5362
|
+
// falls through
|
|
5363
|
+
case ErrorDetails.FRAG_GAP:
|
|
5328
5364
|
case ErrorDetails.FRAG_DECRYPT_ERROR:
|
|
5329
5365
|
{
|
|
5330
5366
|
// Switch level if possible, otherwise allow retry count to reach max error retries
|
|
@@ -5409,7 +5445,7 @@ class ErrorController {
|
|
|
5409
5445
|
}
|
|
5410
5446
|
}
|
|
5411
5447
|
getPlaylistRetryOrSwitchAction(data, levelIndex) {
|
|
5412
|
-
var _data$response
|
|
5448
|
+
var _data$response;
|
|
5413
5449
|
const hls = this.hls;
|
|
5414
5450
|
const retryConfig = getRetryConfig(hls.config.playlistLoadPolicy, data);
|
|
5415
5451
|
const retryCount = this.playlistError++;
|
|
@@ -5423,21 +5459,12 @@ class ErrorController {
|
|
|
5423
5459
|
retryCount
|
|
5424
5460
|
};
|
|
5425
5461
|
}
|
|
5426
|
-
|
|
5427
|
-
|
|
5428
|
-
|
|
5429
|
-
|
|
5430
|
-
action: NetworkErrorAction.DoNothing,
|
|
5431
|
-
flags: ErrorActionFlags.None,
|
|
5432
|
-
retryConfig: retryConfig || {
|
|
5433
|
-
maxNumRetry: 0,
|
|
5434
|
-
retryDelayMs: 0,
|
|
5435
|
-
maxRetryDelayMs: 0
|
|
5436
|
-
},
|
|
5437
|
-
retryCount
|
|
5438
|
-
};
|
|
5462
|
+
const errorAction = this.getLevelSwitchAction(data, levelIndex);
|
|
5463
|
+
if (retryConfig) {
|
|
5464
|
+
errorAction.retryConfig = retryConfig;
|
|
5465
|
+
errorAction.retryCount = retryCount;
|
|
5439
5466
|
}
|
|
5440
|
-
return
|
|
5467
|
+
return errorAction;
|
|
5441
5468
|
}
|
|
5442
5469
|
getFragRetryOrSwitchAction(data) {
|
|
5443
5470
|
const hls = this.hls;
|
|
@@ -5487,18 +5514,23 @@ class ErrorController {
|
|
|
5487
5514
|
if (level) {
|
|
5488
5515
|
level.loadError++;
|
|
5489
5516
|
if (hls.autoLevelEnabled) {
|
|
5490
|
-
var _data$
|
|
5517
|
+
var _data$frag2, _data$context2;
|
|
5491
5518
|
// Search for next level to retry
|
|
5492
5519
|
let nextLevel = -1;
|
|
5493
|
-
const
|
|
5494
|
-
|
|
5520
|
+
const {
|
|
5521
|
+
levels,
|
|
5522
|
+
loadLevel,
|
|
5523
|
+
minAutoLevel,
|
|
5524
|
+
maxAutoLevel
|
|
5525
|
+
} = hls;
|
|
5526
|
+
const fragErrorType = (_data$frag2 = data.frag) == null ? void 0 : _data$frag2.type;
|
|
5495
5527
|
const {
|
|
5496
5528
|
type: playlistErrorType,
|
|
5497
5529
|
groupId: playlistErrorGroupId
|
|
5498
|
-
} = (_data$
|
|
5530
|
+
} = (_data$context2 = data.context) != null ? _data$context2 : {};
|
|
5499
5531
|
for (let i = levels.length; i--;) {
|
|
5500
|
-
const candidate = (i +
|
|
5501
|
-
if (candidate !==
|
|
5532
|
+
const candidate = (i + loadLevel) % levels.length;
|
|
5533
|
+
if (candidate !== loadLevel && candidate >= minAutoLevel && candidate <= maxAutoLevel && levels[candidate].loadError === 0) {
|
|
5502
5534
|
const levelCandidate = levels[candidate];
|
|
5503
5535
|
// Skip level switch if GAP tag is found in next level at same position
|
|
5504
5536
|
if (data.details === ErrorDetails.FRAG_GAP && data.frag) {
|
|
@@ -5522,6 +5554,7 @@ class ErrorController {
|
|
|
5522
5554
|
}
|
|
5523
5555
|
if (nextLevel > -1 && hls.loadLevel !== nextLevel) {
|
|
5524
5556
|
data.levelRetry = true;
|
|
5557
|
+
this.playlistError = 0;
|
|
5525
5558
|
return {
|
|
5526
5559
|
action: NetworkErrorAction.SendAlternateToPenaltyBox,
|
|
5527
5560
|
flags: ErrorActionFlags.None,
|
|
@@ -5762,7 +5795,7 @@ class BasePlaylistController {
|
|
|
5762
5795
|
if (details.live || previousDetails != null && previousDetails.live) {
|
|
5763
5796
|
details.reloaded(previousDetails);
|
|
5764
5797
|
if (previousDetails) {
|
|
5765
|
-
this.log(`live playlist ${index} ${details.advanced ? 'REFRESHED ' + details.lastPartSn + '-' + details.lastPartIndex : 'MISSED'}`);
|
|
5798
|
+
this.log(`live playlist ${index} ${details.advanced ? 'REFRESHED ' + details.lastPartSn + '-' + details.lastPartIndex : details.updated ? 'UPDATED' : 'MISSED'}`);
|
|
5766
5799
|
}
|
|
5767
5800
|
// Merge live playlists to adjust fragment starts and fill in delta playlist skipped segments
|
|
5768
5801
|
if (previousDetails && details.fragments.length > 0) {
|
|
@@ -5817,7 +5850,7 @@ class BasePlaylistController {
|
|
|
5817
5850
|
this.loadPlaylist(deliveryDirectives);
|
|
5818
5851
|
return;
|
|
5819
5852
|
}
|
|
5820
|
-
} else if (details.canBlockReload) {
|
|
5853
|
+
} else if (details.canBlockReload || details.canSkipUntil) {
|
|
5821
5854
|
deliveryDirectives = this.getDeliveryDirectives(details, data.deliveryDirectives, msn, part);
|
|
5822
5855
|
}
|
|
5823
5856
|
const bufferInfo = this.hls.mainForwardBufferInfo;
|
|
@@ -5880,6 +5913,9 @@ class BasePlaylistController {
|
|
|
5880
5913
|
if (retry) {
|
|
5881
5914
|
var _errorEvent$context;
|
|
5882
5915
|
this.requestScheduled = -1;
|
|
5916
|
+
if (retryCount >= retryConfig.maxNumRetry) {
|
|
5917
|
+
return false;
|
|
5918
|
+
}
|
|
5883
5919
|
if (isTimeout && (_errorEvent$context = errorEvent.context) != null && _errorEvent$context.deliveryDirectives) {
|
|
5884
5920
|
// The LL-HLS request already timed out so retry immediately
|
|
5885
5921
|
this.warn(`Retrying playlist loading ${retryCount + 1}/${retryConfig.maxNumRetry} after "${errorDetails}" without delivery-directives`);
|
|
@@ -6499,7 +6535,7 @@ class FragmentTracker {
|
|
|
6499
6535
|
}
|
|
6500
6536
|
// Check if any flagged fragments have been unloaded
|
|
6501
6537
|
// excluding anything newer than appendedPartSn
|
|
6502
|
-
const appendedPartSn = (appendedPart == null ? void 0 : appendedPart.fragment.sn) ||
|
|
6538
|
+
const appendedPartSn = (appendedPart == null ? void 0 : appendedPart.fragment.sn) || -1;
|
|
6503
6539
|
Object.keys(this.fragments).forEach(key => {
|
|
6504
6540
|
const fragmentEntity = this.fragments[key];
|
|
6505
6541
|
if (!fragmentEntity) {
|
|
@@ -6544,7 +6580,7 @@ class FragmentTracker {
|
|
|
6544
6580
|
}
|
|
6545
6581
|
const fragKey = getFragmentKey(frag);
|
|
6546
6582
|
const fragmentEntity = this.fragments[fragKey];
|
|
6547
|
-
if (!fragmentEntity) {
|
|
6583
|
+
if (!fragmentEntity || fragmentEntity.buffered && frag.gap) {
|
|
6548
6584
|
return;
|
|
6549
6585
|
}
|
|
6550
6586
|
const isFragHint = !frag.relurl;
|
|
@@ -6560,7 +6596,8 @@ class FragmentTracker {
|
|
|
6560
6596
|
fragmentEntity.loaded = null;
|
|
6561
6597
|
if (Object.keys(fragmentEntity.range).length) {
|
|
6562
6598
|
fragmentEntity.buffered = true;
|
|
6563
|
-
|
|
6599
|
+
const endList = fragmentEntity.body.endList = frag.endList || fragmentEntity.body.endList;
|
|
6600
|
+
if (endList) {
|
|
6564
6601
|
this.endListFragments[fragmentEntity.body.type] = fragmentEntity;
|
|
6565
6602
|
}
|
|
6566
6603
|
if (!isPartial(fragmentEntity)) {
|
|
@@ -6799,8 +6836,8 @@ class FragmentTracker {
|
|
|
6799
6836
|
}
|
|
6800
6837
|
}
|
|
6801
6838
|
function isPartial(fragmentEntity) {
|
|
6802
|
-
var _fragmentEntity$range, _fragmentEntity$range2;
|
|
6803
|
-
return fragmentEntity.buffered && (fragmentEntity.body.gap || ((_fragmentEntity$range = fragmentEntity.range.video) == null ? void 0 : _fragmentEntity$range.partial) || ((_fragmentEntity$range2 = fragmentEntity.range.audio) == null ? void 0 : _fragmentEntity$range2.partial));
|
|
6839
|
+
var _fragmentEntity$range, _fragmentEntity$range2, _fragmentEntity$range3;
|
|
6840
|
+
return fragmentEntity.buffered && (fragmentEntity.body.gap || ((_fragmentEntity$range = fragmentEntity.range.video) == null ? void 0 : _fragmentEntity$range.partial) || ((_fragmentEntity$range2 = fragmentEntity.range.audio) == null ? void 0 : _fragmentEntity$range2.partial) || ((_fragmentEntity$range3 = fragmentEntity.range.audiovideo) == null ? void 0 : _fragmentEntity$range3.partial));
|
|
6804
6841
|
}
|
|
6805
6842
|
function getFragmentKey(fragment) {
|
|
6806
6843
|
return `${fragment.type}_${fragment.level}_${fragment.urlId}_${fragment.sn}`;
|
|
@@ -6848,8 +6885,13 @@ class FragmentLoader {
|
|
|
6848
6885
|
this.loader.destroy();
|
|
6849
6886
|
}
|
|
6850
6887
|
if (frag.gap) {
|
|
6851
|
-
|
|
6852
|
-
|
|
6888
|
+
if (frag.tagList.some(tags => tags[0] === 'GAP')) {
|
|
6889
|
+
reject(createGapLoadError(frag));
|
|
6890
|
+
return;
|
|
6891
|
+
} else {
|
|
6892
|
+
// Reset temporary treatment as GAP tag
|
|
6893
|
+
frag.gap = false;
|
|
6894
|
+
}
|
|
6853
6895
|
}
|
|
6854
6896
|
const loader = this.loader = frag.loader = FragmentILoader ? new FragmentILoader(config) : new DefaultILoader(config);
|
|
6855
6897
|
const loaderContext = createLoaderContext(frag);
|
|
@@ -7482,6 +7524,7 @@ class TaskLoop {
|
|
|
7482
7524
|
*
|
|
7483
7525
|
* Also @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/buffered
|
|
7484
7526
|
*/
|
|
7527
|
+
|
|
7485
7528
|
const noopBuffered = {
|
|
7486
7529
|
length: 0,
|
|
7487
7530
|
start: () => 0,
|
|
@@ -8542,6 +8585,21 @@ class BaseStreamController extends TaskLoop {
|
|
|
8542
8585
|
}
|
|
8543
8586
|
}
|
|
8544
8587
|
}
|
|
8588
|
+
checkLiveUpdate(details) {
|
|
8589
|
+
if (details.updated && !details.live) {
|
|
8590
|
+
// Live stream ended, update fragment tracker
|
|
8591
|
+
const lastFragment = details.fragments[details.fragments.length - 1];
|
|
8592
|
+
this.fragmentTracker.detectPartialFragments({
|
|
8593
|
+
frag: lastFragment,
|
|
8594
|
+
part: null,
|
|
8595
|
+
stats: lastFragment.stats,
|
|
8596
|
+
id: lastFragment.type
|
|
8597
|
+
});
|
|
8598
|
+
}
|
|
8599
|
+
if (!details.fragments[0]) {
|
|
8600
|
+
details.deltaUpdateFailed = true;
|
|
8601
|
+
}
|
|
8602
|
+
}
|
|
8545
8603
|
flushMainBuffer(startOffset, endOffset, type = null) {
|
|
8546
8604
|
if (!(startOffset - endOffset)) {
|
|
8547
8605
|
return;
|
|
@@ -8871,7 +8929,7 @@ class BaseStreamController extends TaskLoop {
|
|
|
8871
8929
|
level
|
|
8872
8930
|
};
|
|
8873
8931
|
}
|
|
8874
|
-
bufferFragmentData(data, frag, part, chunkMeta) {
|
|
8932
|
+
bufferFragmentData(data, frag, part, chunkMeta, noBacktracking) {
|
|
8875
8933
|
var _buffer;
|
|
8876
8934
|
if (!data || this.state !== State.PARSING) {
|
|
8877
8935
|
return;
|
|
@@ -8898,6 +8956,9 @@ class BaseStreamController extends TaskLoop {
|
|
|
8898
8956
|
};
|
|
8899
8957
|
this.hls.trigger(Events.BUFFER_APPENDING, segment);
|
|
8900
8958
|
if (data.dropped && data.independent && !part) {
|
|
8959
|
+
if (noBacktracking) {
|
|
8960
|
+
return;
|
|
8961
|
+
}
|
|
8901
8962
|
// Clear buffer so that we reload previous segments sequentially if required
|
|
8902
8963
|
this.flushBufferGap(frag);
|
|
8903
8964
|
}
|
|
@@ -9314,10 +9375,8 @@ class BaseStreamController extends TaskLoop {
|
|
|
9314
9375
|
retryConfig
|
|
9315
9376
|
} = errorAction || {};
|
|
9316
9377
|
if (errorAction && action === NetworkErrorAction.RetryRequest && retryConfig) {
|
|
9317
|
-
|
|
9318
|
-
|
|
9319
|
-
this.nextLoadPosition = this.startPosition;
|
|
9320
|
-
}
|
|
9378
|
+
var _this$levelLastLoaded;
|
|
9379
|
+
this.resetStartWhenNotLoaded((_this$levelLastLoaded = this.levelLastLoaded) != null ? _this$levelLastLoaded : frag.level);
|
|
9321
9380
|
const delay = getRetryDelay(retryConfig, retryCount);
|
|
9322
9381
|
this.warn(`Fragment ${frag.sn} of ${filterType} ${frag.level} errored with ${data.details}, retrying loading ${retryCount + 1}/${retryConfig.maxNumRetry} in ${delay}ms`);
|
|
9323
9382
|
errorAction.resolved = true;
|
|
@@ -9333,6 +9392,8 @@ class BaseStreamController extends TaskLoop {
|
|
|
9333
9392
|
} else {
|
|
9334
9393
|
logger.warn(`${data.details} reached or exceeded max retry (${retryCount})`);
|
|
9335
9394
|
}
|
|
9395
|
+
} else if ((errorAction == null ? void 0 : errorAction.action) === NetworkErrorAction.SendAlternateToPenaltyBox) {
|
|
9396
|
+
this.state = State.WAITING_LEVEL;
|
|
9336
9397
|
} else {
|
|
9337
9398
|
this.state = State.ERROR;
|
|
9338
9399
|
}
|
|
@@ -9415,9 +9476,10 @@ class BaseStreamController extends TaskLoop {
|
|
|
9415
9476
|
}
|
|
9416
9477
|
}
|
|
9417
9478
|
resetWhenMissingContext(chunkMeta) {
|
|
9479
|
+
var _this$levelLastLoaded2;
|
|
9418
9480
|
this.warn(`The loading context changed while buffering fragment ${chunkMeta.sn} of level ${chunkMeta.level}. This chunk will not be buffered.`);
|
|
9419
9481
|
this.removeUnbufferedFrags();
|
|
9420
|
-
this.resetStartWhenNotLoaded(chunkMeta.level);
|
|
9482
|
+
this.resetStartWhenNotLoaded((_this$levelLastLoaded2 = this.levelLastLoaded) != null ? _this$levelLastLoaded2 : chunkMeta.level);
|
|
9421
9483
|
this.resetLoadingState();
|
|
9422
9484
|
}
|
|
9423
9485
|
removeUnbufferedFrags(start = 0) {
|
|
@@ -9458,7 +9520,14 @@ class BaseStreamController extends TaskLoop {
|
|
|
9458
9520
|
if (parsed) {
|
|
9459
9521
|
level.fragmentError = 0;
|
|
9460
9522
|
} else if (((_this$transmuxer = this.transmuxer) == null ? void 0 : _this$transmuxer.error) === null) {
|
|
9461
|
-
const error = new Error(`Found no media in fragment ${frag.sn} of level ${level
|
|
9523
|
+
const error = new Error(`Found no media in fragment ${frag.sn} of level ${frag.level} resetting transmuxer to fallback to playlist timing`);
|
|
9524
|
+
if (level.fragmentError === 0) {
|
|
9525
|
+
// Mark and track the odd empty segment as a gap to avoid reloading
|
|
9526
|
+
level.fragmentError++;
|
|
9527
|
+
frag.gap = true;
|
|
9528
|
+
this.fragmentTracker.removeFragment(frag);
|
|
9529
|
+
this.fragmentTracker.fragBuffered(frag, true);
|
|
9530
|
+
}
|
|
9462
9531
|
this.warn(error.message);
|
|
9463
9532
|
this.hls.trigger(Events.ERROR, {
|
|
9464
9533
|
type: ErrorTypes.MEDIA_ERROR,
|
|
@@ -9489,7 +9558,10 @@ class BaseStreamController extends TaskLoop {
|
|
|
9489
9558
|
}
|
|
9490
9559
|
recoverWorkerError(data) {
|
|
9491
9560
|
if (data.event === 'demuxerWorker') {
|
|
9561
|
+
var _ref, _this$levelLastLoaded3, _this$fragCurrent3;
|
|
9562
|
+
this.fragmentTracker.removeAllFragments();
|
|
9492
9563
|
this.resetTransmuxer();
|
|
9564
|
+
this.resetStartWhenNotLoaded((_ref = (_this$levelLastLoaded3 = this.levelLastLoaded) != null ? _this$levelLastLoaded3 : (_this$fragCurrent3 = this.fragCurrent) == null ? void 0 : _this$fragCurrent3.level) != null ? _ref : 0);
|
|
9493
9565
|
this.resetLoadingState();
|
|
9494
9566
|
}
|
|
9495
9567
|
}
|
|
@@ -9536,6 +9608,7 @@ function changeTypeSupported() {
|
|
|
9536
9608
|
}
|
|
9537
9609
|
|
|
9538
9610
|
// ensure the worker ends up in the bundle
|
|
9611
|
+
// If the worker should not be included this gets aliased to empty.js
|
|
9539
9612
|
function hasUMDWorker() {
|
|
9540
9613
|
return typeof __HLS_WORKER_BUNDLE__ === 'function';
|
|
9541
9614
|
}
|
|
@@ -10299,6 +10372,7 @@ function probe(data, offset) {
|
|
|
10299
10372
|
/**
|
|
10300
10373
|
* Parser for exponential Golomb codes, a variable-bitwidth number encoding scheme used by h264.
|
|
10301
10374
|
*/
|
|
10375
|
+
|
|
10302
10376
|
class ExpGolomb {
|
|
10303
10377
|
constructor(data) {
|
|
10304
10378
|
this.data = void 0;
|
|
@@ -10624,6 +10698,7 @@ class ExpGolomb {
|
|
|
10624
10698
|
/**
|
|
10625
10699
|
* SAMPLE-AES decrypter
|
|
10626
10700
|
*/
|
|
10701
|
+
|
|
10627
10702
|
class SampleAesDecrypter {
|
|
10628
10703
|
constructor(observer, config, keyData) {
|
|
10629
10704
|
this.keyData = void 0;
|
|
@@ -10758,19 +10833,33 @@ class TSDemuxer {
|
|
|
10758
10833
|
}
|
|
10759
10834
|
static syncOffset(data) {
|
|
10760
10835
|
const length = data.length;
|
|
10761
|
-
|
|
10836
|
+
let scanwindow = Math.min(PACKET_LENGTH * 5, data.length - PACKET_LENGTH) + 1;
|
|
10762
10837
|
let i = 0;
|
|
10763
10838
|
while (i < scanwindow) {
|
|
10764
10839
|
// a TS init segment should contain at least 2 TS packets: PAT and PMT, each starting with 0x47
|
|
10765
10840
|
let foundPat = false;
|
|
10841
|
+
let packetStart = -1;
|
|
10842
|
+
let tsPackets = 0;
|
|
10766
10843
|
for (let j = i; j < length; j += PACKET_LENGTH) {
|
|
10767
10844
|
if (data[j] === 0x47) {
|
|
10768
|
-
|
|
10769
|
-
|
|
10845
|
+
tsPackets++;
|
|
10846
|
+
if (packetStart === -1) {
|
|
10847
|
+
packetStart = j;
|
|
10848
|
+
// First sync word found at offset, increase scan length (#5251)
|
|
10849
|
+
if (packetStart !== 0) {
|
|
10850
|
+
scanwindow = Math.min(packetStart + PACKET_LENGTH * 99, data.length - PACKET_LENGTH) + 1;
|
|
10851
|
+
}
|
|
10852
|
+
}
|
|
10853
|
+
if (!foundPat) {
|
|
10854
|
+
foundPat = parsePID(data, j) === 0;
|
|
10770
10855
|
}
|
|
10771
|
-
|
|
10772
|
-
|
|
10856
|
+
// Sync word found at 0 with 3 packets, or found at offset least 2 packets up to scanwindow (#5501)
|
|
10857
|
+
if (foundPat && tsPackets > 1 && (packetStart === 0 && tsPackets > 2 || j + PACKET_LENGTH > scanwindow)) {
|
|
10858
|
+
return packetStart;
|
|
10773
10859
|
}
|
|
10860
|
+
} else if (tsPackets) {
|
|
10861
|
+
// Exit if sync word found, but does not contain contiguous packets (#5501)
|
|
10862
|
+
return -1;
|
|
10774
10863
|
} else {
|
|
10775
10864
|
break;
|
|
10776
10865
|
}
|
|
@@ -11139,15 +11228,13 @@ class TSDemuxer {
|
|
|
11139
11228
|
avcSample = this.avcSample = createAVCSample(false, pes.pts, pes.dts, '');
|
|
11140
11229
|
}
|
|
11141
11230
|
units.forEach(unit => {
|
|
11231
|
+
var _avcSample2;
|
|
11142
11232
|
switch (unit.type) {
|
|
11143
11233
|
// NDR
|
|
11144
11234
|
case 1:
|
|
11145
11235
|
{
|
|
11236
|
+
let iskey = false;
|
|
11146
11237
|
push = true;
|
|
11147
|
-
if (!avcSample) {
|
|
11148
|
-
avcSample = this.avcSample = createAVCSample(true, pes.pts, pes.dts, '');
|
|
11149
|
-
}
|
|
11150
|
-
avcSample.frame = true;
|
|
11151
11238
|
const data = unit.data;
|
|
11152
11239
|
// only check slice type to detect KF in case SPS found in same packet (any keyframe is preceded by SPS ...)
|
|
11153
11240
|
if (spsfound && data.length > 4) {
|
|
@@ -11159,9 +11246,22 @@ class TSDemuxer {
|
|
|
11159
11246
|
// I slice: A slice that is not an SI slice that is decoded using intra prediction only.
|
|
11160
11247
|
// if (sliceType === 2 || sliceType === 7) {
|
|
11161
11248
|
if (sliceType === 2 || sliceType === 4 || sliceType === 7 || sliceType === 9) {
|
|
11162
|
-
|
|
11249
|
+
iskey = true;
|
|
11250
|
+
}
|
|
11251
|
+
}
|
|
11252
|
+
if (iskey) {
|
|
11253
|
+
var _avcSample;
|
|
11254
|
+
// if we have non-keyframe data already, that cannot belong to the same frame as a keyframe, so force a push
|
|
11255
|
+
if ((_avcSample = avcSample) != null && _avcSample.frame && !avcSample.key) {
|
|
11256
|
+
pushAccessUnit(avcSample, track);
|
|
11257
|
+
avcSample = this.avcSample = null;
|
|
11163
11258
|
}
|
|
11164
11259
|
}
|
|
11260
|
+
if (!avcSample) {
|
|
11261
|
+
avcSample = this.avcSample = createAVCSample(true, pes.pts, pes.dts, '');
|
|
11262
|
+
}
|
|
11263
|
+
avcSample.frame = true;
|
|
11264
|
+
avcSample.key = iskey;
|
|
11165
11265
|
break;
|
|
11166
11266
|
// IDR
|
|
11167
11267
|
}
|
|
@@ -11169,6 +11269,11 @@ class TSDemuxer {
|
|
|
11169
11269
|
case 5:
|
|
11170
11270
|
push = true;
|
|
11171
11271
|
// handle PES not starting with AUD
|
|
11272
|
+
// if we have non-keyframe data already, that cannot belong to the same frame as a keyframe, so force a push
|
|
11273
|
+
if ((_avcSample2 = avcSample) != null && _avcSample2.frame && !avcSample.key) {
|
|
11274
|
+
pushAccessUnit(avcSample, track);
|
|
11275
|
+
avcSample = this.avcSample = null;
|
|
11276
|
+
}
|
|
11172
11277
|
if (!avcSample) {
|
|
11173
11278
|
avcSample = this.avcSample = createAVCSample(true, pes.pts, pes.dts, '');
|
|
11174
11279
|
}
|
|
@@ -11247,14 +11352,14 @@ class TSDemuxer {
|
|
|
11247
11352
|
}
|
|
11248
11353
|
}
|
|
11249
11354
|
getLastNalUnit(samples) {
|
|
11250
|
-
var
|
|
11355
|
+
var _avcSample3;
|
|
11251
11356
|
let avcSample = this.avcSample;
|
|
11252
11357
|
let lastUnit;
|
|
11253
11358
|
// try to fallback to previous sample if current one is empty
|
|
11254
11359
|
if (!avcSample || avcSample.units.length === 0) {
|
|
11255
11360
|
avcSample = samples[samples.length - 1];
|
|
11256
11361
|
}
|
|
11257
|
-
if ((
|
|
11362
|
+
if ((_avcSample3 = avcSample) != null && _avcSample3.units) {
|
|
11258
11363
|
const units = avcSample.units;
|
|
11259
11364
|
lastUnit = units[units.length - 1];
|
|
11260
11365
|
}
|
|
@@ -12759,7 +12864,7 @@ class MP4Remuxer {
|
|
|
12759
12864
|
} else {
|
|
12760
12865
|
logger.warn(`AVC: ${toMsFromMpegTsClock(-delta, true)} ms (${delta}dts) overlapping between fragments detected`);
|
|
12761
12866
|
}
|
|
12762
|
-
if (!foundOverlap || nextAvcDts
|
|
12867
|
+
if (!foundOverlap || nextAvcDts >= inputSamples[0].pts) {
|
|
12763
12868
|
firstDTS = nextAvcDts;
|
|
12764
12869
|
const firstPTS = inputSamples[0].pts - delta;
|
|
12765
12870
|
inputSamples[0].dts = firstDTS;
|
|
@@ -13212,8 +13317,8 @@ function flushTextTrackMetadataCueSamples(track, timeOffset, initPTS, initDTS) {
|
|
|
13212
13317
|
const sample = track.samples[index];
|
|
13213
13318
|
// setting id3 pts, dts to relative time
|
|
13214
13319
|
// using this._initPTS and this._initDTS to calculate relative time
|
|
13215
|
-
sample.pts = normalizePts(sample.pts - initPTS.baseTime *
|
|
13216
|
-
sample.dts = normalizePts(sample.dts - initDTS.baseTime *
|
|
13320
|
+
sample.pts = normalizePts(sample.pts - initPTS.baseTime * inputTimeScale / initPTS.timescale, timeOffset * inputTimeScale) / inputTimeScale;
|
|
13321
|
+
sample.dts = normalizePts(sample.dts - initDTS.baseTime * inputTimeScale / initDTS.timescale, timeOffset * inputTimeScale) / inputTimeScale;
|
|
13217
13322
|
}
|
|
13218
13323
|
const samples = track.samples;
|
|
13219
13324
|
track.samples = [];
|
|
@@ -13231,7 +13336,7 @@ function flushTextTrackUserdataCueSamples(track, timeOffset, initPTS) {
|
|
|
13231
13336
|
const sample = track.samples[index];
|
|
13232
13337
|
// setting text pts, dts to relative time
|
|
13233
13338
|
// using this._initPTS and this._initDTS to calculate relative time
|
|
13234
|
-
sample.pts = normalizePts(sample.pts - initPTS.baseTime *
|
|
13339
|
+
sample.pts = normalizePts(sample.pts - initPTS.baseTime * inputTimeScale / initPTS.timescale, timeOffset * inputTimeScale) / inputTimeScale;
|
|
13235
13340
|
}
|
|
13236
13341
|
track.samples.sort((a, b) => a.pts - b.pts);
|
|
13237
13342
|
const samples = track.samples;
|
|
@@ -13380,16 +13485,19 @@ class PassThroughRemuxer {
|
|
|
13380
13485
|
initSegment.tracks = this.initTracks;
|
|
13381
13486
|
this.emitInitSegment = false;
|
|
13382
13487
|
}
|
|
13488
|
+
const duration = getDuration(data, initData);
|
|
13383
13489
|
const startDTS = getStartDTS(initData, data);
|
|
13384
13490
|
const decodeTime = startDTS === null ? timeOffset : startDTS;
|
|
13385
|
-
if (isInvalidInitPts(initPTS, decodeTime, timeOffset) || initSegment.timescale !== initPTS.timescale && accurateTimeOffset) {
|
|
13491
|
+
if (isInvalidInitPts(initPTS, decodeTime, timeOffset, duration) || initSegment.timescale !== initPTS.timescale && accurateTimeOffset) {
|
|
13386
13492
|
initSegment.initPTS = decodeTime - timeOffset;
|
|
13493
|
+
if (initPTS && initPTS.timescale === 1) {
|
|
13494
|
+
logger.warn(`Adjusting initPTS by ${initSegment.initPTS - initPTS.baseTime}`);
|
|
13495
|
+
}
|
|
13387
13496
|
this.initPTS = initPTS = {
|
|
13388
13497
|
baseTime: initSegment.initPTS,
|
|
13389
13498
|
timescale: 1
|
|
13390
13499
|
};
|
|
13391
13500
|
}
|
|
13392
|
-
const duration = getDuration(data, initData);
|
|
13393
13501
|
const startTime = audioTrack ? decodeTime - initPTS.baseTime / initPTS.timescale : lastEndTime;
|
|
13394
13502
|
const endTime = startTime + duration;
|
|
13395
13503
|
offsetStartDTS(initData, data, initPTS.baseTime / initPTS.timescale);
|
|
@@ -13430,13 +13538,14 @@ class PassThroughRemuxer {
|
|
|
13430
13538
|
return result;
|
|
13431
13539
|
}
|
|
13432
13540
|
}
|
|
13433
|
-
function isInvalidInitPts(initPTS, startDTS, timeOffset) {
|
|
13541
|
+
function isInvalidInitPts(initPTS, startDTS, timeOffset, duration) {
|
|
13434
13542
|
if (initPTS === null) {
|
|
13435
13543
|
return true;
|
|
13436
13544
|
}
|
|
13437
|
-
// InitPTS is invalid when
|
|
13545
|
+
// InitPTS is invalid when distance from program would be more than segment duration or a minimum of one second
|
|
13546
|
+
const minDuration = Math.max(duration, 1);
|
|
13438
13547
|
const startTime = startDTS - initPTS.baseTime / initPTS.timescale;
|
|
13439
|
-
return
|
|
13548
|
+
return Math.abs(startTime - timeOffset) > minDuration;
|
|
13440
13549
|
}
|
|
13441
13550
|
function getParsedTrackCodec(track, type) {
|
|
13442
13551
|
const parsedCodec = track == null ? void 0 : track.codec;
|
|
@@ -14911,6 +15020,9 @@ class StreamController extends BaseStreamController {
|
|
|
14911
15020
|
}
|
|
14912
15021
|
this.state = State.IDLE;
|
|
14913
15022
|
break;
|
|
15023
|
+
} else if (this.hls.nextLoadLevel !== this.level) {
|
|
15024
|
+
this.state = State.IDLE;
|
|
15025
|
+
break;
|
|
14914
15026
|
}
|
|
14915
15027
|
break;
|
|
14916
15028
|
}
|
|
@@ -15279,9 +15391,7 @@ class StreamController extends BaseStreamController {
|
|
|
15279
15391
|
}
|
|
15280
15392
|
let sliding = 0;
|
|
15281
15393
|
if (newDetails.live || (_curLevel$details = curLevel.details) != null && _curLevel$details.live) {
|
|
15282
|
-
|
|
15283
|
-
newDetails.deltaUpdateFailed = true;
|
|
15284
|
-
}
|
|
15394
|
+
this.checkLiveUpdate(newDetails);
|
|
15285
15395
|
if (newDetails.deltaUpdateFailed) {
|
|
15286
15396
|
return;
|
|
15287
15397
|
}
|
|
@@ -15665,8 +15775,11 @@ class StreamController extends BaseStreamController {
|
|
|
15665
15775
|
}
|
|
15666
15776
|
|
|
15667
15777
|
// Avoid buffering if backtracking this fragment
|
|
15668
|
-
if (video &&
|
|
15669
|
-
|
|
15778
|
+
if (video && details && frag.sn !== 'initSegment') {
|
|
15779
|
+
const prevFrag = details.fragments[frag.sn - 1 - details.startSN];
|
|
15780
|
+
const isFirstFragment = frag.sn === details.startSN;
|
|
15781
|
+
const isFirstInDiscontinuity = !prevFrag || frag.cc > prevFrag.cc;
|
|
15782
|
+
if (remuxResult.independent !== false) {
|
|
15670
15783
|
const {
|
|
15671
15784
|
startPTS,
|
|
15672
15785
|
endPTS,
|
|
@@ -15681,7 +15794,7 @@ class StreamController extends BaseStreamController {
|
|
|
15681
15794
|
endDTS
|
|
15682
15795
|
};
|
|
15683
15796
|
} else {
|
|
15684
|
-
if (video.firstKeyFrame && video.independent && chunkMeta.id === 1) {
|
|
15797
|
+
if (video.firstKeyFrame && video.independent && chunkMeta.id === 1 && !isFirstInDiscontinuity) {
|
|
15685
15798
|
this.couldBacktrack = true;
|
|
15686
15799
|
}
|
|
15687
15800
|
if (video.dropped && video.independent) {
|
|
@@ -15690,9 +15803,12 @@ class StreamController extends BaseStreamController {
|
|
|
15690
15803
|
const bufferInfo = this.getMainFwdBufferInfo();
|
|
15691
15804
|
const targetBufferTime = (bufferInfo ? bufferInfo.end : this.getLoadPosition()) + this.config.maxBufferHole;
|
|
15692
15805
|
const startTime = video.firstKeyFramePTS ? video.firstKeyFramePTS : startPTS;
|
|
15693
|
-
if (targetBufferTime < startTime - this.config.maxBufferHole) {
|
|
15806
|
+
if (!isFirstFragment && targetBufferTime < startTime - this.config.maxBufferHole && !isFirstInDiscontinuity) {
|
|
15694
15807
|
this.backtrack(frag);
|
|
15695
15808
|
return;
|
|
15809
|
+
} else if (isFirstInDiscontinuity) {
|
|
15810
|
+
// Mark segment with a gap to avoid loop loading
|
|
15811
|
+
frag.gap = true;
|
|
15696
15812
|
}
|
|
15697
15813
|
// Set video stream start to fragment start so that truncated samples do not distort the timeline, and mark it partial
|
|
15698
15814
|
frag.setElementaryStreamInfo(video.type, frag.start, endPTS, frag.start, endDTS, true);
|
|
@@ -15702,11 +15818,14 @@ class StreamController extends BaseStreamController {
|
|
|
15702
15818
|
if (this.backtrackFragment) {
|
|
15703
15819
|
this.backtrackFragment = frag;
|
|
15704
15820
|
}
|
|
15705
|
-
this.bufferFragmentData(video, frag, part, chunkMeta);
|
|
15821
|
+
this.bufferFragmentData(video, frag, part, chunkMeta, isFirstFragment || isFirstInDiscontinuity);
|
|
15822
|
+
} else if (isFirstFragment || isFirstInDiscontinuity) {
|
|
15823
|
+
// Mark segment with a gap to avoid loop loading
|
|
15824
|
+
frag.gap = true;
|
|
15825
|
+
} else {
|
|
15826
|
+
this.backtrack(frag);
|
|
15827
|
+
return;
|
|
15706
15828
|
}
|
|
15707
|
-
} else if (remuxResult.independent === false) {
|
|
15708
|
-
this.backtrack(frag);
|
|
15709
|
-
return;
|
|
15710
15829
|
}
|
|
15711
15830
|
if (audio) {
|
|
15712
15831
|
const {
|
|
@@ -15963,6 +16082,7 @@ class EWMA {
|
|
|
15963
16082
|
* Based on the minimum of two exponentially-weighted moving averages with
|
|
15964
16083
|
* different half-lives.
|
|
15965
16084
|
*/
|
|
16085
|
+
|
|
15966
16086
|
class EwmaBandWidthEstimator {
|
|
15967
16087
|
constructor(slow, fast, defaultEstimate, defaultTTFB = 100) {
|
|
15968
16088
|
this.defaultEstimate_ = void 0;
|
|
@@ -16883,10 +17003,8 @@ class AudioStreamController extends BaseStreamController {
|
|
|
16883
17003
|
const track = levels[trackId];
|
|
16884
17004
|
let sliding = 0;
|
|
16885
17005
|
if (newDetails.live || (_track$details = track.details) != null && _track$details.live) {
|
|
17006
|
+
this.checkLiveUpdate(newDetails);
|
|
16886
17007
|
const mainDetails = this.mainDetails;
|
|
16887
|
-
if (!newDetails.fragments[0]) {
|
|
16888
|
-
newDetails.deltaUpdateFailed = true;
|
|
16889
|
-
}
|
|
16890
17008
|
if (newDetails.deltaUpdateFailed || !mainDetails) {
|
|
16891
17009
|
return;
|
|
16892
17010
|
}
|
|
@@ -17003,9 +17121,12 @@ class AudioStreamController extends BaseStreamController {
|
|
|
17003
17121
|
} = data;
|
|
17004
17122
|
if (frag.type !== PlaylistLevelType.AUDIO) {
|
|
17005
17123
|
if (!this.loadedmetadata && frag.type === PlaylistLevelType.MAIN) {
|
|
17006
|
-
|
|
17007
|
-
if (
|
|
17008
|
-
|
|
17124
|
+
const bufferable = this.videoBuffer || this.media;
|
|
17125
|
+
if (bufferable) {
|
|
17126
|
+
const bufferedTimeRanges = BufferHelper.getBuffered(bufferable);
|
|
17127
|
+
if (bufferedTimeRanges.length) {
|
|
17128
|
+
this.loadedmetadata = true;
|
|
17129
|
+
}
|
|
17009
17130
|
}
|
|
17010
17131
|
}
|
|
17011
17132
|
return;
|
|
@@ -17570,16 +17691,7 @@ class SubtitleStreamController extends BaseStreamController {
|
|
|
17570
17691
|
endOffset
|
|
17571
17692
|
} = data;
|
|
17572
17693
|
if (startOffset === 0 && endOffset !== Number.POSITIVE_INFINITY) {
|
|
17573
|
-
const
|
|
17574
|
-
currentTrackId,
|
|
17575
|
-
levels
|
|
17576
|
-
} = this;
|
|
17577
|
-
if (!levels.length || !levels[currentTrackId] || !levels[currentTrackId].details) {
|
|
17578
|
-
return;
|
|
17579
|
-
}
|
|
17580
|
-
const trackDetails = levels[currentTrackId].details;
|
|
17581
|
-
const targetDuration = trackDetails.targetduration;
|
|
17582
|
-
const endOffsetSubtitles = endOffset - targetDuration;
|
|
17694
|
+
const endOffsetSubtitles = endOffset - 1;
|
|
17583
17695
|
if (endOffsetSubtitles <= 0) {
|
|
17584
17696
|
return;
|
|
17585
17697
|
}
|
|
@@ -17775,21 +17887,18 @@ class SubtitleStreamController extends BaseStreamController {
|
|
|
17775
17887
|
if (!levels.length || !track || !track.details) {
|
|
17776
17888
|
return;
|
|
17777
17889
|
}
|
|
17778
|
-
|
|
17779
|
-
// Expand range of subs loaded by one target-duration in either direction to make up for misaligned playlists
|
|
17780
|
-
const trackDetails = track.details;
|
|
17781
|
-
const targetDuration = trackDetails.targetduration;
|
|
17782
17890
|
const {
|
|
17783
17891
|
config
|
|
17784
17892
|
} = this;
|
|
17785
17893
|
const currentTime = this.getLoadPosition();
|
|
17786
|
-
const bufferedInfo = BufferHelper.bufferedInfo(this.tracksBuffered[this.currentTrackId] || [], currentTime
|
|
17894
|
+
const bufferedInfo = BufferHelper.bufferedInfo(this.tracksBuffered[this.currentTrackId] || [], currentTime, config.maxBufferHole);
|
|
17787
17895
|
const {
|
|
17788
17896
|
end: targetBufferTime,
|
|
17789
17897
|
len: bufferLen
|
|
17790
17898
|
} = bufferedInfo;
|
|
17791
17899
|
const mainBufferInfo = this.getFwdBufferInfo(this.media, PlaylistLevelType.MAIN);
|
|
17792
|
-
const
|
|
17900
|
+
const trackDetails = track.details;
|
|
17901
|
+
const maxBufLen = this.getMaxBufferLength(mainBufferInfo == null ? void 0 : mainBufferInfo.len) + trackDetails.levelTargetDuration;
|
|
17793
17902
|
if (bufferLen > maxBufLen) {
|
|
17794
17903
|
return;
|
|
17795
17904
|
}
|
|
@@ -17799,10 +17908,9 @@ class SubtitleStreamController extends BaseStreamController {
|
|
|
17799
17908
|
let foundFrag = null;
|
|
17800
17909
|
const fragPrevious = this.fragPrevious;
|
|
17801
17910
|
if (targetBufferTime < end) {
|
|
17802
|
-
const
|
|
17803
|
-
|
|
17804
|
-
|
|
17805
|
-
foundFrag = findFragmentByPTS(fragPrevious, fragments, Math.max(fragments[0].start, targetBufferTime), maxFragLookUpTolerance);
|
|
17911
|
+
const tolerance = config.maxFragLookUpTolerance;
|
|
17912
|
+
const lookupTolerance = targetBufferTime > end - tolerance ? 0 : tolerance;
|
|
17913
|
+
foundFrag = findFragmentByPTS(fragPrevious, fragments, Math.max(fragments[0].start, targetBufferTime), lookupTolerance);
|
|
17806
17914
|
if (!foundFrag && fragPrevious && fragPrevious.start < fragments[0].start) {
|
|
17807
17915
|
foundFrag = fragments[0];
|
|
17808
17916
|
}
|
|
@@ -17813,6 +17921,14 @@ class SubtitleStreamController extends BaseStreamController {
|
|
|
17813
17921
|
return;
|
|
17814
17922
|
}
|
|
17815
17923
|
foundFrag = this.mapToInitFragWhenRequired(foundFrag);
|
|
17924
|
+
if (foundFrag.sn !== 'initSegment') {
|
|
17925
|
+
// Load earlier fragment in same discontinuity to make up for misaligned playlists and cues that extend beyond end of segment
|
|
17926
|
+
const curSNIdx = foundFrag.sn - trackDetails.startSN;
|
|
17927
|
+
const prevFrag = fragments[curSNIdx - 1];
|
|
17928
|
+
if (prevFrag && prevFrag.cc === foundFrag.cc && this.fragmentTracker.getState(prevFrag) === FragmentState.NOT_LOADED) {
|
|
17929
|
+
foundFrag = prevFrag;
|
|
17930
|
+
}
|
|
17931
|
+
}
|
|
17816
17932
|
if (this.fragmentTracker.getState(foundFrag) === FragmentState.NOT_LOADED) {
|
|
17817
17933
|
// only load if fragment is not loaded
|
|
17818
17934
|
this.loadFragment(foundFrag, track, targetBufferTime);
|
|
@@ -20674,6 +20790,7 @@ var VTTCue = (function () {
|
|
|
20674
20790
|
/*
|
|
20675
20791
|
* Source: https://github.com/mozilla/vtt.js/blob/master/dist/vtt.js
|
|
20676
20792
|
*/
|
|
20793
|
+
|
|
20677
20794
|
class StringDecoder {
|
|
20678
20795
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
20679
20796
|
decode(data, options) {
|
|
@@ -21155,7 +21272,7 @@ function parseWebVTT(vttByteArray, initPTS, vttCCs, cc, timeOffset, callBack, er
|
|
|
21155
21272
|
// Uint8Array.prototype.reduce is not implemented in IE11
|
|
21156
21273
|
const vttLines = utf8ArrayToStr(new Uint8Array(vttByteArray)).trim().replace(LINEBREAKS, '\n').split('\n');
|
|
21157
21274
|
const cues = [];
|
|
21158
|
-
const init90kHz = toMpegTsClockFromTimescale(initPTS.baseTime, initPTS.timescale);
|
|
21275
|
+
const init90kHz = initPTS ? toMpegTsClockFromTimescale(initPTS.baseTime, initPTS.timescale) : 0;
|
|
21159
21276
|
let cueTime = '00:00.000';
|
|
21160
21277
|
let timestampMapMPEGTS = 0;
|
|
21161
21278
|
let timestampMapLOCAL = 0;
|
|
@@ -21179,6 +21296,10 @@ function parseWebVTT(vttByteArray, initPTS, vttCCs, cc, timeOffset, callBack, er
|
|
|
21179
21296
|
}
|
|
21180
21297
|
}
|
|
21181
21298
|
if (webVttMpegTsMapOffset) {
|
|
21299
|
+
if (!initPTS) {
|
|
21300
|
+
parsingError = new Error('Missing initPTS for VTT MPEGTS');
|
|
21301
|
+
return;
|
|
21302
|
+
}
|
|
21182
21303
|
// If we have MPEGTS, offset = presentation time + discontinuity offset
|
|
21183
21304
|
cueOffset = webVttMpegTsMapOffset - vttCCs.presentationOffset;
|
|
21184
21305
|
}
|
|
@@ -21674,7 +21795,7 @@ class TimelineController {
|
|
|
21674
21795
|
this.captionsTracks = {};
|
|
21675
21796
|
this.nonNativeCaptionsTracks = {};
|
|
21676
21797
|
this.textTracks = [];
|
|
21677
|
-
this.unparsedVttFrags =
|
|
21798
|
+
this.unparsedVttFrags = [];
|
|
21678
21799
|
this.initPTS = [];
|
|
21679
21800
|
if (this.cea608Parser1 && this.cea608Parser2) {
|
|
21680
21801
|
this.cea608Parser1.reset();
|
|
@@ -21818,26 +21939,9 @@ class TimelineController {
|
|
|
21818
21939
|
frag,
|
|
21819
21940
|
payload
|
|
21820
21941
|
} = data;
|
|
21821
|
-
const {
|
|
21822
|
-
initPTS,
|
|
21823
|
-
unparsedVttFrags
|
|
21824
|
-
} = this;
|
|
21825
21942
|
if (frag.type === PlaylistLevelType.SUBTITLE) {
|
|
21826
21943
|
// If fragment is subtitle type, parse as WebVTT.
|
|
21827
21944
|
if (payload.byteLength) {
|
|
21828
|
-
// We need an initial synchronisation PTS. Store fragments as long as none has arrived.
|
|
21829
|
-
if (!initPTS[frag.cc]) {
|
|
21830
|
-
unparsedVttFrags.push(data);
|
|
21831
|
-
if (initPTS.length) {
|
|
21832
|
-
// finish unsuccessfully, otherwise the subtitle-stream-controller could be blocked from loading new frags.
|
|
21833
|
-
this.hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {
|
|
21834
|
-
success: false,
|
|
21835
|
-
frag,
|
|
21836
|
-
error: new Error('Missing initial subtitle PTS')
|
|
21837
|
-
});
|
|
21838
|
-
}
|
|
21839
|
-
return;
|
|
21840
|
-
}
|
|
21841
21945
|
const decryptData = frag.decryptdata;
|
|
21842
21946
|
// fragment after decryption has a stats object
|
|
21843
21947
|
const decrypted = ('stats' in data);
|
|
@@ -21856,7 +21960,7 @@ class TimelineController {
|
|
|
21856
21960
|
if (trackPlaylistMedia && trackPlaylistMedia.textCodec === IMSC1_CODEC) {
|
|
21857
21961
|
this._parseIMSC1(frag, payload);
|
|
21858
21962
|
} else {
|
|
21859
|
-
this._parseVTTs(
|
|
21963
|
+
this._parseVTTs(data);
|
|
21860
21964
|
}
|
|
21861
21965
|
}
|
|
21862
21966
|
} else {
|
|
@@ -21886,21 +21990,43 @@ class TimelineController {
|
|
|
21886
21990
|
});
|
|
21887
21991
|
});
|
|
21888
21992
|
}
|
|
21889
|
-
_parseVTTs(
|
|
21993
|
+
_parseVTTs(data) {
|
|
21890
21994
|
var _frag$initSegment;
|
|
21995
|
+
const {
|
|
21996
|
+
frag,
|
|
21997
|
+
payload
|
|
21998
|
+
} = data;
|
|
21999
|
+
// We need an initial synchronisation PTS. Store fragments as long as none has arrived
|
|
22000
|
+
const {
|
|
22001
|
+
initPTS,
|
|
22002
|
+
unparsedVttFrags
|
|
22003
|
+
} = this;
|
|
22004
|
+
const maxAvCC = initPTS.length - 1;
|
|
22005
|
+
if (!initPTS[frag.cc] && maxAvCC === -1) {
|
|
22006
|
+
unparsedVttFrags.push(data);
|
|
22007
|
+
return;
|
|
22008
|
+
}
|
|
21891
22009
|
const hls = this.hls;
|
|
21892
22010
|
// Parse the WebVTT file contents.
|
|
21893
22011
|
const payloadWebVTT = (_frag$initSegment = frag.initSegment) != null && _frag$initSegment.data ? appendUint8Array(frag.initSegment.data, new Uint8Array(payload)) : payload;
|
|
21894
|
-
parseWebVTT(payloadWebVTT, this.initPTS[frag.cc], vttCCs, frag.cc, frag.start, cues => {
|
|
22012
|
+
parseWebVTT(payloadWebVTT, this.initPTS[frag.cc], this.vttCCs, frag.cc, frag.start, cues => {
|
|
21895
22013
|
this._appendCues(cues, frag.level);
|
|
21896
22014
|
hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {
|
|
21897
22015
|
success: true,
|
|
21898
22016
|
frag: frag
|
|
21899
22017
|
});
|
|
21900
22018
|
}, error => {
|
|
21901
|
-
|
|
22019
|
+
const missingInitPTS = error.message === 'Missing initPTS for VTT MPEGTS';
|
|
22020
|
+
if (missingInitPTS) {
|
|
22021
|
+
unparsedVttFrags.push(data);
|
|
22022
|
+
} else {
|
|
22023
|
+
this._fallbackToIMSC1(frag, payload);
|
|
22024
|
+
}
|
|
21902
22025
|
// Something went wrong while parsing. Trigger event with success false.
|
|
21903
22026
|
logger.log(`Failed to parse VTT cue: ${error}`);
|
|
22027
|
+
if (missingInitPTS && maxAvCC > frag.cc) {
|
|
22028
|
+
return;
|
|
22029
|
+
}
|
|
21904
22030
|
hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {
|
|
21905
22031
|
success: false,
|
|
21906
22032
|
frag: frag,
|
|
@@ -21950,10 +22076,6 @@ class TimelineController {
|
|
|
21950
22076
|
frag
|
|
21951
22077
|
} = data;
|
|
21952
22078
|
if (frag.type === PlaylistLevelType.SUBTITLE) {
|
|
21953
|
-
if (!this.initPTS[frag.cc]) {
|
|
21954
|
-
this.unparsedVttFrags.push(data);
|
|
21955
|
-
return;
|
|
21956
|
-
}
|
|
21957
22079
|
this.onFragLoaded(Events.FRAG_LOADED, data);
|
|
21958
22080
|
}
|
|
21959
22081
|
}
|
|
@@ -22062,6 +22184,7 @@ function newVTTCCs() {
|
|
|
22062
22184
|
/*
|
|
22063
22185
|
* cap stream level to media size dimension controller
|
|
22064
22186
|
*/
|
|
22187
|
+
|
|
22065
22188
|
class CapLevelController {
|
|
22066
22189
|
constructor(hls) {
|
|
22067
22190
|
this.hls = void 0;
|
|
@@ -24085,6 +24208,7 @@ class XhrLoader {
|
|
|
24085
24208
|
const stats = this.stats;
|
|
24086
24209
|
stats.loading.first = 0;
|
|
24087
24210
|
stats.loaded = 0;
|
|
24211
|
+
stats.aborted = false;
|
|
24088
24212
|
const xhrSetup = this.xhrSetup;
|
|
24089
24213
|
if (xhrSetup) {
|
|
24090
24214
|
Promise.resolve().then(() => {
|
|
@@ -24956,7 +25080,7 @@ class Hls {
|
|
|
24956
25080
|
* Get the video-dev/hls.js package version.
|
|
24957
25081
|
*/
|
|
24958
25082
|
static get version() {
|
|
24959
|
-
return "1.4.
|
|
25083
|
+
return "1.4.13";
|
|
24960
25084
|
}
|
|
24961
25085
|
|
|
24962
25086
|
/**
|