react-video-analytics
v0.1.3
Published
Easily generate and post video player metrics
Downloads
61
Maintainers
Readme
React Video Analytics
Easily generate and post video player metrics
Table of contents
Installation
To install and set up the library, run:
$ npm install --save react-video-analytics
Or if you prefer using Yarn:
$ yarn add react-video-analytics
Usage
Setup
Begin by wrapping your app with the AnalyticsProvider.
import { AnalyticsProvider } from 'react-video-analytics'
...
return (
<AnalyticsProvider>
<App />
</AnalyticsProvider>
)
Attach
Using the useAnalytics hook, attach a reference to your video player.
import { useAnalytics } from 'react-video-analytics'
const MyComponent = () => {
const videoRef = useRef<HTMLVideoElement>(null)
useAnalytics(videoRef)
return (
<video ref={videoRef} />
)
}
Send
Implement the send
option to send metrics to your analytics service. The send
function will be called every time the video player emits a ReportAction which you can reference via metrics.action
. The following example uses axios to post the metrics payload to an API endpoint:
import axios from 'axios'
import { useAnalytics } from 'react-video-analytics'
const MyComponent = () => {
const videoRef = useRef<HTMLVideoElement>(null)
useAnalytics(videoRef, {
send: (metrics) => {
// Send metrics to your analytics service
axios.post('https://my-api.com/video-analytics', metrics)
}
})
return (
<video ref={videoRef} />
)
}
API
AnalyticsProvider
Use the AnalyticsProvider
to create custom video player configurations. By default, react-video-analytics
supports a standard HTML video player. It also ships with an optional VimePlayerConfig
that you can use instead if your project uses a Vime video player.
Props
| Prop | Type | Default value | Description |
|--------------------------------|-------------------------------|-------------------------------------|----------------------------------------------------------------------------------------------|
| defaultPlayerConfig (optional) | PlayerConfig | VideoPlayerConfig
| Provides the default player configuration to use. |
| defaultTimeInterval (optional) | number
| 30000
| The default interval, in milliseconds, to call send
when the timeupdate
event is emitted |
| viewerIdKey (optional) | string
| 'react-video-analytics-viewer-id'
| The storage key name to use for storing the viewer's unique identifier. |
Types
PlayerConfig<Player = unknown>
| Prop | Type | Description |
|-----------------|--------------------------------------------------------------|--------------------------------------------------------------------------------------|
| getVideoElement | <P extends Player>(player: P) => Promise<HTMLVideoElement>
| Defines how to retreive the html video element from a generic video player component |
Examples
Using a custom player component:
import { PlayerConfig } from 'react-video-analytics'
...
return (
<AnayticsProvider
defaultPlayerConfig={{
getVideoElement: (player: SomeCustomPlayer) => {
// Write logic to return the html video element from your custom player
}
} as PlayerConfig<SomeCustomPlayer> }
>
<App/>
</AnayticsProvider>
)
...
Using the Vime video player component:
import { VimePlayerConfig } from 'react-video-analytics'
...
return (
<AnayticsProvider
defaultPlayerConfig={VimePlayerConfig}
>
<App/>
</AnayticsProvider>
)
...
useAnalytics
The useAnalytics
hook requires a reference to your video player component. It also accepts an optional options
object that allows you to customize how metrics are handled and sent to your analytics service.
Options
| Prop | Type | Default | Description |
|-------------------------|----------------------------------------------------|---------------------|-------------------------------------------------------------------------------------------------------------------------|
| send (optional) | (metrics: ReportMetrics) => void | -
| Describes how to post metrics to your analytics service |
| videoId (optional) | string
| -
| Optionally supply a unique identifier for the video source being played. When this changes, a new viewId
is generated |
| maxAttempts (optional) | number
| 5
| Maximum number of times to attempt to send metrics before calling onFail
|
| playerConfig (optional) | PlayerConfig
| VideoPlayerConfig
| The player configuration to use corresponding to the player component reference passed to useAnalytics
|
| timeInterval (optional) | number
| 30000
| The interval, in milliseconds, to call send
when the timeupdate
event is emitted |
| onQueue (optional) | (metrics: ReportMetrics) => void | -
| Called when metrics are queued to be sent |
| onComplete (optional) | (metrics: ReportMetrics) => void | -
| Called when metrics are successfully sent |
| onError (optional) | (metrics: ReportMetrics) => void | -
| Called when metrics fail to be sent |
| onRequeue (optional) | (metrics: ReportMetrics) => void | -
| Called when metrics are requeued to be sent |
| onFail (optional) | (metrics: ReportMetrics) => void | -
| Called when metrics fail to be sent after maxAttempts
|
Types
ReportMetrics
| Prop | Type | Description |
|---------|---------------------------------|----------------------------------------------------------------------------------------------|
| timestamp | string
| The timestamp when the metric was created |
| hourOfDay | number
| The hour of day when the metric was created |
| dayOfWeek | number
| The day of the week when the metric was created |
| action | ReportAction | The action that generated the metric |
| position | number
| The current time (position), in seconds, of the video player |
| duration | number
| The total duration, in seconds, of the video being played |
| durationBuffering | number
| The time spent buffering, in seconds, whenever the video finishes buffering |
| browser | BrowserState | Details about the browser being used to watch the video |
| headers | ReportHeaders | The view and viewer ID of the video session |
| error (optional) | ReportError | Error details. Particularly useful when onError
, onRequeue
, or onFail
are called |
| __attempts (optional) | number
| The total number of attempts to send metrics. Particularly useful when onRequeue
is called |
ReportAction
| Value | Description |
|------------|---------------------------------------------------------------------------------------------|
| complete
| The video completed playing |
| pause
| The video player was paused |
| play
| The video player was played |
| quality
| The video quality setting was changed |
| seek
| The video player began seeking |
| buffer
| The video player began buffering |
| time
| The video player's current time was updated. By default this action occurs every 30 seconds. |
| setup
| The initial report action |
| error
| A playback error occurred |
BrowserState
| Prop | Type | Description |
|--------------------|----------|-------------------------------------------------------------|
| host (optional) | string
| The host domain that the video is being watched on. |
| os (optional) | string
| The operating system that the video is being watched on. |
| name (optional) | string
| The name of the browser that the video is being watched on. |
| version (optional) | string
| The browser version that the video is being watched on. |
ReportHeaders
| Prop | Type | Description |
|----------|----------|------------------------------------------------------------------------------------------------------------------------------|
| viewId | string
| An identifier for the video's current view (session). Use this for tracking the number of views on your video. |
| viewerId | string
| An identifier for the unique viewer (user) watching the video. Use this to track the number of unique viewers of your video. |
ReportError
| Prop | Type | Description |
|-------------------|-------------------|-----------------------------------------------------------------------|
| message | string
| A message describing the error that occurred. |
| code | string
| A code associated to the error that occurred. |
| data | object
| A object containing additional details about the error that occurred. |
| source (optional) | unknown
| A potential reference to the error's source. |
Authors
- Colin Hooper - Initial work - colin-oos
See also the list of contributors who participated in this project.
License
MIT License © oos