Skip to content

Commit

Permalink
feat: add playback monitoring
Browse files Browse the repository at this point in the history
Resolves #262, by allowing to track media playback sessions. With to the data
sent, it will be possible to have a better overview of the quality of our
service. Finally, it will help us to investigate potential causes of playback
problems, so that we can better help our users or provide them with a more
accurate response.

- rename `analytics` folder to `trackers`
- add `PillarboxMonitoring` class
- modify `srgssr` middleware to add support for new tracker
- add unit test
- extract `srg-analytics` player mock to make it reusable
- rename `test/analytics` folder to `test/trackers`
  • Loading branch information
amtins committed Oct 14, 2024
1 parent 1600973 commit e867456
Show file tree
Hide file tree
Showing 6 changed files with 1,741 additions and 58 deletions.
34 changes: 32 additions & 2 deletions src/middleware/srgssr.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ import DataProvider from '../dataProvider/services/DataProvider.js';
import Image from '../utils/Image.js';
import Drm from '../utils/Drm.js';
import AkamaiTokenService from '../utils/AkamaiTokenService.js';
import SRGAnalytics from '../analytics/SRGAnalytics.js';
import SRGAnalytics from '../trackers/SRGAnalytics.js';
import PillarboxMonitoring from '../trackers/PillarboxMonitoring.js';
import MediaComposition from '../dataProvider/model/MediaComposition.js';

// Translations
Expand Down Expand Up @@ -473,6 +474,8 @@ class SrgSsr {
* @returns {Promise<import('./typedef').ComposedSrcMediaData>} - The composed source media data.
*/
static async getSrcMediaObj(player, srcObj) {
player.trigger('pillarbox-monitoring/sessionstart');

const { src: urn, ...srcOptions } = srcObj;
const mediaComposition = await SrgSsr.getMediaComposition(
urn,
Expand Down Expand Up @@ -599,6 +602,33 @@ class SrgSsr {
}
}

/**
* SRG monitoring singleton.
*
* @param {import('video.js/dist/types/player').default} player
*
* @returns {PillarboxMonitoring} instance of PillarboxMonitoring
*/
static srgMonitoring(player) {
if (player.options().trackers.srgMonitoring === false) return;

if (!player.options().trackers.srgMonitoring) {
const srgMonitoring = new PillarboxMonitoring(player, {
debug: player.debug(),
playerVersion: Pillarbox.VERSION.pillarbox,
playerName: 'Pillarbox',
});

player.options({
trackers: {
srgMonitoring,
},
});
}

return player.options().trackers.srgMonitoring;
}

/**
* Update player's poster.
*
Expand Down Expand Up @@ -637,7 +667,7 @@ class SrgSsr {
* @returns {Object}
*/
static middleware(player) {

SrgSsr.srgMonitoring(player);
SrgSsr.cuechangeEventProxy(player);

return {
Expand Down
Loading

0 comments on commit e867456

Please sign in to comment.