转载:
http://xlch.me/2017/03/19/think/196
可能由于为了加大版权保护力度,B站最近频繁更新视频解析协议。
好的,现在说一下近三天的研究成果:
B站的flash播放器解析地址为
https://interface.bilibili.com/playurl?cid=15198665&player=1&quality=3&sign=4813bc613d8cf780be68fba66ace8ac6&ts=1489910308
cid就是视频文件的一个id值,player=1表示这个是flash播放器,ts是时间戳,otype可以为json或xml,quality为清晰度,sign是签名
先着重说一下sign
这个就是前面的那些值合并后加密形成的,必填,错误则
{"code":-5003,"result":"checksum error"}
嗯就是这样。
sign的算法:
function get_sign($params, $key){
$_data = array();
ksort($params);
reset($params);
foreach ($params as $k => $v) {
$_data[] = $k . '=' . rawurlencode($v);
}
$_sign = implode('&', $_data);
return array('sign' => strtolower(md5($_sign . $key)), 'params' => $_sign);
}
大概就是将所有的参数排序后合并,然后与“密钥”md5加密,就出来了sign。
密钥由反编译播放器提出。
目前的情况是:
不管解析出来的地址是mp4、hdmp4还是flv,均会限速,大概在视频文件大小的四分之一处限速到10KB/s
但是不知为什么,使用b站的flash播放器就不会这样。
怀疑的套路:后台访问了一个特殊的url,然后就把带宽放开了。
那么再说说HTML5播放器。
H5播放器的解析地址:
https://interface.bilibili.com/playurl?cid=15198665&appkey=84956560bc028eb7&otype=json&type=&quality=3&sign=187800468e0a59ffd9e1ec843ec1eb28
一眼望去和flash的没什么区别,但是注意这里多了个appkey
flash播放器的player=1相当于填写了一个默认的appkey。
当然,这里的密钥也不一样了,使用flash播放器的密钥肯定是不行的了。
目前h5播放器的测试结果是:
解析出来的地址没有任何的限速。
所以唯一可行的方法只有使用H5播放器的解析地址。
但是目前来讲,h5播放器的js源码充满了套路,使用多种混淆,几乎无法阅读,更不用说拿“密钥”了。
有兴趣的可以去看看:http://static.hdslb.com/player/js/bilibiliPlayer.min.js?v=baff6b13
所以说,目前B站的视频无法正常的“盗链”