以下是有关使用里程碑视频测量在 iOS 中测量视频的一些信息。
在视频播放过程中,会向此服务发送频繁的“心率”调用,以测量播放的时间。这些心率调用每 10 秒发送一次,从而生成精细的视频参与量度和更准确的视频流失报表。有关更多信息,请参阅 在Adobe Analytics中测量流媒体.
在所有平台中,测量视频的常规流程都非常相似。本文内容提供了开发人员任务的基本概述以及代码示例。
下表列出了发送到 Analytics 的媒体数据。使用处理规则将上下文数据映射到 Analytics 变量。
a.media.name
(必需)按照实施中的规定,当访客以某种方式查看视频时,应收集视频的名称。您可以为此变量添加分类。
(可选)自定义分析变量可提供视频路径信息。
a.media.name
(可选)提供视频路径信息。必须由客户关怀代表为此变量启用路径。
a.media.segment
(必需)收集视频区段数据,包括区段名称以及区段在视频中出现的顺序。此变量在自动跟踪播放器事件时通过启用 segmentByMilestones
变量来填充,或在手动跟踪播放器事件时通过设置自定义区段名称来填充。例如,当访客查看视频中的第一个区段时,SiteCatalyst可能会在 1:M:0-25
区段eVar。
默认的视频数据收集方法会在以下节点收集数据:
Analytics 会在访客开始观看时,将区段的开始计为第一个区段视图。在区段开始播放后,则计为后续区段视图。
a.contentType
收集访客查看的内容类型相关数据。由视频测量发送的点击量会被分配给 video
内容类型。无需专门保留此变量来进行视频跟踪。通过使用此同一变量来提供其他内容报告内容类型,您可以分析不同内容类型之间的访客分布情况。例如,您可以使用此变量通过“article”或“product page”之类的值标记其他内容类型。 从视频测量的角度来看,内容类型使您能够识别视频访客,并计算视频转化率。
a.media.timePlayed
以秒为单位,计算自上次数据收集流程(图像请求)以来,观看视频所花费的时间。
a.media.view
表明访客已查看了视频的某些部分。但是,它并不提供有关访客查看了视频中的多少内容或哪一部分的信息。
a.media.segmentView
表明访客已查看了视频区段的某些部分。但是,它并不提供有关访客查看了视频中的多少内容或哪一部分的信息。
a.media.complete
表明用户已查看了完整的视频。默认情况下,完整的事件会在视频结束前 1 秒进行测量。在实施过程中,您可以指定希望在距离视频结束有多少秒时被视为查看完成。对于直播视频和其他没有明确定义结束时间的流,您可以指定一个自定义的点来测量完成情况,例如,当观看了指定时间后即可认为已看完视频。
使用您要用于跟踪视频的设置配置 ADBMediaSettings
对象:
ADBMediaSettings *mediaSettings = [ADBMobile mediaCreateSettingsWithName:MEDIA_NAME
length:MEDIA_LENGTH playerName:PLAYER_NAME playerID:PLAYER_ID];
// milestone tracking. Use either standard milestones (percentage of total length)
// or offset milestones (seconds elapsed from the beginning of the video)
mediaSettings.milestones = @"25,50,75";
mediaSettings.segmentByMilestones = YES;
mediaSettings.offsetMilestones = @"60,120";
mediaSettings.segmentByOffsetMilestones = YES;
// seconds tracking - sends a hit every x seconds
mediaSettings.trackSeconds = 30; // sends a hit every 30 seconds
// open the video
[ADBMobile mediaOpenWithSettings:mediaSettings callback:nil];
// You are now ready to play the video, for example, [movieViewController.moviePlayer play];
// Note the mediaPlay, mediaStop and mediaClose methods are called in the
// event handlers described in the next section
要测量视频播放,需要在适当时调用 mediaPlay
、mediaStop
和 mediaClose
方法。例如,暂停播放器时,调用 mediaStop
。开始或继续播放时,调用 mediaPlay
。
以下示例演示了如何配置通知和调用媒体方法来测量视频:
// configure notifications for when the video is finished, and when the
media playback state changes
- (void) configureNotifications:(MPMoviePlayerController *) movieController {
[[NSNotificationCenter defaultCenter]
addObserver: self
selector: @selector(mediaFinishedCallback:)
name: MPMoviePlayerPlaybackDidFinishNotification
object: movieController];
[[NSNotificationCenter defaultCenter]
addObserver: self
selector: @selector(mediaPlaybackChangedCallback:)
name: MPMoviePlayerPlaybackStateDidChangeNotification
object: movieController];
}
// define your notification callbacks.
- (void) mediaFinishedCallback: (NSNotification*) notification { [ADBMobile mediaClose:MEDIA_NAME];}
- (void) mediaPlaybackChangedCallback: (NSNotification*) notification {
MPMoviePlayerController *mediaController = notification.object;
if (mediaController.playbackState == MPMoviePlaybackStatePlaying) {
[ADBMobile mediaPlay:MEDIA_NAME offset: isnan(mediaController.currentPlaybackTime) ? 0.0 : mediaController.currentPlaybackTime];
}
else if (mediaController.playbackState == MPMoviePlaybackStateSeekingBackward) {
[ADBMobile mediaStop:MEDIA_NAME offset:mediaController.currentPlaybackTime];
}
else if (mediaController.playbackState == MPMoviePlaybackStateSeekingForward) {
[ADBMobile mediaStop:MEDIA_NAME offset:mediaController.currentPlaybackTime];
}
else if (mediaController.playbackState == MPMoviePlaybackStatePaused) {
[ADBMobile mediaStop:MEDIA_NAME offset:mediaController.currentPlaybackTime];
}
else if (mediaController.playbackState == MPMoviePlaybackStateInterrupted) {
[ADBMobile mediaStop:MEDIA_NAME offset:mediaController.currentPlaybackTime];
}
else if (mediaController.playbackState == MPMoviePlaybackStateStopped) {
[ADBMobile mediaStop:MEDIA_NAME offset:mediaController.currentPlaybackTime];
}
}
bool segmentByMilestones;
bool segmentByOffsetMilestones;
double length;
NSString *channel;
NSString *name;
NSString *playerName;
NSString *playerID;
NSString *milestones;
NSString *offsetMilestones;
NSUInteger trackSeconds;
NSUInteger completeCloseOffsetThreshold;
// settings used for ad tracking. For
bool isMediaAd;
double parentPodPosition;
NSString *CPM;
NSString *parentName;
NSString *parentPod;
bool ad;
bool clicked;
bool complete;
bool eventFirstTime;
double length;
double offset;
double percent;
double segmentLength;
double timePlayed;
double timePlayedSinceTrack;
double timestamp;
NSDate *openTime
NSString *name
NSString *playerName
NSString *mediaEvent
NSString *segment
NSUInteger milestone
NSUInteger offsetMilestone
NSUInteger segmentNum
NSUInteger eventType
mediaCreateSettingsWithName:length:playerName:playerID:
通过指定的参数返回 ADBMediaSettings
对象。
以下是此方法的语法:
+(ADBMediaSettings *) mediaCreateSettingsWithName:(NSString *)name
length:(double)length
playerName:(NSString *)playerName
playerID:(NSString *)playerID;
以下是此方法的代码示例:
ADBMediaSettings *myCatSettings =
[ADBMobile mediaCreateSettingsWithName:@"catVideo" length:85
playerName:@"catVideoPlayer"
playerID:@"catPlayerId"];
mediaAdCreateSettingsWithName:length:playerName:parentName:parentPod:parentPodPosition:CPM:
返回用于跟踪广告视频的 ADBMediaSettings
对象。
以下是此方法的语法:
+ (ADBMediaSettings *) mediaAdCreateSettingsWithName:(NSString *)name
length:(double)length
playerName:(NSString *)playerName
parentName:(NSString *)parentName
parentPod:(NSString *)parentPod
parentPodPosition:(double)parentPodPosition
CPM:(NSString *)CPM;
以下是此方法的代码示例:
ADBMediaSettings *mySettings =
[ADBMobile mediaAdCreateSettingsWithName:@"ad" length:30
playerName:@"adPlayer"
parentName:@"catVideo"
parentPod:@"catCollection"
parentPodPosition:2
CPM:nil];
mediaOpenWithSettings:callback:
打开 ADBMediaSettings
对象以进行跟踪。
以下是此方法的语法:
+ (void) mediaOpenWithSettings:(ADBMediaSettings *)settings
callback:(void (^)(ADBMediaState *mediaState))callback;
以下是此方法的代码示例:
[ADBMobile mediaOpenWithSettings:mySettings callback:^(ADBMediaState *mediaState) {
// do something with media state if you want}];
mediaClose:
关闭名为“name”**的媒体项目。
以下是此方法的语法:
+ (void) mediaClose:(NSString *)name;
以下是此方法的代码示例:
[ADBMobile mediaClose:@"kittiesPlaying"];
mediaPlay:offset:
在给定的“offset”时间(以秒为单位)播放名为“name”的媒体项目。
以下是此方法的语法:
+ (void) mediaPlay:(NSString *)name offset:(double)offset;
以下是此方法的代码示例:
[ADBMobile mediaPlay:@"cats" offset:25];
mediaComplete:offset:
在提供的“offset”**时间(以秒为单位)将媒体项目手动标记为完成。
以下是此方法的语法:
+ (void) mediaComplete:(NSString *)name offset:(double)offset;
以下是此方法的代码示例:
[ADBMobile mediaComplete:@"meowzah" offset:90];
mediaStop:offset:
通知媒体模块已在给定的“offset”**时间停止或暂停视频。
以下是此方法的语法:
+ (void) mediaStop:(NSString *)name offset:(double)offset;
以下是此方法的代码示例:
[ADBMobile mediaStop:@"toonses" offset:30];
mediaClick:offset:
通知媒体模块已单击媒体项目。
以下是此方法的语法:
+ (void) mediaClick:(NSString *)name offset:(double)offset;
以下是此方法的代码示例:
[ADBMobile mediaClick:@"soManyCats" offset:47];
mediaTrack:withData:
发送用于获取当前媒体状态的跟踪操作调用(无页面查看)。
以下是此方法的语法:
+ (void) mediaTrack:(NSString *)name withData:(NSDictionary *)data;