开放平台
首页平台概述
开发者
  • API文档
  • SDK
产品功能
  • 新手入门
  • 产品功能
常见问题
首页平台概述
开发者
  • API文档
  • SDK
产品功能
  • 新手入门
  • 产品功能
常见问题
  1. 防录屏
  • demo
  • JS SDK
    • 产品介绍
    • 快速接入
    • SDK 对接示例
    • 观看直播
    • 暖场视频
    • 房间消息说明
    • 互动连麦
    • 文档白板
    • 全局事件
    • 全局错误码
    • 版本更新记录
    • 互动工具
      • 互动-抽奖
      • 互动-礼物
      • 互动-签到
      • 互动-问卷
      • 互动-公告
      • 互动-商品
      • 互动-问答
      • 互动-推屏卡片
      • 互动-快问快答
      • 互动-聊天
      • 互动-优惠券
      • 互动-点赞
    • 直播间拓展功能
      • 资料下载
      • 观看限制验证
      • 观看协议
      • 回放章节
  • 点播SDK
    • 点播上传SDK
    • 更新记录
  • iOS SDK
    • 整体介绍
    • 快速接入
    • SDK 登录
    • 暖场视频
    • 视频轮询
    • 直播彩排
    • 高级美颜
    • 云导播
    • 观看协议
    • 文档白板演示
    • 聊天功能
    • 视频直播
      • 发起视频直播
      • 观看视频直播
    • 互动直播
      • 观众互动
      • 推流摄像头
      • 互动直播API
      • 主播发起互动直播
      • 嘉宾加入互动直播
    • 无延迟直播
      • 主播发起无延迟直播
      • 观众观看无延迟直播
    • 互动工具
      • 互动-抽奖
      • 互动-礼物
      • 互动-签到
      • 互动-问卷
      • 互动-章节打点
      • 互动-公告
      • 互动-商品
      • 互动-计时器
      • 互动-问答
      • 互动-推屏卡片
      • 互动-快问快答
      • 互动-优惠券
      • 互动-点赞
    • 直播间拓展能力
      • 直播间特色功能配置项
      • 文件下载
      • 修改角色昵称
      • 观看权限校验
      • 投屏
      • 虚拟人数
    • 观看回放
      • 观看回放
    • 防录屏
      • 跑马灯
    • 字段说明
      • 互动活动详情字段
      • 错误码说明
      • 常量定义
      • 活动详情字段说明
    • 版本更新说明
      • 版本更新信息
      • v2.3.0 到 v2.4.0 升级说明
      • v3.0.1 到 v3.2.0 升级说明
      • V2.9.0到v3.0.1升级说明
      • v6.3.0
      • v6.2.1
      • v3.2.0 到 v4.0.1
      • v2.7.0 到 v2.8.0、v2.9.0 升级说明
      • 6.5.0
      • v5.0.x 到 v6.0.0
      • v6.4.0
  • Adroid SDK
    • 整体介绍
    • 快速接入
    • SDK登录
    • 暖场视频
    • 视频轮巡功能
    • 直播彩排
    • 高级美颜
    • 云导播功能
    • 观看协议
    • 文档白板
    • 聊天功能
    • 房间消息
    • 信息采集说明
    • 视频直播
      • 发起视频直播
      • 观看视频直播
    • 互动直播
      • 互动直播API
      • 主播发起互动直播
      • 嘉宾加入互动直播
      • 观众观看互动直播
    • 无延迟直播
      • 主播发起无延迟直播
      • 观众观看无延迟直播
    • 互动工具
      • 互动-抽奖
      • 互动-礼物
      • 互动-签到
      • 互动-问卷
      • 互动-公告
      • 互动-商品
      • 互动-计时器
      • 互动-问答
      • 互动-推屏卡片
      • 互动-快问快答
      • 互动-优惠券
      • 互动-点赞
    • 直播拓展功能
      • 修改角色名称
      • 文件下载
      • 投屏演示
      • 虚拟人数
      • 观看权限校验
      • 直播间特色功能配置项
    • 观看回放
      • 观看回放/点播
    • 防录屏
      • 直播水印
      • 跑马灯
    • 字段说明
      • 房间消息字段说明
      • 聊天消息字段说明
      • 活动详情字段说明
    • 版本更新说明
      • 更新记录
      • v6.4.0
      • v6.3.0
      • v6.2.3
      • v6.2.1
      • v6.2.0
      • v6.1.0
      • v6.0.0
      • v5.0.0
      • v4.1.0
      • v4.0.0
      • v3.3.0
  • APP嵌入支付说明
    • 支付调起说明
    • Scheme规则说明
  1. 防录屏

跑马灯

保证直播的安全性,SDK 观看端支持生效防录屏跑马灯。

核心类#

类名类描述
VHWebinarInfo活动信息类
scrollTextInfo跑马灯信息

VHWebinarScrollTextInfo 跑马灯配置信息#

参数名称参数描述
webinar_id活动 id
color十六进制色值 如:#FFFFFF
text文本内容
scrolling_open是否开启跑马灯 1:开启 0:关闭
text_type文本显示格式,1:固定文本 2:固定文本+观看者 id 和昵称
alpha不透明度,如:60%不透明度,则属性值为 60
size字号
interval间隔时间,秒
speed滚屏速度 10000:慢 6000:中 3000:快
position显示位置 1:随机 2:上 3:中 4:下

.h 实现#

//文字跑马灯
#import <UIKit/UIKit.h>
#import <VHLiveSDK/VHWebinarInfo.h>
NS_ASSUME_NONNULL_BEGIN

@interface VHScrollTextView : UIView

//展示文字跑马灯
- (void)showScrollTextWithModel:(VHWebinarScrollTextInfo *)model;

//停止跑马灯
- (void)stopScrollText;

@end

NS_ASSUME_NONNULL_END

.m 实现#

#import "VHScrollTextView.h"
#import "VHLiveWeakTimer.h"
#import "Masonry.h"
#import <VHLiveSDK/VHallApi.h>
@interface VHScrollTextView ()
@property (nonatomic, strong) UILabel *scrollLabel;
@property (nonatomic, strong) VHWebinarScrollTextInfo *scrollTextInfo;     ///<跑马灯模型
@property (nonatomic, strong) NSTimer *timer;
@end

@implementation VHScrollTextView

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        self.userInteractionEnabled = NO;
    }
    return self;
}

///展示文字跑马灯
- (void)showScrollTextWithModel:(VHWebinarScrollTextInfo *)model {
    self.scrollTextInfo = model;
    if(model.scrolling_open == 0) {
        return;
    }

    BOOL repeats = model.interval > 0 ? YES : NO;
    self.timer = [VHLiveWeakTimer scheduledTimerWithTimeInterval:model.interval target:self selector:@selector(scrollAnimation) userInfo:nil repeats:repeats];
}

//文字滚动动画
- (void)scrollAnimation {
    UILabel *scrollLab = [[UILabel alloc] init];
    [self addSubview:scrollLab];
    scrollLab.alpha = self.scrollTextInfo.alpha / 100.0;
    scrollLab.font = [UIFont systemFontOfSize:self.scrollTextInfo.size];
    scrollLab.textColor = [UIModelTools colorWithHexString:self.scrollTextInfo.color];

    if(self.scrollTextInfo.text_type == 1) {
        scrollLab.text = self.scrollTextInfo.text;
    }else if (self.scrollTextInfo.text_type == 2) {
        scrollLab.text = [NSString stringWithFormat:@"%@-%@-%@",self.scrollTextInfo.text,[VHallApi currentUserID],[VHallApi currentUserNickName]];
    }
    CGSize labelSize = [scrollLab sizeThatFits:CGSizeZero];
    [self.superview layoutIfNeeded];

    [scrollLab mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self.mas_right);
        make.size.equalTo(@(labelSize));
        if(self.scrollTextInfo.position == 1) { //随机
            int random = arc4random() % 101;
            CGFloat top = (self.size.height - labelSize.height) * random / 100.0;
            make.top.equalTo(@(top));
        }else if (self.scrollTextInfo.position == 2) { //上
            make.top.equalTo(@(40));
        }else if (self.scrollTextInfo.position == 3) { //中
            make.centerY.equalTo(self);
        }else if (self.scrollTextInfo.position == 4) { //下
            make.bottom.equalTo(self).offset(-40);
        }
    }];

    NSTimeInterval second = self.scrollTextInfo.speed / 1000.0;

    [UIView animateWithDuration:second delay:0.1 options:UIViewAnimationOptionCurveLinear animations:^{
        scrollLab.transform = CGAffineTransformMakeTranslation(-(self.size.width + labelSize.width), 0);
    } completion:^(BOOL finished) {
        [scrollLab removeFromSuperview];
    }];
}

//停止跑马灯
- (void)stopScrollText {
    [self.timer invalidate];
    self.timer = nil;
}

@end

代码示例#

//播放连接成功
- (void)connectSucceed:(VHallMoviePlayer *)moviePlayer info:(NSDictionary *)info
{
    VHLog(@"播放连接成功:%@",info);
    if(self.moviePlayer.webinarInfo.scrollTextInfo.scrolling_open == 1) { //开启跑马灯

        VHScrollTextView *scrollTextView = [[VHScrollTextView alloc] init];
        [moviePlayer.moviePlayerView addSubview:scrollTextView];
        [scrollTextView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.edges.equalTo(moviePlayer.moviePlayerView);
        }];
        [scrollTextView showScrollTextWithModel:webinarInfo.scrollTextInfo];
    }
}
修改于 2025-05-27 11:59:31
上一页
观看回放
下一页
互动活动详情字段
Built with