← Back to KPIs

Streaming Playback Success Rate

Also known as: Playback Success Rate, Stream Start Success Rate, Video Playback Success Rate, Successful Play Rate, Play Success Rate, SPSR

QualitykpiMedia & Streaming

Measures the percentage of qualified streaming playback attempts that render the requested content within the defined startup time limit without a fatal playback error. It indicates the reliability of the end-to-end playback experience across applications, devices, content formats, delivery networks, and digital rights management services.

Business Use Case

The Streaming Product organization monitors this KPI by application version, device model, CDN, DRM provider, and content type. If the rate falls below 99.0% for a specific smart-TV release, the release owner can halt rollout, route traffic to a stable player version or alternate CDN, and prioritize remediation using the associated startup error codes.

Business Criticality

High

Journey / Navigation Area

Engagement

Owning Function

Product - Playback Experience

Scope

Event

Formula

(Successful Qualified Playback Attempts / Total Qualified Playback Attempts) × 100

Calculation Notes

1️⃣ Calculate distinct qualified playback_attempt_id values based on timestamps. 2️⃣ Successful attempts require a validated content-first-frame event within 10 seconds. 3️⃣ Exclude fatal startup errors before the validated event. 4️⃣ For audio-only streams, use validated audio-render events instead. 5️⃣ Start measurement clock after pre-roll advertising time ends. 6️⃣ Automatic player retries count as part of the original attempt unless a new play action occurs. 7️⃣ Classify attempts without terminal events as unsuccessful after the 10-second window.

Technical Details

Measure Typepercentage
Aggregation WindowTime based - Hourly/Daily/Monthly

Events

PlatformEvent
Google Analytics 4select_content
Adobeselect_content

Data Mappings

W3 Data Layer
{
  "event": [
    {
      "eventInfo": {
        "eventName": "select_content",
        "eventAction": "streaming_playback_attempt_resolved"
      },
      "attributes": {
        "cdn_pop": "IAD-01",
        "is_live": false,
        "item_id": "content_12345",
        "user_id": "user_789",
        "event_id": "evt_550e8400-e29b-41d4-a716-446655440000",
        "platform": "connected_tv",
        "series_id": "series_100",
        "drm_system": "widevine",
        "error_code": null,
        "error_type": null,
        "audio_codec": "aac",
        "device_type": "television",
        "error_stage": null,
        "player_name": "Unified Streaming Player",
        "retry_count": 0,
        "stream_type": "on_demand",
        "video_codec": "h264",
        "anonymous_id": "anon_456",
        "bitrate_kbps": 4500,
        "browser_name": "not_applicable",
        "cdn_provider": "Example CDN",
        "content_type": "episode",
        "country_code": "US",
        "device_model": "Example TV 2025",
        "network_type": "wifi",
        "content_title": "Example Program",
        "language_code": "en-US",
        "season_number": 2,
        "content_format": "video",
        "episode_number": 5,
        "player_version": "8.4.1",
        "browser_version": "not_applicable",
        "event_timestamp": "2025-03-08T14:30:45.123Z",
        "startup_time_ms": 1840,
        "application_name": "Streaming Application",
        "content_rendered": true,
        "operating_system": "Example TV OS",
        "playback_success": true,
        "qualified_attempt": true,
        "drm_license_status": "granted",
        "application_version": "12.6.0",
        "content_duration_ms": 2700000,
        "device_manufacturer": "Example Manufacturer",
        "playback_attempt_id": "attempt_123456789",
        "playback_session_id": "session_987654321",
        "fatal_playback_error": false,
        "playback_position_ms": 0,
        "startup_time_limit_ms": 5000,
        "operating_system_version": "7.2"
      }
    }
  ]
}
GA4 Data Layer
{
  "event": "select_content",
  "cdn_pop": "IAD-01",
  "is_live": false,
  "item_id": "content_12345",
  "user_id": "user_789",
  "event_id": "evt_550e8400-e29b-41d4-a716-446655440000",
  "platform": "connected_tv",
  "series_id": "series_100",
  "drm_system": "widevine",
  "error_code": null,
  "error_type": null,
  "audio_codec": "aac",
  "device_type": "television",
  "error_stage": null,
  "player_name": "Unified Streaming Player",
  "retry_count": 0,
  "stream_type": "on_demand",
  "video_codec": "h264",
  "anonymous_id": "anon_456",
  "bitrate_kbps": 4500,
  "browser_name": "not_applicable",
  "cdn_provider": "Example CDN",
  "content_type": "episode",
  "country_code": "US",
  "device_model": "Example TV 2025",
  "network_type": "wifi",
  "content_title": "Example Program",
  "language_code": "en-US",
  "season_number": 2,
  "content_format": "video",
  "episode_number": 5,
  "player_version": "8.4.1",
  "browser_version": "not_applicable",
  "event_timestamp": "2025-03-08T14:30:45.123Z",
  "startup_time_ms": 1840,
  "application_name": "Streaming Application",
  "content_rendered": true,
  "operating_system": "Example TV OS",
  "playback_success": true,
  "qualified_attempt": true,
  "drm_license_status": "granted",
  "application_version": "12.6.0",
  "content_duration_ms": 2700000,
  "device_manufacturer": "Example Manufacturer",
  "playback_attempt_id": "attempt_123456789",
  "playback_session_id": "session_987654321",
  "fatal_playback_error": false,
  "playback_position_ms": 0,
  "startup_time_limit_ms": 5000,
  "operating_system_version": "7.2"
}
Adobe Client Data Layer
{
  "data": {
    "cdn_pop": "IAD-01",
    "is_live": false,
    "item_id": "content_12345",
    "user_id": "user_789",
    "event_id": "evt_550e8400-e29b-41d4-a716-446655440000",
    "platform": "connected_tv",
    "series_id": "series_100",
    "drm_system": "widevine",
    "error_code": null,
    "error_type": null,
    "audio_codec": "aac",
    "device_type": "television",
    "error_stage": null,
    "player_name": "Unified Streaming Player",
    "retry_count": 0,
    "stream_type": "on_demand",
    "video_codec": "h264",
    "anonymous_id": "anon_456",
    "bitrate_kbps": 4500,
    "browser_name": "not_applicable",
    "cdn_provider": "Example CDN",
    "content_type": "episode",
    "country_code": "US",
    "device_model": "Example TV 2025",
    "network_type": "wifi",
    "content_title": "Example Program",
    "language_code": "en-US",
    "season_number": 2,
    "content_format": "video",
    "episode_number": 5,
    "player_version": "8.4.1",
    "browser_version": "not_applicable",
    "event_timestamp": "2025-03-08T14:30:45.123Z",
    "startup_time_ms": 1840,
    "application_name": "Streaming Application",
    "content_rendered": true,
    "operating_system": "Example TV OS",
    "playback_success": true,
    "qualified_attempt": true,
    "drm_license_status": "granted",
    "application_version": "12.6.0",
    "content_duration_ms": 2700000,
    "device_manufacturer": "Example Manufacturer",
    "playback_attempt_id": "attempt_123456789",
    "playback_session_id": "session_987654321",
    "fatal_playback_error": false,
    "playback_position_ms": 0,
    "startup_time_limit_ms": 5000,
    "operating_system_version": "7.2"
  },
  "event": "select_content",
  "eventInfo": {
    "eventName": "select_content",
    "eventAction": "streaming_playback_attempt_resolved"
  }
}
XDM Mapping
{
  "web": {
    "webInteraction": {
      "name": "select_content",
      "type": "other",
      "linkClicks": {
        "value": 1
      }
    }
  },
  "device": {
    "type": "television",
    "model": "Example TV 2025",
    "manufacturer": "Example Manufacturer"
  },
  "eventID": "evt_550e8400-e29b-41d4-a716-446655440000",
  "eventType": "web.webinteraction.linkClicks",
  "timestamp": "2025-03-08T14:30:45.123Z",
  "_experience": {
    "analytics": {
      "customDimensions": {
        "eVars": {
          "eVar1": "attempt_123456789",
          "eVar2": "session_987654321",
          "eVar3": "user_789",
          "eVar4": "anon_456",
          "eVar5": "content_12345",
          "eVar6": "Example Program",
          "eVar7": "episode",
          "eVar8": "video",
          "eVar9": "series_100",
          "eVar10": "2",
          "eVar11": "5",
          "eVar12": "2700000",
          "eVar13": "false",
          "eVar14": "on_demand",
          "eVar15": "0",
          "eVar16": "Unified Streaming Player",
          "eVar17": "8.4.1",
          "eVar18": "Streaming Application",
          "eVar19": "12.6.0",
          "eVar20": "connected_tv",
          "eVar21": "television",
          "eVar22": "Example Manufacturer",
          "eVar23": "Example TV 2025",
          "eVar24": "Example TV OS",
          "eVar25": "7.2",
          "eVar26": "not_applicable",
          "eVar27": "not_applicable",
          "eVar28": "wifi",
          "eVar29": "Example CDN",
          "eVar30": "IAD-01",
          "eVar31": "widevine",
          "eVar32": "granted",
          "eVar33": "h264",
          "eVar34": "aac",
          "eVar35": "4500",
          "eVar36": "1840",
          "eVar37": "5000",
          "eVar38": "true",
          "eVar39": "true",
          "eVar40": "true",
          "eVar41": "false",
          "eVar42": null,
          "eVar43": null,
          "eVar44": null,
          "eVar45": "0",
          "eVar46": "US",
          "eVar47": "en-US"
        }
      }
    }
  },
  "application": {
    "name": "Streaming Application",
    "version": "12.6.0"
  },
  "environment": {
    "type": "connected_tv",
    "browserDetails": {
      "browser": "not_applicable",
      "version": "not_applicable"
    },
    "operatingSystem": "Example TV OS",
    "operatingSystemVersion": "7.2"
  },
  "identityMap": {
    "ECID": [
      {
        "id": "12345678901234567890123456789012345678",
        "primary": true,
        "authenticatedState": "ambiguous"
      }
    ]
  },
  "placeContext": {
    "geo": {
      "countryCode": "US"
    }
  },
  "mediaCollection": {
    "playhead": 0,
    "qoeDataDetails": {
      "bitrate": 4500,
      "timeToStart": 1.84
    },
    "sessionDetails": {
      "name": "content_12345",
      "length": 2700,
      "playerName": "Unified Streaming Player",
      "streamType": "on_demand",
      "contentType": "episode",
      "friendlyName": "Example Program"
    }
  }
}

SQL Queries

Google Analytics 4 (BigQuery)
-- ==========================================
-- 1. GOOGLE BIGQUERY SQL
-- ==========================================
WITH extracted AS (
  SELECT
    e.event_timestamp AS source_event_timestamp,
    e.user_id AS ga4_user_id,
    (
      SELECT AS STRUCT
        MAX(IF(key = 'event_id', v, NULL)) AS event_id,
        MAX(IF(key = 'event_timestamp', v, NULL)) AS event_timestamp,
        MAX(IF(key = 'playback_attempt_id', v, NULL)) AS playback_attempt_id,
        MAX(IF(key = 'playback_session_id', v, NULL)) AS playback_session_id,
        MAX(IF(key = 'user_id', v, NULL)) AS user_id,
        MAX(IF(key = 'anonymous_id', v, NULL)) AS anonymous_id,
        MAX(IF(key = 'item_id', v, NULL)) AS item_id,
        MAX(IF(key = 'content_title', v, NULL)) AS content_title,
        MAX(IF(key = 'content_type', v, NULL)) AS content_type,
        MAX(IF(key = 'content_format', v, NULL)) AS content_format,
        MAX(IF(key = 'series_id', v, NULL)) AS series_id,
        MAX(IF(key = 'season_number', v, NULL)) AS season_number,
        MAX(IF(key = 'episode_number', v, NULL)) AS episode_number,
        MAX(IF(key = 'content_duration_ms', v, NULL)) AS content_duration_ms,
        MAX(IF(key = 'is_live', v, NULL)) AS is_live,
        MAX(IF(key = 'stream_type', v, NULL)) AS stream_type,
        MAX(IF(key = 'playback_position_ms', v, NULL)) AS playback_position_ms,
        MAX(IF(key = 'player_name', v, NULL)) AS player_name,
        MAX(IF(key = 'player_version', v, NULL)) AS player_version,
        MAX(IF(key = 'application_name', v, NULL)) AS application_name,
        MAX(IF(key = 'application_version', v, NULL)) AS application_version,
        MAX(IF(key = 'platform', v, NULL)) AS platform,
        MAX(IF(key = 'device_type', v, NULL)) AS device_type,
        MAX(IF(key = 'device_manufacturer', v, NULL)) AS device_manufacturer,
        MAX(IF(key = 'device_model', v, NULL)) AS device_model,
        MAX(IF(key = 'operating_system', v, NULL)) AS operating_system,
        MAX(IF(key = 'operating_system_version', v, NULL)) AS operating_system_version,
        MAX(IF(key = 'browser_name', v, NULL)) AS browser_name,
        MAX(IF(key = 'browser_version', v, NULL)) AS browser_version,
        MAX(IF(key = 'network_type', v, NULL)) AS network_type,
        MAX(IF(key = 'cdn_provider', v, NULL)) AS cdn_provider,
        MAX(IF(key = 'cdn_pop', v, NULL)) AS cdn_pop,
        MAX(IF(key = 'drm_system', v, NULL)) AS drm_system,
        MAX(IF(key = 'drm_license_status', v, NULL)) AS drm_license_status,
        MAX(IF(key = 'video_codec', v, NULL)) AS video_codec,
        MAX(IF(key = 'audio_codec', v, NULL)) AS audio_codec,
        MAX(IF(key = 'bitrate_kbps', v, NULL)) AS bitrate_kbps,
        MAX(IF(key = 'startup_time_ms', v, NULL)) AS startup_time_ms,
        MAX(IF(key = 'startup_time_limit_ms', v, NULL)) AS startup_time_limit_ms,
        MAX(IF(key = 'qualified_attempt', v, NULL)) AS qualified_attempt,
        MAX(IF(key = 'playback_success', v, NULL)) AS playback_success,
        MAX(IF(key = 'content_rendered', v, NULL)) AS content_rendered,
        MAX(IF(key = 'fatal_playback_error', v, NULL)) AS fatal_playback_error,
        MAX(IF(key = 'error_code', v, NULL)) AS error_code,
        MAX(IF(key = 'error_type', v, NULL)) AS error_type,
        MAX(IF(key = 'error_stage', v, NULL)) AS error_stage,
        MAX(IF(key = 'retry_count', v, NULL)) AS retry_count,
        MAX(IF(key = 'country_code', v, NULL)) AS country_code,
        MAX(IF(key = 'language_code', v, NULL)) AS language_code
      FROM (
        SELECT
          ep.key,
          COALESCE(
            ep.value.string_value,
            CAST(ep.value.int_value AS STRING),
            CAST(ep.value.double_value AS STRING),
            CAST(ep.value.float_value AS STRING)
          ) AS v
        FROM UNNEST(e.event_params) AS ep
      )
    ) AS p
  FROM `your-project.analytics_123456789.events_*` AS e
  WHERE e.event_name = 'select_content'
    AND _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY))
                          AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))
),
typed AS (
  SELECT
    COALESCE(p.event_id, CONCAT('ga4-', CAST(source_event_timestamp AS STRING), '-', p.playback_attempt_id)) AS event_id,
    COALESCE(SAFE_CAST(p.event_timestamp AS TIMESTAMP), TIMESTAMP_MICROS(source_event_timestamp)) AS event_timestamp,
    p.playback_attempt_id,
    p.playback_session_id,
    COALESCE(p.user_id, ga4_user_id) AS user_id,
    p.anonymous_id,
    p.item_id,
    p.content_title,
    p.content_type,
    p.content_format,
    p.series_id,
    SAFE_CAST(p.season_number AS INT64) AS season_number,
    SAFE_CAST(p.episode_number AS INT64) AS episode_number,
    SAFE_CAST(p.content_duration_ms AS INT64) AS content_duration_ms,
    SAFE_CAST(LOWER(p.is_live) AS BOOL) AS is_live,
    p.stream_type,
    SAFE_CAST(p.playback_position_ms AS INT64) AS playback_position_ms,
    p.player_name,
    p.player_version,
    p.application_name,
    p.application_version,
    p.platform,
    p.device_type,
    p.device_manufacturer,
    p.device_model,
    p.operating_system,
    p.operating_system_version,
    p.browser_name,
    p.browser_version,
    p.network_type,
    p.cdn_provider,
    p.cdn_pop,
    p.drm_system,
    p.drm_license_status,
    p.video_codec,
    p.audio_codec,
    SAFE_CAST(p.bitrate_kbps AS INT64) AS bitrate_kbps,
    SAFE_CAST(p.startup_time_ms AS INT64) AS startup_time_ms,
    SAFE_CAST(p.startup_time_limit_ms AS INT64) AS startup_time_limit_ms,
    SAFE_CAST(LOWER(p.qualified_attempt) AS BOOL) AS qualified_attempt,
    SAFE_CAST(LOWER(p.playback_success) AS BOOL) AS playback_success,
    SAFE_CAST(LOWER(p.content_rendered) AS BOOL) AS content_rendered,
    SAFE_CAST(LOWER(p.fatal_playback_error) AS BOOL) AS fatal_playback_error,
    NULLIF(p.error_code, '') AS error_code,
    NULLIF(p.error_type, '') AS error_type,
    NULLIF(p.error_stage, '') AS error_stage,
    SAFE_CAST(p.retry_count AS INT64) AS retry_count,
    p.country_code,
    p.language_code
  FROM extracted
),
deduplicated AS (
  SELECT * EXCEPT(row_num)
  FROM (
    SELECT
      typed.*,
      ROW_NUMBER() OVER (
        PARTITION BY playback_attempt_id
        ORDER BY event_timestamp DESC, event_id DESC
      ) AS row_num
    FROM typed
    WHERE playback_attempt_id IS NOT NULL
      AND qualified_attempt IS NOT NULL
      AND playback_success IS NOT NULL
  )
  WHERE row_num = 1
),
qualified_attempts AS (
  SELECT *
  FROM deduplicated
  WHERE qualified_attempt = TRUE
),
kpi AS (
  SELECT
    COUNTIF(playback_success = TRUE) AS successful_qualified_attempts,
    COUNT(*) AS total_qualified_attempts,
    SAFE_MULTIPLY(
      100.0,
      SAFE_DIVIDE(COUNTIF(playback_success = TRUE), COUNT(*))
    ) AS streaming_playback_success_rate_pct
  FROM qualified_attempts
)
SELECT
  q.event_id,
  q.event_timestamp,
  q.playback_attempt_id,
  q.playback_session_id,
  q.user_id,
  q.anonymous_id,
  q.item_id,
  q.content_title,
  q.content_type,
  q.content_format,
  q.series_id,
  q.season_number,
  q.episode_number,
  q.content_duration_ms,
  q.is_live,
  q.stream_type,
  q.playback_position_ms,
  q.player_name,
  q.player_version,
  q.application_name,
  q.application_version,
  q.platform,
  q.device_type,
  q.device_manufacturer,
  q.device_model,
  q.operating_system,
  q.operating_system_version,
  q.browser_name,
  q.browser_version,
  q.network_type,
  q.cdn_provider,
  q.cdn_pop,
  q.drm_system,
  q.drm_license_status,
  q.video_codec,
  q.audio_codec,
  q.bitrate_kbps,
  q.startup_time_ms,
  q.startup_time_limit_ms,
  q.qualified_attempt,
  q.playback_success,
  q.content_rendered,
  q.fatal_playback_error,
  q.error_code,
  q.error_type,
  q.error_stage,
  q.retry_count,
  q.country_code,
  q.language_code,
  k.successful_qualified_attempts,
  k.total_qualified_attempts,
  k.streaming_playback_success_rate_pct
FROM qualified_attempts AS q
CROSS JOIN kpi AS k
ORDER BY q.event_timestamp DESC, q.playback_attempt_id;
Adobe Experience Platform (AEP Query Service)
-- ==========================================
-- 2. ADOBE AEP QUERY SERVICE SQL
-- ==========================================
WITH typed AS (
  SELECT
    eventID AS event_id,
    timestamp AS event_timestamp,
    _experience.analytics.customDimensions.eVars.eVar1 AS playback_attempt_id,
    _experience.analytics.customDimensions.eVars.eVar2 AS playback_session_id,
    _experience.analytics.customDimensions.eVars.eVar3 AS user_id,
    _experience.analytics.customDimensions.eVars.eVar4 AS anonymous_id,
    COALESCE(
      mediaCollection.sessionDetails.name,
      _experience.analytics.customDimensions.eVars.eVar5
    ) AS item_id,
    COALESCE(
      mediaCollection.sessionDetails.friendlyName,
      _experience.analytics.customDimensions.eVars.eVar6
    ) AS content_title,
    COALESCE(
      mediaCollection.sessionDetails.contentType,
      _experience.analytics.customDimensions.eVars.eVar7
    ) AS content_type,
    _experience.analytics.customDimensions.eVars.eVar8 AS content_format,
    _experience.analytics.customDimensions.eVars.eVar9 AS series_id,
    CAST(NULLIF(_experience.analytics.customDimensions.eVars.eVar10, '') AS INTEGER) AS season_number,
    CAST(NULLIF(_experience.analytics.customDimensions.eVars.eVar11, '') AS INTEGER) AS episode_number,
    COALESCE(
      CAST(NULLIF(_experience.analytics.customDimensions.eVars.eVar12, '') AS BIGINT),
      CAST(mediaCollection.sessionDetails.length * 1000 AS BIGINT)
    ) AS content_duration_ms,
    CASE
      WHEN LOWER(_experience.analytics.customDimensions.eVars.eVar13) = 'true' THEN TRUE
      WHEN LOWER(_experience.analytics.customDimensions.eVars.eVar13) = 'false' THEN FALSE
      ELSE NULL
    END AS is_live,
    COALESCE(
      mediaCollection.sessionDetails.streamType,
      _experience.analytics.customDimensions.eVars.eVar14
    ) AS stream_type,
    COALESCE(
      CAST(mediaCollection.playhead * 1000 AS BIGINT),
      CAST(NULLIF(_experience.analytics.customDimensions.eVars.eVar15, '') AS BIGINT)
    ) AS playback_position_ms,
    COALESCE(
      mediaCollection.sessionDetails.playerName,
      _experience.analytics.customDimensions.eVars.eVar16
    ) AS player_name,
    _experience.analytics.customDimensions.eVars.eVar17 AS player_version,
    COALESCE(application.name, _experience.analytics.customDimensions.eVars.eVar18) AS application_name,
    COALESCE(application.version, _experience.analytics.customDimensions.eVars.eVar19) AS application_version,
    COALESCE(environment.type, _experience.analytics.customDimensions.eVars.eVar20) AS platform,
    COALESCE(device.type, _experience.analytics.customDimensions.eVars.eVar21) AS device_type,
    COALESCE(device.manufacturer, _experience.analytics.customDimensions.eVars.eVar22) AS device_manufacturer,
    COALESCE(device.model, _experience.analytics.customDimensions.eVars.eVar23) AS device_model,
    COALESCE(environment.operatingSystem, _experience.analytics.customDimensions.eVars.eVar24) AS operating_system,
    COALESCE(environment.operatingSystemVersion, _experience.analytics.customDimensions.eVars.eVar25) AS operating_system_version,
    COALESCE(environment.browserDetails.browser, _experience.analytics.customDimensions.eVars.eVar26) AS browser_name,
    COALESCE(environment.browserDetails.version, _experience.analytics.customDimensions.eVars.eVar27) AS browser_version,
    _experience.analytics.customDimensions.eVars.eVar28 AS network_type,
    _experience.analytics.customDimensions.eVars.eVar29 AS cdn_provider,
    _experience.analytics.customDimensions.eVars.eVar30 AS cdn_pop,
    _experience.analytics.customDimensions.eVars.eVar31 AS drm_system,
    _experience.analytics.customDimensions.eVars.eVar32 AS drm_license_status,
    _experience.analytics.customDimensions.eVars.eVar33 AS video_codec,
    _experience.analytics.customDimensions.eVars.eVar34 AS audio_codec,
    COALESCE(
      CAST(mediaCollection.qoeDataDetails.bitrate AS BIGINT),
      CAST(NULLIF(_experience.analytics.customDimensions.eVars.eVar35, '') AS BIGINT)
    ) AS bitrate_kbps,
    COALESCE(
      CAST(mediaCollection.qoeDataDetails.timeToStart * 1000 AS BIGINT),
      CAST(NULLIF(_experience.analytics.customDimensions.eVars.eVar36, '') AS BIGINT)
    ) AS startup_time_ms,
    CAST(NULLIF(_experience.analytics.customDimensions.eVars.eVar37, '') AS BIGINT) AS startup_time_limit_ms,
    CASE
      WHEN LOWER(_experience.analytics.customDimensions.eVars.eVar38) = 'true' THEN TRUE
      WHEN LOWER(_experience.analytics.customDimensions.eVars.eVar38) = 'false' THEN FALSE
      ELSE NULL
    END AS qualified_attempt,
    CASE
      WHEN LOWER(_experience.analytics.customDimensions.eVars.eVar39) = 'true' THEN TRUE
      WHEN LOWER(_experience.analytics.customDimensions.eVars.eVar39) = 'false' THEN FALSE
      ELSE NULL
    END AS playback_success,
    CASE
      WHEN LOWER(_experience.analytics.customDimensions.eVars.eVar40) = 'true' THEN TRUE
      WHEN LOWER(_experience.analytics.customDimensions.eVars.eVar40) = 'false' THEN FALSE
      ELSE NULL
    END AS content_rendered,
    CASE
      WHEN LOWER(_experience.analytics.customDimensions.eVars.eVar41) = 'true' THEN TRUE
      WHEN LOWER(_experience.analytics.customDimensions.eVars.eVar41) = 'false' THEN FALSE
      ELSE NULL
    END AS fatal_playback_error,
    NULLIF(_experience.analytics.customDimensions.eVars.eVar42, '') AS error_code,
    NULLIF(_experience.analytics.customDimensions.eVars.eVar43, '') AS error_type,
    NULLIF(_experience.analytics.customDimensions.eVars.eVar44, '') AS error_stage,
    CAST(NULLIF(_experience.analytics.customDimensions.eVars.eVar45, '') AS INTEGER) AS retry_count,
    COALESCE(placeContext.geo.countryCode, _experience.analytics.customDimensions.eVars.eVar46) AS country_code,
    _experience.analytics.customDimensions.eVars.eVar47 AS language_code
  FROM streaming_playback_events
  WHERE web.webInteraction.name = 'select_content'
    AND timestamp >= CURRENT_DATE - INTERVAL '30' DAY
    AND timestamp < CURRENT_DATE
),
ranked AS (
  SELECT
    typed.*,
    ROW_NUMBER() OVER (
      PARTITION BY playback_attempt_id
      ORDER BY event_timestamp DESC, event_id DESC
    ) AS row_num
  FROM typed
  WHERE playback_attempt_id IS NOT NULL
    AND qualified_attempt IS NOT NULL
    AND playback_success IS NOT NULL
),
qualified_attempts AS (
  SELECT
    event_id,
    event_timestamp,
    playback_attempt_id,
    playback_session_id,
    user_id,
    anonymous_id,
    item_id,
    content_title,
    content_type,
    content_format,
    series_id,
    season_number,
    episode_number,
    content_duration_ms,
    is_live,
    stream_type,
    playback_position_ms,
    player_name,
    player_version,
    application_name,
    application_version,
    platform,
    device_type,
    device_manufacturer,
    device_model,
    operating_system,
    operating_system_version,
    browser_name,
    browser_version,
    network_type,
    cdn_provider,
    cdn_pop,
    drm_system,
    drm_license_status,
    video_codec,
    audio_codec,
    bitrate_kbps,
    startup_time_ms,
    startup_time_limit_ms,
    qualified_attempt,
    playback_success,
    content_rendered,
    fatal_playback_error,
    error_code,
    error_type,
    error_stage,
    retry_count,
    country_code,
    language_code
  FROM ranked
  WHERE row_num = 1
    AND qualified_attempt = TRUE
),
kpi AS (
  SELECT
    SUM(CASE WHEN playback_success = TRUE THEN 1 ELSE 0 END) AS successful_qualified_attempts,
    COUNT(*) AS total_qualified_attempts,
    100.0 * SUM(CASE WHEN playback_success = TRUE THEN 1 ELSE 0 END)
      / NULLIF(COUNT(*), 0) AS streaming_playback_success_rate_pct
  FROM qualified_attempts
)
SELECT
  q.event_id,
  q.event_timestamp,
  q.playback_attempt_id,
  q.playback_session_id,
  q.user_id,
  q.anonymous_id,
  q.item_id,
  q.content_title,
  q.content_type,
  q.content_format,
  q.series_id,
  q.season_number,
  q.episode_number,
  q.content_duration_ms,
  q.is_live,
  q.stream_type,
  q.playback_position_ms,
  q.player_name,
  q.player_version,
  q.application_name,
  q.application_version,
  q.platform,
  q.device_type,
  q.device_manufacturer,
  q.device_model,
  q.operating_system,
  q.operating_system_version,
  q.browser_name,
  q.browser_version,
  q.network_type,
  q.cdn_provider,
  q.cdn_pop,
  q.drm_system,
  q.drm_license_status,
  q.video_codec,
  q.audio_codec,
  q.bitrate_kbps,
  q.startup_time_ms,
  q.startup_time_limit_ms,
  q.qualified_attempt,
  q.playback_success,
  q.content_rendered,
  q.fatal_playback_error,
  q.error_code,
  q.error_type,
  q.error_stage,
  q.retry_count,
  q.country_code,
  q.language_code,
  k.successful_qualified_attempts,
  k.total_qualified_attempts,
  k.streaming_playback_success_rate_pct
FROM qualified_attempts q
CROSS JOIN kpi k
ORDER BY q.event_timestamp DESC, q.playback_attempt_id;

Source Data

Player Telemetry, Digital Analytics, CDN Logs, DRM License Logs, and Playback Error Monitoring

Dependencies

[ "playback_attempt_id", "content_playback_request_event", "content_first_frame_event", "audio_render_started_event", "fatal_playback_error_event", "playback_attempt_timestamp", "content_id", "content_type", "player_session_id", "application_version", "device_type", "startup_time_seconds" ]

Report Attributes

Date and hour Platform Application version Player version Device type Device manufacturer Device model Operating system Operating system version Browser Content type Live or on-demand Content ID Subscription tier Country Region Internet service provider Connection type CDN provider DRM provider Video codec Audio codec Resolution Error code

Recommended Reporting Views

Views
Streaming Playback Quality Executive DashboardPlayback Reliability Operations DashboardPlayer Release Health DashboardCDN and DRM Performance DashboardLive Event Command Center

Segment Eligibility

true

Governance

Data Sensitivityinternal

Governance

Created bydevyendarm
Created on9/5/2026
Last modified bydevyendarm
StatusPUBLISHED

GitHub

View File on GitHubcatalog/kpis/streaming-playback-success-rate.yml

Community Discussion