bilibili-API-collect/grpc_api/bilibili/app/playurl/v1/playurl.proto
2022-06-22 23:32:57 +08:00

671 lines
15 KiB
Protocol Buffer

syntax = "proto3";
package bilibili.app.playurl.v1;
// 视频url
service PlayURL {
// 视频地址
rpc PlayURL (PlayURLReq) returns (PlayURLReply);
// 投屏地址
rpc Project (ProjectReq) returns (ProjectReply);
// 播放页信息
rpc PlayView (PlayViewReq) returns (PlayViewReply);
// 编辑播放界面配置
rpc PlayConfEdit (PlayConfEditReq) returns (PlayConfEditReply);
// 获取播放界面配置
rpc PlayConf (PlayConfReq) returns (PlayConfReply);
}
//
message AB {
//
Glance glance = 1;
//
int32 group = 2;
}
// 配置项
message ArcConf {
// 是否支持
bool is_support = 1;
//
bool disabled = 2;
//
ExtraContent extra_content = 3;
}
// 业务类型
enum Business {
UNKNOWN = 0; // 未知类型
STORY = 1; // story业务
}
// Chronos灰度管理
message Chronos {
// 资源md5
string md5 = 1;
// 资源文件
string file = 2;
}
//
message ButtonStyle {
//
string text = 1;
//
string text_color = 2;
//
string bg_color = 3;
//
string jump_link = 4;
}
//
message CloudConf {
// 是否展示功能
bool show = 1;
// 设置类型
ConfType conf_type = 2;
//
FieldValue field_value = 3;
//
ConfValue conf_value = 4;
}
// 编码类型
enum CodeType {
NOCODE = 0; // 默认
CODE264 = 1; // H.264
CODE265 = 2; // H.265
CODEAV1 = 3; // av1
}
// 设置类型
enum ConfType {
NoType = 0; //
FLIPCONF = 1; // 镜像反转
CASTCONF = 2; // 视频投屏
FEEDBACK = 3; // 反馈
SUBTITLE = 4; // 字幕
PLAYBACKRATE = 5; // 播放速度
TIMEUP = 6; // 定时停止播放
PLAYBACKMODE = 7; // 播放方式
SCALEMODE = 8; // 画面尺寸
BACKGROUNDPLAY = 9; // 后台播放
LIKE = 10; // 顶
DISLIKE = 11; // 踩
COIN = 12; // 投币
ELEC = 13; // 充电
SHARE = 14; // 分享
SCREENSHOT = 15; // 截图
LOCKSCREEN = 16; // 锁屏
RECOMMEND = 17; // 推荐
PLAYBACKSPEED = 18; // 倍速
DEFINITION = 19; // 清晰度
SELECTIONS = 20; // 选集
NEXT = 21; // 下一集
EDITDM = 22; // 编辑弹幕
SMALLWINDOW = 23; // 小窗
SHAKE = 24; // 播放震动
OUTERDM = 25; // 外层面板弹幕设置
INNERDM = 26; // 三点内弹幕设置
PANORAMA = 27; // 全景
DOLBY = 28; // 杜比
COLORFILTER = 29; // 颜色滤镜
}
//
message ConfValue {
oneof value {
//
bool switch_val = 1;
//
int64 selected_val = 2;
}
}
// dash条目
message DashItem {
// 清晰度
uint32 id = 1;
// 主线流
string baseUrl = 2;
// 备用流
repeated string backup_url = 3;
// 带宽
uint32 bandwidth = 4;
// 编码id
uint32 codecid = 5;
// md5
string md5 = 6;
// 大小
uint64 size = 7;
// 帧率
string frame_rate = 8;
//
string widevine_pssh = 9;
}
// dash视频流
message DashVideo {
// 主线流
string base_url = 1;
// 备用流
repeated string backup_url = 2;
// 带宽
uint32 bandwidth = 3;
// 编码id
uint32 codecid = 4;
// md5
string md5 = 5;
// 大小
uint64 size = 6;
// 伴音质量id
uint32 audioId = 7;
// 是否非全二压
bool no_rexcode = 8;
// 码率
string frame_rate = 9;
// 宽度
int32 width = 10;
// 高度
int32 height = 11;
//
string widevine_pssh = 12;
}
// 杜比伴音信息
message DolbyItem {
enum Type {
NONE = 0; // NONE
COMMON = 1; // 普通杜比音效
ATMOS = 2; // 全景杜比音效
}
// 杜比类型
Type type = 1;
// 音频流
DashItem audio = 2;
}
// 事件
message Event {
// 震动
Shake shake = 1;
}
//
message ExtraContent {
//
string disabled_reason = 1;
//
int64 disabled_code = 2;
}
// 配置字段值
message FieldValue {
oneof value {
// 开关
bool switch = 1;
}
}
// 清晰度描述
message FormatDescription {
// 清晰度
int32 quality = 1;
// 清晰度格式
string format = 2;
// 清晰度描述
string description = 3;
// 新描述
string new_description = 4;
// 选中态的清晰度描述
string display_desc = 5;
// 选中态的清晰度描述的角标
string superscript = 6;
}
//
message Glance {
//
bool can_watch = 1;
//
int64 times = 2;
//
int64 duration = 3;
}
//
enum Group {
UnknownGroup = 0; //
A = 1; //
B = 2; //
C = 3; //
}
// 禁用功能配置
message PlayAbilityConf {
CloudConf background_play_conf = 1; // 后台播放
CloudConf flip_conf = 2; // 镜像反转
CloudConf cast_conf = 3; // 投屏
CloudConf feedback_conf = 4; // 反馈
CloudConf subtitle_conf = 5; // 字幕
CloudConf playback_rate_conf = 6; // 播放速度
CloudConf time_up_conf = 7; // 定时停止
CloudConf playback_mode_conf = 8; // 播放方式
CloudConf scale_mode_conf = 9; // 画面尺寸
CloudConf like_conf = 10; // 赞
CloudConf dislike_conf = 11; // 踩
CloudConf coin_conf = 12; // 投币
CloudConf elec_conf = 13; // 充电
CloudConf share_conf = 14; // 分享
CloudConf screen_shot_conf = 15; // 截图
CloudConf lock_screen_conf = 16; // 锁定
CloudConf recommend_conf = 17; // 相关推荐
CloudConf playback_speed_conf = 18; // 播放速度
CloudConf definition_conf = 19; // 清晰度
CloudConf selections_conf = 20; // 选集
CloudConf next_conf = 21; // 下一集
CloudConf edit_dm_conf = 22; // 编辑弹幕
CloudConf small_window_conf = 23; // 小窗
CloudConf shake_conf = 24; // 震动
CloudConf outer_dm_conf = 25; // 外层面板弹幕设置
CloudConf innerDmDisable = 26; // 三点内弹幕设置
CloudConf inner_dm_conf = 27; // 一起看入口
CloudConf dolby_conf = 28; // 杜比音效
CloudConf color_filter_conf = 29; // 颜色滤镜
}
// 播放控件稿件配置
message PlayArcConf {
ArcConf background_play_conf = 1; // 后台播放
ArcConf flip_conf = 2; // 镜像反转
ArcConf cast_conf = 3; // 投屏
ArcConf feedback_conf = 4; // 反馈
ArcConf subtitle_conf = 5; // 字幕
ArcConf playback_rate_conf = 6; // 播放速度
ArcConf time_up_conf = 7; // 定时停止
ArcConf playback_mode_conf = 8; // 播放方式
ArcConf scale_mode_conf = 9; // 画面尺寸
ArcConf like_conf = 10; // 赞
ArcConf dislike_conf = 11; // 踩
ArcConf coin_conf = 12; // 投币
ArcConf elec_conf = 13; // 充电
ArcConf share_conf = 14; // 分享
ArcConf screen_shot_conf = 15; // 截图
ArcConf lock_screen_conf = 16; // 锁定
ArcConf recommend_conf = 17; // 相关推荐
ArcConf playback_speed_conf = 18; // 播放速度
ArcConf definition_conf = 19; // 清晰度
ArcConf selections_conf = 20; // 选集
ArcConf next_conf = 21; // 下一集
ArcConf edit_dm_conf = 22; // 编辑弹幕
ArcConf small_window_conf = 23; // 小窗
ArcConf shake_conf = 24; // 震动
ArcConf outer_dm_conf = 25; // 外层面板弹幕设置
ArcConf inner_dm_conf = 26; // 三点内弹幕设置
ArcConf panorama_conf = 27; // 一起看入口
ArcConf dolby_conf = 28; // 杜比音效
ArcConf screen_recording_conf = 29; // 屏幕录制
ArcConf color_filter_conf = 30; // 颜色滤镜
}
// 编辑播放界面配置-响应
message PlayConfEditReply {
}
// 编辑播放界面配置-请求
message PlayConfEditReq {
// 播放界面配置
repeated PlayConfState play_conf = 1;
}
// 获取播放界面配置-响应
message PlayConfReply {
//播放控件用户自定义配置
PlayAbilityConf play_conf = 1;
}
// 获取播放界面配置-请求
message PlayConfReq {
}
// 播放界面配置
message PlayConfState {
// 设置类型
ConfType conf_type = 1;
// 是否隐藏
bool show = 2;
// 配置字段值
FieldValue field_value = 3;
//
ConfValue conf_value = 4;
}
// 错误码
enum PlayErr {
NoErr = 0; //
WithMultiDeviceLoginErr = 1; // 管控类型的错误码
}
//
message PlayLimit {
//
PlayLimitCode code = 1;
//
string message = 2;
//
string sub_message = 3;
//
ButtonStyle button = 4;
}
//
enum PlayLimitCode {
PLCUnkown = 0; //
PLCUgcNotPayed = 1; //
}
// 视频地址-回复
message PlayURLReply {
// 清晰的
uint32 quality = 1;
// 格式
string format = 2;
// 总时长(单位为ms)
uint64 timelength = 3;
// 编码id
uint32 video_codecid = 4;
// 视频流版本
uint32 fnver = 5;
// 视频流格式
uint32 fnval = 6;
// 是否支持投影
bool video_project = 7;
// 分段视频流列表
repeated ResponseUrl durl = 8;
// dash数据
ResponseDash dash = 9;
// 是否非全二压
int32 no_rexcode = 10;
// 互动视频升级提示
UpgradeLimit upgrade_limit = 11;
// 清晰度描述列表
repeated FormatDescription support_formats = 12;
// 视频格式
VideoType type = 13;
}
// 视频地址-请求
message PlayURLReq {
// 稿件avid
int64 aid = 1;
// 视频cid
int64 cid = 2;
// 清晰度
int64 qn = 3;
// 视频流版本
int32 fnver = 4;
// 视频流格式
int32 fnval = 5;
// 下载模式
// 0:播放 1:flv下载 2:dash下载
uint32 download = 6;
// 流url强制是用域名
// 0:允许使用ip 1:使用http 2:使用https
int32 force_host = 7;
// 是否4K
bool fourk = 8;
// 当前页spm
string spmid = 9;
// 上一页spm
string from_spmid = 10;
}
// 播放页信息-回复
message PlayViewReply {
// 视频流信息
VideoInfo video_info = 1;
// 播放控件用户自定义配置
PlayAbilityConf play_conf = 2;
// 互动视频升级提示
UpgradeLimit upgrade_limit = 3;
// Chronos灰度管理
Chronos chronos = 4;
// 播放控件稿件配置
PlayArcConf play_arc = 5;
// 事件
Event event = 6;
//
AB ab = 7;
//
PlayLimit play_limit = 8;
}
// 播放页信息-请求
message PlayViewReq {
// 稿件avid
int64 aid = 1;
// 视频cid
int64 cid = 2;
// 清晰度
int64 qn = 3;
// 视频流版本
int32 fnver = 4;
// 视频流格式
int32 fnval = 5;
// 下载模式
// 0:播放 1:flv下载 2:dash下载
uint32 download = 6;
// 流url强制是用域名
// 0:允许使用ip 1:使用http 2:使用https
int32 force_host = 7;
// 是否4K
bool fourk = 8;
// 当前页spm
string spmid = 9;
// 上一页spm
string from_spmid = 10;
// 青少年模式
int32 teenagers_mode = 11;
// 编码
CodeType prefer_codec_type = 12;
// 业务类型
Business business = 13;
//
int64 voice_balance = 14;
}
// 投屏地址-响应
message ProjectReply {
PlayURLReply project = 1;
}
// 投屏地址-请求
message ProjectReq {
// 稿件avid
int64 aid = 1;
// 视频cid
int64 cid = 2;
// 清晰度
int64 qn = 3;
// 视频流版本
int32 fnver = 4;
// 视频流格式
int32 fnval = 5;
// 下载模式
// 0:播放 1:flv下载 2:dash下载
uint32 download = 6;
// 流url强制是用域名
// 0:允许使用ip 1:使用http 2:使用https
int32 force_host = 7;
// 是否4K
bool fourk = 8;
// 当前页spm
string spmid = 9;
// 上一页spm
string from_spmid = 10;
// 使用协议
// 0:默认乐播 1:自建协议 2:云投屏 3:airplay
int32 protocol = 11;
// 投屏设备
// 0:默认其他 1:OTT设备
int32 device_type = 12;
}
// dash数据
message ResponseDash {
// dash视频流
repeated DashItem video = 1;
// dash伴音流
repeated DashItem audio = 2;
}
// 分段流条目
message ResponseUrl {
// 分段序号
uint32 order = 1;
// 分段时长
uint64 length = 2;
// 分段大小
uint64 size = 3;
// 主线流
string url = 4;
// 备用流
repeated string backup_url = 5;
// md5
string md5 = 6;
}
//分段视频流
message SegmentVideo {
//分段视频流列表
repeated ResponseUrl segment = 1;
}
// 震动
message Shake {
// 文件地址
string file = 1;
}
// 视频流信息
message Stream {
// 元数据
StreamInfo stream_info = 1;
// 流数据
oneof content {
// dash流
DashVideo dash_video = 2;
// 分段流
SegmentVideo segment_video = 3;
}
}
// 流媒体元数据
message StreamInfo {
// 清晰度
uint32 quality = 1;
// 格式
string format = 2;
// 格式描述
string description = 3;
// 错误码
PlayErr err_code = 4;
// 不满足条件信息
StreamLimit limit = 5;
// 是否需要vip
bool need_vip = 6;
// 是否需要登录
bool need_login = 7;
// 是否完整
bool intact = 8;
// 是否非全二压
bool no_rexcode = 9;
// 清晰度属性位
int64 attribute = 10;
// 新版格式描述
string new_description = 11;
// 格式文字
string display_desc = 12;
// 新版格式描述备注
string superscript = 13;
}
// 清晰度不满足条件信息
message StreamLimit {
// 标题
string title = 1;
// 跳转地址
string uri = 2;
// 提示信息
string msg = 3;
}
// 互动视频升级按钮信息
message UpgradeButton {
// 标题
string title = 1;
// 链接
string link = 2;
}
// 互动视频升级提示
message UpgradeLimit {
// 错误码
int32 code = 1;
// 错误信息
string message = 2;
// 图片url
string image = 3;
// 按钮信息
UpgradeButton button = 4;
}
// 视频url信息
message VideoInfo {
// 视频清晰度
uint32 quality = 1;
// 视频格式
string format = 2;
// 视频时长
uint64 timelength = 3;
// 视频编码id
uint32 video_codecid = 4;
// 视频流
repeated Stream stream_list = 5;
// 伴音流
repeated DashItem dash_audio = 6;
// 杜比伴音流
DolbyItem dolby = 7;
//
VolumeInfo volume = 8;
}
// 视频类型
enum VideoType {
Unknown_VALUE = 0; //
FLV_VALUE = 1; // flv格式
DASH_VALUE = 2; // dash格式
MP4_VALUE = 3; // mp4格式
}
//
message VolumeInfo {
//
double measured_i = 1;
//
double measured_lra = 2;
//
double measured_tp = 3;
//
double measured_threshold = 4;
//
double target_offset = 5;
//
double target_i = 6;
//
double target_tp = 7;
}