欢迎光临散文网 会员登陆 & 注册

【B站API】视频二压与网页播放器API行为的联系

2020-04-26 21:35 作者:ZHY2020  | 我要投稿

头图来源:pid 63756446 侵删

投稿视频未被B站二压和被二压似乎在网页api回复上好像有点不一样,看完这个可能是奇怪的知识增加了。本文做为B站api学习笔记。

感兴趣的就跟我体验发现规律验证规律的乐趣吧~~~

起因

之前写了篇调查B站新4K视频码率的文章CV5778825,起初只下载了AVC格式的原视频(通过手机缓存),后来发现B站是有HEVC格式的视频的(目前确定UWP客户端可以在线播放),奈何当时UWP有点bug下载403forbidden(此文写作时已修复但仍不能下载HEVC视频),虽然播放器能看码率,但我更相信下载后读取的MediaInfo的数值,所以就寻找其他下载方法,百度获悉you-get可以获取HEVC,起初版本没有更新4K支持,于是又学习了抓API获取下载链接的方法。

虽然最后我的目的通过将you-get更新到测试中的developer分支得到解决,但其间我用其下载我自己上传的视频BV1qt4y1y7EJBV1FK411j7A5,通过给you-get加入火狐的cookies已达到大会员身份使用“-i”指令获取不同画质的信息时,前面的视频只能获取到1080p非会员等级,而后一个却能获取到从“1080p60”开始的所有画质。之后通过“--debug”选项了解到you-get是通过解析api来获取下载链接的,这两个视频在请求api得到的回应肯定有不同,而作为上传者我自己很清楚两个视频的区别:前一个做了防二压上传前控制了码率,后一个是自己偷懒直传了高码率的视频被B站二压了。

BV1qt4y1y7EJ 右BV1FK411j7A5

于是有了接下来的探究。

抓取API发现端倪

抓取环境:Microsoft Edge Chromium Beta

首先看前一个视频BV1qt4y1y7EJ,F12开发者模式

切换至1080p60画质。

找到playerurl?cid=……这条网页播放器请求视频链接的记录。展开data->dash->video。可看到其中只有一条0号记录id116代表1080p60,其中有视频链接,视频长宽,编码格式级别。

(codec: "avc1.640032"代表AVC编码级别High@L5 32是50的十六进制,这个之后还有讨论先记住)

BV1qt4y1y7EJ 1080p60api回复

再看第二个BV1FK411j7A5

同样操作。

BV1FK411j7A5 1080p60 api回复

是不是video面多了好几个,每个对应的是每种画质的视频流信息内容与上面展开的大致一样。

再获取一下前一个的1080p画质的回复:

BV1qt4y1y7EJ 1080p api回复

没有回复1080p60和720p60的视频流信息

再看720p60回复:

BV1qt4y1y7EJ 720p60 api回复

嗯,只有一个。

这是60帧视频,那非60帧1080p+非二压的视频呢?我也上传了范例。BV1Ap4y1y77p

BV1Ap4y1y77p 1080p+ api回复
BV1Ap4y1y77p 1080p api回复

好了,破案了,被二压的视频B站的api回复会把所有画质的视频流信息一起回复,没二压的api会在请求非大会员画质时回复所有非大会员画质视频流,大会员画质每个单独回复。

至于这个区别跟you-get无法下载我的非二压视频的60帧大会员画质有什么关系,我并不清楚,因为它请求时也请求api时也有qn=112(代表1080p+画质),可能与其他参数有关,不作继续讨论。

继续联想

还记得之前提到的视频流信息里的编码级别吗 

(codec: "avc1.640032"代表AVC编码级别High@L5 32是50的十六进制)

这个我就很熟悉了,之前研究防B站二压中从@人在火星-刚下飞船 的专栏CV4461542,学到一个通过看“播放统计信息”快速判断视频是否二压的方法。

引自CV4461542

被二压的视频都是avc1.64001E与视频实际不匹配,实际api回复中1080p60的信息是:

被二压视频1080p60信息  BV1FK411j7A5

avc1.64001E在哪儿呢?

这是360p的编码级别。

二压视频360p信息 BV1FK411j7A5

而360p是这些获取到的视频流信息的最后一个,所以猜测网页播放器的统计信息中的这段avc1.6400XX 是取自api回复的所有视频流信息的最后一个。

之前得出未被二压视频的大会员画质的api回复只会回复当前的视频流信息,那么1080p60的统计信息就会是实际的值。720p60画质即使是被二压后的视频应该也会显示实际值。

那么来验证一下。还是我的未被二压视频(BV1qt4y1y7EJ

播放器统计信息
api回复

看来猜测可以得到验证了。

网页播放器为什么会错误显示编码等级信息,这我就不知道了,只是得出一个规律。

感觉好像到头来是没用的知识+1哈。

仅供学习参考用。

api中qn(video id)值对应画质:

4K              120

1080p60    116

1080p+      112

720p60       74

1080p         80

720p           64

480p           32

360p           16

——ZHY

引用

判断二压方法来源:

备注:以上的api仅在具有大会员画质的视频中触发,且只发生于大会员画质间切换,大会员画质与非大会员画质之间切换,非大会员画质间切换不会触发。没有大会员画质的视频浏览器没有抓取到不代表没有这个请求,仍可以通过在https://api.bilibili.com/x/player/playurl?后手动输入bid、cid、qn等参数获取到响应的回复。

【B站API】视频二压与网页播放器API行为的联系的评论 (共 条)

分享到微博请遵守国家法律