最近在研究怎么免登录获取b站高画质mp4直链。
注意,这里有很多限制条件。
第一,免登录。不需要登录账号就能获取。
第二,高画质。360p或者480p的画质不行,必须720p或者1080p打底,
第三,mp4。必须是mp4格式,音视频分开的m4s dash流格式不行。
第四,直链。直接在浏览器就能打开的链接,无需添加任何请求头headers。
一、尝试追随前人的脚步
几年前看到别人做过类似的网页解析,有个接口能卡bug直接就能解析到高画质的视频。
就是在解析视频下载地址的时候加上platform=html5&high_quality=1的参数。
比如下面这个
https://api.bilibili.com/x/player/playurl?cid=1452568535&bvid=BV1mW421A7nM&qn=80&platform=html5&high_quality=1
注意,你现在直接打开的话可能能看到高画质,因为你的浏览器登录了b站所以可以解析到高画质,同时在解析到的cdn链接里面你也可以找到mid=【你的b站UID】的参数,把他改了链接就打不开了,说明这个是登录了的。
可以在浏览器右上角三个点选择新建InPrivate窗口再打开这个链接,就是不登录的了。
{ "code": 0, "message": "0", "ttl": 1, "data": { "from": "local", "result": "suee", "message": "", "quality": 16, "format": "mp4", "timelength": 122581, "accept_format": "mp4", "accept_description": [ "流畅 360P" ], "accept_quality": [ 16 ], "video_codecid": 7, "seek_param": "start", "seek_type": "second", "durl": [ { "order": 1, "length": 122581, "size": 6192847, "ahead": "", "vhead": "", "url": "https://upos-sz-mirror08c.bilivideo.com/upgcxcode/35/85/1452568535/1452568535-1-16.mp4?e=ig8euxZM2rNcNbRVhwdVhwdlhWdVhwdVhoNvNC8BqJIzNbfq9rVEuxTEnE8L5F6VnEsSTx0vkX8fqJeYTj_lta53NCM=&uipk=5&nbs=1&deadline=1709651370&gen=playurlv2&os=08cbv&oi=0&trid=a2e7b6ef25264329b5a12ce0051ff6e9h&mid=0&platform=html5&upsig=da6736fd5f6e38ebe0e00c760baad95f&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&f=h_0_0&bw=50761&logo=80000000", "backup_url": null } ], "support_formats": [ { "quality": 16, "format": "mp4", "new_description": "360P 流畅", "display_desc": "360P", "superscript": "", "codecs": null } ], "high_format": null, "last_play_time": 0, "last_play_cid": 0, "view_info": null } }
可以看到这样解析到的画质只有16(360P)满足不了高画质的需求。
而且可以验证,之前的这个方法已经失效了。
二、自行探索
老方法用不了了,那该怎么办呢?
先从b站最基础的获取视频下载地址的接口研究吧!
基于刚才的链接,我测试了把后面的platform=html5&high_quality=1的参数删掉,只保留前面的BV号、cid和qn画质参数
https://api.bilibili.com/x/player/playurl?cid=1452568535&bvid=BV1mW421A7nM&qn=80
发现已经可以解析到720P的画质了,但是解析到的CDN链接直接是打不开的,直接打开会显示403,需要改一下浏览器的User-Agent并且加一个bilibili.com的referer才能打开。
很明显,这个虽然免登录有高画质,但是CDN链接没办法直接打开,也不行。
瞎折腾了一段时间之后,我发现可以把解析到的CDN链接里面的platform=pc改成platform=html5,然后链接就能直接打开了。
有的链接可以有的不行,带mcdn的不行,mirrorali的好像也不行,不知道请求视频下载地址的时候能不能指定返回的cdn,有时候我同一时间请求同一个视频,本地和服务器上运行的结果就不一样,有的链接这样改能直接打开,有的就不行。
注意:CDN链接有时效性,一般获取120分钟之后就会过期,你看到这篇文章的时候大概率已经过期,直接打开我贴出来的CDN链接复现不出来很正常。要想复现请尝试用上面的接口重新请求CDN链接。
比如原链接:
https://upos-sz-estgoss.bilivideo.com/upgcxcode/35/85/1452568535/1452568535-1-192.mp4?e=ig8euxZM2rNcNbNMnwdVhwdlhbK3hwdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1709651266&gen=playurlv2&os=bcache&oi=1363472530&trid=00004f006c7df49a46fba79d315a2bb66b23u&mid=0&platform=pc&upsig=a305c9caaacd6df6a4e7a52c914246ca&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&cdnid=9929&bvc=vod&nettype=0&orderid=0,3&buvid=&build=0&f=u_0_0&agrr=0&bw=249066&logo=80000000
就改成了
https://upos-sz-estgoss.bilivideo.com/upgcxcode/35/85/1452568535/1452568535-1-192.mp4?e=ig8euxZM2rNcNbNMnwdVhwdlhbK3hwdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1709651266&gen=playurlv2&os=bcache&oi=1363472530&trid=00004f006c7df49a46fba79d315a2bb66b23u&mid=0&platform=html5&upsig=a305c9caaacd6df6a4e7a52c914246ca&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&cdnid=9929&bvc=vod&nettype=0&orderid=0,3&buvid=&build=0&f=u_0_0&agrr=0&bw=249066&logo=80000000
改完之后就能打开了,有一些视频不会出现403,还有一些不行。
然后为了解决有的不行的问题,我又试了一下能不能通过直接修改url的cdn地址的方式,只要他按上面的方法改了之后无法打开(用requests.head验证一下status是不是200),就尝试把最前面的cdn替换一下再试一次,果然有能用这种方法打开的视频。
比如刚才改完platform=html5的链接是
可以看到原本的CDN是mirrorali,很多这种CDN的都用不了上面的方法
https://upos-sz-mirrorali.bilivideo.com/upgcxcode/35/85/1452568535/1452568535-1-192.mp4?e=ig8euxZM2rNcNbNMnwdVhwdlhbK3hwdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1709651475&gen=playurlv2&os=alibv&oi=0&trid=2b3e2cd221f044158aa333fd069149f2u&mid=0&platform=html5&upsig=2108bb7a5f6529584b376d527b86a1c8&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=0,3&buvid=&build=0&f=u_0_0&agrr=0&bw=249066&logo=80000000
把他改成其他CDN的开头
https://upos-sz-estgoss.bilivideo.com/upgcxcode/35/85/1452568535/1452568535-1-192.mp4?e=ig8euxZM2rNcNbNMnwdVhwdlhbK3hwdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1709651475&gen=playurlv2&os=alibv&oi=0&trid=2b3e2cd221f044158aa333fd069149f2u&mid=0&platform=html5&upsig=2108bb7a5f6529584b376d527b86a1c8&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=0,3&buvid=&build=0&f=u_0_0&agrr=0&bw=249066&logo=80000000
这样视频有可能也能直接打开了,又减少了一部分打不开的视频。
但是经过测试这样也有一部分视频还是没办法打开,又经过一段时间的探索发现了一个勉强能行的方法。
最早说的那个加上platform=html5&high_quality=1的方法免登录虽然失效了,但是登录之后同样可以获取到高画质。根据之前的经验来看,登录之后链接里是会有登录的信息的,而且改掉之后链接就打不开了。
经过一段时间的瞎搞尝试,我发现替换CDN之后就可以瞎改mid了,emmm这是不是也能勉强算是一种免登录?
同样还是请求之前的接口,但是cookie需要加上SESSDATA,获取登录之后请求到的链接。
https://api.bilibili.com/x/player/playurl?cid=1452568535&bvid=BV1mW421A7nM&qn=80&platform=html5&high_quality=1
{ "code": 0, "message": "0", "ttl": 1, "data": { "from": "local", "result": "suee", "message": "", "quality": 64, "format": "mp4720", "timelength": 122496, "accept_format": "hdflv2,flv,mp4720,mp4", "accept_description": [ "高清 1080P+", "高清 1080P", "高清 720P", "流畅 360P" ], "accept_quality": [ 112, 80, 64, 16 ], "video_codecid": 7, "seek_param": "start", "seek_type": "offset", "durl": [ { "order": 1, "length": 122496, "size": 30386153, "ahead": "", "vhead": "", "url": "https://upos-sz-mirrorali.bilivideo.com/upgcxcode/35/85/1452568535/1452568535-1-192.mp4?e=ig8euxZM2rNcNbNMnwdVhwdlhbK3hwdVhoNvNC8BqJIzNbfq9rVEuxTEnE8L5F6VnEsSTx0vkX8fqJeYTj_lta53NCM=&uipk=5&nbs=1&deadline=1709659940&gen=playurlv2&os=alibv&oi=0&trid=a5bff2d8267e49888579f060286bc98fT&mid=你的uid&platform=html5&upsig=de1e0b0b45c884dfc65950876eed4a43&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&bw=249066&orderid=0,1&buvid=&build=0&mobi_app=&f=T_0_0&logo=80000000", "backup_url": null } ], "support_formats": [ { "quality": 112, "format": "hdflv2", "new_description": "1080P 高码率", "display_desc": "1080P", "superscript": "高码率", "codecs": null }, { "quality": 80, "format": "flv", "new_description": "1080P 高清", "display_desc": "1080P", "superscript": "", "codecs": null }, { "quality": 64, "format": "mp4720", "new_description": "720P 高清", "display_desc": "720P", "superscript": "", "codecs": null }, { "quality": 16, "format": "mp4", "new_description": "360P 流畅", "display_desc": "360P", "superscript": "", "codecs": null } ], "high_format": null, "last_play_time": 0, "last_play_cid": 0, "view_info": null } }
可以看到虽然请求到了高画质,但是这个链接包含了登录账号的uid信息
同样的,我们尝试改一下CDN,发现可以正常直接访问打开。
然后mid这时候也可以改了,改成0或者改成任何你想改的数字都没问题,比如我改成114514
比如原链接是这样的:(虽然可以直接打开但是有你登录的账号的uid信息,改掉uid会导致链接打不开)
https://upos-sz-mirrorali.bilivideo.com/upgcxcode/35/85/1452568535/1452568535-1-192.mp4?e=ig8euxZM2rNcNbNMnwdVhwdlhbK3hwdVhoNvNC8BqJIzNbfq9rVEuxTEnE8L5F6VnEsSTx0vkX8fqJeYTj_lta53NCM=&uipk=5&nbs=1&deadline=1709659940&gen=playurlv2&os=alibv&oi=0&trid=a5bff2d8267e49888579f060286bc98fT&mid=你的uid&platform=html5&upsig=de1e0b0b45c884dfc65950876eed4a43&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&bw=249066&orderid=0,1&buvid=&build=0&mobi_app=&f=T_0_0&logo=80000000
替换CDN链接之后,uid的地方可以随便改了,改成0或者114514都可以正常打开链接
https://upos-sz-estgoss.bilivideo.com/upgcxcode/35/85/1452568535/1452568535-1-192.mp4?e=ig8euxZM2rNcNbNMnwdVhwdlhbK3hwdVhoNvNC8BqJIzNbfq9rVEuxTEnE8L5F6VnEsSTx0vkX8fqJeYTj_lta53NCM=&uipk=5&nbs=1&deadline=1709659940&gen=playurlv2&os=alibv&oi=0&trid=a5bff2d8267e49888579f060286bc98fT&mid=114514&platform=html5&upsig=de1e0b0b45c884dfc65950876eed4a43&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&bw=249066&orderid=0,1&buvid=&build=0&mobi_app=&f=T_0_0&logo=80000000
这样链接里就没有明显的登录信息了,是不是某种程度上也是一种免登录下载?(萌混过关)
以上就是我发现的一些方法,如果你也有什么方法欢迎评论区分享!
本文地址:https://blog.jixiaob.cn/?post=113
版权声明:若无注明,本文皆为“赵苦瓜のBlog~”原创,转载请保留文章出处。
/BillibiliStreamExtractor.java这里面,大概308行的位置,他是用的普通的解析接口
https://api.bilibili.com/x/player/playurl?bvid=【BV号】&cid=【视频的cid】&fnval=2000&qn=120&fourk=1&try_look=1
得到的是video.m4s视频文件(没有音轨)和audio.m4s文件,虽然能免登录下载到1080P,但是并不是mp4单文件,需要将这两个文件手动合并才能得到mp4