logo
0
0
WeChat Login

短视频预加载的数据分析和算法设计

项目简介:本项目基于 ACM Multimedia 2022 短视频流挑战赛的模拟器代码。该模拟器是一个短视频流模拟器,带有可插拔的客户端模块,用于参与者定义下载控制算法。

一、实验目的

学习短视频传输的基础知识,分析给定的网络流量数据、用户行为数据和短视频数据,用数据和相应的图像支撑分析结论,掌握数据处理分析的基本方法,并在数据分析的基础上进一步探讨如何设计短视频预加载算法提升用户体验,在实践中运用理论,提高动手能力。

二、实验开发环境和工具

在Windows或Linux操作系统上构建Python编程环境,编译运行实验提供的模拟器程序。

三、实验平台和基础知识

1.背景知识介绍

短视频是一种基于用户生成的内容在在线社交平台上分享的视频新形式。短视频的基本模型如下:主播生成内容并上传视频,然后对视频进行处理并上传到内容分发网络(CDN)节点。在客户端,除了当前正在播放的视频外,一些其他的视频被放置在推荐队列中。用户可以在观看当前视频时滑动离开,继续观看推荐队列中下一个视频。

图1:短视频场景下的视频播放流程.png

图1:短视频场景下的视频播放流程

充分利用网络带宽,提高用户体验质量(QoE)是目前研究的重要问题。在短视频应用中,用户观看视频的方式是滑动观看。为了保证用户体验质量,需要预加载当前视频和推荐队列中的视频。然而,如果用户划走当前播放视频,下载但未观看的数据不会有助于提高用户QoE,这将导致带宽浪费。因此,一方面,必须设计一个短视频流的预加载算法,来决定下一步要下载哪个视频块及相应的比特率,提高用户体验质量。另一方面,为了避免短视频平台的巨大带宽成本,如果下载视频块为用户提供的预期QoE很少,预加载算法需要暂停下载一段时间。

然而,为短视频流设计这样的预加载算法并不简单。决定下载视频块、比特率选择和暂停时间在很大程度上取决于难以预测的多变的网络状态和用户的观看行为。首先,如何决定预加载顺序。当前视频和推荐队列中的视频在有限的网络中相互竞争资源,这意味着预加载操作总是以增加其他视频的卡顿为代价来减少一些视频的卡顿。用户滑动使它更具挑战性,因为预加载的视频可能会被滑动,从而导致更多的带宽浪费。最后,如何选择预加载比特率。除了典型的ABR算法所面临的挑战(如带宽估计、缓冲区预测、比特率与卡顿相互冲突等)外,还应考虑每个块的播放概率,以便准确地评估每个块的预期QoE和带宽消耗。

2.实验平台

我们使用AItrans比赛的仿真平台来模拟短视频的下载与播放过程。

快速开始

我们提供一个演示,旨在帮助您了解在挑战中需要决定哪些参数。它只是给您一些改进算法的线索,因此不一定合理。您需要找到更好的解决方案来平衡 QoE 和带宽浪费。

您可以通过以下命令评估演示:

python run.py --quickstart fixed_preload

现在您已经成功运行了演示,它可以直接用于提交。请阅读 fixed_preload.py 中的注释以获取更多详细信息。

图2:短视频模拟器框架.png

图2:短视频模拟器框架

图2显示了短视频模拟器的框架,主要分为两个模块:Simulator模块与自适应预加载算法模块。输入模拟器的数据集包含网络带宽数据集、视频数据集和用户行为概率集。网络带宽数据集记录了网络的带宽,以模拟广泛的网络约束。视频数据集描述了不同比特率水平下块的大小。用户行为概率集给出了用户观看视频时,每个视频块的播放概率。自适应预加载算法执行自适应预下载,与模拟器交互,算法从模拟器中获得观察值。根据这些观察结果,算法做出决策,输出决策变量指导下载过程。Simulator模块的代码见附件,只需阅读和理解。自适应预加载算法模块的代码除阅读和理解之外,还需进一步优化。

视频数据格式如表一所示。第一列表示的是视频块,第二列表示的是视频块的大小,每个视频块的时间为1s,并且对于不同码率都有一个数据文件。输入的网络数据格式如表二所示,第一列为时间戳,第二列为时间戳对应的网络带宽,该数据是在一定时间内对网络带宽进行采样得到的网络吞吐量变化情况。用户行为描述了生成的每个视频的用户留存模型。如表三所示,表三是假设一段3秒的视频可以采用以下形式。这意味着92.98%的用户仍在观看1秒(第一秒结束时)的视频,83.24%的用户仍在观看2秒的视频,72.97%的用户在3.0秒仍然存在,这意味着他们观看了整个视频。

表1:视频数据

视频块块大小(byte)
1157651
284292
3179006
4100979
558159
681186
......

表2:网络数据

时间戳(s)吞吐量(Mbps)
04.03768755221
0.5499999523164.79283060109
0.8799998760224.49231799163
......

表3:用户行为

视频块保留概率
01
10.929794029
20.832466432
30.729774475
40

自适应预加载模块通过给定的输入,设计合适的算法从而决定最终选择下载的视频以及码率或者暂停下载,其中输入是由Simulator模块所给,具体如表4,输出如表5。

表4:Observation输入

变量名含义
delay上次操作的时间成本
rebuf再缓冲的长度
video_size上一个下载块的大小
end_of_video上次下载的视频是否结束
play_video_id当前播放视频的id
Players推荐队列的视频的相关参数
First_step是否为第一步

表5:Decision输出

变量名含义
Download_video_id本次要预加载的块对应的视频ID
Bit_rate本次要预加载的块对应的码率级别
Sleep_time暂停下载时长

评估指标说明

  • QoE:用户体验的反映。它与比特率、重新缓冲和同一视频的不同分块之间的比特率波动有关

  • 带宽浪费:一些已下载的分块将不会被观看。尝试减少带宽浪费

  • 下载/观看时间比:该比率定义为下载时间 / 总观看时间

3.平台代码介绍

(1)仿真平台的一些重要参数

  • 一个视频块的播放时长:1s
  • 码率等级:750,1200,1850(单位:kbps)
  • 视频数目:7个

(2)文件目录介绍

数据文件

  • /data/short_video_size:目前有七种不同的视频
视频名称(目录名)时间(秒)视频类型
1_tj17学习
2_EDG26娱乐
3_gy37生活
4_dx40生活
5_ss47生活
6_jt6娱乐
7_yd125游戏

在每个目录中,都有该视频的三个比特率级别的数据,范围从 020 是最低的,2 是最高的。每个分块的视频大小为 1000 毫秒。

  • /data/network_traces:网络条件,以 [时间(秒),带宽(Mbps)] 组表示。例如,以下数据表示从 0.0 到 0.5499999(秒)的带宽为 4.03768755221(Mbps),其他行可以类推。
0.0 4.03768755221 0.549999952316 4.79283060109 0.879999876022 4.49231799163
  • /data/user_ret:描述我们生成的每个视频的用户保留模型。例如,一个 3 秒的视频可以采用以下形式:
0 1 1 0.929794029 2 0.832466432 3 0.729774475 4 0

这意味着当时钟跳到 1 秒时(在第一秒结束时),92.98% 的用户仍在观看,在 2.0 秒时,83.24% 的用户仍在观看。具体而言,在 3.0 秒时,72.97% 的用户仍然存在,这意味着他们观看了整个视频。

注意:最后一行(4 0)只是一个结束标记,实际长度为 3 秒。

离开比率可以通过用当前保留率减去前一个保留率来计算。例如,(92.97 - 83.24)% = 9.73% 的用户在 1s-2s 期间离开。

模拟器文件

  • run.py:调用预加载算法下载并播放短视频
  • solution.py:短视频自适应预加载算法
  • /simulator/video_player.py:包含Player中的所有参数以及函数
  • /simulator/mpc_module.py:示例算法用MPC算法决定码率
  • /simulator/network_module.py:保存和操作网络条件的类
  • /simulator/short_video_load_trace.py:提供加载数据集的接口
  • /simulator/user_module.py:维护用户模型类并模拟用户行为
  • /simulator/controller.py:主模块,导入数据集,创建测试环境,并模拟决策步骤的整个过程

(3)关键代码注释

1. video_player.py:

def get_user_model(self): # 返回视频对应的时间戳以及用户行为 return self.user_time, self.retention_rate def get_video_size(self, quality): # 给定码率返回将要下载的视频块大小 pass def get_video_quality(self, chunk_id): # 返回过去下载视频块的码率 pass def get_undownload_video_size(self, P): # 给定某个视频返回所有未下载视频块的大小,包括三种码率 pass def get_future_video_size(self, P): # 给定某个视频返回之后所有视频的块大小,同样包括三种码率 pass def get_play_chunk(self): # 获取当前播放视频的视频块ID return self.play_timeline / VIDEO_CHUNCK_LEN def get_remain_video_num(self): # 获取播放视频的未播放视频块数目 self.video_chunk_remain = self.chunk_num - self.video_chunk_counter return self.video_chunk_remain def get_buffer_size(self): # 获取视频的buffer,每个视频都有一个buffer return self.buffer_size def record_download_bitrate(self, bitrate): # 记录下载的码率 pass def get_downloaded_bitrate(self): # 获取所有下载的码率 pass def bandwidth_waste(self, user_ret): # 计算并记录浪费的带宽 pass def video_download(self, download_len): # 下载视频,根据预加载模型的决策,模拟视频下载 self.buffer_size += download_len self.video_chunk_counter += 1 end_of_video = False if self.video_chunk_counter >= self.chunk_num: end_of_video = True return end_of_video def video_play(self, play_time): # 模拟视频下载期间客户端的变化 buffer = self.buffer_size - play_time # rebuffering self.play_timeline += np.minimum(self.buffer_size, play_time) # time is not included in timeline self.buffer_size = np.maximum(self.buffer_size - play_time, 0.0) return self.play_timeline, buffer

2. run.py:

cooked_trace_folder = 'data/network_traces/' + trace + '/' all_cooked_time, all_cooked_bw = short_video_load_trace.load_trace(cooked_trace_folder) # 读取数据文件 def test_all_traces(isBaseline, isQuickstart, user_id, trace, user_sample_id): # 测试不同trace下的得分 pass

(4)评估程序使用方法

您可以通过简单地运行根目录下的 run.py 来使用我们的模拟器评估您的程序。

参数

  • --baseline--solution:选择您要评估的算法

  • --trace:(可选)从 "mixed"、"medium"、"low"、"high" 中选择您要评估的 trace 类型。默认情况下,trace 将设置为 mixed。

1)运行基线算法

我们有一个基线算法 no_save,您可以参考内容介绍了解详细信息。

您可以运行基线算法以获得我们的模拟器的基本概念以及如何与它交互。

python run.py --baseline no_save

2)运行您自己的算法

您可以将您的相对代码目录路径作为参数 --solution 输入到 run.py

默认情况下,如果您没有传递 --baseline--quickstart,默认设置将运行根目录下的 solution.py

注意:在早期版本中,该参数曾命名为 --user,现已更改为 --solution 以避免与用户模型混淆。

python run.py --solution <您的相对代码目录路径>

例如,如果您将文件放在根目录下的 submit 目录下:

# 您的文件结构: # run.py # submit # |_solution.py python run.py --solution ./submit/

输出

除了日志文件外,您将在屏幕上获得直接输出。输出将包括:

  • 用户行为:当他们停止观看视频时,我们输出观看持续时间和下载的时间长度

  • 最终结果:

    • QoE
    • 带宽浪费
    • 下载/观看时间比

(5)日志文件

日志文件位于 /logs 下:

  • /logs/sample_user/user.txt:为每个视频生成的用户观看持续时间

  • /logs/log.txt:您的算法日志。它将输出您决策的所有步骤,包括:

    • 您选择下载哪个视频的哪个分块?
    • 同时,用户正在播放哪个视频的分块?

    此外,日志文件将包括您的决策对 QoE 的影响:

    • 单个视频内视频质量的变化
    • 如果您导致了重新缓冲,重新缓冲时间

(6)提交格式

目录 /submit 提供了您在我们网站上提交的目录示例。您的文件应组织为 submit.zip(您可以解压它了解详细信息,我们也列出了下面的结构):

submit |__solution.py ——您的算法 |__results ——您的补充文件,例如预训练的学习模型。 |__......

四、评价指标

我们采用score对自适应预加载算法进行评价,得分包括QoE和使用带宽。利用简单而广泛使用的QoE模型来应对这一重大挑战,计算公式如下。QoE_i表示视频i的QoE,QoE是所有观看的块j的总和。

$$ QoE = \sum_{j}(w_1 \cdot bitrate_j - w_2 \cdot rebuffer_j - w_3 \cdot smooth_j) $$

最后评分的视频i对某一用户的观看过程和网络轨迹如下:

$$ score_i = QoE_i - w_4 \times \sum_{k} bandwidth_usage_k $$

其中,bandwidth_usage是块k使用的带宽,对所有下载的chunk计算总和。系数w1,w2,w3和w4分别设为1, 1.85, 1和0.5。

注意:本系统的QoE计算方式已在最新版本中修复,解决了之前的计算问题。

五、实验内容

  1. 分析网络带宽数据,展示分析过程,并进一步预测网络带宽变化,分析预测结果。
  2. 运行仿真程序,分析在默认的自适应预加载算法作用下视频播放的码率、延时、缓冲区、卡顿、QoE、使用带宽,和浪费带宽等性能指标,并尝试分析默认算法的优缺点。
  3. 设计新的自适应预加载算法替代当前的算法,详细介绍算法的设计思想和具体实现,并从码率、卡顿、QoE、使用带宽,和浪费带宽评估新设计的自适应预加载算法的性能。
  4. 分析不同网络环境、视频和用户行为对于适应预加载算法的性能影响。

其中1和2为基本要求,3-4为提高要求。

六、评分方式和标准

课程设计成绩由两部分组成:平时成绩,实验检查和实验报告。其中平时成绩主要参考出勤、和老师或助教的交流讨论、及时检查和提交报告等方面的情况。实验检查和实验报告互为补充。

实验检查过程主要关注如下部分:

  1. 对原型系统的代码的理解。
  2. 对于相关数据的分析过程、分析结果,以及相关代码解释。
  3. 介绍算法相关的原理、代码,展示代码的执行结果。

实验报告内容应当包括简介、数据处理、数据分析、算法设计(进阶)、实验结果及剖析、总结等部分。同学们可根据各自的实际情况适当增加章节。此外,还将考察报告的完整性以及表达的逻辑性。同时需附代码以及运行说明。

课程设计题目包括基础要求和提高要求。完成基础要求就能够通过,但是想要获得优秀,必须要尝试提高要求,必须通过实验检查。程序运行最后的分数(性能评价指标)是衡量大家算法好坏的依据,但是课程的最终给分会综合考虑算法好坏、个人的思考过程和工作量、检查情况、实验报告等各方面因素。

参考文献

[1] 清华大学.全球智能网络传输大赛[OL].https://www.aitrans.online/MMGC2022

[2] Xutong Zuo, Yishu Li, Mohan Xu, Wei Tsang Ooi, Jiangchuan Liu, Junchen Jiang, Xinggong Zhang, Kai Zheng, and Yong Cui. 2022. Bandwidth-Efficient Multi-video Prefetching for Short Video Streaming. In Proceedings of 30th ACM International Conference on Multimedia (MM'22). ACM, New York, NY, USA, 5 pages.

[3] Chao Zhou, Yixuan Ban, Yangchao Zhao, Liang Guo, and Bing Yu. 2022. PDAS: Probability-Driven Adaptive Streaming for Short Video. In Proceedings of the 30th ACM International Conference on Multimedia (MM '22), October 10-14, 2022, Lisboa, Portugal. ACM, New York, NY, USA, 5 pages. https://doi.org/10.1145/3503161.3551571

[4] Ximing Wu, Lei Zhang, and Laizhong Cui. 2022. QoE-aware Download Control and Bitrate Adaptation for Short Video Streaming. In Proceedings of the 30th ACM International Conference on Multimedia (MM'22), October 10-14, 2022, Lisboa, Portugal. ACM, New York, NY, USA, 5 pages. https://doi.org/10.1145/3503161.3551590

[5] Si-Ze Qian, Yuhong Xie, Zipeng Pan, Yuan Zhang, and Tao Lin. DAM: Deep Reinforcement Learning based Preload Algorithm with Action Masking for Short Video Streaming. In Proceedings of the 30th ACM International Conference on Multimedia (MM'22), October 10-14, 2022, Lisboa, Portugal. ACM, New York, NY, USA, 5 pages. https://doi.org/10.1145/3503161.3551573

[6] Li Y, Zheng Q, Zhang Z, et al. Improving ABR performance for short video streaming using multi-agent reinforcement learning with expert guidance[C]//Proceedings of the 33rd workshop on network and operating system support for digital audio and video. 2023: 58-64. https://dl.acm.org/doi/10.1145/3592473.3592564

[7] Li Z, Xie Y, Netravali R, et al. Dashlet: Taming swipe uncertainty for robust short video streaming[C]//20th USENIX Symposium on Networked Systems Design and Implementation (NSDI 23). 2023: 1583-1599. https://www.usenix.org/system/files/nsdi23-li-zhuqi.pdf

[8] Zhang G, Guo J, Xiao M, et al. DeepReal: Short-form video streaming with fine-grained bitrate adaptation[C]//2024 21st Annual IEEE International Conference on Sensing, Communication, and Networking (SECON). IEEE, 2024: 1-9. https://ieeexplore.ieee.org/document/10934831

[9] Jin Y, Pan L, Zhang R X, et al. Generative Flow Networks for Personalized Multimedia Systems: A Case Study on Short Video Feeds[C]//Proceedings of the 33rd ACM International Conference on Multimedia. 2025: 12218-12226. https://dl.acm.org/doi/10.1145/3581783.3612225

[10] Sheng D, Qi Q, Wang J, et al. Watch, Skip, Repeat: Hotspot-Aware Joint Optimization for Video Streaming[C]//Proceedings of the 33rd ACM International Conference on Multimedia. 2025: 12121-12130. https://dl.acm.org/doi/10.1145/3746027.3754579

[11] Zhang G, Guo J, Xiao M, et al. Enabling the Awareness of Video Perceived Quality for Short-form Video Streaming[J]. IEEE Transactions on Services Computing, 2025. https://dl.acm.org/doi/10.1145/3479239.3485701