• /
  • EnglishEspañolFrançais日本語한국어Português
  • Log inStart now

Streaming Video & Ads for Browser release notesRSS

September 24
Media agent for CAF v5.0.0

New features

  • /browser subpath export: A @newrelic/video-caf/browser entry point is now available that excludes the unused connected-device pipeline from the bundled @newrelic/video-core dependency, keeping the bundle lean. A browser.js filesystem shim is also included for bundlers that don't honor the exports field.
  • Named export: { CAFTracker } is now available as a named export alongside the existing default export on both the root and /browser entry points.

Improvements

  • @newrelic/video-core updated to 5.1.0, which includes TypeScript declaration files, upstream bug fixes, and dependency patches.

September 22
Media agent for HLS JS v2.0.0

New features

  • /browser subpath export: A @newrelic/video-hls/browser entry point is now available that excludes unused Vega/connected-device code, reducing bundle size for browser consumers. A browser.js filesystem shim is also included for bundlers that don't honor the exports field.
  • Named export: { HLSTracker } is now available as a named export alongside the existing default export on both the root and /browser entry points.

Improvements

  • @newrelic/video-core updated to 5.1.0, which includes TypeScript declaration files, upstream bug fixes, and dependency patches.

September 17
Media agent for Video JS v5.0.0

  • Breaking change: This release adds a package.json#exports map. Deep imports into internal paths of this package will no longer resolve — only the root export (@newrelic/video-videojs-js) and the new /browser subpath are valid import targets. Update any direct deep-imports before upgrading.

New features

  • /browser subpath export: A @newrelic/video-videojs-js/browser entry point is now available that excludes unused Vega/connected-device code, reducing bundle size for browser consumers.
  • notifyAdSkipped() (MediaTailor): Host apps with a custom skip-ad UI can report a user-initiated skip. Emits the skipped ad-end event when in an ad; no-op otherwise. Mirrors the equivalent API on the iOS/Android trackers.
  • stopTracking() (MediaTailor): Reversible teardown that stops polling and unregisters listeners without disposing the tracker, so it can be resumed later. Shares the method name used by the iOS/Android trackers.
  • AD_ERROR events (MediaTailor): Non-terminal failures now surface as AD_ERROR events in NRDB with a semantic errorCode (NO_FILL, ADS_TIMEOUT, TRACKING_FETCH_FAILED, TOKEN_EXPIRED, MISSING_AVAIL_START, MANIFEST_TRACKING_MISMATCH) instead of only appearing in the debug log.
  • adPrimaryId attribute (MediaTailor): AD_START, AD_END, and AD_QUARTILE now carry adPrimaryId (the VAST creativeId, falling back to availId:adId) so count(DISTINCT adPrimaryId) counts true creatives, not per-avail ad IDs.

Improvements

  • @newrelic/video-core updated to 5.1.0, which includes a TypeScript conversion, upstream bug fixes, and dependency patches.
  • Configurable poll cadence (MediaTailor): config.ad.pollIntervalMs overrides the manifest-derived live poll interval (clamped to 100–5000 ms) for battery- or CPU-constrained clients. Behavior is unchanged when the option is omitted.
  • Tracking URL from HLS manifest (MediaTailor): The tracker now reads the tracking endpoint from an #EXT-X-DATERANGE CLASS="tracking" tag when present, removing the need to pass an explicit trackingUrl on non-AWS CDNs. An explicit option still takes precedence.
  • Source-change reset (MediaTailor): Swapping player.src() now resets the tracker — cancels in-flight fetches, clears the stale ad schedule, and re-derives the tracking endpoint — instead of continuing to poll the previous session's endpoint.

Bug fixes

  • MediaTailor: Only the first ad in a multi-ad pod was tracked. The paging loop re-fetched the same avail on every page; the tracker now fetches the full window in a single tokenless request.
  • MediaTailor: The tracking endpoint could not be derived for implicit-session media-playlist URLs, so Tier-1 ad detection never ran for those sessions.
  • MediaTailor: config.ad.segmentPrefix was silently ignored because it was mapped to the wrong internal key.
  • MediaTailor: A DASH period was classified as an ad when only one of several representations resolved to an ad-marked URL. Classification now requires every representation to match.
  • MediaTailor: AD_END was not fired when a pod ended before its enclosing break boundary, causing completions to be undercounted.
  • MediaTailor: Pod-count mismatches between manifest and tracking data silently corrupted break geometry; the tracker now reconciles counts explicitly and emits MANIFEST_TRACKING_MISMATCH.
  • MediaTailor: Avails with a missing startTimeInSeconds were silently dropped, undercounting impressions in NRDB; the tracker now falls back to the first ad's start and emits MISSING_AVAIL_START.
  • MediaTailor: Live sliding-window re-merges duplicated or dropped ad breaks when start times jittered; breaks now deduplicate by stable identity (availId + availProgramDateTime).
  • MediaTailor: No-fill avails emitted phantom AD_START/quartile events; they now emit only break boundaries plus AD_ERROR(NO_FILL).
  • MediaTailor: Expired tracking pagination tokens (HTTP 400) were not handled; the token is now dropped and retried once before emitting TOKEN_EXPIRED and stopping polling.
  • MediaTailor: Manifest fetches did not re-check isDisposed after each await, risking state mutation on a disposed tracker.
  • AD_RESUME was fired on first play into an ad, not only after a genuine pause.
  • Disposing mid-ad did not emit the outstanding AD_END/AD_BREAK_END, leaving the break dangling.
  • DASH EventStream presentationTime values were treated as raw ticks instead of being converted to seconds, misplacing ads at wrong offsets.
  • HLS #EXT-X-CUE-OUT-parsed ad breaks did not initialize quartile flags, causing quartile events to fire more than once per ad.

August 11
Media agent for Video JS v4.2.1

New features

  • Added optional automatic rendition/quality-level change tracking: integrates with the videojs-contrib-quality-levels plugin (when present) to report quality transitions along with the previous and new bitrates, with a graceful fallback when the plugin isn't loaded.

August 6
Media agent for Dash JS v5.0.1

Bug fixes

  • Updated the bundled @newrelic/video-core dependency to v5.0.1, adding Japan(JP) region collector support for Vega/Fire TV tracking.

August 6
Media agent for HTML5 v5.0.1

Bug fixes

  • Updated the bundled @newrelic/video-core dependency to v5.0.1, adding Japan (JP) region collector support for Vega/Fire TV tracking.

August 6
Media agent for Shaka v5.0.1

Bug fixes

  • Updated the bundled @newrelic/video-core dependency to v5.0.1, adding Japan(JP) region collector support for Vega/Fire TV tracking.

July 29
June 29
Media agent for HTML5 v4.1.2

What's changed

New Contributors

Full Changelog: https://github.com/newrelic/video-html5-js/compare/v4.1.1...v4.1.2

June 19
Media agent for Video JS v4.2.0

Highlights

  • Explicit opt-in for AWS MediaTailor, with full support for custom CDN domains.
  • New config.ad.type API to choose between CSAI and SSAI (DAI, MT) ad tracking — no more URL-based guessing for SSAI.
  • End-to-end logging through nrvideo.Log, with active detection mode logged at startup.

Features

MediaTailor custom CDN support

Replaced URL-based auto-detection with explicit opt-in.

  • Enabled the tracker via mediatailor: true (or mediatailor: { trackingUrl, adSegmentPrefix }), supporting both default AWS hostnames and custom CDN domains.
  • Added MT_DEFAULT_AD_SEGMENT_PATH (/tm/) constant for AWS-recommended CDN ad-segment path; ad segments rewritten to a custom CDN domain under /tm/ are detected automatically.
  • Updated isMediaTailorSegment() to check the default AWS segments hostname, the /tm/ path, and an optional customer-supplied adSegmentPrefix.
  • Threaded adSegmentPrefix through HLS (VHS) and DASH manifest parsing.
  • Added explicit session initialization via mediatailor: { trackingUrl } for POST /v1/session/ flows.

Ad tracking configuration

Introduced config.ad.type to control ad tracker selection.

  • Exposed AD_TRACKING constant with CSAI (flat value covering IMA / Brightcove IMA / Freewheel / generic) and SSAI sub-types (DAI, MT).
  • Required an explicit sub-type for SSAI — each platform needs its own SDK and cannot be auto-detected.
  • Mapped SSAI.MT to imply mediatailor: true.
  • Added a fallback to CSAI auto-detection with a warning when config.ad.type is unset (backward compatible for v4.1.2 users).
  • Co-located segmentPrefix and trackingUrl under config.ad.
  • Added DaiAdsTracker to static exports.

Logging improvements

  • Exposed VideojsTracker.Log as a static so UMD callers can set log level.
  • Added logging of the active ad segment detection mode at tracker startup.
  • Added logging of the matched ad segment detection path on the first ad break (once per session).
  • Added logging of which CSAI framework was auto-detected (BrightcoveIma / IMA / Freewheel / generic).
  • Replaced console.log/warn/error with nrvideo.Log across MediaTailor files.

Bug fixes

  • Fixed buffer end handling in tracker.
  • Fixed register-plugin.js silently dropping the options object and not forwarding it to the TrackerJS constructor.

Documentation

  • Updated the README and SSAI docs for custom CDN support, clarified when trackingUrl and adSegmentPrefix overrides are needed, and cleaned up sessionId references.
  • Corrected adSegmentPrefix references to config.ad.segmentPrefix in the SSAI troubleshooting docs.

Upgrade from 4.1.x

  • No breaking changes for CSAI users. If config.ad.type is unset, the tracker still auto-detects CSAI frameworks (with a one-time warning).
  • MediaTailor users must opt in explicitly. Replace any URL-pattern reliance with one of:
    • mediatailor: true (default AWS hostnames + /tm/ path)
    • mediatailor: { trackingUrl, adSegmentPrefix } (custom CDN / explicit session init)
    • config.ad.type: AD_TRACKING.SSAI.MT
  • If you previously passed adSegmentPrefix at the top level, move it to config.ad.segmentPrefix.

Copyright © 2026 New Relic Inc.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.