view.proto

syntax = "proto3";
package bilibili.app.view.v1;

import "google/protobuf/any.proto";
import "bilibili/app/archive/middleware/v1/preload.proto";
import "bilibili/app/archive/v1/archive.proto";

service View {
    // 视频页详情页
    rpc View (ViewReq) returns (ViewReply);
    // 视频播放过程中的数据
    rpc ViewProgress (ViewProgressReq) returns (ViewProgressReply);
    // 短视频下载
    rpc ShortFormVideoDownload (ShortFormVideoDownloadReq) returns (ShortFormVideoDownloadReply);
    // 点击播放器卡片事件
    rpc ClickPlayerCard (ClickPlayerCardReq) returns (NoReply);
    // 点击大型活动页预约
    rpc ClickActivitySeason (ClickActivitySeasonReq) returns (NoReply);
    // 合集详情页
    rpc Season (SeasonReq) returns (SeasonReply);
    // 播放器卡片曝光
    rpc ExposePlayerCard (ExposePlayerCardReq) returns (NoReply);
    // 点击签订契约
    rpc AddContract (AddContractReq) returns (NoReply);
}

// 空回复
message NoReply {}

// 视频页详情页-请求
message ViewReq {
    // 稿件avid(av/bv任选其一)
    int64 aid = 1;
    // 稿件bvid(av/bv任选其一)
    string bvid = 2;
    // 来源
    string from = 3;
    // AI trackid
    string trackid = 4;
    // 广告扩展数据
    string ad_extra = 5;
    // 清晰度(旧版)
    int32 qn = 6;
    // 流版本(旧版)
    int32 fnver = 7;
    // 流类型(旧版)
    int32 fnval = 8;
    // 是否强制使用域名(旧版)
    int32 force_host = 9;
    // 是否允许4K(旧版)
    int32 fourk = 10;
    // 当前页面spm
    string spmid = 11;
    // 上一页面spm
    string from_spmid = 12;
    //
    int32 autoplay = 13;
    // 视频秒开参数
    bilibili.app.archive.middleware.v1.PlayerArgs player_args = 14;
}

// 视频页信息-响应
message ViewReply {
    // 稿件信息
    bilibili.app.archive.v1.Arc arc = 1;
    // 分P信息
    repeated ViewPage pages = 2;
    // UP主扩展信息 ("OnwerExt"为源码中拼写错误)
    OnwerExt owner_ext = 3;
    // 稿件用户操作状态
    ReqUser req_user = 4;
    // 稿件TAG
    repeated Tag tag = 5;
    // TAG对应的图标
    map<string, TIcon> t_icon = 6;
    // 稿件映射的PGC剧集信息
    Season season = 7;
    // 充电排行
    ElecRank elec_rank = 8;
    // 历史观看进度
    History history = 9;
    // 视频相关推荐列表
    repeated Relate relates = 10;
    // 不感兴趣原因
    Dislike dislike = 11;
    // 播放图标动画配置档
    PlayerIcon player_icon = 12;
    //
    string vip_active = 13;
    // 稿件bvid
    string bvid = 14;
    // 获得荣誉信息
    Honor honor = 15;
    // 相关推荐顶部tab
    repeated RelateTab relate_tab = 16;
    // 参与的活动页面url
    string activity_url = 17;
    // 稿件引用bgm列表
    repeated Bgm bgm = 18;
    // 联合投稿成员列表
    repeated Staff staff = 19;
    // 争议信息
    string argue_msg = 20;
    // 短链接
    string short_link = 21;
    // 播放实验
    // 1:相关推荐自动播放
    int32 play_param = 22;
    // 标签
    Label label = 23;
    // UGC视频合集信息
    UgcSeason ugc_season = 24;
    // 配置信息
    Config config = 25;
    // 分享副标题(已观看xxx次)
    string share_subtitle = 26;
    // 互动视频信息
    Interaction interaction = 27;
    // 错误码
    // DEFAULT:正常 CODE404:视频被UP主删除
    ECode ecode = 28;
    // 404页信息
    CustomConfig custom_config = 29;
    // 广告
    repeated CM cms = 30;
    // 广告配置
    CMConfig cm_config = 31;
    // 播放页定制tab
    Tab tab = 32;
    // 排行榜
    Rank rank = 33;
    // 免流面板定制
    TFPanelCustomized tf_panel_customized = 34;
    // UP主发起活动
    UpAct up_act = 35;
    // 用户装扮
    UserGarb user_garb = 36;
    // 大型活动合集
    ActivitySeason activity_season = 37;
    // 评论样式
    string badge_url = 38;
    // 直播预约信息
    LiveOrderInfo live_order_info = 39;
    // 稿件简介v2
    repeated DescV2 desc_v2 = 40;
}

// 直播预约信息
message LiveOrderInfo {
    // 预约id
    int64 sid = 1;
    // 预约条文案
    string text = 2;
    // 直播开始时间
    int64 live_plan_start_time = 3;
    // 是否预约
    bool is_follow = 4;
}

// 大型活动合集
message ActivitySeason {
    // 稿件信息
    bilibili.app.archive.v1.Arc arc = 1;
    // 分P信息
    repeated ViewPage pages = 2;
    //("OnwerExt"为源码中拼写错误)
    OnwerExt owner_ext = 3;
    // 稿件用户操作状态
    ReqUser req_user = 4;
    // 充电排行
    ElecRank elec_rank = 5;
    // 历史观看进度
    History history = 6;
    // 稿件bvid
    string bvid = 7;
    // 获得荣誉信息
    Honor honor = 8;
    // 联合投稿成员列表
    repeated Staff staff = 9;
    // UGC视频合集信息
    UgcSeason ugc_season = 10;
    // 播放页定制tab
    Tab tab = 11;
    // 排行榜
    Rank rank = 12;
    // 预约模块
    Order order = 13;
    // 是否支持点踩
    bool support_dislike = 14;
    // 相关推荐(运营配置+AI推荐)
    OperationRelate operation_relate = 15;
    // 活动页资源包
    ActivityResource activity_resource = 16;
    // 短链接
    string short_link = 17;
    // 标签
    Label label = 18;
    // 不感兴趣原因
    Dislike dislike = 19;
    // 播放图标动画配置档
    PlayerIcon player_icon = 20;
    // 分享副标题(已观看xxx次)
    string share_subtitle = 21;
    // 广告配置
    CMConfig cm_config = 22;
    // 免流面板定制
    TFPanelCustomized tf_panel_customized = 23;
    // 争议信息
    string argue_msg = 24;
    // 错误码
    // DEFAULT:正常 CODE404:视频被UP主删除
    ECode ecode = 25;
    // 404页信息
    CustomConfig custom_config = 26;
    // 评论样式
    string badge_url = 27;
    // 稿件简介v2
    repeated DescV2 desc_v2 = 28;
}

// 特殊稿件简介
message DescV2 {
    // 文本内容
    string text = 1;
    // 文本类型
    DescType type = 2;
    // 点击跳转链接
    string uri = 3;
    // 资源ID
    int64 rid = 4;
}

// 枚举-文本类型
enum DescType {
    DescTypeUnknown = 0; // 占位
    DescTypeText = 1;    // 文本
    DescTypeAt = 2;      // @
}

// 活动页资源包
message ActivityResource {
    // mod资源池名称
    string mod_pool_name = 1;
    // mod资源名称
    string mod_resource_name = 2;
    // 背景色
    string bg_color = 3;
    // 选中背景色
    string selected_bg_color = 4;
    // 文字颜色
    string text_color = 5;
    // 浅字色
    string light_text_color = 6;
    // 深字色
    string dark_text_color = 7;
    // 分割线色
    string divider_color = 8;
}

// 相关推荐(运营配置+AI推荐)
message OperationRelate {
    // 模块标题
    string title = 1;
    // 相关推荐模块内容
    repeated RelateItem relate_item = 2;
    // AI相关推荐
    repeated Relate ai_relate_item = 3;
}

// 相关推荐内容
message RelateItem {
    // 跳链
    string url = 1;
    // 封面
    string cover = 2;
}

// 预约模块
message Order {
    // 用户操作态
    bool status = 1;
    // 模块标题
    string title = 2;
    // 按钮文字 未操作
    string button_title = 3;
    // 按钮文字 已操作
    string button_selected_title = 4;
    // 合集播放数
    int64 season_stat_view = 5;
    // 合集弹幕数
    int64 season_stat_danmaku = 6;
    // 预约类型(点击时透传,直播开始前预约活动,直播开始后收藏合集)
    BizType order_type = 7;
    // 预约业务参数
    oneof order_param {
        // 预约活动参数
        BizReserveActivityParam reserve = 8;
        // 收藏合集参数
        BizFavSeasonParam fav_season = 9;
    }
    // 合集简介
    string intro = 10;
}

// 业务类型
enum BizType {
    BizTypeNone = 0;            //
    BizTypeFollowVideo = 1;     // 追番追剧
    BizTypeReserveActivity = 2; // 预约活动
    BizTypeJumpLink = 3;        // 跳转链接
    BizTypeFavSeason = 4;       // 收藏合集
    BizTypeReserveGame = 5;     // 预约游戏
}

// 用户装扮信息
message UserGarb {
    // 点赞动画url
    string urlImageAniCut = 1;
}

// 排行榜
message Rank {
    // 排行榜icon
    string icon = 1;
    // 排行榜icon 夜间模式
    string icon_night = 2;
    // 排行榜文案
    string text = 3;
}

// TAB
message Tab {
    // 背景图片
    string background = 1;
    // 跳转类型
    TabOtype otype = 2;
    // 类型id
    int64 oid = 3;
    // 跳转url
    string uri = 4;
    // 样式
    TabStyle style = 5;
    // 文字
    string text = 6;
    // 未选中态字色
    string text_color = 7;
    // 选中态字色
    string text_color_selected = 8;
    // 图片
    string pic = 9;
    // 后台配置自增
    int64 id = 10;
}

// TAB样式
enum TabStyle {
    UnknownStyle = 0; // 未知样式
    Text = 1;         // 文字样式
    Pic = 2;          // 图片样式
}

// TAB跳转类型
enum TabOtype {
    UnknownOtype = 0; // 未知类型
    URL = 1;          // url链接
    TopicNA = 2;      // native话题活动
}

// 错误代码
enum ECode {
    DEFAULT = 0; // 正常
    CODE404 = 1; // 稿件被UP主删除
}

// 分P信息
message ViewPage {
    // 分P基本信息
    bilibili.app.archive.v1.Page page = 1;
    // 分P对应的音频稿件
    Audio audio = 2;
    // 分P弹幕信息
    DM dm =3;
    // 下载文案
    string download_title = 4;
    // 分P完整标题(视频标题+分P标题)
    string download_subtitle = 5;
}

// 音频稿件信息
message Audio {
    // 音频标题
    string title = 1;
    // 音频封面url
    string cover_url = 2;
    // 音频auid
    int64 song_id = 3;
    // 音频播放量
    int64 play_count = 4;
    // 音频评论数
    int64 reply_count = 5;
    // 音频作者UID
    int64 upper_id = 6;
    // 进入按钮文案
    string entrance = 7;
    //
    int64 song_attr = 8;
}

// 分P弹幕信息
message DM {
    // 分P是否关闭弹幕
    // 0:正常 1:关闭
    bool closed = 1;
    //
    bool real_name = 2;
    // 分P弹幕总数
    int64 count = 3;
}

// UP主扩展信息 ("OnwerExt"为源码中拼写错误)
message OnwerExt {
    // 认证信息
    OfficialVerify official_verify = 1;
    // 直播信息
    Live live = 2;
    // 会员信息
    Vip vip = 3;
    //
    repeated int64 assists = 4;
    // 粉丝数
    int64 fans = 5;
    // 总投稿数
    string arc_count = 6;
}

// 认证信息
message OfficialVerify {
    // 认证类型
    // 0:个人认证 1:官方认证
    int32 type = 1;
    //认证名称
    string desc = 2;
}

// 直播信息
message Live {
    // 主播UID
    int64 mid = 1;
    // 直播间id
    int64 roomid = 2;
    // 直播间url
    string uri = 3;
    //
    string endpage_uri = 4;
}

// 会员信息
message Vip {
    //会员类型
    int32 type = 1;
    //到期时间
    int64 due_date = 2;
    //
    string due_remark = 3;
    //
    int32 access_status = 4;
    //会员状态
    int32 vip_status = 5;
    //
    string vip_status_warn = 6;
    //
    int32 theme_type = 7;
    //
    VipLabel label = 8;
}

// 会员类型标签
message VipLabel {
    //
    string path = 1;
    //
    string text = 2;
    //
    string label_theme = 3;
}

// 用户操作状态
message ReqUser {
    // 用户是否关注UP
    int32 attention = 1;
    // UP是否关注用户
    int32 guest_attention = 2;
    // 是否收藏
    int32 favorite = 3;
    // 是否点赞
    int32 like = 4;
    // 是否点踩
    int32 dislike = 5;
    // 是否投币
    int32 coin = 6;
    // 关注等级
    int32 attention_level = 7;
    // 是否收藏合集
    int32 fav_season = 8;
}

// TAG信息
message Tag {
    // TAD id
    int64 id = 1;
    // TAG名
    string name = 2;
    //
    int64 likes = 3;
    //
    int64 hates = 4;
    //
    int32 liked = 5;
    //
    int32 hated = 6;
    // TAG页面uri
    string uri = 7;
    // TAG类型
    // common:普通 new:话题 act:活动
    string tag_type = 8;
}

// TAG图标信息
message TIcon {
    // TAG图标url
    string icon = 1;
}

// 剧集信息
message Season {
    //
    string allow_download = 1;
    // 剧集ssid
    int64 season_id = 2;
    // 是否重定向跳转
    int32 is_jump = 3;
    // 剧集标题
    string title = 4;
    // 剧集封面url
    string cover = 5;
    // 剧集是否完结
    int32 is_finish = 6;
    // 最新一话epid
    int64 newest_ep_id = 7;
    // 最新一话标题
    string newest_ep_index = 8;
    // 总集数
    int64 total_count = 9;
    // 更新星期日
    int32 weekday = 10;
    // 用户追番标志
    UserSeason user_season = 11;
    //
    SeasonPlayer player = 12;
    // 单集页面url
    string ogv_playurl = 13;
}

// 用户追番标志
message UserSeason {
    // 关注状态
    // 0:未关注 1:已关注
    string attention = 1;
}

//
message SeasonPlayer {
    //
    int64 aid = 1;
    //
    string vid = 2;
    //
    int64 cid = 3;
    //
    string from = 4;
}

// 充电排行信息
message ElecRank {
    // 充电排行列表
    repeated ElecRankItem list = 1;
    // 充电用户数
    int64 count = 2;
}

// 充电用户信息
message ElecRankItem {
    // 用户头像url
    string avatar = 1;
    // 用户昵称
    string nickname = 2;
    // 充电留言
    string message = 3;
    // 用户mid
    int64 mid = 4;
}

// 稿件观看进度
message History {
    // 播放进度分P cid
    int64 cid = 1;
    // 播放进度时间
    // 0:未观看 -1:已看完 正整数:播放时间进度
    int64 progress = 2;
}

//相关推荐项
message Relate {
    //
    int64 aid = 1;
    // 封面url
    string pic = 2;
    // 标题
    string title = 3;
    // UP主信息
    bilibili.app.archive.v1.Author author = 4;
    // 稿件状态数
    bilibili.app.archive.v1.Stat stat = 5;
    // 时长
    int64 duration = 6;
    // 跳转类型
    // special:pgc视频 av:稿件视频 cm:广告 game:游戏
    string goto = 7;
    // 参数(如av号等)
    string param = 8;
    // 跳转uri
    string uri = 9;
    //
    string jump_url = 10;
    // 评分
    double rating = 11;
    //
    string reserve = 12;
    // 来源标识
    // operation:管理员添加
    string from = 13;
    // 备注
    string desc = 14;
    //
    string rcmd_reason = 15;
    // 标志文字
    string badge = 16;
    // 1P cid
    int64 cid = 17;
    //
    int32 season_type = 18;
    //
    int32 rating_count = 19;
    // 标签文案
    string tag_name = 20;
    // 游戏礼包信息
    PackInfo pack_info = 21;
    //
    Notice notice = 22;
    // 按钮信息
    Button button = 23;
    // spm追踪id
    string trackid = 24;
    // 游戏卡片新样式
    int32 new_card = 25;
    // 推荐理由样式
    ReasonStyle rcmd_reason_style = 26;
    //
    string cover_gif = 27;
    // 广告
    CM cm = 28;
    // 游戏卡字段
    // 0:下载 1:预约(跳过详情) 2:预约 3:测试 4:测试+预约 5:跳过详情页
    int64 reserve_status = 29;
}

// 推荐理由样式
message ReasonStyle {
    //
    string text = 1;
    // 日间模式文字
    string text_color = 2;
    //
    string bg_color = 3;
    //
    string border_color = 4;
    // 夜间模式文字
    string text_color_night = 5;
    //
    string bg_color_night = 6;
    //
    string border_color_night = 7;
    // 1:填充 2:描边 3:填充 + 描边 4:背景不填充 + 背景不描边
    int32 bg_style = 8;
    //
    int32 selected = 9;
}

//游戏礼包信息
message PackInfo {
    // 礼包标题
    string title = 1;
    // 礼包页uri
    string uri = 2;
}

//
message Notice {
    //
    string title = 1;
    //
    string desc = 2;
}

//
message Button {
    // 按钮文案
    string title = 1;
    // 跳转uri
    string uri = 2;
}

// 不喜欢原因
message Dislike {
    // 标题
    string title = 1;
    //
    string subtitle = 2;
    // 原因项列表
    repeated DislikeReasons reasons = 3;
}

// 不喜欢原因项
message DislikeReasons {
    // 类型
    // 1:全部类型 3:TAG 4:UP主
    int64 id = 1;
    // 相关UP主mid
    int64 mid = 2;
    // 相关分区tid
    int32 rid = 3;
    // 相关TAG id
    int64 tag_id = 4;
    // 相关名称
    string name = 5;
}

// 进度条动画配置
message PlayerIcon {
    // 拖动动画配置档url
    string url1 = 1;
    // 拖动动画配置档hash
    string hash1 = 2;
    // 松手动画配置档url
    string url2 = 3;
    // 松手动画配置档hash
    string hash2 = 4;
}

// 广告
message CM {
    // 广告数据(需解包)
    google.protobuf.Any source_content = 1;
}

//
message AdInfo {
    //
    int64 creative_id = 1;
    //
    int64 creative_type = 2;
    //
    CreativeContent creative_content = 3;
    //
    string ad_cb = 4;
    //
    int32 card_type = 5;
    //
    bytes Extra = 6;
}

//
message CreativeContent {
    //
    string title = 1;
    //
    string description = 2;
    //
    string button_title = 3;
    //
    int64 video_id = 4;
    //
    string username = 5;
    //
    string image_url = 6;
    //
    string image_md5 = 7;
    //
    string log_url = 8;
    //
    string log_md5 = 9;
    //
    string url = 10;
    //
    string click_url = 11;
    //
    string show_url = 12;
}

// 广告配置
message CMConfig {
    // 广告配置数据(需要二次解包)
    google.protobuf.Any ads_control = 1;
}

//
message Asset {
    //
    int32 paid = 1;
    //
    int64 price = 2;
    //
    AssetMsg msg = 3;
    //
    AssetMsg preview_msg = 4;
}

//
message AssetMsg {
    //
    string desc1 = 1;
    //
    string desc2 = 2;
}

// 视频引用的bgm音频
message Bgm {
    // 音频auid
    int64 sid = 1;
    // 音频作者mid
    int64 mid = 2;
    // 音频标题
    string title = 3;
    // 音频作者昵称
    string author = 4;
    // bgm页面url
    string jumpUrl = 5;
    // 音频封面url
    string cover = 6;
}

// 合作成员信息
message Staff {
    // 成员mid
    int64 mid = 1;
    // 成员角色
    string title = 2;
    // 成员头像url
    string face = 3;
    // 成员昵称
    string name = 4;
    // 成员官方信息
    OfficialVerify official_verify = 5;
    // 成员会员信息
    Vip vip = 6;
    // 是否关注该成员
    int32 attention = 7;
    //
    int32 label_style = 8;
}

//
message Label {
    //
    int32 type = 1;
    //
    string uri = 2;
}

//
enum SeasonType {
    Unknown = 0; //
    Base = 1;    //
    Good = 2;    //
}

// UGC视频合集信息
message UgcSeason {
    // 合集id
    int64 id = 1;
    // 合集标题
    string title = 2;
    // 合集封面url
    string cover = 3;
    // 合集简介
    string intro = 4;
    // 小节列表
    repeated Section sections = 5;
    // 合集状态数
    UgcSeasonStat stat = 6;
    // 标签字色
    string label_text = 7;
    // 标签背景色
    string label_text_color = 8;
    // 标签夜间字色
    string label_bg_color = 9;
    // 标签夜间背景色
    string label_text_night_color = 10;
    // 右侧描述文案
    string label_bg_night_color = 11;
    // 按钮文案
    string descRight = 12;
    // 分集总数
    int64 ep_count = 13;
    // 合集类型
    SeasonType season_type = 14;
}

// ugc视频合集状态数
message UgcSeasonStat {
    // 合集id
    int64 season_id = 1;
    // 观看数
    int32 view = 2;
    // 弹幕数
    int32 danmaku = 3;
    // 评论数
    int32 reply = 4;
    // 收藏数
    int32 fav = 5;
    // 投币数
    int32 coin = 6;
    // 分享数
    int32 share = 7;
    // 当前排名
    int32 now_rank = 8;
    // 历史最高排名
    int32 his_rank = 9;
    // 总计点赞
    int32 like = 10;
}

// 视频合集小节信息
message Section {
    // 小节id
    int64 id = 1;
    // 小节标题
    string title = 2;
    // 小节类型
    // 0:其他 1:正片
    int64 type = 3;
    // 单话列表
    repeated Episode episodes = 4;
}

//视频合集单话信息
message Episode {
    // 合集单话id
    int64 id = 1;
    // 稿件avid
    int64 aid = 2;
    // 视频1P cid
    int64 cid = 3;
    // 稿件标题
    string title = 4;
    // 稿件封面url
    string cover = 5;
    // 投稿时间显示文案
    string coverRightText = 6;
    // 视频分P信息
    bilibili.app.archive.v1.Page page = 7;
    // 视频状态数
    bilibili.app.archive.v1.Stat stat = 8;
    // 稿件bvid
    string bvid = 9;
    // 稿件UP主信息
    bilibili.app.archive.v1.Author author = 10;
}

//
message Config {
    // 下方推荐项标题
    string relates_title = 1;
    //
    int32 relates_style = 2;
    //
    int32 relate_gif_exp = 3;
    //
    int32 end_page_half = 4;
    //
    int32 end_page_full = 5;
    // 退出是否自动小窗
    bool auto_swindow = 6;
}

//
message Interaction {
    //
    Node history_node = 1;
    //
    int64 graph_version = 2;
    //
    string msg = 3;
    //
    string evaluation = 4;
    //
    int64 mark = 5;
}

// 稿件获得荣誉信息
message Honor {
    // 荣誉栏图标url
    string icon = 1;
    // 荣誉栏图标url 夜间模式
    string icon_night = 2;
    // 荣誉文案
    string text = 3;
    // 荣誉副文案
    string text_extra = 4;
    // 标题颜色
    string text_color = 5;
    // 标题颜色 夜间模式
    string text_color_night = 6;
    // 背景颜色
    string bg_color = 7;
    // 背景颜色 夜间模式
    string bg_color_night = 8;
    // 跳转uri
    string url = 9;
    // 跳转角标文案
    string url_text = 10;
}

//
message RelateTab {
    //
    string id = 1;
    //
    string title = 2;
}

//
message UpAct {
    //
    int64 sid = 1;
    //
    int64 mid = 2;
    //
    string title = 3;
    //
    string statement = 4;
    //
    string image = 5;
    //
    string url = 6;
    //
    string button = 7;
}

//
message Node {
    //
    int64 node_id = 1;
    //
    string title = 2;
    //
    int64 cid = 3;
}

// 稿件播放中数据-请求
message ViewProgressReq {
    // 稿件avid
    int64 aid = 1;
    // 视频cid
    int64 cid = 2;
    // UP主mid
    int64 up_mid = 3;
}

// 稿件播放中数据-回复
message ViewProgressReply {
    // 视频引导信息
    VideoGuide video_guide = 1;
    // Chronos灰度管理
    Chronos chronos = 2;
}

// Chronos灰度管理
message Chronos {
    // 资源包md5
    string md5 = 1;
    // 资源包
    string file = 2;
}

// 视频引导信息
message VideoGuide{
    // 关注按钮卡片
    repeated Attention attention = 1;
    // 互动弹幕
    repeated CommandDm commandDms = 2;
    // 运营卡片
    repeated OperationCard operation_card = 3;
    // 运营卡片新版
    repeated OperationCardNew operation_card_new = 4;
    // 契约卡
    ContractCard contract_card = 5;
}

// 契约卡
message ContractCard {
    // 需要触发的播放进度百分比
    float display_progress = 1;
    // 触发位置的前后误差(单位ms)
    int64 display_accuracy = 2;
    // 展示持续时间(单位ms)
    int64 display_duration = 3;
    // 弹出模式
    // 0: 原有模式 1: 半屏弹出 2: 全屏、半屏均弹出
    int32 show_mode = 4;
    // 提示页面
    // 0: 原有页面 1: 6.23版本新页面
    int32 page_type = 5;
    // UP主信息
    UpperInfos upper = 6;
}

// UP主信息
message UpperInfos {
    // 粉丝数
    int64 fans_count = 1;
    // 近半年投稿数
    int64 arc_count_last_half_year = 2;
    // 成为UP主时间
    int64 first_up_dates = 3;
    // 总播放量
    int64 total_play_count = 4;
}

//内嵌操作按钮卡片
message OperationCardNew {
    // 卡片id
    int64 id = 1;
    // 开始时间
    int32 from = 2;
    // 结束时间
    int32 to = 3;
    // 用户操作态
    // true已操作 false未操作
    bool status = 4;
    // 卡片类型
    OperationCardType card_type = 5;
    // 卡片渲染
    oneof render {
        // 标准卡
        StandardCard standard = 6;
        // 老运营卡片(原B剪跳转卡)
        OperationCard skip = 7;
    }
    //
    BizType biz_type = 8;
    //
    oneof param {
        // 追番追剧参数
        BizFollowVideoParam follow = 9;
        // 预约活动参数
        BizReserveActivityParam reserve = 10;
        // 跳转参数
        BizJumpLinkParam jump = 11;
        // 预约游戏参数
        BizReserveGameParam game = 12;
    }
}

// 卡片样式
enum OperationCardType {
    CardTypeNone = 0;     //
    CardTypeStandard = 1; // 标准卡
    CardTypeSkip = 2;     // 原跳转卡
}

// 标准卡
message StandardCard {
    // 卡片文案
    string title = 1;
    // 按钮文字 未操作
    string button_title = 2;
    // 按钮文字 已操作
    string button_selected_title = 3;
    // 已操作态是否显示
    bool show_selected = 4;
}

// 老运营卡片
message OperationCard {
    // 开始时间(单位为秒)
    int32 start_time = 1;
    // 结束时间(单位为秒)
    int32 end_time = 2;
    // 图标
    string icon = 3;
    // 标题
    string title = 4;
    // 按钮文案
    string button_text = 5;
    // 跳转链接
    string url = 6;
    // 内容描述
    string content = 7;
}

// 互动弹幕条目信息
message CommandDm {
    // 弹幕id
    int64 id = 1;
    // 对象视频cid
    int64 oid = 2;
    // 发送者mid
    string mid = 3;
    // 互动弹幕指令
    string command = 4;
    // 互动弹幕正文
    string content = 5;
    // 出现时间
    int32 progress = 6;
    // 创建时间
    string ctime = 7;
    // 发布时间
    string mtime = 8;
    // 扩展json数据
    string extra = 9;
    // 弹幕id str类型
    string idStr = 10;
}

// 关注按钮卡片
message Attention {
    // 开始时间
    int32 start_time = 1;
    // 结束时间
    int32 end_time = 2;
    // 位置x坐标
    double pos_x = 3;
    // 位置y坐标
    double pos_y = 4;
}

// 404页信息
message CustomConfig {
    // 重定向页面url
    string redirect_url = 1;
}

// 免流面板定制
message TFPanelCustomized {
    // 右侧按钮素材
    string right_btn_img = 1;
    // 右侧按钮文案
    string right_btn_text = 2;
    // 右侧按钮字体颜色
    string right_btn_text_color = 3;
    // 右侧按钮跳转链接
    string right_btn_link = 4;
    // 中心主文案内容
    string main_label = 5;
    // 运营商(cm ct cu)
    string operator = 6;
    // 子面板定制化配置
    map <string,subTFPanel> sub_panel = 7;
}

// 免流子面板定制化配置
message subTFPanel {
    // 右侧按钮素材
    string right_btn_img = 1;
    // 右侧按钮文案
    string right_btn_text = 2;
    // 右侧按钮字体颜色
    string right_btn_text_color = 3;
    // 右侧按钮跳转链接
    string right_btn_link = 4;
    // 中心主文案内容
    string main_label = 5;
    // 运营商
    string operator = 6;
}

// 短视频下载-请求
message ShortFormVideoDownloadReq {
    // 稿件avid
    int64 aid = 1;
    // 视频cid
    int64 cid = 2;
    // 用户mid
    int64 mid = 3;
    // 设备buvid
    string buvid = 4;
    // 移动端包类型
    string mobi_app = 5;
    // 移动端版本号
    int64 build = 6;
    // 运行设备
    string device = 7;
    // 平台
    string platform = 8;
    // 当前页面spm
    string spmid = 9;
}

// 短视频下载-响应
message ShortFormVideoDownloadReply {
    // 是否有下载分享按钮
    bool has_download_url = 1;
    // 下载url
    string download_url = 2;
    // 文件md5
    string md5 = 3;
    // 文件大小(单位为Byte)
    int64 size = 4;
}

// 点击播放器卡片-请求
message ClickPlayerCardReq {
    // 卡片id
    int64 id = 1;
    // 稿件avid
    int64 aid = 2;
    // 视频cid
    int64 cid = 3;
    //操作
    //0:操作 1:取消操作
    int64 action = 4;
    // 当前页面spm
    string spmid = 5;
}

// 点击大型活动页预约-请求
message ClickActivitySeasonReq {
    // 预约类型
    BizType order_type = 1;
    // 当前页面spm
    string spmid = 2;
    // 业务参数
    oneof order_param {
        // 预约活动参数
        BizReserveActivityParam reserve = 3;
        // 收藏合集参数
        BizFavSeasonParam fav_season = 4;
    }
    // 操作
    //0:操作 1:取消操作
    int64 action = 5;
}

//
message BizFollowVideoParam {
    //
    int64 season_id = 1;
}

// 预约活动参数
message BizReserveActivityParam {
    // 活动id
    int64 activity_id = 1;
    // 场景
    string from = 2;
    // 类型
    string type = 3;
    // 资源id
    int64 oid = 4;
}

//
message BizJumpLinkParam {
    // 链接
    string url = 1;
}

message BizReserveGameParam {
    // 游戏id
    int64 game_id = 1;
}

// 收藏合集参数
message BizFavSeasonParam {
    // 合集id
    int64 season_id = 1;
}

// 合集详情页-请求
message SeasonReq {
    // 合集id
    int64 season_id = 1;
}

// 合集详情页-响应
message SeasonReply {
    // 合集信息
    UgcSeason season = 1;
}

// 播放器卡片曝光-请求
message ExposePlayerCardReq {
    // 卡片类型
    PlayerCardType card_type = 1;
    // 稿件avid
    int64 aid = 2;
    // 视频cid
    int64 cid = 3;
    // 当前页面spm
    string spmid = 4;
}

// 卡片类型
enum PlayerCardType {
    PlayerCardTypeNone_VALUE = 0;      //
    PlayerCardTypeAttention_VALUE = 1; // 关注卡
    PlayerCardTypeOperation_VALUE = 2; // 运营卡
    PlayerCardTypeContract_VALUE = 3;  // 契约卡
}

// 点击签订契约-请求
message AddContractReq {
    // 稿件avid
    int64 aid = 1;
    // UP主mid
    int64 up_mid = 2;
    // 当前页面spm
    string spmid = 3;
}