免费网站视频播放人数统计工具
昨晚一点半,我在改一个视频落地页的埋点。后台那块「在线人数」的窗口一直在跳,67、69、72……我看着它,忽然想起下午周航发来的一条消息。
他说:「叶子,我把心跳包从 30 秒改成 15 秒,在线人数直接涨了 61%,这算不算骗人?」
我回他:不算骗,算数得细了。
然后我拿着这个数,在笔记本第 87 页写了一行字:「数得细,不等于数得准。」
先说清楚:所谓「播放人数」,到底在数什么
免费网站视频播放人数统计工具,本质上是三件事叠在一起:一是播放事件,二是会话/心跳,三是去重。
播放事件好理解,`play` 一触发就 +1。问题是这个 +1 太廉价了。用户点开、缓冲、卡住、关掉,全都算了一次。
所以有些站会要求播到第 3 秒才算,有些要求播到第 10 秒。这个规则差一点,数字就差很多。
我 10 月 27 号在一家朋友的站点上做过一次对照:同一批 1.2 万个访问,按「触发即算」统计是 9.8 万次播放,按「播满 3 秒」统计是 7.1 万,按「播满 30 秒且看得见」统计只剩 2.9 万。
差了 3.4 倍。这还没算机器人。
免费工具里,我最后留下的是这三个
先说结论,没有任何一个免费工具能替你把「人」数准,它们只能把「事件」数准。准不准,取决于你怎么写规则。
Matomo 我用了两年多。自建、免费、数据在你自己手里,这点很舒服。缺点是自定义事件一多,MySQL 表会撑不住,我那次 2 万条事件之后,后台列表要等 8 秒才出来。
Umami 轻,一行脚本就能上,页面停留也认。但它默认不统计视频内的进度,要自己补一段 `timeupdate` 上报,这块文档写得不算细。
第三个是我自己拼的:一个 30 行的上报函数 + 一张心跳表,15 秒一个包,用 SQL 做 1 分钟窗口去重。丑,但在那台 2 核 2G 的机器上跑得稳稳的,3100 个并发在线吃得住。
顺便说,跨端这块我踩过坑,手机端「无痕播放」比桌面多 68%,里面很大一部分是没登录的访客,在看欧洲windows10永久免费版下载那种页面的用户,行为其实和看剧一样。
我个人的观点:大多数站点根本不需要「播放人数」,它们需要的是「同时在看的房间人数」。前者是虚荣数字,后者才是能用来做产品决定的东西。
为什么我更信「同时在线」而不是「总播放」
总播放是可以吹的,也是可以刷的。而「此刻有多少人在看」这个数,很难作假,因为它必须实时。
老陈那个社区影院站,一共就 400 个固定观众。他要的不是播放量,是「今晚 8 点这场,有多少人一起看」。
他 10 月 30 号给我发语音,说:「叶子,你把那个实时人数做出来,比什么都强。」第二天我给他加了一行 `当前 23 人在看`,他说这就对了。
所以我现在的顺序是:实时在线人数 → 会话时长 → 播放完成率 → 总播放。前三个都比最后一个有用。
数人这件事,最后落到两条规则上
第一条:什么算「一次播放」。我现在的标准是播满 5 秒、且页面可见、且不是预加载。
第二条:什么算「一个在线」。15 秒心跳,60 秒窗口,超时就下线。这比 30 秒心跳细,也更接近真实感受。
周航把心跳改成 15 秒后涨了 61%,其实就是把「犹豫着要不要走」的人多留住了一轮统计窗口。这不是造假,是精度上来了。
但我也要提醒他:心跳越密,服务器压力越大。他那台机器 2000 人在线就开始丢包,我让他先在 30 秒和 15 秒之间做个灰度。
今天写这篇的时候是下午四点,窗外在下雨。我把这个页面最后调了一遍,把实时窗口从 90 秒改成 60 秒,人数从 74 掉到 61。
少了 13 个人。但我心里反而踏实了一点。