📹 第十章 GB/T 28181协议原理
📄 一句话概括

下载和回放是两件事:回放是「边下边播」,下载是「先存下来再播」。 国标给下载单开了一个流程,s= 写 Download——它换来的是一份能带走的文件。

📝 本节和前面几节的关系

上一节是回放,这一节是下载。 两者经常被混为一谈,实际选错了会很麻烦: 该下载的用了回放,拿不到文件;该回放的用了下载,等不起。 Demo 算的就是「等不等得起」。

一、为什么单开一个流程

回放的产物是「流」,下载的产物是「文件」。 流不能带走,文件可以。 这个区别在取证场景里是决定性的:要交给公安的是一份文件,不是一段流。 而且文件有校验值,流没有。 下载还能做「断点续传」:一段录像几十 GB,断了不用从头再来。 回放做不到这一点——它本来就不产生文件。 代价是「要等」:下载必须等下完才能用,回放是边下边看。 所以「急的时候回放、要留证据的时候下载」。

二、等不等得起,算一下就清楚

一路 4 Mbps 的录像,一小时是 1.84 GB。 这个数先记住,后面全靠它。 百兆内网实际能跑八十兆,下这一小时要三分钟,完全等得起。 千兆内网二十秒就完了。 但链路的另一头可能是无线的:4G 上行标称二十兆、弱网实际只有两兆, 下这一小时要两个多小时——比实时还慢,等于「下多少看多少」。 所以「能不能下载」这个问题,答案不在协议上,在链路上。 无线回传的场景,基本只能回放。

三、时间基准的坑

下载下来的文件,时间戳来自文件系统;回放时的 RTP 时间戳,来自录像文件的 PTS。 两者对不齐的话,事后核对「哪个时刻发生了什么」就会差几秒。 这个差值不是 bug,是两条路径本来就不一样。 做取证类项目时,这个差值要提前测出来、写进报告。 测的办法很简单:同一段录像,一次回放、一次下载,拿画面里出现的时钟对一下。 还有一个更实际的问题:下载得到的文件格式,各厂商不统一。 有的给 PS,有的给裸流,有的给私有封装。 所以「下载下来能不能直接播」要在合同里写清楚,否则交付时会被卡住。

四、动手 Demo:一小时录像,下载和回放各花多久

先算录像体积,再按四条链路算下载时间。 最后列「什么场景该选哪个」。

bitrate = 4096000
size_h = bitrate / 8 * 3600
print("一小时 %.2f GB" % (size_h / 1e9))
print("一路一年 %.1f TB" % (size_h * 24 * 365 / 1e12))

for name, mbps, real in (("百兆内网", 100, 80),
                          ("千兆内网", 1000, 800),
                          ("同城专线", 50, 45),
                          ("4G 弱网", 20, 2)):
    print(name, "%.1f 分钟" % (size_h * 8 / (real * 1e6) / 60))

实跑输出:

--------------------------------------------------------------------
一小时录像,下载和回放各花多久
--------------------------------------------------------------------
**下载和回放是两件事**:**回放是「边下边播」,下载是「先存下来再播」。**
**国标给下载单开了一个流程,`s=` 写 `Download`。**

  一路 4 Mbps、一小时录像 = 1.84 GB
  一天 24 小时 = 44.2 GB
  一路一年 = 16.1 TB

  链路                    标称              下一小时录像       实际
  -------------------------------------------------------------------------------
  **百兆内网**            **100 Mbps**      **3.1 分钟**       **实际约 80**
  **千兆内网**            **1000 Mbps**     **0.3 分钟**       **实际约 800**
  **同城专线 50M**        **50 Mbps**       **5.5 分钟**       **实际约 45**
  **4G 上行(弱网)**     **20 Mbps**       **122.9 分钟**     **实际约 2**

**最后一行的差距最大**:
**4G 上行标称 20 兆,弱网时实际只有 2 兆**——**下一小时录像要两个多小时,比实时还慢。**
**这种情况下「下载」基本不可用,只能回放。**

**下载和回放的取舍很清楚**:
  场景               选哪个       为什么
  --------------------------------------------------------------
  **要证据保全**     **下载**     **文件要落到本地,能带走**
  **要看一眼**       **回放**     **不用等,边下边看**
  **链路差**         **回放**     **下载根本下不完**
  **要多份备份**     **下载**     **回放不产生文件**

**还有一个容易被忽略的差别是「时间基准」**:
**回放的 RTP 时间戳来自录像文件的 PTS,下载的文件时间戳来自文件系统。**
**两者对不齐的话,事后核对「哪个时刻发生了什么」就会差几秒。**
**做取证类项目时,这个差值要提前测出来并记在报告里。**

一小时 1.84 GB、一天 44 GB、一路一年 16 TB——这三个数就是存储预算的全部起点。 「录像保存三十天」从来不是小成本,它是最先超支的一项。 四行下载时间差了一百倍:千兆二十秒、百兆三分钟、专线五分半、4G 弱网两个多小时。 同一个文件,不同的链路,体验完全不同。 最后一行是这一节的重点: 「下多少看多少」意味着下载在这个场景下没有意义——你看完一小时录像的时间,正好够下一小时。 所以无线回传只能做回放。 「一路一年 16 TB」这个数还解释了另一件事:为什么现场很少「全量存一年」, 多数项目是「存三十天+重要片段长期存」。

30 秒实验

  1. 算一下:4 Mbps 一小时多少 GB?(1.84 GB)
  2. 想一下:为什么取证场景必须下载而不是回放?
  3. 想一下:无线回传为什么不适合下载?

常见误区

  1. 以为「回放和下载是一回事」。 一个出流、一个出文件,取证只能用后者。
  2. 以为「下载一定比回放快」。 链路差的时候,下载比实时还慢。
  3. 以为「下载的文件格式是统一的」。 各厂商不一样,要在合同里写清。
自测三问(点开对答案) 1. 下载和回放的本质区别是什么? —— **下载产出文件,回放产出流**;文件能带走、能校验。 2. 为什么下载能断点续传而回放不能? —— **回放不产生文件**,没有「续」的位置。 3. 下载文件的时间戳和回放的时间戳为什么会不一致? —— **一个来自文件系统,一个来自录像的 PTS**,**两条路径不同**。

下一节讲校时:设备时间差了几个月,录像检索会全乱。

相关笔记