本发明涉及弹幕推送技术,具体涉及一种弹幕排版方法及排版系统。
背景技术:
弹幕是指一种在观看视频时,大量以字幕形式呈现的评论与视频同在一个画面的现象。在视频上方大量飘过的评论如密集炮弹一般,故得名弹幕。弹幕会随着视频的播放实时在视频上呈现,这样观看者在观看该视频时能够看到其他观看者和自己发送的弹幕。
技术实现要素:
本发明提供一种弹幕排版方法及排版系统,易于弹幕观看,提高用户体验。
为实现上述目的,本发明提供一种弹幕排版方法,其特点是,该方法包含:
视频对应上传的弹幕组成该视频对应的弹幕列表;
视频播放时,取出弹幕列表中设定为当前时间段播放的当前弹幕进行渲染;
空间检测,若当前弹幕预设的显示路径未被占用,则在视频中加载显示该当前弹幕。
上述当前弹幕为顶部弹幕,则从弹幕显示空间的最上方向下开始检测;若弹幕显示空间中存在具有当前弹幕高度的空间,则将该当前弹幕安排在该空间进行显示。
上述当前弹幕为底部弹幕,则从弹幕显示空间的最下方向上开始检测;若弹幕显示空间中存在具有当前弹幕高度的空间,则将该当前弹幕安排在这块空间进行显示。
上述当前弹幕为滚动弹幕或逆向弹幕,从弹幕显示空间由上至下开始检测;
若弹幕显示空间中存在具有该当前弹幕高度的空间,则将当前弹幕安排在该空间进行显示;
若弹幕显示空间中具有该弹幕高度的空间已经被占据,就进行碰撞检测,若检测当前弹幕不会与占用其显示路径的占用弹幕发生碰撞,即显示当前弹幕,否则继续向下进行碰撞检测。
上述碰撞检测包含:若占据当前弹幕的显示路径的占用弹幕离开弹幕显示空间的边界时,当前弹幕还未到达占用弹幕所离开的弹幕显示空间的边界,则判定不会发生碰撞,当前弹幕即以匀速运动在弹幕显示空间显示。
由上至下检测完弹幕显示空间后,仍没有当前弹幕显示的空间,即将当前弹幕安排在正在渲染的弹幕列表最后一条弹幕后在进行空间判断。
上述弹幕包含:开始时间、持续时间、内容、模式和字号大小的信息。
视频播放时,每经过第一预设时间即判断弹幕列表中是否有当前时间段需要显示的弹幕;预设时间为一帧视频。
视频播放时,每经过第二预设时间即判断正在渲染的弹幕列表中是否有弹幕已超出其显示时间段,若弹幕已经超出其显示时间段则将其移出正在渲染的弹幕列表。
一种弹幕排版系统,其特点是,该系统包含:
弹幕编制模块,其将针对特定视频上传的弹幕按时间顺序组成该视频对应的弹幕列表;
弹幕渲染模块,其对当前时间段需要显示的当前弹幕列成列表并进行渲染;
显示空间判断模块,其判断当前弹幕的显示路径是否被占用,若否则显示该当前弹幕,若是则进行碰撞检测;碰撞检测结果为不会碰撞则显示当前弹幕。
本发明一种弹幕排版方法及排版系统和现有技术相比,其优点在于,本发明通过判断弹幕显示空间,合理安排弹幕的显示排布,易于用户观看弹幕,提高用户体验。
附图说明
图1为本发明一种弹幕排版方法的流程图。
具体实施方式
以下结合附图,进一步说明本发明的具体实施例。
如图1所示,为一种弹幕排版方法的实施例,该方法具体包含以下步骤:
S1、服务器接收用户针对特定视频对应上传的弹幕,将该些弹幕按时间顺序组成该视频对应的有序弹幕列表。每条弹幕包含:开始时间、持续时间、内容、模式和字号大小的信息。
弹幕模式分为四种:滚动弹幕、逆向弹幕、顶部弹幕和底部弹幕。其中滚动弹幕为从右向左自上而下多行排列匀速滚动;逆向弹幕为从左向右自上而下多行排列匀速滚动;顶部弹幕为自上而下多行排列静止;底部弹幕为自下而上多行排列静止;四种模式的弹幕都匀速滚动或静止一段时间后移除弹幕。滚动弹幕、逆向弹幕、顶部弹幕和底部弹幕的排版空间相互独立。
S2、用户端播放视频时,服务器取出该视频对应的有序弹幕列表,并对有序弹幕列表中设定为当前时间段播放的当前弹幕进行渲染。
具体的,服务器在视频播放的每一帧(通常每一帧为1/60秒)都进行一次判断,判断有序弹幕列表中是否有预设为当前时间段进行显示的当前弹幕,若是则取出该当前弹幕进行渲染,若否则跳转回S2,继续判断。
S3、弹幕预渲染。首先,将当前弹幕预渲染到内存,得到渲染后的宽高,若超出弹幕显示空间的宽高,则直接丢弃,若未超出弹幕显示空间的宽搞,则判定该弹幕可显示,并对该弹幕进行渲染,进行空间检测后加入到弹幕显示空间。弹幕显示空间是指在例如浏览器页面或播放软件等视频播放界面中一块用于显示弹幕的x*y像素的矩形区域,其中x*y不是一个固定值。若需显示的当前弹幕的字体大小超过该弹幕显示空间的长宽范围,则系统判定不对该弹幕进行渲染和显示。
S4、弹幕空间检测,若当前弹幕预设的显示路径未被占用,则在视频中加载显示该当前弹幕。 具体有以下情况:
1)若当前弹幕为顶部弹幕,则从弹幕显示空间的最上方向下开始检测;若弹幕显示空间中存在具有当前弹幕高度的空间,则将该当前弹幕安排在该空间,将该当前弹幕加入正在渲染的弹幕列表中最先进行显示的位置(列表尾部),并随后在弹幕显示空间进行显示。
2)若当前弹幕为底部弹幕,则从弹幕显示空间的最下方向上开始检测;若弹幕显示空间中存在具有当前弹幕高度的空间,则将该当前弹幕安排在这块空间,将该当前弹幕加入正在渲染的弹幕列表中最先进行显示的位置(列表尾部),并随后在弹幕显示空间进行显示。
3)若当前弹幕为滚动弹幕或逆向弹幕,从弹幕显示空间由上至下开始检测。若弹幕显示空间中存在具有该当前弹幕高度的空间,则将当前弹幕安排在该空间进行显示。
4)若上述顶部弹幕、底部弹幕滚动弹幕或逆向弹幕的弹幕显示空间中具有该弹幕高度的空间已经被占用,就进行碰撞检测,若检测当前弹幕不会与占用其显示路径的占用弹幕发生碰撞,即显示当前弹幕,否则继续向下进行碰撞检测。其中,碰撞检测具体包含以下流程:
步骤a、设占据当前弹幕的显示路径的占用弹幕自开始碰撞检测起离开屏幕(占用弹幕整体离开屏幕边线)的时间t1,当前弹幕自开始碰撞检测起到达屏幕中央(当前弹幕的中线与屏幕中线重合)的时间t2;判断t1是否大于t2。
若是,满足t1>t2,占据当前弹幕的显示路径的占用弹幕离开弹幕显示空间的边界时,当前弹幕还未到达占用弹幕所离开的弹幕显示空间的边界,则判定不会发生碰撞,即占用弹幕在离开弹幕显示空间之前都不会与当前弹幕的内容造成重叠现象,碰撞检测完成,对当前弹幕进行渲染后以匀速运动在弹幕显示空间显示当前弹幕。
若否,t1<t2,则跳转到步骤b。
步骤b、若由上至下检测完弹幕显示空间后,弹幕一直由于判定为可能碰撞,仍没有当前弹幕显示的空间,没有位置可供显示,即将当前弹幕安排在正在渲染的弹幕列表最后一条弹幕后再进行空间判断。跳转到步骤c。
步骤c、如果最后一条弹幕之后仍然没有当前弹幕显示的空间,弹幕会造成碰撞,即判断弹幕是否为必要显示的弹幕。
若是,该当前弹幕为必要显示的弹幕,则忽略之前的检测,从弹幕容器最上方的位置开始重新进行碰撞检测,直到有位置插入容器为止。,这种做法会造成弹幕碰撞,即内容会覆盖在之前的弹幕上,但也保持原有的规律。
若否,该当前弹幕为非必要显示的弹幕,则从弹幕渲染列表中移除该弹幕。
进一步的,视频播放时,每经过一帧(1/60秒)都进行一个判断:如果正在渲染的弹幕列表中的弹幕已经超出其显示时间,则移除该弹幕,并将其移出正在渲染的弹幕列表。
本发明还公开了一种弹幕排版系统,该系统包含:弹幕编制模块、连接弹幕编制模块输出端的弹幕渲染模块和连接弹幕渲染模块输出端的显示空间判断模块;显示空间判断模块输出端连接外接的弹幕输出控制系统。
弹幕编制模块用于将针对特定视频上传的弹幕按时间顺序组成该视频对应的弹幕列表。
弹幕渲染模块用于对当前时间段需要显示的当前弹幕列成列表并进行渲染。
显示空间判断模块用于实行上述弹幕排版方法中S4弹幕空间检测的方法流程。判断当前弹幕的显示路径是否被占用,若否则下达显示该当前弹幕的指令,若是则进行碰撞检测;碰撞检测结果为不会碰撞则下达显示当前弹幕的指令,若判定会发生碰撞则移除该弹幕。
尽管本发明的内容已经通过上述优选实施例作了详细介绍,但应当认识到上述的描述不应被认为是对本发明的限制。在本领域技术人员阅读了上述内容后,对于本发明的多种修改和替代都将是显而易见的。因此,本发明的保护范围应由所附的权利要求来限定。