美文网首页iOS Developer
iOS 大批量弹幕小论(粒子弹幕)

iOS 大批量弹幕小论(粒子弹幕)

作者: qiyer | 来源:发表于2017-07-24 11:28 被阅读0次

一、现状

如今直播类、视频播放器等基本都有弹幕模式。

为了保持性能和内存可控,基本是在初始化的时候生成一个Pool(Pool的容量是设定好的), 也就是利用重用机制(可以想象一下UITableView的重用机制,但是这个Pool和tableview机制略有不同)。每生成一个弹幕就丢到Pool里,当达到Pool最大容量时,就得等待,等待Pool里的某个弹幕A飞出屏幕外完成这一任务,然后再取 队列里的 弹幕任务, 赋于该 弹幕A新生。当弹幕量特别大的时候, 服务器 或是 客户端就不得 不对 队列的弹幕任务进行取舍,因为你没有办法处理那么多的弹幕。延迟太久,体验会太差。

二、实际需求问题

这时候你们的产品肯定不干了,为什么不能多显示点弹幕?不管你重叠还是什么,你得把弹幕尽最大可能展示出来,这样才能显示出这个房间 或是 视频的 人气么,要的就是弹幕炸屏效果!(程序员只能说臣妾做不到啊!弹幕多,会卡爆了!)

为了保持帧率,弹幕的最大量肯定是有上限的,那怎么突破上限而不影响性能呢?
楼主突发奇想,为啥子 粒子效果那么 炫,粒子那么多可以妥妥的展示而不影响性能呢?
我们是否可以把弹幕当成粒子呢?

三、解决方案设计

我们需要了解两个类,一个是 CAEmitterLayer ,一个是 CAEmitterCell 。
我们需要做的:

1.把弹幕背景 和 文字 转换成 CGImageRef 赋值给 CAEmitterCell ->contents
2.定时器,定时更换 CAEmitterLayer -> emitterCells 粒子源(弹幕)
3.协调好生命周期 ,CAEmitterCell->birthRate , CAEmitterCell->lifetime , CAEmitterCell->lifetimeRange , 以及你的定时器刷新周期。
4.CAEmitterCell一些生成位置什么的自己看了。

小结:楼主测试了下每秒1000个弹幕(纯随机数字弹幕,设备iphone 6 16G),妥妥的60fps 不掉帧,不过切换界面会有一点点卡顿,可以接受(可以在离开界面前关闭弹幕或是其它优化一下)。
有需求的朋友可以尝试尝试,反正我是用不到。(不过粒子弹幕缺点是,弹出去的弹幕如泼出去的水,是不可控的,没法监测碰撞 点击等事件)

相关文章

  • iOS 大批量弹幕小论(粒子弹幕)

    一、现状 如今直播类、视频播放器等基本都有弹幕模式。 为了保持性能和内存可控,基本是在初始化的时候生成一个Pool...

  • iOS 弹幕效果

    iOS 弹幕效果 iOS 弹幕效果

  • iOS弹幕

    随着90后的不断崛起,弹幕越来越受到年轻人的喜爱。所谓弹幕,我的理解就是评论的另一种表现形式,更能吸引用户眼球,增...

  • iOS 弹幕开发过程碰到的问题总结

    iOS 弹幕开发过程碰到的问题总结

  • Django+JQuery实现定时刷新局部页面

    简介 在做“弹幕弹幕”小程序管理员前端时,需要在页面上不断更新弹幕列表,方便管理员对弹幕进行审核。之前用flask...

  • iOS 简单实现按照轨道弹幕效果

    ios 铺满轨道弹幕效果实现 为避免重复造轮子,网上查找了两个弹幕效果 OCBarrage[https://git...

  • 实现一个弹幕墙APP

    弹幕墙APP点这里 功能: 实现发射弹幕、清除弹幕、显示弹幕功能。扩展: 用野狗实时后端云来存储弹幕数据。 按照 ...

  • iOS 弹幕效果

    项目中视频直播有个弹幕功能,网上也有很多弹幕的demo,之前忙于项目进度,没有细致研究其中是如何实现的。如今闲暇之...

  • iOS-弹幕

    这是一款可以快速集成,支持长连接不断传入数据的弹幕界面。 支持 pod 'LJBarrageView' 其中在UI...

  • ios弹幕解决😂

    最近一直在做直播方面的事情,在做弹幕的时候遇到了一些问题。后来找到了一个相当不错的解决方法,用野狗的SDK,?。废...

网友评论

    本文标题:iOS 大批量弹幕小论(粒子弹幕)

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