From 42bb61a546fe546054b3cd6bd108a1472a887546 Mon Sep 17 00:00:00 2001 From: 7rikka Date: Sat, 10 Sep 2022 18:29:37 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=E6=9D=9C=E6=AF=94=E8=A7=86?= =?UTF-8?q?=E7=95=8C=E3=80=81=E6=97=A0=E6=8D=9F=E9=9F=B3=E8=BD=A8=E3=80=81?= =?UTF-8?q?AV1=E7=BC=96=E7=A0=81=E7=AD=89=E7=9B=B8=E5=85=B3=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=20(#469)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 补充杜比视界、无损音轨、AV1编码等相关信息 * 将视频编码代码单独列表 --- video/videostream_url.md | 200 +++++++++++++++++++++++++++++---------- 1 file changed, 149 insertions(+), 51 deletions(-) diff --git a/video/videostream_url.md b/video/videostream_url.md index 709edc3..677c090 100644 --- a/video/videostream_url.md +++ b/video/videostream_url.md @@ -47,7 +47,7 @@ B站的视频为http流媒体,需要对应的api以视频id获取取流url, | 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`
大多情况需求认证大会员账号 | +| 64 | 是否需求 杜比世界(HDR) 视频 | 必须为dash格式
需要`qn=125`
大多情况需求认证大会员账号 | | 128 | 是否需求 4K 分辨率 | 该值与`fourk`字段协同作用
需要`qn=120`
大多情况需求认证大会员账号 | | 256 | 是否需求杜比音频 | 必须为dash格式
大多情况需求认证大会员账号 | | 512 | 是否需求杜比视界 | 必须为dash格式
大多情况需求认证大会员账号 | @@ -56,6 +56,14 @@ B站的视频为http流媒体,需要对应的api以视频id获取取流url, 例如:请求dash格式且需要HDR的视频流,则`fnval=16|64=80` +## 视频编码代码 + +| 值 | 含义 | 备注 | +| ---- | ---------- | ---------------- | +| 7 | AVC编码 | 8K视频无此格式 | +| 12 | HEVC编码 | | +| 13 | AV1编码 | | + ## 视频伴音音质代码 | 值 | 含义 | @@ -63,6 +71,8 @@ B站的视频为http流媒体,需要对应的api以视频id获取取流url, | 30216 | 64K | | 30232 | 132K | | 30280 | 192K | +| 30250 | 杜比全景声 | +| 30251 | Hi-Res无损 | ## 获取视频流URL(web端) @@ -126,17 +136,19 @@ B站的视频为http流媒体,需要对应的api以视频id获取取流url, | message | str | 空 | 作用尚不明确 | | quality | num | 当前的视频分辨率代码 | **值含义见上表** | | format | str | 视频格式 | | -| timelength | num | 视频长度 | 单位为毫秒
不同分辨率/格式可能有略微差异 | +| 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存在此项** | +| seek_type | str | offset(dash、flv)
second(mp4) | 作用尚不明确 | +| durl | array | 视频分段**注:仅flv、mp4存在此项** | **注:仅flv/mp4存在此项** | | dash | obj | dash音视频流信息 | **注:仅dash存在此项** | | support_formats | array | 支持格式的详细信息 | | | high_format | | null | | +| last_play_time | num | 上次播放进度 | 毫秒值 | +| last_play_cid | num | 上次播放分p的cid | | `data`中的`accept_description`数组: @@ -171,14 +183,15 @@ B站的视频为http流媒体,需要对应的api以视频id获取取流url, | new_description | str | 格式描述 | | | display_desc | str | 格式描述 | | | superscript | str | (?) | | -| codecs | array | (?) | | +| codecs | array | 可用编码格式列表 | | `support_formats`中的`codecs`数组: | 项 | 类型 | 内容 | 备注 | | ---- | ---- | --------------- | ---- | -| 0 | str | (?) | | -| 1 | str | (?) | | +| 0 | str | 例:av01.0.13M.08.0.110.01.01.01.0 | 使用AV1编码 | +| 1 | str | 例子:avc1.640034 | 使用AVC编码 | +| 2 | str | 例子:hev1.1.6.L153.90 | 使用HEVC编码 | --- @@ -189,7 +202,7 @@ B站的视频为http流媒体,需要对应的api以视频id获取取流url, | 项 | 类型 | 内容 | 备注 | | ---- | ---- | ----------------- | ------------------------- | -| 0 | obj | 视频分段1信息 | **注:仅flv方式具有分段** | +| 0 | obj | 视频分段1信息 | **注:仅flv、mp4方式具有分段** | | n | obj | 视频分段(n+1)信息 | | | …… | obj | …… | | @@ -250,48 +263,94 @@ curl -G 'http://api.bilibili.com/x/player/playurl' \ ```json { - "code": 0, - "message": "0", - "ttl": 1, - "data": { - "from": "local", - "result": "suee", - "message": "", + "code": 0, + "message": "0", + "ttl": 1, + "data": { + "from": "local", + "result": "suee", + "message": "", + "quality": 64, + "format": "flv720", + "timelength": 283801, + "accept_format": "hdflv2,flv,flv720,flv480,mp4", + "accept_description": [ + "高清 1080P+", + "高清 1080P", + "高清 720P", + "清晰 480P", + "流畅 360P" + ], + "accept_quality": [ + 112, + 80, + 64, + 32, + 16 + ], + "video_codecid": 7, + "seek_param": "start", + "seek_type": "offset", + "durl": [ + { + "order": 1, + "length": 283801, + "size": 70486426, + "ahead": "", + "vhead": "", + "url": "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/08/62/171776208/171776208_nb2-1-64.flv?e=ig8euxZM2rNcNbNMnwdVhwdlhbK3hwdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1662808778&gen=playurlv2&os=cosbv&oi=3719461929&trid=31dc1934e77141bfbdf5ae88aca0b29fu&mid=0&platform=pc&upsig=a4d5f1713e1ba313041d034a958c2414&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=0,3&agrr=1&bw=249068&logo=80000000", + "backup_url": [ + "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/08/62/171776208/171776208_nb2-1-64.flv?e=ig8euxZM2rNcNbNMnwdVhwdlhbK3hwdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1662808778&gen=playurlv2&os=cosbv&oi=3719461929&trid=31dc1934e77141bfbdf5ae88aca0b29fu&mid=0&platform=pc&upsig=a4d5f1713e1ba313041d034a958c2414&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=1,3&agrr=1&bw=249068&logo=40000000", + "https://upos-sz-mirrorcosb.bilivideo.com/upgcxcode/08/62/171776208/171776208_nb2-1-64.flv?e=ig8euxZM2rNcNbNMnwdVhwdlhbK3hwdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1662808778&gen=playurlv2&os=cosbbv&oi=3719461929&trid=31dc1934e77141bfbdf5ae88aca0b29fu&mid=0&platform=pc&upsig=7b8a6924948864944815ec0748cc108f&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform&bvc=vod&nettype=0&orderid=2,3&agrr=1&bw=249068&logo=40000000" + ] + } + ], + "support_formats": [ + { "quality": 112, "format": "hdflv2", - "timelength": 283701, - "accept_format": "hdflv2,flv,flv720,flv480,mp4", - "accept_description": [ - "高清 1080P+", - "高清 1080P", - "高清 720P", - "清晰 480P", - "流畅 360P" - ], - "accept_quality": [ - 112, - 80, - 64, - 32, - 16 - ], - "video_codecid": 7, - "seek_param": "start", - "seek_type": "offset", - "durl": [ - { - "order": 1, - "length": 283701, - "size": 219827828, - "ahead": "", - "vhead": "", - "url": "http://upos-sz-mirrorhw.bilivideo.com/upgcxcode/08/62/171776208/171776208-1-112.flv?e=ig8euxZM2rNcNbhMnwhVhwdlhzK3hzdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1589565412&gen=playurl&os=hwbv&oi=606631998&trid=e0fa5f9a7610440a871279a28fae85aau&platform=pc&upsig=5f469cb4c190ed54b89bd40cc37eddff&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=293793435&logo=80000000", - "backup_url": [ - "http://upos-sz-mirrorks3c.bilivideo.com/upgcxcode/08/62/171776208/171776208-1-112.flv?e=ig8euxZM2rNcNbhMnwhVhwdlhzK3hzdVhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1589565412&gen=playurl&os=ks3cbv&oi=606631998&trid=e0fa5f9a7610440a871279a28fae85aau&platform=pc&upsig=914ef921c5258e067c382601a4b1f81c&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=293793435&logo=40000000" - ] - } - ] - } + "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": "flv720", + "new_description": "720P 高清", + "display_desc": "720P", + "superscript": "", + "codecs": null + }, + { + "quality": 32, + "format": "flv480", + "new_description": "480P 清晰", + "display_desc": "480P", + "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 + } } ``` @@ -390,12 +449,13 @@ curl -G 'http://api.bilibili.com/x/player/playurl' \ | 字段 | 类型 | 内容 | 备注 | | --------------- | ----- | ---------- | ------------ | -| duration | num | 677 | 视频长度(秒) | +| duration | num | 视频长度 | 秒值 | | minBufferTime | num | 1.5 | 作用尚不明确 | | min_buffer_time | num | 1.5 | 作用尚不明确 | | video | array | 视频流信息 | | | audio | array | 音频流信息 | | -| dolby | | null | | +| dolby | obj | 杜比全景声音轨信息 | | +| flac | obj | 无损音轨信息 | | `dash`中的`video`数组: @@ -437,7 +497,7 @@ curl -G 'http://api.bilibili.com/x/player/playurl' \ | start_with_sap | num | **同上** | | | SegmentBase | obj | 见下表 | url 对应 m4s 文件中,头部的位置 | | segment_base | obj | **同上** | | -| codecid | num | 视频: 7或12
音频: 0 | 7=AVC,12=HEVC
出处是 FLV 格式里 VideoTag 中的 CodecId 域;
FLV 标准不支持 HEVC,但 codecId 值为 12 是各厂共识 | +| codecid | num | | | `video`数组中的对象中的`backup_url`数组: @@ -456,6 +516,44 @@ curl -G 'http://api.bilibili.com/x/player/playurl' \ > 常规 MP4 文件的索引信息放在 moov box 中,其中包含每一帧 (不止是关键帧) 的一些信息。在 DASH 方式下,关键帧信息移到了 sidx box 里,其他的则分散到了各个 moof (movie fragment) box 中。
对这里的文件结构感兴趣的,可以参考标准文档 ISO/IEC 14496-12,如果不想那么深入的话可以百度「MP4 文件结构」。 +`dash`中的`dolby`对象: + +此项为”杜比视界“视频独有 + +| 字段 | 类型 | 内容 | 备注 | +| -------------- | ---- | --------------------------------------------- | ------------------------------------------------------------ | +| type | num | 2 | | +| audio | array | 杜比音轨列表 | | + +`dolby`对象中的`audio`数组: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------------------ | ----------------------------------------------- | +| 0 | obj | 杜比音轨信息 | | + +`audio`数组中的对象: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------------------ | ----------------------------------------------- | +| id | num | 音轨代码,固定为:30250 | | +| base_url | str | 音频流url | | +| backup_url | array | 音频流备用url列表 | | +| bandwidth | num | 音频所需最低带宽 | | +| mime_type | num | 音频格式类型 | | +| codecs | num | 音频编码信息(ec-3) | | +| segment_base | obj | **同上** | | +| size | num | 音轨文件大小 |单位为Byte | + +`dash`中的`flac`对象: + +| 项 | 类型 | 内容 | 备注 | +| ---- | ---- | ------------------------ | ----------------------------------------------- | +| display | bool | 是否在播放器显示切换Hi-Res无损音轨按钮 | | +| audio | obj | 音频流信息 | | + +`flac`中的`audio`对象: + +同:`video`及`audio`数组中的对象 **示例:**