API reference
Edge Media API reference
extensionVersion
The extensionVersion() API returns the version of the Media for Edge Network extension that is registered with the Mobile Core extension.
Android Java
data-slots=heading, code
data-repeat=2
Syntax
public static String extensionVersion() {
Example
String mediaExtensionVersion = Media.extensionVersion();
Android Kotlin
data-slots=heading, code
data-repeat=1
Example
val mediaExtensionVersion = Media.extensionVersion()
iOS Swift
data-slots=heading, code
data-repeat=2
Syntax
static var extensionVersion: String
Example
let mediaExtensionVersion = Media.extensionVersion()
iOS Objective-C
data-slots=heading, code
data-repeat=2
Syntax
+ (nonnull NSString*) extensionVersion;
Example
NSString *mediaExtensionVersion = [AEPMobileEdgeMedia extensionVersion];
resetIdentities
Immediately aborts all the active tracking sessions and clears all the MediaTracker instances.
See MobileCore.resetIdentities for more details.
createTracker
Creates a MediaTracker instance that should be used to track a playback session. The tracker sends periodic heartbeat pings to the Experience Edge Network.
Android Java
data-slots=heading, code
data-repeat=2
Syntax
public static MediaTracker createTracker()
Example
MediaTracker mediaTracker = Media.createTracker(); // Use the instance for tracking media.
Android Kotlin
data-slots=heading, code
data-repeat=1
Example
val tracker = Media.createTracker()
iOS Swift
data-slots=heading, code
data-repeat=2
Syntax
static func createTracker()
Example
let tracker = Media.createTracker() // Use the instance for tracking media.
iOS Objective-C
data-slots=heading, code
data-repeat=2
Syntax
+ (void) createTracker
Example
id<AEPEdgeMediaTracker> tracker;
tracker = [AEPMobileEdgeMedia createTracker]; // Use the instance for tracking media.
createTrackerWithConfig
Creates a MediaTracker instance that should be used to track a playback session. The tracker sends periodic heartbeat pings to the Experience Edge Network.
config.channelconfig.mainpinginterval(in seconds). The value should be in the allowed range [10-50] seconds. The default value is 10 seconds.config.adpinginterval(in seconds). The value should be in the allowed range [1-10] seconds. The default value is 10 seconds.Android Java
data-slots=heading, code
data-repeat=2
Syntax
public static MediaTracker createTracker(Map<String, Object> config)
Example
HashMap<String, Object> config = new HashMap<String, Object>();
config.put(MediaConstants.TrackerConfig.CHANNEL, "custom-channel"); // Overwrites channel configured in the Data Collection UI.
config.put(MediaConstants.TrackerConfig.AD_PING_INTERVAL, 1); // Overwrites ad content ping interval to 1 second.
config.put(MediaConstants.TrackerConfig.MAIN_PING_INTERVAL, 30); // Overwrites main content ping interval to 30 seconds.
MediaTracker mediaTracker = Media.createTracker(config); // Use the instance for tracking media.
Android Kotlin
data-slots=heading, code
data-repeat=1
Example
val config = mapOf(
MediaConstants.TrackerConfig.CHANNEL to "custom-channel",
MediaConstants.TrackerConfig.AD_PING_INTERVAL to 1,
MediaConstants.TrackerConfig.MAIN_PING_INTERVAL to 30,
)
val tracker = Media.createTracker(config) // Use the instance for tracking media.
iOS Swift
data-slots=heading, code
data-repeat=2
Syntax
static func createTrackerWith(config: [String: Any]?)
Example
var config: [String: Any] = [:]
config[MediaConstants.TrackerConfig.CHANNEL] = "custom-channel" // Overrides channel configured in the Data Collection UI.
​config[MediaConstants.TrackerConfig.AD_PING_INTERVAL] = 1 // Overwrites ad content ping interval to 1 second.
config[MediaConstants.TrackerConfig.MAIN_PING_INTERVAL] = 30 // Overwrites main content ping interval to 30 seconds.
let tracker = Media.createTrackerWith(config: config)
iOS Objective-C
data-slots=heading, code
data-repeat=2
Syntax
+(id<AEPEdgeMediaTracker> _Nonnull) createTrackerWithConfig:(NSDictionary<NSString *,id> * _Nullable)
Example
id<AEPEdgeMediaTracker> tracker;
NSMutableDictionary* config = [NSMutableDictionary dictionary];
config[AEPEdgeMediaTrackerConfig.CHANNEL] = @"custom-channel"; // Overrides channel configured in the Data Collection UI.
config[AEPEdgeMediaTrackerConfig.AD_PING_INTERVAL] = 1; // Overwrites ad content ping interval to 1 second.
config[AEPEdgeMediaTrackerConfig.MAIN_PING_INTERVAL] = 30; // Overwrites main content ping interval to 30 seconds.
tracker = [AEPMobileEdgeMedia createTrackerWithConfig:config];
createMediaObject
Creates an instance of the Media object which is a map/dictionary that contains information about the media.
nameidlengthAndroid Java
data-slots=heading, code
data-repeat=2
Syntax
public static HashMap<String, Object> createMediaObject(String name,
String id,
int length,
String streamType,
MediaType mediaType);
Example
HashMap<String, Object> mediaInfo = Media.createMediaObject("videoName",
"videoId",
60,
MediaConstants.StreamType.VOD,
Media.MediaType.Video);
Android Kotlin
data-slots=heading, code
data-repeat=1
Example
var mediaInfo = Media.createMediaObject("videoName",
"videoId",
60,
MediaConstants.StreamType.VOD,
Media.MediaType.Video)
iOS Swift
data-slots=heading, code
data-repeat=2
Syntax
static func createMediaObjectWith(name: String,
id: String,
length: Int,
streamType: String,
mediaType: MediaType) -> [String: Any]?
Example
let mediaObject = Media.createMediaObjectWith(name: "videoName",
id: "videoId",
length: 60,
streamType: MediaConstants.StreamType.VOD,
mediaType: MediaType.Video)
iOS Objective-C
data-slots=heading, code
data-repeat=2
Syntax
+ (NSDictionary<NSString *, id> * _Nullable) createMediaObjectWith:(NSString * _Nonnull) id:(NSString * _Nonnull) length:(NSInteger) streamType:(NSString * _Nonnull) mediaType:(enum AEPEdgeMediaType)
Example
NSDictionary *mediaObject = [AEPMobileEdgeMedia createMediaObjectWith:@"videoName"
id:@"videoId"
length:60
streamType:AEPEdgeMediaStreamType.VOD
mediaType:AEPEdgeMediaTypeVideo];
createAdBreakObject
Creates an instance of the AdBreak object which is a map/dictionary that contains information about the ad break.
namepositionstartTimeAndroid Java
data-slots=heading, code
data-repeat=2
Syntax
public static HashMap<String, Object> createAdBreakObject(String name, int position, int startTime);
Example
HashMap<String, Object> adBreakInfo = Media.createAdBreakObject("adbreakName", 1, 0);
Android Kotlin
data-slots=heading, code
data-repeat=1
Example
val adBreakInfo = Media.createAdBreakObject("adbreakName", 1, 0)
iOS Swift
data-slots=heading, code
data-repeat=2
Syntax
static func createAdBreakObjectWith(name: String,
position: Int,
startTime: Int) -> [String: Any]?
Example
let adBreakInfo = Media.createAdBreakObjectWith(name: "adbreakName",
position: 1,
startTime: 0)
iOS Objective-C
data-slots=heading, code
data-repeat=2
Syntax
+ (NSDictionary <NSString *, id> * _Nullable) createAdBreakObjectWith:(NSString * _Nonnull)position:(NSInteger) startTime:(NSInteger)
Example
NSDictionary *adBreakInfo = [AEPMobileEdgeMedia createAdBreakObjectWith:@"adbreakName"
position:1
startTime:0];
createAdObject
Creates an instance of the Ad object which is a map/dictionary that contains information about the Ad.
nameidpositionlengthAndroid Java
data-slots=heading, code
data-repeat=2
Syntax
public static HashMap<String, Object> createAdObject(String name, String id, int position, int length);
Example
HashMap<String, Object> adInfo = Media.createAdObject("adName", "adId", 1, 15);
Android Kotlin
data-slots=heading, code
data-repeat=1
Example
val adInfo = Media.createAdObject("adName", "adId", 1, 15)
iOS Swift
data-slots=heading, code
data-repeat=2
Syntax
static func createAdObjectWith(name: String,
id: String,
position: Int,
length: Int) -> [String: Any]?
Example
let adInfo = Media.createObjectWith(name: "adName",
id: "adId",
position: 0,
length: 30)
iOS Objective-C
data-slots=heading, code
data-repeat=2
Syntax
+ (NSDictionary <NSString *, id> * _Nullable) createAdObjectWith:(NSString * _Nonnull)
id:(NSString * _Nonnull)
position:(NSInteger)
length:(NSInteger)
Example
NSDictionary *adInfo = [AEPMobileEdgeMedia createAdObjectWith:@"adName"
id:@"adId"
position:0
length:30];
createChapterObject
Creates an instance of the Chapter object which is a map/dictionary that contains information about the chapter.
namepositionlengthstartTimeAndroid Java
data-slots=heading, code
data-repeat=2
Syntax
public static HashMap<String, Object> createChapterObject(String name,
int position,
int length,
int startTime);
Example
HashMap<String, Object> chapterInfo = Media.createChapterObject("chapterName", 1, 60, 0);
Android Kotlin
data-slots=heading, code
data-repeat=1
Example
val chapterInfo = Media.createChapterObject("chapterName", 1, 60, 0)
iOS Swift
data-slots=heading, code
data-repeat=2
Syntax
static func createChapterObjectWith(name: String,
position: Int,
length: Int,
startTime: Int) -> [String: Any]?
Example
let chapterInfo = Media.createChapterObjectWith(name: "chapterName",
position: 1,
length: 60,
startTime: 0)
iOS Objective-C
data-slots=heading, code
data-repeat=2
Syntax
+ (NSDictionary <NSString *, id> * _Nullable) createChapterObjectWith:(NSString * _Nonnull)
position:(NSInteger)
length:(NSInteger)
startTime:(NSInteger)
Example
NSDictionary *chapterInfo = [AEPMobileEdgeMedia createChapterObjectWith:@"chapterName"
position:1
length:60
startTime:0];
createQoEObject
Creates an instance of the QoE (Quality of Experience) object which is a map/dictionary that contains information about the quality of experience.
bitratestartupTimefpsdroppedFramesAndroid Java
data-slots=heading, code
data-repeat=2
Syntax
public static HashMap<String, Object> createQoEObject(int bitrate,
int startupTime,
int fps,
int droppedFrames);
Example
HashMap<String, Object> qoeInfo = Media.createQoEObject(10000000, 2, 23, 10);
Android Kotlin
data-slots=heading, code
data-repeat=1
Example
val qoeInfo = Media.createQoEObject(10000000, 2, 23, 10)
iOS Swift
data-slots=heading, code
data-repeat=2
Syntax
static func createQoEObjectWith(bitrate: Int,
startupTime: Int,
fps: Int,
droppedFrames: Int) -> [String: Any]?
Example
let qoeInfo = Media.createQoEObjectWith(bitrate: 500000,
startupTime: 2,
fps: 24,
droppedFrames: 10)
iOS Objective-C
data-slots=heading, code
data-repeat=2
Syntax
+ (NSDictionary <NSString *, id> * _Nullable) createQoEObjectWith:(NSInteger)
startTime:(NSInteger)
fps:(NSInteger)
droppedFrames:(NSInteger)
Example
NSDictionary *qoeInfo = [AEPMobileEdgeMedia createQoEObjectWith:500000
startTime:2
fps:24
droppedFrames:10];
createStateObject
Creates an instance of the Player State object which is a dictionary that contains information about the player state.
Android Java
data-slots=heading, code
data-repeat=2
Syntax
public static HashMap<String, Object> createStateObject(String stateName);
Example
HashMap<String, Object> fullScreenState = Media.createStateObject(MediaConstants.PlayerState.FULLSCREEN);
Android Kotlin
data-slots=heading, code
data-repeat=1
Example
val fullScreenState = Media.createStateObject(MediaConstants.PlayerState.FULLSCREEN)
iOS Swift
data-slots=heading, code
data-repeat=2
Syntax
static func createStateObjectWith(stateName: String) -> [String: Any]
Example
let fullScreenState = Media.createStateObjectWith(stateName: MediaConstants.PlayerState.FULLSCREEN)
iOS Objective-C
data-slots=heading, code
data-repeat=2
Syntax
+ (NSDictionary <NSString *, id> * _Nullable) createStateObjectWith:(NSString * _Nonnull)
Example
NSDictionary* fullScreenState = [AEPMobileEdgeMedia createStateObjectWith:AEPEdgeMediaPlayerState.FULLSCREEN]
MediaTracker API reference
data-variant=info
data-slots=text
createTracker or createTrackerWithConfig and call the following APIs.trackSessionStart
Tracks the intention to start playback. This starts a tracking session on the MediaTracker instance. To resume a previously closed session, see the media resume guide.
contextDatadata-variant=info
data-slots=text
createTrackerWithConfig API.Android Java
data-slots=heading, code
data-repeat=2
Syntax
public void trackSessionStart(Map<String, Object> mediaInfo, Map<String, String> contextData);
Example
HashMap<String, Object> mediaInfo = Media.createMediaObject("mediaName", "mediaId", 60, MediaConstants.StreamType.VOD, Media.MediaType.Video);
HashMap<String, String> mediaMetadata = new HashMap<String, String>();
// Standard metadata keys provided by adobe.
mediaMetadata.put(MediaConstants.VideoMetadataKeys.EPISODE, "Sample Episode");
mediaMetadata.put(MediaConstants.VideoMetadataKeys.SHOW, "Sample Show");
// Custom metadata keys
mediaMetadata.put("isUserLoggedIn", "false");
mediaMetadata.put("tvStation", "Sample TV Station");
tracker.trackSessionStart(mediaInfo, mediaMetadata);
Android Kotlin
data-slots=heading, code
data-repeat=1
Example
val mediaInfo = Media.createMediaObject(
"mediaName",
"mediaId",
60,
MediaConstants.StreamType.VOD,
Media.MediaType.Video
)
val mediaMetadata = mapOf<String, String>(
// Standard metadata keys provided by Adobe
MediaConstants.VideoMetadataKeys.EPISODE to "Sample Episode",
MediaConstants.VideoMetadataKeys.SHOW to "Sample Show",
// Custom metadata keys
"isUserLoggedIn" to "false",
"tvStation" to "Sample TV Station"
)
tracker.trackSessionStart(mediaInfo, mediaMetadata)
iOS Swift
data-slots=heading, code
data-repeat=2
Syntax
public func trackSessionStart(info: [String: Any], metadata: [String: String]? = nil)
Example
let mediaInfo = Media.createMediaObjectWith(name: "videoName", id: "videoId", length: 60, streamType: MediaConstants.StreamType.VOD, mediaType: MediaType.Video)
var mediaMetadata: [String: String] = [
// Standard metadata keys provided by Adobe
MediaConstants.VideoMetadataKeys.SHOW : "Sample Show",
MediaConstants.VideoMetadataKeys.SEASON : "Sample Season",
// Custom metadata keys
"isUserLoggedIn" : "false",
"isUserLoggedIn" : "Sample TV station"
]
tracker.trackSessionStart(info: mediaInfo, metadata: mediaMetadata)
iOS Objective-C
data-slots=heading, code
data-repeat=2
Syntax
+ (void) trackSessionStart:(NSDictionary<NSString *,id> * _Nonnull) metadata:(NSDictionary<NSString *,NSString *> * _Nullable)
Example
NSDictionary *mediaInfo = [AEPMobileEdgeMedia createMediaObjectWith:@"videoName" id:@"videoId" length:60 streamType:AEPEdgeMediaStreamType.VOD mediaType:AEPEdgeMediaTypeVideo];
NSMutableDictionary *mediaMetadata = [[NSMutableDictionary alloc] init];
// Standard metadata keys provided by Adobe
[mediaMetadata setObject:@"Sample Show" forKey:AEPEdgeMediaVideoMetadataKeys.SHOW];
[mediaMetadata setObject:@"Sample Season" forKey:AEPEdgeMediaVideoMetadataKeys.SEASON];
// Custom metadata keys
[mediaMetadata setObject:@"false" forKey:@"isUserLoggedIn"];
[mediaMetadata setObject:@"Sample TV station" forKey:@"tvStation"];
[tracker trackSessionStart:mediaInfo metadata:mediaMetadata];
trackPlay
Tracks the media play, or resume, after a previous pause.
Android Java
data-slots=heading, code
data-repeat=2
Syntax
public void trackPlay();
Example
tracker.trackPlay();
Android Kotlin
data-slots=heading, code
data-repeat=1
Example
tracker.trackPlay()
iOS Swift
data-slots=heading, code
data-repeat=2
Syntax
func trackPlay()
Example
tracker.trackPlay()
iOS Objective-C
data-slots=heading, code
data-repeat=2
Syntax
- (void) trackPlay;
Example
[tracker trackPlay];
trackPause
Tracks the media pause.
Android Java
data-slots=heading, code
data-repeat=2
Syntax
public void trackPause();
Example
tracker.trackPause();
Android Kotlin
data-slots=heading, code
data-repeat=1
Example
tracker.trackPause()
iOS Swift
data-slots=heading, code
data-repeat=2
Syntax
func trackPause()
Example
tracker.trackPause()
iOS Objective-C
data-slots=heading, code
data-repeat=2
Syntax
- (void) trackPause
Example
[tracker trackPause];
trackComplete
Tracks the completion of the media playback session. Call this method only when the media has been completely viewed. If the viewing session is ended before the media is completely viewed, use trackSessionEnd instead.
Android Java
data-slots=heading, code
data-repeat=2
Syntax
public void trackComplete();
Example
tracker.trackComplete();
Android Kotlin
data-slots=heading, code
data-repeat=1
Example
tracker.trackComplete()
iOS Swift
data-slots=heading, code
data-repeat=2
Syntax
func trackComplete()
Example
tracker.trackComplete()
iOS Objective-C
data-slots=heading, code
data-repeat=2
Syntax
- (void) trackComplete
Example
[tracker trackComplete];
trackSessionEnd
Tracks the end of a media playback session. Call this method when the viewing session ends, even if the user has not viewed the media to completion. If the media is viewed to completion, use trackComplete instead.
Android Java
data-slots=heading, code
data-repeat=2
Syntax
public void trackSessionEnd();
Example
tracker.trackSessionEnd();
Android Kotlin
data-slots=heading, code
data-repeat=1
Example
tracker.trackSessionEnd()
iOS Swift
data-slots=heading, code
data-repeat=2
Syntax
func trackSessionEnd()
Example
tracker.trackSessionEnd()
iOS Objective-C
data-slots=heading, code
data-repeat=2
Syntax
- (void) trackSessionEnd
Example
[tracker trackSessionEnd];
trackError
Tracks an error in media playback.
errorIdAndroid Java
data-slots=heading, code
data-repeat=2
Syntax
public void trackError(String errorId);
Example
tracker.trackError("errorId");
Android Kotlin
data-slots=heading, code
data-repeat=1
Example
tracker.trackError("errorId")
iOS Swift
data-slots=heading, code
data-repeat=2
Syntax
func trackError(errorId: String)
Example
tracker.trackError(errorId: "errorId")
iOS Objective-C
data-slots=heading, code
data-repeat=2
Syntax
- (void) trackError:(NSString * _Nonnull)
Example
[tracker trackError:@"errorId"];
trackEvent
Tracks media events.
infoAdBreakStart event, the AdBreak information is created by using the createAdBreakObjectWith method. For an AdStart event, the Ad information is created by using the createAdObjectWith method. For a ChapterStart event, the Chapter information is created by using the createChapterObjectWith method. For a StateStart and StateEnd event, the State information is created by using the createStateObjectWith method.AdStart and ChapterStart events. This is not required for other events.data-variant=info
data-slots=text
info is a required parameter for AdBreakStart, AdStart, ChapterStart, StateStart, StateEnd events. Not set for any other event types.data-variant=info
data-slots=text
createTrackerWithConfig API.Android Java
data-slots=heading, code
data-repeat=1
Syntax
public void trackEvent(Media.Event event,
Map<String, Object> info,
Map<String, String> data);
Examples
Tracking player states
// StateStart
HashMap<String, Object> fullScreenState = Media.createStateObject(MediaConstants.PlayerState.FULLSCREEN);
tracker.trackEvent(Media.Event.StateStart, fullScreenState, null);
// StateEnd
HashMap<String, Object> fullScreenState = Media.createStateObject(MediaConstants.PlayerState.FULLSCREEN);
tracker.trackEvent(Media.Event.StateEnd, fullScreenState, null);
Tracking ad breaks
// AdBreakStart
HashMap<String, Object> adBreakInfo = Media.createAdBreakObject("adbreakName", 1, 0);
tracker.trackEvent(Media.Event.AdBreakStart, adBreakInfo, null);
// AdBreakComplete
tracker.trackEvent(Media.Event.AdBreakComplete, null, null);
Tracking ads
// AdStart
HashMap<String, Object> adInfo = Media.createAdObject("adName", "adId", 1, 15);
HashMap<String, String> adMetadata = new HashMap<String, String>();
// Standard metadata keys provided by Adobe
adMetadata.put(MediaConstants.AdMetadataKeys.ADVERTISER, "Sample Advertiser");
adMetadata.put(MediaConstants.AdMetadataKeys.CAMPAIGN_ID, "Sample Campaign");
// Custom metadata keys
adMetadata.put("affiliate", "Sample Affiliate");
tracker.trackEvent(Media.Event.AdStart, adInfo, adMetadata);
// AdComplete
tracker.trackEvent(Media.Event.AdComplete, null, null);
// AdSkip
tracker.trackEvent(Media.Event.AdSkip, null, null);
Tracking chapters
// ChapterStart
HashMap<String, Object> chapterInfo = Media.createChapterObject("chapterName", 1, 60, 0);
HashMap<String, String> chapterMetadata = new HashMap<String, String>();
chapterMetadata.put("segmentType", "Sample Segment type");
tracker.trackEvent(Media.Event.ChapterStart, chapterInfo, chapterMetadata);
// ChapterComplete
tracker.trackEvent(Media.Event.ChapterComplete, null, null);
// ChapterSkip
tracker.trackEvent(Media.Event.ChapterSkip, null, null);
Tracking playback events
// BufferStart
tracker.trackEvent(Media.Event.BufferStart, null, null);
// BufferComplete
tracker.trackEvent(Media.Event.BufferComplete, null, null);
// SeekStart
tracker.trackEvent(Media.Event.SeekStart, null, null);
// SeekComplete
tracker.trackEvent(Media.Event.SeekComplete, null, null);
Tracking bitrate changes
// If the new bitrate value is available provide it to the tracker.
HashMap<String, Object> qoeInfo = Media.createQoEObject(2000000, 2, 25, 10);
tracker.updateQoEObject(qoeInfo);
// Bitrate change
tracker.trackEvent(Media.Event.BitrateChange, null, null);
Android Kotlin
Examples
Tracking player states
// StateStart
val stateInfo = Media.createStateObject(MediaConstants.PlayerState.FULLSCREEN)
tracker.trackEvent(Media.Event.StateStart, stateInfo, null)
// StateEnd
val stateInfo = Media.createStateObject(MediaConstants.PlayerState.FULLSCREEN)
tracker.trackEvent(Media.Event.StateEnd, stateInfo, null)
Tracking ad breaks
// AdBreakStart
val adBreakInfo = Media.createAdBreakObject("adbreakName", 1, 0)
tracker.trackEvent(Media.Event.AdBreakStart, adBreakInfo, null)
// AdBreakComplete
tracker.trackEvent(Media.Event.AdBreakComplete, null, null)
Tracking ads
//AdStart
val adInfo = Media.createAdObject("adName", "adId", 1, 15)
val adMetadata = mapOf<String, String>(
// Standard metadata keys provided by Adobe
MediaConstants.AdMetadataKeys.ADVERTISER to "Sample Advertiser",
MediaConstants.AdMetadataKeys.CAMPAIGN_ID to "Sample Campaign",
// Custom metadata keys
"affiliate" to "Sample Affiliate",
"tvStation" to "Sample TV Station"
)
tracker.trackEvent(Media.Event.AdStart, adInfo, adMetadata)
// AdComplete
tracker.trackEvent(Media.Event.AdComplete, null, null)
// AdSkip
tracker.trackEvent(Media.Event.AdSkip, null, null)
Tracking chapters
// ChapterStart
val chapterInfo = Media.createChapterObject("chapterName", 1L, 60, 0)
val chapterMetadata = mapOf<String, String>(
"segmentType" to "Sample Segment type"
)
tracker.trackEvent(Media.Event.ChapterStart, chapterInfo, chapterMetadata)
// ChapterComplete
tracker.trackEvent(Media.Event.ChapterComplete, null, null)
// ChapterSkip
tracker.trackEvent(Media.Event.ChapterSkip, null, null)
Tracking playback events
// BufferStart
tracker.trackEvent(Media.Event.BufferStart, null, null)
// BufferComplete
tracker.trackEvent(Media.Event.BufferComplete, null, null)
// SeekStart
tracker.trackEvent(Media.Event.SeekStart, null, null)
// SeekComplete
tracker.trackEvent(Media.Event.SeekComplete, null, null)
Tracking bitrate changes
// If the new bitrate value is available provide it to the tracker.
val qoeInfo = Media.createQoEObject(2000000, 2, 25, 10)
tracker.updateQoEObject(qoeInfo)
// Bitrate change
tracker.trackEvent(Media.Event.BitrateChange, null, null)
iOS Swift
data-slots=heading, code
data-repeat=1
Syntax
func trackEvent(event: MediaEvent, info: [String: Any]?, metadata: [String: String]?)
Examples
Tracking player states
// StateStart
let fullScreenState = Media.createStateObjectWith(stateName: MediaConstants.PlayerState.FULLSCREEN)
tracker.trackEvent(event: MediaEvent.StateStart, info: fullScreenState, metadata: nil)
// StateEnd
let fullScreenState = Media.createStateObjectWith(stateName: MediaConstants.PlayerState.FULLSCREEN)
tracker.trackEvent(event: MediaEvent.StateEnd, info: fullScreenState, metadata: nil)
Tracking ad breaks
// AdBreakStart
let adBreakInfo = Media.createAdBreakObjectWith(name: "adbreakName", position: 1, startTime: 0)
tracker.trackEvent(event: MediaEvent.AdBreakStart, info: adBreakInfo, metadata: nil)
// AdBreakComplete
tracker.trackEvent(event: MediaEvent.AdBreakComplete, info: nil, metadata: nil)
Tracking ads
// AdStart
let adInfo = Media.createObjectWith(name: "adName", id: "adId", position: 0, length: 30)
// Standard metadata keys provided by Adobe
var adMetadata: [String: String] = [:]
adMetadata[MediaConstants.AdMetadataKeys.ADVERTISER] = "Sample Advertiser"
adMetadata[MediaConstants.AdMetadataKeys.CAMPAIGN_ID] = "Sample Campaign"
// Custom metadata keys
adMetadata["affiliate"] = "Sample Affiliate"
tracker.trackEvent(event: MediaEvent.AdStart, info: adInfo, metadata: adMetadata)
// AdComplete
tracker.trackEvent(event: MediaEvent.AdComplete, info: nil, metadata: nil)
// AdSkip
tracker.trackEvent(event: MediaEvent.AdSkip, info: nil, metadata: nil)
Tracking chapters
// ChapterStart
let chapterInfo = Media.createChapterObjectWith(name: "chapterName", position: 1, length: 60, startTime: 0)
let chapterMetadata = ["segmentType": "Sample Segment type"]
tracker.trackEvent(event: MediaEvent.ChapterStart, info: chapterInfo, metadata: chapterMetadata)
// ChapterComplete
tracker.trackEvent(event: MediaEvent.ChapterComplete, info: nil, metadata: nil)
// ChapterSkip
tracker.trackEvent(event: MediaEvent.ChapterSkip, info: nil, metadata: nil)
Tracking playback events
// BufferStart
tracker.trackEvent(event: MediaEvent.BufferStart, info: nil, metadata: nil)
// BufferComplete
tracker.trackEvent(event: MediaEvent.BufferComplete, info: nil, metadata: nil)
// SeekStart
tracker.trackEvent(event: MediaEvent.SeekStart, info: nil, metadata: nil)
// SeekComplete
tracker.trackEvent(event: MediaEvent.SeekComplete, info: nil, metadata: nil)
Tracking bitrate change
// If the new bitrate value is available provide it to the tracker.
let qoeInfo = Media.createQoEObjectWith(bitrate: 500000, startupTime: 2, fps: 24, droppedFrames: 10)
tracker.updateQoEObject(qoeInfo)
// Bitrate change
tracker.trackEvent(event: MediaEvent.BitrateChange, info: nil, metadata: nil)
iOS Objective-C
data-slots=heading, code
data-repeat=1
Syntax
- (void) trackEvent:(enum AEPEdgeMediaEvent) info:(NSDictionary<NSString *,id> * _Nullable) metadata:(NSDictionary<NSString *,NSString *> * _Nullable)
Examples
Tracking player states
// StateStart
NSDictionary* fullScreenState = [AEPMobileEdgeMedia createStateObjectWith:AEPEdgeMediaPlayerState.FULLSCREEN];
[tracker trackEvent:AEPEdgeMediaEventStateStart info:fullScreenState metadata:nil];
// StateEnd
NSDictionary* fullScreenState = [AEPMobileEdgeMedia createStateObjectWith:AEPEdgeMediaPlayerState.FULLSCREEN];
[tracker trackEvent:AEPEdgeMediaEventStateEnd info:fullScreenState metadata:nil];
Tracking ad breaks
// AdBreakStart
NSDictionary *adBreakInfo = [AEPMobileEdgeMedia createAdBreakObjectWith:@"adbreakName" position:1 startTime:0];
[tracker trackEvent:AEPEdgeMediaEventAdBreakStart info:adBreakInfo metadata:nil];
// AdBreakComplete
[tracker trackEvent:AEPEdgeMediaEventAdBreakComplete info:nil metadata:nil];
Tracking ads
// AdStart
NSDictionary *adInfo = [AEPMobileEdgeMedia createAdObjectWith:@"adName" id:@"adId" position:0 length:30];
NSMutableDictionary* adMetadata = [[NSMutableDictionary alloc] init];
// Standard metadata keys provided by adobe.
[adMetadata setObject:@"Sample Advertiser" forKey:AEPEdgeAdMetadataKeys.ADVERTISER];
[adMetadata setObject:@"Sample Campaign" forKey:AEPEdgeAdMetadataKeys.CAMPAIGN_ID];
// Custom metadata keys
[adMetadata setObject:@"Sample Affiliate" forKey:@"affiliate"];
[tracker trackEvent:AEPEdgeMediaEventAdStart info:adInfo metadata:adMetadata];
// AdComplete
[tracker trackEvent:AEPEdgeMediaEventAdComplete info:nil metadata:nil];
// AdSkip
[tracker trackEvent:AEPEdgeMediaEventAdSkip info:nil metadata:nil];
Tracking chapters
// ChapterStart
NSDictionary *chapterInfo = [AEPMobileEdgeMedia createChapterObjectWith:@"chapterName" position:1 length:60 startTime:0];
NSMutableDictionary *chapterMetadata = [[NSMutableDictionary alloc] init];
[chapterMetadata setObject:@"Sample Segment type" forKey:@"segmentType"];
[tracker trackEvent:AEPEdgeMediaEventChapterStart info:chapterInfo metadata:chapterMetadata];
// ChapterComplete
[tracker trackEvent:AEPEdgeMediaEventChapterComplete info:nil metadata:nil];
// ChapterSkip
[tracker trackEvent:AEPEdgeMediaEventChapterSkip info:nil metadata:nil];
Tracking playback events
// BufferStart
[tracker trackEvent:AEPEdgeMediaEventBufferStart info:nil metadata:nil];
// BufferComplete
[tracker trackEvent:AEPEdgeMediaEventBufferComplete info:nil metadata:nil];
// SeekStart
[tracker trackEvent:AEPEdgeMediaEventSeekStart info:nil metadata:nil];
// SeekComplete
[tracker trackEvent:AEPEdgeMediaEventSeekComplete info:nil metadata:nil];
Tracking bitrate change
// If the new bitrate value is available provide it to the tracker.
NSDictionary *qoeInfo = [AEPMobileEdgeMedia createQoEObjectWith:50000 startTime:2 fps:24 droppedFrames:10];
// Bitrate change
[tracker trackEvent:AEPEdgeMediaEventBitrateChange info:nil metadata:nil];
updateCurrentPlayhead
Provides the current media playhead value to the MediaTracker instance. For accurate tracking, call this method every time the playhead value changes. If the player does not notify playhead value changes, call this method once every second with the most recent playhead value.
timeAndroid Java
data-slots=heading, code
data-repeat=2
Syntax
public void updateCurrentPlayhead(int time);
Example
tracker.updateCurrentPlayhead(1);
Live streaming example
//Calculation for number of seconds since midnight UTC of the day
int timeFromMidnightInSecond = (int)((System.currentTimeMillis() / 1000) % 86400);
tracker.updateCurrentPlayhead(timeFromMidnightInSecond);
Android Kotlin
data-slots=heading, code
data-repeat=1
Example
tracker.updateCurrentPlayhead(1)
Live streaming example
val timeFromMidnightInSecond = ((System.currentTimeMillis() / 1000) % 86400).toInt()
tracker.updateCurrentPlayhead(timeFromMidnightInSecond)
}
iOS Swift
data-slots=heading, code
data-repeat=2
Syntax
func updateCurrentPlayhead(time: Int)
Example
tracker.updateCurrentPlayhead(1)
Live streaming example
//Calculation for number of seconds since midnight UTC of the day
let secondsSince1970: TimeInterval = (Date().timeIntervalSince1970)
let timeFromMidnightInSecond = Int(secondsSince1970.truncatingRemainder(dividingBy: 86400))
tracker.updateCurrentPlayhead(time: timeFromMidnightInSecond)
iOS Objective-C
data-slots=heading, code
data-repeat=2
Syntax
- (void) updateCurrentPlayhead:(NSInteger)
Example
[tracker updateCurrentPlayhead:1];
updateQoEObject
Provides the MediaTracker with the current Quality of Experience (QoE) information. For accurate tracking, call this method every time the media player provides the updated QoE information.
| Parameter | Description | Required | | :--- | :--- | | qoeObject | Current QoE information that was created by using the createQoEObject method. | Yes |
Android Java
data-slots=heading, code
data-repeat=2
Syntax
public void updateQoEObject(Map<String, Object> qoeInfo);
Example
HashMap<String, Object> qoeInfo = Media.createQoEObject(1000000, 2, 25, 10);
tracker.updateQoEObject(qoeInfo);
Android Kotlin
data-slots=heading, code
data-repeat=1
Example
val qoeInfo = Media.createQoEObject(1000000, 2, 25, 10)
tracker.updateQoEObject(qoeInfo)
iOS Swift
data-slots=heading, code
data-repeat=2
Syntax
func updateQoEObject(qoe: [String: Any])
Example
let qoeInfo = Media.createQoEObjectWith(bitrate: 500000, startupTime: 2, fps: 24, droppedFrames: 10)
tracker.updateQoEObject(qoe: qoeInfo)
iOS Objective-C
data-slots=heading, code
data-repeat=2
Syntax
- (void) updateQoEObject:(NSDictionary<NSString *,id> * _Nonnull)
Example
NSDictionary *qoeInfo = [AEPMobileEdgeMedia createQoEObjectWith:50000 startTime:2 fps:24 droppedFrames:10]
[tracker updateQoEObject:qoeInfo];
Media constants
Media type
Defines the type of media that is currently being tracked. It can be either MediaType.Video or MediaType.Audio.
public class Media {
public enum MediaType {
/**
* Constant defining media type for Video streams
*/
Video,
/**
* Constant defining media type for Audio streams
*/
Audio
}
}
Android Java
HashMap<String, Object> mediaInfo = Media.createMediaObject("videoName",
"videoId",
60,
MediaConstants.StreamType.VOD,
Media.MediaType.Video)
Android Kotlin
val mediaInfo = Media.createMediaObject("videoName",
"videoId",
60,
MediaConstants.StreamType.VOD,
Media.MediaType.Video)
@objc(AEPEdgeMediaType)
public enum MediaType: Int, RawRepresentable {
//Constant defining media type for Video streams
case Audio
//Constant defining media type for Audio streams
case Video
}
iOS Swift
var mediaObject = Media.createMediaObjectWith(name: "videoName",
id: "videoId",
length: 60,
streamType: MediaConstants.StreamType.VOD,
mediaType: MediaType.Video)
iOS Objective-C
NSDictionary *mediaObject = [AEPMobileEdgeMedia createMediaObjectWith:@"videoName"
id:@"videoId"
length:60
streamType:AEPEdgeMediaStreamType.VOD
mediaType:AEPEdgeMediaTypeVideo];
Stream type
Defines the type of streamed content that is currently being tracked. Use the available constants or custom defined stream type values.
public class MediaConstants {
public static final class StreamType {
/**
* Constant defining stream type for VOD streams
*/
public static final String VOD = "vod";
/**
* Constant defining stream type for Live streams
*/
public static final String LIVE = "live";
/**
* Constant defining stream type for Linear streams
*/
public static final String LINEAR = "linear";
/**
* Constant defining stream type for Podcast streams
*/
public static final String PODCAST = "podcast";
/**
* Constant defining stream type for Audiobook streams
*/
public static final String AUDIOBOOK = "audiobook";
/**
* Constant defining stream type for AOD streams
*/
public static final String AOD = "aod";
}
}
Android Java
HashMap<String, Object> mediaInfo = Media.createMediaObject("videoName",
"videoId",
60,
MediaConstants.StreamType.VOD,
Media.MediaType.Video)
Android Kotlin
val mediaInfo = Media.createMediaObject("videoName",
"videoId",
60,
MediaConstants.StreamType.VOD,
Media.MediaType.Video)
public class MediaConstants: NSObject {
@objc(AEPEdgeMediaStreamType)
public class StreamType: NSObject {
// Constant defining stream type for VOD streams.
public static let VOD = "vod"
// Constant defining stream type for Live streams.
public static let LIVE = "live"
// Constant defining stream type for Linear streams.
public static let LINEAR = "linear"
// Constant defining stream type for Podcast streams.
public static let PODCAST = "podcast"
// Constant defining stream type for Audiobook streams.
public static let AUDIOBOOK = "audiobook"
// Constant defining stream type for AOD streams.
public static let AOD = "aod"
}
}
iOS Swift
var mediaObject = Media.createMediaObjectWith(name: "videoName",
id: "videoId",
length: 60,
streamType: MediaConstants.StreamType.VOD,
mediaType: MediaType.Video)
iOS Objective-C
NSDictionary *mediaObject = [AEPMobileEdgeMedia createMediaObjectWith:@"videoName"
id:@"videoId"
length:60
streamType:AEPEdgeMediaStreamType.VOD
mediaType:AEPEdgeMediaTypeVideo];
Standard video constants
Defines the standard video constants used as keys when creating or modifying video metadata dictionaries. Use the available constant values or custom defined video metadata key values.
public class MediaConstants {
public static final class VideoMetadataKeys {
public static final String AD_LOAD = "adLoad";
public static final String ASSET_ID = "assetID";
public static final String AUTHORIZED = "isAuthenticated";
public static final String DAY_PART = "dayPart";
public static final String EPISODE = "episode";
public static final String FEED = "feed";
public static final String FIRST_AIR_DATE = "firstAirDate";
public static final String FIRST_DIGITAL_DATE = "firstDigitalDate";
public static final String GENRE = "genre";
public static final String MVPD = "mvpd";
public static final String NETWORK = "network";
public static final String ORIGINATOR = "originator";
public static final String SEASON = "season";
public static final String SHOW = "show";
public static final String SHOW_TYPE = "showType";
public static final String STREAM_FORMAT = "streamFormat";
public static final String RATING = "rating";
}
}
Android Java
HashMap<String, Object> mediaInfo = Media.createMediaObject("videoName",
"videoId",
60,
MediaConstants.StreamType.VOD,
Media.MediaType.Video)
HashMap<String, String> videoMetadata = new HashMap<String, String>();
// Standard Video Metadata
videoMetadata.put(MediaConstants.VideoMetadataKeys.SHOW, "Sample Show");
videoMetadata.put(MediaConstants.VideoMetadataKeys.SEASON, "Sample Season");
tracker.trackSessionStart(mediaInfo, videoMetadata);
Android Kotlin
val mediaInfo = Media.createMediaObject("videoName",
"videoId",
60,
MediaConstants.StreamType.VOD,
Media.MediaType.Video)
val videoMetadata = mutableMapOf(MediaConstants.VideoMetadataKeys.SHOW to "Sample Show",
MediaConstants.VideoMetadataKeys.SEASON to "Sample Season")
tracker.trackSessionStart(mediaInfo, videoMetadata)
public class MediaConstants: NSObject {
@objc(AEPEdgeMediaVideoMetadataKeys)
public class VideoMetadataKeys: NSObject {
public static let AD_LOAD = "adLoad"
public static let ASSET_ID = "assetID"
public static let AUTHORIZED = "isAuthenticated"
public static let DAY_PART = "dayPart"
public static let EPISODE = "episode"
public static let FEED = "feed"
public static let FIRST_AIR_DATE = "firstAirDate"
public static let FIRST_DIGITAL_DATE = "firstDigitalDate"
public static let GENRE = "genre"
public static let MVPD = "mvpd"
public static let NETWORK = "network"
public static let ORIGINATOR = "originator"
public static let RATING = "rating"
public static let SEASON = "season"
public static let SHOW = "show"
public static let SHOW_TYPE = "showType"
public static let STREAM_FORMAT = "streamFormat"
}
}
iOS Swift
var mediaInfo = Media.createMediaObjectWith(name: "videoName", id: "videoId", length: 60, streamType: MediaConstants.StreamType.VOD, mediaType: MediaType.Video)
var videoMetadata: [String: String] = [:]
// Standard Video Metadata
videoMetadata[MediaConstants.VideoMetadataKeys.SHOW] = "Sample Show"
videoMetadata[MediaConstants.VideoMetadataKeys.SEASON] = "Sample Season"
tracker.trackSessionStart(info: mediaInfo, metadata: videoMetadata)
iOS Objective-C
NSDictionary *mediaInfo = [AEPMobileEdgeMedia createMediaObjectWith:@"videoName" id:@"videoId" length:60 streamType:AEPEdgeMediaStreamType.VOD mediaType:AEPEdgeMediaTypeVideo];
NSMutableDictionary *videoMetadata = [[NSMutableDictionary alloc] init];
// Standard Video Metadata
[videoMetadata setObject:@"Sample Show" forKey:AEPEdgeMediaVideoMetadataKeys.SHOW];
[videoMetadata setObject:@"Sample Season" forKey:AEPEdgeMediaVideoMetadataKeys.SEASON];
[tracker trackSessionStart:mediaInfo metadata:videoMetadata];
Standard audio constants
Defines the standard audio constants used as keys when creating or modifying audio metadata dictionaries. Use the available constant values or custom defined audio metadata key values.
public class MediaConstants {
public static final class AudioMetadataKeys {
public static final String ALBUM = "album";
public static final String ARTIST = "artist";
public static final String AUTHOR = "author";
public static final String LABEL = "label";
public static final String PUBLISHER = "publisher";
public static final String STATION = "station";
}
}
Android Java
HashMap<String, Object> mediaInfo = Media.createMediaObject("videoName",
"videoId",
60,
MediaConstants.StreamType.AOD,
Media.MediaType.Audio)
HashMap<String, String> audioMetadata = new HashMap<String, String>();
// Standard Video Metadata
audioMetadata.put(MediaConstants.AudioMetadataKeys.ARTIST, "Sample Artist");
audioMetadata.put(MediaConstants.AudioMetadataKeys.ALBUM, "Sample Album");
tracker.trackSessionStart(mediaInfo, audioMetadata);
Android Kotlin
val mediaInfo = Media.createMediaObject("videoName",
"videoId",
60,
MediaConstants.StreamType.AOD,
Media.MediaType.Audio)
val audioMetadata = mutableMapOf(MediaConstants.AudioMetadataKeys.ARTIST to "Sample Artist",
MediaConstants.AudioMetadataKeys.ALBUM to "Sample Album")
tracker.trackSessionStart(mediaInfo, audioMetadata)
public class MediaConstants: NSObject {
@objc(AEPEdgeMediaAudioMetadataKeys)
public class AudioMetadataKeys: NSObject {
public static let ALBUM = "album"
public static let ARTIST = "artist"
public static let AUTHOR = "author"
public static let LABEL = "label"
public static let PUBLISHER = "publisher"
public static let STATION = "station"
}
}
iOS Swift
var audioObject = Media.createMediaObjectWith(name: "audioName", id: "audioId", length: 30, streamType: MediaConstants.StreamType.AOD, mediaType: MediaType.AUDIO)
var audioMetadata: [String: String] = [:]
// Standard Audio Metadata
audioMetadata[MediaConstants.AudioMetadataKeys.ARTIST] = "Sample Artist"
audioMetadata[MediaConstants.AudioMetadataKeys.ALBUM] = "Sample Album"
tracker.trackSessionStart(info: audioObject, metadata: audioMetadata)
iOS Objective-C
NSDictionary *audioObject = [AEPMobileEdgeMedia createMediaObjectWith:@"audioName" id:@"audioid" length:30 streamType:AEPEdgeMediaStreamType.AOD mediaType:AEPEdgeMediaTypeAudio];
NSMutableDictionary *audioMetadata = [[NSMutableDictionary alloc] init];
// Standard Audio Metadata
[audioMetadata setObject:@"Sample Artist" forKey:AEPEdgeMediaAudioMetadataKeys.ARTIST];
[audioMetadata setObject:@"Sample Album" forKey:AEPEdgeMediaAudioMetadataKeys.ALBUM];
[tracker trackSessionStart:audioObject metadata:audioMetadata];
Standard ad constants
Defines the standard metadata keys for ads.
public class MediaConstants {
public static final class AdMetadataKeys {
public static final String ADVERTISER = "advertiser";
public static final String CAMPAIGN_ID = "campaignID";
public static final String CREATIVE_ID = "creativeID";
public static final String CREATIVE_URL = "creativeURL";
public static final String PLACEMENT_ID = "placementID";
public static final String SITE_ID = "siteID";
}
}
Android Java
HashMap<String, Object> adInfo = Media.createAdObject("adName", "adId", 1, 15);
HashMap<String, String> adMetadata = new HashMap<String, String>();
// Standard Video Metadata
adMetadata.put(MediaConstants.AdMetadataKeys.ADVERTISER, "Sample Advertiser");
adMetadata.put(MediaConstants.AdMetadataKeys.CAMPAIGN_ID, "Sample Campaign");
tracker.trackEvent(Media.Event.AdStart, adInfo, adMetadata);
Android Kotlin
val adInfo = Media.createAdObject("adName", "adId", 1, 15)
val adMetadata = mutableMapOf(MediaConstants.AdMetadataKeys.ADVERTISER to "Sample Advertiser",
MediaConstants.AdMetadataKeys.CAMPAIGN_ID to "Sample Campaign")
tracker.trackEvent(Media.Event.AdStart, adInfo, adMetadata)
public class MediaConstants: NSObject {
@objc(AEPEdgeAdMetadataKeys)
public class AdMetadataKeys: NSObject {
public static let ADVERTISER = "advertiser"
public static let CAMPAIGN_ID = "campaignID"
public static let CREATIVE_ID = "creativeID"
public static let CREATIVE_URL = "creativeURL"
public static let PLACEMENT_ID = "placementID"
public static let SITE_ID = "siteID"
}
}
iOS Swift
let adInfo = Media.createObjectWith(name: "adName", id: "adId", position: 0, length: 30)
var adMetadata: [String: String] = [:]
// Standard Ad Metadata
adMetadata[MediaConstants.AdMetadataKeys.ADVERTISER] = "Sample Advertiser"
adMetadata[MediaConstants.AdMetadataKeys.CAMPAIGN_ID] = "Sample Campaign"
tracker.trackEvent(event: MediaEvent.AdStart, info: adInfo, metadata: adMetadata)
iOS Objective-C
NSDictionary *adInfo = [AEPMobileEdgeMedia createAdObjectWith:@"adName" id:@"adId" position:0 length:30];
NSMutableDictionary *adMetadata = [[NSMutableDictionary alloc] init];
// Standard Ad Metadata
[adMetadata setObject:@"Sample Advertiser" forKey:AEPEdgeAdMetadataKeys.ADVERTISER];
[adMetadata setObject:@"Sample Campaign" forKey:AEPEdgeAdMetadataKeys.CAMPAIGN_ID];
[tracker trackEvent:AEPEdgeMediaEventAdStart info:adInfo metadata:adMetadata];
Player state constants
Defines the state of the media player that is currently being tracked. Use the available constant values or custom defined player state values.
public class MediaConstants {
public static final class PlayerState {
public static final String FULLSCREEN = "fullscreen";
public static final String PICTURE_IN_PICTURE = "pictureInPicture";
public static final String CLOSED_CAPTION = "closeCaption";
public static final String IN_FOCUS = "inFocus";
public static final String MUTE = "mute";
}
}
Android Java
HashMap<String, Object> fullScreenState = Media.createStateObject(MediaConstants.PlayerState.FULLSCREEN);
Android Kotlin
val fullScreenState = Media.createStateObject(MediaConstants.PlayerState.FULLSCREEN)
public class MediaConstants: NSObject {
@objc(AEPEdgeMediaPlayerState)
public class PlayerState: NSObject {
public static let FULLSCREEN = "fullscreen"
public static let PICTURE_IN_PICTURE = "pictureInPicture"
public static let CLOSED_CAPTION = "closeCaption"
public static let IN_FOCUS = "inFocus"
public static let MUTE = "mute"
}
}
iOS Swift
let inFocusState = Media.createStateObjectWith(stateName: MediaConstants.PlayerState.IN_FOCUS)
tracker.trackEvent(event: MediaEvent.StateStart, info: inFocusState, metadata: nil)
iOS Objective-C
NSDictionary* inFocusState = [AEPMobileEdgeMedia createStateObjectWith:AEPEdgeMediaPlayerState.IN_FOCUS];
[tracker trackEvent:AEPEdgeMediaEventStateStart info:muteState metadata:nil];
Media events
Defines the media event that is currently being tracked. Only the available constant values are allowed.
public class Media {
/**
* These enumeration values define the type of a tracking event
*/
public enum Event {
/**
* Constant defining event type for AdBreak start
*/
AdBreakStart,
/**
* Constant defining event type for AdBreak complete
*/
AdBreakComplete,
/**
* Constant defining event type for Ad start
*/
AdStart,
/**
* Constant defining event type for Ad complete
*/
AdComplete,
/**
* Constant defining event type for Ad skip
*/
AdSkip,
/**
* Constant defining event type for Chapter start
*/
ChapterStart,
/**
* Constant defining event type for Chapter complete
*/
ChapterComplete,
/**
* Constant defining event type for Chapter skip
*/
ChapterSkip,
/**
* Constant defining event type for Seek start
*/
SeekStart,
/**
* Constant defining event type for Seek complete
*/
SeekComplete,
/**
* Constant defining event type for Buffer start
*/
BufferStart,
/**
* Constant defining event type for Buffer complete
*/
BufferComplete,
/**
* Constant defining event type for change in Bitrate
*/
BitrateChange,
/**
* Constant defining event type for State start
*/
StateStart,
/**
* Constant defining event type for State end
*/
StateEnd
}
}
Examples
Android Java
tracker.trackEvent(Media.Event.BitrateChange, null, null);
Android Kotlin
tracker.trackEvent(Media.Event.BitrateChange, null, null)
@objc(AEPEdgeMediaEvent)
public enum MediaEvent: Int, RawRepresentable {
// event type for AdBreak start
case AdBreakStart
// event type for AdBreak Complete
case AdBreakComplete
// event type for Ad Start
case AdStart
// event type for Ad Complete
case AdComplete
// event type for Ad Skip
case AdSkip
// event type for Chapter Start
case ChapterStart
// event type for Chapter Complete
case ChapterComplete
// event type for Chapter Skip
case ChapterSkip
// event type for Seek Start
case SeekStart
// event type for Seek Complete
case SeekComplete
// event type for Buffer Start
case BufferStart
// event type for Buffer Complete
case BufferComplete
// event type for change in Bitrate
case BitrateChange
// event type for Player State Start
case StateStart
// event type for Player State End
case StateEnd
}
iOS Swift
tracker.trackEvent(event: MediaEvent.BitrateChange, info: nil, metadata: nil)
iOS Objective-C
[tracker trackEvent:AEPEdgeMediaEventBitrateChange info:nil metadata:nil];
Media resume
Constant to denote that the current tracking session is resuming a previously closed session. This information must be provided when starting a tracking session.
Android Java
data-slots=heading, code
data-repeat=1
Syntax
public class MediaConstants {
public static final class MediaObjectKey {
/**
* Constant defining explicit media resumed property. Set this to true on MediaObject if resuming a previously closed session.
*/
public static final String RESUMED;
}
}
Android Java Example
HashMap<String, Object> mediaInfo = Media.createMediaObject("mediaName", "mediaId", 60, MediaConstants.StreamType.VOD, Media.MediaType.Video);
// Attach media resumed information.
mediaInfo.put(MediaConstants.MediaObjectKey.RESUMED, true);
tracker.trackSessionStart(mediaInfo, null);
Android Kotlin
val mediaInfo = Media.createMediaObject("mediaName", "mediaId", 60, MediaConstants.StreamType.VOD, Media.MediaType.Video)
// Attach media resumed information.
mediaInfo[MediaConstants.MediaObjectKey.RESUMED] = true
tracker.trackSessionStart(mediaInfo, null)
iOS Swift
data-slots=heading, code
data-repeat=2
Syntax
public class MediaConstants: NSObject {
@objc(AEPEdgeMediaObjectKey)
public class MediaObjectKey: NSObject {
public static let RESUMED = "media.resumed"
}
}
Example
var mediaObject = Media.createMediaObjectWith(name: "videoName", id: "videoId", length: 60, streamType: MediaConstants.StreamType.VOD, mediaType: MediaType.Video)
mediaObject[MediaConstants.MediaObjectKey.RESUMED] = true
tracker.trackSessionStart(info: mediaObject, metadata: nil)
iOS Objective-C
data-slots=heading, code
data-repeat=2
Syntax
@interface AEPEdgeMediaObjectKey : NSObject
+ (NSString * _Nonnull)RESUMED
Example
NSDictionary *mediaObject = [AEPMobileEdgeMedia createMediaObjectWith:@"videoName" id:@"videoId" length:60 streamType:AEPEdgeMediaStreamType.VOD mediaType:AEPEdgeMediaTypeVideo];
// Attach media resumed information.
NSMutableDictionary *obj = [mediaObject mutableCopy];
[obj setObject:@YES forKey:AEPEdgeMediaObjectKey.RESUMED];
[tracker trackSessionStart:obj metadata:nil];