Content Summary Data
This document describes how to use Conviva Connect Content Summary reports. The Content Summary report is a daily offline historical log (view Conviva Connect sample) that provides session-level information for every video play or attempted play in a given day.
Audience
The Content Summary report is beneficial to many critical business departments, but it's mainly used by:
- Business analysts
- Operations teams
- Research teams
Note: To include the Conviva Household ID in your content summary data or to receive the data in parquet format, reach out to your Conviva representative.
Content summary now supports traffic rule accounts. You can now select traffic rule accounts (along with the preexisting non traffic rule accounts) to include in the content summary data pipelines. For more details, contact Conviva Support.
How to use Conviva Connect Fields?
We have summarized all the fields in a table, please review the Conviva Session Summary Schema at the end of this document.
You can use the Conviva Connect field data to:
-
Filter against a particular metadata field in the Conviva Connect file to identify issues or patterns in a set of sessions.
-
Filter against a particular Conviva Connect metric across one or many days.
-
Calculate key experience and engagement metrics (refer to the Metrics section).
-
Define and shape business KPIs (refer to the KPIs section).
-
Map a user journey: You can use a common session ID across multiple data sources (from Conviva Connect and other logs or feeds) to track the user journey through various systems such as site or content discovery, page load, player load, CMS request, DRM request, ad request, CDN request, playback experience, next page or content viewed, and app crashes.
-
Analyze viewer usage or consumption patterns: By tracking how users are engaging with content, you can research trends and patterns within viewing habits. This information can be used in content licensing or production decisions.
You can also define custom metadata to focus your queries on your specific business needs. This processed information is intended for analysis using a third-party tool.
Note: Most sensor integrations include ads delivered with SSAI (stitched ads) in the video content and metrics, and the content summary data. See the Report Events and Metadata section in the sensor integration instructions for more details about ad handling.
Get the Conviva Connect Reports
The supported delivery destinations are:
The file path is:
[c3 account name]/[file type]/[date of data]/part-*
Data is delivered in multi-part files; part-* is used to enumerate the files.
The Conviva Connect file name is in the format:
DailyContentSessionLog_<CUSTOMER_NAME>_<YYYY-MM-DD>.csv
Note: ByHousehold is appended to the file name if the household ID column is included.
Tools to Use
Typically, users load Conviva Connect into a database such as MySQL or into analytics tools such as Tableau or Micro Strategy to analyze the data and correlate it with other data sets. Refer to the sample SQL queries section for examples.
Note: When parsing legacy SSD and Connect files with .CSV data, any double quotes and commas passed to Conviva in the data columns are percent-encoded to prevent parsing errors and require percent-decoding. A sample Python decoding script in Spark is shown below. Conviva SSD and Connect files with Parquet data process double quotes and commas passed to Conviva without this decoding.
def decode_pct_encoding(s):
import urllib
if s is None:
return "Unknown"
else:
return urllib.parse.unquote_plus(s)
spark.udf.register("decode_pct_encoding", decode_pct_encoding) Get Started with Content Summary Reports
-
Define Conviva Sessions
-
Define Lifetime Sessions
-
First session (ID: 1001) starts and ends on December 16.
-
Second session (1002) starts on December 16 and crosses the midnight boundary into the next day (indicated by
EndedStatus = 0). -
Third row (ID: 1003) starts on December 15 and ends on December 16.
Three lifetime metrics are shown: Playing Time, Connection Induced Rebuffering Ratio (CIRR), and Attempt. Note that because these are lifetime sessions, the third session (ID: 1003) includes Playing Time prior to December 16. All sessions are flagged as attempts because this status persists throughout the lifetime of the session.
-
Lifetime versus Interval Sessions
Each row in the Conviva Connect file describes a video session. Conviva defines a Session as an instance of an attempt to play a video; the attempt can be an explicit viewer action or an implicit automatic player action. In Video on Demand (VOD), the attempt would typically align with a specific asset; in linear live, the attempt may correspond to multiple played assets within the same session.
Each session in Conviva Connect has a ConvivaSessionID, which is a string consisting of five segments. For example,
8025681:1708681910:125006299:1630859473:4109428019
The first four segments (in italic) represent the Client ID, which is assigned by Conviva to each device. The fifth segment (underlined) represents the Session ID.
A session that is suspended and resumed will appear as different rows with the same ConvivaSessionID. One row will have the session start time; the other row(s) will have the session resume time(s). In this case, the primary key to process the sessions is Conviva Session ID + Session Start Time.
A Conviva Connect file contains snapshots of each lifetime session. A lifetime session starts on or before the pipeline end date and terminates on the pipeline end date (PED).
Example
Consider three lifetime sessions (with abbreviated IDs) from a Conviva Connect file with a December 16 pipeline end date:
|
Conviva Session ID |
Start Time | End Time |
Playing Time |
CIRR | Attempt |
Ended Status |
|---|---|---|---|---|---|---|
| 1001 | 2022-12-16 18:38:10 |
2022-12-16 18:59:10 |
1250 | 10 | true | 1 |
| 1002 | 2022-12-16 23:59:37 |
2022-12-16 23:59:59 |
20 | 0 | true | 0 |
| 1003 | 2022-12-15 23:54:00 |
2022-12-16 00:10:00 |
950 | 5 | true | 1 |
Conviva Connect’s lifetime sessions are different from Conviva VSI that use interval sessions, which can be one minute, one hour, or longer. Because of this difference, the data and metric computations from Conviva Connect does not match the data and metric computations with ConvivaVSI. Refer to the Frequently Asked Questions section for further details. To calculate interval metrics using Conviva Connect lifetime session data, refer to examples given in the Calculating Interval (day) Metrics section.
Metrics List
| Core Metrics | ||
| Engagement Metrics | ||
| Quality of Experience (QoE) Metrics |
Video Startup Failures Business (VSF-B) Video Startup Failures Technical (VSF-T) Video Playback Failures Business (VPF-B) Video Playback Failures Technical (VPF-T) Exits Before Video Start (EBVS) |
Metric Definitions and Calculations
In most cases, lifetime metrics at the session level are provided in the Conviva Connect dataset. In cases where lifetime metrics at the session level are not provided, this section includes examples of the formulas and SQL code. The section below also shows how to aggregate the lifetime metrics across sessions. The SQL code is based on Conviva Connect date with December 16 (2022) pipeline end date.
Core Metrics
-
Attempts
-
Plays
-
Video Startup Failures (VSF)
-
Video Startup Failures Business (VSF-B)
-
Video Startup Failures Technical (VSF-T)
-
Video Playback Failures (VPF)
-
Video Playback Failures Business (VPF-B)
-
Video Playback Failures Technical (VPF-T)
-
Exits Before Video Start (EBVS)
-
Rebuffering Ratio
-
Connection Induced Rebuffering Ratio (CIRR)
-
Average Peak Bitrate
-
Avg Average Bitrate
Definition: The average bitrate in kilobytes per second of delivered content across the lifetime session, as derived from the average bandwidth attribute in the player manifest file. It represents the time-weighted average bitrates played by the player. Because some manifest files do not report average bandwith, the Avg Average Bitrate field tends to have more zero values than the Average Peak Bitrate field.
Across all sessions, the Avg Average Bitrate can be aggregated as:
-- Because bitrate is per second, convert PlayingTime to seconds
SELECT
(TotalBits / TotalPlayTimeSec) as AggAvgAverageBitRate
FROM
(
SELECT
SUM(AvgAverageBitRate * PlayingTime / 1000) as TotalBits,
SUM(PlayingTime / 1000) TotalPlayTimeSec
FROM
Demo
WHERE
PlayingTime > 0) -
Session Duration
Definition: Session Duration is the total time in seconds from the session start to the session end. It is calculated as:
-
Bandwidth
-
Video Startup Time (VST)
-
Video Restart Time (VRT)
-
Micro Playing Time
Definition: The total time in milliseconds that a session spent in continuous play time that is less than 200 milliseconds. Sometimes, the player reports false play duration; this time is excluded from the Playing Time.
-
Micro Playing Interrupts
Definition: The total number of times a session spent in continuous play time that is less than 200 milliseconds. Sometimes, the player reports false play duration; this time is excluded from the Playing Time.
-
Micro Buffering Time
Definition: The total time in milliseconds that a session spent in continuous buffering that is less than 200 milliseconds. Micro buffering could result in jittering due to the video playback; this is not excluded from the session's buffering time.
-
Micro Buffering Interrupts
Definition: The total count of number of times a session spent in continuous buffering that is less than 200 milliseconds. Micro buffering could result in jittering due to the video playback; this is not excluded from the session's buffering time.
-
Long Rebuffering Time
Definition: The total time in milliseconds that a session spent in continuous buffering that is more than 90 seconds. Long buffering occurs when a player is stuck in a buffering state; this is excluded from the session's buffering time.
-
Long Rebuffering Interrupts
Definition: The number of times a session spent in continuous buffering that is more than 90 seconds. Long buffering occurs when a player is stuck in a buffering state; this is excluded from the session's buffering time.
-
Abandonment
-
Paused Time
Definition: Paused Time shows the total time in milliseconds the viewer paused during the session. A pause occurs when the viewer hits the pause button.
Across all sessions, the Paused Time can be aggregated as:
SELECT
AVG(PausedTime) as AggPausedTimeMs
FROM
Demo -
Paused Ratio
Definition: Paused Ratio gives the paused time as a ratio of the total playing time, including rebuffering and pauses. This metric helps you understand the impact of total pause time during your video sessions.
Across all sessions, the Paused Ratio can be aggregated using the
EndedPlaysmetric:SELECT
SUM(PausedTime)/SUM(PausedTime + PlayingTime + BufferingTime) as AggPausedRatio
FROM
Demo
WHERE
EndedStatus > 0
and PlayingTime > 0 -
Last Playhead Time
Definition: The time in milliseconds of the last playhead position. This metric is available only at the session level.
-
Bitrate Switches
Definition: A bitrate switch occurs whenever a change in bitrate is detected. The Bitrate Switches metric displays the number of the bitrate switches over a lifetime session.
Across all sessions, the average number of Bitrate Switches can be aggregated using the
EndedPlaysmetric:SELECT
AVG(NumBitrateSwitches) as AggNumBitRateSwitches
FROM
Demo
WHERE
EndedStatus > 0
and PlayingTime > 0 -
CIR Related Exit
Definition: An exit that occurs during connection induced rebuffering (and not due to seek) within 5 seconds before the session end.
Across all sessions,
CIRRelatedExits %can be aggregated using theEndedPlaysmetric:SELECT
(CIRRelatedExits / EndedPlays) * 100 as CIRRelatedExits_Perc
FROM
( SUM(
CASE
WHEN
CIRRelatedExit = 'true'
then
1
END) as CIRRelatedExits, COUNT(*) as EndedPlays FROM Demo WHERE EndedStatus > 0
and PlayingTime > 0) -
Ended Plays
-
Unique Devices
-
Minutes Ended Play
-
Average % Complete
Startuptime>= 0ANDPlayingTime = (number)AND no error code, corresponds to a successful play.Startuptime= -1ANDPlayingTime = 0AND an error code, corresponds to a VSF.Startuptime = -1ANDPlayingTime = 0AND no error code, corresponds to an EBVS.StartupError = 0andBufferingTime > 0=> PassStartupError <> 0orPlayingTime < 1=> FailStartupTime <= Threshold=> PassStartupTime > Threshold=> FailAvgBitrate >= Threshold=> PassAvgBitrate < Threshold=> Fail- (
BufferingTime/BufferingTime+PlayingTime)* 100 <= Threshold=> Pass - (
BufferingTime/BufferingTime+PlayingTime)* 100 > Threshold=> Fail -
No errors (VSF-T or VPF-T)
-
No or very low Rebuffering (using CIRR)
-
Acceptable picture quality based on average bitrate for different screen sizes
-
Acceptable Video Start Time
-
No EBVS if the viewer was waiting a long time before exiting.
-
Key-value pairs are delimited by ampersand (&)
-
Key and value are separated by equals sign (=)
-
IPv4 shows the full address.
-
IPv6 shows only the first four segments (the first 64 bits).
Definition: An attempt is initiated when a viewer clicks play or a video auto-plays. An attempt can result in a successful play, or an early termination due to Video Start Failures (VSF) or Exits Before Video Start (EBVS). In Conviva Connect, each unique ConvivaSessionID + StartTimeUnix is an attempt. Across all sessions, the total number of Attempts is:
SELECT
COUNT(*) as Attempts
FROM
Demo Definition: A Play is a session with Playing Time greater than zero, which indicates that at least one video frame was played during the session lifetime.
There are two ways to aggregate the Plays. The first is a count of all sessions with PlayingTime > 0 milliseconds:
SELECT
COUNT(*) as Plays
FROM
Demo
WHERE
PlayingTime > 0 The second way is to count all session attempts that didn’t have a failure like VSF or EBVS:
In some cases, the player may report a joined state, but the user might have exited before the first video frame was played. Joined time is indicated by StartupTime > 0. If the session joined but we don't have the actual join time, then we display -3 for StartupTime. Therefore, to aggregate Plays, you can include sessions where StartupTime = -3 and PlayingTime >= 0. See also What does VST = -3 stand for? in the FAQ section.
-- Alternative method
SELECT
COUNT(*) as Plays
FROM
Demo
WHERE
StartupTime > 0
or (
StartupTime = -3
and PlayingTime >= 0) QoE Metrics
Definition: VSF indicates if a video failed to play due to a startup error. This metric is available in Conviva Connect but is called StartupError. You can find the list of associated errors in the ErrorList field.
Across all sessions, the VSF % can be aggregated using the Attempts metric:
SELECT
(VSF / Attempts) * 100 as VSF_Perc
FROM
(
SELECT
SUM (
case
WHEN
StartupError = 'true'
then
1
else
0
END) as VSF,
COUNT(*) as Attempts
FROM
Demo) Note: Conviva lists all the VSF errors the player reports within 90 seconds of the failure in the order in which they were reported. Modifying the player error reporting and error message text can help to clarify which error caused the failure.
Definition: VSF-B indicates if a video failed to play due to a business error. Find the list of associated errors in the VSFBusinessErrorList field.
Across all sessions, the VSF-B % can be aggregated using the Attempts metric:
SELECT
(VSFB / Attempts) * 100 as VSFB_Perc
FROM
(
SELECT
SUM (
case
WHEN
VSFBusiness = 'true'
then
1
else
0
END) as VSFB,
COUNT(*) as Attempts
FROM
Demo) Note: Conviva lists all the VSF-B errors the player reports within 90 seconds of the failure in the order in which they were reported. Modifying the player error reporting and error message text can help to clarify which error caused the failure.
Definition: VSF-T indicates if a video failed to play due to a technical error. Find the list of associated errors in the VSFTechnicalErrorList field.
Across all sessions, the VSF-T % can be aggregated using the Attempts metric:
SELECT
(VSFT / Attempts) * 100 as VSFT_Perc
FROM
(
SELECT
SUM (
case
WHEN
VSFTechnical = 'true'
then
1
else
0
END) as VSFT,
COUNT(*) as Attempts
FROM
Demo) Note: Conviva lists all the VSF-T errors the player reports within 90 seconds of the failure in the order in which they were reported. Modifying the player error reporting and error message text can help to clarify which error caused the failure.
Definition: VPF indicates if the video play terminates due to a playback error. VPFs are an important measurement of service quality and audience engagement, especially when a large percentage of plays terminate due to VPF. Find the list of associated errors in the VPFErrorList field.
Across all sessions, the VPF % can be aggregated using the EndedPlays metric:
SELECT
(VPF / EndedPlays) * 100 as VPF_Perc
FROM
(
SELECT
SUM (
case
WHEN
VPF = 'true'
then
1
else
0
END) as VPF,
COUNT(*) as EndedPlays
FROM
Demo
WHERE
PlayingTime > 0
and EndedStatus > 0) Note: Conviva lists all the VPF errors the player reports within 90 seconds of the failure in the order in which they were reported. Modifying the player error reporting and error message text can help to clarify which error caused the failure.
Definition: VPF-B indicates if the video play terminates due to a business playback error. VPF-Bs are an important measurement of service quality and audience engagement, especially when a large percentage of plays terminate due to VPF-B. Find the list of associated errors in the VPFBusinessErrorList field.
Across all sessions, the VPF-B % can be aggregated using the EndedPlays metric:
SELECT
(VPFB / EndedPlays) * 100 as VPFB_Perc
FROM
(
SELECT
SUM (
case
WHEN
VPFBusiness = 'true'
then
1
else
0
END) as VPFB,
COUNT(*) as EndedPlays
FROM
Demo
WHERE
PlayingTime > 0
and EndedStatus > 0) Note: Conviva lists all the VPF-B errors the player reports within 90 seconds of the failure in the order in which they were reported. Modifying the player error reporting and error message text can help to clarify which error caused the failure.
Definition: VPF-T indicates if the video play terminated due to a technical playback error. VPF-Ts are an important measurement of service quality and audience engagement, especially when a large percentage of plays terminate due to VPF-T. Find the list of associated errors in the VPFTechnicalErrorList field.
Across all sessions, the VPF-T % can be aggregated using the EndedPlays metric:
SELECT
(VPFT / EndedPlays) * 100 as VPFT_Perc
FROM
(
SELECT
SUM (
case
WHEN
VPFTechnical = 'true'
then
1
else
0
END) as VPFT,
COUNT(*) as EndedPlays
FROM
Demo
WHERE
PlayingTime > 0
and EndedStatus > 0) Note: Conviva lists all the VPF-T errors the player reports within 90 seconds of the failure in the order in which they were reported. Modifying the player error reporting and error message text can help to clarify which error caused the failure.
Definition: EBVS measures the number of viewing attempts that were terminated, typically by the viewer, before the video started. If an error is not generated, we count the failed attempt as an EBVS. An EBVS is similar to a VSF (failure to play video), but an EBVS does not include a descriptive error message.
The EBVS for each session needs to be computed from the Conviva Connect data.
Across all sessions, the EBVS % can be aggregated using the Attempts metric:
SELECT
(EBVS / Attempts) * 100 as EBVS_Perc
FROM
(
SELECT
SUM (
CASE
WHEN
StartupError = 'false'
and PlayingTime = 0
and StartupTime = -1
then
1
else
0
END) as EBVS,
COUNT(*) as Attempts
FROM
Demo) An alternative way to calculate EBVS is:
Definition: Rebuffering Ratio shows the percentage of buffering during Playing Time. From this metric, we exclude the initial player startup buffering time (before the first video frame).
Across all sessions, the Rebuffering Ratio % can be aggregated as:
SELECT
(TotalBufTime / (TotalBufTime + TotalPlayTime)) * 100 as RebufferingRatio_Perc
FROM
(
SELECT
SUM(BufferingTime) as TotalBufTime,
SUM(PlayingTime) as TotalPlayTime
FROM
Demo
WHERE
PlayingTime > 0) Definition: Rebuffering occurs when video play must wait for the buffer to fill because there's insufficient buffered video. CIRR is rebuffering unrelated to user-initiated seeks, but potentially caused by network conditions.
Across all sessions, the CIRR % is calculated using the ConnectionInducedRebufferingTime, BufferingTime, and PlayingTime fields in Conviva Connect:
SELECT
COUNT(*) as Plays
FROM
Demo
WHERE
StartupTime > 0
or (
StartupTime = -3
and PlayingTime >= 0) Note: The Zero CIRR Ended Plays % metric can be derived by identifying the sessions that played without CIRR and calculating that percentage of sessions from the total sessions that played.
Definition: The average bitrate in kilobytes per second of delivered content across the lifetime session, as derived from the bandwidth attribute in the player manifest file. Some players may not report the bandwidth attribute.
Across all sessions, the Average Peak Bitrate can be aggregated as:
-- Because bitrate is per second, convert PlayingTime to seconds
SELECT
(TotalBits / TotalPlayTimeSec) as AggAveragePeakBitRate
FROM
(
SELECT
SUM(AverageBitRate * PlayingTime / 1000) as TotalBits,
SUM(PlayingTime / 1000) TotalPlayTimeSec
FROM
Demo
WHERE
PlayingTime > 0) SELECT
EndTimeUnix - StartTimeUnix as SessionDuration
FROM
Demo Definition: Bandwidth is the amount of data transferred in megabytes (MB) per second across the lifetime session.
Across all sessions, the Bandwidth can be aggregated as:
-- Since bitrate is in seconds, convert PlayingTime to seconds
-- Since Average bitrate is kilobytes, convert to megabytes
SELECT
SUM(Bandwidth) / COUNT(*) as Bandwidth
FROM
(
SELECT
PlayingTime,
(PlayingTime / 1000) * (AverageBitRate / 8000) as Bandwidth
FROM
Demo
WHERE
PlayingTime > 0)
Definition: VST is the number of seconds between the start of the Conviva monitoring (i.e. Session Start) and the first played video frame. We exclude any time trying to play or playing ads.
Across all sessions, VST can be aggregated using the StartUpTime value:
SELECT
ROUND(TotalStartupTimeSec / Plays, 2) as StartupTimeSec
FROM
(
SELECT
SUM(StartupTime) / 1000 as TotalStartupTimeSec,
COUNT(*) as Plays
FROM
Demo
WHERE
StartUpTime >= 0) Definition: VRT is the amount of time in seconds after seeking is completed by the user until the video begins playing.
Across all sessions, the VRT can be aggregated as:
SELECT
ROUND(TotalRestartTimeSec / Plays, 2) as RestartTimeSec
FROM
(
SELECT
SUM(VideoRestartTime) / 1000 as TotalRestartTimeSec,
COUNT(*) as Plays
FROM
Demo
WHERE
PlayingTime > 0
AND VideoRestartTime != -1 ) Across all sessions, the Micro Playing Time can be aggregated as:
SELECT
SUM(MicroplayingTime) as MicroplayingTimeMs
FROM
Demo
WHERE
PlayingTime > 0
Across all sessions, Micro Playing Interrupts can be aggregated as:
SELECT
SUM(MicroplayingInterruptions) as MicroplayingInterrupts
FROM
Demo
WHERE
PlayingTime > 0
Across all sessions, Micro Buffering Time can be aggregated as:
SELECT
SUM(MicroBufferingTime) as MicroBufferingTimeMs
FROM
Demo
WHERE
PlayingTime > 0
Across all sessions, Micro Buffering Interrupts can be aggregated as:
SELECT
SUM(MicroBufferingInterruptions) as MicroBufferingInterrupts
FROM
Demo
WHERE
PlayingTime > 0
Across all sessions, Long Rebuffering Time can be aggregated as:
SELECT
SUM(LongRebufferingTime) as LongRebufferingTimeMs
FROM
Demo
WHERE
PlayingTime > 0
Across all sessions, Long Rebuffering Interrupts can be aggregated as:
SELECT
SUM(LongRebufferingInterruptions) as LongRebufferingInterrupts
FROM
Demo
WHERE
PlayingTime > 0
Definition: Abandonment occurs when a viewer exits a video before the video start with a wait time greater than 10 seconds (SPI setting defined as Good) or 8 seconds (SPI setting defined as Best). At the session level, the Abandonment metric can be calculated as:
SELECT
CASE
WHEN
(StartUpTime = -1
and StartupError = 0
and PlayingTime = 0
and SessionDurationSec > 10)
then
1
else
0
END as Abandonment10Sec
FROM
(
SELECT
StartUpTime ,
StartupError,
PlayingTime ,
(EndTimeUnix - StartTimeUnix) as SessionDurationSec
FROM
Demo)
Across all sessions, Abandonment % can be aggregated as:
SELECT
(SUM(Abandonment10Sec) / Count(*)) * 100 as Abandonment10Sec_Perc
FROM
(
SELECT
CASE
WHEN
(StartUpTime = -1
and StartupError = 0
and PlayingTime = 0
and SessionDurationSec > 10)
then
1
else
0
END as Abandonment10Sec
FROM
(
SELECT
StartUpTime ,
StartupError,
PlayingTime ,
(EndTimeUnix - StartTimeUnix) as SessionDurationSec
FROM
Demo) ) A second approach more closely matches the SPI Streams calculation on VSI. This calculation excludes from the denominator sessions that:
a) exited before the video started and the viewer did not wait a significant time (e.g. 8 seconds).
b) sessions impacted by business logic errors.
SELECT
(SUM(Abandonment10Sec) / (COUNT(*) - SUM(BusinessError))) * 100 as Abandonment_Perc
FROM
(
SELECT
CASE
WHEN
(StartUpTime = -1
and StartupError = 0
and PlayingTime = 0
and SessionDurationSec > 10)
then
1
else
0
END as Abandonment10Sec,
CASE
WHEN
(SessionDurationSec < 8
or VSFBusiness = true
or VPFBusiness = true)
then
1
END as BusinessError
FROM
(
SELECT
StartUpTime ,
StartupError ,
PlayingTime ,
(EndTimeUnix - StartTimeUnix) as SessionDurationSec,
VSFBusiness ,
VPFBusiness
FROM
Demo))
Engagement Metrics
Definition: An Ended Play is a session with a Play (PlayingTimeMs > 0) that ended (EndedStatus > 0) during the selected time frame, in this case the day (for example, December 16) of the Conviva sessions data.
Across all sessions, the number of Ended Plays can be aggregated as:
SELECT
Count(*) as EndedPlays
FROM
Demo
WHERE
PlayingTime > 0
and EndedStatus > 0 Definition: Unique Devices counts the total number of devices that had any Ended Plays during the during the selected timeframe, in this case the pipeline end date (for example, December 16) of the Conviva sessions data. A unique device is not equivalent to a unique person. If a person uses multiple devices, each device is counted as Unique Devices. If there are more than one applications offered to the same device, the Client ID will be identified for each application separately. This Client ID is represented by the first four components of the Conviva Session ID, as explained here.
Across all sessions, Unique Devices can be aggregated using the EndedPlays metric:
SELECT
COUNT(DISTINCT(CONCAT(ID[0], ":", ID[1], ":", ID[2], ":", ID[3]))) as UniqueDevices
FROM
(
-- first split sessionID into components, then construct clientID from first four
SELECT
SPLIT(ConvivaSessionID, ":") as ID
FROM
Demo
WHERE
PlayingTime > 0
and EndedStatus > 0)
Definition: The Minutes Ended Plays metric is calculated by dividing the total amount of Playing Time minutes by the number of Ended Plays during the selected timeframe, in this case the pipeline end date (for example, December 16).
Across all sessions, Minutes Ended Plays can be aggregated using the EndedPlays metric:
SELECT
TotalPlayTimeMin / TotalEndedPlays as MinuteEndedPlay
FROM
(
SELECT
-- convert millisec to minutes
SUM(PlayingTime / (1000 * 60)) as TotalPlayTimeMin,
COUNT(*) as TotalEndedPlays
FROM
Demo
WHERE
PlayingTime > 0
and EndedStatus > 0) Definition: Average % Complete shows the amount of viewed play duration compared with the total length of the content. A high % indicates a high level of viewer engagement with the asset, channel, and service.
The field PercentageComplete exists at the session level, which can be used to calculate the Average % Complete across all sessions.
SELECT
AVG(PercentageComplete) as AvePercComplete
FROM
Demo
WHERE
PercentageComplete >= 0
Calculating Interval (day) Metrics
It is not always possible to directly calculate interval metrics from the Conviva Connect lifetime sessions. In this section, we show how to calculate interval based metrics from lifetime sessions using the example from the Get Started with Content Summary Reports section. In this dataset, the third session (ID: 1003) spans two days, which means that we cannot infer the exact Playing Time and CIRR for the December 16 day-interval (00:00:00 to 23:59:59) using the December 16 pipeline end date. One solution is to obtain a dataset using the December 15 pipeline end date. For example, the following dataset has only one session (ID: 1003) because the other sessions start on the next day.
| Conviva
Session ID |
Start Time | End Time | Playing Time (seconds) |
CIRR | Attempt |
Ended Status |
|---|---|---|---|---|---|---|
| 1003 | 2022-12-15 23:54:00 |
2022-12-15 23:59:59 |
355 | 2 | true | 0 |
To calculate Playing Time and CIRR for the December 16 day-interval, subtract the respective lifetime metric ending on December 15 from the lifetime metric ending on December 16. So for the December 16 day-interval, intvPlayingTime = 950 - 355 = 595 and intvCIRR = 5 - 2 = 3. Similarly, for ConvivaSessionIDs 1001 and 1002, intvAttempt = true since both sessions started on this day whereas the third session (ID: 1003) did not, hence, intvAttempt = false.
Sample metrics for the December 16 day-interval:
| Conviva
Session ID |
Start Time | End Time |
intv Playing |
intv CIRR |
intv Attempt |
Ended Status |
|---|---|---|---|---|---|---|
| 1001 | 2022-12-16 18:38:10 |
2022-12-16 18:59:10 |
1250 | 10 | true | 1 |
| 1002 | 2022-12-16 23:59:37 |
2022-12-16 23:59:59 |
20 | 0 | true | 0 |
| 1003 | 2022-12-15 23:54:00 |
2022-12-16 00:10:00 |
595 | 3 | false | 1 |
The SQL code shows one way to do this interval calculation, where Demo16Dec is the December 16 pipeline end date and Demo15Dec is the December 15 pipeline end date.
SELECT
L.ConvivaSessionID ,
L.PlayingTime ,
L.CIRR ,
L.PlayingTime - IFNULL(P.PlayingTimePrior, 0) as IntvPlayingTime,
L.CIRR - IFNULL(P.CIRRPrior, 0) as IntvCIRR
FROM
Demo16Dec L
LEFT OUTER JOIN
Demo15Dec P
ON
(
L.ConvivaSessionId = P.ConvivaSessionID) To determine an attempt for the 16 December day-interval, we use the Demo16Dec data and the StartTimeUnix field:
SELECT
CASE
(
WHEN
FROM_UNIXTIME(StartTimeUnix, 'y-MM-dd') = "2022-12-16"
then
1
else
0
END) as intvAttempt
FROM
Demo To calculate the interval-based metrics such as Plays, Video Startup Failure, Video Restart Time, and others, follow the same logic described above. Please contact Conviva support if needed.
KPIs
Startup
Quality KPI: Successfully started sessions
Quality KPI: Sessions with StartupTime below acceptable threshold
Quality KPI: Sessions Played with an acceptable bitrate
Quality KPI: Sessions Played with acceptable buffering ratio
Conviva SPI Calculation
The Conviva SPI provides a visual indicator of your KPIs performance so you can quickly determine the number and percent of impacted streams and performance level. A stream is impacted when it fails to meet one or more of the defined KPI settings.
Conviva formulates a unified streaming performance KPI based on the percentage of streaming sessions with good or best viewing experience. This KPI represents the Conviva Streaming Performance Index, and is based on the percentage of streams with:
Conviva provides KPI settings based on Good and Best performance. You can also set custom KPI settings to match your specific performance goals.
The Content Summary files contain new fields and metrics that were unavailable in the legacy SSD file. Also, several of the legacy SSD fields have been renamed in the Content Summary schema for improved consistency.| New Fields in Content Summary Schema |
BrowserVersion
dt |
IPType
IPV4 IPV6 LastPlayheadTime NumBitrateSwitches PausedRatio PauseTime PlayerFrameworkName PlayerFrameworkVersion PostalCode ReBufferingTime VSFTechnical |
||||||||||||||||
| Renamed Fields |
|
|||||||||||||||||
Content Session Summary Field Descriptions
Note: All INTEGER type fields can store 64-bit integer values.
|
Field name |
Type |
Mode |
Description |
|
ViewerID |
VARCHAR(128) |
NULLABLE |
Unique identifier of the viewer (sometimes called subscriber) watching content in that session. This is typically a number, or a hashed/masked identifier without any personally identifiable information. The same ViewerId can have multiple sessions. Note: If Viewer ID is not available, in the legacy SSD report, the field shows IP address, whereas in Conviva Connect summary, it shows NULL. |
|
AssetName |
STRING |
NULLABLE |
The name of the viewed video asset |
|
DeviceOS |
STRING |
NULLABLE |
The operating system of the device |
| DMA | STRING | NULLABLE | The Designated Market Area or media region in which the session was viewed.
This field is null when the DMA is unavailable. |
| CIRRelatedExit | SMALLINT | NULLABLE | A user initiated exit that occurred either during connection induced rebuffering (non-seek rebuffering) or within 5 seconds of connection induced rebuffering before the session end. |
| isLive | BOOLEAN | NULLABLE |
Whether the content is a linear or live stream or a prerecorded a VoD asset. The value is 'true' only for the live content type. For all other content types, such as Unknown, NULL, and VoD, the value is 'false'. |
| Postal Code | STRING | NULLABLE | A series of numbers used for postal delivery area identification.
This field is null when the Postal Code is unavailable. |
|
Country |
STRING |
NULLABLE |
The country location where the content was watched. |
|
State |
VARCHAR(128) |
NULLABLE |
The state location where the content was watched |
|
City |
STRING |
NULLABLE |
The city location where the content was watched |
|
ASN |
STRING |
NULLABLE |
Autonomous System Number for the ISP from which the video was streamed |
|
ISP |
STRING |
NULLABLE |
The name of the Internet Service Provider |
|
StartTimeUnix |
INTEGER |
NULLABLE |
The time when Conviva received the first heartbeat for the session. The format is Unix epoch time in seconds. |
|
StartTimeUnixMs |
INTEGER |
NULLABLE |
The time when Conviva received the first heartbeat for the session. The format is Unix epoch time in milliseconds. |
|
StartupTime |
INTEGER |
NULLABLE |
The time in milliseconds between the start of the Conviva monitoring and the first-played video frame. StartupTime excludes pre-roll ad time.
-1 indicates an unsuccessful play (no startup time). -3 indicates the session connected, but the client didn't send us the necessary information to determine when the video began playing. |
|
PlayingTime |
INTEGER |
NULLABLE |
The amount of time in milliseconds when a player is actively displaying video content during a session. PlayingTime excludes rebuffering time. |
| ReBufferingTime | INTEGER | NULLABLE | The time between the video stalling during playback and the viewer waiting for the video to resume playing. |
|
Interrupts |
INTEGER |
NULLABLE |
The number of times the session was interrupted for rebuffering. If a pause or other viewer action caused buffering, that buffering is counted as an interrupt. Viewer pausing and resuming a session without any buffering is not counted as interrupt. |
|
AverageBitRate |
INTEGER |
NULLABLE |
Average bitrate in kbps at which content was delivered during the session. The ability to determine bitrate depends on the player integration. Not all players can deliver bitrate information. |
|
StartupError |
SMALLINT |
NULLABLE |
If value = true, the video failed to play and there was a startup error (see Error list). If value = false, the video played and there was no startup error. |
|
SessionTags |
RECORD[VARCHAR(64)/each key, VARCHAR(256)/each Value] |
REPEATED |
The custom player metadata that is defined during your Conviva integration. Session tags reflect your specific business needs and player information. For CSV output file the value is in String format, where: For example, c3.cmp.0._id=da&c3.cmp.0._ver=1 &c3.cluster.name=production &c3.cmp.0._cfg_ver=1516215389 &c3.cmp.0._type=DEVATLAS &c3.pt.os=UNIX &c3.protocol.type=cws. For Parquet file format,
|
| IPV4 | VARCHAR(32) | NULLABLE | The public IP address of the viewer's video playing device in v4 version. For example, 84.106.90.230. |
| IPV6 | VARCHAR(48) | NULLABLE | The public IP address of the viewer's video playing device in v6 version. For example, 2600:8801:8d07:e100:c0a9:9de9:8741:267. |
|
IPAddress |
VARCHAR(48) |
NULLABLE |
The public IP address of the viewer's video playing device. The IP address - as seen by the Conviva gateway - typically corresponds to the modem gateway for fixed connections or the packet gateway for mobile connections. For European customers, due to legal/privacy reasons, the IP address is not shown. |
| IPType | STRING | NULLABLE | The type of the device's public IP address, such as, IPV4 Only, IPV6 Only |
|
CDN |
VARCHAR(256) |
NULLABLE |
The CDN associated with the streaming session |
|
Browser |
STRING |
NULLABLE |
The browser used by the viewer's device."Non-Browser Apps" is shown if the video stream was viewed on a mobile app or a connected TV. |
|
ConvivaSessionID |
VARCHAR(128) |
NULLABLE |
The unique Conviva session identifier in format of five, colon-separated integer numbers. The last block represents the Conviva Client ID. The last number block represents the Conviva Session ID.
Client ID = 20048757:2397552430:4151350518:1876058113 Session ID = 4487054 |
|
StreamURL |
VARCHAR(2048) |
NULLABLE |
The URL of the video stream |
|
ErrorList |
[VARCHAR(1024)/each] |
REPEATED |
A list of fatal errors that occurred during this session, separated by "&". A session Startup Time of -1 and Playing Time of 0 with no error list, indicates an Exit Before Video Start (EBVS) occurred. For CSV output file, the ErrorList value is in |
|
PercentageComplete |
INTEGER |
NULLABLE |
The percentage of video content the viewer watched during a session. % Complete is calculated by dividing the total playing time for the session by the total content length. % Complete is rounded to the nearest integer value. A value of -1 means we couldn't obtain content length (for example, in live content). A value of 0 means that the video did not start or that the Percentage Complete is less than 1%. |
|
ConnectionInducedRebufferingTime |
INTEGER |
NULLABLE |
The non-seek rebuffering time in milliseconds |
|
VideoRestartTime |
INTEGER |
NULLABLE |
The total time between the user's seek complete and the video replay. VideoRestartTime in milliseconds is the sum of all such occurrences for the entire session. |
|
RejoinedCount |
INTEGER |
NULLABLE |
Number of times the video rejoined after a user seek |
|
VPF |
SMALLINT |
NULLABLE |
Video Playback Failures (VPF) occurs when a fatal error causes a video playback to fail. The field is set to TRUE if the session started successfully but ended with a fatal error. |
|
VPFErrorList |
RECORD |
REPEATED |
Video Playback Failure Error list contains errors (including custom errors) that caused the playback to fail. For CSV output file, the VPFErrorList value is in |
|
ContentLength |
INTEGER |
NULLABLE |
The asset length in milliseconds. Applicable only for VOD traffic. For LIVE video, the content length value is set to -1 for unknown |
|
EndedStatus |
INTEGER |
NULLABLE |
An integer (0-5) showing the session status at the end of the day: 0 = Not Ended; at the SSD issue time, the session is still active. 1 = Gracefully ended; the session ended with a session ended event. 2 = Expired due to lack of heartbeat update; No heartbeat update was received for 2 minutes. 3 = Expired due to long buffering; the total session lifetime buffering exceeded longer than 30 minutes, classified as a zombie session. 4 = Ended due to long pause; the session paused for a continuous period of longer than 10 minutes. 5 = Ended due to continuous buffering; session was in a continuous buffering state for longer than four minutes. |
| SessionEndedStatus | STRING | The state of the session when it was ended, such as, GracefulEnd, NotEnded, or ByExpiration. | |
|
EndTimeUnix |
INTEGER |
NULLABLE |
The time the last session heartbeat within the day was received. The format is Unix epoch time in seconds. |
|
EndTimeUnixMs |
INTEGER |
NULLABLE |
The time the last session heartbeat within the day was received. The format is Unix epoch time in milliseconds. |
|
VSFBusiness |
BOOLEAN |
NULLABLE |
Video Start Failures (VSF) Business measures whether the Attempts got terminated during video startup before the first video frame was played and fatal error was reported due to a business logic issue, such as usage limits. |
|
VSFBusinessErrorList |
RECORD |
REPEATED |
Video Start Failures (VSF) Business Error list contains errors (including custom errors) that caused the video start to fail due to business logic issue. For CSV output file, the VSFBusinessErrorList value is in |
|
VSFTechnical |
BOOLEAN |
NULLABLE |
Video Start Failures (VSF) Technical measures whether the Attempts got terminated during video startup before the first video frame was played and fatal error was reported due to a technical logic issue, such as prolonged buffering. |
|
VSFTechnicalErrorList |
RECORD |
REPEATED |
Video Start Failures (VSF) Technical Error list contains errors (including custom errors) that caused the video start to fail due to technical logic issue. For CSV output file, the VSFTechnicalErrorList value is in |
|
VPFBusiness |
SMALLINT |
NULLABLE |
Video Playback Failures (VPF) Business measures how often Attempts terminated during video playback and a fatal error was reported due to a business logic issue, such as usage limits |
|
VPFBusinessErrorList |
RECORD |
REPEATED |
Video Playback Failures (VPF) Business Error list contains errors (including custom errors) that caused the video playback to fail due to business logic issue. For CSV output file, the VPFBusinessErrorList value is in |
|
VPFTechnical |
BOOLEAN |
NULLABLE |
Video Playback Failures (VPF) Technical measures whether the Attempts got terminated during video playback and fatal error was reported due to a technical logic issue, such as prolonged buffering. |
|
VPFTechnicalErrorList |
RECORD |
REPEATED |
Video Playback Failures (VPF) Technical Error list contains errors (including custom errors) that caused the video playback to fail due to technical logic issue. For CSV output file, the VPFTechnicalErrorList value is in |
|
PauseTime |
INTEGER |
NULLABLE |
Total pause time in milliseconds for a session. |
| CIRRInterruptCount | INTEGER | The number of plays with interrupts caused by connection induced rebuffering. | |
|
MicroPlayingTime |
INTEGER |
NULLABLE |
The total time in milliseconds that a session spent in continuous play time that lasted less than 200 milliseconds. |
|
MicroPlayingInterruptions |
INTEGER |
NULLABLE |
The total number of times a session spent in continuous play time that lasted less than 200 milliseconds. Sometimes, the player reports false play duration; this time is excluded from the Playing Time. |
|
MicroBufferingTime |
INTEGER |
NULLABLE |
The total time in milliseconds that a session spent in continuous buffering that is less than 200 milliseconds. Micro buffering could result in jittering due to the video playback and this is not excluded from the session's buffering. |
|
MicroBufferingInterruptions |
INTEGER |
NULLABLE |
The total number of times a session spent in continuous buffering that lasted less than 200 milliseconds. There can be jittering in the video playback when micro buffering occurs, and is not excluded from the session's buffering. |
|
LongRebufferingTime |
INTEGER |
NULLABLE |
The total time in milliseconds that a session spent in continuous buffering that lasted more than 90 seconds. Long buffering can occur because a player is stuck in a buffering state. Long rebuffering is excluded from rebuffering time. |
|
LongRebufferingInterruptions |
INTEGER |
NULLABLE |
The total number of times a session spent in continuous buffering that lasted more than 90 seconds. Long buffering can occur because a player is stuck in a buffering state. Long rebuffering this is excluded from rebuffering time. |
|
LastCDNEdgeServer |
STRING |
NULLABLE |
The IP address of the CDN Edge Server. |
|
LastCDNGroupID |
STRING |
NULLABLE |
The region or pop identifier of the CDN Edge Server. |
| ExitDuringPreRoll |
SMALLINT |
NULLABLE |
A started session exited after a pre-roll ad break start was reported and before the pre-roll ad break end was reported. The session never reported ‘play’ state. |
| AdRelatedRebuffering |
INTEGER |
NULLABLE |
Rebuffering duration in milliseconds which started up to 60 seconds after an ad |
| RebufferingDuringAds |
INTEGER |
NULLABLE |
Rebuffering duration in milliseconds happening during the ad playback, using main video session playback |
| PausedRatio | FLOAT | NULLABLE | The paused time as a ratio of the total playing time, including rebuffering and pauses. |
| LastPlayheadTime | INTEGER | NULLABLE | The last play time, after which a pause, end, or expire event occurred in a session that did not resume playing |
| NumBitrateSwitches | INTEGER | NULLABLE | The number of the bitrate switches that occurred during the lifetime session. A bitrate switch occurs whenever a change in bitrate is detected. |
| AvgAverageBitRate | INTEGER | NULLABLE | The average bitrate (in kilobytes per second) across the lifetime sessions as derived from the average bandwidth field of the manifest file. This value represents the time-weighted average bitrates played by the player. |
| HouseholdID |
VARCHAR(128) |
NULLABLE |
Unique identifier for a Household. Note: Connect assigns household IDs based on the IPClientID for household IP address detection, improving the accuracy of household assignments with stricter mapping logic. With this more detailed assignment logic, there is also an increase in returned NULL values for streams that fail to start due to Video Start Failures (VSFs) and Exits Before Video Start (EBVS), non-residences, and other types of exceptions. |
| HouseholdIP | VARCHAR(48) | NULLABLE |
The IP address of the physical residence where devices are located. It can be either IPv4 or IPv6: Note: |
| DeviceHardwareType |
STRING |
NULLABLE | The type of your device hardware such as set top box, mobile phone, tablet, and TV |
| DeviceManufacture |
STRING |
NULLABLE | The manufacturer of the device from which the content was watched, such as Google, Roku, Huawei, and Apple |
| DeviceMarketingName |
STRING |
NULLABLE | Marketing name of the device from which the content was watched, such as, Google Chromecast, Huawei P20, and Apple iPhone 12 Pro |
| DeviceName |
STRING |
NULLABLE | Name of the device from which the content was watched, such as, Android phone, Apple iPhone, and Chromecast |
| DeviceOSVersion | STRING | NULLABLE | The version of the operating system used by the device |
| DeviceOSFamily | STRING | NULLABLE | The name of the operating system group, such as PlayStation for PlayStation 3 and PlayStation 4, or Windows for Windows 10 and Windows XP. |
| BrowserVersion | STRING | NULLABLE | The browser version of the device on which the content was watched |
| PlayerFrameworkName | STRING | NULLABLE | The name of the player framework used for video playback, for example, AVFoundation, NexPlayer, and HTML5. |
| PlayerFrameworkVersion | STRING | NULLABLE | The version of the framework used for video playback. |
| DeviceModel |
STRING |
NULLABLE | Model of the device, such as, iPad Pro 11-inch (2nd generation), EML-L29 |
| DeviceVendor | STRING | NULLABLE | Vendor of the device |
| ConnectionType | STRING | NULLABLE | The type of network connection used to consume content, for example, mobile, wired, and wireless. |
| DecisionBitrate | INTEGER | NULLABLE | The btirate associated with resource returned to Precision. A value of 0 indicates the bitrate is not known. |
| DecisionResource | STRING | NULLABLE | The internal resource returned to Precision. |
| DecisionResourceId | STRING | NULLABLE | The internal Conviva id for the component returning the result to Conviva Precision. |
| DecisionResourceResolved | STRING | NULLABLE | The resource being returned by Conviva Precision, for example Akamai Live Content Node. |
| pCoreCDN | STRING | NULLABLE | The CDN being returned by Conviva Precision, for example AKAMAI. |
| dt | TIMESTAMP | NULLABLE | Starting hour of the hourly interval range, in the format <YYYY-MM-DD>T<hh:mm:ss.sss>Z", where T is the separator for date and time, and Z indicates UTC timezone. For example, 2024-05-21T15:00:00.000Z. |
Note: HouseholdID is available only for customers who have StreamID feature enabled.