canvas弹幕绘制纪实

Day 1 (Mar.4th)

这次改canvas绘制是直接在ccl的基础上添加,出来的成品是准备双模式兼容的

并且,按照一贯canvas绘制习惯,带高dpi优化

初版流程:直接fillText
起初倒是可以,但是在加描边的时候,因为strokeText效果不理想,换shadoeBlur的时候,直接卡飞了,经过google,学到了预渲染的方法可以解决shadow的高性能消耗
改动:使用canvas存储预渲染,此时另一人给我遇到了正反buffer渲染(先离屏渲染再copy防止闪屏)。这一点其实使用requestAnimationFrame的话基本上不会碰到,但我初次理解的时候理解错了,用了setInterval渲染离屏canvas而再rAF copy
在google的时候,看到一条drawImage里,绘制canvas转出来的data url比直接canvas快,于是换用了img存储预渲染

 

Day 2 (Mar.5th)

发觉了对正反buffer的认知错误后,取消了interval,直接在rAF里结尾copy
在尝试的时候,发现初始渲染会“阻塞”浏览器,然后使用了promise进行异步预渲染

 

Day 3 (Mar.6th)

在再一次的性能测试的时候,发现虽然draw data image比canvas快个0.02-0.05ms,但是toDataURL会卡5-30ms…纯属得不偿失。同时也发现promise异步并不能解决卡顿,因为原因是js单线程,而核心正在执行其他任务(toDataURL),所以也就无法高帧渲染。结果去掉了转img的过程,并且考虑到渲染还是要消耗大约2-5ms,所以添加了队列,每16ms(1/60s)中最大只消耗8ms用于预渲染,超出则等待下一帧

关于b站新弹幕格式.pb

格式为google protocol buffer (protobuf)

地址格式为{cid}-{part}.pb,每part包含3分钟的弹幕内容,即边播放边加载模式,如-3.pb包含第6-9分弹幕

在bilibiliPlayer.min.js中有大部分field id的定义,但文件中出现了id12-14

其中varint32为变长度int32格式,具体为每字节只有后7位存储数据,第1位为指示位,为1时继续读取下一字节

文件读取代码样本

 

水大佬的cdnvpn各种n都炸了

周一晚上的时候,突然间就发现高通打不开了,试了几下无果然后就去dns切回源站了

然后找大佬,表示整体出问题了,连带vpn也炸了QQ图片20170215235525

捣鼓了几下自己服务器上加了个服务,结果长城这司马的垃圾经常连不上,真的是整个人都醉的不行

后来再问大佬表示不准备再挂cdn了,就这样用吧

今天还试了一下东京机房,结果速度感觉并不好,还是决定不搬就放lax

SSD!SSD!

年过完了,买了个480g的ssd

哎呀科技真的是个好东西,电脑开机快多了

包括mac虚拟机,运行不卡,5秒挂起,怎一个爽字了得

后面又去了一下机械上的系统简直慢到不能忍受,仿佛要死了一般

IMG_4853-

 

假期就是填坑的季节

考完试了放假了,于是就开始填自己想了很久的坑了

首先是html5播放器,在不懈的魔改之下,已经被加了各种功能,什么websocket啊、进度条预览啊、弹幕屏蔽之类啊的

还没有实现右键菜单,这都是计划事项

今天从下午开始就在重写番剧数据的存储,之前是直接json,但是服务器小内存,打开个10M的json再decode一下就gg。光是设计二进制格式就整了快一小时,估计是c功夫不够。

以及还有一个天国的消息中心的坑还在放置

 


回家后找着水萌巨佬搞了个长宽专线加速vpn,巨佬就是不一样

腾讯视频c___key

写了两天

看到了某被无辜挂上去的源码后就动了心思,这两天到处翻文档,lua的,php的

起初只是使用string直接充当byteArray,但是后面发现局限性后引入了byteArray和byteArrayPtr类,于是之前的各种问题都解决了

听说腾讯这套变种tea enc从99年就开始在使用了

总之可喜可贺,可喜可贺

ckey


结果过了两天准备实际用的时候发现用不了……

闹心

继续一些关于ios编译的

在找到某个被挂出来的lua源之前,我准备自己整个lua调用一下bili.utility翻翻key的

win上打不开编译版本lua,搜后说是高低位不同导致

于是又打开了黑mac搞一搞编译

本来lua编译非常简单,把一堆c一起扔给编译器就可以出binary,然后codesign一下就可以跑了

此处强烈鄙视一下BigBoss那个lua(com.deltaman.lua),不codesign就往上扔真是好意思啊

问题在于第三方的c库,比如LuaSocket

首先需要启用动态载入,编译器定义常量LUA_USE_MACOSX或LUA_USE_LINUX好像都可以,此时lua需要-lreadline -lncurses

其次,编译第三方c库时必须不使用static链接

lua会报错“multiple Lua VMs detected”

所以需要先把lua下所有基础c一起,指定-dynamiclib输出liblua.dylib,然后

xcrun -sdk iphoneos clang -arch armv7 -L. -llua lua.c -o lua

然后编译第三方库的时候同理编译就可以出.so

image

后记:原本有所期待这个key会不会有点特权什么的,比如不限速,然而依旧是rate=400(默哀客户端用户)

我继续老实用player=1吧

gpt win7

捣鼓捣鼓可算是把硬盘换回gpt了

(然并卵,事实证明win7 gpt也没有卵用,并不会变快)

之前一只在修改boot.wim,后来感觉烦死了,于是拿来舍友的win10u盘直接复制install.wim进去改名install.esb重启efi启动,完事

于是就有win10的安装界面里面嵌着win7

某种意义上这样子比倒腾win7iso方便多了,还得弄驱动各种各样的,麻烦死了

IPv6 & DNS64 & NAT64

又开学了

回来用u2b的时候发现用了一年的dns6to4的服务器dns64.litnet.lt (2001:778::37)停了

google的dns6 (2001:4860:4860::8888)可以获取googlevideo.com的各种正常v6地址,但是以前用这个dns64的时候是有代理能力的,可以利用6to4 tunnel

找了找以前可用的另一个  2001:df8:0:7::1 也是timed out

最终翻到了一个 totd.aa.net.uk (2001:8b0:6464::1)可行

谨此记录,以供网络之需

 

后记:aa.net.uk也死了,起初只是dns死了,自己加后缀可以正常用,结果后来整个系统都unreachable了

万能的google帮我又挖出了一个:2001:67c:2b0::4

prefix 2001:67c:2b0:db32:0:1::/96

esterTion ( ͡° ͜ʖ ͡°)