整理一下自己的程序猿生涯

其实也不知道为什么想写这个,就是看历史的东西突然想写一个这样的记录,来看看自己都弄过什么东西


2014

  • 开始接触代码,完成了下载脚本bdown(已大体废弃),和客户端缓存转码合并脚本bili

image

(那年暑假入了b站,在家ipod4能正常用最新的b站客户端,但是学校里拿的ipod3 5.1.1只能用一个特别老的,13年的版本,由此开始写代码)

  • 11月,原Tundra开发维护的BiliPlus停止服务并开源,拿了一份挂在了一个php空间上,但再未管理过网站

(算下来搭建bp比bdown早,因为早期的需求只是客户端解码flv极卡,后来无法忍受客户端的缓存bug开始自己写下载)

2015

  • 4月,把初期bp的代码进行了一些改进,因为有写bdown的经验对主流解析都比较了解。同时遇到了几位至今也在互换情报的重要好友,包括@张一环 等等各路大佬

image

(此时已是临近高考,我却每周末回去一直在搞这东西()

【那个暑假已经忘了写过什么了,主体应该就是半自学php改bp】

(当时主力机5s已因作死移动/usr/libexec到stash而入狱。妈的这个目录以前一直是没有问题的,为什么突然就死了。也正因此才会想要去剖析出softwareVersionExternalIdentifier的用途)

2016

  • 1月,爬丝沿着当初我的乐视云api解析贴找到了我,两人相聊甚欢。当时我也是认识pass的,毕竟是不二压大佬了,letv2pass我也用过传了几个视频
  • 3月,进行了一场利用收藏夹的视频全扫(现已不可行),并把数据放置服务器作aid搜索库
  • 同月,和pass第一次面基,俩人都在沈阳,相性也不错
  • 4月,源自一次偶然的github闲逛,发现了一个b站的隐藏的,分发用api(已在兽娘之后死亡),同样开了一批采集并添加了cid信息库
  • 10月,京吹时因为独特的港台直看功能,加上某个zz在3k眼前跳,然后yk就来恶心人了一阵。

(这个事其实早期也是自己想趁此火一批,当时把默认播放器改成了带跨区功能的。因为这个之后就换成了限制了)

  • 11月,借着flv.js,开始写扩展以进行更方便的“播放”,同时结识了xqq

2017

  • 2月,改动flvjs,添加了实时码率,同月改动主站abplayer,完成了一个直播html5猴子(半个月后官方html5上线测试)
  • 3月,改动CCL添加canvas绘制,触坑无数
  • 同月月底,本是想装逼一番,搞了b的兽娘12(每集大约下午5点上传,晚上25:30网络放送),结果因壁吧群里不知名的二五仔把忘记撤回的两张图片传遍全网。所幸仅仅只有两张不能说明什么的图片,同时传开时距离tv放送只剩20多分钟,没有造成太大影响。不过因此相当一批相关的接口就死了(细究还是对不住b站的伙计,要是那天我是下午六点去搞的话,估计就不会这么清淡了)
  • 4月,鉴于本季某苣的火热,@ipcjs 的猴子同样一举成名,于是顺手给api添加了跨域权限,并帮着改动了很多地方(直接把同步blocking大改成全异步了)
  • 5月,将臆想多时的分段mp4支持完成了并加到了flv.js中。同月,本着好不容易写出一个功能,不能荒废的原则,完成了优酷html5扩展(一个月后官方html5上线测试)

To be continued…

隔了很久又一次换服务器

其实us算是很稳定了,如果我不是联通用户的话

我也不知道联通在抽什么风,你说我一个us服务器,怎么就走到eu了呢

image

(如果我还在用移动大概不会管,没错我就是这种我的没坏就懒得动的人)

想了想换了个jp服务器,正好也可以用来看一些地区限制pv(きららファンタジア之类的)

不清楚假期回家的话移动连接是什么效果,联通jp倒是直连

在lcz大佬的博客说几句about biliplus……

大家好,我是爬丝,对,那个傻逼爬丝~
在加拿大的最后一天,此时是下午,闲的没事,就想把之前想说的话都说出来,想了半天,还是在lcz大佬的博客写吧~

其实吧,我是15年知道的biliplus,之前知道的都是jj啊还有一些现在的新人都不知道的解析网站。

曾经硕鼠都用过几年(现在基本都属于半死不活的状态),所以在16年中,因为乐视黑科技的问题,lcz大佬在b吧发了乐视云的解析相关信息,我们当时已经在后乐视时期成立了新的 B站胡乱瞎搞黑名单开发小组,简称B站黑名单小组。一共算我是四位成员。

后来看到lcz大佬的帖子后,我感觉这不是个好事情,然后私信留言,加QQ聊个半天,居然发现这个人很有趣啊,技术也可以,人也很正直,于是在进行讨论后,我把lcz大佬拉入了表群,视频研究协会,然后几天后拉入了里群。

至此,5人组正式成立了。

很开心,在我没想到的时间点有这样的志同道合的瞎几把搞的同好(大雾)一起玩确实开心。

然后在聊天中得知,lcz大佬是xian人,来沈阳上学,居然是学他妈的最特么屌炸天的物理。

贼巧,我当时毕业后在沈阳上班,正好是我上了半年班的时候,于是顺理成章的面基了。

大佬坐地铁到铁西,我把他领到了我的家里,然后一起玩了一些游♂戏。

非常开心,非常愉♂悦,时常屋子里传出了开心的呻吟声……(←巨雾)

第一次面基研究了无数的技术,在lcz大佬的帮助下,我的xbr192音频压制器被完善了,神他妈没有ffmpeg哈哈哈哈哈哈哈……

于是走的越来越近后,biliplus我也逐渐的开始研究测试。

lcz大佬技术确实没问题,这方面我是很有自信的,没有lcz大佬办不到的事,如果有,请看这行第一句……

但是毕竟是学生,有些方面,我身为一个长者,给他传授些人生的经验,很惭愧,我只做了一点微小的工作,毕竟苟利国家生死以,岂因祸福避趋之……

于是顺理成章,bp的一些额外的事情我也逐渐开始给lcz大佬提建议与我的想法。

只是,没想到,bp居然到17年的今天,出现了这样的事情。

B站在经历了两次商业化的举动后,现在彻底已经成为了一家正经的商业公司,倒不是说商业化不好,毕竟是需要赚钱,这道理没有任何问题,别谈什么爱,现实就是金钱,想的太多反而给自己弄得那么累。

只是B站最近几年做的是越来越差,总体感觉就是三次元充斥这整个网站,已经无法找到曾经的那个感觉了,老用户流失度越来越高,新用户脑残度越来越高,老员工离职率一直居高不下。

这些问题说明了,B站已经变质了,已经完全不是曾经的B站了。

从视频整体质量和直播活动与一些(所谓的逸国趣事)等都能看出来很多细节。

所以,逐渐打击曾经是巴不得你创建的网站。
也就是,曾经幕后支持bp、jj此类网站,而且也是放任不管。
现在是正式开始打击,因为,【此类网站已经开始损害了B站的利益!】

什么叫损害?你让B站赚不到钱,你让B站本来赚6位数,你的网站让他损失了5位数,那就得律师函了对吧。

同类网站,某知名网站站长发微博,在前几天收到了律师函,并正式停止了网站,可怜可惜可叹。

而bp目前还没有大面积损失B站的利益,所以,也可以勉强苟活一段时间。

从lcz大佬的关于网站的一些事情(附后文)】的文中能看到他对bp的爱,以及对这个网站的不舍,以及暗讽B站的举动。

不难看出,现在的bp已经到了一个关键点,关于这方面的事情我前一段时间跟lcz大佬彻夜长谈,相信他心里已经有B数了。

正如lcz大佬所说,bp迟早会关闭,但不是现在,起码,低成本的维护bp还是可以的。

【你们有没有想过,bp,是lcz大佬一个人从头到尾整整2年半的维护。】

期间B站更新一次,lcz大佬就得重新后台维护一次,还为了保证网站不进入维护状态,自己花了多少心血,付出了多少汗水,这些东西没人知道,你们只在乎你们自己爽不爽,从来没有关心过这些幕后的staff。

我对bp的爱全部都是因为lcz大佬,我是一心想帮助lcz大佬做好bp。

每一次lcz大佬有新功能,都会在我们内部群让我们帮忙测试。

写一个新功能需要付出多少精力和时间,做这个的人你们自己明白。也得亏lcz大佬没有产品经理管他,他自己说的算……

总之,说这么多到现在有1800字了,我还是难以接受bp的现状。

如果你用过biliplus,如果你真的觉得这个网站不错,如果你真的想让bp再苟活几天,如果,如果你不想以后再也看不到这些网站的幕后维护人,不想看到他们逐渐丧失动力,丧失理想。

仅你自己一份力,在bp困难的时候伸出援手。

B站已经没有爱了,但是,我们这群老人还是在努力的做我们自己,我们还在努力的坚持着,我们,还在,让大家开心。

谢谢那些曾经帮助过bp的人,谢谢那些曾经为了bp做出贡献的人。

谢谢你们,谢谢,我的谢谢微不足道,但是,我的心所想,我希望让你们明白。

没有你们,也就没有biliplus的今天。

【附】:

↓ lcz大佬的个人支付宝赞助二维码 ↓

lcz大佬的paypal赞助地址:esterTion的Paypal赞助地址】

以及,曾经为了这份爱的大家:biliplus赞助名单】

就这样,再一次,感谢你们。

(Ps.大佬啥时候回沈阳,你还欠我一顿饭呢,是吧,上次海底捞吃得多爽,这次我想吃潮汕嫩牛火锅,大佬咱是不是,嗯?~\(≧▽≦)/~)

[NyaPass7 于 (加拿大东部时间)2017年8月16日 15:42:29 有感而发]

神代梦华谭 – 卡面提取

游戏没啥兴趣,已删,不再更新


用仓鼠太太的芙蕾雅镇一下

cardL_20095

感觉自己就很无聊(
下午做了点纯体力劳动,解了一波卡面

https://pan.baidu.com/s/1pKVis7D

就真的是纯体力,没有加密,所有素材全部unity3d格式放在raw里,批量一跑就完事了
拿着AssetsBundleExtractor跑batchexport,然后批量选中assets,导出所有的Texture2D

CardBattle和CardL都是Sprite裁剪的形式,不过每个都是固定位置,就用chrome的自动下载跑了一批canvas裁剪

给flv.js添加解封装器(demuxer)

估计也没人再写了

  1. 需要一个probe函数验证文件格式有效
  2. 在transmuxing-controller里添加判断,创建demuxer
  3. 需要一个parseChunks函数负责demux由io-ctl传来的文件流,参数0为未使用的arrayBuffer,参数1为相对文件头的字节偏移量
  4. 自行识别mediaInfo,在完成后调用onMediaInfo传回媒体信息
  5. 音视频流分别回调onTrackMetadata将轨道信息传给remuxer
  6. parseChunks中将音视频采样分别放置于独立track中,并调用onDataAvailable通知remuxer进行封装

终于整完了mp4 demuxer

想了挺久分段mp4的播放有什么解决方案,看着flvjs眼馋,然后一直想坑,但是又懒于开工

于是趁着这个五一,刚好前两周学校里的好几科期中也考完了,开坑!

QQ截图20170501003619

说是五一开坑,其实二十多号复制了个segment-mp4-player的时候就已经开始去翻着找mp4格式说明了。

以前听过song神说过mp4的box地狱,但是并不特别懂。正式看资料以后才算是真正理解。

具体细节就不说了,真的好奇就看文档

读取moov的时候,为了省事,我直接上了一个递归函数,一劳永逸,然后只要把boxName给switch一下具体parse就可以了。

其实mp4的格式真正读起来不会特别复杂,理清层级关系,明白自己在做什么,要获取什么,也就能顺路完成。

相比起读数据,我倒是觉得读完后整理数据才是真正的大头,比如把关键帧梳理出一个timestamp->fileposition的表才是最考验逻辑的。写的时候整个人脑子处于一种混乱的状态,最后是在顶不住选择了稳妥的列逻辑,一步步理出数据

QQ截图20170501003659

至于主要数据流的mdat部分,这部分完全就是一整片数据堆砌。同样,这里是另一个需要强逻辑的地方,每次读sample都需要先在已有的moov数据里面找到对应offset是谁的采样、采样时间戳是多少、采样有多大。我在这里直接选择了提前生成一个chunkMap,读取起来那叫一个爽快

QQ图片20170501003806

一路写代码的途中也是经常和xqq大佬交流(骚扰),也学到了很多

大概也就是这么些,说到底写出来还是个自用的东西,这年头自己做视频播放谁还专门整分段mp4

QQ图片20170501004141

gayhub

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-

 

esterTion ( ͡° ͜ʖ ͡°)