Tapemetric

Events

Playback events

The events your video player should emit. These power watch time, concurrency, completion, and QoS metrics.

play_start

Fire when playback begins — after manifest load and first frame render.

typescript
rd.trackPlayStart(
  {
    contentId: 'aashiqana_s04e12',
    contentType: 'series',
    contentTitle: 'Aashiqana · S4 E12',
    season: 4,
    episode: 12,
    durationSec: 2640,
  },
  { positionSec: 0, bitrateKbps: 4500 },
);

pause / resume

Emit on user-initiated pause. Don’t fire on buffering — use buffer for that.

typescript
rd.trackPause({ positionSec: 124 });
rd.trackResume({ positionSec: 124 });

buffer

Fire when the player stalls mid-playback and resumes. The durationMs is the rebuffer duration — this drives the QoS rebuffer ratio.

typescript
rd.trackBuffer(
  840 /* ms stalled */,
  { positionSec: 456, bitrateKbps: 2500 },
);

seek

typescript
rd.trackSeek(124, 340);  // from, to in seconds

bitrate_change

Fire on every ABR ladder switch.

typescript
rd.trackBitrateChange(6500);  // kbps

heartbeat (automatic)

The SDK fires a heartbeat every 30 seconds while playback is active. You don’t call this directly — it’s what powers concurrency counts and watch-hour totals.

complete

Fire on video end — either natural end or manual close after >90% completion.

typescript
rd.trackComplete({ positionSec: 2640, durationSec: 2640 });

error

typescript
rd.trackError('MANIFEST_PARSE_FAIL', 'Unexpected token in m3u8');
rd.trackError('DRM_LICENSE_403', 'Widevine license server rejected request');

Recommended event order

  1. play_start once, after first frame.
  2. heartbeat every 30s (automatic).
  3. bitrate_change per ABR switch.
  4. buffer when waitingplaying.
  5. pause / resume on user action.
  6. seek on scrub.
  7. complete on end.

Metrics you get for free

MetricComputed from
Concurrent viewersdistinct session_id with heartbeat in last 90s
Watch hourssum of heartbeat intervals
Completion ratecomplete / play_start per content
Rebuffer ratiosum buffer_duration_ms / watch time
Startup timeClient timestamp delta from page_view to play_start
Average bitrateweighted by time between bitrate_change events