10 防录屏跑马灯

此篇是以点播2.15.0版本为示例讲解的跑马灯功能集成文档。跑马灯是视频防录屏策略中的一种,可以实现设定文字在视频上不规则运动,用于视频的防盗溯源。

其中包含了以下三个类:

  • PLVMarqueeView 跑马灯view,用于显示跑马灯的视图

  • PLVMarqueeModel 跑马灯model,用于描述跑马灯样式和动画的定义

  • PLVMarqueeAnimationManager 跑马灯动画管理,负责给跑马灯提供动画

跑马灯的使用详见demo中PLVCourseDetailController的使用示例。

10.1 跑马灯的使用

10.1.1 添加跑马灯

PLVMarqueeView添加到任意需要显示跑马灯的地方,例如添加到 PLVVodSkinPlayerController 中的 maskView 上(demo中已经添加)。

- (void)viewDidLoad {
    [super viewDidLoad];
    。。。。。。
  
    // 设置新版跑马灯(2.0)
    self.marqueeView = [[PLVMarqueeView alloc]init];
    self.marqueeView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
    self.marqueeView.frame = self.maskView.bounds;
    [self.maskView addSubview:self.marqueeView];
    。。。。。。
}

10.1.2 设置跑马灯样式和动画定义

使用 PLVMarqueeModel 设置跑马灯样式

__weak typeof(self) weakSelf = self;
dispatch_async(dispatch_get_main_queue(), ^{
      
    PLVMarqueeModel *marqueeModel = [[PLVMarqueeModel alloc]init];
    marqueeModel.style = PLVMarqueeModelStyleRoll;
    marqueeModel.content = @"Polyv跑马灯";
    marqueeModel.fontSize = 30;
    marqueeModel.fontColor = @"#000000";
    marqueeModel.outline = YES;
    marqueeModel.outlineColor = @"#000000";
    marqueeModel.shadowAlpha = 1;
    marqueeModel.shadowBlurRadius = 4;
    marqueeModel.shadowOffsetX = 2;
    marqueeModel.shadowOffsetY = 2;
    marqueeModel.alpha = 1;
    marqueeModel.tweenTime = 1;
    marqueeModel.interval = 5;
    marqueeModel.lifeTime = 3;
    marqueeModel.speed = 20;
    [weakSelf.player.marqueeView setPLVMarqueeModel:marqueeModel];
    weakSelf.player.marquee = nil; //移除旧版本的跑马灯
});

10.1.3 控制跑马灯

监听播放器状态回调,控制跑马灯启动、暂停和停止

__weak typeof (self) weakSelf = self;
self.player.playbackStateHandler = ^(PLVVodPlayerViewController *player) {
    //跑马灯的控制
    if (player.playbackState == PLVVodPlaybackStatePlaying) {
        [weakSelf.player.marqueeView start];
    }else if (player.playbackState == PLVVodPlaybackStatePaused) {
        [weakSelf.player.marqueeView pause];
    }else if (player.playbackState == PLVVodPlaybackStateStopped) {
        [weakSelf.player.marqueeView stop];
    }
};

10.2 跑马灯支持的样式和动画定义

使用PLVMarqueeModel来定义跑马灯样式,其属性如下所示:

#pragma mark - 内容属性

/// 跑马灯内容,默认”PLV跑马灯“
@property (nonatomic, strong) NSString *content;
/// 字体大小,默认30
@property (nonatomic, assign) NSUInteger fontSize;
/// 字体颜色,默认#000000
@property (nonatomic, strong) NSString *fontColor;
/// 自定义播放错误提示信息(跑马灯校验失败)
@property (nonatomic, strong) NSString *errorMessage;


#pragma mark - 描边属性

/// 是否描边,默认NO
@property (nonatomic, assign) BOOL outline;
/// 描边颜色,默认#000000
@property (nonatomic, strong) NSString *outlineColor;
/// 阴影透明度,(范围:0~1),默认1
@property (nonatomic, assign) float shadowAlpha;
/// 阴影半径,默认4
@property (nonatomic, assign) NSUInteger shadowBlurRadius;
/// 阴影水平偏移量,默认2
@property (nonatomic, assign) NSUInteger shadowOffsetX;
/// 描边垂直偏移量.默认2
@property (nonatomic, assign) NSUInteger shadowOffsetY;


#pragma mark - 动画相关属性

/// 文本透明度(范围:0~1),默认1
@property (nonatomic, assign) float alpha;
/// 文本渐隐渐现时间 (单位:秒),默认1,有效样式:Flash、PartFlash、DoubleFlash、RollFade
@property (nonatomic, assign) NSUInteger tweenTime;
/// 文本隐藏间隔时间 (单位:秒),默认5,有效样式:Flash、PartFlash、DoubleFlash
@property (nonatomic, assign) NSUInteger interval;
/// 文本显示时间 (单位:秒),默认3,有效样式:Flash、PartFlash、DoubleFlash
@property (nonatomic, assign) NSUInteger lifeTime;
/// 文字移动指定像素所需时间/显示时间(单位:秒),默认20,有效样式:Roll、RollFade、PartRoll、DoubleRoll
@property (nonatomic, assign) NSUInteger speed;


/// 暂停跑马灯的时候,是否隐藏。默认为YES
@property (nonatomic, assign) BOOL isHiddenWhenPause;
/// 跑马灯运行的时候,是否一直完整显示跑马灯。为YES时interval不生效。默认为NO
@property (nonatomic, assign) BOOL isAlwaysShowWhenRun;

使用PLVMarqueeModelStyle来定义跑马灯的运动类型,其枚举如下:

typedef NS_ENUM(NSUInteger, PLVMarqueeModelStyle) {
    /// 滚动(自屏幕右方至左方一直滚动)
    PLVMarqueeModelStyleRoll = 1,
    /// 闪烁(屏幕内随机位置闪烁)
    PLVMarqueeModelStyleFlash,
    /// 滚动+闪烁(自屏幕右方至左方一直滚动,渐隐渐现)
    PLVMarqueeModelStyleRollFade,
    /// 局部滚动(上下15%的视频区域之间滚动)
    PLVMarqueeModelStylePartRoll,
    /// 局部闪烁(上下15%的视频区域随机闪烁文字)
    PLVMarqueeModelStylePartFlash,
    /// 滚动(自屏幕右方至左方一直滚动)双跑马灯
    PLVMarqueeModelStyleDoubleRoll,
    /// 闪烁(屏幕内随机位置闪烁))双跑马灯
    PLVMarqueeModelStyleDoubleFlash,
};

Last updated