欢迎食用『主界面』~,这里是赵苦瓜的看板娘desu~

#
有关bilibili免登录获取高画质mp4直链的研究
首页 > 通用数据接口    作者:赵苦瓜   2024年3月5日 20:47 星期二   热度:3645°   百度已收录  
时间:2024-3-5 20:47   热度:3645° 

最近在研究怎么免登录获取b站高画质mp4直链。

注意,这里有很多限制条件。

第一,免登录。不需要登录账号就能获取。

第二,高画质。360p或者480p的画质不行,必须720p或者1080p打底,

第三,mp4。必须是mp4格式,音视频分开的m4s dash流格式不行。

第四,直链。直接在浏览器就能打开的链接,无需添加任何请求头headers。



一、尝试追随前人的脚步

几年前看到别人做过类似的网页解析,有个接口能卡bug直接就能解析到高画质的视频。

就是在解析视频下载地址的时候加上platform=html5&high_quality=1的参数。


参考github:高清1080P mp4 在线解析下载 无需登录 http://bilibili.syyhc.com · Issue #89 · Henryhaohao/Bilibili_video_download (github.com)


比如下面这个

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


这样链接里就没有明显的登录信息了,是不是某种程度上也是一种免登录下载?(萌混过关)


以上就是我发现的一些方法,如果你也有什么方法欢迎评论区分享!


本文作者:赵苦瓜      文章标题: 有关bilibili免登录获取高画质mp4直链的研究
本文地址:https://blog.jixiaob.cn/?post=113
版权声明:若无注明,本文皆为“赵苦瓜のBlog~”原创,转载请保留文章出处。
蓝亿录2024-08-26 21:13
不会弄,请问我用的子比主题,在wp后台点点嵌入哔哩哔哩第三方代码,可以实现这种超清模式吗?
@蓝亿录:理论上应该可以,后台只要把mp4直链解析出来就能在浏览器上直接播放了
CDN 配置鉴权的问题. upsig 就是签名. 没记错的话 upos-sz-estgoss.bilivideo.com 是很早就开始用的视频分发域名了, 可能忽视了鉴权. 说白了就是卡 bug, 能不能用看 B 站啥时候注意得到.
@Hantong:就是卡bug,前几个月还卡了tv源获取无水印和付费视频的bug,前几天被b站修了
yuioto2024-07-01 22:36
像BBDown那样?
好像是强制opus服务器。
X2024-06-12 10:08
可以研究下pipepipe中的实现方式?
@X:我看了一下它的代码,解析哔哩哔哩视频直链的部分在PipePipeExtractor/extractor/src/main/java/org/schabi/newpipe/extractor/services/bilibili/extractors
/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
ddd2024-10-20 21:31
@赵苦瓜:这些 m4s 403,下载不来
@ddd:需要伪装,改一下UA或者header传入range参数

返回顶部    首页    后花园  
版权所有:赵苦瓜のBlog~    站长: 赵苦瓜    程序:emlog   鲁ICP备20030743号-1   鲁公网安备37048102006726 萌ICP备20222268号    sitemap