Legacy Code comparison — 1.x to 2.x code-comparison-x-to-x
All of the configuration parameters and tracking APIs are now consolidated into the MediaHeartbeats
and MediaHeartbeatConfig
classes.
Configuration API changes:
AdobeHeartbeatPluginConfig.sdk
- Renamed toMediaConfig.appVersion
MediaHeartbeatConfig.playerName
- Now set throughMediaHeartbeatConfig
instead ofVideoPlayerPluginDelegate
- (For JavaScript only): The
AppMeasurement
instance - Now sent through theMediaHeartbeat
constructor.
Configuration properties changes:
sdk
- Renamed toappVersion
publisher
- Removed; Experience Cloud Org ID is used instead as a publisherquiteMode
- Removed
Links to 1.x and 2.x sample players:
The following sections provide code comparisons between 1.x and 2.x, covering Initialization, Core Playback, Ad Playback, Chapter Playback, and some additional events.
VHL Code Comparison: INITIALIZATION
Object Initialization
1.x API
2.x API
Heartbeat()
MediaHeartbeat()
VideoPlayerPlugin()
MediaHeartbeatConfig()
AdobeAnalyticsPlugin()
HeartbeatPlugin()
Video player plugin initialization (1.x) plugin-init-1.x
this._playerPlugin = new VideoPlayerPlugin( new SampleVideoPlayerPluginDelegate(this._player));
var playerPluginConfig = new VideoPlayerPluginConfig();
playerPluginConfig.debugLogging = true;
// Set up the AppMeasurement plugin
this._aaPlugin = new AdobeAnalyticsPlugin( appMeasurement, new SampleAdobeAnalyticsPluginDelegate());
var aaPluginConfig = new AdobeAnalyticsPluginConfig();
aaPluginConfig.channel = Configuration.HEARTBEAT.CHANNEL;
aaPluginConfig.debuglogging = true;
this._aaPlugin.configure(aaPluginConfig);
// Set up the AdobeHeartbeat plugin
var ahPlugin = new AdobeHeartbeatPlugin( new SampleAdobeHeartbeatPluginDelegate());
var ahPluginConfig = new AdobeHeartbeatPluginConfig( configuration.HEARTBEAT.TRACKING_SERVER, configuration.HEARTBEAT.PUBLISHER);
ahPluginConfig.ovp = configuration.HEARTBEAT.OVP;
ahPluginConfig.sdk = configuration.HEARTBEAT.SDK;
ahPluginConfig.debugLogging = true;
ahPlugin.configure(ahPluginConfig);
var plugins = [this._playerPlugin, this._aaPlugin, ahPlugin];
// Set up and configure the heartbeat library this._heartbeat = new Heartbeat(new SampleHeartbeatDelegate(), plugins);
var configData = new HeartbeatConfig();
configData.debugLogging = true;
this._heartbeat.configure(configData);
Media Heartbeat initialization (2.x) mh-init-2.x
var mediaConfig = new MediaHeartbeatConfig();
mediaConfig.trackingServer = Configuration.HEARTBEAT.TRACKING_SERVER;
mediaConfig.playerName = Configuration.PLAYER.NAME;
mediaConfig.debugLogging = true;
mediaConfig.channel = Configuration.HEARTBEAT.CHANNEL;
mediaConfig.ssl = false;
mediaConfig.ovp = Configuration.HEARTBEAT.OVP;
mediaConfig.appVersion = Configuration.HEARTBEAT.SDK;
this._mediaHeartbeat = new MediaHeartbeat( new SampleMediaHeartbeatDelegate(this._player), mediaConfig, appMeasurement);
Delegates
1.x API
2.x API
VideoPlayerPluginDelegate()
MediaHeartbeatDelegate()
VideoPlayerPluginDelegate().getVideoInfo
MediaHeartbeatDelegate().getCurrentPlaybackTime
VideoPlayerPluginDelegate().getAdBreakInfo
MediaHeartbeatDelegate().getQoSObject
VideoPlayerPluginDelegate().getAdInfo
VideoPlayerPluginDelegate().getChapterInfo
VideoPlayerPluginDelegate().getQoSInfo
VideoPlayerPluginDelegate().get.onError
AdobeAnalyticsPluginDelegate()
VideoPlayerPluginDelegate (1.x) player-plugin-delegate-1.x
$.extend(SampleVideoPlayerPluginDelegate.prototype, VideoPlayerPluginDelegate.prototype);
function SampleVideoPlayerPluginDelegate(player) {
this._player = player;
}
SampleVideoPlayerPluginDelegate.prototype.getVideoInfo = function() {
return this._player.getVideoInfo();
};
SampleVideoPlayerPluginDelegate.prototype.getAdBreakInfo = function() {
return this._player.getAdBreakInfo();
};
SampleVideoPlayerPluginDelegate.prototype.getAdInfo = function() {
return this._player.getAdInfo();
};
SampleVideoPlayerPluginDelegate.prototype.getChapterInfo = function() {
return this._player.getChapterInfo();
};
SampleVideoPlayerPluginDelegate.prototype.getQoSInfo = function() {
return this._player.getQoSInfo();
};
AdobeAnalyticsPluginDelegate (1.x) analytics-plugin-delegate-1.x
$.extend(SampleAdobeAnalyticsPluginDelegate.prototype, AdobeAnalyticsPluginDelegate.prototype);
function SampleAdobeAnalyticsPluginDelegate() {}
SampleAdobeAnalyticsPluginDelegate.prototype.onError = function(errorInfo) {
console.log("AdobeAnalyticsPlugin error: " + errorInfo.getMessage() + " | " + errorInfo.getDetails());
};
HeartbeatDelegate (1.x) hb-delegate-1.x
$.extend(SampleHeartbeatDelegate.prototype, HeartbeatDelegate.prototype);
function SampleHeartbeatDelegate() {}
SampleHeartbeatDelegate.prototype.onError = function(errorInfo) {
console.log("Heartbeat error: " + errorInfo.getMessage() + " | " + errorInfo.getDetails());
};
MediaHeartbeatDelegate (2.x) mh-delegate-2.x
ADB.core.extend(SampleMediaHeartbeatDelegate.prototype, MediaHeartbeatDelegate.prototype);
function SampleMediaHeartbeatDelegate(player) {
this._player = player;
}
SampleMediaHeartbeatDelegate.prototype.getCurrentPlaybackTime = function() {
return this._player.getCurrentPlaybackTime();
};
SampleMediaHeartbeatDelegate.prototype.getQoSObject = function() {
return this._player.getQoSInfo();
};
this._mediaHeartbeat = new MediaHeartbeat(new SampleMediaHeartbeatDelegate(this._player), mediaConfig, appMeasurement);
VHL Code Comparison: CORE PLAYBACK
Session Start
VHL 1.x
VHL 2.x
VideoPlayerPluginDelegate.trackVideoLoad()
MediaHeartbeat.createMediaObject()
VideoPlayerPluginDelegate.getVideoInfo()
MediaHeartbeat.trackSessionStart()
Session Start (1.x) session-start-1.x
VideoAnalyticsProvider.prototype._onLoad = function() {
this._playerPlugin.trackVideoLoad();
};
SampleVideoPlayerPluginDelegate.prototype.getVideoInfo = function() {
return this._player.getVideoInfo();
};
VideoPlayer.prototype.getVideoInfo = function() {
this._videoInfo.playhead = vTime;
return this._videoInfo;
};
Session Start (2.x) session-start-2.x
VideoAnalyticsProvider.prototype._onLoad = function() {
var contextData = {};
var videoInfo = this._player.getVideoInfo();
var mediaInfo = MediaHeartbeat.createMediaObject(videoInfo.name, videoInfo.id, videoInfo.length, videoInfo.streamType);
this._mediaHeartbeat.trackSessionStart(mediaInfo, contextData);
};
Standard Video Metadata
1.x API
2.x API
VideoMetadataKeys()
MediaHeartbeat.createMediaObject()
AdobeAnalyticsPlugin.setVideoMetadata()
MediaHeartbeat.trackSessionStart()
Standard Metadata (1.x) std-meta-1.x
VideoAnalyticsProvider.prototype._onLoad = function() {
console.log('Player event: MEDIA_LOAD');
var contextData = {};
// Setting Standard Video Metadata
contextData[VideoMetadataKeys.SEASON] = "sample season";
contextData[VideoMetadataKeys.SHOW] = "sample show";
contextData[VideoMetadataKeys.EPISODE] = "sample episode";
contextData[VideoMetadataKeys.ASSET_ID] = "sample asset id";
contextData[VideoMetadataKeys.GENRE] = "sample genre";
contextData[VideoMetadataKeys.FIRST_AIR_DATE] = "sample air date";
// Etc.
this._aaPlugin.setVideoMetadata(contextData);
this._playerPlugin.trackVideoLoad();
};
Standard Metadata (2.x) std-meta-2.x
VideoAnalyticsProvider.prototype._onLoad = function() {
console.log('Player event: MEDIA_LOAD');
var contextData = {};
var mediaInfo = MediaHeartbeat.createMediaObject(videoInfo.name, videoInfo.id, videoInfo.length, videoInfo.streamType);
// Set standard Video Metadata
var standardVideoMetadata = {};
standardVideoMetadata[VideoMetadataKeys.SEASON] = "sample season";
standardVideoMetadata[VideoMetadataKeys.SHOW] = "sample show";
standardVideoMetadata[VideoMetadataKeys.EPISODE] = "sample episode";
standardVideoMetadata[VideoMetadataKeys.ASSET_ID] = "sample asset id";
standardVideoMetadata[VideoMetadataKeys.GENRE] = "sample genre";
standardVideoMetadata[VideoMetadataKeys.FIRST_AIR_DATE] = "sample air date";
// Etc.
mediaInfo.setValue(MediaHeartbeat.MediaObjectKey.StandardVideoMetadata, standardVideoMetadata);
this._mediaHeartbeat.trackSessionStart(mediaInfo, contextData);
};
NOTE
Instead of setting the Standard Video Metadata through the
AdobeAnalyticsPlugin.setVideoMetadata()
API, in VHL 2.0, the Standard Video Metadata is set through the MediaObject key MediaObject.MediaObjectKey.StandardVideoMetadata()
.Custom Video Metadata
1.x API
2.x API
VideoMetadataKeys()
MediaHeartbeat.createMediaObject()
AdobeAnalyticsPlugin.setVideoMetadata()
MediaHeartbeat.trackSessionStart()
Custom Metadata (1.x) custom-meta-1.x
VideoAnalyticsProvider.prototype._onLoad = function() {
var contextData = {
isUserLoggedIn: "false",
tvStation: "Sample TV station",
programmer: "Sample programmer"
};
this._aaPlugin.setVideoMetadata(contextData);
this._playerPlugin.trackVideoLoad();
};
Custom Metadata (2.x) custom-meta-2.x
VideoAnalyticsProvider.prototype._onLoad = function() {
var contextData = {
isUserLoggedIn: "false",
tvStation: "Sample TV station",
programmer: "Sample programmer"
};
var videoInfo = this._player.getVideoInfo();
var mediaInfo = MediaHeartbeat.createMediaObject(videoInfo.name, videoInfo.id, videoInfo.length, videoInfo.streamType);
mediaInfo.setValue(MediaHeartbeat.MediaObjectKey.StandardVideoMetadata, standardVideoMetadata);
this._mediaHeartbeat.trackSessionStart(mediaInfo, contextData);
};
NOTE
Instead of setting the Custom Video Metadata through the
AdobeAnalyticsPlugin.setVideoMetadata()
API, in VHL 2.0, the Standard Video Metadata is set through the MediaHeartbeat.trackSessionStart()
API.Playback
1.x API
2.x API
VideoPlayerPlugin.trackPlay()
MediaHeartbeat.trackPlay()
Playback (1.x) playback-1.x
VideoAnalyticsProvider.prototype._onSeekStart = function() {
console.log('Player event: SEEK_START');
this._playerPlugin.trackSeekStart();
};
Playback (2.x) playback-2.x
VideoAnalyticsProvider.prototype._onSeekStart = function() {
console.log('Player event: SEEK_START');
this._mediaHeartbeat.trackEvent(MediaHeartbeat.Event.SeekStart);
};
Pause
1.x API
2.x API
VideoPlayerPlugin.trackPause()
MediaHeartbeat.trackPausel()
Pause (1.x) pause-1.x
VideoAnalyticsProvider.prototype._onPause = function() {
console.log('Player event:X PAUSE');
this._playerPlugin.trackPause();
};
Pause (2.x) pause-2.x
VideoAnalyticsProvider.prototype._onBufferComplete = function() {
console.log('Player event: BUFFER_COMPLETE');
this._mediaHeartbeat.trackEvent(MediaHeartbeat.Event.BufferComplete);
};
Seek Complete
1.x API
2.x API
VideoPlayerPlugin.trackSeekComplete()
MediaHeartbeat.
trackEvent(MediaHeartbeat.Event.SeekComplete)
Seeking (1.x) seek-1.x
VideoAnalyticsProvider.prototype._onSeekComplete = function() {
console.log('Player event: SEEK_COMPLETE');
this._playerPlugin.trackSeekComplete();
};
Seeking (2.x) seek-2.x
VideoAnalyticsProvider.prototype._onSeekComplete = function() {
console.log('Player event: SEEK_COMPLETE');
this._mediaHeartbeat.trackEvent(MediaHeartbeat.Event.SeekComplete);
};
Buffer Start
1.x API
2.x API
VideoPlayerPlugin.trackBufferStart()
MediaHeartbeat.trackEvent(
MediaHeartbeat.Event.BufferStart)
Buffer Start (1.x) buffer-start-1.x
VideoAnalyticsProvider.prototype._onBufferStart = function() {
console.log('Player event: BUFFER_START');
this._playerPlugin.trackBufferStart();
};
Buffer Start (2.x) buffer-start-2.x
VideoAnalyticsProvider.prototype._onBufferStart = function() {
console.log('Player event: BUFFER_START');
this._mediaHeartbeat.trackEvent(MediaHeartbeat.Event.BufferStart);
};
Buffer Complete
1.x API
2.x API
VideoPlayerPlugin.trackBufferComplete()
MediaHeartbeat.trackEvent(
MediaHeartbeat.Event.BufferComplete)
Buffer Complete (1.x) buffer-complete-1.x
VideoAnalyticsProvider.prototype._onBufferComplete = function() {
console.log('Player event: BUFFER_COMPLETE');
this._playerPlugin.trackBufferComplete();
};
Buffer Complete (2.x) buffer-complete-2.x
VideoAnalyticsProvider.prototype._onBufferComplete = function() {
console.log('Player event: BUFFER_COMPLETE');
this._mediaHeartbeat.trackEvent(MediaHeartbeat.Event.BufferComplete);
};
Playback Complete
1.x API
2.x API
VideoPlayerPlugin.trackComplete()
MediaHeartbeat.trackComplete()
Playback Complete (1.x) playback-complete-1.x
VideoAnalyticsProvider.prototype._onComplete = function() {
console.log('Player event: COMPLETE');
this._playerPlugin.trackComplete(function() {
console.log( "The completion of the content has been tracked.");
});
};
Playback Complete (2.x) playback-complete-2.x
VideoAnalyticsProvider.prototype._onComplete = function() {
console.log('Player event: COMPLETE');
this._mediaHeartbeat.trackComplete();
};
VHL Code Comparison: AD PLAYBACK
Ad Start
VHL 1.x
VHL 2.x
VideoPlayerPlugin.trackAdStart()
MediaHeartbeat.createAdBreakObject()
VideoPlayerPluginDelegate.getAdBreakInfo()
MediaHeartbeat.createAdObject()
VideoPlayerPluginDelegate.getAdInfo()
MediaHeartbeat.trackEvent(
MediaHeartbeat.Event.AdBreakStart)
MediaHeartbeat.trackEvent(
MediaHeartbeat.Event.AdStart)
Ad Start (1.x) ad-start-1.x
VideoAnalyticsProvider.prototype._onAdStart = function() {
console.log('Player event: AD_START');
this._playerPlugin.trackAdStart();
};
SampleVideoPlayerPluginDelegate.prototype.getAdInfo = function() {
return this._player.getAdInfo();
};
Ad Start (2.x) ad-start-2.x
VideoAnalyticsProvider.prototype._onAdStart = function() {
console.log('Player event: AD_START');
var adContextData = {};
// AdBreak Info - getting the adBreakInfo from player and creating AdBreakInfo Object from MediaHeartbeat
var _adBreakInfo = this._player.getAdBreakInfo();
var adBreakInfo = MediaHeartbeat.createAdBreakObject(_adBreakInfo.name, _adBreakInfo.position, _adBreakInfo.startTime);
// Ad Info - getting the adInfo from player and creating AdInfo Object from MediaHeartbeat
var _adInfo = this._player.getAdInfo();
var adInfo = MediaHeartbeat.createAdObject(_adInfo.name, _adInfo.id, _adInfo.position, _adInfo.length);
this._mediaHeartbeat.trackEvent(MediaHeartbeat.Event.AdBreakStart, adBreakInfo);
this._mediaHeartbeat.trackEvent(MediaHeartbeat.Event.AdStart, adInfo, adContextData);
};
Standard Ad Metadata
1.x API
2.x API
AdMetadataKeys()
MediaHeartbeat.createAdObject()
AdobeAnalyticsPlugin.setAdMetadata()
MediaHeartbeat.trackAdStart()
Standard Ad Metadata (1.x) ad-meta-1.x
VideoAnalyticsProvider.prototype._onAdStart = function() {
console.log('Player event: AD_START');
var contextData = {};
// setting Standard Ad Metadata
contextData[AdMetadataKeys.ADVERTISER] = "sample advertiser";
contextData[AdMetadataKeys.CAMPAIGN_ID] = "sample campaign";
contextData[AdMetadataKeys.CREATIVE_ID] = "sample creative";
contextData[AdMetadataKeys.CREATIVE_URL] = "sample url";
contextData[AdMetadataKeys.SITE_ID] = "sample site";
contextData[AdMetadataKeys.PLACEMENT_ID] = "sample placement";
this._aaPlugin.setAdMetadata(contextData);
this._playerPlugin.trackAdStart();
};
Standard Ad Metadata (2.x) ad-meta-2.x
VideoAnalyticsProvider.prototype._onAdStart = function() {
console.log('Player event: AD_START');
var adContextData = { };
// AdBreak Info - getting the adBreakInfo from player and creating AdBreakInfo Object from MediaHeartbeat
var _adBreakInfo = this._player.getAdBreakInfo();
var adBreakInfo = MediaHeartbeat.createAdBreakObject(_adBreakInfo.name, _adBreakInfo.position, _adBreakInfo.startTime);
// Ad Info - getting the adInfo from player and creating AdInfo Object from MediaHeartbeat
var _adInfo = this._player.getAdInfo();
var adInfo = MediaHeartbeat.createAdObject(_adInfo.name, _adInfo.id, _adInfo.position, _adInfo.length);
// Set standard Ad Metadata
var standardAdMetadata = {};
standardAdMetadata[MediaHeartbeat.AdMetadataKeys.ADVERTISER] = "Sample Advertiser";
standardAdMetadata[MediaHeartbeat.AdMetadataKeys.CAMPAIGN_ID] = "Sample Campaign";
adInfo.setValue(MediaHeartbeat.MediaObjectKey.StandardAdMetadata, standardAdMetadata);
this._mediaHeartbeat.trackEvent(MediaHeartbeat.Event.AdBreakStart, adBreakInfo);
this._mediaHeartbeat.trackEvent(MediaHeartbeat.Event.AdStart, adInfo, adContextData);
};
NOTE
Instead of setting the Standard Ad Metadata through the
AdobeAnalyticsPlugin.setVideoMetadata()
API, in VHL 2.0, the Standard Ad Metadata is set through the AdMetadata
key MediaObject.MediaObjectKey.StandardVideoMetadata
Custom Ad Metadata
1.x API
2.x API
AdobeAnalyticsPlugin.setAdMetadata()
MediaHeartbeat.createAdObject()
MediaHeartbeat.trackAdStart()
Custom Ad Metadata (1.x) custom-ad-meta-1.x
VideoAnalyticsProvider.prototype._onAdStart = function() {
console.log('Player event: AD_START');
var contextData = {};
// Setting Standard Ad Metadata
contextData[AdMetadataKeys.ADVERTISER] = "sample advertiser";
contextData[AdMetadataKeys.CAMPAIGN_ID] = "sample campaign";
contextData[AdMetadataKeys.CREATIVE_ID] = "sample creative";
contextData[AdMetadataKeys.CREATIVE_URL] = "sample url";
contextData[AdMetadataKeys.SITE_ID] = "sample site";
contextData[AdMetadataKeys.PLACEMENT_ID] = "sample placement";
this._aaPlugin.setAdMetadata(contextData);
this._playerPlugin.trackAdStart();
};
Custom Ad Metadata (2.x) custom-ad-meta-2.x
VideoAnalyticsProvider.prototype._onAdStart = function() {
console.log('Player event: AD_START');
var adContextData = {
affiliate: "Sample affiliate",
campaign: "Sample ad campaign"
};
// AdBreak Info - getting the adBreakInfo from player and creating AdBreakInfo Object from MediaHeartbeat
var _adBreakInfo = this._player.getAdBreakInfo();
var adBreakInfo = MediaHeartbeat.createAdBreakObject(_adBreakInfo.name, _adBreakInfo.position, _adBreakInfo.startTime);
// Ad Info - getting the adInfo from player and creating AdInfo Object from MediaHeartbeat
var _adInfo = this._player.getAdInfo();
var adInfo = MediaHeartbeat.createAdObject(_adInfo.name, _adInfo.id, _adInfo.position, _adInfo.length);
this._mediaHeartbeat.trackEvent(MediaHeartbeat.Event.AdBreakStart, adBreakInfo);
this._mediaHeartbeat.trackEvent(MediaHeartbeat.Event.AdStart, adInfo, adContextData);
};
NOTE
Instead of setting the Custom Ad Metadata through the
AdobeAnalyticsPlugin.setVideoMetadata
API, in VHL 2.0, the Standard Ad Metadata is set through the MediaHeartbeat.trackAdStart()
API.Ad Skip
1.x API
2.x API
AdobeAnalyticsPlugin.setAdMetadata()
MediaHeartbeat.createAdObject()
MediaHeartbeat.trackAdStart()
Ad Skip (1.x) ad-skip-1.x
SampleVideoPlayerPluginDelegate.prototype.getAdInfo = function() {
return this._player.getAdInfo();
};
Ad Skip (2.x) ad-skip-2.x
VideoAnalyticsProvider.prototype._onAdSkip = function() {
console.log('Player event: AD_SKIP');
this._mediaHeartbeat.trackEvent(MediaHeartbeat.Event.AdSkip);
};
NOTE
In VHL 1.5.X APIs;
getAdinfo()
and getAdBreakInfo()
must return null if the player is outside the Ad break boundaries.Ad Complete
1.x API
2.x API
VideoPlayerPlugin.trackAdComplete()
MediaHeartbeat.trackEvent(
MediaHeartbeat.Event.AdComplete)
MediaHeartbeat.trackEvent(
MediaHeartbeat.Event.AdBreakComplete)
Ad Complete (1.x) ad-complete-1.x
VideoAnalyticsProvider.prototype._onAdComplete = function() {
console.log('Player event: AD_COMPLETE');
this._playerPlugin.trackAdComplete();
};
Ad Complete (2.x) ad-complete-2.x
VideoAnalyticsProvider.prototype._onAdComplete = function() {
console.log('Player event: AD_COMPLETE');
this._mediaHeartbeat.trackEvent(MediaHeartbeat.Event.AdComplete);
this._mediaHeartbeat.trackEvent(MediaHeartbeat.Event.AdBreakComplete);
};
VHL Code Comparison: CHAPTER PLAYBACK
Chapter Start
VHL 1.x
VHL 2.x
VideoPlayerPluginDelegate.getChapterInfo()
MediaHeartbeat.createChapterObject
VideoPlayerPlugin.trackChapterStart()
MediaHeartbeat.trackEvent(
MediaHeartbeat.Event.ChapterStart)
Chapter Start (1.x) chap-start-1.x
VideoAnalyticsProvider.prototype._onChapterStart = function() {
console.log('Player event: CHAPTER_START');
this._playerPlugin.trackChapterStart();
};
SampleVideoPlayerPluginDelegate.prototype.getChapterInfo = function() {
return this._player.getChapterInfo();
};
Chapter Start (2.x) chap-start-2.x
VideoAnalyticsProvider.prototype._onChapterStart = function() {
console.log('Player event: CHAPTER_START');
var chapterContextData = { };
// Chapter Info - getting the chapterInfo from player and creating ChapterInfo Object from MediaHeartbeat
var _chapterInfo = this._player.getChapterInfo();
var chapterInfo = MediaHeartbeat.createChapterObject(_chapterInfo.name, _chapterInfo.position, _chapterInfo.length, _chapterInfo.startTime);
this._mediaHeartbeat.trackEvent(MediaHeartbeat.Event.ChapterStart, chapterInfo, chapterContextData);
};
Chapter Skip
1.x API
2.x API
VideoPlayerPluginDelegate.getChapterInfo()
MediaHeartbeat.trackEvent(
MediaHeartbeat.Event.ChapterSkip)
Chapter Skip (1.x) chap-skip-1.x
SampleVideoPlayerPluginDelegate.prototype.getChapterInfo = function() {
return this._player.getChapterInfo();
};
NOTE
In VHL 1.5.X APIs;
getChapterinfo()
must return null if the player is outside the Chapter boundaries.Chapter Skip (2.x) chap-skip-2.x
VideoAnalyticsProvider.prototype._onChapterSkip = function() {
this._mediaHeartbeat.trackEvent(MediaHeartbeat.Event.ChapterSkip);
};
Chapter Custom Metadata
1.x API
2.x API
VideoPlayerPlugin.trackChapterStart()
MediaHeartbeat.createChapterObject()
AdobeAnalyticsPlugin.setChapterMetadata()
MediaHeartbeat.trackEvent(
MediaHeartbeat.Event.ChapterStart)
Chapter Custom Metadata (1.x) chap-cust-meta-1.x
VideoAnalyticsProvider.prototype._onChapterStart = function() {
console.log('Player event: CHAPTER_START');
this._aaPlugin.setChapterMetadata({
segmentType: "Sample segment type"
});
this._playerPlugin.trackChapterStart();
};
Chapter Custom Metadata (2.x) chap-cust-meta-2.x
VideoAnalyticsProvider.prototype._onChapterStart = function() {
console.log('Player event: CHAPTER_START');
var chapterContextData = {
segmentType: "Sample segment type"
};
// Chapter Info - getting the chapterInfo from player and creating ChapterInfo Object from MediaHeartbeat
var _chapterInfo = this._player.getChapterInfo();
var chapterInfo = MediaHeartbeat.createChapterObject(_chapterInfo.name, _chapterInfo.position, _chapterInfo.length, _chapterInfo.startTime);
this._mediaHeartbeat.trackEvent(MediaHeartbeat.Event.ChapterStart, chapterInfo, chapterContextData);
};
Chapter Complete
1.x API
2.x API
trackChapterComplete()
trackEvent(MediaHeartbeat.Event.ChapterComplete)
Chapter Complete (1.x) chap-complete-1.x
VideoAnalyticsProvider.prototype._onChapterComplete = function() {
console.log('Player event: CHAPTER_COMPLETE');
this._playerPlugin.trackChapterComplete();
};
Chapter Complete (2.x) chap-complete-2.x
VideoAnalyticsProvider.prototype._onChapterComplete = function() {
console.log('Player event: CHAPTER_COMPLETE');
this._mediaHeartbeat.trackEvent(MediaHeartbeat.Event.ChapterComplete);
};
VHL Code Comparison: OTHER EVENTS
Bitrate Change
VHL 1.x
VHL 2.x
VideoPlayerPlugin.trackBitrateChange()
MediaHeartbeat.trackEvent(
MediaHeartbeat.Event.BitrateChange)
Bitrate Change (1.x) bitrate-chg-1.x
VideoAnalyticsProvider.prototype._onBitrateChange = function() {
console.log('Player event: BITRATE_CHANGE');
// Update getQosInfo to return the updated bitrate
this._playerPlugin.trackBitrateChange();
};
Bitrate Change (2.x) bitrate-chg-2.x
VideoAnalyticsProvider.prototype._onBitrateChange = function() {
console.log('Player event: BITRATE_CHANGE');
// Update getQosObject to return the updated bitrate
this._mediaHeartbeat.trackEvent(MediaHeartbeat.Event.BitrateChange);
};
Video Resume
1.x API
2.x API
VideoInfo.resumed()
MediaObject()
VideoPlayerPluginDelegate.getVideoInfo()
MediaHeartbeat.trackSessionStart()
VideoPlayerPlugin.trackVideoLoad()
Video Resume (1.x) video-resume-1.x
this._videoInfo.resumed=true;
VideoPlayer.prototype.getVideoInfo = function() {
this._videoInfo.playhead = vTime;
return this._videoInfo;
};
Video Resume (2.x) video-resume-2.x
VideoAnalyticsProvider.prototype._onLoad = function() {
console.log('Player event: MEDIA_LOAD');
var contextData = {};
var videoInfo = this._player.getVideoInfo();
var mediaInfo = MediaHeartbeat.createMediaObject(videoInfo.playerName, videoInfo.id, videoInfo.length, videoInfo.streamType);
mediaInfo.setValue(MediaHeartbeat.MediaObjectKey.VideoResumed, true);
this._mediaHeartbeat.trackSessionStart(mediaInfo, contextData);
};
For more information on tracking video with 2.x, see Track Core Video Playback.
recommendation-more-help
c8eee520-cef5-4f8c-a38a-d4952cfae4eb