dash.js

Open Source Media Player

Seamless and reliable DASH streaming on any browser-based device

View onGitHub
5513
1732

Sponsors

Trusted by the industry leaders

Latest updates from GitHub

Avoid Redundant DRM License Requests for Already-Usable Keys## Summary When a multi-key DRM license has already been acquired, dash.js currently issues redundant license requests for key IDs (KIDs) that the CDM already reports as `usable`. This feature adds checks at multiple points in the protection pipeline to skip unnecessary license exchanges, reducing network overhead and improving playback startup for multi-period or multi-key encrypted content. ## Motivation In scenarios involving multi-key licenses (e.g. a single license response covers multiple KIDs), the player may encounter `needkey`/`encrypted` events or manifest-signaled init data for KIDs that are already available in the CDM. Without this optimization, each event triggers a full license server round-trip even though the CDM can already decrypt the content. This is wasteful and can introduce unnecessary latency, especially on low-bandwidth connections or with rate-limited license servers. I have implemented the changes locally with the help of AI. Please advise i. f you would like me to submit a PR. Feel free to reach out on slack or discord.Opened by petegalt10 hours ago
Optimize CI/CD pipeline performance - Plan's proposal**Problem** The current CI/CD setup does more work than necessary: - linting runs more than once in the build path - modern and legacy bundles are built sequentially - deploy workflows rebuild and re-verify work that is already covered elsewhere - the same `master` commit is rebuilt by multiple deploy workflows - the PR functional job rebuilds the modern bundle instead of reusing it - `publish_npm` triggers the build twice - webpack filesystem cache is not used - some dependency installation and caching paths are still suboptimal The result is slower feedback and unnecessary runner usage. **Proposed changes** `P1` low-risk cleanup: - [ ] remove the explicit build step from `publish_npm.yml` and rely on `prepack` - [ ] add `karma-webdriver-launcher` to `devDependencies` - [ ] add workflow `concurrency` to PR and branch verification - [ ] narrow the root cache key to the root `package-lock.json` - [ ] use `npm ci` for `samples/network-interceptor` `P2` medium-scope improvements: - [ ] keep only one ESLint pass in the CI build path - [ ] split PR verification into small jobs so the functional job can reuse a `modern` build artifact without forcing the whole workflow to become sequential - [ ] evaluate parallel modern/legacy builds - [ ] evaluate webpack filesystem cache, locally first and then in CI if it proves useful `P3` structural changes: - [ ] consolidate `master` deploys around a single build - [ ] consider a deploy-specific `build-only` path - [ ] consider path filters for documentation-only changes **Execution plan** - land `P1` in one small PR - land PR artifact reuse as a separate PR - handle deploy consolidation separately, since it changes workflow structure more deeply - keep build parallelization and webpack cache behind benchmarks **Success criteria** - `verify_pull_request` gets faster, especially on the functional path - `publish_npm` performs only one effective build - a single `master` commit is no longer rebuilt by multiple deploy workflows - cache behavior improves or stays stable - verification coverage does not regress Opened by PascalThuet15 hours ago
The previously set quality is lost, manually.The video stream is selected based on the size of the container + auto-tune. Next, I manually change the quality to, say, 144 and turn off the settings. `this.dsh.updateSettings({streaming:{abr:{limitBitrateByPortal:false, autoSwitchBitrate:{video:false}}}});` Auto-tuning and auto-tuning relative to the container size is disabled, 144 is set to manual. OK, then I switch to another manifest. `this.dsh.attachSource(`/video/2/manifest.mpd`);` The previously selected quality is missing, auto-tuning is disabled ``` this.dsh.attachSource(`/video/2/manifest.mpd`); false, false console.log(this.dsh.getSettings('video').streaming.abr.autoSwitchBitrate.video, this.dsh.getSettings('video').streaming.abr.limitBitrateByPortal); ``` The disabled settings before replacing the manifest are saved, while switching to a different quality. What could be the problem here? ``` (this.dsh = dashjs.MediaPlayer().create()).updateSettings({ streaming: { abr: { limitBitrateByPortal: true, maxBitrate: 6000 }, buffer: {bufferTimeAtTopQuality: 15, bufferTimeAtTopQualityLongForm: 15}, text: { defaultEnabled: false, dispatchForManualRendering: true } } }); this.dsh.initialize(this.v = document.createElement('video'), `/video/1/manifest.mpd#t=${this.url.t || 0}`, autoplay); ```Opened by Zuldek1994822yesterday

More news on

Contributors