mirror of
https://github.com/shaka-project/shaka-player.git
synced 2026-06-14 15:56:38 +03:00
921206dc1d
This PR introduces a Web Worker for transmuxing resolving https://github.com/shaka-project/shaka-player/issues/1735 - The worker bundle is compiled separately - The build output is embedded as a string constant and then wrapped in a Blob to create an inline Worker URL (HLS.js does this very similarly) - `TransmuxerProxy` is created wrapping a real transmuxer, but no worker is started yet - on the first `transmux()` call, it checks if the device supports worker transmuxing - For each transmux() call: the buffer is copied, then zero-copy transferred to the worker. A PublicPromise is stored under a reqId with a timeout timer, and the main thread awaits it. - The worker transmuxes and posts back transmuxed (or error). The shared message listener routes the response to the right proxy instance by id, which resolves the promise and cancels the timer. - When the last proxy instance is destroyed, the worker is terminated and the blob URL is revoked. loaded inside the worker. - Some low-end devices have been excluded since their Worker support is questionable There most likely is a better way to do this - please let me know
37 lines
2.0 KiB
JSON
37 lines
2.0 KiB
JSON
[
|
|
{ "welcome": { "title": "Welcome to Shaka Player" } },
|
|
{ "basic-usage": { "title": "Basic Usage" } },
|
|
{ "debugging": { "title": "Debugging" } },
|
|
{ "config": { "title": "Configuration" } },
|
|
{ "network-and-buffering-config": { "title": "Network and Buffering Configuration" } },
|
|
{ "drm-config": { "title": "DRM Configuration" } },
|
|
{ "license-server-auth": { "title": "License Server Authentication" } },
|
|
{ "license-wrapping": { "title": "License Wrapping" } },
|
|
{ "moq": { "title": "MoQ" } },
|
|
{ "preload": { "title": "Preloading" } },
|
|
{ "transmuxing-in-worker": { "title": "Transmuxing in Worker" } },
|
|
{ "ui": { "title": "UI Library" } },
|
|
{ "ui-customization": { "title": "Configuring the UI" } },
|
|
{ "text-displayer": { "title": "Configuring text displayer" } },
|
|
{ "screen-resolution-detection": { "title": "Screen resolution detection" } },
|
|
{ "errors": { "title": "Error Handling" } },
|
|
{ "a11y": { "title": "Creating accessible buttons" } },
|
|
{ "ad_monetization": { "title": "Monetization with Ads" } },
|
|
{ "plugins": { "title": "Plugins and Customizing the Build" } },
|
|
{ "manifest-parser": { "title": "Manifest Parser Plugins" } },
|
|
{ "architecture": { "title": "Architecture Diagrams" } },
|
|
{ "service-worker": { "title": "Service Worker Caching" } },
|
|
{ "offline": { "title": "Offline Storage and Playback" } },
|
|
{ "widevine-service-certs": { "title": "Widevine Service Certificates" } },
|
|
{ "fairplay": { "title": "FairPlay support" } },
|
|
{ "application-level-redirects": { "title": "Application-Level Redirects" } },
|
|
{ "blob-url": { "title": "Blob URL" } },
|
|
{ "selenium-grid-config": { "title": "Selenium Grid Config" } },
|
|
{ "faq": { "title": "Frequently Asked Questions" } },
|
|
{ "upgrade": { "title": "Upgrade Guide" } },
|
|
{ "upgrade-manifest": { "title": "ManifestParser Upgrade Guide" } },
|
|
{ "lcevc": { "title": "LCEVC Quick Start" } },
|
|
{ "accessibility": { "title": "Accessibility" } },
|
|
{ "queue-manager": { "title": "QueueManager" } }
|
|
]
|