Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

canvas bas pr #87

Open
esterTion opened this issue Jan 26, 2018 · 7 comments
Open

canvas bas pr #87

esterTion opened this issue Jan 26, 2018 · 7 comments

Comments

@esterTion
Copy link

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

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

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


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


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

@jabbany
Copy link
Owner

jabbany commented Jan 27, 2018

嗯,去年就发现了那个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
Copy link
Owner

jabbany commented Jan 27, 2018

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

@esterTion
Copy link
Author

esterTion commented Jan 27, 2018

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
Copy link
Author

esterTion commented Jan 27, 2018

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

@esterTion
Copy link
Author

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

@jabbany
Copy link
Owner

jabbany commented Jan 27, 2018

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

@jabbany
Copy link
Owner

jabbany commented Jan 27, 2018

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants