iOS 视频直播弹幕的实现

  弹幕,并不是一个多么复杂的功能。

1.弹幕实现性分析

  首先,从视觉上明确当前弹幕所具有的功能

从屏幕右侧滑入左侧,直至完全消失

不管是长的弹幕,还是短的弹幕,速度一致(可能有的需求是依据弹幕长度,调整速度)

有弹幕轨道,不是随机产生的弹幕

弹幕不会进行重叠

  接下来从功能角度思考需要做什么

重用机制,类似tableView有一个重用池,每个弹幕就是一个cell,当有弹幕发送的时候,如果当前的重用池没有控件,则创建一个新的控件,如果重用池里面有控件,则拿出这个控件,开始做动画,在动画结束后重新将该控件重归重用池。

速度要求一致的话,需要考虑几点,首先如下图所示,红色代表弹幕起始位置蓝色代表弹幕终止位置,长度代表它们的实际长度。当我们设定动画的时候,采用[UIView animationWithDuration.....]这个动画,设定duration为3s的话那么弹幕1的速度为(屏幕宽度+弹幕1宽度)/3,弹幕2的速度为(屏幕宽度+弹幕2宽度)/3,因为弹幕2长度大于弹幕1的长度,所以弹幕2的速度大于弹幕1的速度。(对于依据弹幕长度调整速度的需求来说,这里相对简单一些,不需要专门去计算速度,唯一麻烦的是需要考虑速度不一致带来的重叠问题)

iOS 视频直播弹幕的实现

2.开始准备

  精通数学公式V=S/t (V代表速度,S代表路程,t代表时间)(*^__^*) 

3.正式开始

  创建一个View,命名为BarrageView,以及存储弹幕数据的对象BarrageModel

  以下为BarrageModel.h的内容,存储弹幕的头像,昵称,和消息内容

@interface BarrageModel : NSObject /** 用户昵称 */ @property(nonatomic,copy)NSString *userName; /** 消息内容 */ @property(nonatomic,copy)NSString *userMsg; /** 用户头像 */ @property(nonatomic,copy)NSString *userHeadImageUrl; @end

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpjpjf.html