音视频学习(二十四):hls协议

基本原理

HLS协议通过将视频文件切分成多个小的媒体段(通常是10秒左右的.ts文件),并通过HTTP传输给客户端。视频播放过程中,客户端按顺序请求这些小段文件来逐步播放整个视频流。HLS还支持多种码率,以便适应不同网络条件的动态调整(自适应流)。

工作流程

HLS协议的基本工作流程包含以下几个步骤:

  1. 视频切片
    • 视频源文件通常是一个完整的长视频。
    • 视频文件被切割成若干个小的TS文件(MPEG-TS格式,通常每个视频片段持续10秒或更短)。
    • 这些切片(.ts文件)被存储在服务器上。
  2. 生成M3U8播放列表
    • 在切片完成后,生成一个以.m3u8为扩展名的播放列表文件,里面包含了TS片段的URL,客户端通过这个播放列表来加载视频片段。
    • .m3u8文件本质上是一个文本文件,列出了所有视频片段(或称“媒体段”)的URL地址,浏览器或播放器根据它来依次请求视频片段。
    • 还可以生成多种码率的M3U8文件,每种码率对应不同的网络条件。
  3. 客户端请求和播放
    • 客户端(如HLS支持的播放器或浏览器)请求.m3u8文件,播放器读取该文件并获取其中包含的视频片段链接。
    • 客户端根据当前网络状况,自动选择合适的码率进行播放。如果网络环境发生变化,播放器可以切换不同的码率流。

M3U8播放列表文件

M3U8文件是HLS的核心部分,它是一个UTF-8编码的播放列表,描述了视频段和相关的元数据。主要有两种类型的M3U8文件:

  • 主播放列表(Master Playlist):列出不同码率、不同分辨率的视频流。
  • 媒体播放列表(Media Playlist):每个流(一个码率)都有一个对应的媒体播放列表,列出具体的.ts文件。

基本结构

一个标准的 .m3u8 文件包含一系列以 #EXT 开头的扩展标记(例如:#EXT-X-VERSION#EXT-X-TARGETDURATION 等)和媒体段(视频片段)的 URL 链接。每个 .m3u8 文件包含的信息对播放流程至关重要,通常分为以下几种类型:

  • 播放列表头部(Header):定义播放器需要遵循的基本规则。
  • 媒体段(Media Segments):指向具体的视频片段(.ts 文件)的链接。
  • 播放列表尾部(Footer):包括结束标记等。

格式解析

头部信息

头部一般包含一些关于播放列表的全局信息,比如版本、最大时长等。

  • #EXTM3U: 每个 .m3u8 文件必须以这个标签开头,标识这是一个M3U播放列表。
  • #EXT-X-VERSION:<version>: 表示M3U8文件的版本号。版本号决定了该播放列表支持的特性。例如,#EXT-X-VERSION:3 表示使用 HLS 版本 3。
  • #EXT-X-TARGETDURATION:<duration>: 定义了每个媒体段的最大持续时间(单位为秒)。客户端用它来确定如何预缓存下一段内容。例如,#EXT-X-TARGETDURATION:10 表示每个段的最大持续时间为 10 秒。
  • #EXT-X-MEDIA-SEQUENCE:<sequence_number>: 指定媒体片段的起始序列号。每个媒体段的序号是递增的,通常从 0 开始。

媒体片段信息

每个媒体段(视频或音频片段)会在 .m3u8 文件中用 #EXTINF 标签标注,它表示该片段的持续时间(单位为秒)以及片段的文件名或URL。

  • #EXTINF:<duration>,: 这个标签后跟的是该视频片段的持续时间(以秒为单位)。例如,#EXTINF:10.0, 表示该片段的持续时间为 10 秒。
  • <media_segment_file>: 这部分指向媒体段文件的位置,通常是 .ts 文件的 URL。例如,segment1.tshttps://example.com/segment1.ts

例如:

#EXTINF:10.0,
segment1.ts
#EXTINF:10.0,
segment2.ts
#EXTINF:10.0,
segment3.ts

多码率支持(自适应流)

如果是一个支持多码率(或称自适应流)的 .m3u8 文件,则会包含多个播放列表,每个播放列表对应一个不同的码率(或分辨率)的视频流。

  • #EXT-X-STREAM-INF:: 这是主播放列表中的一行,标识一个子播放列表,并提供了相关的编码信息(如码率、分辨率等)。
  • BANDWIDTH=<bandwidth>: 指定该流的带宽需求,通常是以比特为单位。例如,BANDWIDTH=800000 表示这个流的带宽是 800 Kbps。
  • RESOLUTION=<width>x<height>: 指定视频的分辨率,例如 RESOLUTION=1920x1080

主播放列表文件会列出不同码率、不同分辨率的子播放列表链接。例如:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:BANDWIDTH=800000,RESOLUTION=640x360
low_quality.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1400000,RESOLUTION=1280x720
medium_quality.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2800000,RESOLUTION=1920x1080
high_quality.m3u8

结束标记

  • #EXT-X-ENDLIST: 这个标记表示播放列表的结束,特别用于点播(VOD)场景,表明媒体播放列表已结束,后续没有更多的媒体段。

加密与内容保护

  • #EXT-X-KEY: 用于指定加密信息,提供加密内容的密钥信息。例如,HLS支持AES-128加密,文件中的加密信息可以指定密钥的位置等:

示例

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0#EXT-X-STREAM-INF:BANDWIDTH=800000,RESOLUTION=640x360
low_quality.m3u8#EXT-X-STREAM-INF:BANDWIDTH=1400000,RESOLUTION=1280x720
medium_quality.m3u8#EXT-X-STREAM-INF:BANDWIDTH=2800000,RESOLUTION=1920x1080
high_quality.m3u8

低码率流 (low_quality.m3u8) 示例

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10.0,
segment1.ts
#EXTINF:10.0,
segment2.ts
#EXTINF:10.0,
segment3.ts
#EXT-X-ENDLIST

常见的 .m3u8扩展标签

  • #EXT-X-DISCONTINUITY: 标记媒体段之间的时间戳或编码格式的不连续性。通常在不同的编码流之间使用。

  • #EXT-X-PROGRAM-DATE-TIME: 指定播放列表中某个时间点的实际日期和时间。

  • #EXT-X-ALLOW-CACHE:<YES|NO>: 指定客户端是否可以缓存媒体文件。

hls的特性

  • 自适应流:HLS支持多个不同码率的视频流,客户端根据当前带宽情况自动切换最佳码率,提供更好的观看体验。

  • 跨平台支持:HLS是基于HTTP协议,因此可以通过任何支持HTTP的客户端播放。它也得到广泛的浏览器和设备的支持(如iOS、Android、macOS、Windows等)。

  • 实时直播支持:HLS协议不仅支持视频点播(VOD),还可以支持实时直播流。

  • 广泛的CDN兼容性:因为HLS使用HTTP协议,它可以很容易地通过内容分发网络(CDN)进行分发,确保高效的视频传输。

  • 内容保护:HLS支持加密流,提供了对视频内容的保护,确保视频播放时不会被未经授权的用户访问。

hls的特点

优点:

  • 易于部署:HLS通过HTTP进行流媒体传输,几乎可以与任何Web服务器兼容,并且不需要特定的协议或协议支持。
  • 广泛支持:由于它是由苹果公司提出的,因此特别适用于iOS和macOS设备。此外,越来越多的浏览器和设备也支持HLS。
  • 自适应比特率:根据网络条件动态调整视频质量,避免播放卡顿。

缺点:

  • 延迟较高:HLS的延迟相对较高,尤其是实时直播场景中。通常会有15到30秒的延迟,虽然可以通过减少每段视频的长度来降低延迟,但代价是增加了请求次数和带宽消耗。
  • 效率问题:相比其他协议(如DASH),HLS的传输效率相对较低,特别是在高清和超高清视频内容中。
  • 视频切片的管理:在需要快速变化的直播场景中,视频切片的管理和更新可能会带来额外的复杂性。

HLS与其他流媒体协议对比

与RTMP(Real-Time Messaging Protocol)

  • HLS协议更适合基于HTTP传输的流媒体应用,并且具有较高的可扩展性。而RTMP主要用于低延迟的直播,通常在直播场景下使用较多。
  • HLS的延迟比RTMP要高。

与DASH(Dynamic Adaptive Streaming over HTTP)

  • DASH协议类似于HLS,也是基于HTTP的自适应流传输协议。DASH的优势是开源、标准化,且支持更细粒度的控制,但在设备兼容性上可能不如HLS广泛。

常见应用

  • 视频点播(VOD):HLS非常适合点播视频内容,特别是在需要跨多个平台(如iOS、Android、Web等)播放时。

  • 实时直播:通过HLS进行直播时,可以将直播内容分割成多个小片段,逐步传输给观众。

  • 视频监控:在一些视频监控应用中,HLS可以作为一种流媒体传输协议,用于将实时视频传输到监控平台或服务器。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

makefile文件

简介&#xff1a; 自动化编译&#xff1a;只需要一个make命令&#xff0c;整个工程自动编译 提高编译效率&#xff1a;再次编译时&#xff0c;只编译修改的文件&#xff08;查看时间戳&#xff0c;根据修改文件的时间判断文件是否被修改&#xff09; 基本语法&#xff1a; …

ArKTS基础组件

一.AlphabetIndexer 可以与容器组件联动用于按逻辑结构快速定位容器显示区域的组件。 子组件 color:设置文字颜色。 参数名类型必填说明valueResourceColor是 文字颜色。 默认值&#xff1a;0x99182431。 selectedColor:设置选中项文字颜色。 参数名类型必填说明valueRes…

微积分复习笔记 Calculus Volume 2 - 4.3 Separable Equations

4.3 Separable Equations - Calculus Volume 2 | OpenStax

【爬虫一】python爬虫基础合集一

【爬虫一】python爬虫基础合集一 1. 网络请求了解1.1. 请求的类型1.2. 网络请求协议1.3. 网络请求过程简单图解1.4. 网络请求Headers(其中的关键字释义)&#xff1a;请求头、响应头 2. 网络爬虫的基本工作节点2.1. 了解简单网络请求获取响应数据的过程所涉及要点 1. 网络请求了…

WPF DataTemplate 数据模板

DataTemplate 顾名思义&#xff0c;数据模板&#xff0c;在 wpf 中使用非常频繁。 它一般用在带有 DataTemplate 依赖属性的控件中&#xff0c;如 ContentControl、集合控件 ListBox、ItemsControl 、TabControls 等。 1. 非集合控件中使用 <UserControl.Resources>&l…

LM芯片学习

1、LM7805稳压器 https://zhuanlan.zhihu.com/p/626577102?utm_campaignshareopn&utm_mediumsocial&utm_psn1852815231102873600&utm_sourcewechat_sessionhttps://zhuanlan.zhihu.com/p/626577102?utm_campaignshareopn&utm_mediumsocial&utm_psn18528…

OCR多模态大模型:视觉模型与LLM的结合之路

原文&#xff1a;https://zhuanlan.zhihu.com/p/7783443583 在使用多模态大模型(Visual Language Model, VLM)做视觉信息抽取时&#xff0c;常常出现错字的问题。为了解决这一问题&#xff0c;本文提出了一种名为Guidance OCR的方法。该方法在不额外训练模型的情况下&#xff…

【C++游记】string的使用和模拟实现

枫の个人主页 你不能改变过去&#xff0c;但你可以改变未来 算法/C/数据结构/C Hello&#xff0c;这里是小枫。C语言与数据结构和算法初阶两个板块都更新完毕&#xff0c;我们继续来学习C的内容呀。C是接近底层有比较经典的语言&#xff0c;因此学习起来注定枯燥无味&#xf…

飞牛 fnos 上用docker部署一款网页端办公系统

描述 一款高效的内网办公操作系统&#xff0c;内含word/excel/ppt/pdf/内网聊天/白板/思维导图等多个办公系统工具&#xff0c;支持原生文件存储。平台界面精仿windows风格&#xff0c;操作简便&#xff0c;同时保持低资源消耗和高性能运行。无需注册即可自动连接内网用户&…

【网络安全】网站常见安全漏洞—服务端漏洞介绍

文章目录 网站常见安全漏洞—服务端漏洞介绍引言1. 第三方组件漏洞什么是第三方组件漏洞&#xff1f;如何防范&#xff1f; 2. SQL 注入什么是SQL注入&#xff1f;如何防范&#xff1f; 3. 命令执行漏洞什么是命令执行漏洞&#xff1f;如何防范&#xff1f; 4. 越权漏洞什么是越…

单元测试-Unittest框架实践

文章目录 1.Unittest简介1.1 自动化测试用例编写步骤1.2 相关概念1.3 用例编写规则1.4 断言方法 2.示例2.1 业务代码2.2 编写测试用例2.3 生成报告2.3.1 方法12.3.2 方法2 1.Unittest简介 Unittest是Python自带的单元测试框架&#xff0c;适用于&#xff1a;单元测试、Web自动…

C++动态规划解决最长公共子序列

动规非常经典的一道题目&#xff0c;由于需要用到二维数组——姑且算为中等难度的题目&#xff0c;其实和01背包有着极高的相似度&#xff0c;无论是实现还是理论。 今天这篇博客不讲过多的DP理论&#xff0c;重在讲解题目本身。其实有一定经验的同志都清楚&#xff0c;DP的难点…

学习日志024--opencv中处理轮廓的函数

目录 前言​​​​​​​ 一、 梯度处理的sobel算子函数 功能 参数 返回值 代码演示 二、梯度处理拉普拉斯算子 功能 参数 返回值 代码演示 三、Canny算子 功能 参数 返回值 代码演示 四、findContours函数与drawContours函数 功能 参数 返回值 代码演示 …

《Modern CMake for C++》学习笔记

学习 Modern CMake for C - Second Edition 时的学习笔记&#xff0c;供大家参考。 相关资源&#xff1a; 原书链接&#xff1a; Modern CMake for C: Effortlessly build cutting-edge C code and deliver high-quality solutions , Second Edition 中文翻译链接&#xff1a…

实战 | 某院校小程序记录

更多大厂面试经验的视频分享看主页和专栏 目录&#xff1a; 前言&#xff1a; 渗透思路 1.绕过前端 2.信息泄露 3.爆破用户账号密码 4.信息泄露2 结束 前言&#xff1a; 遇到一个学校小程序的站点&#xff0c;只在前端登录口做了校验&#xff0c;后端没有任何校验&#x…

Visual studio的AI插件-通义灵码

通义灵码 TONGYI Lingma 兼容 Visual Studio、Visual Studio Code、JetBrains IDEs 等主流 IDE&#xff1b;支持 Java、Python、Go、C/C、C#、JavaScript、TypeScript、PHP、Ruby、Rust、Scala 等主流编程语言。 安装 打开扩展管理器&#xff0c;搜送“TONGYI Lingma”&…

【泛微系统】HR同步功能实例讲解

HR同步功能实例讲解\ 前言 HR同步是指ecology与专业的人事管理软件进行数据同步的功能,ecology中的组织结构和人员信息将完全取自HR软件。 官方HR同步功能解释 实例背景 客户本身有外购EHR系统用于员工的入转调离的基础信息管理,现又外购泛微的OA系统用于企业信息协同办…

【测试】Pytest

建议关注、收藏&#xff01; 目录 功能pytest 自动化测试工具。 功能 单元测试&#xff1a;用于验证代码的最小功能单元&#xff08;如函数、方法&#xff09;的正确性。 简单的语法&#xff1a;不需要继承特定类或使用复杂的结构。断言语句简化。 自动发现测试&#xff1a;P…

实验12 socket网络编程

设计程序 1&#xff0e;阅读TCP、UDP数据通信的例子8-2、8-7&#xff0c;理解并运行查看其功能。 2. 编写程序&#xff0c;使用socket网络接口函数&#xff0c;实现同一网段的两台主机的聊天。注&#xff1a;使用多线程&#xff0c;实现实时聊天功能。&#xff08;使用UDP或TCP…

【LeetCode】2406、将区间分为最少组数

【LeetCode】2406、将区间分为最少组数 文章目录 一、数据结构-堆、贪心1.1 数据结构-堆、贪心1.2 多语言解法 二、扫描线2.1 扫描线 一、数据结构-堆、贪心 1.1 数据结构-堆、贪心 题目已知一些区间, 需要尽量合并, 使 组 最少. 可以用图解画一下 因为尽量合并, 为了紧凑, …