jabbany / CommentCoreLibrary

Javascript Live Comment (Danmaku) Engine Implementation. JS弹幕模块核心,提供从基本骨架到高级弹幕的支持。
http://jabbany.github.io/CommentCoreLibrary/demo
MIT License
1.91k stars 304 forks source link

canvas bas pr #87

Open esterTion opened 6 years ago

esterTion commented 6 years ago

感觉过了好久没在这边看过了

我去年年初的时候自己xjb写了个canvas,瞎改了改有了一个有些问题的版本(?) 其实有点合并进来的想法,但是刚才大概翻了下commit好像框架改了一些

一个问题就是我的实现不算是非常高性能,最初我是用全stage大小的画布的,但是觉得我电脑上全屏时性能不足结果换成了一个变高度的画布,然后分开了mode1和mode4 5 (具体看一下实现大概就能懂我在说什么了,av2615953 - P1) 另外我还看到过滤器已经变成内置了?(我还用的是自己实现的,更新的话估计就得迁移配置了)


然后就是bas,这个有实现的计划吗? 虽然总感觉现在弹幕站周围的开发圈都渐渐退了


大概就这么些吧,开始搞合并的话我可能就要很多的麻烦你了(逃)

jabbany commented 6 years ago

嗯,去年就发现了那个canvas版。其实基于CCL二次开发的canvas版实现有好几个。。。 要说CM框架其实应该没怎么改。主要增加了单弹幕的 factory 和 渲染器设置。这些应该更方便加一些新的渲染模式(比如canvas之类的)。

看了一下可变大小canvas实现挺高端!我猜是因为直接在大canvas上画图的话太大了可能硬件加速会失败,然后操作可能比较慢?我见过的别的用固定canvas舞台的主要是每个弹幕有一个绘图context缓存这个弹幕的信息,然后运行的时候直接copy到主舞台。不过其实canvas主要就是这种奇怪的case好多不好处理,不同设备也有一些奇怪的表现。

主库一直没加上canvas实现的主要问题是因为高度测量的边角case。目前那个measureText并不能给出字体高度,然后pixel height又不是很靠谱(中文的话应该还可以,别的复杂一些的字体和文字很容易坑)。第二点是自己需要处理换行啊之类的,略烦。据说 HTML5 Canvas Spec 要加字体高度信息了,应该会好不少。


BAS目前没有实现计划,毕竟 B站新的BAS也是基于JS写了个parser+把BAS给interpret成JS,技术上去重新搞没啥意思(坐等B站自己开源?)。由于CCL这个代码部分是插入的plugin,所以如果有人实现了也可以很容易的用。

其次是,我不是很喜欢他们的设计。新的BAS比原来代码语言灵活度差了很多,着重点还是在按钮之类的互动单元(对于CCL还原高级弹幕的目标没啥用)。而且没有解决任何原来语言的缺点(代码弹幕没法跟时间轴同步,效果无法硬件加速等等。这里一部分由第三方那个Akari库 解决 hack了一下的)。

长远上,CCL可能会采用类似的非eval自己parse的语言。新的语言应该还是基于 KagerouEngine 所以基本设计跟现在一样,是开web worker然后给host发指令。估计要是真的实现,只会做CCL自有的一个版本,专门面向解决高级弹幕的问题(感兴趣的话欢迎到 这里 填坑!)。至于是新的语言是否可以无转换包容 BAS 或者跟现在这个 biliscript 那样有足够程度的兼容性就不知道了。


PR随时都是欢迎的,不过这个库也是很老的码了,当初都是为了还原老B站播放器神弹幕的。现在大部分搞弹幕的都不太在乎高级弹幕,更不在乎代码弹幕。CCL 相比别的 API 长得比较现代的库来讲没什么优势(参考比如这种 )。恐怕搞了新的功能,大抵也没啥人会用 233333

jabbany commented 6 years ago

另外吐槽一下,明明BAS应该是“比以前安全”的脚本语言,毕竟整个语言都是自己写的解析器。但是看一下issues就能发现都是好多初级BUG和漏洞,完全没考虑过做好安全的,实在是无法直视。

esterTion commented 6 years ago

canvas相关的话 我电脑的显卡是比较烂的那种,所以放一个native分辨率的画布,基本上就需要占满全部gpu,并且背景还有视频在播放。大概就是24帧1080视频就只剩下36帧给canvas这样(我关弹幕开个1080@60fps视频,加速多少倍多出去的帧全会drop,渲染速度完全不够,勉强供给桌面这样) 所以我才会上变高度,因为全屏时候如果弹幕少就只有上面几行,不过一个小问题就是anchored永远在scroll上边 文本高度我直接设置为ceil(size+3)+2,size好像也是我自己加了一个缩放选项百分比操作后的所以这样,留一点描边和阴影的空间就直接画了。效果就是canvas比css多2-4px间距


自己写文本解析器不是应该坑最多了么ww 他自己发的那个bad apple卡的要死,每帧换文本效率不亚于css1 ccl

esterTion commented 6 years ago

浏览器绘图始终还是不行,现在给浏览器干的事情太多了,真的是根本忙不过来 pr什么的果然还是免了吧,想想那个修复merge的过程都头大,早期改的时候就没考虑合并瞎改

esterTion commented 6 years ago

另外dplayer我感觉是,目标是模仿yt,但是细节还没模仿到位,就会有一种很微妙的感觉 界面会让人有一种这里应该有这个功能的期望,但是没有实现,会形成一种落差

jabbany commented 6 years ago

哦对,BAS有这个实现(虽然已经不搞了):https://github.com/hozuki/sebas

jabbany commented 6 years ago

另外dplayer我感觉是,目标是模仿yt,但是细节还没模仿到位,就会有一种很微妙的感觉 界面会让人有一种这里应该有这个功能的期望,但是没有实现,会形成一种落差

好用就是啦~。。。我就不说有多少人问过 “欸,CCL怎么设置视频地址” 这种类的问题了。。。而且感觉比我那个为了demo CCL做得ABP强的还是(其实是先有的ABP。。)