美文网首页iOS UI相关
iOS端弹幕相关调研

iOS端弹幕相关调研

作者: BangRaJun | 来源:发表于2021-01-31 23:40 被阅读0次

    目前主流的视频网站均支持了弹幕功能,调研了一下移动端弹幕实现的主要方向,B站貌似提供了DanmakuFlame框架,但不知道为什么我在Github上没有找到对应的iOS版本。
    我在Github上查看到的最全面的框架是:BarrageRenderer
    我在开发自己的弹幕框架时有些标准参考了这个框架,最终进行性能对比的测试也是与这个框架进行了对比。虽然这个框架的完成度已经比较高了,但我认为还有一些值得优化的点。

    框架的主要构成

    • 目前主流的实现一般采用 播放器->轨道->弹幕 这样的三层结构划分弹幕框架,使用时将弹幕信息传入播放器,播放器分配轨道,轨道播放弹幕。

    • 在我自己的实现中增加了几个部件,这个结构变成了:播放器->轨道组->分发器->轨道控制器->轨道->弹幕。

    • 新增了轨道组、分发器、轨道控制器三个角色来提供更多样丰富的功能。

    技术选择

    根据我的调研结果,iOS端目前实现弹幕的动画手段有UIViewAnimation和CADisplayLink两种,根据我个人的主观意志对比一下优劣:

    A.UIViewAnimation:
    优点:
    1.调用简单,直接规定初末状态就可以实现。
    2.据说CoreAnimation执行的效率比直接使用CADisplayLink要好(我自己没有证实过)。
    缺点:
    1.无法规定弹幕轨迹,对弹幕运动的细节缺少控制,因此这种实现方式能实现的弹幕形态比较单一。
    2.貌似只有UIView会有animatedWith接口,不能使用CALayer,这可能会导致它的性能瓶颈比CADisplayLink略低一些(这个与优点的2不冲突,优点2的对比条件应该是两种都使用UIView做动画)。
    3.如果你希望视频暂停是弹幕停在屏幕中不动,UIViewAnimation可能做不到。

    B.CADisplayLink
    优点:
    1.可以定义弹幕动画的任意一处细节,同样是从A点移动到B点,CADisplayLink可以定义曲线,而UIViewAnimation只能定义直线(也可能有方法我不知道)。
    2.CADisplayLink不依赖UI组件,所以弹幕的变化可以不局限于UI变化,甚至可以在变化中不断更换Model或者文案。
    缺点:
    1.实现起来确实没有UIAnimationView容易。

    总之,UIViewAnimation是一套快捷简便的方案,但支持的弹幕种类、弹幕控制方面有一定局限;CADisplayLink则必定伴随一套大而全的弹幕机制,其提供的回报也是丰富的,我们可以精准控制到弹幕播放中的每一处细节。
    结论:不论使用哪种方式,表现给使用者的便捷性和拓展性都应当是一致的,所择CAdisplayLink来实现能提供能丰富的功能,至于实现复杂性,Frame就是为了解决这些复杂性存在的。

    附上自身实现的一个弹幕组件:
    LNDanmakuMaster

    相关文章

      网友评论

        本文标题:iOS端弹幕相关调研

        本文链接:https://www.haomeiwen.com/subject/loittltx.html