视频日志记录

视频记录是一件很麻烦的事情,之前是将一段视频十等分,学生每看完其中的一等分,在用户做相关操作的时候就会上传其中的几等分视频记录,相关操作包括:

  • 暂停视频
  • 观看下节视频
  • 拖动视频
  • 关闭当前页面

调查

调查了一下几个视频网站的记录方式,如下:

优酷

log 接口 : http://yt1.mmstat.com/yt/vp.vtslog

发送频率: 5

body 日志 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
version: 0.5.78
vid: 969664681
uid:
type: h5
cf: 0
cpt: 2
full: 0
pc: 0
clb: 0
playersid: 15408798967661cr1pik5u2fq2bZZx0WzQhD9
abtest: b
clientid: 125272a7921189a8
iku: 125272a7921189a8
sn: 1
pt: 5
hi: 5
vvid: 8004d7c2ba930b672821e47ccf0bb8b7
lang: 1
r: 756681157
cna: RSZYFOyl3CYCAWVR4r76Xboc
speed: 1

腾讯视频

log 接口 : https://apd-be31beb59d7da6eff28fb4bb69f24c0d.v.smtcdns.com/varietyts.tc.qq.com

发送频率: 不定时发送,打包一起发送

body 日志 :

1
2
3
4
5
6
index: 23
start: 241560
end: 251560
brs: 24702636
bre: 25256859
ver: 4

Bilibili

log 接口 : https://api.bilibili.com/x/report/web/heartbeat

发送频率: 15

body 日志 :

1
2
3
4
5
6
7
8
9
10
aid: 34926550
cid: 61188917
mid:
csrf:
played_time: 139
realtime: 139
start_ts: 1540881600
type: 3
dt: 2
play_type: 0

爱奇艺

log 接口 : https://sb.scorecardresearch.com/p

发送频率: 10

body 日志:

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
c1: 2
c2: 26181340
ns_type: hidden
ns_st_sv: 6.1.0.170130
ns_st_smv: 5.8
ns_st_it: r
ns_st_id: 1540882415279
ns_st_ec: 2
ns_st_sp: 1
ns_st_sc: 1
ns_st_psq: 1
ns_st_asq: 1
ns_st_sq: 1
ns_st_ppc: 1
ns_st_apc: 1
ns_st_spc: 1
ns_st_cn: 1
ns_st_ev: pause
ns_st_po: 86868
ns_st_cl: 5997951
ns_st_mp: js_api
ns_st_mv: 6.1.0.170130
ns_st_pn: 1
ns_st_tp: 0
ns_st_ci: 1462694600
ns_st_pt: 86868
ns_st_dpt: 86868
ns_st_ipt: 26853
ns_st_et: 86868
ns_st_det: 86868
ns_st_upc: 86868
ns_st_dupc: 86868
ns_st_iupc: 26853
ns_st_upa: 86868
ns_st_dupa: 86868
ns_st_iupa: 26853
ns_st_lpc: 86868
ns_st_dlpc: 86868
ns_st_lpa: 86868
ns_st_dlpa: 86868
ns_st_pa: 86868
ns_ts: 1540882532281
ns_st_bc: 0
ns_st_dbc: 0
ns_st_bt: 0
ns_st_dbt: 0
ns_st_bp: 0
ns_st_skc: 0
ns_st_dskc: 0
ns_st_ska: 0
ns_st_dska: 0
ns_st_skd: 0
ns_st_skt: 0
ns_st_dskt: 0
ns_st_pc: 1
ns_st_dpc: 1
ns_st_pp: 1
ns_st_br: 0
ns_st_rt: 100
ns_st_ub: 0
ns_st_ki: 1200000
ns_st_pr: 声林之王之林宥嘉萧敬腾1对1指导学员 巫启贤女儿唱约翰丹佛名作
ns_st_sn: *null
ns_st_en: 1
ns_st_ep: 声林之王之林宥嘉萧敬腾1对1指导学员 巫启贤女儿唱约翰丹佛名作
ns_st_ct: vc12
ns_st_ge: 港台,音乐,真人秀
ns_st_st: iqiyi
ns_st_ce: 1
ns_st_ia: 0
ns_st_ddt: *null
ns_st_tdt: *null
ns_st_pu: *null
c3: *null
c4: 6
c6: *null
c7: https://www.iqiyi.com/v_19rr6haox0.html
c8: 声林之王之林宥嘉萧敬腾1对1指导学员 巫启贤女儿唱约翰丹佛名作-综艺-高清正版视频在线观看–爱奇艺
c9: https://www.iqiyi.com/

小结

定时日志

上述的几个平台中除了 爱奇艺 传的数据太多,其他都很精简,总结一下关键信息我准备设计成如下几个字段:

  • 视频id
  • 当前用户id
  • 定时上传次数 index
  • 随机数 random
  • 视频开始位置
  • 视频结束位置
  • 开始时间戳
  • 结束时间戳
  • 播放倍速
  • 播放设备平台
  • 日志类型 :timing

日志包整理好了,就看日志日志发送频率了,除了腾讯视频 应该是有专门收集日志,有个统一的触发机制,一次性发送了多条日志,其他网站都是以单位时间的频率发送给服务端,考虑到实施的简便性,综合几个发送频率,暂定频率为 10 秒。随机数 random 每次打开视频都刷新,可以区分不同的 log 的日志链,定时上传次数 index 可以检查一段 log 的完整性。

我们的单个视频平均时长在15分钟,那么如果有一次发送log日志失败对总体进度影响是

1
2
15 * 60 =900 s
10 / 900 = 0.011111111 = 1.11%

为了一次日志失败对总体进度的影响,所以频率确定为 5 秒,但是相对来说,数据库的需要的储存空间也需要扩大一倍

1
2
15 * 60 =900 s
5 / 900 = 0.005555556 = 0.56%

单条数据丢失对整体影响也直接降低一半。

操作日志

上面的几家平台都有做操作日志的记录,这里唯一添加一个 random 字段,取值和定时日志每次生成的随机值相同,这里操作日志分为以下几类

开始

  • 视频id
  • 当前用户id
  • 随机数 random
  • 时间戳
  • 视频位置
  • 播放设备平台
  • 日志类型 :start

暂停

  • 视频id
  • 当前用户id
  • 随机数 random
  • 时间戳
  • 视频位置
  • 播放设备平台
  • 日志类型 :pause

完成

  • 视频id
  • 当前用户id
  • 随机数 random
  • 时间戳
  • 视频位置
  • 播放设备平台
  • 日志类型 :complete

退出

  • 视频id
  • 当前用户id
  • 随机数 random
  • 时间戳
  • 视频位置
  • 播放设备平台
  • 日志类型 :exit

拖动

  • 视频id
  • 当前用户id
  • 随机数 random
  • 视频原有位置
  • 视频现有位置
  • 时间戳
  • 播放设备平台
  • 日志类型 :drag

倍速

  • 视频id
  • 当前用户id
  • 随机数 random
  • 视频原有倍速
  • 视频现有倍速
  • 时间戳
  • 视频位置
  • 播放设备平台
  • 日志类型 :speed

实施

  1. 客户端每次将日志发送到服务端
  2. 如果成功,则本次日志提交结束
  3. 如果失败,则客户端需要将日志存储在本地
  4. 等待时机合适,重新提交日志
  5. 如果成功,删除本地存储日志,本次日志提交结束
  6. 如果失败,重复第 4
坚持原创技术分享,您的支持将鼓励我继续创作!