ytp弹幕算法说明.PDFVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ytp 弹幕算法说明 ytp 弹幕算法说明 0 前言 本文只讨论整体的思想,不会涉及详细的代码实现,毕竟写代码是最基础的东西,重要的还是设计一个 好的模型,以后扩展起来也方便。 全文没有检查错别字,而且我自己写完以后也没有复看一遍,如果有错误或错别字的话还请谅解。 这里讨论的只是最基本的,也是最核心的弹幕效果。至于扩展之类的,如支持脚本,甚至支持 srt 字幕格 式之类的,在这里不会讨论。其实要实现较好的扩展性,一个好的数据结构和框架是必不可少的。这篇 文章所说明的算法在我看来应该还是比较容易扩展的,至少我现在想到的扩展都能比较容易地实现。 与本文对应的 ytp 的项目地址是 / ,源代码也在这上面。在写这篇文的时候SVN 源 码的版本是 73 ,但这个版本里面的算法和数据结构以及程序框架都是我一点一点慢慢实现起来的,组织 结构很乱,我也懒得去重写一遍了。这篇文章可以算是把程序框架重写了一遍吧,毕竟看这篇文章要比 去看那些代码更容易整个算法。 1 算法整体过程 首先将屏幕划分为不同的通道, 然后按照时间顺序为每一个弹幕 分配通道,在分配通道的时候需 要计算弹幕所使用的通道会不会 和其他弹幕使用的通道相冲突。 弹幕分配到通道以后,就将通道 信息保存起来,然后将弹幕交由 弹幕显示函数处理。弹幕显示函 数根据弹幕类型和弹幕时间对弹 幕应用动画效果。过程可以参考 右图。 2 通道分配 2.1 通道划分 为了方便后期计算通道冲突,我 们就将每一行像素作为一个通道 , 于是整个播放屏幕的通道数就是 视频的高度。如果视频的高度是 600 ,那么我们就有600 个通 道。为了便于说明,我们还要给 通道进行编号,编号从上到下, 第一行是 1 号,第二行是 2 号,以此类推。 因为一个弹幕占据一行的高度不可能只有一个像素,所以一个弹幕将会占用多个连续的通道。具体占用 -1- ytp 弹幕算法说明 多少个像素,由弹幕的字体大小决定。如果一个弹幕的字体大小是 16px ,那么这个弹幕就要占用16 个 通道。 2.2 记录弹幕占用的通道范围 我们要计算弹幕占用的通道是否互相冲突,于是就要保存每个弹幕占用的通道。因为弹幕的字体大小是 固定的,所以我们只要记录弹幕占用的最小通道编号就可以了。假设一个弹幕占用的最小通道数是 n ,弹 幕字体大小为 s ,那么这个弹幕占用的通道范围就是 :[n, n+s-1],也就是n 号通道到 n+s-1 号通道。 为了方便计算通道冲突,我们需要保存每个通道被占用的情况 ,这可以利用一个二维数组来实现。定义 一个数组 channel_used[channel_id, poptext_list],第一个数据项是通道编号,第二个数据项保存占 用了这个通道的弹幕编号列表。图示如下。 3 弹幕管理 一般在播放器加载影片的时候,需要同时从服务器中获取对应影片的弹幕列表 ,并将这些弹幕管理起来 , 方便调用。显然,我们应该用一个数组来保存弹幕数据。为了方便查找弹幕,我们把弹幕按照弹出时间 (弹幕出现在屏幕上时影片播放的时间 )升序排列。 为了方便管理,我们还应该给每个弹幕指定一个唯一的编号,我们可以直接使用弹幕在数据库中的编号 作为弹幕的编号,这样就不必为每一个弹幕生成一个编号了。 设置一个名为 poptext_list 的一维数组,用来保存弹幕列表。 3.1 插入弹幕 用户在发表一个新的弹幕时,这个弹幕必须立即显示到影片上,这就要求我们立刻把这个弹幕插入到弹 幕列表中。因为弹幕列表已经是顺序排列的了,我们可以使用二分法在 l o g n  的时间复杂度内找到 2 弹幕应该插入的位置 ,然后就可以直接插入弹幕了。 应用弹幕动画 设置一个变量next_poptext_index ,指示下一个应该被显示的弹幕在数组中的下标。在播放器刚刚载入 -2-

文档评论(0)

***** + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档