ARTICLE · 1290225
CDN 是什么?为什么有些软件会借你的手机、电脑传视频?
你打开一集短剧,播放器开始下载视频。接入了 P2P 分发组件的软件,还可以同时做另一件事:把已经缓存的视频片段,发给正在观看的其他人。
于是,你的设备一边接收视频,一边帮平台传视频。
CDN,就是把内容提前放到离你近的地方
CDN 的全称是 Content Delivery Network,中文叫“内容分发网络”。
假设一家视频网站把所有视频都放在一个机房里。全国各地的观众点开视频,都要从这个机房取数据。观众一多,机房出口的带宽、跨地区的网络传输,都要承受压力。
CDN 的办法是,在不同地区部署服务器,把热门视频、图片、安装包等内容缓存过去。你访问时,系统会根据网络条件,把请求交给适合的节点。
这就像一家店把货物提前送到各地分仓,顾客下单后,从合适的仓库发货。这里的“近”,也包括网络是否顺畅、运营商之间的连接质量等条件。Cloudflare 的 CDN 介绍[1]
视频从 CDN 节点发给观众,这笔分发费用由平台承担。播放量越大,累计送出去的数据越多,带宽和流量开销也越受关注。
PCDN,又把一部分转发任务交给了设备
你的设备里,也有两样能帮平台送视频的东西:已经缓存的内容,以及网络的上传带宽。
你刚看过一段视频,设备里已经有了这段数据。另一位观众正好需要同样的片段,软件就可以安排你的设备发一份过去。
这里用到的是 P2P,也就是设备之间互相传输数据。把这种方式用到内容分发里,常被称为 P2P CDN,或 PCDN。
例如,甲从平台拿到一段视频,把其中的分片发给乙;乙拿到分片后,又可以分享给丙。传统 CDN 继续提供数据,参与分享的设备承担一部分分发工作。腾讯云的 X-P2P 介绍[2]就把利用用户闲置带宽、降低分发成本列为产品能力。
传统 CDN 主要靠部署好的服务器送内容;观众参与的 P2P 分发,还会用到观众设备的缓存和上传带宽。
还有一类 PCDN,会把专门投入的边缘设备组织成分发网络。Swarm 论文[3]介绍的就是一套利用边缘资源的混合分发系统。观众设备参与的方式,则是把分享任务放进播放器,让看视频的设备顺手承担转发。

手机和电脑,是怎样加入这张网的?
软件厂商可以在播放器里接入一个 SDK。你可以把 SDK 理解成开发者拿来使用的一套现成功能,其中包含查找节点、建立连接、下载和分享视频数据的代码。
播放器需要某段内容时,组件查询哪些节点持有这段数据,再选择合适的来源。视频片段进入本地缓存后,这台设备也可以成为其他观众的数据来源。
腾讯云的 H5 P2P 接入文档[4]给出了这样的机制:播放器的分片请求先交给 P2P SDK,SDK 决定通过 P2P 网络或原来的视频地址获取数据,再返回给播放器。文档还要求开发者检查 P2P 分享,以及播放器销毁时组件是否正常退出。
所以,这类转发既可以存在于 App 中,也可以由支持相关功能的网页播放器完成。软件负责建立连接和调度分片,用户看到的仍然是熟悉的播放界面。
在 Android 上,联网权限属于安装时授予的普通权限。获得联网能力后,应用就能在运行中收发数据,分享视频分片也可以通过这些网络连接完成。Android 联网权限说明[5]
承担任务的组件在运行,设备就有机会继续分享。电脑上的常驻程序可以在窗口关闭后继续工作;手机上的后台活动则受系统的后台运行规则约束。Android 的后台任务说明[6]就列出了相关资源限制。排查时,要看真正承担网络任务的进程。
为什么短视频、短剧会考虑这种方式?
短视频和短剧的分发成本,来自大量观众一次次点开、划走、再点开。
举个算账的例子:假设一万人同时观看码率为 3 Mbps 的视频,仅这些播放就需要约 30 Gbps 的数据传输能力。一个片段很短,放到大量播放次数里,照样会累积出可观的流量。
热门内容还带来了复用机会。当一批观众在相近时间观看同一集短剧、同一段热门视频,设备里就可能持有相同的分片。参与设备越集中、在线时间越重叠,可互相分享的机会越多。
短剧还有连续播放的特点。为了让下一集更快出现,播放器会提前加载后续内容。火山引擎的短剧方案[7]就介绍了预加载和预渲染策略。预加载先把内容取到本地;接入 P2P 分享后,缓存中的匹配分片又有了转发用途。
从这些分发特点看,把热门分片放到在线设备之间复用,就给平台多了一条分发路径。
平台省下的费用,落到了哪里?
一段视频由用户设备发出去,就由这台设备的上传链路承担了这次传输。平台可以减少一部分商业分发流量,用户侧则投入了带宽、缓存空间和设备运行所需的电量。
比如,一个进程如果持续以 3 Mbps 的速度上传,一小时就会发出约 1.35 GB 数据。家里的上传链路被占满时,视频通话、文件上传等任务会争用带宽;队列积压还可能让网络延迟升高。IETF 关于网络队列的说明[8]
手机持续联网需要耗电,处理数据和读写缓存也要占用设备资源。Android 的网络耗电说明[9]就提到,建立连接、保持无线模块活跃都会消耗电量。
厂商所说的“闲置带宽”,指的是它判断当时可以利用的网络余量。对你来说,这条宽带还要服务家人的通话、工作和其他设备。

怎样查看自己的设备在上传什么?
先看软件设置和服务说明,留意“P2P 加速”“内容共享”“共享带宽”等项目,再结合实际流量核对。
电脑可以用资源监视器观察各进程的发送速率,手机可以查看应用流量记录,路由器也能帮助观察单台设备的上传情况。关闭相关分享功能、完整退出承担转发的进程,再比较前后的流量变化,更容易找到来源。
上传流量里还会有相册备份、文件同步和你主动发送的内容。把进程、功能说明和流量变化放在一起看,才能判断这些数据正在做什么。
对这类功能,一个有用的设置界面应该写清:分享什么、在哪种网络下运行、上传多少,以及怎样关闭。用户看得懂这笔资源交换,才能决定是否参与。
引用链接
[1]Cloudflare 的 CDN 介绍: https://www.cloudflare.com/learning/cdn/what-is-a-cdn/
[2]腾讯云的 X-P2P 介绍: https://cloud.tencent.com/product/mts
[3]Swarm 论文: https://arxiv.org/abs/2401.15839
[4]腾讯云的 H5 P2P 接入文档: https://cloud.tencent.com/document/product/618/126000
[5]Android 联网权限说明: https://developer.android.com/develop/connectivity/network-ops/connecting
[6]后台任务说明: https://developer.android.com/develop/background-work/background-tasks/bg-work-restrictions
[7]火山引擎的短剧方案: https://docs.volcengine.com/docs/video-on-demand/short-drama-scenario-overview?lang=zh
[8]IETF 关于网络队列的说明: https://www.rfc-editor.org/rfc/rfc7567#section-1.2
[9]Android 的网络耗电说明: https://developer.android.com/develop/connectivity/minimize-effect-regular-updates














































































