-
-
Notifications
You must be signed in to change notification settings - Fork 1.7k
/
playurl.proto
690 lines (639 loc) · 15.4 KB
/
playurl.proto
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
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;
//
repeated int64 unsupport_scene = 4;
}
// 业务类型
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; // 颜色滤镜
LOSSLESS = 30; // HIRES
}
//
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 LossLessItem {
//
bool is_lossless_audio = 1;
//
DashItem audio = 2;
//
bool need_vip = 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; // 颜色滤镜
CloudConf loss_less_conf = 30; // HIRES
}
// 播放控件稿件配置
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; // 颜色滤镜
ArcConf loss_less_conf = 31; // HIRES
}
// 编辑播放界面配置-响应
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; //
PLCChargingPlusNotPass = 2; //
PLCChargingPlusUpgrade = 3; //
}
// 视频地址-回复
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;
//
LossLessItem loss_less_item = 9;
}
// 视频类型
enum VideoType {
Unknown = 0; //
FLV = 1; // flv格式
DASH = 2; // dash格式
MP4 = 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;
}