探索ll-hls低延迟直播协议

news2024/11/16 3:31:18

HLS全称为HTTP Live Streaming,其中m3u8作为描述协议,指向一系列切片文件。支持多码流与自适应码率,支持广告无缝播放,支持CMAF协议的低延时直播,也支持CDN动态选择。

我们先看下HLS整体架构,由三部分构成:服务端、CDN分发、客户端,切片文件可以是ts或者mp4。如下图所示:

一、自适应码率

服务端提供多个不同码率的码流,客户端根据估计的码率来选择最合适的码流,实现自适应码率的流畅播放。码流描述使用EXT-X-STREAM-INF表示,BANDWIDTH表示带宽,RESOLUTION表示分辨率,示例如下:

#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=150000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/low/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=240000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/lo_mid/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=440000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/hi_mid/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=640000,RESOLUTION=640x360,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/high/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=64000,CODECS="mp4a.40.5"
http://example.com/audio/index.m3u8

二、广告无缝播放

视频和广告的编码器参数往往不同,所以在插播广告时,需要重新创建解码器,有一定耗时。m3u8为了解决这个问题,引入EXT-X-DISCONTINUITY来标识前后切片参数不同,让客户端可以提前初始化解码器。示例如下:

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-VERSION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10.0,
ad0.ts
#EXTINF:8.0,
ad1.ts
#EXT-X-DISCONTINUITY
#EXTINF:10.0,
movieA.ts
#EXTINF:10.0,
movieB.ts

三、低延迟直播

HLS的低延迟直播基于CMAF协议(Common Media Application Format)。CMAF由四部分组成:

  • CMAF Track:包含video、audio、subtitle轨道;
  • CMAF Header:轨道头部信息,比如视频的宽高、分辨率,音频采样率、声道数;
  • CMAF Segment:轨道的一系列片段;
  • CMAF Chunk:Segment的分片,若干个Chunk组成一个Segment;

关于CMAF的结构示意图如下:

在认识CMAF协议后,我们看下Low-Latency HLS的关键点:生成segment分片(chunk)、Playlist增量更新、使用预加载提示、切换码率过渡上报。

1、生成segment分片

在CMAF协议中,segment还可以划分更小单元——chunk。每个chunk块有更短的时长,易于打包、发布、传输。例如,一个时长为6s的segment划分30个chunk,那么每个chunk时长仅有200ms。使用EXT-X-PART标签来表示chunk分块。

2、Playlist增量更新

使用EXT-X-SKIP标签实现增量更新,降低传输成本。

3、阻止列表重新加载

低延迟协议支持阻止播放列表重新加载,避免浪费带宽。当客户端发起HTTP请求更新列表时,指定需要更新的segment。服务端收到请求后,先保持住请求,等待segment准备就绪,然后push推送给客户端。

4、预加载提示

为了消除不必要的RTT等待,服务端使用EXT-X-PRELOAD-HINT标签,来通知客户端预加载下一个segment。

5、切换码率过渡上报

低延迟播放,客户端支持以最少的RTT数来切换码率,实现码率自适应。使用EXT-X-RENDITION-REPORT标签来携带媒体序列号、分块等信息。

四、CDN动态选择

CDN架构包括:origin源站和edge边缘节点。客户端会就近访问边缘节点,如果命中缓存,那么直接使用缓存;如果不命中缓存,回溯到源站去请求,简称为回源。架构如下图所示:

提供PATHWAY-ID来选择CDN,使用EXT-X-CONTENT-STEERING来指定选中的CDN,示例如下:

#EXTM3U 
#EXT-X-CONTENT-STEERING:SERVER-URI="/steering?video=00012",PATHWAY-ID="CDN-A" 
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID=“A”,NAME="English",DEFAULT=YES, 
LANGUAGE="en",URI="audio.m3u8" 
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID=“B”,NAME=“ENGLISH”,DEFAULT=YES, 
LANGUAGE="en",URI="https://backup.example.com/content/videos/video12/
audio.m3u8" #EXT-X-STREAM-INF:BANDWIDTH=1280000,AUDIO="A",PATHWAY-ID="CDN-A" 
low/video.m3u8 
#EXT-X-STREAM-INF:BANDWIDTH=7680000,AUDIO="A",PATHWAY-ID="CDN-A" 
hi/video.m3u8 
#EXT-X-STREAM-INF:BANDWIDTH=1280000,AUDIO="B",PATHWAY-ID="CDN-B" 
https://backup.example.com/content/videos/video12/low/video.m3u8 
#EXT-X-STREAM-INF:BANDWIDTH=7680000,AUDIO="B",PATHWAY-ID="CDN-B" 
https://backup.example.com/content/videos/video12/hi/video.m3u8

提供PATHWAY-PRIORITY来标识各个CDN路径的优先级,排在前面的优先级最高。另外用TTL标识客户端等待时间,默认为300s。示例如下:

{ 
    "VERSION": 1, 
    "TTL": 300, 
    "RELOAD-URI": "https://example.com/steering?video=00012&session=123", 
    "PATHWAY-PRIORITY": [ 
        "CDN-A", 
        "CDN-B" 
    ] 
}

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

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

相关文章

存储技术3 数据保护: RAID

Why RAID 性能限制了磁盘驱动单独的驱动存在预期的使用寿命 MTBF测量若一个驱动器的MTBF是750 000小时, 阵列中有100个驱动, 阵列的MTBF会变成 750000 / 100 7500小时 RAID用于减缓这个问题RAID特点 增大容量高可用性增强的性能 RAID implementation…

仿微信我的列表功能菜单按钮 我的个人中心页面功能菜单

前端vue自定义仿微信我的列表功能菜单按钮 我的个人中心页面功能菜单, 下载完整代码请访问https://ext.dcloud.net.cn/plugin?id12990 效果图如下: #### 使用方法 使用方法 <!-- leftTitle:标题 icon&#xff1a;左边图标 click&#xff1a;点击事件 --> <ccMe…

【java】IO流

IO流 原理 分类 字节流与字符流 节点流与包装流 Java IO详解&#xff08;五)------包装流 - YSOcean - 博客园 (cnblogs.com)JAVA I/O流 字符流和字节流、节点流和处理流(包装流、过滤流)、缓冲流_过滤流和缓冲流,字节流的关系_X-Dragon烟雨任平生的博客-CSDN博客 字符流 i…

算法模板(4):动态规划(2)

8.树形DP 没有上司的舞会 树上最大独立集问题 Ural 大学有 N N N 名职员&#xff0c;编号为 1 ∼ N 1 \sim N 1∼N。他们的关系就像一棵以校长为根的树&#xff0c;父节点就是子节点的直接上司。每个职员有一个快乐指数&#xff0c;用整数 H i H_i Hi​ 给出&#xff0c;…

顺序查找和折半查找

顺序查找和折半查找 顺序查找 一、算法思想 顺序查找&#xff0c;又叫“线性查找”&#xff0c;通常用于线性表。 算法思想&#xff1a;从头到尾挨个找&#xff08;或者反过来也OK&#xff09; 二、算法实现 结构体定义 typedef struct{ElemType *elem;int TableLen; }SS…

SpringBoot + Vue 的留守儿童系统的研究与实现

文章目录 1.研究背景2. 技术栈3.系统分析4系统设计5系统的详细设计与实现5.1系统功能模块5.2管理员功能模块 1.研究背景 以往的留守儿童爱心的管理&#xff0c;一般都是纸质文件来管理留守儿童爱心信息&#xff0c;传统的管理方式已经无法满足现代人们的需求&#xff1b;使用留…

变压器差动保护的影响因素和相应的措施

由于变压器一、二次电流、电压大小不同&#xff0c;相位不同&#xff0c;电流互感器特性差异&#xff0c;电源侧有励磁电流&#xff0c;都将造成不平衡电流流过继电器&#xff0c;必须采用相应措施消除不平衡电流的影响。 主要措施 &#xff08;1&#xff09;减小稳态情况下的…

SpringCloud学习笔记(四)RabbitMQ

一、同步通讯的优缺点 时效性较强&#xff0c;可以立即得到结果但是耦合度高&#xff0c;性能和吞吐能力下降有额外的资源消耗 二、异步通讯的优缺点 耦合度低&#xff0c;吞吐量提升故障隔离&#xff0c;流量削峰依赖于Broker的可靠性、安全性和吞吐能力 三、什么是MQ MQ…

物联网Lora模块从入门到精通(七)串口通讯

一、前言 在Lora模块的程序设计中&#xff0c;串口通信一定是一个极其重要且常用的通信方式&#xff0c;借助串口通信&#xff0c;我们不但可以向外传输我们获取的数据&#xff0c;还可以根据外部指令做出相应。 同样的&#xff0c;在例程中&#xff0c;为我们提供了一个名为us…

SSM简易项目实战(基本CRUD操作):速速来学+项目完整源码

前言&#xff1a;又是一年暑期将至&#xff0c;找实习&#xff1f;手里没几个项目恐怕不行&#xff0c;今天给各位带来一个较为简易的Web项目&#xff0c;快来学吧&#xff01; 一、项目简介 1、云借阅图书管理系统 技术栈&#xff1a;&#xff08;SpringSpringMVCMybatisMyS…

【面试必问】Spring核心之控制反转(IOC)

tip&#xff1a;作为程序员一定学习编程之道&#xff0c;一定要对代码的编写有追求&#xff0c;不能实现就完事了。我们应该让自己写的代码更加优雅&#xff0c;即使这会费时费力。 &#x1f495;&#x1f495; 推荐&#xff1a;体系化学习Java&#xff08;Java面试专题&#…

驱动开发:内核封装WFP防火墙入门

WFP框架是微软推出来替代TDIHOOK传输层驱动接口网络通信的方案&#xff0c;其默认被设计为分层结构&#xff0c;该框架分别提供了用户态与内核态相同的AIP函数&#xff0c;在两种模式下均可以开发防火墙产品&#xff0c;以下代码我实现了一个简单的驱动过滤防火墙。 WFP 框架分…

触发器和事件自动化的讲解

触发器和事件自动化 一、触发器 1、触发器的基本概念 触发器是和表相关的一种数据库对象&#xff0c;可以将他看作一种特殊的存储过程&#xff0c;不需要人为调动的存储过程。 关键字&#xff1a;trigger 基本作用&#xff1a;通过对表进行数据的插入、更新或删除等操作来触…

UnityVR--AudioManager--音频管理中心

目录 前言 建立音频配置文件AudioConfig 建立音频管理AudioManager 使用AudioManager播放音效 前言 关于音频组件的简单使用请详见VideoPlayer&AudioSource&#xff0c;不过在一个工程项目中&#xff0c;会有很多的声音文件&#xff0c;播放的时间和条件也不相同&#…

【算法题】2614. 对角线上的质数

题目&#xff1a; 给你一个下标从 0 开始的二维整数数组 nums 。 返回位于 nums 至少一条 对角线 上的最大 质数 。如果任一对角线上均不存在质数&#xff0c;返回 0 。 注意&#xff1a; 如果某个整数大于 1 &#xff0c;且不存在除 1 和自身之外的正整数因子&#xff0c;…

Docker环境下部署Ghost开源内容管理系统

Docker环境下部署Ghost开源内容管理系统 一、Ghost介绍1.1 Ghost简介1.2 Ghost特点 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载Ghost镜像五、部署Ghost开源内容管理系统…

【linux工具备忘录】- tmux

文章目录 安装常用命令会话的进入和退出窗口创建、删除、切换窗口内的子窗口管理(创建/删除/切换)会话的后台托管管理 tmux的配置配置的创建配置重载修改前缀键更多使用说明 tmux的插件管理tpm插件管理器tmux-powerline 一个漂亮的底栏 安装 sudo apt install tmux常用命令 会…

分布式软件架构——RESTful服务

RESTful&#xff08;Representational State Transfer&#xff09; RESTful是一种网络应用程序的设计风格和开发方式&#xff0c;基于HTTP&#xff0c;可以使用XML格式定义或JSON格式定义。RESTFUL适用于移动互联网厂商作为业务接口的场景&#xff0c;实现第三方OTT调用移动网…

shell脚本基础2——条件语句、分支选择、循环语句

文章目录 一、条件语句二、分支选择三、循环语句3.1 for循环3.1.1 语法一3.1.2 语法二 3.2 while循环3.2.1 普通用法3.2.2 whileif判断循环3.2.3 特殊用法 3.3 until循环 四、break和continue4.1 break用法4.2 continue用法 五、自定义脚本退出状态码 一、条件语句 使用 if 语句…

XdsObjects .NET 8.45.1001.0 Crack

XdsObjects 是一个工具包&#xff0c;允许开发人员使用 IHE XDS 和 XDS-I 配置文件开发应用程序&#xff0c;只需花费最少的时间和精力&#xff0c;因为遵守配置文件和 ebXML 规则的所有艰苦工作都由该工具包处理。 它为所有角色提供客户端和服务器支持&#xff0c;包括&#…