iOS直播聊天室弹幕实现

融云提供一个直播聊天室弹幕功能的实现,开发者可以直接使用或者在此基础上进行修改,最后附上源码

特性:

支持的弹幕动画方式:从右往左(默认)、中间靠上,中间靠下,特殊位置;开发者可以根据需求来设置弹幕动画方式

支持两种弹幕的加载方式:过量加载和缓存加载,支持两种状态热切换(通过修改RCDDanmakuManager的isAllowOverLoad的值)

过量加载:该方式没有做弹幕的碰撞检测,所有的弹幕立即发送,如果聊天室消息过多那么就会出现弹幕铺天盖地的效果

缓存加载:该方式做了碰撞检测,页面同一时间只会出现特定个数的弹幕,如果聊天室中消息过多,那么弹幕就会被缓存下来,等到前面的弹幕播放完毕之后才会播放缓存的弹幕

不支持按照时间点播放弹幕

额外功能:

调用UIVIew+RCDDanmaku的sendDanmaku方法,弹幕即开始发送,支持弹幕暂停、恢复、停止等操作

弹幕功能模块包含以下4个类:

RCDDanmaku:弹幕类,包含弹幕内容和弹幕动画类型

RCDDanmakuInfo:弹幕信息类,包含一个弹幕,该弹幕的剩余动画时间,该弹幕所处的弹道(开发者不需要直接操作该类)

RCDDanmakuManager:弹幕管理类,设置弹幕间的间距,弹幕的动画时间,弹幕的缓存等数据(可以直接在.m中修改)

UIVIew+RCDDanmaku:UIview的类扩展,可以使用这个类扩展直接给视频直播的view发送弹幕,在直播聊天页面直接导入该类即可

开发者需要做的是:

1、设置RCDDanmakuManager里面弹幕的各种配置(源码里面有默认配置,如果有不同的需求,可以直接更改)

2、当收到弹幕消息的时候手动创建一个RCDDanmaku对象

3、调用UIVIew+RCDDanmaku的sendDanmaku方法发送弹幕

注:

1、可调用UIVIew+RCDDanmaku的方法对弹幕进行暂停、恢复等功能

2、每次退出页面,必须调用UIVIew+RCDDanmaku的stopDanmaku方法停止弹幕,否则会影响下次弹幕的播放

代码实现:

直播页面导入UIVIew+RCDDanmaku,使用视频所在的view来调用下面的方法,下面的代码可以在demo中找到

1、发送弹幕:

发送一个普通的纯文本弹幕可以参考下面的代码

//弹幕文本

NSString *str = @“这波很强势!”;

//弹幕label

UILabel *label = [[UILabel alloc]init];

label.attributedText = [[NSAttributedString alloc]initWithString:str attributes:@{NSForegroundColorAttributeName : [UIColor redColor]}];

[label sizeToFit];//确定弹幕label的尺寸

label.backgroundColor = [UIColor clearColor];//清空背景色

//创建一个弹幕对象

RCDDanmaku *danmaku = [[RCDDanmaku alloc]init];

//将弹幕的动画view赋值

danmaku.playView = label;

//设置弹幕为居中靠上的动画方法(不设置默认为从右往左动画)

danmaku.position = RCDDanmakuPositionCenterTop;

//发送弹幕

[self.view sendDanmaku:danmaku];

发送一个比较复杂的弹幕,比说说有文本有图片,可以参考下面代码

//创建一个自定义弹幕view(RCDGiftDanmakuView可以参考demo的实现)

UIView *backView = [RCDGiftDanmakuView giftDanmakuViewWithText:@“壕送出了一个” withImageName:@“clap”];

//创建一个弹幕对象

RCDDanmaku *danmaku = [[RCDDanmaku alloc]init];

//将弹幕的动画view赋值,默认从右往左的动画

danmaku.playView = backView;

//发送中心点在(200,200)的弹幕,持续时间有RCDDanmakuManager的specialDuration控制

[self.view sendDanmaku:danmaku atCenterPoint:CGPointMake(200, 200)];

2、暂停弹幕:

[self.view pauseDanmaku];

3、恢复弹幕:

[self.view resumeDanmaku];

4、停止弹幕:(每次退出直播页面都必须调用这个方法)

[self.view stopDanmaku];

5、切换弹幕加载方法:(可以随时调用该方法切换弹幕加载方式,调用之后,之前设置的弹幕还会以旧方式加载,后续的弹幕会改变加载方式)

RCDanmakuManager.isAllowOverLoad = YES;

最后附上demo

DanMuDemo_new.zip