这是KikoPlay的第一篇博客文章。
KikoPlay 0.5.0在5.2之前就已经发布,但现在有了博客,趁我还没忘,就简单记录一下这个版本的内容吧。
一切更新的动力基本来自于我的个人需求,0.5.0实际上是一个比较重要的版本,程序结构变化非常大,主要有以下几方面:
-
弹幕池结构重构
这是一个相当大的改动,最初的想法是在我使用网页观看列表里的视频时产生的。KikoPlay有个很方便的
更新弹幕
功能,以增量的方式更新现有弹幕池,添加更多弹幕。当使用网页端观看几天前下载的动画时,我也希望能增加一个更新按钮,避免到PC端上更新。不过,现有的结构在支持这个功能时遇到了麻烦:如果PC端也在播放相同的动画或者在更新这个弹幕池时,远程请求更新后,可能会出现数据不一致的情况。此外,如果有多个网页端请求更新相同的弹幕池,同样会遇到麻烦。针对以上问题,本次更新重新设计了弹幕池结构,每个弹幕池都有一个单独的Pool类,所有针对池的写方法(包括添加来源,更新,修改延迟等等)都改为互斥方法,这样就保证了数据的一致性,同时之前很多难以实现的功能也变得容易了,比如直接在播放列表里添加弹幕、更新弹幕等等。弹幕管理器也因此得到了改进,统计弹幕数量这个费时的操作只需在第一次打开时执行一次。
-
弹幕渲染性能提升
自从0.2.2以来,弹幕渲染部分就没有变过了。之前就是直接在update事件中依次绘制每条弹幕,但实际上这里还有提升的空间。本次更新主要改进了两部分:
- 由逐条渲染改为批量渲染。使用sampler2D数组设置多个纹理,在一次绘制中最多可设置16个纹理,因此至少能绘制16条弹幕,这需要OpenGL版本>4。
- 纹理合并。之前都是逐条生成弹幕纹理,现在每个缓存列表中的弹幕的纹理都会生成到一个纹理图中,这样一次就能绘制更多弹幕。
通过以上改进,弹幕渲染性能得到了进一步的提升,直观上弹幕会更加流畅
-
截图收藏
这也是个比较有用的功能,观看动画时如果遇到一些比较有趣的画面,双击Alt键即可截图并收藏到资料库中,以后可随时从资料库里保存或者分享这些图片。
-
弹幕时间轴复制粘贴
这个功能来自实际需求。比如我们添加了多个弹幕来源,这些弹幕来源都没有Op之后的10提供画面,之前需要挨个设置弹幕时间轴,但现在只需为一个来源设置时间轴,之后直接复制粘贴到其他来源即可。
-
Android局域网客户端发布
网页端在弹幕较多时会比较卡顿,在某些移动设备上尤为明显,为了更好的观看体验,我开发了一个简单的Android客户端,使用了bilibili开源的弹幕引擎和exoplayer2,观看体验远超网页端,同时增加了更新弹幕按钮,在Android 6.0、8.0和9.0上测试通过。不过,解码能力和具体的设备有关,推荐使用mp4格式的视频。
-
现在支持其他系统了!
KikoPlay本身是基于Qt的,同时依赖的库(libmpv等等)也都是跨平台的,理论上来说是可以跨平台的,但是之前使用了一些包括Windows窗口API在内的东西,导致没办法在其他系统上编译运行。现在为其他平台增加了一些条件编译内容,KikoPlay可以跨平台了!目前在Ubuntu 18.04下编译测试通过,其他平台可自行测试。不过在Windows之外的平台上:
- 在巴哈姆特上搜索弹幕时要用繁体中文,Windows上会通过Windows API将简体转换为繁体
- 窗口顶置功能失效
新版本及Android端均可在百度网盘上下载