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.1λ³κ²½λ μ¬ν
μ μ μλ₯ λΉμΉ
- README κ°νΈ: ν¬κ΄μ μΈ μ€μΉ κ°μ΄λ, μ¬μ© μμ, λͺ¨λ² μ¬λ‘, μ€μ μ΅μ , API μ°Έμ‘° λ° μ§μ μ±λμ ν¬ν¨νμ¬ READMEλ₯Ό μ¬κ΅¬μ±νκ³ νμ₯νμ΅λλ€.
κ°λ
- μμ± μ ν¨μ± κ²μ¬: νΈλ컀 μμ€μμ μ νμ±μ μ μ©νλλ‘ μ»€μ€ν μμ±μ λν μ ν¨μ± κ²μ¬ λ‘μ§μ μ λ°μ΄νΈνμ΅λλ€.
- 컀μ€ν μμ± μ ν: μ΄λ²€νΈλΉ μ μ‘ν μ μλ 컀μ€ν μμ± μμ κ°μ μ νμ μΆκ°νμ¬ μκΈ°μΉ μμ νμ΄λ‘λ ν¬κΈ°λ₯Ό λ°©μ§νμ΅λλ€.
μ€μΉ
$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 μ΄μμ΄ νμν©λλ€.
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 |
μλ‘μμ§ μ¬ν
μ΄λ² 릴리μ€μμλ MPEG-DASH μ€νΈλ¦¬λ°μ λν ν¬κ΄μ μΈ νμ§ λΆμμ μ 곡νλ μΈ κ°μ§ μλ‘μ΄ λΉνΈλ μ΄νΈ λ©νΈλ¦μ΄ λμ λμμΌλ©°, κΈ°μ‘΄ λΉνΈλ μ΄νΈ κ³μ° λ° dash.js v4/v5 νΈνμ±μ λν μ€μν κ°μ μ¬νλ ν¬ν¨λμμ΅λλ€.
μλ‘μ΄ κΈ°λ₯
μλ‘μ΄ λΉνΈλ μ΄νΈ λ©νΈλ¦
contentManifestBitrate: MPD λ§€λνμ€νΈμ μ΅λ κ²°ν©(λΉλμ€+μ€λμ€) λΉνΈλ μ΄νΈμ λλ€. μ¬μ© κ°λ₯ν κ°μ₯ λμ μ€νΈλ¦Ό λ³νμ λνλ λλ€.contentMeasuredBitrate: μΈ‘μ λ λ€μ΄λ‘λ μ²λ¦¬λμ κΈ°λ°μΌλ‘ νλ μ΄μ΄μ μ μν λΉνΈλ μ΄νΈ(ABR) μκ³ λ¦¬μ¦μ΄ μΆμ ν λ€νΈμν¬. ABR μμ¬ κ²°μ μ λΆμνλ €λ©΄ μ΄ λ©νΈλ¦μ μ¬μ©νμμμ€.contentDownloadBitrate: λΉλμ€ μΈκ·Έλ¨ΌνΈ μμ² λ°μ΄ν°(bytesDownloaded Γ 8 / downloadTime)μμ κ³μ°λ μ ν¨ λ€μ΄λ‘λ μ²λ¦¬λ. μ΄λ μ€μκ° λ€νΈμν¬ μ±λ₯ λͺ¨λν°λ§μ μ 곡ν©λλ€.
λ³ν
μ λ°μ΄νΈλ λΉνΈλ μ΄νΈ κ³μ°
contentBitrate: νμ± νΈλμμ μ€λμ€λ₯Ό μ μΈν λΉλμ€ μ μ© λΉνΈλ μ΄νΈλ₯Ό λ°νν©λλ€. μ΄μ λ²μ μλ ν΅ν© λΉνΈλ μ΄νΈκ° ν¬ν¨λμμ΅λλ€.contentRenditionBitrate: μμ ν νμ§ μνλ₯Ό μ 곡νκΈ° μν΄ νμ± λ λμ μ κ²°ν©λ λΉλμ€ λ° μ€λμ€ λμν μ λ°νν©λλ€.
νΈνμ± κ°μ μ¬ν
getDashBitrate(): v4 νΈνμ± λ¬Έμ λ₯Ό μμ νμ΅λλ€. μ΄μ v5 μ μ© APIλ₯Ό νΈμΆνκΈ° μ μ λ²μ νμΈμ΄ μνλμ΄ dash.js v4.x μ€μΉμμ λ°μνλ μ€λ₯λ₯Ό λ°©μ§ν©λλ€.getManifestBitrate(): dash.js v5+μμλgetRepresentationsByType()μ(λ₯Ό) μ¬μ©νκ³ v4.xμμλgetBitrateInfoListFor()(μΌ)λ‘ ν΄λ°±νλ μ€λ§νΈ λ²μ κ°μ§ κΈ°λ₯μ λμ νμ΅λλ€.
λ²κ·Έ μμ
- μ€λ³΅λ
getPlayhead()λ©μλ μ μλ₯Ό μ κ±°νμ΅λλ€ getTrack()μ€λ₯ νΈλ€λ¬μμconsole.logλ¬Έμ μ κ±°νμ΅λλ€.
λΉνΈλ μ΄νΈ λ©νΈλ¦ κ°μ
κΈ°μΈνλ€ | μ ν | μ€λͺ |
|---|---|---|
| λμμ μ μ© | νμ¬ νμ±νλ λΉλμ€ νΈλμ λΉνΈλ μ΄νΈ |
| κ²°ν© | νμ± λ λμ μ λΉλμ€+μ€λμ€ λμν |
| μ΅κ³ | MPD λ§€λνμ€νΈμ μ΅κ³ νμ§ λ³ν |
| μμ | ABR μκ³ λ¦¬μ¦ λμν μΆμ μΉ |
| μ€μκ° | μ ν¨ λ€μ΄λ‘λ μ²λ¦¬λ |
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
λ²κ·Έ μμ
μ€νΈλ¦Ό λΉνΈλ μ΄νΈλ₯Ό μ ννκ² λ³΄κ³ νλλ‘ contentBitrate μ(λ₯Ό) μμ νμ΅λλ€.
λ¬Έμ : contentBitrate μμ±μ estimatedBandwidth (λ€νΈμν¬ μ©λ μΆμ μΉ)μ(λ₯Ό) μ£Όμ μμ€λ‘ μ¬μ©νλλ°, μ΄λ μ¬μ μ€μΈ λΉλμ€ μ€νΈλ¦Όμ μ€μ λΉνΈλ μ΄νΈλ₯Ό μ ννκ² λνλ΄μ§ μμμ΅λλ€.
ν΄κ²° λ°©λ²: λ§€λνμ€νΈμ μ μλ λλ‘ νμ¬ λΉλμ€ λ³νμ μ€μ μ½ν
μΈ λΉνΈλ μ΄νΈλ₯Ό μ 곡νλ Shaka Player ν΅κ³μ streamBandwidth μ(λ₯Ό) μ°μ μ μΌλ‘ μ μ©νλλ‘ λΉνΈλ μ΄νΈ κ³μ°μ μ
λ°μ΄νΈνμ΅λλ€.
μν₯: contentBitrate μμ±μ μμ λ€νΈμν¬ λμνμ΄ μλ μ¬μ μ€μΈ λΉλμ€ μ€νΈλ¦Όμ λΉνΈ μ μ‘λ₯ (μ΄λΉ λΉνΈ μ)μ μ¬λ°λ₯΄κ² λ³΄κ³ ν©λλ€. μ΄λ λΉλμ€ νμ§ λͺ¨λν°λ§ λ° λΆμμ μν λ μ νν ν
λ λ©νΈλ¦¬ λ°μ΄ν°λ₯Ό μ 곡ν©λλ€.
κΈ°μ μ μΈλΆ μ¬ν
getContentBitratePlayback()λ©μλμμ μ°μ μμλ₯Ό λ³κ²½νμ΅λλ€.stats.streamBandwidthμ(λ₯Ό) μ½ν μΈ λΉνΈλ μ΄νΈμ μ£Όμ μμ€λ‘ μ¬μ©ν©λλ€.- μ νν μ μλ₯Ό λ°μνλλ‘
DATAMODEL.mdλ¬Έμλ₯Ό μ λ°μ΄νΈνμ΅λλ€.