@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
|
@@ -242,10 +242,17 @@ function _toPropertyKey(arg) {
|
|
|
242
242
|
return typeof key === "symbol" ? key : String(key);
|
|
243
243
|
}
|
|
244
244
|
|
|
245
|
+
// https://caniuse.com/mdn-javascript_builtins_number_isfinite
|
|
245
246
|
const isFiniteNumber = Number.isFinite || function (value) {
|
|
246
247
|
return typeof value === 'number' && isFinite(value);
|
|
247
248
|
};
|
|
248
249
|
|
|
250
|
+
// https://caniuse.com/mdn-javascript_builtins_number_issafeinteger
|
|
251
|
+
const isSafeInteger = Number.isSafeInteger || function (value) {
|
|
252
|
+
return typeof value === 'number' && Math.abs(value) <= MAX_SAFE_INTEGER;
|
|
253
|
+
};
|
|
254
|
+
const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;
|
|
255
|
+
|
|
249
256
|
let Events = /*#__PURE__*/function (Events) {
|
|
250
257
|
Events["MEDIA_ATTACHING"] = "hlsMediaAttaching";
|
|
251
258
|
Events["MEDIA_ATTACHED"] = "hlsMediaAttached";
|
|
@@ -404,7 +411,7 @@ function enableLogs(debugConfig, id) {
|
|
|
404
411
|
// Some browsers don't allow to use bind on console object anyway
|
|
405
412
|
// fallback to default if needed
|
|
406
413
|
try {
|
|
407
|
-
exportedLogger.log(`Debug logs enabled for "${id}" in hls.js version ${"1.4.
|
|
414
|
+
exportedLogger.log(`Debug logs enabled for "${id}" in hls.js version ${"1.4.13"}`);
|
|
408
415
|
} catch (e) {
|
|
409
416
|
exportedLogger = fakeLogger;
|
|
410
417
|
}
|
|
@@ -929,7 +936,7 @@ class LevelDetails {
|
|
|
929
936
|
}
|
|
930
937
|
const partSnDiff = this.lastPartSn - previous.lastPartSn;
|
|
931
938
|
const partIndexDiff = this.lastPartIndex - previous.lastPartIndex;
|
|
932
|
-
this.updated = this.endSN !== previous.endSN || !!partIndexDiff || !!partSnDiff;
|
|
939
|
+
this.updated = this.endSN !== previous.endSN || !!partIndexDiff || !!partSnDiff || !this.live;
|
|
933
940
|
this.advanced = this.endSN > previous.endSN || partSnDiff > 0 || partSnDiff === 0 && partIndexDiff > 0;
|
|
934
941
|
if (this.updated || this.advanced) {
|
|
935
942
|
this.misses = Math.floor(previous.misses * 0.6);
|
|
@@ -1825,13 +1832,13 @@ function getStartDTS(initData, fmp4) {
|
|
|
1825
1832
|
const scale = track.timescale || 90e3;
|
|
1826
1833
|
// convert base time to seconds
|
|
1827
1834
|
const startTime = baseTime / scale;
|
|
1828
|
-
if (
|
|
1835
|
+
if (isFiniteNumber(startTime) && (result === null || startTime < result)) {
|
|
1829
1836
|
return startTime;
|
|
1830
1837
|
}
|
|
1831
1838
|
}
|
|
1832
1839
|
return result;
|
|
1833
1840
|
}, null);
|
|
1834
|
-
if (start !== null &&
|
|
1841
|
+
if (start !== null && isFiniteNumber(start) && (result === null || start < result)) {
|
|
1835
1842
|
return start;
|
|
1836
1843
|
}
|
|
1837
1844
|
return result;
|
|
@@ -2350,7 +2357,7 @@ function parseEmsg(data) {
|
|
|
2350
2357
|
const rightPresentationTime = readUint32(data, offset);
|
|
2351
2358
|
offset += 4;
|
|
2352
2359
|
presentationTime = 2 ** 32 * leftPresentationTime + rightPresentationTime;
|
|
2353
|
-
if (!
|
|
2360
|
+
if (!isSafeInteger(presentationTime)) {
|
|
2354
2361
|
presentationTime = Number.MAX_SAFE_INTEGER;
|
|
2355
2362
|
logger.warn('Presentation time exceeds safe integer limit and wrapped to max safe integer in parsing emsg box');
|
|
2356
2363
|
}
|
|
@@ -3993,9 +4000,13 @@ function addCueToTrack(track, cue) {
|
|
|
3993
4000
|
}
|
|
3994
4001
|
} catch (err) {
|
|
3995
4002
|
logger.debug(`[texttrack-utils]: ${err}`);
|
|
3996
|
-
|
|
3997
|
-
|
|
3998
|
-
|
|
4003
|
+
try {
|
|
4004
|
+
const textTrackCue = new self.TextTrackCue(cue.startTime, cue.endTime, cue.text);
|
|
4005
|
+
textTrackCue.id = cue.id;
|
|
4006
|
+
track.addCue(textTrackCue);
|
|
4007
|
+
} catch (err2) {
|
|
4008
|
+
logger.debug(`[texttrack-utils]: Legacy TextTrackCue fallback failed: ${err2}`);
|
|
4009
|
+
}
|
|
3999
4010
|
}
|
|
4000
4011
|
}
|
|
4001
4012
|
if (mode === 'disabled') {
|
|
@@ -4091,11 +4102,21 @@ var MetadataSchema = {
|
|
|
4091
4102
|
const MIN_CUE_DURATION = 0.25;
|
|
4092
4103
|
function getCueClass() {
|
|
4093
4104
|
if (typeof self === 'undefined') return undefined;
|
|
4094
|
-
|
|
4095
|
-
|
|
4096
|
-
|
|
4097
|
-
|
|
4098
|
-
|
|
4105
|
+
return self.VTTCue || self.TextTrackCue;
|
|
4106
|
+
}
|
|
4107
|
+
function createCueWithDataFields(Cue, startTime, endTime, data, type) {
|
|
4108
|
+
let cue = new Cue(startTime, endTime, '');
|
|
4109
|
+
try {
|
|
4110
|
+
cue.value = data;
|
|
4111
|
+
if (type) {
|
|
4112
|
+
cue.type = type;
|
|
4113
|
+
}
|
|
4114
|
+
} catch (e) {
|
|
4115
|
+
cue = new Cue(startTime, endTime, JSON.stringify(type ? _objectSpread2({
|
|
4116
|
+
type
|
|
4117
|
+
}, data) : data));
|
|
4118
|
+
}
|
|
4119
|
+
return cue;
|
|
4099
4120
|
}
|
|
4100
4121
|
|
|
4101
4122
|
// VTTCue latest draft allows an infinite duration, fallback
|
|
@@ -4103,7 +4124,7 @@ function getCueClass() {
|
|
|
4103
4124
|
const MAX_CUE_ENDTIME = (() => {
|
|
4104
4125
|
const Cue = getCueClass();
|
|
4105
4126
|
try {
|
|
4106
|
-
new Cue(0, Number.POSITIVE_INFINITY, '');
|
|
4127
|
+
Cue && new Cue(0, Number.POSITIVE_INFINITY, '');
|
|
4107
4128
|
} catch (e) {
|
|
4108
4129
|
return Number.MAX_VALUE;
|
|
4109
4130
|
}
|
|
@@ -4215,6 +4236,9 @@ class ID3TrackController {
|
|
|
4215
4236
|
this.id3Track = this.createTrack(this.media);
|
|
4216
4237
|
}
|
|
4217
4238
|
const Cue = getCueClass();
|
|
4239
|
+
if (!Cue) {
|
|
4240
|
+
return;
|
|
4241
|
+
}
|
|
4218
4242
|
for (let i = 0; i < samples.length; i++) {
|
|
4219
4243
|
const type = samples[i].type;
|
|
4220
4244
|
if (type === MetadataSchema.emsg && !enableEmsgMetadataCues || !enableID3MetadataCues) {
|
|
@@ -4236,25 +4260,23 @@ class ID3TrackController {
|
|
|
4236
4260
|
// Safari doesn't put the timestamp frame in the TextTrack
|
|
4237
4261
|
if (!isTimeStampFrame(frame)) {
|
|
4238
4262
|
// add a bounds to any unbounded cues
|
|
4239
|
-
this.updateId3CueEnds(startTime);
|
|
4240
|
-
const cue =
|
|
4241
|
-
cue
|
|
4242
|
-
|
|
4243
|
-
cue.type = type;
|
|
4263
|
+
this.updateId3CueEnds(startTime, type);
|
|
4264
|
+
const cue = createCueWithDataFields(Cue, startTime, endTime, frame, type);
|
|
4265
|
+
if (cue) {
|
|
4266
|
+
this.id3Track.addCue(cue);
|
|
4244
4267
|
}
|
|
4245
|
-
this.id3Track.addCue(cue);
|
|
4246
4268
|
}
|
|
4247
4269
|
}
|
|
4248
4270
|
}
|
|
4249
4271
|
}
|
|
4250
4272
|
}
|
|
4251
|
-
updateId3CueEnds(startTime) {
|
|
4273
|
+
updateId3CueEnds(startTime, type) {
|
|
4252
4274
|
var _this$id3Track;
|
|
4253
4275
|
const cues = (_this$id3Track = this.id3Track) == null ? void 0 : _this$id3Track.cues;
|
|
4254
4276
|
if (cues) {
|
|
4255
4277
|
for (let i = cues.length; i--;) {
|
|
4256
4278
|
const cue = cues[i];
|
|
4257
|
-
if (cue.startTime < startTime && cue.endTime === MAX_CUE_ENDTIME) {
|
|
4279
|
+
if (cue.type === type && cue.startTime < startTime && cue.endTime === MAX_CUE_ENDTIME) {
|
|
4258
4280
|
cue.endTime = startTime;
|
|
4259
4281
|
}
|
|
4260
4282
|
}
|
|
@@ -4356,25 +4378,25 @@ class ID3TrackController {
|
|
|
4356
4378
|
if (!isDateRangeCueAttribute(key)) {
|
|
4357
4379
|
continue;
|
|
4358
4380
|
}
|
|
4359
|
-
|
|
4381
|
+
const cue = cues[key];
|
|
4360
4382
|
if (cue) {
|
|
4361
4383
|
if (durationKnown && !appendedDateRangeCues.durationKnown) {
|
|
4362
4384
|
cue.endTime = endTime;
|
|
4363
4385
|
}
|
|
4364
|
-
} else {
|
|
4386
|
+
} else if (Cue) {
|
|
4365
4387
|
let data = dateRange.attr[key];
|
|
4366
|
-
cue = new Cue(startTime, endTime, '');
|
|
4367
4388
|
if (isSCTE35Attribute(key)) {
|
|
4368
4389
|
data = hexToArrayBuffer(data);
|
|
4369
4390
|
}
|
|
4370
|
-
|
|
4391
|
+
const _cue = createCueWithDataFields(Cue, startTime, endTime, {
|
|
4371
4392
|
key,
|
|
4372
4393
|
data
|
|
4373
|
-
};
|
|
4374
|
-
|
|
4375
|
-
|
|
4376
|
-
|
|
4377
|
-
|
|
4394
|
+
}, MetadataSchema.dateRange);
|
|
4395
|
+
if (_cue) {
|
|
4396
|
+
_cue.id = id;
|
|
4397
|
+
this.id3Track.addCue(_cue);
|
|
4398
|
+
cues[key] = _cue;
|
|
4399
|
+
}
|
|
4378
4400
|
}
|
|
4379
4401
|
}
|
|
4380
4402
|
dateRangeCuesAppended[id] = {
|
|
@@ -5284,6 +5306,7 @@ class ErrorController {
|
|
|
5284
5306
|
const hls = this.hls;
|
|
5285
5307
|
hls.on(Events.ERROR, this.onError, this);
|
|
5286
5308
|
hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);
|
|
5309
|
+
hls.on(Events.LEVEL_UPDATED, this.onLevelUpdated, this);
|
|
5287
5310
|
}
|
|
5288
5311
|
unregisterListeners() {
|
|
5289
5312
|
const hls = this.hls;
|
|
@@ -5293,6 +5316,7 @@ class ErrorController {
|
|
|
5293
5316
|
hls.off(Events.ERROR, this.onError, this);
|
|
5294
5317
|
hls.off(Events.ERROR, this.onErrorOut, this);
|
|
5295
5318
|
hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);
|
|
5319
|
+
hls.off(Events.LEVEL_UPDATED, this.onLevelUpdated, this);
|
|
5296
5320
|
}
|
|
5297
5321
|
destroy() {
|
|
5298
5322
|
this.unregisterListeners();
|
|
@@ -5311,8 +5335,11 @@ class ErrorController {
|
|
|
5311
5335
|
this.playlistError = 0;
|
|
5312
5336
|
this.penalizedRenditions = {};
|
|
5313
5337
|
}
|
|
5338
|
+
onLevelUpdated() {
|
|
5339
|
+
this.playlistError = 0;
|
|
5340
|
+
}
|
|
5314
5341
|
onError(event, data) {
|
|
5315
|
-
var _data$level;
|
|
5342
|
+
var _data$frag, _data$level;
|
|
5316
5343
|
if (data.fatal) {
|
|
5317
5344
|
return;
|
|
5318
5345
|
}
|
|
@@ -5325,8 +5352,17 @@ class ErrorController {
|
|
|
5325
5352
|
case ErrorDetails.KEY_LOAD_TIMEOUT:
|
|
5326
5353
|
data.errorAction = this.getFragRetryOrSwitchAction(data);
|
|
5327
5354
|
return;
|
|
5328
|
-
case ErrorDetails.FRAG_GAP:
|
|
5329
5355
|
case ErrorDetails.FRAG_PARSING_ERROR:
|
|
5356
|
+
// ignore empty segment errors marked as gap
|
|
5357
|
+
if ((_data$frag = data.frag) != null && _data$frag.gap) {
|
|
5358
|
+
data.errorAction = {
|
|
5359
|
+
action: NetworkErrorAction.DoNothing,
|
|
5360
|
+
flags: ErrorActionFlags.None
|
|
5361
|
+
};
|
|
5362
|
+
return;
|
|
5363
|
+
}
|
|
5364
|
+
// falls through
|
|
5365
|
+
case ErrorDetails.FRAG_GAP:
|
|
5330
5366
|
case ErrorDetails.FRAG_DECRYPT_ERROR:
|
|
5331
5367
|
{
|
|
5332
5368
|
// Switch level if possible, otherwise allow retry count to reach max error retries
|
|
@@ -5411,7 +5447,7 @@ class ErrorController {
|
|
|
5411
5447
|
}
|
|
5412
5448
|
}
|
|
5413
5449
|
getPlaylistRetryOrSwitchAction(data, levelIndex) {
|
|
5414
|
-
var _data$response
|
|
5450
|
+
var _data$response;
|
|
5415
5451
|
const hls = this.hls;
|
|
5416
5452
|
const retryConfig = getRetryConfig(hls.config.playlistLoadPolicy, data);
|
|
5417
5453
|
const retryCount = this.playlistError++;
|
|
@@ -5425,21 +5461,12 @@ class ErrorController {
|
|
|
5425
5461
|
retryCount
|
|
5426
5462
|
};
|
|
5427
5463
|
}
|
|
5428
|
-
|
|
5429
|
-
|
|
5430
|
-
|
|
5431
|
-
|
|
5432
|
-
action: NetworkErrorAction.DoNothing,
|
|
5433
|
-
flags: ErrorActionFlags.None,
|
|
5434
|
-
retryConfig: retryConfig || {
|
|
5435
|
-
maxNumRetry: 0,
|
|
5436
|
-
retryDelayMs: 0,
|
|
5437
|
-
maxRetryDelayMs: 0
|
|
5438
|
-
},
|
|
5439
|
-
retryCount
|
|
5440
|
-
};
|
|
5464
|
+
const errorAction = this.getLevelSwitchAction(data, levelIndex);
|
|
5465
|
+
if (retryConfig) {
|
|
5466
|
+
errorAction.retryConfig = retryConfig;
|
|
5467
|
+
errorAction.retryCount = retryCount;
|
|
5441
5468
|
}
|
|
5442
|
-
return
|
|
5469
|
+
return errorAction;
|
|
5443
5470
|
}
|
|
5444
5471
|
getFragRetryOrSwitchAction(data) {
|
|
5445
5472
|
const hls = this.hls;
|
|
@@ -5489,18 +5516,23 @@ class ErrorController {
|
|
|
5489
5516
|
if (level) {
|
|
5490
5517
|
level.loadError++;
|
|
5491
5518
|
if (hls.autoLevelEnabled) {
|
|
5492
|
-
var _data$
|
|
5519
|
+
var _data$frag2, _data$context2;
|
|
5493
5520
|
// Search for next level to retry
|
|
5494
5521
|
let nextLevel = -1;
|
|
5495
|
-
const
|
|
5496
|
-
|
|
5522
|
+
const {
|
|
5523
|
+
levels,
|
|
5524
|
+
loadLevel,
|
|
5525
|
+
minAutoLevel,
|
|
5526
|
+
maxAutoLevel
|
|
5527
|
+
} = hls;
|
|
5528
|
+
const fragErrorType = (_data$frag2 = data.frag) == null ? void 0 : _data$frag2.type;
|
|
5497
5529
|
const {
|
|
5498
5530
|
type: playlistErrorType,
|
|
5499
5531
|
groupId: playlistErrorGroupId
|
|
5500
|
-
} = (_data$
|
|
5532
|
+
} = (_data$context2 = data.context) != null ? _data$context2 : {};
|
|
5501
5533
|
for (let i = levels.length; i--;) {
|
|
5502
|
-
const candidate = (i +
|
|
5503
|
-
if (candidate !==
|
|
5534
|
+
const candidate = (i + loadLevel) % levels.length;
|
|
5535
|
+
if (candidate !== loadLevel && candidate >= minAutoLevel && candidate <= maxAutoLevel && levels[candidate].loadError === 0) {
|
|
5504
5536
|
const levelCandidate = levels[candidate];
|
|
5505
5537
|
// Skip level switch if GAP tag is found in next level at same position
|
|
5506
5538
|
if (data.details === ErrorDetails.FRAG_GAP && data.frag) {
|
|
@@ -5524,6 +5556,7 @@ class ErrorController {
|
|
|
5524
5556
|
}
|
|
5525
5557
|
if (nextLevel > -1 && hls.loadLevel !== nextLevel) {
|
|
5526
5558
|
data.levelRetry = true;
|
|
5559
|
+
this.playlistError = 0;
|
|
5527
5560
|
return {
|
|
5528
5561
|
action: NetworkErrorAction.SendAlternateToPenaltyBox,
|
|
5529
5562
|
flags: ErrorActionFlags.None,
|
|
@@ -5764,7 +5797,7 @@ class BasePlaylistController {
|
|
|
5764
5797
|
if (details.live || previousDetails != null && previousDetails.live) {
|
|
5765
5798
|
details.reloaded(previousDetails);
|
|
5766
5799
|
if (previousDetails) {
|
|
5767
|
-
this.log(`live playlist ${index} ${details.advanced ? 'REFRESHED ' + details.lastPartSn + '-' + details.lastPartIndex : 'MISSED'}`);
|
|
5800
|
+
this.log(`live playlist ${index} ${details.advanced ? 'REFRESHED ' + details.lastPartSn + '-' + details.lastPartIndex : details.updated ? 'UPDATED' : 'MISSED'}`);
|
|
5768
5801
|
}
|
|
5769
5802
|
// Merge live playlists to adjust fragment starts and fill in delta playlist skipped segments
|
|
5770
5803
|
if (previousDetails && details.fragments.length > 0) {
|
|
@@ -5819,7 +5852,7 @@ class BasePlaylistController {
|
|
|
5819
5852
|
this.loadPlaylist(deliveryDirectives);
|
|
5820
5853
|
return;
|
|
5821
5854
|
}
|
|
5822
|
-
} else if (details.canBlockReload) {
|
|
5855
|
+
} else if (details.canBlockReload || details.canSkipUntil) {
|
|
5823
5856
|
deliveryDirectives = this.getDeliveryDirectives(details, data.deliveryDirectives, msn, part);
|
|
5824
5857
|
}
|
|
5825
5858
|
const bufferInfo = this.hls.mainForwardBufferInfo;
|
|
@@ -5882,6 +5915,9 @@ class BasePlaylistController {
|
|
|
5882
5915
|
if (retry) {
|
|
5883
5916
|
var _errorEvent$context;
|
|
5884
5917
|
this.requestScheduled = -1;
|
|
5918
|
+
if (retryCount >= retryConfig.maxNumRetry) {
|
|
5919
|
+
return false;
|
|
5920
|
+
}
|
|
5885
5921
|
if (isTimeout && (_errorEvent$context = errorEvent.context) != null && _errorEvent$context.deliveryDirectives) {
|
|
5886
5922
|
// The LL-HLS request already timed out so retry immediately
|
|
5887
5923
|
this.warn(`Retrying playlist loading ${retryCount + 1}/${retryConfig.maxNumRetry} after "${errorDetails}" without delivery-directives`);
|
|
@@ -6501,7 +6537,7 @@ class FragmentTracker {
|
|
|
6501
6537
|
}
|
|
6502
6538
|
// Check if any flagged fragments have been unloaded
|
|
6503
6539
|
// excluding anything newer than appendedPartSn
|
|
6504
|
-
const appendedPartSn = (appendedPart == null ? void 0 : appendedPart.fragment.sn) ||
|
|
6540
|
+
const appendedPartSn = (appendedPart == null ? void 0 : appendedPart.fragment.sn) || -1;
|
|
6505
6541
|
Object.keys(this.fragments).forEach(key => {
|
|
6506
6542
|
const fragmentEntity = this.fragments[key];
|
|
6507
6543
|
if (!fragmentEntity) {
|
|
@@ -6546,7 +6582,7 @@ class FragmentTracker {
|
|
|
6546
6582
|
}
|
|
6547
6583
|
const fragKey = getFragmentKey(frag);
|
|
6548
6584
|
const fragmentEntity = this.fragments[fragKey];
|
|
6549
|
-
if (!fragmentEntity) {
|
|
6585
|
+
if (!fragmentEntity || fragmentEntity.buffered && frag.gap) {
|
|
6550
6586
|
return;
|
|
6551
6587
|
}
|
|
6552
6588
|
const isFragHint = !frag.relurl;
|
|
@@ -6562,7 +6598,8 @@ class FragmentTracker {
|
|
|
6562
6598
|
fragmentEntity.loaded = null;
|
|
6563
6599
|
if (Object.keys(fragmentEntity.range).length) {
|
|
6564
6600
|
fragmentEntity.buffered = true;
|
|
6565
|
-
|
|
6601
|
+
const endList = fragmentEntity.body.endList = frag.endList || fragmentEntity.body.endList;
|
|
6602
|
+
if (endList) {
|
|
6566
6603
|
this.endListFragments[fragmentEntity.body.type] = fragmentEntity;
|
|
6567
6604
|
}
|
|
6568
6605
|
if (!isPartial(fragmentEntity)) {
|
|
@@ -6801,8 +6838,8 @@ class FragmentTracker {
|
|
|
6801
6838
|
}
|
|
6802
6839
|
}
|
|
6803
6840
|
function isPartial(fragmentEntity) {
|
|
6804
|
-
var _fragmentEntity$range, _fragmentEntity$range2;
|
|
6805
|
-
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));
|
|
6841
|
+
var _fragmentEntity$range, _fragmentEntity$range2, _fragmentEntity$range3;
|
|
6842
|
+
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));
|
|
6806
6843
|
}
|
|
6807
6844
|
function getFragmentKey(fragment) {
|
|
6808
6845
|
return `${fragment.type}_${fragment.level}_${fragment.urlId}_${fragment.sn}`;
|
|
@@ -6850,8 +6887,13 @@ class FragmentLoader {
|
|
|
6850
6887
|
this.loader.destroy();
|
|
6851
6888
|
}
|
|
6852
6889
|
if (frag.gap) {
|
|
6853
|
-
|
|
6854
|
-
|
|
6890
|
+
if (frag.tagList.some(tags => tags[0] === 'GAP')) {
|
|
6891
|
+
reject(createGapLoadError(frag));
|
|
6892
|
+
return;
|
|
6893
|
+
} else {
|
|
6894
|
+
// Reset temporary treatment as GAP tag
|
|
6895
|
+
frag.gap = false;
|
|
6896
|
+
}
|
|
6855
6897
|
}
|
|
6856
6898
|
const loader = this.loader = frag.loader = FragmentILoader ? new FragmentILoader(config) : new DefaultILoader(config);
|
|
6857
6899
|
const loaderContext = createLoaderContext(frag);
|
|
@@ -7484,6 +7526,7 @@ class TaskLoop {
|
|
|
7484
7526
|
*
|
|
7485
7527
|
* Also @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/buffered
|
|
7486
7528
|
*/
|
|
7529
|
+
|
|
7487
7530
|
const noopBuffered = {
|
|
7488
7531
|
length: 0,
|
|
7489
7532
|
start: () => 0,
|
|
@@ -8544,6 +8587,21 @@ class BaseStreamController extends TaskLoop {
|
|
|
8544
8587
|
}
|
|
8545
8588
|
}
|
|
8546
8589
|
}
|
|
8590
|
+
checkLiveUpdate(details) {
|
|
8591
|
+
if (details.updated && !details.live) {
|
|
8592
|
+
// Live stream ended, update fragment tracker
|
|
8593
|
+
const lastFragment = details.fragments[details.fragments.length - 1];
|
|
8594
|
+
this.fragmentTracker.detectPartialFragments({
|
|
8595
|
+
frag: lastFragment,
|
|
8596
|
+
part: null,
|
|
8597
|
+
stats: lastFragment.stats,
|
|
8598
|
+
id: lastFragment.type
|
|
8599
|
+
});
|
|
8600
|
+
}
|
|
8601
|
+
if (!details.fragments[0]) {
|
|
8602
|
+
details.deltaUpdateFailed = true;
|
|
8603
|
+
}
|
|
8604
|
+
}
|
|
8547
8605
|
flushMainBuffer(startOffset, endOffset, type = null) {
|
|
8548
8606
|
if (!(startOffset - endOffset)) {
|
|
8549
8607
|
return;
|
|
@@ -8873,7 +8931,7 @@ class BaseStreamController extends TaskLoop {
|
|
|
8873
8931
|
level
|
|
8874
8932
|
};
|
|
8875
8933
|
}
|
|
8876
|
-
bufferFragmentData(data, frag, part, chunkMeta) {
|
|
8934
|
+
bufferFragmentData(data, frag, part, chunkMeta, noBacktracking) {
|
|
8877
8935
|
var _buffer;
|
|
8878
8936
|
if (!data || this.state !== State.PARSING) {
|
|
8879
8937
|
return;
|
|
@@ -8900,6 +8958,9 @@ class BaseStreamController extends TaskLoop {
|
|
|
8900
8958
|
};
|
|
8901
8959
|
this.hls.trigger(Events.BUFFER_APPENDING, segment);
|
|
8902
8960
|
if (data.dropped && data.independent && !part) {
|
|
8961
|
+
if (noBacktracking) {
|
|
8962
|
+
return;
|
|
8963
|
+
}
|
|
8903
8964
|
// Clear buffer so that we reload previous segments sequentially if required
|
|
8904
8965
|
this.flushBufferGap(frag);
|
|
8905
8966
|
}
|
|
@@ -9316,10 +9377,8 @@ class BaseStreamController extends TaskLoop {
|
|
|
9316
9377
|
retryConfig
|
|
9317
9378
|
} = errorAction || {};
|
|
9318
9379
|
if (errorAction && action === NetworkErrorAction.RetryRequest && retryConfig) {
|
|
9319
|
-
|
|
9320
|
-
|
|
9321
|
-
this.nextLoadPosition = this.startPosition;
|
|
9322
|
-
}
|
|
9380
|
+
var _this$levelLastLoaded;
|
|
9381
|
+
this.resetStartWhenNotLoaded((_this$levelLastLoaded = this.levelLastLoaded) != null ? _this$levelLastLoaded : frag.level);
|
|
9323
9382
|
const delay = getRetryDelay(retryConfig, retryCount);
|
|
9324
9383
|
this.warn(`Fragment ${frag.sn} of ${filterType} ${frag.level} errored with ${data.details}, retrying loading ${retryCount + 1}/${retryConfig.maxNumRetry} in ${delay}ms`);
|
|
9325
9384
|
errorAction.resolved = true;
|
|
@@ -9335,6 +9394,8 @@ class BaseStreamController extends TaskLoop {
|
|
|
9335
9394
|
} else {
|
|
9336
9395
|
logger.warn(`${data.details} reached or exceeded max retry (${retryCount})`);
|
|
9337
9396
|
}
|
|
9397
|
+
} else if ((errorAction == null ? void 0 : errorAction.action) === NetworkErrorAction.SendAlternateToPenaltyBox) {
|
|
9398
|
+
this.state = State.WAITING_LEVEL;
|
|
9338
9399
|
} else {
|
|
9339
9400
|
this.state = State.ERROR;
|
|
9340
9401
|
}
|
|
@@ -9417,9 +9478,10 @@ class BaseStreamController extends TaskLoop {
|
|
|
9417
9478
|
}
|
|
9418
9479
|
}
|
|
9419
9480
|
resetWhenMissingContext(chunkMeta) {
|
|
9481
|
+
var _this$levelLastLoaded2;
|
|
9420
9482
|
this.warn(`The loading context changed while buffering fragment ${chunkMeta.sn} of level ${chunkMeta.level}. This chunk will not be buffered.`);
|
|
9421
9483
|
this.removeUnbufferedFrags();
|
|
9422
|
-
this.resetStartWhenNotLoaded(chunkMeta.level);
|
|
9484
|
+
this.resetStartWhenNotLoaded((_this$levelLastLoaded2 = this.levelLastLoaded) != null ? _this$levelLastLoaded2 : chunkMeta.level);
|
|
9423
9485
|
this.resetLoadingState();
|
|
9424
9486
|
}
|
|
9425
9487
|
removeUnbufferedFrags(start = 0) {
|
|
@@ -9460,7 +9522,14 @@ class BaseStreamController extends TaskLoop {
|
|
|
9460
9522
|
if (parsed) {
|
|
9461
9523
|
level.fragmentError = 0;
|
|
9462
9524
|
} else if (((_this$transmuxer = this.transmuxer) == null ? void 0 : _this$transmuxer.error) === null) {
|
|
9463
|
-
const error = new Error(`Found no media in fragment ${frag.sn} of level ${level
|
|
9525
|
+
const error = new Error(`Found no media in fragment ${frag.sn} of level ${frag.level} resetting transmuxer to fallback to playlist timing`);
|
|
9526
|
+
if (level.fragmentError === 0) {
|
|
9527
|
+
// Mark and track the odd empty segment as a gap to avoid reloading
|
|
9528
|
+
level.fragmentError++;
|
|
9529
|
+
frag.gap = true;
|
|
9530
|
+
this.fragmentTracker.removeFragment(frag);
|
|
9531
|
+
this.fragmentTracker.fragBuffered(frag, true);
|
|
9532
|
+
}
|
|
9464
9533
|
this.warn(error.message);
|
|
9465
9534
|
this.hls.trigger(Events.ERROR, {
|
|
9466
9535
|
type: ErrorTypes.MEDIA_ERROR,
|
|
@@ -9491,7 +9560,10 @@ class BaseStreamController extends TaskLoop {
|
|
|
9491
9560
|
}
|
|
9492
9561
|
recoverWorkerError(data) {
|
|
9493
9562
|
if (data.event === 'demuxerWorker') {
|
|
9563
|
+
var _ref, _this$levelLastLoaded3, _this$fragCurrent3;
|
|
9564
|
+
this.fragmentTracker.removeAllFragments();
|
|
9494
9565
|
this.resetTransmuxer();
|
|
9566
|
+
this.resetStartWhenNotLoaded((_ref = (_this$levelLastLoaded3 = this.levelLastLoaded) != null ? _this$levelLastLoaded3 : (_this$fragCurrent3 = this.fragCurrent) == null ? void 0 : _this$fragCurrent3.level) != null ? _ref : 0);
|
|
9495
9567
|
this.resetLoadingState();
|
|
9496
9568
|
}
|
|
9497
9569
|
}
|
|
@@ -9538,6 +9610,7 @@ function changeTypeSupported() {
|
|
|
9538
9610
|
}
|
|
9539
9611
|
|
|
9540
9612
|
// ensure the worker ends up in the bundle
|
|
9613
|
+
// If the worker should not be included this gets aliased to empty.js
|
|
9541
9614
|
function hasUMDWorker() {
|
|
9542
9615
|
return typeof __HLS_WORKER_BUNDLE__ === 'function';
|
|
9543
9616
|
}
|
|
@@ -10301,6 +10374,7 @@ function probe(data, offset) {
|
|
|
10301
10374
|
/**
|
|
10302
10375
|
* Parser for exponential Golomb codes, a variable-bitwidth number encoding scheme used by h264.
|
|
10303
10376
|
*/
|
|
10377
|
+
|
|
10304
10378
|
class ExpGolomb {
|
|
10305
10379
|
constructor(data) {
|
|
10306
10380
|
this.data = void 0;
|
|
@@ -10626,6 +10700,7 @@ class ExpGolomb {
|
|
|
10626
10700
|
/**
|
|
10627
10701
|
* SAMPLE-AES decrypter
|
|
10628
10702
|
*/
|
|
10703
|
+
|
|
10629
10704
|
class SampleAesDecrypter {
|
|
10630
10705
|
constructor(observer, config, keyData) {
|
|
10631
10706
|
this.keyData = void 0;
|
|
@@ -10760,19 +10835,33 @@ class TSDemuxer {
|
|
|
10760
10835
|
}
|
|
10761
10836
|
static syncOffset(data) {
|
|
10762
10837
|
const length = data.length;
|
|
10763
|
-
|
|
10838
|
+
let scanwindow = Math.min(PACKET_LENGTH * 5, data.length - PACKET_LENGTH) + 1;
|
|
10764
10839
|
let i = 0;
|
|
10765
10840
|
while (i < scanwindow) {
|
|
10766
10841
|
// a TS init segment should contain at least 2 TS packets: PAT and PMT, each starting with 0x47
|
|
10767
10842
|
let foundPat = false;
|
|
10843
|
+
let packetStart = -1;
|
|
10844
|
+
let tsPackets = 0;
|
|
10768
10845
|
for (let j = i; j < length; j += PACKET_LENGTH) {
|
|
10769
10846
|
if (data[j] === 0x47) {
|
|
10770
|
-
|
|
10771
|
-
|
|
10847
|
+
tsPackets++;
|
|
10848
|
+
if (packetStart === -1) {
|
|
10849
|
+
packetStart = j;
|
|
10850
|
+
// First sync word found at offset, increase scan length (#5251)
|
|
10851
|
+
if (packetStart !== 0) {
|
|
10852
|
+
scanwindow = Math.min(packetStart + PACKET_LENGTH * 99, data.length - PACKET_LENGTH) + 1;
|
|
10853
|
+
}
|
|
10854
|
+
}
|
|
10855
|
+
if (!foundPat) {
|
|
10856
|
+
foundPat = parsePID(data, j) === 0;
|
|
10772
10857
|
}
|
|
10773
|
-
|
|
10774
|
-
|
|
10858
|
+
// Sync word found at 0 with 3 packets, or found at offset least 2 packets up to scanwindow (#5501)
|
|
10859
|
+
if (foundPat && tsPackets > 1 && (packetStart === 0 && tsPackets > 2 || j + PACKET_LENGTH > scanwindow)) {
|
|
10860
|
+
return packetStart;
|
|
10775
10861
|
}
|
|
10862
|
+
} else if (tsPackets) {
|
|
10863
|
+
// Exit if sync word found, but does not contain contiguous packets (#5501)
|
|
10864
|
+
return -1;
|
|
10776
10865
|
} else {
|
|
10777
10866
|
break;
|
|
10778
10867
|
}
|
|
@@ -11141,15 +11230,13 @@ class TSDemuxer {
|
|
|
11141
11230
|
avcSample = this.avcSample = createAVCSample(false, pes.pts, pes.dts, '');
|
|
11142
11231
|
}
|
|
11143
11232
|
units.forEach(unit => {
|
|
11233
|
+
var _avcSample2;
|
|
11144
11234
|
switch (unit.type) {
|
|
11145
11235
|
// NDR
|
|
11146
11236
|
case 1:
|
|
11147
11237
|
{
|
|
11238
|
+
let iskey = false;
|
|
11148
11239
|
push = true;
|
|
11149
|
-
if (!avcSample) {
|
|
11150
|
-
avcSample = this.avcSample = createAVCSample(true, pes.pts, pes.dts, '');
|
|
11151
|
-
}
|
|
11152
|
-
avcSample.frame = true;
|
|
11153
11240
|
const data = unit.data;
|
|
11154
11241
|
// only check slice type to detect KF in case SPS found in same packet (any keyframe is preceded by SPS ...)
|
|
11155
11242
|
if (spsfound && data.length > 4) {
|
|
@@ -11161,9 +11248,22 @@ class TSDemuxer {
|
|
|
11161
11248
|
// I slice: A slice that is not an SI slice that is decoded using intra prediction only.
|
|
11162
11249
|
// if (sliceType === 2 || sliceType === 7) {
|
|
11163
11250
|
if (sliceType === 2 || sliceType === 4 || sliceType === 7 || sliceType === 9) {
|
|
11164
|
-
|
|
11251
|
+
iskey = true;
|
|
11252
|
+
}
|
|
11253
|
+
}
|
|
11254
|
+
if (iskey) {
|
|
11255
|
+
var _avcSample;
|
|
11256
|
+
// if we have non-keyframe data already, that cannot belong to the same frame as a keyframe, so force a push
|
|
11257
|
+
if ((_avcSample = avcSample) != null && _avcSample.frame && !avcSample.key) {
|
|
11258
|
+
pushAccessUnit(avcSample, track);
|
|
11259
|
+
avcSample = this.avcSample = null;
|
|
11165
11260
|
}
|
|
11166
11261
|
}
|
|
11262
|
+
if (!avcSample) {
|
|
11263
|
+
avcSample = this.avcSample = createAVCSample(true, pes.pts, pes.dts, '');
|
|
11264
|
+
}
|
|
11265
|
+
avcSample.frame = true;
|
|
11266
|
+
avcSample.key = iskey;
|
|
11167
11267
|
break;
|
|
11168
11268
|
// IDR
|
|
11169
11269
|
}
|
|
@@ -11171,6 +11271,11 @@ class TSDemuxer {
|
|
|
11171
11271
|
case 5:
|
|
11172
11272
|
push = true;
|
|
11173
11273
|
// handle PES not starting with AUD
|
|
11274
|
+
// if we have non-keyframe data already, that cannot belong to the same frame as a keyframe, so force a push
|
|
11275
|
+
if ((_avcSample2 = avcSample) != null && _avcSample2.frame && !avcSample.key) {
|
|
11276
|
+
pushAccessUnit(avcSample, track);
|
|
11277
|
+
avcSample = this.avcSample = null;
|
|
11278
|
+
}
|
|
11174
11279
|
if (!avcSample) {
|
|
11175
11280
|
avcSample = this.avcSample = createAVCSample(true, pes.pts, pes.dts, '');
|
|
11176
11281
|
}
|
|
@@ -11249,14 +11354,14 @@ class TSDemuxer {
|
|
|
11249
11354
|
}
|
|
11250
11355
|
}
|
|
11251
11356
|
getLastNalUnit(samples) {
|
|
11252
|
-
var
|
|
11357
|
+
var _avcSample3;
|
|
11253
11358
|
let avcSample = this.avcSample;
|
|
11254
11359
|
let lastUnit;
|
|
11255
11360
|
// try to fallback to previous sample if current one is empty
|
|
11256
11361
|
if (!avcSample || avcSample.units.length === 0) {
|
|
11257
11362
|
avcSample = samples[samples.length - 1];
|
|
11258
11363
|
}
|
|
11259
|
-
if ((
|
|
11364
|
+
if ((_avcSample3 = avcSample) != null && _avcSample3.units) {
|
|
11260
11365
|
const units = avcSample.units;
|
|
11261
11366
|
lastUnit = units[units.length - 1];
|
|
11262
11367
|
}
|
|
@@ -12761,7 +12866,7 @@ class MP4Remuxer {
|
|
|
12761
12866
|
} else {
|
|
12762
12867
|
logger.warn(`AVC: ${toMsFromMpegTsClock(-delta, true)} ms (${delta}dts) overlapping between fragments detected`);
|
|
12763
12868
|
}
|
|
12764
|
-
if (!foundOverlap || nextAvcDts
|
|
12869
|
+
if (!foundOverlap || nextAvcDts >= inputSamples[0].pts) {
|
|
12765
12870
|
firstDTS = nextAvcDts;
|
|
12766
12871
|
const firstPTS = inputSamples[0].pts - delta;
|
|
12767
12872
|
inputSamples[0].dts = firstDTS;
|
|
@@ -13214,8 +13319,8 @@ function flushTextTrackMetadataCueSamples(track, timeOffset, initPTS, initDTS) {
|
|
|
13214
13319
|
const sample = track.samples[index];
|
|
13215
13320
|
// setting id3 pts, dts to relative time
|
|
13216
13321
|
// using this._initPTS and this._initDTS to calculate relative time
|
|
13217
|
-
sample.pts = normalizePts(sample.pts - initPTS.baseTime *
|
|
13218
|
-
sample.dts = normalizePts(sample.dts - initDTS.baseTime *
|
|
13322
|
+
sample.pts = normalizePts(sample.pts - initPTS.baseTime * inputTimeScale / initPTS.timescale, timeOffset * inputTimeScale) / inputTimeScale;
|
|
13323
|
+
sample.dts = normalizePts(sample.dts - initDTS.baseTime * inputTimeScale / initDTS.timescale, timeOffset * inputTimeScale) / inputTimeScale;
|
|
13219
13324
|
}
|
|
13220
13325
|
const samples = track.samples;
|
|
13221
13326
|
track.samples = [];
|
|
@@ -13233,7 +13338,7 @@ function flushTextTrackUserdataCueSamples(track, timeOffset, initPTS) {
|
|
|
13233
13338
|
const sample = track.samples[index];
|
|
13234
13339
|
// setting text pts, dts to relative time
|
|
13235
13340
|
// using this._initPTS and this._initDTS to calculate relative time
|
|
13236
|
-
sample.pts = normalizePts(sample.pts - initPTS.baseTime *
|
|
13341
|
+
sample.pts = normalizePts(sample.pts - initPTS.baseTime * inputTimeScale / initPTS.timescale, timeOffset * inputTimeScale) / inputTimeScale;
|
|
13237
13342
|
}
|
|
13238
13343
|
track.samples.sort((a, b) => a.pts - b.pts);
|
|
13239
13344
|
const samples = track.samples;
|
|
@@ -13382,16 +13487,19 @@ class PassThroughRemuxer {
|
|
|
13382
13487
|
initSegment.tracks = this.initTracks;
|
|
13383
13488
|
this.emitInitSegment = false;
|
|
13384
13489
|
}
|
|
13490
|
+
const duration = getDuration(data, initData);
|
|
13385
13491
|
const startDTS = getStartDTS(initData, data);
|
|
13386
13492
|
const decodeTime = startDTS === null ? timeOffset : startDTS;
|
|
13387
|
-
if (isInvalidInitPts(initPTS, decodeTime, timeOffset) || initSegment.timescale !== initPTS.timescale && accurateTimeOffset) {
|
|
13493
|
+
if (isInvalidInitPts(initPTS, decodeTime, timeOffset, duration) || initSegment.timescale !== initPTS.timescale && accurateTimeOffset) {
|
|
13388
13494
|
initSegment.initPTS = decodeTime - timeOffset;
|
|
13495
|
+
if (initPTS && initPTS.timescale === 1) {
|
|
13496
|
+
logger.warn(`Adjusting initPTS by ${initSegment.initPTS - initPTS.baseTime}`);
|
|
13497
|
+
}
|
|
13389
13498
|
this.initPTS = initPTS = {
|
|
13390
13499
|
baseTime: initSegment.initPTS,
|
|
13391
13500
|
timescale: 1
|
|
13392
13501
|
};
|
|
13393
13502
|
}
|
|
13394
|
-
const duration = getDuration(data, initData);
|
|
13395
13503
|
const startTime = audioTrack ? decodeTime - initPTS.baseTime / initPTS.timescale : lastEndTime;
|
|
13396
13504
|
const endTime = startTime + duration;
|
|
13397
13505
|
offsetStartDTS(initData, data, initPTS.baseTime / initPTS.timescale);
|
|
@@ -13432,13 +13540,14 @@ class PassThroughRemuxer {
|
|
|
13432
13540
|
return result;
|
|
13433
13541
|
}
|
|
13434
13542
|
}
|
|
13435
|
-
function isInvalidInitPts(initPTS, startDTS, timeOffset) {
|
|
13543
|
+
function isInvalidInitPts(initPTS, startDTS, timeOffset, duration) {
|
|
13436
13544
|
if (initPTS === null) {
|
|
13437
13545
|
return true;
|
|
13438
13546
|
}
|
|
13439
|
-
// InitPTS is invalid when
|
|
13547
|
+
// InitPTS is invalid when distance from program would be more than segment duration or a minimum of one second
|
|
13548
|
+
const minDuration = Math.max(duration, 1);
|
|
13440
13549
|
const startTime = startDTS - initPTS.baseTime / initPTS.timescale;
|
|
13441
|
-
return
|
|
13550
|
+
return Math.abs(startTime - timeOffset) > minDuration;
|
|
13442
13551
|
}
|
|
13443
13552
|
function getParsedTrackCodec(track, type) {
|
|
13444
13553
|
const parsedCodec = track == null ? void 0 : track.codec;
|
|
@@ -14913,6 +15022,9 @@ class StreamController extends BaseStreamController {
|
|
|
14913
15022
|
}
|
|
14914
15023
|
this.state = State.IDLE;
|
|
14915
15024
|
break;
|
|
15025
|
+
} else if (this.hls.nextLoadLevel !== this.level) {
|
|
15026
|
+
this.state = State.IDLE;
|
|
15027
|
+
break;
|
|
14916
15028
|
}
|
|
14917
15029
|
break;
|
|
14918
15030
|
}
|
|
@@ -15281,9 +15393,7 @@ class StreamController extends BaseStreamController {
|
|
|
15281
15393
|
}
|
|
15282
15394
|
let sliding = 0;
|
|
15283
15395
|
if (newDetails.live || (_curLevel$details = curLevel.details) != null && _curLevel$details.live) {
|
|
15284
|
-
|
|
15285
|
-
newDetails.deltaUpdateFailed = true;
|
|
15286
|
-
}
|
|
15396
|
+
this.checkLiveUpdate(newDetails);
|
|
15287
15397
|
if (newDetails.deltaUpdateFailed) {
|
|
15288
15398
|
return;
|
|
15289
15399
|
}
|
|
@@ -15667,8 +15777,11 @@ class StreamController extends BaseStreamController {
|
|
|
15667
15777
|
}
|
|
15668
15778
|
|
|
15669
15779
|
// Avoid buffering if backtracking this fragment
|
|
15670
|
-
if (video &&
|
|
15671
|
-
|
|
15780
|
+
if (video && details && frag.sn !== 'initSegment') {
|
|
15781
|
+
const prevFrag = details.fragments[frag.sn - 1 - details.startSN];
|
|
15782
|
+
const isFirstFragment = frag.sn === details.startSN;
|
|
15783
|
+
const isFirstInDiscontinuity = !prevFrag || frag.cc > prevFrag.cc;
|
|
15784
|
+
if (remuxResult.independent !== false) {
|
|
15672
15785
|
const {
|
|
15673
15786
|
startPTS,
|
|
15674
15787
|
endPTS,
|
|
@@ -15683,7 +15796,7 @@ class StreamController extends BaseStreamController {
|
|
|
15683
15796
|
endDTS
|
|
15684
15797
|
};
|
|
15685
15798
|
} else {
|
|
15686
|
-
if (video.firstKeyFrame && video.independent && chunkMeta.id === 1) {
|
|
15799
|
+
if (video.firstKeyFrame && video.independent && chunkMeta.id === 1 && !isFirstInDiscontinuity) {
|
|
15687
15800
|
this.couldBacktrack = true;
|
|
15688
15801
|
}
|
|
15689
15802
|
if (video.dropped && video.independent) {
|
|
@@ -15692,9 +15805,12 @@ class StreamController extends BaseStreamController {
|
|
|
15692
15805
|
const bufferInfo = this.getMainFwdBufferInfo();
|
|
15693
15806
|
const targetBufferTime = (bufferInfo ? bufferInfo.end : this.getLoadPosition()) + this.config.maxBufferHole;
|
|
15694
15807
|
const startTime = video.firstKeyFramePTS ? video.firstKeyFramePTS : startPTS;
|
|
15695
|
-
if (targetBufferTime < startTime - this.config.maxBufferHole) {
|
|
15808
|
+
if (!isFirstFragment && targetBufferTime < startTime - this.config.maxBufferHole && !isFirstInDiscontinuity) {
|
|
15696
15809
|
this.backtrack(frag);
|
|
15697
15810
|
return;
|
|
15811
|
+
} else if (isFirstInDiscontinuity) {
|
|
15812
|
+
// Mark segment with a gap to avoid loop loading
|
|
15813
|
+
frag.gap = true;
|
|
15698
15814
|
}
|
|
15699
15815
|
// Set video stream start to fragment start so that truncated samples do not distort the timeline, and mark it partial
|
|
15700
15816
|
frag.setElementaryStreamInfo(video.type, frag.start, endPTS, frag.start, endDTS, true);
|
|
@@ -15704,11 +15820,14 @@ class StreamController extends BaseStreamController {
|
|
|
15704
15820
|
if (this.backtrackFragment) {
|
|
15705
15821
|
this.backtrackFragment = frag;
|
|
15706
15822
|
}
|
|
15707
|
-
this.bufferFragmentData(video, frag, part, chunkMeta);
|
|
15823
|
+
this.bufferFragmentData(video, frag, part, chunkMeta, isFirstFragment || isFirstInDiscontinuity);
|
|
15824
|
+
} else if (isFirstFragment || isFirstInDiscontinuity) {
|
|
15825
|
+
// Mark segment with a gap to avoid loop loading
|
|
15826
|
+
frag.gap = true;
|
|
15827
|
+
} else {
|
|
15828
|
+
this.backtrack(frag);
|
|
15829
|
+
return;
|
|
15708
15830
|
}
|
|
15709
|
-
} else if (remuxResult.independent === false) {
|
|
15710
|
-
this.backtrack(frag);
|
|
15711
|
-
return;
|
|
15712
15831
|
}
|
|
15713
15832
|
if (audio) {
|
|
15714
15833
|
const {
|
|
@@ -15965,6 +16084,7 @@ class EWMA {
|
|
|
15965
16084
|
* Based on the minimum of two exponentially-weighted moving averages with
|
|
15966
16085
|
* different half-lives.
|
|
15967
16086
|
*/
|
|
16087
|
+
|
|
15968
16088
|
class EwmaBandWidthEstimator {
|
|
15969
16089
|
constructor(slow, fast, defaultEstimate, defaultTTFB = 100) {
|
|
15970
16090
|
this.defaultEstimate_ = void 0;
|
|
@@ -16885,10 +17005,8 @@ class AudioStreamController extends BaseStreamController {
|
|
|
16885
17005
|
const track = levels[trackId];
|
|
16886
17006
|
let sliding = 0;
|
|
16887
17007
|
if (newDetails.live || (_track$details = track.details) != null && _track$details.live) {
|
|
17008
|
+
this.checkLiveUpdate(newDetails);
|
|
16888
17009
|
const mainDetails = this.mainDetails;
|
|
16889
|
-
if (!newDetails.fragments[0]) {
|
|
16890
|
-
newDetails.deltaUpdateFailed = true;
|
|
16891
|
-
}
|
|
16892
17010
|
if (newDetails.deltaUpdateFailed || !mainDetails) {
|
|
16893
17011
|
return;
|
|
16894
17012
|
}
|
|
@@ -17005,9 +17123,12 @@ class AudioStreamController extends BaseStreamController {
|
|
|
17005
17123
|
} = data;
|
|
17006
17124
|
if (frag.type !== PlaylistLevelType.AUDIO) {
|
|
17007
17125
|
if (!this.loadedmetadata && frag.type === PlaylistLevelType.MAIN) {
|
|
17008
|
-
|
|
17009
|
-
if (
|
|
17010
|
-
|
|
17126
|
+
const bufferable = this.videoBuffer || this.media;
|
|
17127
|
+
if (bufferable) {
|
|
17128
|
+
const bufferedTimeRanges = BufferHelper.getBuffered(bufferable);
|
|
17129
|
+
if (bufferedTimeRanges.length) {
|
|
17130
|
+
this.loadedmetadata = true;
|
|
17131
|
+
}
|
|
17011
17132
|
}
|
|
17012
17133
|
}
|
|
17013
17134
|
return;
|
|
@@ -17572,16 +17693,7 @@ class SubtitleStreamController extends BaseStreamController {
|
|
|
17572
17693
|
endOffset
|
|
17573
17694
|
} = data;
|
|
17574
17695
|
if (startOffset === 0 && endOffset !== Number.POSITIVE_INFINITY) {
|
|
17575
|
-
const
|
|
17576
|
-
currentTrackId,
|
|
17577
|
-
levels
|
|
17578
|
-
} = this;
|
|
17579
|
-
if (!levels.length || !levels[currentTrackId] || !levels[currentTrackId].details) {
|
|
17580
|
-
return;
|
|
17581
|
-
}
|
|
17582
|
-
const trackDetails = levels[currentTrackId].details;
|
|
17583
|
-
const targetDuration = trackDetails.targetduration;
|
|
17584
|
-
const endOffsetSubtitles = endOffset - targetDuration;
|
|
17696
|
+
const endOffsetSubtitles = endOffset - 1;
|
|
17585
17697
|
if (endOffsetSubtitles <= 0) {
|
|
17586
17698
|
return;
|
|
17587
17699
|
}
|
|
@@ -17777,21 +17889,18 @@ class SubtitleStreamController extends BaseStreamController {
|
|
|
17777
17889
|
if (!levels.length || !track || !track.details) {
|
|
17778
17890
|
return;
|
|
17779
17891
|
}
|
|
17780
|
-
|
|
17781
|
-
// Expand range of subs loaded by one target-duration in either direction to make up for misaligned playlists
|
|
17782
|
-
const trackDetails = track.details;
|
|
17783
|
-
const targetDuration = trackDetails.targetduration;
|
|
17784
17892
|
const {
|
|
17785
17893
|
config
|
|
17786
17894
|
} = this;
|
|
17787
17895
|
const currentTime = this.getLoadPosition();
|
|
17788
|
-
const bufferedInfo = BufferHelper.bufferedInfo(this.tracksBuffered[this.currentTrackId] || [], currentTime
|
|
17896
|
+
const bufferedInfo = BufferHelper.bufferedInfo(this.tracksBuffered[this.currentTrackId] || [], currentTime, config.maxBufferHole);
|
|
17789
17897
|
const {
|
|
17790
17898
|
end: targetBufferTime,
|
|
17791
17899
|
len: bufferLen
|
|
17792
17900
|
} = bufferedInfo;
|
|
17793
17901
|
const mainBufferInfo = this.getFwdBufferInfo(this.media, PlaylistLevelType.MAIN);
|
|
17794
|
-
const
|
|
17902
|
+
const trackDetails = track.details;
|
|
17903
|
+
const maxBufLen = this.getMaxBufferLength(mainBufferInfo == null ? void 0 : mainBufferInfo.len) + trackDetails.levelTargetDuration;
|
|
17795
17904
|
if (bufferLen > maxBufLen) {
|
|
17796
17905
|
return;
|
|
17797
17906
|
}
|
|
@@ -17801,10 +17910,9 @@ class SubtitleStreamController extends BaseStreamController {
|
|
|
17801
17910
|
let foundFrag = null;
|
|
17802
17911
|
const fragPrevious = this.fragPrevious;
|
|
17803
17912
|
if (targetBufferTime < end) {
|
|
17804
|
-
const
|
|
17805
|
-
|
|
17806
|
-
|
|
17807
|
-
foundFrag = findFragmentByPTS(fragPrevious, fragments, Math.max(fragments[0].start, targetBufferTime), maxFragLookUpTolerance);
|
|
17913
|
+
const tolerance = config.maxFragLookUpTolerance;
|
|
17914
|
+
const lookupTolerance = targetBufferTime > end - tolerance ? 0 : tolerance;
|
|
17915
|
+
foundFrag = findFragmentByPTS(fragPrevious, fragments, Math.max(fragments[0].start, targetBufferTime), lookupTolerance);
|
|
17808
17916
|
if (!foundFrag && fragPrevious && fragPrevious.start < fragments[0].start) {
|
|
17809
17917
|
foundFrag = fragments[0];
|
|
17810
17918
|
}
|
|
@@ -17815,6 +17923,14 @@ class SubtitleStreamController extends BaseStreamController {
|
|
|
17815
17923
|
return;
|
|
17816
17924
|
}
|
|
17817
17925
|
foundFrag = this.mapToInitFragWhenRequired(foundFrag);
|
|
17926
|
+
if (foundFrag.sn !== 'initSegment') {
|
|
17927
|
+
// Load earlier fragment in same discontinuity to make up for misaligned playlists and cues that extend beyond end of segment
|
|
17928
|
+
const curSNIdx = foundFrag.sn - trackDetails.startSN;
|
|
17929
|
+
const prevFrag = fragments[curSNIdx - 1];
|
|
17930
|
+
if (prevFrag && prevFrag.cc === foundFrag.cc && this.fragmentTracker.getState(prevFrag) === FragmentState.NOT_LOADED) {
|
|
17931
|
+
foundFrag = prevFrag;
|
|
17932
|
+
}
|
|
17933
|
+
}
|
|
17818
17934
|
if (this.fragmentTracker.getState(foundFrag) === FragmentState.NOT_LOADED) {
|
|
17819
17935
|
// only load if fragment is not loaded
|
|
17820
17936
|
this.loadFragment(foundFrag, track, targetBufferTime);
|
|
@@ -20676,6 +20792,7 @@ var VTTCue = (function () {
|
|
|
20676
20792
|
/*
|
|
20677
20793
|
* Source: https://github.com/mozilla/vtt.js/blob/master/dist/vtt.js
|
|
20678
20794
|
*/
|
|
20795
|
+
|
|
20679
20796
|
class StringDecoder {
|
|
20680
20797
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
20681
20798
|
decode(data, options) {
|
|
@@ -21157,7 +21274,7 @@ function parseWebVTT(vttByteArray, initPTS, vttCCs, cc, timeOffset, callBack, er
|
|
|
21157
21274
|
// Uint8Array.prototype.reduce is not implemented in IE11
|
|
21158
21275
|
const vttLines = utf8ArrayToStr(new Uint8Array(vttByteArray)).trim().replace(LINEBREAKS, '\n').split('\n');
|
|
21159
21276
|
const cues = [];
|
|
21160
|
-
const init90kHz = toMpegTsClockFromTimescale(initPTS.baseTime, initPTS.timescale);
|
|
21277
|
+
const init90kHz = initPTS ? toMpegTsClockFromTimescale(initPTS.baseTime, initPTS.timescale) : 0;
|
|
21161
21278
|
let cueTime = '00:00.000';
|
|
21162
21279
|
let timestampMapMPEGTS = 0;
|
|
21163
21280
|
let timestampMapLOCAL = 0;
|
|
@@ -21181,6 +21298,10 @@ function parseWebVTT(vttByteArray, initPTS, vttCCs, cc, timeOffset, callBack, er
|
|
|
21181
21298
|
}
|
|
21182
21299
|
}
|
|
21183
21300
|
if (webVttMpegTsMapOffset) {
|
|
21301
|
+
if (!initPTS) {
|
|
21302
|
+
parsingError = new Error('Missing initPTS for VTT MPEGTS');
|
|
21303
|
+
return;
|
|
21304
|
+
}
|
|
21184
21305
|
// If we have MPEGTS, offset = presentation time + discontinuity offset
|
|
21185
21306
|
cueOffset = webVttMpegTsMapOffset - vttCCs.presentationOffset;
|
|
21186
21307
|
}
|
|
@@ -21676,7 +21797,7 @@ class TimelineController {
|
|
|
21676
21797
|
this.captionsTracks = {};
|
|
21677
21798
|
this.nonNativeCaptionsTracks = {};
|
|
21678
21799
|
this.textTracks = [];
|
|
21679
|
-
this.unparsedVttFrags =
|
|
21800
|
+
this.unparsedVttFrags = [];
|
|
21680
21801
|
this.initPTS = [];
|
|
21681
21802
|
if (this.cea608Parser1 && this.cea608Parser2) {
|
|
21682
21803
|
this.cea608Parser1.reset();
|
|
@@ -21820,26 +21941,9 @@ class TimelineController {
|
|
|
21820
21941
|
frag,
|
|
21821
21942
|
payload
|
|
21822
21943
|
} = data;
|
|
21823
|
-
const {
|
|
21824
|
-
initPTS,
|
|
21825
|
-
unparsedVttFrags
|
|
21826
|
-
} = this;
|
|
21827
21944
|
if (frag.type === PlaylistLevelType.SUBTITLE) {
|
|
21828
21945
|
// If fragment is subtitle type, parse as WebVTT.
|
|
21829
21946
|
if (payload.byteLength) {
|
|
21830
|
-
// We need an initial synchronisation PTS. Store fragments as long as none has arrived.
|
|
21831
|
-
if (!initPTS[frag.cc]) {
|
|
21832
|
-
unparsedVttFrags.push(data);
|
|
21833
|
-
if (initPTS.length) {
|
|
21834
|
-
// finish unsuccessfully, otherwise the subtitle-stream-controller could be blocked from loading new frags.
|
|
21835
|
-
this.hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {
|
|
21836
|
-
success: false,
|
|
21837
|
-
frag,
|
|
21838
|
-
error: new Error('Missing initial subtitle PTS')
|
|
21839
|
-
});
|
|
21840
|
-
}
|
|
21841
|
-
return;
|
|
21842
|
-
}
|
|
21843
21947
|
const decryptData = frag.decryptdata;
|
|
21844
21948
|
// fragment after decryption has a stats object
|
|
21845
21949
|
const decrypted = ('stats' in data);
|
|
@@ -21858,7 +21962,7 @@ class TimelineController {
|
|
|
21858
21962
|
if (trackPlaylistMedia && trackPlaylistMedia.textCodec === IMSC1_CODEC) {
|
|
21859
21963
|
this._parseIMSC1(frag, payload);
|
|
21860
21964
|
} else {
|
|
21861
|
-
this._parseVTTs(
|
|
21965
|
+
this._parseVTTs(data);
|
|
21862
21966
|
}
|
|
21863
21967
|
}
|
|
21864
21968
|
} else {
|
|
@@ -21888,21 +21992,43 @@ class TimelineController {
|
|
|
21888
21992
|
});
|
|
21889
21993
|
});
|
|
21890
21994
|
}
|
|
21891
|
-
_parseVTTs(
|
|
21995
|
+
_parseVTTs(data) {
|
|
21892
21996
|
var _frag$initSegment;
|
|
21997
|
+
const {
|
|
21998
|
+
frag,
|
|
21999
|
+
payload
|
|
22000
|
+
} = data;
|
|
22001
|
+
// We need an initial synchronisation PTS. Store fragments as long as none has arrived
|
|
22002
|
+
const {
|
|
22003
|
+
initPTS,
|
|
22004
|
+
unparsedVttFrags
|
|
22005
|
+
} = this;
|
|
22006
|
+
const maxAvCC = initPTS.length - 1;
|
|
22007
|
+
if (!initPTS[frag.cc] && maxAvCC === -1) {
|
|
22008
|
+
unparsedVttFrags.push(data);
|
|
22009
|
+
return;
|
|
22010
|
+
}
|
|
21893
22011
|
const hls = this.hls;
|
|
21894
22012
|
// Parse the WebVTT file contents.
|
|
21895
22013
|
const payloadWebVTT = (_frag$initSegment = frag.initSegment) != null && _frag$initSegment.data ? appendUint8Array(frag.initSegment.data, new Uint8Array(payload)) : payload;
|
|
21896
|
-
parseWebVTT(payloadWebVTT, this.initPTS[frag.cc], vttCCs, frag.cc, frag.start, cues => {
|
|
22014
|
+
parseWebVTT(payloadWebVTT, this.initPTS[frag.cc], this.vttCCs, frag.cc, frag.start, cues => {
|
|
21897
22015
|
this._appendCues(cues, frag.level);
|
|
21898
22016
|
hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {
|
|
21899
22017
|
success: true,
|
|
21900
22018
|
frag: frag
|
|
21901
22019
|
});
|
|
21902
22020
|
}, error => {
|
|
21903
|
-
|
|
22021
|
+
const missingInitPTS = error.message === 'Missing initPTS for VTT MPEGTS';
|
|
22022
|
+
if (missingInitPTS) {
|
|
22023
|
+
unparsedVttFrags.push(data);
|
|
22024
|
+
} else {
|
|
22025
|
+
this._fallbackToIMSC1(frag, payload);
|
|
22026
|
+
}
|
|
21904
22027
|
// Something went wrong while parsing. Trigger event with success false.
|
|
21905
22028
|
logger.log(`Failed to parse VTT cue: ${error}`);
|
|
22029
|
+
if (missingInitPTS && maxAvCC > frag.cc) {
|
|
22030
|
+
return;
|
|
22031
|
+
}
|
|
21906
22032
|
hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {
|
|
21907
22033
|
success: false,
|
|
21908
22034
|
frag: frag,
|
|
@@ -21952,10 +22078,6 @@ class TimelineController {
|
|
|
21952
22078
|
frag
|
|
21953
22079
|
} = data;
|
|
21954
22080
|
if (frag.type === PlaylistLevelType.SUBTITLE) {
|
|
21955
|
-
if (!this.initPTS[frag.cc]) {
|
|
21956
|
-
this.unparsedVttFrags.push(data);
|
|
21957
|
-
return;
|
|
21958
|
-
}
|
|
21959
22081
|
this.onFragLoaded(Events.FRAG_LOADED, data);
|
|
21960
22082
|
}
|
|
21961
22083
|
}
|
|
@@ -22064,6 +22186,7 @@ function newVTTCCs() {
|
|
|
22064
22186
|
/*
|
|
22065
22187
|
* cap stream level to media size dimension controller
|
|
22066
22188
|
*/
|
|
22189
|
+
|
|
22067
22190
|
class CapLevelController {
|
|
22068
22191
|
constructor(hls) {
|
|
22069
22192
|
this.hls = void 0;
|
|
@@ -24087,6 +24210,7 @@ class XhrLoader {
|
|
|
24087
24210
|
const stats = this.stats;
|
|
24088
24211
|
stats.loading.first = 0;
|
|
24089
24212
|
stats.loaded = 0;
|
|
24213
|
+
stats.aborted = false;
|
|
24090
24214
|
const xhrSetup = this.xhrSetup;
|
|
24091
24215
|
if (xhrSetup) {
|
|
24092
24216
|
Promise.resolve().then(() => {
|
|
@@ -24958,7 +25082,7 @@ class Hls {
|
|
|
24958
25082
|
* Get the video-dev/hls.js package version.
|
|
24959
25083
|
*/
|
|
24960
25084
|
static get version() {
|
|
24961
|
-
return "1.4.
|
|
25085
|
+
return "1.4.13";
|
|
24962
25086
|
}
|
|
24963
25087
|
|
|
24964
25088
|
/**
|