bilibili-API-collect/bangumi/videostream_url.md
Rerange 8fb57b4ad1
增加了关于番剧播放&下载地址(视频流)的文档 (#402)
* 增加了关于番剧视频url的文档

* 在readme.md中增加相应的链接
2022-06-24 23:47:41 +08:00

17 KiB
Raw Blame History

视频流URL

B站的番剧视频为http流媒体需要对应的api以视频id获取取流url并进行取流


qn视频清晰度标识

该值在dash模式且非下载模式时无效

含义 备注
6 240P 极速 仅mp4方式支持
16 360P 流畅
32 480P 清晰
64 720P 高清 web端默认值
B站前端需要登录才能选择但是直接发送请求可以不登录就拿到720P的取流地址
无720P时则为720P60
74 720P60 高帧率 需要认证登录账号
80 1080P 高清 TV端与APP端默认值
需要认证登录账号
112 1080P+ 高码率 大多情况需求认证大会员账号
116 1080P60 高帧率 大多情况需求认证大会员账号
120 4K 超清 需要fnver&128=128fourk=1
大多情况需求认证大会员账号
125 HDR 真彩色 仅支持dash方式
需要fnver&64=64
大多情况需求认证大会员账号
126 杜比视界 仅支持dash方式
需要fnver&512=512
大多情况需求认证大会员账号
127 8K 超高清 仅支持dash方式
需要fnver&1024=1024
大多情况需求认证大会员账号

例如请求1080P+的视频,则qn=112

fnver视频流版本标识

目前该值恒为0fnver=0

fnval视频流格式标识

该代码为二进制属性位,如需组合功能需要使用OR运算结合一下数值

含义 备注
0 flv格式 仅H.264编码
部分老视频存在分段现象
与mp4格式及dash格式互斥
1 mp4格式 仅H.264编码
不存在视频分段
与flv格式及dash格式互斥
16 dash格式 H.264编码或H.265编码
部分老视频的清晰度上限低于flv格式
与mp4格式及flv格式互斥
64 是否需求 HDR 视频 必须为dash格式
需要qn=125
大多情况需求认证大会员账号
128 是否需求 4K 分辨率 该值与fourk字段协同作用
需要qn=120
大多情况需求认证大会员账号
256 是否需求杜比音频 必须为dash格式
大多情况需求认证大会员账号
512 是否需求杜比视界 必须为dash格式
大多情况需求认证大会员账号
1024 是否需求 8K 分辨率 必须为dash格式
需要qn=127
大多情况需求认证大会员账号
2048 是否需求 av1 编码 必须为dash格式

例如请求dash格式且需要HDR的视频流fnval=16|64=80

视频伴音音质代码

含义
30216 64K
30232 132K
30280 192K

获取番剧视频流URL

https://api.bilibili.com/pgc/player/web/playurl

请求方式GET

认证方式CookieSESSDATA


关于视频流会员鉴权:

  • 获取480P及以上清晰度视频时需要登录Cookie

  • 获取高帧率1080P60/高码率1080P+视频时需要有大会员的账号登录Cookie

  • 获取会员专属番剧视频时需要登录Cookie


获取的url有效时间为120min超时失效需要重新获取

部分视频会有分段,需要特别注意

若视频有分P仅为单P的视频的url换P则需更换cid重新获取

url参数

参数名 类型 内容 必要性 备注
avid num 稿件avid 必要(可选) avid与bvid任选一个
bvid str 稿件bvid 必要(可选) avid与bvid任选一个
epid str 稿件epid 必要
cid num 视频cid 必要
qn num 视频清晰度选择 非必要 未登录默认32480P
登录默认64720P
值含义见上表
dash方式无效
fnval num 视频获取方式选择 非必要 默认为0
0 2flv方式可能会有分段
1低清mp4方式仅240P与360P且限速65K/s
16 80dash方式音视频分流支持H.265
fnver num 0 非必要 固定为0
fourk num 是否允许4K视频 非必要 默认为0
画质最高1080P0
画质最高4K1
session str 非必要 从视频播放页的网页源码中获取

json回复

根对象:

字段 类型 内容 备注
code num 返回值 0成功
-400请求错误
-404无视频
message str 错误信息 成功为success
result 有效时obj
无效时null
数据本体

result对象:

字段 类型 内容 备注
from str local 作用尚不明确
result str suee 作用尚不明确
message str 作用尚不明确
quality num 当前的视频分辨率代码 值含义见上表
format str 视频格式
timelength num 视频长度 单位为毫秒
不同分辨率/格式可能有略微差异
accept_format str 视频支持的全部格式 每项用,分隔
accept_description array 视频支持的分辨率列表
accept_quality array 视频支持的分辨率代码列表 值含义见上表
video_codecid num 固定值7 作用尚不明确
seek_param str 固定值start 作用尚不明确
seek_type str 固定值offset 作用尚不明确
durl array 视频分段 仅flv/mp4存在此项
dash obj dash音视频流信息 仅dash存在此项
support_formats array 支持格式的详细信息

result中的accept_description数组:

类型 内容 备注
0 str 分辨率名称1
n str 分辨率名称(n+1)
…… str ……

result中的accept_quality数组:

类型 内容 备注
0 str 分辨率代码1
n str 分辨率代码(n+1)
…… str ……

result中的support_formats数组:

类型 内容 备注
0 obj 播放格式详细信息1
n obj 播放格式详细信息(n+1)
…… obj ……

support_formats数组中的对象:

字段 类型 内容 备注
quality num 视频清晰度代码
format str 视频格式
new_description str 格式描述
display_desc str 格式描述
superscript str (?)
codecs array (?)

support_formats中的codecs数组:

类型 内容 备注
0 str (?)
1 str (?)

flv/mp4方式

result中的durl数组:

类型 内容 备注
0 obj 视频分段1信息 仅flv方式具有分段
n obj 视频分段(n+1)信息
…… obj ……

durl数组中的对象:

字段 类型 内容 备注
order num 视频分段序号 某些视频会分为多个片段从1顺序增长
length num 视频长度 单位为毫秒
size num 视频大小 单位为Byte
vhead str 作用尚不明确
url str 视频流url url内容存在转义符
有效时间为120min
backup_url array 备用视频流

durl数组中的对象中的backup_url数组:

类型 内容 备注
0 str 备用视频流url 1 url内容存在转义符
有效时间为120min
n str 备用视频流url (n+1)
…… str ……

示例:

视频无分段时:

获取视频ep85046/av2325306中的1Pcid=3629601的视频流url清晰度为480p使用flv方式获取

avid/epid方式

curl -G 'https://api.bilibili.com/pgc/player/web/playurl' \
--data-urlencode 'avid=2325306' \
--data-urlencode 'cid=3629601' \
--data-urlencode 'ep_id=85046' \
-b 'SESSDATA=xxx'

https://api.bilibili.com/pgc/player/web/playurl?avid=2325306&cid=3629601&ep_id=85046

查看响应示例:
{
    "code": 0, 
    "message": "success", 
    "result": {
        "accept_format": "flv480,mp4", 
        "code": 0, 
        "seek_param": "start", 
        "is_preview": 0, 
        "fnval": 0, 
        "video_project": true, 
        "fnver": 0, 
        "type": "FLV", 
        "bp": 0, 
        "result": "suee", 
        "seek_type": "offset", 
        "from": "local", 
        "video_codecid": 7, 
        "record_info": {
            "record_icon": "", 
            "record": ""
        }, 
        "durl": [
            {
                "size": 111138876, 
                "ahead": "", 
                "length": 1394090, 
                "vhead": "", 
                "backup_url": [
                    "https://upos-sz-mirrorcoso1.bilivideo.com/upgcxcode/01/96/3629601/3629601_da8-1-32.flv?e=ig8euxZM2rNcNbRVhwdVhwdlhWdVhwdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1656098195&gen=playurlv2&os=coso1bv&oi=2946990771&trid=a1db84b216ea45dd89225f02a09093fdp&mid=0&platform=pc&upsig=878be08cc0e6bdea705952529e7e6785&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&agrr=1&bw=79726&logo=40000000", 
                    "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/01/96/3629601/3629601_da8-1-32.flv?e=ig8euxZM2rNcNbRVhwdVhwdlhWdVhwdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1656098195&gen=playurlv2&os=cosbv&oi=2946990771&trid=a1db84b216ea45dd89225f02a09093fdp&mid=0&platform=pc&upsig=8c31064c84d8e981704815992cfe315c&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&agrr=1&bw=79726&logo=40000000"
                ], 
                "url": "https://cn-lnsy-cu-v-02.bilivideo.com/upgcxcode/01/96/3629601/3629601_da8-1-32.flv?e=ig8euxZM2rNcNbRVhwdVhwdlhWdVhwdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1656098195&gen=playurlv2&os=bcache&oi=2946990771&trid=0000a1db84b216ea45dd89225f02a09093fdp&mid=0&platform=pc&upsig=7a5c4f25b9056359127191390a73bedc&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&cdnid=3281&bvc=vod&nettype=0&orderid=0,3&agrr=1&bw=79726&logo=80000000", 
                "order": 1, 
                "md5": ""
            }
        ], 
        "no_rexcode": 0, 
        "format": "flv480", 
        "support_formats": [
            {
                "display_desc": "480P", 
                "superscript": "", 
                "codecs": [ ], 
                "format": "flv480", 
                "description": "清晰 480P", 
                "quality": 32, 
                "new_description": "480P 清晰"
            }, 
            {
                "display_desc": "360P", 
                "superscript": "", 
                "codecs": [ ], 
                "format": "mp4", 
                "description": "流畅 360P", 
                "quality": 16, 
                "new_description": "360P 流畅"
            }
        ], 
        "message": "", 
        "accept_quality": [
            32, 
            16
        ], 
        "quality": 32, 
        "timelength": 1394090, 
        "has_paid": false, 
        "clip_info_list": [ ], 
        "accept_description": [
            "清晰 480P", 
            "流畅 360P"
        ], 
        "status": 2
    }
}

视频的取流web端及APP端

注意:

  1. 如flv模式则可能产生分段情况$.data.durl[1-n].url$.data.durl[1-n].backup_url[0]中的内容作为url进行GET操作, 如果有多个视频, 需要手动合并处理
  2. 如mp4模式则需要获取对应的视频流方法同上
  3. 如dash模式则需要同时获取对应的视频流和伴音流方法同上
  4. web端取流需要验证防盗链referer.bilibili.com域名下且UA不能为空app端也需要验证防盗链即UA需要含有Mozilla/5.0 BiliDroid/*.*.* (bbcallen@gmail.com)*为版本);如referer或UA错误的情况会被判定为盗链返回403 Forbidden故无法取流
  5. 注意unicode转义符

以上述视频流url为例

wget 'https://upos-sz-mirrorhwo1.bilivideo.com/upgcxcode/01/96/3629601/3629601_da8-1-32.flv?e=ig8euxZM2rNcNbRVhwdVhwdlhWdVhwdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1656098026&gen=playurlv2&os=hwo1bv&oi=0&trid=f0a1d2d854264369803462f3dd524154p&mid=0&platform=pc&upsig=76c1438153942fda51fbf4eb07e6e5a1&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=0,2&agrr=1&bw=79726&logo=80000000' \
--referer 'https://www.bilibili.com' \
-O 'Download_video.flv'

响应正文将返回一个flv文件