码率自适应(ABR)决策的直播场景

news2025/4/16 22:05:25

直播场景

1. 直播场景的普遍框架与工作原理

主播:即各类主播(游戏、网红歌手、户外达人等),通过手机端或者个人电脑在线直播录制个人活动。

编码服务器:主播端上传视频流以后,编码服务器根据相应的编码转码协议将视频转化为 蓝光、高清、低清、流畅等码率。

CDN(内容分发网络):CDN节点是用户访问相对集中的一些边缘服务器。转码服务器的流被传送到各个CDN节点,便于用户就近访问。

智能设备(手机、PC):观看用户在自己的APP或者Web网页上缓冲相应的直播间的流。

观看端: 播放器应用(等待buffer缓存足够数据后,即可正常播放。)

完整的直播过程:

1、主播端的手机或PC把视频流实时录制后经过编码上传于转码服务器。

2、转码服务器将视频流转码为流畅、低清、高清、超清等多种码率。

3、转码服务器将不同码率的视频分发到各个CDN节点,其中CDN节点含有同一视频所有码率的视频流。

4、观看者客户端发起拉流请求。就近选择CDN节点进行拉流。每次拉流决策自己需要的视频流的码率

5、视频流被缓冲到了直播软件(如斗鱼、映客)的缓冲区中,客户端需要决策缓冲到多久可以播放。

直播特点:视频实时产生——转码——分发——播放

          观看体验:清晰度、卡顿、切换、时延

          时延主要来源:客户端缓冲区

  1. 直播所需要做的决策

2.1.码率选择

Video Server: 视频服务器

Video Client: 视频客户端,如youtube、斗鱼、虎牙等客户端

CHUNK(竖行矩形条):等间距的矩形条代表时间长度为1s的视频,但由于不同码率,其高度不同,码率越高矩形条越高。

Buffer(客户端缓冲区,即由n个矩形条组成的缓冲区):当buffer中有一定的视频内容时,右端下载,左端播放。只要保证整个buffer不耗尽,视频就不会发生卡顿。一旦由于网络状态不好,buffer则会被消耗完,则会行程卡顿.

码率切换的本质是:如何在不卡顿(buffer不空)的基础上,尽可能的选出高码率。本质上是根据网络吞吐量的抖动来匹配切换相应的码率。

2.2时延控制

直播平台经常伴随着与用户的弹幕交互,所以时延就显得十分重要。如果缓冲的过长,则用户观看到的内容存在较大延迟。则影响了用户和主播的交互,如果缓冲的过短,则用户在不短的时间内又会发生卡顿,影响观看体验。

直播系统中对时延的控制会引入两种区别于点播的机制:(1)快慢播;(2)跳帧

(1) 快慢播

       a) 慢播:为了避免卡顿事件时,在buffer即将为空的时刻,对视频进行慢播放样就一定程度上延缓了卡顿的到来。

       b) 快播:在buffer很充足的时刻(即时延变大),对视频进行快播放。这样就通过追赶的方式使得时延减小。

(2)跳帧

系统中默认向CDN下载帧均为按序下载,所以一旦发生卡顿,由于下载一定是按序下载,时延一定会被拉大。由于直播的互动性,目前系统默认端到端时延超过7s时,发生跳帧事件。即向CDN请求的视频不再是当前帧,而转而请求时延约为3s的较新的帧。使用目标缓冲区大小(Target_buffer)来辅助控制时延。Target_buffer可以认为是一个三元组[慢播放阈值、目标缓冲区容量、快播放阈值]

   1.目标缓冲区容量:假设取值为2s,其作用为如果此刻视频发生卡顿,需要缓冲到目标缓冲区容量的内容(即buffer缓冲2s的内容),才可以播放,否则一直缓冲。

   2.慢播放阈值:即buffer小于此值时,触发慢播放。

   3.快播放阈值:即buffer大于此值时,触发快播放。

3.SIM 模拟平台系统架构

图3 系统框架图

蓝色阴影部分为系统环境,系统环境的核心为仿真器选手只需要完成ABR Algorithm部分。仿真器的输出即为ABR Algorithm的潜在输入,即Observation; ABR Algorithm的输出即为仿真器的输入,即Decision

3.1仿真器SIM

功能:类似于一个播放器系统,模拟播放器在不同网络环境下下载视频帧、并动态播放的过程。每次调度为下载了一帧。

仿真器输入,输入分为三部分:

1.Frame Trace,视频数据集,此数据集重在模拟视频源的动态变化情况。

2.Network Trace,网络数据集,此数据集重在模拟网络的动态变化情况。

      3.ABR算法的决策,即码率和目标缓冲区大小

仿真器输出:仿真器的各个指标的状态。所含指标有:物理时间、当前下载帧、当前播放时间、客户端缓冲区大小、当前网络RTT等。详细请看下表:

3.2ABR Algorithm的输入输出

3.3环境配置

运行环境:Python2 or Python 3 Linux/Mac or Windows

安装:我们已经在python的官方源中将仿真器封装好。大家只需要执行以下命令:

pip install LiveStreamingEnv==0.5.2

ABR Algorithm根据仿真器提供的状态信息,做出码率和目标缓冲区大小决策。

下载地址: git clone https://github.com/NGnetLab/LiveStreamingDemo

用户体验质量(QoE)

QoE分两部分:一部分为frame QoE,一部分为dunk QoE

QoE = QoE1 + QoE2

     1、对于每一帧,公式为:

QoE1 = play_time_duration(播放时长) * Bitrate - 1.5 * rebuff- 0.005 * latency

    2、对于每一块,公式为:

QoE2 = - 0.02 *smooth

4.相关问题

1、为什么只有在I帧时刻才可以做决策?

        编码中,所有的frame被编码为I帧和P帧。I帧即为关键帧,你可以理解为这一帧画面的完整保留。P帧:前向预测编码帧。P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。P帧时刻选择切码率,并不能找到与上一帧的关系,无法解码

2、为什么Target_buffer也要在I帧才可以做决策?target_buffer理论上是不是应该是连续的,如果按照仿真器的实现来做的话,算法决策的target_buffer作用是不是有限?

理论上来说target buffer 应该是时时刻刻都在决策。而不应该随着码率在I帧间隔的时候决策。由于比赛和现实系统的overhead要求,target buffer模块也不能很高频率的去调用,所以现在暂时做成了和码率一起。

3、本比赛和pensieve-sigcomm 2017的仿真器有何区别?

区别有三:

1、pensieve是一个chunk或者GOP级别的的仿真器,而本比赛是一个frame级别的仿真器。(无数个frame组成一个chunk)

2、pensieve是一个点播的场景,即它的源端视频信息全部保存在CDN,pensieve不考虑源端变化。而本比赛直播场景中源端变化更像一个生产者和消费者的动态变化。

3、本比赛有极为苛刻的时延约束,pensieve没有对时延进行考虑。

可阅读文献

TIAN Z, ZHAO L P, NIE L H, et al. Deeplive: QoE optimization for live video streaming through deep reinforcement learning[C]//2019 IEEE25thInternational Conference on Parallel and Distributed Systems (ICPADS). Piscataway: IEEE Press, 2019: 827-831.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2335348.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SCP-Firmware安全通告:CVE-2024-11863和CVE-2024-11864

安全之安全(security)博客目录导读 目录 一、概述 二、CVE详情 三、受影响产品 四、修复建议 五、致谢 六、版本历史 一、概述 在SCP固件(SCP-Firmware)中发现两处安全漏洞,可能允许普通世界特权软件(normal world privileged software&#xff…

双按键控制LED(中断优先级)

1.启动时,两个LED灯熄灭,1秒钟后(定时器实现),LED自动点亮; 2.按键1按下后,通过中断int0把两个LED熄灭5s时间,int0优先级设置为最高(优先级必须设置,设置后才…

(四)机器学习---逻辑回归及其Python实现

之前我们提到了常见的任务和算法,本篇我们使用逻辑回归来进行分类 分类问题回归问题聚类问题各种复杂问题决策树√线性回归√K-means√神经网络√逻辑回归√岭回归密度聚类深度学习√集成学习√Lasso回归谱聚类条件随机场贝叶斯层次聚类隐马尔可夫模型支持向量机高…

代码随想录第17天:二叉树

一、二叉搜索树的最近公共祖先(Leetcode 235) 由于是二叉搜索树,节点的值有严格的顺序关系:左子树的节点值都小于父节点,右子树的节点值都大于父节点。利用这一点,可以在树中更高效地找到最低公共祖先。 c…

面试篇 - GPT-1(Generative Pre-Training 1)

GPT-1(Generative Pre-Training 1) ⭐模型结构 Transformer only-decoder:GPT-1模型使用了一个12层的Transformer解码器。具体细节与标准的Transformer相同,但位置编码是可训练的。 注意力机制: 原始Transformer的解…

【从零实现高并发内存池】内存池整体框架设计 及 thread cache实现

📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…

3.6 函数图像描绘

1.函数描图步骤 2.渐进性 2.1 水平渐进线 2.2 垂直渐进线 2.3 斜渐近线 3.作图

电商中的订单支付(内网穿透)

支付页面 接口文档 Operation(summary"获取订单信息") GetMapping("auth/{orderId}") public Reuslt<OrderInfo> getOrderInfo(Parameter(name"orderId",description"订单id",requiredtrue) PathVaariable Long orderId){OrderI…

ESP32开发之ubuntu环境搭建

1. 在Ubuntu官网下载Ubuntu server 20.04版本https://releases.ubuntu.com/20.04.6/ 2. 在vmware下安装Ubuntu 3. 改Ubuntu静态IP $ sudo vi /etc/netplan/00-installer-config.yaml# This is the network config written by ‘subiquity’ network: renderer: networkd eth…

2025年,HarmonyOS认证学习及考试

HarmonyOS应用开发者认证考试 基础认证 通过系统化的课程学习&#xff0c;熟练掌握 DevEco Studio&#xff0c;ArkTS&#xff0c;ArkUI&#xff0c;预览器&#xff0c;模拟器&#xff0c;SDK 等 HarmonyOS 应用开发的关键概念&#xff0c;具备基础的应用开发能力。 高级认证…

空间信息可视化——WebGIS前端实例(一)

技术栈&#xff1a;原生HTML 源代码&#xff1a;CUGLin/WebGIS: This is a project of Spatial information visualization 4 全国贫困县可视化系统 4.1 系统设计思想 党的十九大报告明确指出,要“确保到2020年我国现行标准下农村贫困人口实现脱贫,贫困县全部摘帽,解决区域…

10.第二阶段x64游戏实战-添加计时器

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 上一个内容&#xff1a;9.第二阶段x64游戏实战-创建项目代码获取人物属性 效果图&#xff1a; 当前游戏…

【论文阅读】MOE奠基论文《Adaptive Mixtures of Local Experts》

《Adaptive Mixtures of Local Experts》 前言一、让协同学习竞争1.1 方案1.2 方案演变的由来 二、让竞争学习协同2.1 竞争学习2.2 竞争学习协同 三、案例验证3.1 任务背景3.2 实验结果3.3 后续工作 (Future Work) 前言 论文提出了一个基于多个分离网络的有监督学习方案,该方案…

VM虚拟机安装及Ubuntu安装配置

VM虚拟机安装及Ubuntu安装配置 1、VM虚拟机安装2、创建虚拟机3、Ubuntu系统安装4、编译环境配置4.1 、Ubuntu和 Windows文件互传 文件互传4.1.1、 开启Ubunt下的FTP服务 4.2、 Ubuntu下NFS和SSH服务开启4.2.1、 NFS服务开启4.2.2、 SSH服务开启 4.3、 交叉编译器安装4.3.1 安装…

【C++ 进阶】泛型算法:概述

目录 一、泛型算法基础概念 1.1 什么是泛型算法&#xff1f; 1.2 核心设计原则 1.3 算法分类体系 1.4 与 STL 容器的关系 二、迭代器&#xff1a;泛型算法的 “钥匙” 2.1 迭代器类型 2.2 迭代器适配器 三、常用泛型算法分类与实战 3.1 非修改型算法&#xff08;只读…

系统与网络安全------Windows系统安全(10)

资料整理于网络资料、书本资料、AI&#xff0c;仅供个人学习参考。 域与活动目录 域相关概念 域和域控制器 域&#xff08;Domain&#xff09; 集中管理网络中多台计算机的一种逻辑模式 有别于工作组的对等式管理 是组织与存储资源的核心管理单元 域控制器&#xff08;D…

Linux vagrant 导入ubuntu到virtualbox

前言 vagrant 导入ubuntu虚拟机前提要求 安装 virtualbox 和vagrant<vagrant-disksize> (Linux 方式 Windows 方式)创建一键部署ubuntu虚拟机 /opt/vagrant 安装目录/opt/VirtualBox 安装目录/opt/ubuntu22/Vagrantfile (可配置网络IP,内存,cpu,磁盘及分区,启动项,…

C++ 用红黑树封装map/set

前言 一、源码结构分析 二、模拟实现map/set 2.1 套上KeyOfT 2.2 普通迭代器实现 2.3 const迭代器实现 2.4 解决key不能修改的问题 2.5 map的[]实现 2.6 map/set以及红黑树源码 2.6.1 RBTree.h 2.6.2 set.h 2.6.3 map.h 总结 前言 之前的文章讲解了红黑树的具体实…

量子计算未来的潜力和挑战

据麦肯锡预测&#xff0c;到 2035 年或 2040 年&#xff0c;量子计算市场规模可能增长至约 800 亿美元。目前&#xff0c;许多量子比特技术正竞相成为首台通用、无差错量子计算机的基础&#xff0c;但仍面临诸多挑战。 我们将探讨量子计算的未来前景、潜力&#xff0c;以及它对…

五笔输入法学习的抉择:86版 or 98版?(一场关于效率与传承的思辨)

新开直接98&#xff0c;纯粹高开&#xff1b;老版过渡艰辛自知&#x1f60b;。 笔记模板由python脚本于2025-04-14 19:22:22创建&#xff0c;本篇笔记适合喜好汉字衷情母语的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值&#xff1a;在于输出思考与经验&#xff0c;…