B站视频解析套路

转载:
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站的视频无法正常的“盗链”

你可能感兴趣的:(爬虫)