Highlights
- Explicit opt-in for AWS MediaTailor, with full support for custom CDN domains.
- New
config.ad.typeAPI 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(ormediatailor: { 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-suppliedadSegmentPrefix. - Threaded
adSegmentPrefixthrough HLS (VHS) and DASH manifest parsing. - Added explicit session initialization via
mediatailor: { trackingUrl }forPOST /v1/session/flows.
Ad tracking configuration
Introduced config.ad.type to control ad tracker selection.
- Exposed
AD_TRACKINGconstant 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.MTto implymediatailor: true. - Added a fallback to CSAI auto-detection with a warning when
config.ad.typeis unset (backward compatible for v4.1.2 users). - Co-located
segmentPrefixandtrackingUrlunderconfig.ad. - Added
DaiAdsTrackerto static exports.
Logging improvements
- Exposed
VideojsTracker.Logas 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/errorwithnrvideo.Logacross MediaTailor files.
Bug fixes
- Fixed buffer end handling in tracker.
- Fixed
register-plugin.jssilently dropping the options object and not forwarding it to theTrackerJSconstructor.
Documentation
- Updated the README and SSAI docs for custom CDN support, clarified when
trackingUrlandadSegmentPrefixoverrides are needed, and cleaned upsessionIdreferences. - Corrected
adSegmentPrefixreferences toconfig.ad.segmentPrefixin the SSAI troubleshooting docs.
Upgrade from 4.1.x
- No breaking changes for CSAI users. If
config.ad.typeis 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
adSegmentPrefixat the top level, move it toconfig.ad.segmentPrefix.
하이라이트
- AWS MediaTailor에 대한 명시적 옵트인, 사용자 지정 CDN 도메인에 대한 완벽한 지원.
- CSAI 와 SSAI (
DAI,MT) 광고 추적 중 하나를 선택할 수 있는 새로운config.ad.typeAPI ― 더 이상 SSAI에 대해 URL 기반으로 추측할 필요가 없습니다. nrvideo.Log을(를) 통한 엔드투엔드 로깅, 시작 시 활성 감지 모드가 로그에 기록됩니다.
특징
MediaTailor 사용자 지정 CDN 지원
URL 기반 자동 감지를 명시적 옵트인으로 대체했습니다.
- 기본 AWS 호스트명과 사용자 지정 CDN 도메인을 모두 지원하여
mediatailor: true(또는mediatailor: { trackingUrl, adSegmentPrefix })을(를) 통해 트래커를 활성화했습니다. - AWS 권장 CDN 광고 세그먼트 경로에 대한
MT_DEFAULT_AD_SEGMENT_PATH(/tm/) 상수를 추가했습니다,/tm/아래의 사용자 지정 CDN 도메인으로 다시 작성된 광고 세그먼트가 자동으로 감지됩니다. - 기본 AWS 세그먼트 호스트명,
/tm/경로 및 선택적 고객 제공adSegmentPrefix을(를) 확인하도록isMediaTailorSegment()을(를) 업데이트했습니다. - HLS(VHS) 및 DASH 매니페스트 구문 분석을 통해
adSegmentPrefix을(를) 스레딩했습니다. POST /v1/session/흐름에 대해mediatailor: { trackingUrl }을(를) 통한 명시적 세션 초기화를 추가했습니다.
광고 추적 설정
광고 트래커 선택을 제어하기 위해 config.ad.type 을(를) 도입했습니다.
- CSAI (IMA/Brightcove IMA/Freewheel/일반을 포괄하는 단일 값) 및 SSAI 하위 유형(
DAI,MT)과 함께AD_TRACKING상수를 노출했습니다. - SSAI에 대한 명시적 하위 유형이 필요했습니다 ― 각 플랫폼에는 자체 SDK가 필요하며 자동 감지할 수 없습니다.
mediatailor: true을(를) 의미하도록SSAI.MT을(를) 매핑했습니다.config.ad.type이(가) 설정되지 않은 경우 경고와 함께 CSAI 자동 감지에 대한 대체 수단을 추가했습니다(v4.1.2와 이전 버전 호환 가능 사용자에 대해 하위 호환됨).config.ad아래에segmentPrefix및trackingUrl을(를) 함께 배치했습니다.- 정적 내보내기에
DaiAdsTracker을(를) 추가했습니다.
로깅 개선 사항
- UMD 호출자가 로그 레벨을 설정할 수 있도록
VideojsTracker.Log을(를) 정적으로 노출했습니다. - 트래커 시작 시 활성 광고 세그먼트 감지 모드의 로깅을 추가했습니다.
- 첫 번째 광고 시간(세션당 한 번)에 일치하는 광고 세그먼트 감지 경로의 로깅을 추가했습니다.
- 자동 감지된 CSAI 프레임워크(BrightcoveIma / IMA / Freewheel / generic)의 로깅을 추가했습니다.
- MediaTailor 파일 전체에서
console.log/warn/error을(를)nrvideo.Log(으)로 교체했습니다.
버그 수정
- 트래커의 버퍼 끝 처리를 수정했습니다.
register-plugin.js이(가) options 객체를 조용히 삭제하고TrackerJS생성자로 전달하지 않는 문제를 수정했습니다.
선적 서류 비치
- 사용자 지정 CDN 지원을 위해 README 및 SSAI 문서를 업데이트하고,
trackingUrl및adSegmentPrefix재정의가 필요한 시기를 명확히 했으며,sessionId참조를 정리했습니다. - SSAI 문제 진단, 해결 문서에서
adSegmentPrefix참조를config.ad.segmentPrefix(으)로 수정했습니다.
4.1.x에서 업그레이드
CSAI 사용자를 위한 브레이킹 체인지는 없습니다.
config.ad.type이(가) 설정되지 않은 경우, 트래커는 여전히 CSAI 프레임워크를 자동 감지합니다(일회성 경고 포함).MediaTailor 사용자는 명시적으로 옵트인해야 합니다. URL 패턴 의존성을 다음 중 하나로 교체하십시오:
mediatailor: true(기본 AWS 호스트명+/tm/경로)mediatailor: { trackingUrl, adSegmentPrefix }(사용자 지정 CDN/명시적 세션 초기화)config.ad.type: AD_TRACKING.SSAI.MT
이전에 최상위 레벨에서
adSegmentPrefix을(를) 전달한 경우config.ad.segmentPrefix(으)로 이동하세요.
Highlights
- Added MediaTailor SSAI tracker initialization on loadstart after source load detection.
- Added DAI stream manager support through the stream-manager event.
- Improved bitrate reporting with:
- Playback bitrate (
AVERAGE-BANDWIDTH/BANDWIDTH) - Manifest max bitrate
- Segment download bitrate
- Network throughput bitrate
- Playback bitrate (
Improvements
- Refined ad and content event handling to avoid duplicate or incorrect content events while ads are active for following events:
- Pause/Resume
- Seek Start/End
- Buffer Start
- Improved end-of-content handling for ad-enabled playback paths during IMA and Freewheel scenarios.
- Added safer fallback logic for tech wrappers (
Hls.js,Shaka,contrib-hls) when bitrate data is unavailable in VHS.
Technical notes
- Tracker metadata and playback context methods remain aligned with Video.js/Brightcove integrations:
- Retrieves the title, ID, and duration from
mediainfowhen available. - Retrieves source and rendition data from the active tech component when available.
- Retrieves the title, ID, and duration from
- Updated the Listener registration and unregistration to include ad and stream manager lifecycle events.
하이라이트
소스 로드 감지 후 loadstart 시 MediaTailor SSAI 트래커 초기화를 추가했습니다.
stream-manager 이벤트를 통해 DAI 스트림 관리자 지원을 추가했습니다.
다음을 통한 개선된 비트레이트 보고:
- 재생 비트레이트(
AVERAGE-BANDWIDTH/BANDWIDTH) - 매니페스트 최대 비트레이트
- 세그먼트 다운로드 비트레이트
- 네트워크 처리량 비트레이트
- 재생 비트레이트(
개량
광고가 활성화되어 있는 동안 중복되거나 잘못된 콘텐츠 이벤트를 방지하기 위해 다음 이벤트에 대한 광고 및 콘텐츠 이벤트 처리를 개선했습니다:
- 일시 정지/재개
- 탐색 시작/종료
- 버퍼 시작
IMA 및 Freewheel 시나리오에서 광고가 활성화된 재생 경로에 대한 콘텐츠 종료 처리가 개선되었습니다.
VHS에서 비트레이트 데이터를 사용할 수 없는 경우 기술 래퍼(
Hls.js,Shaka,contrib-hls)에 대한 더 안전한 폴백 로직을 추가했습니다.
기술 참고 사항
트래커 메타데이터 및 재생 컨텍스트 메서드는 Video.js/Brightcove와 일치하게 유지됩니다 통합:
- 사용 가능한 경우
mediainfo에서 제목, ID 및 기간을 가져옵니다. - 사용 가능한 경우 활성 기술 컴포넌트에서 소스 및 렌디션 데이터를 가져옵니다.
- 사용 가능한 경우
광고 및 스트림 관리자 수명 주기 이벤트를 포함하도록 리스너 등록 및 등록 해제를 업데이트했습니다.
What's changed
Documentation
- README Overhaul: Restructured and expanded README with comprehensive installation guides, usage examples, best practices, configuration options, API reference, and support channels.
Improvements
- Attributes Validation: Updated validation logic for custom attributes to enforce correctness at the tracker level.
- Custom Attributes Limit: Added an enforced limit on the number of custom attributes that can be sent per event, preventing unexpected payload sizes.
Installation
$npm install @newrelic/video-html5@4.1.1This release introduces three new bitrate metrics for granular playback observability, QoE (Quality of Experience) support, and Shaka Player 5.x compatibility while maintaining backward compatibility with Shaka 4.x.
New bitrate metrics
Three new attributes are now available to provide deeper insight into streaming performance:
Attribute | Source | Description |
|---|---|---|
|
| Total variant bitrate (video + audio) as declared in the manifest (Indicated Bitrate). |
|
| Estimated network bandwidth measured by Shaka's ABR algorithm (Observed Bitrate). |
|
| Effective download throughput across all downloaded media. |
Additionally, contentBitrate uses track.videoBandwidth (video-only bitrate) to differentiate it from other metrics that report combined video and audio bandwidth.
Quality of Experience (QoE) support
QoE aggregate events are now supported via video-core. Enable them by setting qoeAggregate: true in the config:
const options = { info: { beacon: 'xxxxxxxxxx', applicationID: 'xxxxxxx', licenseKey: 'xxxxxxxxxxx', }, config: { qoeAggregate: true, qoeIntervalFactor: 2, },};
const tracker = new ShakaTracker(player, options);The following KPIs are tracked automatically:
KPI | Description |
|---|---|
| Time from content request to content start (ms). |
| Maximum |
| Weighted average bitrate across the session. |
|
|
|
|
| Total time spent rebuffering (ms). |
| Rebuffering time as a percentage of total playtime. |
| Total content playtime (ms). |
| Total number of errors during the session. |
Shaka Player 5.x compatibility
The tracker is now compatible with both Shaka Player 4.x and 5.x:
getPlayerVersion()resolves version across both major versions.onError()handles both Shaka player errors (e.detail) and HTML video element errors (e.target.error).- Sample files updated for Shaka 5.x (removed deprecated
shaka.polyfill.installAll(), updated player instantiation).
Upgrade guide
Run the following following to update:
$npm install @newrelic/video-shaka@4.0.3To enable QoE, add qoeAggregate: true to your config options as shown above.
Dependencies
Requires @newrelic/video-core v4.1.1 or later for QoE support.
이번 릴리스에서는 Shaka 4.x와의 하위 호환성을 유지하면서 세밀한 재생 옵저버빌리티를 위한 세 가지 새로운 비트레이트 메트릭, QoE(Quality of Experience) 지원, Shaka Player 5.x 호환성을 도입합니다.
새로운 비트레이트 메트릭
스트리밍 성능에 대한 더 깊은 인사이트를 제공하는 세 가지 새로운 속성을 이제 사용할 수 있습니다:
기인하다 | 원천 | 설명 |
|---|---|---|
|
| 매니페스트에 선언된 총 변형 비트레이트(비디오+오디오)입니다(표시된 비트레이트). |
|
| Shaka의 ABR 알고리즘으로 측정한 추정 네트워크 대역폭(관측된 비트레이트). |
|
| 다운로드된 모든 미디어 전반의 유효 다운로드 처리량입니다. |
또한, contentBitrate 은(는) 결합된 비디오 및 오디오 대역폭을 보고하는 다른 메트릭과 구분하기 위해 track.videoBandwidth (비디오 전용 비트레이트)을(를) 사용합니다.
체감 품질(QoE) 지원
이제 video-core을(를) 통해 QoE 집계 이벤트가 지원됩니다. 구성에서 qoeAggregate: true 을(를) 설정하여 활성화합니다:
const options = { info: { beacon: 'xxxxxxxxxx', applicationID: 'xxxxxxx', licenseKey: 'xxxxxxxxxxx', }, config: { qoeAggregate: true, qoeIntervalFactor: 2, },};
const tracker = new ShakaTracker(player, options);다음 KPI는 자동으로 추적됩니다:
KPI | 설명 |
|---|---|
| 콘텐츠 요청부터 콘텐츠 시작까지의 시간(ms). |
| 재생 중 관찰된 최대 |
| 세션 전체의 가중 평균 비트레이트. |
|
|
|
|
| 재버퍼링에 소요된 총 시간(ms). |
| 총 재생 시간 대비 리버퍼링 시간의 백분율입니다. |
| 총 콘텐츠 재생 시간(ms). |
| 세션 중 총 오류 수. |
Shaka Player 5.x 호환성
이제 트래커는 Shaka Player 4.x 및 5.x 모두와 호환됩니다:
getPlayerVersion()두 메이저 버전 모두에서 버전을 해결합니다.onError()Shaka 플레이어 오류(e.detail)와 HTML 비디오 요소 오류(e.target.error)를 모두 처리합니다.- Shaka 5.x용 샘플 파일이 업데이트되었습니다(지원 중단된
shaka.polyfill.installAll()제거, 플레이어 인스턴스화 업데이트).
업그레이드 가이드
다음을 실행하여 업데이트합니다:
$npm install @newrelic/video-shaka@4.0.3QoE를 활성화하려면 위와 같이 구성 옵션에 qoeAggregate: true 을(를) 추가합니다.
종속성
QoE 지원을 위해서는 @newrelic/video-core v4.1.1 이상이 필요합니다.
Bug fixes
Improved contentBitrate calculation
Issue: The contentBitrate attribute reported the target bitrate from the manifest instead of the actual measured throughput during playback.
Fix: Updated the bitrate calculation method to use getAverageThroughput() from dash.js. This captures the measured average throughput, providing a more accurate, real-time representation of the content consumption rate during playback.
Implementation details
- Primary logic: Uses
player.getAverageThroughput('video')to retrieve measured throughput - Fallback logic:
- Uses manifest bitrate if throughput measurement is unavailable
- Improves accuracy of video quality monitoring and analytics
- Impact:
- More accurate bitrate reporting in New Relic video monitoring
- Better visibility into actual network conditions and video quality
- Improved debugging capabilities for playback issues
What's new
This release introduces three new bitrate metrics providing comprehensive quality analysis for MPEG-DASH streaming, along with important improvements to existing bitrate calculations and dash.js v4/v5 compatibility.
New features
New bitrate metrics
contentManifestBitrate: Maximum combined (video + audio) bitrate from the MPD manifest. Represents the highest possible stream variant available.contentMeasuredBitrate: Network estimated by the player's Adaptive BitRate (ABR) algorithm, based on measured download throughput. Use this metric to analyze ABR decision-making.contentDownloadBitrate: Effective download throughput calculated from video segment request data (bytesDownloaded × 8 / downloadTime). This Provides real-time network performance monitoring.
Changes
Updated bitrate calculations
contentBitrate: Returns the video-only bitrate from the active track and excludes audio. Previous versions included combined bitrate.contentRenditionBitrate: Returns the combined video and audio bandwidth of the active rendition to provide a complete quality picture.
Compatibility improvements
getDashBitrate(): Fixed v4 compatibility issue. Version check now occurs before calling v5-only APIs, preventing errors on dash.js v4.x installations.getManifestBitrate(): Introduced a smart version detection that usesgetRepresentationsByType()on dash.js v5+ and falls back togetBitrateInfoListFor()on v4.x.
Bug fixes
- Removed duplicate
getPlayhead()method definition - Removed
console.logstatement fromgetTrack()error handler
Bitrate metrics overview
Attribute | Type | Description |
|---|---|---|
| Video-only | Bitrate of the currently active video track |
| Combined | Video + audio bandwidth of active rendition |
| Maximum | Highest quality variant from MPD manifest |
| Estimated | ABR algorithm bandwidth estimate |
| Real-time | Effective download throughput |
Bug fixes
Fixed contentBitrate to accurately report stream bitrate
Issue: The contentBitrate attribute used estimatedBandwidth (the network capacity estimate) as its primary source, which didn't accurately represent the actual bitrate of the playing video stream.
Solution: Updated the bitrate calculation to prioritize streamBandwidth from Shaka Player statistics, which provides the actual content bitrate of the current video variant as defined in the manifest.
Impact: The contentBitrate attribute correctly reports the bitrate (in bits per second) of playing video stream rather than the estimated network bandwidth. This provides more accurate telemetry data for video quality monitoring and analytics.
Technical details
- Changed the priority order in
getContentBitratePlayback()method - Uses the
stats.streamBandwidthas the primary source for content bitrate - Updated the
DATAMODEL.mddocumentation to reflect the accurate definition