iOS上直播弹幕的一种实现

一、弹幕简介

所谓弹幕,就是评论的一种表现形式,更能吸引用户眼球,增强用户体验,增加用户参与感和使用粘度。用户可以在观看内容(视频为主)的同时查看其他人对这个视频的评论,而不需要找到对应的评论区查看。现在视频网站基本都已经实现了弹幕,深受年轻用户的追捧和喜爱。

弹幕分类有很多种,PC上比较常见的一种弹幕是从屏幕右侧进入并从屏幕左侧飞出,全屏弹幕能造成一种比较“震撼”的感觉。在手机上,有很多产品和场景也采用相同方式。但是受屏幕大小限制,可能另一种弹幕方式更常见常见,例如过重直播软件中,弹幕通常出现在弹幕的左下角的固定区域,从下往上出现。

日迹播放场景中,视频评论也是以弹幕的方式在视频的左下角出现,其形式更像是将评论逐一展示出来。下面详细分析下日迹场景弹幕的实现方式。

二、弹幕分析

日迹弹幕总体可以划分成三个部分:评论数据、展现形式、滚动方式。

评论数据模块,包括拉取逻辑,这个部分跟业务比较相关。评论的数据,来自用户对日迹的评论,目前来看,评论数据是纯文本,比较简单。拉取逻辑也相对比较简单,就不详细说明。

日迹弹幕的展现形式比较简单,只是展示纯文本,没有比较复杂的展现形式的动画。当然,设计弹幕方案的时候,考虑到产品形态的变更,后期弹幕展示需要变得丰富,或者展示图片之类的,现在设计的系统也要能够支持快速变更和迭代。

日迹的滚动经过了两个版本的调整,第一个版本匀速滚动,第二个版本是评论逐条滚动,滚动到最后一条,停止滚动,然后动画渐隐消失。整体来讲,也只是调整滚动速度等。

弹幕开始滚动的前提是已经拉到评论数据,因此,弹幕的启动是由数据来驱动的。弹幕这里的整体设计思想,想使整套实现能够实现定制化。因此,这三个部分需要以一种比较灵活的方式组合在一起。

上图是整体设计思路,将滚动方式、展示形式和数据模块分成三个部分。

1、QAutoRollTableView本质是个tableview,这个类本身只关注滚动逻辑,比方说滚动频率,幅度等,还有一个功能就是提供一套接口控制滚动的启动和暂停,供调用方式用。其tableview的DataSource由QAutoRollDataSource来提供。

2、QAutoRollDataSource作为tableview的数据源,可以指定每个cell的展示样式。这个类本身可以被各个业务继承过去,然后根据业务需要指定cell样式。其内部还会持有维护一个很重要的类,QAutoRollDataModel ,由这个model提供弹幕需要展示的数据。

3、弹幕数据由QAutoRollDataModel提供,这个model目前来讲,只是提供一些接口,各个业务可以自己继承过去,做业务自己的逻辑。dataModel拉取到数据后,通过delegate反向驱动tableView开始刷新滚动。

三、弹幕实现

       1、QAutoRollTableView 下图给的就是滚动弹幕的tableview接口,接口作用如图中注释。

        2、QAutoRollDataSource 初始化需要制定一个dataModel,由dataModel来提供弹幕数据,和驱动力。这个对象本身需要只需要制定每个cell的样式和展示逻辑即可。

3、dataModel本身就相对简单,只需要关注业务本身的拉取逻辑即可。准备好数据后,需要通过delegate通知到tableview,开始滚动

日迹的弹幕提供了一个通用的显示纯文本的弹幕控件,下图中cellForRow方法由 QAutoRollTableTextDataSource提供,指定纯文本显示。

以上是我在做日迹需求中实现弹幕的一套方案,写的比较仓促,接口设计上,可能不是很友好,希望大家批评指正。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

揭秘:针对PoS机的恶意软件工具箱

最近两年,PoS恶意软件由于塔吉特、家得宝、Kmart遭遇的POS机攻击而被广泛关注。随着“黑色星期五”购物季的到来,PoS机恶意软件必定会受到关注。 PoS攻...

1757
来自专栏FreeBuf

拒绝成为免费劳动力:检测含有挖矿脚本的WiFi热点

前几日看到一则新闻,一家星巴克店内无线网络被发现植入了恶意代码,劫持网络流量利用用户设备挖掘门罗币(XMR)。 ? 与加密货币相关的安全事件总是引人注目,我们除...

1925
来自专栏安恒信息

研究人员发现伪装在Github上的比特币窃取木马

最近出现了名为CoinThief针对Mac用户的 Bitcoin窃取木马,已发现的几个下载网站如CNET的Download.com和MacUpda...

3398
来自专栏FreeBuf

利用Google爬虫DDoS任意网站

作者 Taskiller 提醒:以下内容仅供安全测试及教学参考,禁止任何非法用途 Google的FeedFetcher爬虫会将spreadsheet的=imag...

2177
来自专栏一个番茄说

iOS 开发安全那些事儿

​ 随着移动互联网的普及,被越来越多的心怀不轨的人觊觎,也越来越多的安全问题暴露了出来。开发者开发出来的应用被安装在设备上之后,用户并不具有专业的安全知识。...

773
来自专栏BestSDK

Zenedge随原生SDK一起发布API安全解决方案

网络安全提供商Zenedge的主营业务包括AI驱动的Web应用防火墙、恶意机器人检测以及机器人管理服务,这家公司近期为web和移动设备随原生SDK一起发布了AP...

2945
来自专栏安恒信息

域名劫持事件频发 网站安全形势不容忽视

  6月26日消息,近日,安恒信息风暴中心在日常监测中发现了多起国内网站域名解析地址跳转至美国或加拿大等国外IP的情况。安恒信息风暴中心对此异常行为进行深入分析...

3646
来自专栏FreeBuf

Java反序列化危机已过,这次来的是.Net反序列化漏洞

2016 年 Java 应用程序及开发者受到反序列化漏洞的破坏性影响,而如今 .NET 生态系统也正在遭受同样的危机。新的问题存在于 .NET 代码库中处理反序...

3004
来自专栏企鹅号快讯

你的密码被破解了?看看你的Apple ID、邮箱密码是不是这些!

今天小沃本来想买元旦的车票来着,结果发现密码忘了,在输入两次错误以后,为了防止账户冻结选择了重新设置密码。卖票的 App 还不让设置太简单的密码,本来还想吐槽整...

1896
来自专栏FreeBuf

又见古老的Typosquatting攻击:这次入侵了Npm窃取开发者身份凭证

有些攻击方式虽然听起来很幼稚,但有时候却也可以生效,比如typosquatting攻击——我们上次看到这种攻击是在去年6月份,这本身也是种很古老的攻击方式。 所...

3404

扫码关注云+社区