@shopify/shop-minis-react 0.0.20 → 0.0.22
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/_virtual/___vite-browser-external.js +7 -0
- package/dist/_virtual/___vite-browser-external.js.map +1 -0
- package/dist/_virtual/__vite-browser-external.js +5 -0
- package/dist/_virtual/__vite-browser-external.js.map +1 -0
- package/dist/_virtual/_commonjsHelpers.js +24 -4
- package/dist/_virtual/_commonjsHelpers.js.map +1 -1
- package/dist/_virtual/browser-index.js +8 -0
- package/dist/_virtual/browser-index.js.map +1 -0
- package/dist/_virtual/browser-index2.js +5 -0
- package/dist/_virtual/browser-index2.js.map +1 -0
- package/dist/_virtual/clock.js +6 -0
- package/dist/_virtual/clock.js.map +1 -0
- package/dist/_virtual/conventions.js +5 -0
- package/dist/_virtual/conventions.js.map +1 -0
- package/dist/_virtual/document.js +8 -0
- package/dist/_virtual/document.js.map +1 -0
- package/dist/_virtual/dom-parser.js +5 -0
- package/dist/_virtual/dom-parser.js.map +1 -0
- package/dist/_virtual/dom.js +5 -0
- package/dist/_virtual/dom.js.map +1 -0
- package/dist/_virtual/entities.js +5 -0
- package/dist/_virtual/entities.js.map +1 -0
- package/dist/_virtual/extends.js +5 -0
- package/dist/_virtual/extends.js.map +1 -0
- package/dist/_virtual/index10.js +5 -0
- package/dist/_virtual/index10.js.map +1 -0
- package/dist/_virtual/index11.js +5 -0
- package/dist/_virtual/index11.js.map +1 -0
- package/dist/_virtual/index2.js +5 -2
- package/dist/_virtual/index2.js.map +1 -1
- package/dist/_virtual/index3.js +5 -3
- package/dist/_virtual/index3.js.map +1 -1
- package/dist/_virtual/index5.js +6 -0
- package/dist/_virtual/index5.js.map +1 -0
- package/dist/_virtual/index6.js +6 -0
- package/dist/_virtual/index6.js.map +1 -0
- package/dist/_virtual/index7.js +5 -0
- package/dist/_virtual/index7.js.map +1 -0
- package/dist/_virtual/index8.js +5 -0
- package/dist/_virtual/index8.js.map +1 -0
- package/dist/_virtual/index9.js +5 -0
- package/dist/_virtual/index9.js.map +1 -0
- package/dist/_virtual/parse-sidx.js +8 -0
- package/dist/_virtual/parse-sidx.js.map +1 -0
- package/dist/_virtual/sax.js +5 -0
- package/dist/_virtual/sax.js.map +1 -0
- package/dist/_virtual/window.js +8 -0
- package/dist/_virtual/window.js.map +1 -0
- package/dist/components/atoms/video-player.js +121 -0
- package/dist/components/atoms/video-player.js.map +1 -0
- package/dist/components/commerce/merchant-card.js +236 -106
- package/dist/components/commerce/merchant-card.js.map +1 -1
- package/dist/hooks/storage/useImageUpload.js.map +1 -1
- package/dist/hooks/util/useErrorScreen.js.map +1 -1
- package/dist/hooks/util/useErrorToast.js.map +1 -1
- package/dist/index.js +205 -195
- package/dist/index.js.map +1 -1
- package/dist/mocks.js +114 -87
- package/dist/mocks.js.map +1 -1
- package/dist/shop-minis-react/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/extends.js +20 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/extends.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@radix-ui_react-use-is-hydrated@0.1.0_@types_react@19.1.6_react@19.1.0/node_modules/@radix-ui/react-use-is-hydrated/dist/index.js +1 -1
- package/dist/shop-minis-react/node_modules/.pnpm/@videojs_vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/byte-helpers.js +79 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@videojs_vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/byte-helpers.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@videojs_vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/codecs.js +102 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@videojs_vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/codecs.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@videojs_vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/containers.js +149 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@videojs_vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/containers.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@videojs_vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/decode-b64-to-uint8-array.js +13 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@videojs_vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/decode-b64-to-uint8-array.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@videojs_vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/ebml-helpers.js +77 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@videojs_vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/ebml-helpers.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@videojs_vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/id3-helpers.js +15 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@videojs_vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/id3-helpers.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@videojs_vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/media-groups.js +13 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@videojs_vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/media-groups.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@videojs_vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/media-types.js +7 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@videojs_vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/media-types.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@videojs_vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/mp4-helpers.js +31 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@videojs_vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/mp4-helpers.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@videojs_vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/nal-helpers.js +39 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@videojs_vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/nal-helpers.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@videojs_vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/resolve-url.js +14 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@videojs_vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/resolve-url.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@videojs_vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/stream.js +33 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@videojs_vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/stream.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@videojs_xhr@2.7.0/node_modules/@videojs/xhr/lib/http-handler.js +42 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@videojs_xhr@2.7.0/node_modules/@videojs/xhr/lib/http-handler.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@videojs_xhr@2.7.0/node_modules/@videojs/xhr/lib/index.js +169 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@videojs_xhr@2.7.0/node_modules/@videojs/xhr/lib/index.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@videojs_xhr@2.7.0/node_modules/@videojs/xhr/lib/interceptors.js +75 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@videojs_xhr@2.7.0/node_modules/@videojs/xhr/lib/interceptors.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@videojs_xhr@2.7.0/node_modules/@videojs/xhr/lib/retry.js +70 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@videojs_xhr@2.7.0/node_modules/@videojs/xhr/lib/retry.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@xmldom_xmldom@0.8.10/node_modules/@xmldom/xmldom/lib/conventions.js +124 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@xmldom_xmldom@0.8.10/node_modules/@xmldom/xmldom/lib/conventions.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@xmldom_xmldom@0.8.10/node_modules/@xmldom/xmldom/lib/dom-parser.js +151 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@xmldom_xmldom@0.8.10/node_modules/@xmldom/xmldom/lib/dom-parser.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@xmldom_xmldom@0.8.10/node_modules/@xmldom/xmldom/lib/dom.js +993 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@xmldom_xmldom@0.8.10/node_modules/@xmldom/xmldom/lib/dom.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@xmldom_xmldom@0.8.10/node_modules/@xmldom/xmldom/lib/entities.js +2146 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@xmldom_xmldom@0.8.10/node_modules/@xmldom/xmldom/lib/entities.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@xmldom_xmldom@0.8.10/node_modules/@xmldom/xmldom/lib/index.js +14 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@xmldom_xmldom@0.8.10/node_modules/@xmldom/xmldom/lib/index.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@xmldom_xmldom@0.8.10/node_modules/@xmldom/xmldom/lib/sax.js +346 -0
- package/dist/shop-minis-react/node_modules/.pnpm/@xmldom_xmldom@0.8.10/node_modules/@xmldom/xmldom/lib/sax.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/color-convert@2.0.1/node_modules/color-convert/conversions.js +308 -0
- package/dist/shop-minis-react/node_modules/.pnpm/color-convert@2.0.1/node_modules/color-convert/conversions.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/color-convert@2.0.1/node_modules/color-convert/index.js +41 -0
- package/dist/shop-minis-react/node_modules/.pnpm/color-convert@2.0.1/node_modules/color-convert/index.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/color-convert@2.0.1/node_modules/color-convert/route.js +53 -0
- package/dist/shop-minis-react/node_modules/.pnpm/color-convert@2.0.1/node_modules/color-convert/route.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/color-name@1.1.4/node_modules/color-name/index.js +157 -0
- package/dist/shop-minis-react/node_modules/.pnpm/color-name@1.1.4/node_modules/color-name/index.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/color-string@1.9.1/node_modules/color-string/index.js +103 -0
- package/dist/shop-minis-react/node_modules/.pnpm/color-string@1.9.1/node_modules/color-string/index.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/color@4.2.3/node_modules/color/index.js +269 -0
- package/dist/shop-minis-react/node_modules/.pnpm/color@4.2.3/node_modules/color/index.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/global@4.4.0/node_modules/global/document.js +13 -0
- package/dist/shop-minis-react/node_modules/.pnpm/global@4.4.0/node_modules/global/document.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/global@4.4.0/node_modules/global/window.js +12 -0
- package/dist/shop-minis-react/node_modules/.pnpm/global@4.4.0/node_modules/global/window.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/is-arrayish@0.3.2/node_modules/is-arrayish/index.js +10 -0
- package/dist/shop-minis-react/node_modules/.pnpm/is-arrayish@0.3.2/node_modules/is-arrayish/index.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/is-function@1.0.2/node_modules/is-function/index.js +18 -0
- package/dist/shop-minis-react/node_modules/.pnpm/is-function@1.0.2/node_modules/is-function/index.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/m3u8-parser@7.2.0/node_modules/m3u8-parser/dist/m3u8-parser.es.js +855 -0
- package/dist/shop-minis-react/node_modules/.pnpm/m3u8-parser@7.2.0/node_modules/m3u8-parser/dist/m3u8-parser.es.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/mpd-parser@1.3.1/node_modules/mpd-parser/dist/mpd-parser.es.js +1102 -0
- package/dist/shop-minis-react/node_modules/.pnpm/mpd-parser@1.3.1/node_modules/mpd-parser/dist/mpd-parser.es.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/mux.js@7.1.0/node_modules/mux.js/lib/tools/parse-sidx.js +32 -0
- package/dist/shop-minis-react/node_modules/.pnpm/mux.js@7.1.0/node_modules/mux.js/lib/tools/parse-sidx.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/mux.js@7.1.0/node_modules/mux.js/lib/utils/clock.js +34 -0
- package/dist/shop-minis-react/node_modules/.pnpm/mux.js@7.1.0/node_modules/mux.js/lib/utils/clock.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/mux.js@7.1.0/node_modules/mux.js/lib/utils/numbers.js +17 -0
- package/dist/shop-minis-react/node_modules/.pnpm/mux.js@7.1.0/node_modules/mux.js/lib/utils/numbers.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/querystringify@2.2.0/node_modules/querystringify/index.js +1 -1
- package/dist/shop-minis-react/node_modules/.pnpm/simple-swizzle@0.2.2/node_modules/simple-swizzle/index.js +23 -0
- package/dist/shop-minis-react/node_modules/.pnpm/simple-swizzle@0.2.2/node_modules/simple-swizzle/index.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/use-sync-external-store@1.5.0_react@19.1.0/node_modules/use-sync-external-store/shim/index.js +1 -1
- package/dist/shop-minis-react/node_modules/.pnpm/video.js@8.23.3/node_modules/video.js/dist/video.es.js +27824 -0
- package/dist/shop-minis-react/node_modules/.pnpm/video.js@8.23.3/node_modules/video.js/dist/video.es.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/videojs-vtt.js@0.15.5/node_modules/videojs-vtt.js/lib/browser-index.js +26 -0
- package/dist/shop-minis-react/node_modules/.pnpm/videojs-vtt.js@0.15.5/node_modules/videojs-vtt.js/lib/browser-index.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/videojs-vtt.js@0.15.5/node_modules/videojs-vtt.js/lib/vtt.js +802 -0
- package/dist/shop-minis-react/node_modules/.pnpm/videojs-vtt.js@0.15.5/node_modules/videojs-vtt.js/lib/vtt.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/videojs-vtt.js@0.15.5/node_modules/videojs-vtt.js/lib/vttcue.js +188 -0
- package/dist/shop-minis-react/node_modules/.pnpm/videojs-vtt.js@0.15.5/node_modules/videojs-vtt.js/lib/vttcue.js.map +1 -0
- package/dist/shop-minis-react/node_modules/.pnpm/videojs-vtt.js@0.15.5/node_modules/videojs-vtt.js/lib/vttregion.js +104 -0
- package/dist/shop-minis-react/node_modules/.pnpm/videojs-vtt.js@0.15.5/node_modules/videojs-vtt.js/lib/vttregion.js.map +1 -0
- package/dist/shop-minis-react.css +1 -1
- package/dist/utils/colors.js +6 -0
- package/dist/utils/colors.js.map +1 -0
- package/dist/utils/merchant-card.js +44 -0
- package/dist/utils/merchant-card.js.map +1 -0
- package/package.json +6 -2
- package/src/components/atoms/video-player.tsx +213 -0
- package/src/components/commerce/merchant-card.tsx +219 -49
- package/src/components/index.ts +2 -0
- package/src/hooks/storage/useImageUpload.ts +3 -2
- package/src/hooks/util/useErrorScreen.ts +2 -1
- package/src/hooks/util/useErrorToast.ts +2 -1
- package/src/mocks.ts +148 -16
- package/src/stories/MerchantCard.stories.tsx +63 -9
- package/src/utils/colors.ts +5 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/merchant-card.ts +99 -0
- package/src/hooks/navigation/useCloseMini.doc.ts +0 -32
- package/src/hooks/navigation/useCloseMini.example.tsx +0 -7
- package/src/hooks/navigation/useDeeplink.doc.ts +0 -32
- package/src/hooks/navigation/useDeeplink.example.tsx +0 -7
- package/src/hooks/navigation/useShopNavigation.doc.ts +0 -32
- package/src/hooks/navigation/useShopNavigation.example.tsx +0 -29
- package/src/hooks/product/useCuratedProducts.doc.ts +0 -32
- package/src/hooks/product/useCuratedProducts.example.tsx +0 -10
- package/src/hooks/product/useProductList.doc.ts +0 -32
- package/src/hooks/product/useProductList.example.tsx +0 -9
- package/src/hooks/product/useProductListActions.doc.ts +0 -32
- package/src/hooks/product/useProductListActions.example.tsx +0 -57
- package/src/hooks/product/useProductLists.doc.ts +0 -32
- package/src/hooks/product/useProductLists.example.tsx +0 -9
- package/src/hooks/product/useProductSearch.doc.ts +0 -32
- package/src/hooks/product/useProductSearch.example.tsx +0 -13
- package/src/hooks/product/useRecommendedProducts.doc.ts +0 -32
- package/src/hooks/product/useRecommendedProducts.example.tsx +0 -7
- package/src/hooks/shop/useRecommendedShops.doc.ts +0 -32
- package/src/hooks/shop/useRecommendedShops.example.tsx +0 -7
- package/src/hooks/shop/useShop.doc.ts +0 -31
- package/src/hooks/shop/useShop.example.tsx +0 -7
- package/src/hooks/shop/useShopCartActions.doc.ts +0 -32
- package/src/hooks/shop/useShopCartActions.example.tsx +0 -28
- package/src/hooks/storage/useAsyncStorage.doc.ts +0 -32
- package/src/hooks/storage/useAsyncStorage.example.tsx +0 -30
- package/src/hooks/storage/useImageUpload.doc.ts +0 -32
- package/src/hooks/storage/useImageUpload.example.tsx +0 -20
- package/src/hooks/storage/useSecureStorage.doc.ts +0 -32
- package/src/hooks/storage/useSecureStorage.example.tsx +0 -23
- package/src/hooks/user/useBuyerAttributes.doc.ts +0 -32
- package/src/hooks/user/useBuyerAttributes.example.tsx +0 -14
- package/src/hooks/user/useCurrentUser.doc.ts +0 -31
- package/src/hooks/user/useCurrentUser.example.tsx +0 -7
- package/src/hooks/user/useFollowedShopsActions.doc.ts +0 -32
- package/src/hooks/user/useFollowedShopsActions.example.tsx +0 -18
- package/src/hooks/user/useOrders.doc.ts +0 -32
- package/src/hooks/user/useOrders.example.tsx +0 -7
- package/src/hooks/user/useRecentProducts.doc.ts +0 -32
- package/src/hooks/user/useRecentProducts.example.tsx +0 -13
- package/src/hooks/user/useSavedProducts.doc.ts +0 -32
- package/src/hooks/user/useSavedProducts.example.tsx +0 -13
- package/src/hooks/user/useSavedProductsActions.doc.ts +0 -32
- package/src/hooks/user/useSavedProductsActions.example.tsx +0 -30
- package/src/hooks/util/useErrorScreen.doc.ts +0 -32
- package/src/hooks/util/useErrorScreen.example.tsx +0 -16
- package/src/hooks/util/useErrorToast.doc.ts +0 -32
- package/src/hooks/util/useErrorToast.example.tsx +0 -15
- package/src/hooks/util/useImagePicker.example.tsx +0 -85
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codecs.js","sources":["../../../../../../../../../node_modules/.pnpm/@videojs+vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/codecs.js"],"sourcesContent":["import window from 'global/window';\nvar regexs = {\n // to determine mime types\n mp4: /^(av0?1|avc0?[1234]|vp0?9|flac|opus|mp3|mp4a|mp4v|stpp.ttml.im1t)/,\n webm: /^(vp0?[89]|av0?1|opus|vorbis)/,\n ogg: /^(vp0?[89]|theora|flac|opus|vorbis)/,\n // to determine if a codec is audio or video\n video: /^(av0?1|avc0?[1234]|vp0?[89]|hvc1|hev1|theora|mp4v)/,\n audio: /^(mp4a|flac|vorbis|opus|ac-[34]|ec-3|alac|mp3|speex|aac)/,\n text: /^(stpp.ttml.im1t)/,\n // mux.js support regex\n muxerVideo: /^(avc0?1)/,\n muxerAudio: /^(mp4a)/,\n // match nothing as muxer does not support text right now.\n // there cannot never be a character before the start of a string\n // so this matches nothing.\n muxerText: /a^/\n};\nvar mediaTypes = ['video', 'audio', 'text'];\nvar upperMediaTypes = ['Video', 'Audio', 'Text'];\n/**\n * Replace the old apple-style `avc1.<dd>.<dd>` codec string with the standard\n * `avc1.<hhhhhh>`\n *\n * @param {string} codec\n * Codec string to translate\n * @return {string}\n * The translated codec string\n */\n\nexport var translateLegacyCodec = function translateLegacyCodec(codec) {\n if (!codec) {\n return codec;\n }\n\n return codec.replace(/avc1\\.(\\d+)\\.(\\d+)/i, function (orig, profile, avcLevel) {\n var profileHex = ('00' + Number(profile).toString(16)).slice(-2);\n var avcLevelHex = ('00' + Number(avcLevel).toString(16)).slice(-2);\n return 'avc1.' + profileHex + '00' + avcLevelHex;\n });\n};\n/**\n * Replace the old apple-style `avc1.<dd>.<dd>` codec strings with the standard\n * `avc1.<hhhhhh>`\n *\n * @param {string[]} codecs\n * An array of codec strings to translate\n * @return {string[]}\n * The translated array of codec strings\n */\n\nexport var translateLegacyCodecs = function translateLegacyCodecs(codecs) {\n return codecs.map(translateLegacyCodec);\n};\n/**\n * Replace codecs in the codec string with the old apple-style `avc1.<dd>.<dd>` to the\n * standard `avc1.<hhhhhh>`.\n *\n * @param {string} codecString\n * The codec string\n * @return {string}\n * The codec string with old apple-style codecs replaced\n *\n * @private\n */\n\nexport var mapLegacyAvcCodecs = function mapLegacyAvcCodecs(codecString) {\n return codecString.replace(/avc1\\.(\\d+)\\.(\\d+)/i, function (match) {\n return translateLegacyCodecs([match])[0];\n });\n};\n/**\n * @typedef {Object} ParsedCodecInfo\n * @property {number} codecCount\n * Number of codecs parsed\n * @property {string} [videoCodec]\n * Parsed video codec (if found)\n * @property {string} [videoObjectTypeIndicator]\n * Video object type indicator (if found)\n * @property {string|null} audioProfile\n * Audio profile\n */\n\n/**\n * Parses a codec string to retrieve the number of codecs specified, the video codec and\n * object type indicator, and the audio profile.\n *\n * @param {string} [codecString]\n * The codec string to parse\n * @return {ParsedCodecInfo}\n * Parsed codec info\n */\n\nexport var parseCodecs = function parseCodecs(codecString) {\n if (codecString === void 0) {\n codecString = '';\n }\n\n var codecs = codecString.split(',');\n var result = [];\n codecs.forEach(function (codec) {\n codec = codec.trim();\n var codecType;\n mediaTypes.forEach(function (name) {\n var match = regexs[name].exec(codec.toLowerCase());\n\n if (!match || match.length <= 1) {\n return;\n }\n\n codecType = name; // maintain codec case\n\n var type = codec.substring(0, match[1].length);\n var details = codec.replace(type, '');\n result.push({\n type: type,\n details: details,\n mediaType: name\n });\n });\n\n if (!codecType) {\n result.push({\n type: codec,\n details: '',\n mediaType: 'unknown'\n });\n }\n });\n return result;\n};\n/**\n * Returns a ParsedCodecInfo object for the default alternate audio playlist if there is\n * a default alternate audio playlist for the provided audio group.\n *\n * @param {Object} master\n * The master playlist\n * @param {string} audioGroupId\n * ID of the audio group for which to find the default codec info\n * @return {ParsedCodecInfo}\n * Parsed codec info\n */\n\nexport var codecsFromDefault = function codecsFromDefault(master, audioGroupId) {\n if (!master.mediaGroups.AUDIO || !audioGroupId) {\n return null;\n }\n\n var audioGroup = master.mediaGroups.AUDIO[audioGroupId];\n\n if (!audioGroup) {\n return null;\n }\n\n for (var name in audioGroup) {\n var audioType = audioGroup[name];\n\n if (audioType.default && audioType.playlists) {\n // codec should be the same for all playlists within the audio type\n return parseCodecs(audioType.playlists[0].attributes.CODECS);\n }\n }\n\n return null;\n};\nexport var isVideoCodec = function isVideoCodec(codec) {\n if (codec === void 0) {\n codec = '';\n }\n\n return regexs.video.test(codec.trim().toLowerCase());\n};\nexport var isAudioCodec = function isAudioCodec(codec) {\n if (codec === void 0) {\n codec = '';\n }\n\n return regexs.audio.test(codec.trim().toLowerCase());\n};\nexport var isTextCodec = function isTextCodec(codec) {\n if (codec === void 0) {\n codec = '';\n }\n\n return regexs.text.test(codec.trim().toLowerCase());\n};\nexport var getMimeForCodec = function getMimeForCodec(codecString) {\n if (!codecString || typeof codecString !== 'string') {\n return;\n }\n\n var codecs = codecString.toLowerCase().split(',').map(function (c) {\n return translateLegacyCodec(c.trim());\n }); // default to video type\n\n var type = 'video'; // only change to audio type if the only codec we have is\n // audio\n\n if (codecs.length === 1 && isAudioCodec(codecs[0])) {\n type = 'audio';\n } else if (codecs.length === 1 && isTextCodec(codecs[0])) {\n // text uses application/<container> for now\n type = 'application';\n } // default the container to mp4\n\n\n var container = 'mp4'; // every codec must be able to go into the container\n // for that container to be the correct one\n\n if (codecs.every(function (c) {\n return regexs.mp4.test(c);\n })) {\n container = 'mp4';\n } else if (codecs.every(function (c) {\n return regexs.webm.test(c);\n })) {\n container = 'webm';\n } else if (codecs.every(function (c) {\n return regexs.ogg.test(c);\n })) {\n container = 'ogg';\n }\n\n return type + \"/\" + container + \";codecs=\\\"\" + codecString + \"\\\"\";\n};\n/**\n * Tests whether the codec is supported by MediaSource. Optionally also tests ManagedMediaSource.\n *\n * @param {string} codecString\n * Codec to test\n * @param {boolean} [withMMS]\n * Whether to check if ManagedMediaSource supports it\n * @return {boolean}\n * Codec is supported\n */\n\nexport var browserSupportsCodec = function browserSupportsCodec(codecString, withMMS) {\n if (codecString === void 0) {\n codecString = '';\n }\n\n if (withMMS === void 0) {\n withMMS = false;\n }\n\n return window.MediaSource && window.MediaSource.isTypeSupported && window.MediaSource.isTypeSupported(getMimeForCodec(codecString)) || withMMS && window.ManagedMediaSource && window.ManagedMediaSource.isTypeSupported && window.ManagedMediaSource.isTypeSupported(getMimeForCodec(codecString)) || false;\n};\nexport var muxerSupportsCodec = function muxerSupportsCodec(codecString) {\n if (codecString === void 0) {\n codecString = '';\n }\n\n return codecString.toLowerCase().split(',').every(function (codec) {\n codec = codec.trim(); // any match is supported.\n\n for (var i = 0; i < upperMediaTypes.length; i++) {\n var type = upperMediaTypes[i];\n\n if (regexs[\"muxer\" + type].test(codec)) {\n return true;\n }\n }\n\n return false;\n });\n};\nexport var DEFAULT_AUDIO_CODEC = 'mp4a.40.2';\nexport var DEFAULT_VIDEO_CODEC = 'avc1.4d400d';"],"names":["regexs","mediaTypes","upperMediaTypes","translateLegacyCodec","codec","orig","profile","avcLevel","profileHex","avcLevelHex","parseCodecs","codecString","codecs","result","codecType","name","match","type","details","codecsFromDefault","master","audioGroupId","audioGroup","audioType","isAudioCodec","isTextCodec","getMimeForCodec","c","container","browserSupportsCodec","withMMS","window","muxerSupportsCodec","i","DEFAULT_AUDIO_CODEC","DEFAULT_VIDEO_CODEC"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { toUint8 as t, bytesMatch as o } from "./byte-helpers.js";
|
|
2
|
+
import { findBox as v } from "./mp4-helpers.js";
|
|
3
|
+
import { findEbml as c, EBML_TAGS as i } from "./ebml-helpers.js";
|
|
4
|
+
import { getId3Offset as a } from "./id3-helpers.js";
|
|
5
|
+
import { findH265Nal as l, findH264Nal as p } from "./nal-helpers.js";
|
|
6
|
+
var x = {
|
|
7
|
+
// "webm" string literal in hex
|
|
8
|
+
webm: t([119, 101, 98, 109]),
|
|
9
|
+
// "matroska" string literal in hex
|
|
10
|
+
matroska: t([109, 97, 116, 114, 111, 115, 107, 97]),
|
|
11
|
+
// "fLaC" string literal in hex
|
|
12
|
+
flac: t([102, 76, 97, 67]),
|
|
13
|
+
// "OggS" string literal in hex
|
|
14
|
+
ogg: t([79, 103, 103, 83]),
|
|
15
|
+
// ac-3 sync byte, also works for ec-3 as that is simply a codec
|
|
16
|
+
// of ac-3
|
|
17
|
+
ac3: t([11, 119]),
|
|
18
|
+
// "RIFF" string literal in hex used for wav and avi
|
|
19
|
+
riff: t([82, 73, 70, 70]),
|
|
20
|
+
// "AVI" string literal in hex
|
|
21
|
+
avi: t([65, 86, 73]),
|
|
22
|
+
// "WAVE" string literal in hex
|
|
23
|
+
wav: t([87, 65, 86, 69]),
|
|
24
|
+
// "ftyp3g" string literal in hex
|
|
25
|
+
"3gp": t([102, 116, 121, 112, 51, 103]),
|
|
26
|
+
// "ftyp" string literal in hex
|
|
27
|
+
mp4: t([102, 116, 121, 112]),
|
|
28
|
+
// "styp" string literal in hex
|
|
29
|
+
fmp4: t([115, 116, 121, 112]),
|
|
30
|
+
// "ftypqt" string literal in hex
|
|
31
|
+
mov: t([102, 116, 121, 112, 113, 116]),
|
|
32
|
+
// moov string literal in hex
|
|
33
|
+
moov: t([109, 111, 111, 118]),
|
|
34
|
+
// moof string literal in hex
|
|
35
|
+
moof: t([109, 111, 111, 102])
|
|
36
|
+
}, e = {
|
|
37
|
+
aac: function(f) {
|
|
38
|
+
var n = a(f);
|
|
39
|
+
return o(f, [255, 16], {
|
|
40
|
+
offset: n,
|
|
41
|
+
mask: [255, 22]
|
|
42
|
+
});
|
|
43
|
+
},
|
|
44
|
+
mp3: function(f) {
|
|
45
|
+
var n = a(f);
|
|
46
|
+
return o(f, [255, 2], {
|
|
47
|
+
offset: n,
|
|
48
|
+
mask: [255, 6]
|
|
49
|
+
});
|
|
50
|
+
},
|
|
51
|
+
webm: function(f) {
|
|
52
|
+
var n = c(f, [i.EBML, i.DocType])[0];
|
|
53
|
+
return o(n, x.webm);
|
|
54
|
+
},
|
|
55
|
+
mkv: function(f) {
|
|
56
|
+
var n = c(f, [i.EBML, i.DocType])[0];
|
|
57
|
+
return o(n, x.matroska);
|
|
58
|
+
},
|
|
59
|
+
mp4: function(f) {
|
|
60
|
+
if (e["3gp"](f) || e.mov(f))
|
|
61
|
+
return !1;
|
|
62
|
+
if (o(f, x.mp4, {
|
|
63
|
+
offset: 4
|
|
64
|
+
}) || o(f, x.fmp4, {
|
|
65
|
+
offset: 4
|
|
66
|
+
}) || o(f, x.moof, {
|
|
67
|
+
offset: 4
|
|
68
|
+
}) || o(f, x.moov, {
|
|
69
|
+
offset: 4
|
|
70
|
+
}))
|
|
71
|
+
return !0;
|
|
72
|
+
},
|
|
73
|
+
mov: function(f) {
|
|
74
|
+
return o(f, x.mov, {
|
|
75
|
+
offset: 4
|
|
76
|
+
});
|
|
77
|
+
},
|
|
78
|
+
"3gp": function(f) {
|
|
79
|
+
return o(f, x["3gp"], {
|
|
80
|
+
offset: 4
|
|
81
|
+
});
|
|
82
|
+
},
|
|
83
|
+
ac3: function(f) {
|
|
84
|
+
var n = a(f);
|
|
85
|
+
return o(f, x.ac3, {
|
|
86
|
+
offset: n
|
|
87
|
+
});
|
|
88
|
+
},
|
|
89
|
+
ts: function(f) {
|
|
90
|
+
if (f.length < 189 && f.length >= 1)
|
|
91
|
+
return f[0] === 71;
|
|
92
|
+
for (var n = 0; n + 188 < f.length && n < 188; ) {
|
|
93
|
+
if (f[n] === 71 && f[n + 188] === 71)
|
|
94
|
+
return !0;
|
|
95
|
+
n += 1;
|
|
96
|
+
}
|
|
97
|
+
return !1;
|
|
98
|
+
},
|
|
99
|
+
flac: function(f) {
|
|
100
|
+
var n = a(f);
|
|
101
|
+
return o(f, x.flac, {
|
|
102
|
+
offset: n
|
|
103
|
+
});
|
|
104
|
+
},
|
|
105
|
+
ogg: function(f) {
|
|
106
|
+
return o(f, x.ogg);
|
|
107
|
+
},
|
|
108
|
+
avi: function(f) {
|
|
109
|
+
return o(f, x.riff) && o(f, x.avi, {
|
|
110
|
+
offset: 8
|
|
111
|
+
});
|
|
112
|
+
},
|
|
113
|
+
wav: function(f) {
|
|
114
|
+
return o(f, x.riff) && o(f, x.wav, {
|
|
115
|
+
offset: 8
|
|
116
|
+
});
|
|
117
|
+
},
|
|
118
|
+
h264: function(f) {
|
|
119
|
+
return p(f, 7, 3).length;
|
|
120
|
+
},
|
|
121
|
+
h265: function(f) {
|
|
122
|
+
return l(f, [32, 33], 3).length;
|
|
123
|
+
}
|
|
124
|
+
}, u = Object.keys(e).filter(function(r) {
|
|
125
|
+
return r !== "ts" && r !== "h264" && r !== "h265";
|
|
126
|
+
}).concat(["ts", "h264", "h265"]);
|
|
127
|
+
u.forEach(function(r) {
|
|
128
|
+
var f = e[r];
|
|
129
|
+
e[r] = function(n) {
|
|
130
|
+
return f(t(n));
|
|
131
|
+
};
|
|
132
|
+
});
|
|
133
|
+
var g = e, w = function(f) {
|
|
134
|
+
f = t(f);
|
|
135
|
+
for (var n = 0; n < u.length; n++) {
|
|
136
|
+
var m = u[n];
|
|
137
|
+
if (g[m](f))
|
|
138
|
+
return m;
|
|
139
|
+
}
|
|
140
|
+
return "";
|
|
141
|
+
}, L = function(f) {
|
|
142
|
+
return v(f, ["moof"]).length > 0;
|
|
143
|
+
};
|
|
144
|
+
export {
|
|
145
|
+
w as detectContainerForBytes,
|
|
146
|
+
g as isLikely,
|
|
147
|
+
L as isLikelyFmp4MediaSegment
|
|
148
|
+
};
|
|
149
|
+
//# sourceMappingURL=containers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"containers.js","sources":["../../../../../../../../../node_modules/.pnpm/@videojs+vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/containers.js"],"sourcesContent":["import { toUint8, bytesMatch } from './byte-helpers.js';\nimport { findBox } from './mp4-helpers.js';\nimport { findEbml, EBML_TAGS } from './ebml-helpers.js';\nimport { getId3Offset } from './id3-helpers.js';\nimport { findH264Nal, findH265Nal } from './nal-helpers.js';\nvar CONSTANTS = {\n // \"webm\" string literal in hex\n 'webm': toUint8([0x77, 0x65, 0x62, 0x6d]),\n // \"matroska\" string literal in hex\n 'matroska': toUint8([0x6d, 0x61, 0x74, 0x72, 0x6f, 0x73, 0x6b, 0x61]),\n // \"fLaC\" string literal in hex\n 'flac': toUint8([0x66, 0x4c, 0x61, 0x43]),\n // \"OggS\" string literal in hex\n 'ogg': toUint8([0x4f, 0x67, 0x67, 0x53]),\n // ac-3 sync byte, also works for ec-3 as that is simply a codec\n // of ac-3\n 'ac3': toUint8([0x0b, 0x77]),\n // \"RIFF\" string literal in hex used for wav and avi\n 'riff': toUint8([0x52, 0x49, 0x46, 0x46]),\n // \"AVI\" string literal in hex\n 'avi': toUint8([0x41, 0x56, 0x49]),\n // \"WAVE\" string literal in hex\n 'wav': toUint8([0x57, 0x41, 0x56, 0x45]),\n // \"ftyp3g\" string literal in hex\n '3gp': toUint8([0x66, 0x74, 0x79, 0x70, 0x33, 0x67]),\n // \"ftyp\" string literal in hex\n 'mp4': toUint8([0x66, 0x74, 0x79, 0x70]),\n // \"styp\" string literal in hex\n 'fmp4': toUint8([0x73, 0x74, 0x79, 0x70]),\n // \"ftypqt\" string literal in hex\n 'mov': toUint8([0x66, 0x74, 0x79, 0x70, 0x71, 0x74]),\n // moov string literal in hex\n 'moov': toUint8([0x6D, 0x6F, 0x6F, 0x76]),\n // moof string literal in hex\n 'moof': toUint8([0x6D, 0x6F, 0x6F, 0x66])\n};\nvar _isLikely = {\n aac: function aac(bytes) {\n var offset = getId3Offset(bytes);\n return bytesMatch(bytes, [0xFF, 0x10], {\n offset: offset,\n mask: [0xFF, 0x16]\n });\n },\n mp3: function mp3(bytes) {\n var offset = getId3Offset(bytes);\n return bytesMatch(bytes, [0xFF, 0x02], {\n offset: offset,\n mask: [0xFF, 0x06]\n });\n },\n webm: function webm(bytes) {\n var docType = findEbml(bytes, [EBML_TAGS.EBML, EBML_TAGS.DocType])[0]; // check if DocType EBML tag is webm\n\n return bytesMatch(docType, CONSTANTS.webm);\n },\n mkv: function mkv(bytes) {\n var docType = findEbml(bytes, [EBML_TAGS.EBML, EBML_TAGS.DocType])[0]; // check if DocType EBML tag is matroska\n\n return bytesMatch(docType, CONSTANTS.matroska);\n },\n mp4: function mp4(bytes) {\n // if this file is another base media file format, it is not mp4\n if (_isLikely['3gp'](bytes) || _isLikely.mov(bytes)) {\n return false;\n } // if this file starts with a ftyp or styp box its mp4\n\n\n if (bytesMatch(bytes, CONSTANTS.mp4, {\n offset: 4\n }) || bytesMatch(bytes, CONSTANTS.fmp4, {\n offset: 4\n })) {\n return true;\n } // if this file starts with a moof/moov box its mp4\n\n\n if (bytesMatch(bytes, CONSTANTS.moof, {\n offset: 4\n }) || bytesMatch(bytes, CONSTANTS.moov, {\n offset: 4\n })) {\n return true;\n }\n },\n mov: function mov(bytes) {\n return bytesMatch(bytes, CONSTANTS.mov, {\n offset: 4\n });\n },\n '3gp': function gp(bytes) {\n return bytesMatch(bytes, CONSTANTS['3gp'], {\n offset: 4\n });\n },\n ac3: function ac3(bytes) {\n var offset = getId3Offset(bytes);\n return bytesMatch(bytes, CONSTANTS.ac3, {\n offset: offset\n });\n },\n ts: function ts(bytes) {\n if (bytes.length < 189 && bytes.length >= 1) {\n return bytes[0] === 0x47;\n }\n\n var i = 0; // check the first 376 bytes for two matching sync bytes\n\n while (i + 188 < bytes.length && i < 188) {\n if (bytes[i] === 0x47 && bytes[i + 188] === 0x47) {\n return true;\n }\n\n i += 1;\n }\n\n return false;\n },\n flac: function flac(bytes) {\n var offset = getId3Offset(bytes);\n return bytesMatch(bytes, CONSTANTS.flac, {\n offset: offset\n });\n },\n ogg: function ogg(bytes) {\n return bytesMatch(bytes, CONSTANTS.ogg);\n },\n avi: function avi(bytes) {\n return bytesMatch(bytes, CONSTANTS.riff) && bytesMatch(bytes, CONSTANTS.avi, {\n offset: 8\n });\n },\n wav: function wav(bytes) {\n return bytesMatch(bytes, CONSTANTS.riff) && bytesMatch(bytes, CONSTANTS.wav, {\n offset: 8\n });\n },\n 'h264': function h264(bytes) {\n // find seq_parameter_set_rbsp\n return findH264Nal(bytes, 7, 3).length;\n },\n 'h265': function h265(bytes) {\n // find video_parameter_set_rbsp or seq_parameter_set_rbsp\n return findH265Nal(bytes, [32, 33], 3).length;\n }\n}; // get all the isLikely functions\n// but make sure 'ts' is above h264 and h265\n// but below everything else as it is the least specific\n\nvar isLikelyTypes = Object.keys(_isLikely) // remove ts, h264, h265\n.filter(function (t) {\n return t !== 'ts' && t !== 'h264' && t !== 'h265';\n}) // add it back to the bottom\n.concat(['ts', 'h264', 'h265']); // make sure we are dealing with uint8 data.\n\nisLikelyTypes.forEach(function (type) {\n var isLikelyFn = _isLikely[type];\n\n _isLikely[type] = function (bytes) {\n return isLikelyFn(toUint8(bytes));\n };\n}); // export after wrapping\n\nexport var isLikely = _isLikely; // A useful list of file signatures can be found here\n// https://en.wikipedia.org/wiki/List_of_file_signatures\n\nexport var detectContainerForBytes = function detectContainerForBytes(bytes) {\n bytes = toUint8(bytes);\n\n for (var i = 0; i < isLikelyTypes.length; i++) {\n var type = isLikelyTypes[i];\n\n if (isLikely[type](bytes)) {\n return type;\n }\n }\n\n return '';\n}; // fmp4 is not a container\n\nexport var isLikelyFmp4MediaSegment = function isLikelyFmp4MediaSegment(bytes) {\n return findBox(bytes, ['moof']).length > 0;\n};"],"names":["CONSTANTS","toUint8","_isLikely","bytes","offset","getId3Offset","bytesMatch","docType","findEbml","EBML_TAGS","i","findH264Nal","findH265Nal","isLikelyTypes","t","type","isLikelyFn","isLikely","detectContainerForBytes","isLikelyFmp4MediaSegment","findBox"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import n from "../../../../../../../../_virtual/window.js";
|
|
2
|
+
var e = function(r) {
|
|
3
|
+
return n.atob ? n.atob(r) : Buffer.from(r, "base64").toString("binary");
|
|
4
|
+
};
|
|
5
|
+
function f(a) {
|
|
6
|
+
for (var r = e(a), o = new Uint8Array(r.length), t = 0; t < r.length; t++)
|
|
7
|
+
o[t] = r.charCodeAt(t);
|
|
8
|
+
return o;
|
|
9
|
+
}
|
|
10
|
+
export {
|
|
11
|
+
f as default
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=decode-b64-to-uint8-array.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decode-b64-to-uint8-array.js","sources":["../../../../../../../../../node_modules/.pnpm/@videojs+vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/decode-b64-to-uint8-array.js"],"sourcesContent":["import window from 'global/window';\n\nvar atob = function atob(s) {\n return window.atob ? window.atob(s) : Buffer.from(s, 'base64').toString('binary');\n};\n\nexport default function decodeB64ToUint8Array(b64Text) {\n var decodedString = atob(b64Text);\n var array = new Uint8Array(decodedString.length);\n\n for (var i = 0; i < decodedString.length; i++) {\n array[i] = decodedString.charCodeAt(i);\n }\n\n return array;\n}"],"names":["atob","s","window","decodeB64ToUint8Array","b64Text","decodedString","array","i"],"mappings":";AAEA,IAAIA,IAAO,SAAcC,GAAG;AAC1B,SAAOC,EAAO,OAAOA,EAAO,KAAKD,CAAC,IAAI,OAAO,KAAKA,GAAG,QAAQ,EAAE,SAAS,QAAQ;AAClF;AAEe,SAASE,EAAsBC,GAAS;AAIrD,WAHIC,IAAgBL,EAAKI,CAAO,GAC5BE,IAAQ,IAAI,WAAWD,EAAc,MAAM,GAEtCE,IAAI,GAAGA,IAAIF,EAAc,QAAQE;AACxC,IAAAD,EAAMC,CAAC,IAAIF,EAAc,WAAWE,CAAC;AAGvC,SAAOD;AACT;","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { toUint8 as e, bytesMatch as f, bytesToNumber as A, numberToBytes as T } from "./byte-helpers.js";
|
|
2
|
+
var y = {
|
|
3
|
+
EBML: e([26, 69, 223, 163]),
|
|
4
|
+
DocType: e([66, 130]),
|
|
5
|
+
Segment: e([24, 83, 128, 103]),
|
|
6
|
+
SegmentInfo: e([21, 73, 169, 102]),
|
|
7
|
+
Tracks: e([22, 84, 174, 107]),
|
|
8
|
+
Track: e([174]),
|
|
9
|
+
TrackNumber: e([215]),
|
|
10
|
+
DefaultDuration: e([35, 227, 131]),
|
|
11
|
+
TrackEntry: e([174]),
|
|
12
|
+
TrackType: e([131]),
|
|
13
|
+
FlagDefault: e([136]),
|
|
14
|
+
CodecID: e([134]),
|
|
15
|
+
CodecPrivate: e([99, 162]),
|
|
16
|
+
VideoTrack: e([224]),
|
|
17
|
+
AudioTrack: e([225]),
|
|
18
|
+
// Not used yet, but will be used for live webm/mkv
|
|
19
|
+
// see https://www.matroska.org/technical/basics.html#block-structure
|
|
20
|
+
// see https://www.matroska.org/technical/basics.html#simpleblock-structure
|
|
21
|
+
Cluster: e([31, 67, 182, 117]),
|
|
22
|
+
Timestamp: e([231]),
|
|
23
|
+
TimestampScale: e([42, 215, 177]),
|
|
24
|
+
BlockGroup: e([160]),
|
|
25
|
+
BlockDuration: e([155]),
|
|
26
|
+
Block: e([161]),
|
|
27
|
+
SimpleBlock: e([163])
|
|
28
|
+
}, g = [128, 64, 32, 16, 8, 4, 2, 1], B = function(r) {
|
|
29
|
+
for (var n = 1, l = 0; l < g.length && !(r & g[l]); l++)
|
|
30
|
+
n++;
|
|
31
|
+
return n;
|
|
32
|
+
}, a = function(r, n, l, i) {
|
|
33
|
+
l === void 0 && (l = !0), i === void 0 && (i = !1);
|
|
34
|
+
var u = B(r[n]), x = r.subarray(n, n + u);
|
|
35
|
+
return l && (x = Array.prototype.slice.call(r, n, n + u), x[0] ^= g[u - 1]), {
|
|
36
|
+
length: u,
|
|
37
|
+
value: A(x, {
|
|
38
|
+
signed: i
|
|
39
|
+
}),
|
|
40
|
+
bytes: x
|
|
41
|
+
};
|
|
42
|
+
}, o = function t(r) {
|
|
43
|
+
return typeof r == "string" ? r.match(/.{1,2}/g).map(function(n) {
|
|
44
|
+
return t(n);
|
|
45
|
+
}) : typeof r == "number" ? T(r) : r;
|
|
46
|
+
}, k = function(r) {
|
|
47
|
+
return Array.isArray(r) ? r.map(function(n) {
|
|
48
|
+
return o(n);
|
|
49
|
+
}) : [o(r)];
|
|
50
|
+
}, E = function t(r, n, l) {
|
|
51
|
+
if (l >= n.length)
|
|
52
|
+
return n.length;
|
|
53
|
+
var i = a(n, l, !1);
|
|
54
|
+
if (f(r.bytes, i.bytes))
|
|
55
|
+
return l;
|
|
56
|
+
var u = a(n, l + i.length);
|
|
57
|
+
return t(r, n, l + u.length + u.value + i.length);
|
|
58
|
+
}, z = function t(r, n) {
|
|
59
|
+
n = k(n), r = e(r);
|
|
60
|
+
var l = [];
|
|
61
|
+
if (!n.length)
|
|
62
|
+
return l;
|
|
63
|
+
for (var i = 0; i < r.length; ) {
|
|
64
|
+
var u = a(r, i, !1), x = a(r, i + u.length), v = i + u.length + x.length;
|
|
65
|
+
x.value === 127 && (x.value = E(u, r, v), x.value !== r.length && (x.value -= v));
|
|
66
|
+
var m = v + x.value > r.length ? r.length : v + x.value, c = r.subarray(v, m);
|
|
67
|
+
f(n[0], u.bytes) && (n.length === 1 ? l.push(c) : l = l.concat(t(c, n.slice(1))));
|
|
68
|
+
var h = u.length + x.length + c.length;
|
|
69
|
+
i += h;
|
|
70
|
+
}
|
|
71
|
+
return l;
|
|
72
|
+
};
|
|
73
|
+
export {
|
|
74
|
+
y as EBML_TAGS,
|
|
75
|
+
z as findEbml
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=ebml-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ebml-helpers.js","sources":["../../../../../../../../../node_modules/.pnpm/@videojs+vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/ebml-helpers.js"],"sourcesContent":["import { toUint8, bytesToNumber, bytesMatch, bytesToString, numberToBytes, padStart } from './byte-helpers';\nimport { getAvcCodec, getHvcCodec, getAv1Codec } from './codec-helpers.js'; // relevant specs for this parser:\n// https://matroska-org.github.io/libebml/specs.html\n// https://www.matroska.org/technical/elements.html\n// https://www.webmproject.org/docs/container/\n\nexport var EBML_TAGS = {\n EBML: toUint8([0x1A, 0x45, 0xDF, 0xA3]),\n DocType: toUint8([0x42, 0x82]),\n Segment: toUint8([0x18, 0x53, 0x80, 0x67]),\n SegmentInfo: toUint8([0x15, 0x49, 0xA9, 0x66]),\n Tracks: toUint8([0x16, 0x54, 0xAE, 0x6B]),\n Track: toUint8([0xAE]),\n TrackNumber: toUint8([0xd7]),\n DefaultDuration: toUint8([0x23, 0xe3, 0x83]),\n TrackEntry: toUint8([0xAE]),\n TrackType: toUint8([0x83]),\n FlagDefault: toUint8([0x88]),\n CodecID: toUint8([0x86]),\n CodecPrivate: toUint8([0x63, 0xA2]),\n VideoTrack: toUint8([0xe0]),\n AudioTrack: toUint8([0xe1]),\n // Not used yet, but will be used for live webm/mkv\n // see https://www.matroska.org/technical/basics.html#block-structure\n // see https://www.matroska.org/technical/basics.html#simpleblock-structure\n Cluster: toUint8([0x1F, 0x43, 0xB6, 0x75]),\n Timestamp: toUint8([0xE7]),\n TimestampScale: toUint8([0x2A, 0xD7, 0xB1]),\n BlockGroup: toUint8([0xA0]),\n BlockDuration: toUint8([0x9B]),\n Block: toUint8([0xA1]),\n SimpleBlock: toUint8([0xA3])\n};\n/**\n * This is a simple table to determine the length\n * of things in ebml. The length is one based (starts at 1,\n * rather than zero) and for every zero bit before a one bit\n * we add one to length. We also need this table because in some\n * case we have to xor all the length bits from another value.\n */\n\nvar LENGTH_TABLE = [128, 64, 32, 16, 8, 4, 2, 1];\n\nvar getLength = function getLength(byte) {\n var len = 1;\n\n for (var i = 0; i < LENGTH_TABLE.length; i++) {\n if (byte & LENGTH_TABLE[i]) {\n break;\n }\n\n len++;\n }\n\n return len;\n}; // length in ebml is stored in the first 4 to 8 bits\n// of the first byte. 4 for the id length and 8 for the\n// data size length. Length is measured by converting the number to binary\n// then 1 + the number of zeros before a 1 is encountered starting\n// from the left.\n\n\nvar getvint = function getvint(bytes, offset, removeLength, signed) {\n if (removeLength === void 0) {\n removeLength = true;\n }\n\n if (signed === void 0) {\n signed = false;\n }\n\n var length = getLength(bytes[offset]);\n var valueBytes = bytes.subarray(offset, offset + length); // NOTE that we do **not** subarray here because we need to copy these bytes\n // as they will be modified below to remove the dataSizeLen bits and we do not\n // want to modify the original data. normally we could just call slice on\n // uint8array but ie 11 does not support that...\n\n if (removeLength) {\n valueBytes = Array.prototype.slice.call(bytes, offset, offset + length);\n valueBytes[0] ^= LENGTH_TABLE[length - 1];\n }\n\n return {\n length: length,\n value: bytesToNumber(valueBytes, {\n signed: signed\n }),\n bytes: valueBytes\n };\n};\n\nvar normalizePath = function normalizePath(path) {\n if (typeof path === 'string') {\n return path.match(/.{1,2}/g).map(function (p) {\n return normalizePath(p);\n });\n }\n\n if (typeof path === 'number') {\n return numberToBytes(path);\n }\n\n return path;\n};\n\nvar normalizePaths = function normalizePaths(paths) {\n if (!Array.isArray(paths)) {\n return [normalizePath(paths)];\n }\n\n return paths.map(function (p) {\n return normalizePath(p);\n });\n};\n\nvar getInfinityDataSize = function getInfinityDataSize(id, bytes, offset) {\n if (offset >= bytes.length) {\n return bytes.length;\n }\n\n var innerid = getvint(bytes, offset, false);\n\n if (bytesMatch(id.bytes, innerid.bytes)) {\n return offset;\n }\n\n var dataHeader = getvint(bytes, offset + innerid.length);\n return getInfinityDataSize(id, bytes, offset + dataHeader.length + dataHeader.value + innerid.length);\n};\n/**\n * Notes on the EBLM format.\n *\n * EBLM uses \"vints\" tags. Every vint tag contains\n * two parts\n *\n * 1. The length from the first byte. You get this by\n * converting the byte to binary and counting the zeros\n * before a 1. Then you add 1 to that. Examples\n * 00011111 = length 4 because there are 3 zeros before a 1.\n * 00100000 = length 3 because there are 2 zeros before a 1.\n * 00000011 = length 7 because there are 6 zeros before a 1.\n *\n * 2. The bits used for length are removed from the first byte\n * Then all the bytes are merged into a value. NOTE: this\n * is not the case for id ebml tags as there id includes\n * length bits.\n *\n */\n\n\nexport var findEbml = function findEbml(bytes, paths) {\n paths = normalizePaths(paths);\n bytes = toUint8(bytes);\n var results = [];\n\n if (!paths.length) {\n return results;\n }\n\n var i = 0;\n\n while (i < bytes.length) {\n var id = getvint(bytes, i, false);\n var dataHeader = getvint(bytes, i + id.length);\n var dataStart = i + id.length + dataHeader.length; // dataSize is unknown or this is a live stream\n\n if (dataHeader.value === 0x7f) {\n dataHeader.value = getInfinityDataSize(id, bytes, dataStart);\n\n if (dataHeader.value !== bytes.length) {\n dataHeader.value -= dataStart;\n }\n }\n\n var dataEnd = dataStart + dataHeader.value > bytes.length ? bytes.length : dataStart + dataHeader.value;\n var data = bytes.subarray(dataStart, dataEnd);\n\n if (bytesMatch(paths[0], id.bytes)) {\n if (paths.length === 1) {\n // this is the end of the paths and we've found the tag we were\n // looking for\n results.push(data);\n } else {\n // recursively search for the next tag inside of the data\n // of this one\n results = results.concat(findEbml(data, paths.slice(1)));\n }\n }\n\n var totalLength = id.length + dataHeader.length + data.length; // move past this tag entirely, we are not looking for it\n\n i += totalLength;\n }\n\n return results;\n}; // see https://www.matroska.org/technical/basics.html#block-structure\n\nexport var decodeBlock = function decodeBlock(block, type, timestampScale, clusterTimestamp) {\n var duration;\n\n if (type === 'group') {\n duration = findEbml(block, [EBML_TAGS.BlockDuration])[0];\n\n if (duration) {\n duration = bytesToNumber(duration);\n duration = 1 / timestampScale * duration * timestampScale / 1000;\n }\n\n block = findEbml(block, [EBML_TAGS.Block])[0];\n type = 'block'; // treat data as a block after this point\n }\n\n var dv = new DataView(block.buffer, block.byteOffset, block.byteLength);\n var trackNumber = getvint(block, 0);\n var timestamp = dv.getInt16(trackNumber.length, false);\n var flags = block[trackNumber.length + 2];\n var data = block.subarray(trackNumber.length + 3); // pts/dts in seconds\n\n var ptsdts = 1 / timestampScale * (clusterTimestamp + timestamp) * timestampScale / 1000; // return the frame\n\n var parsed = {\n duration: duration,\n trackNumber: trackNumber.value,\n keyframe: type === 'simple' && flags >> 7 === 1,\n invisible: (flags & 0x08) >> 3 === 1,\n lacing: (flags & 0x06) >> 1,\n discardable: type === 'simple' && (flags & 0x01) === 1,\n frames: [],\n pts: ptsdts,\n dts: ptsdts,\n timestamp: timestamp\n };\n\n if (!parsed.lacing) {\n parsed.frames.push(data);\n return parsed;\n }\n\n var numberOfFrames = data[0] + 1;\n var frameSizes = [];\n var offset = 1; // Fixed\n\n if (parsed.lacing === 2) {\n var sizeOfFrame = (data.length - offset) / numberOfFrames;\n\n for (var i = 0; i < numberOfFrames; i++) {\n frameSizes.push(sizeOfFrame);\n }\n } // xiph\n\n\n if (parsed.lacing === 1) {\n for (var _i = 0; _i < numberOfFrames - 1; _i++) {\n var size = 0;\n\n do {\n size += data[offset];\n offset++;\n } while (data[offset - 1] === 0xFF);\n\n frameSizes.push(size);\n }\n } // ebml\n\n\n if (parsed.lacing === 3) {\n // first vint is unsinged\n // after that vints are singed and\n // based on a compounding size\n var _size = 0;\n\n for (var _i2 = 0; _i2 < numberOfFrames - 1; _i2++) {\n var vint = _i2 === 0 ? getvint(data, offset) : getvint(data, offset, true, true);\n _size += vint.value;\n frameSizes.push(_size);\n offset += vint.length;\n }\n }\n\n frameSizes.forEach(function (size) {\n parsed.frames.push(data.subarray(offset, offset + size));\n offset += size;\n });\n return parsed;\n}; // VP9 Codec Feature Metadata (CodecPrivate)\n// https://www.webmproject.org/docs/container/\n\nvar parseVp9Private = function parseVp9Private(bytes) {\n var i = 0;\n var params = {};\n\n while (i < bytes.length) {\n var id = bytes[i] & 0x7f;\n var len = bytes[i + 1];\n var val = void 0;\n\n if (len === 1) {\n val = bytes[i + 2];\n } else {\n val = bytes.subarray(i + 2, i + 2 + len);\n }\n\n if (id === 1) {\n params.profile = val;\n } else if (id === 2) {\n params.level = val;\n } else if (id === 3) {\n params.bitDepth = val;\n } else if (id === 4) {\n params.chromaSubsampling = val;\n } else {\n params[id] = val;\n }\n\n i += 2 + len;\n }\n\n return params;\n};\n\nexport var parseTracks = function parseTracks(bytes) {\n bytes = toUint8(bytes);\n var decodedTracks = [];\n var tracks = findEbml(bytes, [EBML_TAGS.Segment, EBML_TAGS.Tracks, EBML_TAGS.Track]);\n\n if (!tracks.length) {\n tracks = findEbml(bytes, [EBML_TAGS.Tracks, EBML_TAGS.Track]);\n }\n\n if (!tracks.length) {\n tracks = findEbml(bytes, [EBML_TAGS.Track]);\n }\n\n if (!tracks.length) {\n return decodedTracks;\n }\n\n tracks.forEach(function (track) {\n var trackType = findEbml(track, EBML_TAGS.TrackType)[0];\n\n if (!trackType || !trackType.length) {\n return;\n } // 1 is video, 2 is audio, 17 is subtitle\n // other values are unimportant in this context\n\n\n if (trackType[0] === 1) {\n trackType = 'video';\n } else if (trackType[0] === 2) {\n trackType = 'audio';\n } else if (trackType[0] === 17) {\n trackType = 'subtitle';\n } else {\n return;\n } // todo parse language\n\n\n var decodedTrack = {\n rawCodec: bytesToString(findEbml(track, [EBML_TAGS.CodecID])[0]),\n type: trackType,\n codecPrivate: findEbml(track, [EBML_TAGS.CodecPrivate])[0],\n number: bytesToNumber(findEbml(track, [EBML_TAGS.TrackNumber])[0]),\n defaultDuration: bytesToNumber(findEbml(track, [EBML_TAGS.DefaultDuration])[0]),\n default: findEbml(track, [EBML_TAGS.FlagDefault])[0],\n rawData: track\n };\n var codec = '';\n\n if (/V_MPEG4\\/ISO\\/AVC/.test(decodedTrack.rawCodec)) {\n codec = \"avc1.\" + getAvcCodec(decodedTrack.codecPrivate);\n } else if (/V_MPEGH\\/ISO\\/HEVC/.test(decodedTrack.rawCodec)) {\n codec = \"hev1.\" + getHvcCodec(decodedTrack.codecPrivate);\n } else if (/V_MPEG4\\/ISO\\/ASP/.test(decodedTrack.rawCodec)) {\n if (decodedTrack.codecPrivate) {\n codec = 'mp4v.20.' + decodedTrack.codecPrivate[4].toString();\n } else {\n codec = 'mp4v.20.9';\n }\n } else if (/^V_THEORA/.test(decodedTrack.rawCodec)) {\n codec = 'theora';\n } else if (/^V_VP8/.test(decodedTrack.rawCodec)) {\n codec = 'vp8';\n } else if (/^V_VP9/.test(decodedTrack.rawCodec)) {\n if (decodedTrack.codecPrivate) {\n var _parseVp9Private = parseVp9Private(decodedTrack.codecPrivate),\n profile = _parseVp9Private.profile,\n level = _parseVp9Private.level,\n bitDepth = _parseVp9Private.bitDepth,\n chromaSubsampling = _parseVp9Private.chromaSubsampling;\n\n codec = 'vp09.';\n codec += padStart(profile, 2, '0') + \".\";\n codec += padStart(level, 2, '0') + \".\";\n codec += padStart(bitDepth, 2, '0') + \".\";\n codec += \"\" + padStart(chromaSubsampling, 2, '0'); // Video -> Colour -> Ebml name\n\n var matrixCoefficients = findEbml(track, [0xE0, [0x55, 0xB0], [0x55, 0xB1]])[0] || [];\n var videoFullRangeFlag = findEbml(track, [0xE0, [0x55, 0xB0], [0x55, 0xB9]])[0] || [];\n var transferCharacteristics = findEbml(track, [0xE0, [0x55, 0xB0], [0x55, 0xBA]])[0] || [];\n var colourPrimaries = findEbml(track, [0xE0, [0x55, 0xB0], [0x55, 0xBB]])[0] || []; // if we find any optional codec parameter specify them all.\n\n if (matrixCoefficients.length || videoFullRangeFlag.length || transferCharacteristics.length || colourPrimaries.length) {\n codec += \".\" + padStart(colourPrimaries[0], 2, '0');\n codec += \".\" + padStart(transferCharacteristics[0], 2, '0');\n codec += \".\" + padStart(matrixCoefficients[0], 2, '0');\n codec += \".\" + padStart(videoFullRangeFlag[0], 2, '0');\n }\n } else {\n codec = 'vp9';\n }\n } else if (/^V_AV1/.test(decodedTrack.rawCodec)) {\n codec = \"av01.\" + getAv1Codec(decodedTrack.codecPrivate);\n } else if (/A_ALAC/.test(decodedTrack.rawCodec)) {\n codec = 'alac';\n } else if (/A_MPEG\\/L2/.test(decodedTrack.rawCodec)) {\n codec = 'mp2';\n } else if (/A_MPEG\\/L3/.test(decodedTrack.rawCodec)) {\n codec = 'mp3';\n } else if (/^A_AAC/.test(decodedTrack.rawCodec)) {\n if (decodedTrack.codecPrivate) {\n codec = 'mp4a.40.' + (decodedTrack.codecPrivate[0] >>> 3).toString();\n } else {\n codec = 'mp4a.40.2';\n }\n } else if (/^A_AC3/.test(decodedTrack.rawCodec)) {\n codec = 'ac-3';\n } else if (/^A_PCM/.test(decodedTrack.rawCodec)) {\n codec = 'pcm';\n } else if (/^A_MS\\/ACM/.test(decodedTrack.rawCodec)) {\n codec = 'speex';\n } else if (/^A_EAC3/.test(decodedTrack.rawCodec)) {\n codec = 'ec-3';\n } else if (/^A_VORBIS/.test(decodedTrack.rawCodec)) {\n codec = 'vorbis';\n } else if (/^A_FLAC/.test(decodedTrack.rawCodec)) {\n codec = 'flac';\n } else if (/^A_OPUS/.test(decodedTrack.rawCodec)) {\n codec = 'opus';\n }\n\n decodedTrack.codec = codec;\n decodedTracks.push(decodedTrack);\n });\n return decodedTracks.sort(function (a, b) {\n return a.number - b.number;\n });\n};\nexport var parseData = function parseData(data, tracks) {\n var allBlocks = [];\n var segment = findEbml(data, [EBML_TAGS.Segment])[0];\n var timestampScale = findEbml(segment, [EBML_TAGS.SegmentInfo, EBML_TAGS.TimestampScale])[0]; // in nanoseconds, defaults to 1ms\n\n if (timestampScale && timestampScale.length) {\n timestampScale = bytesToNumber(timestampScale);\n } else {\n timestampScale = 1000000;\n }\n\n var clusters = findEbml(segment, [EBML_TAGS.Cluster]);\n\n if (!tracks) {\n tracks = parseTracks(segment);\n }\n\n clusters.forEach(function (cluster, ci) {\n var simpleBlocks = findEbml(cluster, [EBML_TAGS.SimpleBlock]).map(function (b) {\n return {\n type: 'simple',\n data: b\n };\n });\n var blockGroups = findEbml(cluster, [EBML_TAGS.BlockGroup]).map(function (b) {\n return {\n type: 'group',\n data: b\n };\n });\n var timestamp = findEbml(cluster, [EBML_TAGS.Timestamp])[0] || 0;\n\n if (timestamp && timestamp.length) {\n timestamp = bytesToNumber(timestamp);\n } // get all blocks then sort them into the correct order\n\n\n var blocks = simpleBlocks.concat(blockGroups).sort(function (a, b) {\n return a.data.byteOffset - b.data.byteOffset;\n });\n blocks.forEach(function (block, bi) {\n var decoded = decodeBlock(block.data, block.type, timestampScale, timestamp);\n allBlocks.push(decoded);\n });\n });\n return {\n tracks: tracks,\n blocks: allBlocks\n };\n};"],"names":["EBML_TAGS","toUint8","LENGTH_TABLE","getLength","byte","len","i","getvint","bytes","offset","removeLength","signed","length","valueBytes","bytesToNumber","normalizePath","path","p","numberToBytes","normalizePaths","paths","getInfinityDataSize","id","innerid","bytesMatch","dataHeader","findEbml","results","dataStart","dataEnd","data","totalLength"],"mappings":";AAMU,IAACA,IAAY;AAAA,EACrB,MAAMC,EAAQ,CAAC,IAAM,IAAM,KAAM,GAAI,CAAC;AAAA,EACtC,SAASA,EAAQ,CAAC,IAAM,GAAI,CAAC;AAAA,EAC7B,SAASA,EAAQ,CAAC,IAAM,IAAM,KAAM,GAAI,CAAC;AAAA,EACzC,aAAaA,EAAQ,CAAC,IAAM,IAAM,KAAM,GAAI,CAAC;AAAA,EAC7C,QAAQA,EAAQ,CAAC,IAAM,IAAM,KAAM,GAAI,CAAC;AAAA,EACxC,OAAOA,EAAQ,CAAC,GAAI,CAAC;AAAA,EACrB,aAAaA,EAAQ,CAAC,GAAI,CAAC;AAAA,EAC3B,iBAAiBA,EAAQ,CAAC,IAAM,KAAM,GAAI,CAAC;AAAA,EAC3C,YAAYA,EAAQ,CAAC,GAAI,CAAC;AAAA,EAC1B,WAAWA,EAAQ,CAAC,GAAI,CAAC;AAAA,EACzB,aAAaA,EAAQ,CAAC,GAAI,CAAC;AAAA,EAC3B,SAASA,EAAQ,CAAC,GAAI,CAAC;AAAA,EACvB,cAAcA,EAAQ,CAAC,IAAM,GAAI,CAAC;AAAA,EAClC,YAAYA,EAAQ,CAAC,GAAI,CAAC;AAAA,EAC1B,YAAYA,EAAQ,CAAC,GAAI,CAAC;AAAA;AAAA;AAAA;AAAA,EAI1B,SAASA,EAAQ,CAAC,IAAM,IAAM,KAAM,GAAI,CAAC;AAAA,EACzC,WAAWA,EAAQ,CAAC,GAAI,CAAC;AAAA,EACzB,gBAAgBA,EAAQ,CAAC,IAAM,KAAM,GAAI,CAAC;AAAA,EAC1C,YAAYA,EAAQ,CAAC,GAAI,CAAC;AAAA,EAC1B,eAAeA,EAAQ,CAAC,GAAI,CAAC;AAAA,EAC7B,OAAOA,EAAQ,CAAC,GAAI,CAAC;AAAA,EACrB,aAAaA,EAAQ,CAAC,GAAI,CAAC;AAC7B,GASIC,IAAe,CAAC,KAAK,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,CAAC,GAE3CC,IAAY,SAAmBC,GAAM;AAGvC,WAFIC,IAAM,GAEDC,IAAI,GAAGA,IAAIJ,EAAa,UAC3B,EAAAE,IAAOF,EAAaI,CAAC,IADcA;AAKvC,IAAAD;AAGF,SAAOA;AACT,GAOIE,IAAU,SAAiBC,GAAOC,GAAQC,GAAcC,GAAQ;AAClE,EAAID,MAAiB,WACnBA,IAAe,KAGbC,MAAW,WACbA,IAAS;AAGX,MAAIC,IAAST,EAAUK,EAAMC,CAAM,CAAC,GAChCI,IAAaL,EAAM,SAASC,GAAQA,IAASG,CAAM;AAKvD,SAAIF,MACFG,IAAa,MAAM,UAAU,MAAM,KAAKL,GAAOC,GAAQA,IAASG,CAAM,GACtEC,EAAW,CAAC,KAAKX,EAAaU,IAAS,CAAC,IAGnC;AAAA,IACL,QAAQA;AAAA,IACR,OAAOE,EAAcD,GAAY;AAAA,MAC/B,QAAQF;AAAA,IACd,CAAK;AAAA,IACD,OAAOE;AAAA,EACR;AACH,GAEIE,IAAgB,SAASA,EAAcC,GAAM;AAC/C,SAAI,OAAOA,KAAS,WACXA,EAAK,MAAM,SAAS,EAAE,IAAI,SAAUC,GAAG;AAC5C,WAAOF,EAAcE,CAAC;AAAA,EAC5B,CAAK,IAGC,OAAOD,KAAS,WACXE,EAAcF,CAAI,IAGpBA;AACT,GAEIG,IAAiB,SAAwBC,GAAO;AAClD,SAAK,MAAM,QAAQA,CAAK,IAIjBA,EAAM,IAAI,SAAUH,GAAG;AAC5B,WAAOF,EAAcE,CAAC;AAAA,EAC1B,CAAG,IALQ,CAACF,EAAcK,CAAK,CAAC;AAMhC,GAEIC,IAAsB,SAASA,EAAoBC,GAAId,GAAOC,GAAQ;AACxE,MAAIA,KAAUD,EAAM;AAClB,WAAOA,EAAM;AAGf,MAAIe,IAAUhB,EAAQC,GAAOC,GAAQ,EAAK;AAE1C,MAAIe,EAAWF,EAAG,OAAOC,EAAQ,KAAK;AACpC,WAAOd;AAGT,MAAIgB,IAAalB,EAAQC,GAAOC,IAASc,EAAQ,MAAM;AACvD,SAAOF,EAAoBC,GAAId,GAAOC,IAASgB,EAAW,SAASA,EAAW,QAAQF,EAAQ,MAAM;AACtG,GAsBWG,IAAW,SAASA,EAASlB,GAAOY,GAAO;AACpD,EAAAA,IAAQD,EAAeC,CAAK,GAC5BZ,IAAQP,EAAQO,CAAK;AACrB,MAAImB,IAAU,CAAE;AAEhB,MAAI,CAACP,EAAM;AACT,WAAOO;AAKT,WAFI,IAAI,GAED,IAAInB,EAAM,UAAQ;AACvB,QAAIc,IAAKf,EAAQC,GAAO,GAAG,EAAK,GAC5BiB,IAAalB,EAAQC,GAAO,IAAIc,EAAG,MAAM,GACzCM,IAAY,IAAIN,EAAG,SAASG,EAAW;AAE3C,IAAIA,EAAW,UAAU,QACvBA,EAAW,QAAQJ,EAAoBC,GAAId,GAAOoB,CAAS,GAEvDH,EAAW,UAAUjB,EAAM,WAC7BiB,EAAW,SAASG;AAIxB,QAAIC,IAAUD,IAAYH,EAAW,QAAQjB,EAAM,SAASA,EAAM,SAASoB,IAAYH,EAAW,OAC9FK,IAAOtB,EAAM,SAASoB,GAAWC,CAAO;AAE5C,IAAIL,EAAWJ,EAAM,CAAC,GAAGE,EAAG,KAAK,MAC3BF,EAAM,WAAW,IAGnBO,EAAQ,KAAKG,CAAI,IAIjBH,IAAUA,EAAQ,OAAOD,EAASI,GAAMV,EAAM,MAAM,CAAC,CAAC,CAAC;AAI3D,QAAIW,IAAcT,EAAG,SAASG,EAAW,SAASK,EAAK;AAEvD,SAAKC;AAAA,EACT;AAEE,SAAOJ;AACT;","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { toUint8 as n, bytesMatch as g } from "./byte-helpers.js";
|
|
2
|
+
var I = n([73, 68, 51]), x = function(i, r) {
|
|
3
|
+
r === void 0 && (r = 0), i = n(i);
|
|
4
|
+
var u = i[r + 5], v = i[r + 6] << 21 | i[r + 7] << 14 | i[r + 8] << 7 | i[r + 9], d = (u & 16) >> 4;
|
|
5
|
+
return d ? v + 20 : v + 10;
|
|
6
|
+
}, z = function a(i, r) {
|
|
7
|
+
return r === void 0 && (r = 0), i = n(i), i.length - r < 10 || !g(i, I, {
|
|
8
|
+
offset: r
|
|
9
|
+
}) ? r : (r += x(i, r), a(i, r));
|
|
10
|
+
};
|
|
11
|
+
export {
|
|
12
|
+
z as getId3Offset,
|
|
13
|
+
x as getId3Size
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=id3-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"id3-helpers.js","sources":["../../../../../../../../../node_modules/.pnpm/@videojs+vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/id3-helpers.js"],"sourcesContent":["import { toUint8, bytesMatch } from './byte-helpers.js';\nvar ID3 = toUint8([0x49, 0x44, 0x33]);\nexport var getId3Size = function getId3Size(bytes, offset) {\n if (offset === void 0) {\n offset = 0;\n }\n\n bytes = toUint8(bytes);\n var flags = bytes[offset + 5];\n var returnSize = bytes[offset + 6] << 21 | bytes[offset + 7] << 14 | bytes[offset + 8] << 7 | bytes[offset + 9];\n var footerPresent = (flags & 16) >> 4;\n\n if (footerPresent) {\n return returnSize + 20;\n }\n\n return returnSize + 10;\n};\nexport var getId3Offset = function getId3Offset(bytes, offset) {\n if (offset === void 0) {\n offset = 0;\n }\n\n bytes = toUint8(bytes);\n\n if (bytes.length - offset < 10 || !bytesMatch(bytes, ID3, {\n offset: offset\n })) {\n return offset;\n }\n\n offset += getId3Size(bytes, offset); // recursive check for id3 tags as some files\n // have multiple ID3 tag sections even though\n // they should not.\n\n return getId3Offset(bytes, offset);\n};"],"names":["ID3","toUint8","getId3Size","bytes","offset","flags","returnSize","footerPresent","getId3Offset","bytesMatch"],"mappings":";AACA,IAAIA,IAAMC,EAAQ,CAAC,IAAM,IAAM,EAAI,CAAC,GACzBC,IAAa,SAAoBC,GAAOC,GAAQ;AACzD,EAAIA,MAAW,WACbA,IAAS,IAGXD,IAAQF,EAAQE,CAAK;AACrB,MAAIE,IAAQF,EAAMC,IAAS,CAAC,GACxBE,IAAaH,EAAMC,IAAS,CAAC,KAAK,KAAKD,EAAMC,IAAS,CAAC,KAAK,KAAKD,EAAMC,IAAS,CAAC,KAAK,IAAID,EAAMC,IAAS,CAAC,GAC1GG,KAAiBF,IAAQ,OAAO;AAEpC,SAAIE,IACKD,IAAa,KAGfA,IAAa;AACtB,GACWE,IAAe,SAASA,EAAaL,GAAOC,GAAQ;AAO7D,SANIA,MAAW,WACbA,IAAS,IAGXD,IAAQF,EAAQE,CAAK,GAEjBA,EAAM,SAASC,IAAS,MAAM,CAACK,EAAWN,GAAOH,GAAK;AAAA,IACxD,QAAQI;AAAA,EACZ,CAAG,IACQA,KAGTA,KAAUF,EAAWC,GAAOC,CAAM,GAI3BI,EAAaL,GAAOC,CAAM;AACnC;","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
var G = function(r, i, n) {
|
|
2
|
+
i.forEach(function(o) {
|
|
3
|
+
for (var f in r.mediaGroups[o])
|
|
4
|
+
for (var a in r.mediaGroups[o][f]) {
|
|
5
|
+
var c = r.mediaGroups[o][f][a];
|
|
6
|
+
n(c, o, f, a);
|
|
7
|
+
}
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
export {
|
|
11
|
+
G as forEachMediaGroup
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=media-groups.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-groups.js","sources":["../../../../../../../../../node_modules/.pnpm/@videojs+vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/media-groups.js"],"sourcesContent":["/**\n * Loops through all supported media groups in master and calls the provided\n * callback for each group\n *\n * @param {Object} master\n * The parsed master manifest object\n * @param {string[]} groups\n * The media groups to call the callback for\n * @param {Function} callback\n * Callback to call for each media group\n */\nexport var forEachMediaGroup = function forEachMediaGroup(master, groups, callback) {\n groups.forEach(function (mediaType) {\n for (var groupKey in master.mediaGroups[mediaType]) {\n for (var labelKey in master.mediaGroups[mediaType][groupKey]) {\n var mediaProperties = master.mediaGroups[mediaType][groupKey][labelKey];\n callback(mediaProperties, mediaType, groupKey, labelKey);\n }\n }\n });\n};"],"names":["forEachMediaGroup","master","groups","callback","mediaType","groupKey","labelKey","mediaProperties"],"mappings":"AAWU,IAACA,IAAoB,SAA2BC,GAAQC,GAAQC,GAAU;AAClF,EAAAD,EAAO,QAAQ,SAAUE,GAAW;AAClC,aAASC,KAAYJ,EAAO,YAAYG,CAAS;AAC/C,eAASE,KAAYL,EAAO,YAAYG,CAAS,EAAEC,CAAQ,GAAG;AAC5D,YAAIE,IAAkBN,EAAO,YAAYG,CAAS,EAAEC,CAAQ,EAAEC,CAAQ;AACtE,QAAAH,EAASI,GAAiBH,GAAWC,GAAUC,CAAQ;AAAA,MAC/D;AAAA,EAEA,CAAG;AACH;","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
var i = /^(audio|video|application)\/(x-|vnd\.apple\.)?mpegurl/i, r = /^application\/dash\+xml/i, o = function(e) {
|
|
2
|
+
return i.test(e) ? "hls" : r.test(e) ? "dash" : e === "application/vnd.videojs.vhs+json" ? "vhs-json" : null;
|
|
3
|
+
};
|
|
4
|
+
export {
|
|
5
|
+
o as simpleTypeFromSourceType
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=media-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-types.js","sources":["../../../../../../../../../node_modules/.pnpm/@videojs+vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/media-types.js"],"sourcesContent":["var MPEGURL_REGEX = /^(audio|video|application)\\/(x-|vnd\\.apple\\.)?mpegurl/i;\nvar DASH_REGEX = /^application\\/dash\\+xml/i;\n/**\n * Returns a string that describes the type of source based on a video source object's\n * media type.\n *\n * @see {@link https://dev.w3.org/html5/pf-summary/video.html#dom-source-type|Source Type}\n *\n * @param {string} type\n * Video source object media type\n * @return {('hls'|'dash'|'vhs-json'|null)}\n * VHS source type string\n */\n\nexport var simpleTypeFromSourceType = function simpleTypeFromSourceType(type) {\n if (MPEGURL_REGEX.test(type)) {\n return 'hls';\n }\n\n if (DASH_REGEX.test(type)) {\n return 'dash';\n } // Denotes the special case of a manifest object passed to http-streaming instead of a\n // source URL.\n //\n // See https://en.wikipedia.org/wiki/Media_type for details on specifying media types.\n //\n // In this case, vnd stands for vendor, video.js for the organization, VHS for this\n // project, and the +json suffix identifies the structure of the media type.\n\n\n if (type === 'application/vnd.videojs.vhs+json') {\n return 'vhs-json';\n }\n\n return null;\n};"],"names":["MPEGURL_REGEX","DASH_REGEX","simpleTypeFromSourceType","type"],"mappings":"AAAA,IAAIA,IAAgB,0DAChBC,IAAa,4BAaNC,IAA2B,SAAkCC,GAAM;AAC5E,SAAIH,EAAc,KAAKG,CAAI,IAClB,QAGLF,EAAW,KAAKE,CAAI,IACf,SAULA,MAAS,qCACJ,aAGF;AACT;","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { toUint8 as g, bytesMatch as m, stringToBytes as P } from "./byte-helpers.js";
|
|
2
|
+
var v = function(r) {
|
|
3
|
+
return typeof r == "string" ? P(r) : r;
|
|
4
|
+
}, c = function(r) {
|
|
5
|
+
return Array.isArray(r) ? r.map(function(n) {
|
|
6
|
+
return v(n);
|
|
7
|
+
}) : [v(r)];
|
|
8
|
+
}, z = function o(r, n, u) {
|
|
9
|
+
u === void 0 && (u = !1), n = c(n), r = g(r);
|
|
10
|
+
var f = [];
|
|
11
|
+
if (!n.length)
|
|
12
|
+
return f;
|
|
13
|
+
for (var i = 0; i < r.length; ) {
|
|
14
|
+
var l = (r[i] << 24 | r[i + 1] << 16 | r[i + 2] << 8 | r[i + 3]) >>> 0, t = r.subarray(i + 4, i + 8);
|
|
15
|
+
if (l === 0)
|
|
16
|
+
break;
|
|
17
|
+
var a = i + l;
|
|
18
|
+
if (a > r.length) {
|
|
19
|
+
if (u)
|
|
20
|
+
break;
|
|
21
|
+
a = r.length;
|
|
22
|
+
}
|
|
23
|
+
var e = r.subarray(i + 8, a);
|
|
24
|
+
m(t, n[0]) && (n.length === 1 ? f.push(e) : f.push.apply(f, o(e, n.slice(1), u))), i = a;
|
|
25
|
+
}
|
|
26
|
+
return f;
|
|
27
|
+
};
|
|
28
|
+
export {
|
|
29
|
+
z as findBox
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=mp4-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mp4-helpers.js","sources":["../../../../../../../../../node_modules/.pnpm/@videojs+vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/mp4-helpers.js"],"sourcesContent":["import { stringToBytes, toUint8, bytesMatch, bytesToString, toHexString, padStart, bytesToNumber } from './byte-helpers.js';\nimport { getAvcCodec, getHvcCodec, getAv1Codec } from './codec-helpers.js';\nimport { parseOpusHead } from './opus-helpers.js';\n\nvar normalizePath = function normalizePath(path) {\n if (typeof path === 'string') {\n return stringToBytes(path);\n }\n\n if (typeof path === 'number') {\n return path;\n }\n\n return path;\n};\n\nvar normalizePaths = function normalizePaths(paths) {\n if (!Array.isArray(paths)) {\n return [normalizePath(paths)];\n }\n\n return paths.map(function (p) {\n return normalizePath(p);\n });\n};\n\nvar DESCRIPTORS;\nexport var parseDescriptors = function parseDescriptors(bytes) {\n bytes = toUint8(bytes);\n var results = [];\n var i = 0;\n\n while (bytes.length > i) {\n var tag = bytes[i];\n var size = 0;\n var headerSize = 0; // tag\n\n headerSize++;\n var byte = bytes[headerSize]; // first byte\n\n headerSize++;\n\n while (byte & 0x80) {\n size = (byte & 0x7F) << 7;\n byte = bytes[headerSize];\n headerSize++;\n }\n\n size += byte & 0x7F;\n\n for (var z = 0; z < DESCRIPTORS.length; z++) {\n var _DESCRIPTORS$z = DESCRIPTORS[z],\n id = _DESCRIPTORS$z.id,\n parser = _DESCRIPTORS$z.parser;\n\n if (tag === id) {\n results.push(parser(bytes.subarray(headerSize, headerSize + size)));\n break;\n }\n }\n\n i += size + headerSize;\n }\n\n return results;\n};\nDESCRIPTORS = [{\n id: 0x03,\n parser: function parser(bytes) {\n var desc = {\n tag: 0x03,\n id: bytes[0] << 8 | bytes[1],\n flags: bytes[2],\n size: 3,\n dependsOnEsId: 0,\n ocrEsId: 0,\n descriptors: [],\n url: ''\n }; // depends on es id\n\n if (desc.flags & 0x80) {\n desc.dependsOnEsId = bytes[desc.size] << 8 | bytes[desc.size + 1];\n desc.size += 2;\n } // url\n\n\n if (desc.flags & 0x40) {\n var len = bytes[desc.size];\n desc.url = bytesToString(bytes.subarray(desc.size + 1, desc.size + 1 + len));\n desc.size += len;\n } // ocr es id\n\n\n if (desc.flags & 0x20) {\n desc.ocrEsId = bytes[desc.size] << 8 | bytes[desc.size + 1];\n desc.size += 2;\n }\n\n desc.descriptors = parseDescriptors(bytes.subarray(desc.size)) || [];\n return desc;\n }\n}, {\n id: 0x04,\n parser: function parser(bytes) {\n // DecoderConfigDescriptor\n var desc = {\n tag: 0x04,\n oti: bytes[0],\n streamType: bytes[1],\n bufferSize: bytes[2] << 16 | bytes[3] << 8 | bytes[4],\n maxBitrate: bytes[5] << 24 | bytes[6] << 16 | bytes[7] << 8 | bytes[8],\n avgBitrate: bytes[9] << 24 | bytes[10] << 16 | bytes[11] << 8 | bytes[12],\n descriptors: parseDescriptors(bytes.subarray(13))\n };\n return desc;\n }\n}, {\n id: 0x05,\n parser: function parser(bytes) {\n // DecoderSpecificInfo\n return {\n tag: 0x05,\n bytes: bytes\n };\n }\n}, {\n id: 0x06,\n parser: function parser(bytes) {\n // SLConfigDescriptor\n return {\n tag: 0x06,\n bytes: bytes\n };\n }\n}];\n/**\n * find any number of boxes by name given a path to it in an iso bmff\n * such as mp4.\n *\n * @param {TypedArray} bytes\n * bytes for the iso bmff to search for boxes in\n *\n * @param {Uint8Array[]|string[]|string|Uint8Array} name\n * An array of paths or a single path representing the name\n * of boxes to search through in bytes. Paths may be\n * uint8 (character codes) or strings.\n *\n * @param {boolean} [complete=false]\n * Should we search only for complete boxes on the final path.\n * This is very useful when you do not want to get back partial boxes\n * in the case of streaming files.\n *\n * @return {Uint8Array[]}\n * An array of the end paths that we found.\n */\n\nexport var findBox = function findBox(bytes, paths, complete) {\n if (complete === void 0) {\n complete = false;\n }\n\n paths = normalizePaths(paths);\n bytes = toUint8(bytes);\n var results = [];\n\n if (!paths.length) {\n // short-circuit the search for empty paths\n return results;\n }\n\n var i = 0;\n\n while (i < bytes.length) {\n var size = (bytes[i] << 24 | bytes[i + 1] << 16 | bytes[i + 2] << 8 | bytes[i + 3]) >>> 0;\n var type = bytes.subarray(i + 4, i + 8); // invalid box format.\n\n if (size === 0) {\n break;\n }\n\n var end = i + size;\n\n if (end > bytes.length) {\n // this box is bigger than the number of bytes we have\n // and complete is set, we cannot find any more boxes.\n if (complete) {\n break;\n }\n\n end = bytes.length;\n }\n\n var data = bytes.subarray(i + 8, end);\n\n if (bytesMatch(type, paths[0])) {\n if (paths.length === 1) {\n // this is the end of the path and we've found the box we were\n // looking for\n results.push(data);\n } else {\n // recursively search for the next box along the path\n results.push.apply(results, findBox(data, paths.slice(1), complete));\n }\n }\n\n i = end;\n } // we've finished searching all of bytes\n\n\n return results;\n};\n/**\n * Search for a single matching box by name in an iso bmff format like\n * mp4. This function is useful for finding codec boxes which\n * can be placed arbitrarily in sample descriptions depending\n * on the version of the file or file type.\n *\n * @param {TypedArray} bytes\n * bytes for the iso bmff to search for boxes in\n *\n * @param {string|Uint8Array} name\n * The name of the box to find.\n *\n * @return {Uint8Array[]}\n * a subarray of bytes representing the name boxed we found.\n */\n\nexport var findNamedBox = function findNamedBox(bytes, name) {\n name = normalizePath(name);\n\n if (!name.length) {\n // short-circuit the search for empty paths\n return bytes.subarray(bytes.length);\n }\n\n var i = 0;\n\n while (i < bytes.length) {\n if (bytesMatch(bytes.subarray(i, i + name.length), name)) {\n var size = (bytes[i - 4] << 24 | bytes[i - 3] << 16 | bytes[i - 2] << 8 | bytes[i - 1]) >>> 0;\n var end = size > 1 ? i + size : bytes.byteLength;\n return bytes.subarray(i + 4, end);\n }\n\n i++;\n } // we've finished searching all of bytes\n\n\n return bytes.subarray(bytes.length);\n};\n\nvar parseSamples = function parseSamples(data, entrySize, parseEntry) {\n if (entrySize === void 0) {\n entrySize = 4;\n }\n\n if (parseEntry === void 0) {\n parseEntry = function parseEntry(d) {\n return bytesToNumber(d);\n };\n }\n\n var entries = [];\n\n if (!data || !data.length) {\n return entries;\n }\n\n var entryCount = bytesToNumber(data.subarray(4, 8));\n\n for (var i = 8; entryCount; i += entrySize, entryCount--) {\n entries.push(parseEntry(data.subarray(i, i + entrySize)));\n }\n\n return entries;\n};\n\nexport var buildFrameTable = function buildFrameTable(stbl, timescale) {\n var keySamples = parseSamples(findBox(stbl, ['stss'])[0]);\n var chunkOffsets = parseSamples(findBox(stbl, ['stco'])[0]);\n var timeToSamples = parseSamples(findBox(stbl, ['stts'])[0], 8, function (entry) {\n return {\n sampleCount: bytesToNumber(entry.subarray(0, 4)),\n sampleDelta: bytesToNumber(entry.subarray(4, 8))\n };\n });\n var samplesToChunks = parseSamples(findBox(stbl, ['stsc'])[0], 12, function (entry) {\n return {\n firstChunk: bytesToNumber(entry.subarray(0, 4)),\n samplesPerChunk: bytesToNumber(entry.subarray(4, 8)),\n sampleDescriptionIndex: bytesToNumber(entry.subarray(8, 12))\n };\n });\n var stsz = findBox(stbl, ['stsz'])[0]; // stsz starts with a 4 byte sampleSize which we don't need\n\n var sampleSizes = parseSamples(stsz && stsz.length && stsz.subarray(4) || null);\n var frames = [];\n\n for (var chunkIndex = 0; chunkIndex < chunkOffsets.length; chunkIndex++) {\n var samplesInChunk = void 0;\n\n for (var i = 0; i < samplesToChunks.length; i++) {\n var sampleToChunk = samplesToChunks[i];\n var isThisOne = chunkIndex + 1 >= sampleToChunk.firstChunk && (i + 1 >= samplesToChunks.length || chunkIndex + 1 < samplesToChunks[i + 1].firstChunk);\n\n if (isThisOne) {\n samplesInChunk = sampleToChunk.samplesPerChunk;\n break;\n }\n }\n\n var chunkOffset = chunkOffsets[chunkIndex];\n\n for (var _i = 0; _i < samplesInChunk; _i++) {\n var frameEnd = sampleSizes[frames.length]; // if we don't have key samples every frame is a keyframe\n\n var keyframe = !keySamples.length;\n\n if (keySamples.length && keySamples.indexOf(frames.length + 1) !== -1) {\n keyframe = true;\n }\n\n var frame = {\n keyframe: keyframe,\n start: chunkOffset,\n end: chunkOffset + frameEnd\n };\n\n for (var k = 0; k < timeToSamples.length; k++) {\n var _timeToSamples$k = timeToSamples[k],\n sampleCount = _timeToSamples$k.sampleCount,\n sampleDelta = _timeToSamples$k.sampleDelta;\n\n if (frames.length <= sampleCount) {\n // ms to ns\n var lastTimestamp = frames.length ? frames[frames.length - 1].timestamp : 0;\n frame.timestamp = lastTimestamp + sampleDelta / timescale * 1000;\n frame.duration = sampleDelta;\n break;\n }\n }\n\n frames.push(frame);\n chunkOffset += frameEnd;\n }\n }\n\n return frames;\n};\nexport var addSampleDescription = function addSampleDescription(track, bytes) {\n var codec = bytesToString(bytes.subarray(0, 4));\n\n if (track.type === 'video') {\n track.info = track.info || {};\n track.info.width = bytes[28] << 8 | bytes[29];\n track.info.height = bytes[30] << 8 | bytes[31];\n } else if (track.type === 'audio') {\n track.info = track.info || {};\n track.info.channels = bytes[20] << 8 | bytes[21];\n track.info.bitDepth = bytes[22] << 8 | bytes[23];\n track.info.sampleRate = bytes[28] << 8 | bytes[29];\n }\n\n if (codec === 'avc1') {\n var avcC = findNamedBox(bytes, 'avcC'); // AVCDecoderConfigurationRecord\n\n codec += \".\" + getAvcCodec(avcC);\n track.info.avcC = avcC; // TODO: do we need to parse all this?\n\n /* {\n configurationVersion: avcC[0],\n profile: avcC[1],\n profileCompatibility: avcC[2],\n level: avcC[3],\n lengthSizeMinusOne: avcC[4] & 0x3\n };\n let spsNalUnitCount = avcC[5] & 0x1F;\n const spsNalUnits = track.info.avc.spsNalUnits = [];\n // past spsNalUnitCount\n let offset = 6;\n while (spsNalUnitCount--) {\n const nalLen = avcC[offset] << 8 | avcC[offset + 1];\n spsNalUnits.push(avcC.subarray(offset + 2, offset + 2 + nalLen));\n offset += nalLen + 2;\n }\n let ppsNalUnitCount = avcC[offset];\n const ppsNalUnits = track.info.avc.ppsNalUnits = [];\n // past ppsNalUnitCount\n offset += 1;\n while (ppsNalUnitCount--) {\n const nalLen = avcC[offset] << 8 | avcC[offset + 1];\n ppsNalUnits.push(avcC.subarray(offset + 2, offset + 2 + nalLen));\n offset += nalLen + 2;\n }*/\n // HEVCDecoderConfigurationRecord\n } else if (codec === 'hvc1' || codec === 'hev1') {\n codec += \".\" + getHvcCodec(findNamedBox(bytes, 'hvcC'));\n } else if (codec === 'mp4a' || codec === 'mp4v') {\n var esds = findNamedBox(bytes, 'esds');\n var esDescriptor = parseDescriptors(esds.subarray(4))[0];\n var decoderConfig = esDescriptor && esDescriptor.descriptors.filter(function (_ref) {\n var tag = _ref.tag;\n return tag === 0x04;\n })[0];\n\n if (decoderConfig) {\n // most codecs do not have a further '.'\n // such as 0xa5 for ac-3 and 0xa6 for e-ac-3\n codec += '.' + toHexString(decoderConfig.oti);\n\n if (decoderConfig.oti === 0x40) {\n codec += '.' + (decoderConfig.descriptors[0].bytes[0] >> 3).toString();\n } else if (decoderConfig.oti === 0x20) {\n codec += '.' + decoderConfig.descriptors[0].bytes[4].toString();\n } else if (decoderConfig.oti === 0xdd) {\n codec = 'vorbis';\n }\n } else if (track.type === 'audio') {\n codec += '.40.2';\n } else {\n codec += '.20.9';\n }\n } else if (codec === 'av01') {\n // AV1DecoderConfigurationRecord\n codec += \".\" + getAv1Codec(findNamedBox(bytes, 'av1C'));\n } else if (codec === 'vp09') {\n // VPCodecConfigurationRecord\n var vpcC = findNamedBox(bytes, 'vpcC'); // https://www.webmproject.org/vp9/mp4/\n\n var profile = vpcC[0];\n var level = vpcC[1];\n var bitDepth = vpcC[2] >> 4;\n var chromaSubsampling = (vpcC[2] & 0x0F) >> 1;\n var videoFullRangeFlag = (vpcC[2] & 0x0F) >> 3;\n var colourPrimaries = vpcC[3];\n var transferCharacteristics = vpcC[4];\n var matrixCoefficients = vpcC[5];\n codec += \".\" + padStart(profile, 2, '0');\n codec += \".\" + padStart(level, 2, '0');\n codec += \".\" + padStart(bitDepth, 2, '0');\n codec += \".\" + padStart(chromaSubsampling, 2, '0');\n codec += \".\" + padStart(colourPrimaries, 2, '0');\n codec += \".\" + padStart(transferCharacteristics, 2, '0');\n codec += \".\" + padStart(matrixCoefficients, 2, '0');\n codec += \".\" + padStart(videoFullRangeFlag, 2, '0');\n } else if (codec === 'theo') {\n codec = 'theora';\n } else if (codec === 'spex') {\n codec = 'speex';\n } else if (codec === '.mp3') {\n codec = 'mp4a.40.34';\n } else if (codec === 'msVo') {\n codec = 'vorbis';\n } else if (codec === 'Opus') {\n codec = 'opus';\n var dOps = findNamedBox(bytes, 'dOps');\n track.info.opus = parseOpusHead(dOps); // TODO: should this go into the webm code??\n // Firefox requires a codecDelay for opus playback\n // see https://bugzilla.mozilla.org/show_bug.cgi?id=1276238\n\n track.info.codecDelay = 6500000;\n } else {\n codec = codec.toLowerCase();\n }\n /* eslint-enable */\n // flac, ac-3, ec-3, opus\n\n\n track.codec = codec;\n};\nexport var parseTracks = function parseTracks(bytes, frameTable) {\n if (frameTable === void 0) {\n frameTable = true;\n }\n\n bytes = toUint8(bytes);\n var traks = findBox(bytes, ['moov', 'trak'], true);\n var tracks = [];\n traks.forEach(function (trak) {\n var track = {\n bytes: trak\n };\n var mdia = findBox(trak, ['mdia'])[0];\n var hdlr = findBox(mdia, ['hdlr'])[0];\n var trakType = bytesToString(hdlr.subarray(8, 12));\n\n if (trakType === 'soun') {\n track.type = 'audio';\n } else if (trakType === 'vide') {\n track.type = 'video';\n } else {\n track.type = trakType;\n }\n\n var tkhd = findBox(trak, ['tkhd'])[0];\n\n if (tkhd) {\n var view = new DataView(tkhd.buffer, tkhd.byteOffset, tkhd.byteLength);\n var tkhdVersion = view.getUint8(0);\n track.number = tkhdVersion === 0 ? view.getUint32(12) : view.getUint32(20);\n }\n\n var mdhd = findBox(mdia, ['mdhd'])[0];\n\n if (mdhd) {\n // mdhd is a FullBox, meaning it will have its own version as the first byte\n var version = mdhd[0];\n var index = version === 0 ? 12 : 20;\n track.timescale = (mdhd[index] << 24 | mdhd[index + 1] << 16 | mdhd[index + 2] << 8 | mdhd[index + 3]) >>> 0;\n }\n\n var stbl = findBox(mdia, ['minf', 'stbl'])[0];\n var stsd = findBox(stbl, ['stsd'])[0];\n var descriptionCount = bytesToNumber(stsd.subarray(4, 8));\n var offset = 8; // add codec and codec info\n\n while (descriptionCount--) {\n var len = bytesToNumber(stsd.subarray(offset, offset + 4));\n var sampleDescriptor = stsd.subarray(offset + 4, offset + 4 + len);\n addSampleDescription(track, sampleDescriptor);\n offset += 4 + len;\n }\n\n if (frameTable) {\n track.frameTable = buildFrameTable(stbl, track.timescale);\n } // codec has no sub parameters\n\n\n tracks.push(track);\n });\n return tracks;\n};\nexport var parseMediaInfo = function parseMediaInfo(bytes) {\n var mvhd = findBox(bytes, ['moov', 'mvhd'], true)[0];\n\n if (!mvhd || !mvhd.length) {\n return;\n }\n\n var info = {}; // ms to ns\n // mvhd v1 has 8 byte duration and other fields too\n\n if (mvhd[0] === 1) {\n info.timestampScale = bytesToNumber(mvhd.subarray(20, 24));\n info.duration = bytesToNumber(mvhd.subarray(24, 32));\n } else {\n info.timestampScale = bytesToNumber(mvhd.subarray(12, 16));\n info.duration = bytesToNumber(mvhd.subarray(16, 20));\n }\n\n info.bytes = mvhd;\n return info;\n};"],"names":["normalizePath","path","stringToBytes","normalizePaths","paths","p","findBox","bytes","complete","toUint8","results","size","type","end","data","bytesMatch"],"mappings":";AAIA,IAAIA,IAAgB,SAAuBC,GAAM;AAC/C,SAAI,OAAOA,KAAS,WACXC,EAAcD,CAAI,IAIlBA;AAIX,GAEIE,IAAiB,SAAwBC,GAAO;AAClD,SAAK,MAAM,QAAQA,CAAK,IAIjBA,EAAM,IAAI,SAAUC,GAAG;AAC5B,WAAOL,EAAcK,CAAC;AAAA,EAC1B,CAAG,IALQ,CAACL,EAAcI,CAAK,CAAC;AAMhC,GAoIWE,IAAU,SAASA,EAAQC,GAAOH,GAAOI,GAAU;AAC5D,EAAIA,MAAa,WACfA,IAAW,KAGbJ,IAAQD,EAAeC,CAAK,GAC5BG,IAAQE,EAAQF,CAAK;AACrB,MAAIG,IAAU,CAAE;AAEhB,MAAI,CAACN,EAAM;AAET,WAAOM;AAKT,WAFI,IAAI,GAED,IAAIH,EAAM,UAAQ;AACvB,QAAII,KAAQJ,EAAM,CAAC,KAAK,KAAKA,EAAM,IAAI,CAAC,KAAK,KAAKA,EAAM,IAAI,CAAC,KAAK,IAAIA,EAAM,IAAI,CAAC,OAAO,GACpFK,IAAOL,EAAM,SAAS,IAAI,GAAG,IAAI,CAAC;AAEtC,QAAII,MAAS;AACX;AAGF,QAAIE,IAAM,IAAIF;AAEd,QAAIE,IAAMN,EAAM,QAAQ;AAGtB,UAAIC;AACF;AAGF,MAAAK,IAAMN,EAAM;AAAA,IAClB;AAEI,QAAIO,IAAOP,EAAM,SAAS,IAAI,GAAGM,CAAG;AAEpC,IAAIE,EAAWH,GAAMR,EAAM,CAAC,CAAC,MACvBA,EAAM,WAAW,IAGnBM,EAAQ,KAAKI,CAAI,IAGjBJ,EAAQ,KAAK,MAAMA,GAASJ,EAAQQ,GAAMV,EAAM,MAAM,CAAC,GAAGI,CAAQ,CAAC,IAIvE,IAAIK;AAAA,EACL;AAGD,SAAOH;AACT;","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { toUint8 as h, bytesMatch as t } from "./byte-helpers.js";
|
|
2
|
+
var c = h([0, 0, 0, 1]), l = h([0, 0, 1]), e = h([0, 0, 3]), E = function(r) {
|
|
3
|
+
for (var n = [], i = 1; i < r.length - 2; )
|
|
4
|
+
t(r.subarray(i, i + 3), e) && (n.push(i + 2), i++), i++;
|
|
5
|
+
if (n.length === 0)
|
|
6
|
+
return r;
|
|
7
|
+
var v = r.length - n.length, a = new Uint8Array(v), o = 0;
|
|
8
|
+
for (i = 0; i < v; o++, i++)
|
|
9
|
+
o === n[0] && (o++, n.shift()), a[i] = r[o];
|
|
10
|
+
return a;
|
|
11
|
+
}, N = function(r, n, i, v) {
|
|
12
|
+
r = h(r), i = [].concat(i);
|
|
13
|
+
for (var a = 0, o, d = 0; a < r.length && (d < v || o); ) {
|
|
14
|
+
var u = void 0;
|
|
15
|
+
if (t(r.subarray(a), c) ? u = 4 : t(r.subarray(a), l) && (u = 3), !u) {
|
|
16
|
+
a++;
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
if (d++, o)
|
|
20
|
+
return E(r.subarray(o, a));
|
|
21
|
+
var f = void 0;
|
|
22
|
+
n === "h264" ? f = r[a + u] & 31 : n === "h265" && (f = r[a + u] >> 1 & 63), i.indexOf(f) !== -1 && (o = a + u), a += u + (n === "h264" ? 1 : 2);
|
|
23
|
+
}
|
|
24
|
+
return r.subarray(0, 0);
|
|
25
|
+
}, w = function(r, n, i) {
|
|
26
|
+
return N(r, "h264", n, i);
|
|
27
|
+
}, P = function(r, n, i) {
|
|
28
|
+
return N(r, "h265", n, i);
|
|
29
|
+
};
|
|
30
|
+
export {
|
|
31
|
+
e as EMULATION_PREVENTION,
|
|
32
|
+
c as NAL_TYPE_ONE,
|
|
33
|
+
l as NAL_TYPE_TWO,
|
|
34
|
+
E as discardEmulationPreventionBytes,
|
|
35
|
+
w as findH264Nal,
|
|
36
|
+
P as findH265Nal,
|
|
37
|
+
N as findNal
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=nal-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nal-helpers.js","sources":["../../../../../../../../../node_modules/.pnpm/@videojs+vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/nal-helpers.js"],"sourcesContent":["import { bytesMatch, toUint8 } from './byte-helpers.js';\nexport var NAL_TYPE_ONE = toUint8([0x00, 0x00, 0x00, 0x01]);\nexport var NAL_TYPE_TWO = toUint8([0x00, 0x00, 0x01]);\nexport var EMULATION_PREVENTION = toUint8([0x00, 0x00, 0x03]);\n/**\n * Expunge any \"Emulation Prevention\" bytes from a \"Raw Byte\n * Sequence Payload\"\n *\n * @param data {Uint8Array} the bytes of a RBSP from a NAL\n * unit\n * @return {Uint8Array} the RBSP without any Emulation\n * Prevention Bytes\n */\n\nexport var discardEmulationPreventionBytes = function discardEmulationPreventionBytes(bytes) {\n var positions = [];\n var i = 1; // Find all `Emulation Prevention Bytes`\n\n while (i < bytes.length - 2) {\n if (bytesMatch(bytes.subarray(i, i + 3), EMULATION_PREVENTION)) {\n positions.push(i + 2);\n i++;\n }\n\n i++;\n } // If no Emulation Prevention Bytes were found just return the original\n // array\n\n\n if (positions.length === 0) {\n return bytes;\n } // Create a new array to hold the NAL unit data\n\n\n var newLength = bytes.length - positions.length;\n var newData = new Uint8Array(newLength);\n var sourceIndex = 0;\n\n for (i = 0; i < newLength; sourceIndex++, i++) {\n if (sourceIndex === positions[0]) {\n // Skip this byte\n sourceIndex++; // Remove this position index\n\n positions.shift();\n }\n\n newData[i] = bytes[sourceIndex];\n }\n\n return newData;\n};\nexport var findNal = function findNal(bytes, dataType, types, nalLimit) {\n if (nalLimit === void 0) {\n nalLimit = Infinity;\n }\n\n bytes = toUint8(bytes);\n types = [].concat(types);\n var i = 0;\n var nalStart;\n var nalsFound = 0; // keep searching until:\n // we reach the end of bytes\n // we reach the maximum number of nals they want to seach\n // NOTE: that we disregard nalLimit when we have found the start\n // of the nal we want so that we can find the end of the nal we want.\n\n while (i < bytes.length && (nalsFound < nalLimit || nalStart)) {\n var nalOffset = void 0;\n\n if (bytesMatch(bytes.subarray(i), NAL_TYPE_ONE)) {\n nalOffset = 4;\n } else if (bytesMatch(bytes.subarray(i), NAL_TYPE_TWO)) {\n nalOffset = 3;\n } // we are unsynced,\n // find the next nal unit\n\n\n if (!nalOffset) {\n i++;\n continue;\n }\n\n nalsFound++;\n\n if (nalStart) {\n return discardEmulationPreventionBytes(bytes.subarray(nalStart, i));\n }\n\n var nalType = void 0;\n\n if (dataType === 'h264') {\n nalType = bytes[i + nalOffset] & 0x1f;\n } else if (dataType === 'h265') {\n nalType = bytes[i + nalOffset] >> 1 & 0x3f;\n }\n\n if (types.indexOf(nalType) !== -1) {\n nalStart = i + nalOffset;\n } // nal header is 1 length for h264, and 2 for h265\n\n\n i += nalOffset + (dataType === 'h264' ? 1 : 2);\n }\n\n return bytes.subarray(0, 0);\n};\nexport var findH264Nal = function findH264Nal(bytes, type, nalLimit) {\n return findNal(bytes, 'h264', type, nalLimit);\n};\nexport var findH265Nal = function findH265Nal(bytes, type, nalLimit) {\n return findNal(bytes, 'h265', type, nalLimit);\n};"],"names":["NAL_TYPE_ONE","toUint8","NAL_TYPE_TWO","EMULATION_PREVENTION","discardEmulationPreventionBytes","bytes","positions","bytesMatch","newLength","newData","sourceIndex","findNal","dataType","types","nalLimit","i","nalStart","nalsFound","nalOffset","nalType","findH264Nal","type","findH265Nal"],"mappings":";AACU,IAACA,IAAeC,EAAQ,CAAC,GAAM,GAAM,GAAM,CAAI,CAAC,GAC/CC,IAAeD,EAAQ,CAAC,GAAM,GAAM,CAAI,CAAC,GACzCE,IAAuBF,EAAQ,CAAC,GAAM,GAAM,CAAI,CAAC,GAWjDG,IAAkC,SAAyCC,GAAO;AAI3F,WAHIC,IAAY,CAAE,GACd,IAAI,GAED,IAAID,EAAM,SAAS;AACxB,IAAIE,EAAWF,EAAM,SAAS,GAAG,IAAI,CAAC,GAAGF,CAAoB,MAC3DG,EAAU,KAAK,IAAI,CAAC,GACpB,MAGF;AAKF,MAAIA,EAAU,WAAW;AACvB,WAAOD;AAIT,MAAIG,IAAYH,EAAM,SAASC,EAAU,QACrCG,IAAU,IAAI,WAAWD,CAAS,GAClCE,IAAc;AAElB,OAAK,IAAI,GAAG,IAAIF,GAAWE,KAAe;AACxC,IAAIA,MAAgBJ,EAAU,CAAC,MAE7BI,KAEAJ,EAAU,MAAO,IAGnBG,EAAQ,CAAC,IAAIJ,EAAMK,CAAW;AAGhC,SAAOD;AACT,GACWE,IAAU,SAAiBN,GAAOO,GAAUC,GAAOC,GAAU;AAKtE,EAAAT,IAAQJ,EAAQI,CAAK,GACrBQ,IAAQ,CAAA,EAAG,OAAOA,CAAK;AASvB,WARIE,IAAI,GACJC,GACAC,IAAY,GAMTF,IAAIV,EAAM,WAAWY,IAAYH,KAAYE,MAAW;AAC7D,QAAIE,IAAY;AAUhB,QARIX,EAAWF,EAAM,SAASU,CAAC,GAAGf,CAAY,IAC5CkB,IAAY,IACHX,EAAWF,EAAM,SAASU,CAAC,GAAGb,CAAY,MACnDgB,IAAY,IAKV,CAACA,GAAW;AACd,MAAAH;AACA;AAAA,IACN;AAII,QAFAE,KAEID;AACF,aAAOZ,EAAgCC,EAAM,SAASW,GAAUD,CAAC,CAAC;AAGpE,QAAII,IAAU;AAEd,IAAIP,MAAa,SACfO,IAAUd,EAAMU,IAAIG,CAAS,IAAI,KACxBN,MAAa,WACtBO,IAAUd,EAAMU,IAAIG,CAAS,KAAK,IAAI,KAGpCL,EAAM,QAAQM,CAAO,MAAM,OAC7BH,IAAWD,IAAIG,IAIjBH,KAAKG,KAAaN,MAAa,SAAS,IAAI;AAAA,EAChD;AAEE,SAAOP,EAAM,SAAS,GAAG,CAAC;AAC5B,GACWe,IAAc,SAAqBf,GAAOgB,GAAMP,GAAU;AACnE,SAAOH,EAAQN,GAAO,QAAQgB,GAAMP,CAAQ;AAC9C,GACWQ,IAAc,SAAqBjB,GAAOgB,GAAMP,GAAU;AACnE,SAAOH,EAAQN,GAAO,QAAQgB,GAAMP,CAAQ;AAC9C;","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import o from "../../../../../../../../_virtual/window.js";
|
|
2
|
+
var n = "https://example.com", l = function(t, r) {
|
|
3
|
+
if (/^[a-z]+:/i.test(r))
|
|
4
|
+
return r;
|
|
5
|
+
/^data:/.test(t) && (t = o.location && o.location.href || "");
|
|
6
|
+
var i = /^\/\//.test(t), c = !o.location && !/\/\//i.test(t);
|
|
7
|
+
t = new o.URL(t, o.location || n);
|
|
8
|
+
var e = new URL(r, t);
|
|
9
|
+
return c ? e.href.slice(n.length) : i ? e.href.slice(e.protocol.length) : e.href;
|
|
10
|
+
};
|
|
11
|
+
export {
|
|
12
|
+
l as default
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=resolve-url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-url.js","sources":["../../../../../../../../../node_modules/.pnpm/@videojs+vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/resolve-url.js"],"sourcesContent":["import window from 'global/window';\nvar DEFAULT_LOCATION = 'https://example.com';\n\nvar resolveUrl = function resolveUrl(baseUrl, relativeUrl) {\n // return early if we don't need to resolve\n if (/^[a-z]+:/i.test(relativeUrl)) {\n return relativeUrl;\n } // if baseUrl is a data URI, ignore it and resolve everything relative to window.location\n\n\n if (/^data:/.test(baseUrl)) {\n baseUrl = window.location && window.location.href || '';\n }\n\n var protocolLess = /^\\/\\//.test(baseUrl); // remove location if window.location isn't available (i.e. we're in node)\n // and if baseUrl isn't an absolute url\n\n var removeLocation = !window.location && !/\\/\\//i.test(baseUrl); // if the base URL is relative then combine with the current location\n\n baseUrl = new window.URL(baseUrl, window.location || DEFAULT_LOCATION);\n var newUrl = new URL(relativeUrl, baseUrl); // if we're a protocol-less url, remove the protocol\n // and if we're location-less, remove the location\n // otherwise, return the url unmodified\n\n if (removeLocation) {\n return newUrl.href.slice(DEFAULT_LOCATION.length);\n } else if (protocolLess) {\n return newUrl.href.slice(newUrl.protocol.length);\n }\n\n return newUrl.href;\n};\n\nexport default resolveUrl;"],"names":["DEFAULT_LOCATION","resolveUrl","baseUrl","relativeUrl","window","protocolLess","removeLocation","newUrl"],"mappings":";AACA,IAAIA,IAAmB,uBAEnBC,IAAa,SAAoBC,GAASC,GAAa;AAEzD,MAAI,YAAY,KAAKA,CAAW;AAC9B,WAAOA;AAIT,EAAI,SAAS,KAAKD,CAAO,MACvBA,IAAUE,EAAO,YAAYA,EAAO,SAAS,QAAQ;AAGvD,MAAIC,IAAe,QAAQ,KAAKH,CAAO,GAGnCI,IAAiB,CAACF,EAAO,YAAY,CAAC,QAAQ,KAAKF,CAAO;AAE9D,EAAAA,IAAU,IAAIE,EAAO,IAAIF,GAASE,EAAO,YAAYJ,CAAgB;AACrE,MAAIO,IAAS,IAAI,IAAIJ,GAAaD,CAAO;AAIzC,SAAII,IACKC,EAAO,KAAK,MAAMP,EAAiB,MAAM,IACvCK,IACFE,EAAO,KAAK,MAAMA,EAAO,SAAS,MAAM,IAG1CA,EAAO;AAChB;","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
var h = /* @__PURE__ */ function() {
|
|
2
|
+
function a() {
|
|
3
|
+
this.listeners = {};
|
|
4
|
+
}
|
|
5
|
+
var e = a.prototype;
|
|
6
|
+
return e.on = function(s, t) {
|
|
7
|
+
this.listeners[s] || (this.listeners[s] = []), this.listeners[s].push(t);
|
|
8
|
+
}, e.off = function(s, t) {
|
|
9
|
+
if (!this.listeners[s])
|
|
10
|
+
return !1;
|
|
11
|
+
var i = this.listeners[s].indexOf(t);
|
|
12
|
+
return this.listeners[s] = this.listeners[s].slice(0), this.listeners[s].splice(i, 1), i > -1;
|
|
13
|
+
}, e.trigger = function(s) {
|
|
14
|
+
var t = this.listeners[s];
|
|
15
|
+
if (t)
|
|
16
|
+
if (arguments.length === 2)
|
|
17
|
+
for (var i = t.length, n = 0; n < i; ++n)
|
|
18
|
+
t[n].call(this, arguments[1]);
|
|
19
|
+
else
|
|
20
|
+
for (var o = Array.prototype.slice.call(arguments, 1), f = t.length, l = 0; l < f; ++l)
|
|
21
|
+
t[l].apply(this, o);
|
|
22
|
+
}, e.dispose = function() {
|
|
23
|
+
this.listeners = {};
|
|
24
|
+
}, e.pipe = function(s) {
|
|
25
|
+
this.on("data", function(t) {
|
|
26
|
+
s.push(t);
|
|
27
|
+
});
|
|
28
|
+
}, a;
|
|
29
|
+
}();
|
|
30
|
+
export {
|
|
31
|
+
h as default
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.js","sources":["../../../../../../../../../node_modules/.pnpm/@videojs+vhs-utils@4.1.1/node_modules/@videojs/vhs-utils/es/stream.js"],"sourcesContent":["/**\n * @file stream.js\n */\n\n/**\n * A lightweight readable stream implemention that handles event dispatching.\n *\n * @class Stream\n */\nvar Stream = /*#__PURE__*/function () {\n function Stream() {\n this.listeners = {};\n }\n /**\n * Add a listener for a specified event type.\n *\n * @param {string} type the event name\n * @param {Function} listener the callback to be invoked when an event of\n * the specified type occurs\n */\n\n\n var _proto = Stream.prototype;\n\n _proto.on = function on(type, listener) {\n if (!this.listeners[type]) {\n this.listeners[type] = [];\n }\n\n this.listeners[type].push(listener);\n }\n /**\n * Remove a listener for a specified event type.\n *\n * @param {string} type the event name\n * @param {Function} listener a function previously registered for this\n * type of event through `on`\n * @return {boolean} if we could turn it off or not\n */\n ;\n\n _proto.off = function off(type, listener) {\n if (!this.listeners[type]) {\n return false;\n }\n\n var index = this.listeners[type].indexOf(listener); // TODO: which is better?\n // In Video.js we slice listener functions\n // on trigger so that it does not mess up the order\n // while we loop through.\n //\n // Here we slice on off so that the loop in trigger\n // can continue using it's old reference to loop without\n // messing up the order.\n\n this.listeners[type] = this.listeners[type].slice(0);\n this.listeners[type].splice(index, 1);\n return index > -1;\n }\n /**\n * Trigger an event of the specified type on this stream. Any additional\n * arguments to this function are passed as parameters to event listeners.\n *\n * @param {string} type the event name\n */\n ;\n\n _proto.trigger = function trigger(type) {\n var callbacks = this.listeners[type];\n\n if (!callbacks) {\n return;\n } // Slicing the arguments on every invocation of this method\n // can add a significant amount of overhead. Avoid the\n // intermediate object creation for the common case of a\n // single callback argument\n\n\n if (arguments.length === 2) {\n var length = callbacks.length;\n\n for (var i = 0; i < length; ++i) {\n callbacks[i].call(this, arguments[1]);\n }\n } else {\n var args = Array.prototype.slice.call(arguments, 1);\n var _length = callbacks.length;\n\n for (var _i = 0; _i < _length; ++_i) {\n callbacks[_i].apply(this, args);\n }\n }\n }\n /**\n * Destroys the stream and cleans up.\n */\n ;\n\n _proto.dispose = function dispose() {\n this.listeners = {};\n }\n /**\n * Forwards all `data` events on this stream to the destination stream. The\n * destination stream should provide a method `push` to receive the data\n * events as they arrive.\n *\n * @param {Stream} destination the stream that will receive all `data` events\n * @see http://nodejs.org/api/stream.html#stream_readable_pipe_destination_options\n */\n ;\n\n _proto.pipe = function pipe(destination) {\n this.on('data', function (data) {\n destination.push(data);\n });\n };\n\n return Stream;\n}();\n\nexport { Stream as default };"],"names":["Stream","_proto","type","listener","index","callbacks","length","i","args","_length","_i","destination","data"],"mappings":"AASG,IAACA,IAAsB,2BAAY;AACpC,WAASA,IAAS;AAChB,SAAK,YAAY,CAAE;AAAA,EACvB;AAUE,MAAIC,IAASD,EAAO;AAEpB,SAAAC,EAAO,KAAK,SAAYC,GAAMC,GAAU;AACtC,IAAK,KAAK,UAAUD,CAAI,MACtB,KAAK,UAAUA,CAAI,IAAI,CAAE,IAG3B,KAAK,UAAUA,CAAI,EAAE,KAAKC,CAAQ;AAAA,EACtC,GAWEF,EAAO,MAAM,SAAaC,GAAMC,GAAU;AACxC,QAAI,CAAC,KAAK,UAAUD,CAAI;AACtB,aAAO;AAGT,QAAIE,IAAQ,KAAK,UAAUF,CAAI,EAAE,QAAQC,CAAQ;AASjD,gBAAK,UAAUD,CAAI,IAAI,KAAK,UAAUA,CAAI,EAAE,MAAM,CAAC,GACnD,KAAK,UAAUA,CAAI,EAAE,OAAOE,GAAO,CAAC,GAC7BA,IAAQ;AAAA,EACnB,GASEH,EAAO,UAAU,SAAiBC,GAAM;AACtC,QAAIG,IAAY,KAAK,UAAUH,CAAI;AAEnC,QAAKG;AAQL,UAAI,UAAU,WAAW;AAGvB,iBAFIC,IAASD,EAAU,QAEdE,IAAI,GAAGA,IAAID,GAAQ,EAAEC;AAC5B,UAAAF,EAAUE,CAAC,EAAE,KAAK,MAAM,UAAU,CAAC,CAAC;AAAA;AAMtC,iBAHIC,IAAO,MAAM,UAAU,MAAM,KAAK,WAAW,CAAC,GAC9CC,IAAUJ,EAAU,QAEfK,IAAK,GAAGA,IAAKD,GAAS,EAAEC;AAC/B,UAAAL,EAAUK,CAAE,EAAE,MAAM,MAAMF,CAAI;AAAA,EAGtC,GAMEP,EAAO,UAAU,WAAmB;AAClC,SAAK,YAAY,CAAE;AAAA,EACvB,GAWEA,EAAO,OAAO,SAAcU,GAAa;AACvC,SAAK,GAAG,QAAQ,SAAUC,GAAM;AAC9B,MAAAD,EAAY,KAAKC,CAAI;AAAA,IAC3B,CAAK;AAAA,EACF,GAEMZ;AACT,EAAC;","x_google_ignoreList":[0]}
|