首页 > 其他分享 >HLS、HTTP+FLV、DASH

HLS、HTTP+FLV、DASH

时间:2024-05-31 15:22:06浏览次数:21  
标签:流媒体 HTTP HLS FLV DASH 传输

HLS、HTTP+FLV 和 DASH 是三种常见的流媒体传输协议,它们在技术实现、使用场景和优缺点方面都有显著的区别。以下是对它们的关系和区别的详细解释,以及当前最流行的流媒体传输协议的讨论。

HLS(HTTP Live Streaming)

  1. 开发者

    • 由 Apple 开发。
  2. 工作原理

    • 将视频切片成小的 TS 文件,并生成一个 m3u8 播放列表文件。播放器下载 m3u8 文件并解析各个片段的 URL 进行播放。
  3. 优点

    • 广泛支持:特别是在 Apple 设备和 Safari 浏览器中。
    • 自适应比特率流(ABR):可以根据网络状况动态调整流的质量。
    • 标准 HTTP 服务器支持:易于部署和使用 CDN。
  4. 缺点

    • 延迟较高:通常在 10-30 秒之间。
    • 切片和播放列表管理:实现较复杂。

HTTP+FLV

  1. 开发者

    • 基于 Flash Video (FLV) 格式,由 Adobe 推出。虽然 Flash 已经被淘汰,但 HTTP+FLV 仍然在某些场景中使用。
  2. 工作原理

    • 实时推送音视频数据到服务器,通过 HTTP 持久连接(如 Chunked Transfer Encoding)将数据流式传输到客户端。
  3. 优点

    • 低延迟:通常为 1-5 秒。
    • 实现简单:直接流式传输,不需要切片和播放列表管理。
  4. 缺点

    • 兼容性较差:原本依赖 Flash,现在需要其他技术方案替代。
    • 扩展性较差:长连接特性在大规模分发时压力较大。

DASH(Dynamic Adaptive Streaming over HTTP)

  1. 开发者

    • 由 MPEG 开发,作为国际标准。
  2. 工作原理

    • 类似于 HLS,将视频切片成小的文件,并生成一个 MPD(Media Presentation Description)文件。播放器解析 MPD 文件,动态选择合适的片段进行播放。
  3. 优点

    • 自适应比特率流(ABR):根据网络状况动态调整流的质量。
    • 广泛支持:跨平台支持,包括现代浏览器和设备。
    • 标准化:作为国际标准,具有广泛的适应性。
  4. 缺点

    • 延迟:比 HTTP+FLV 稍高,但通常低于 HLS,通常在 5-10 秒之间。
    • 实现复杂度:类似于 HLS,需要切片和播放列表管理。

当前最流行的流媒体传输协议

当前最流行的流媒体传输协议主要是 HLSDASH,原因如下:

  1. HLS

    • 广泛支持:尤其在 Apple 设备和 Safari 浏览器中,HLS 是默认支持的协议。
    • CDN 友好:通过 HTTP 服务器传输,易于使用 CDN 进行大规模分发。
    • 自适应比特率:提升用户体验,适应不同网络状况。
  2. DASH

    • 跨平台支持:作为国际标准,得到广泛支持,包括在现代浏览器中。
    • 自适应比特率:与 HLS 类似,可以动态调整流的质量以适应网络状况。
    • 灵活性:支持多种编解码器和传输格式。

虽然 HTTP+FLV 在某些低延迟场景(如在线教育和互动直播)仍然使用,但由于 Flash 的淘汰和兼容性问题,它的使用范围相对较小。

关系和总结

  • HLS 和 DASH

    • 都是基于 HTTP 的自适应流媒体协议,适用于大规模分发和跨平台支持。
    • HLS 在 Apple 设备中更为流行,而 DASH 作为国际标准在多种设备和平台中得到广泛支持。
  • HTTP+FLV

    • 主要用于低延迟直播场景,但因兼容性和扩展性问题,逐渐被其他协议取代。

最流行的协议

目前,HLSDASH 是最流行的流媒体传输协议,广泛用于视频点播、直播和大规模分发场景。选择使用哪种协议通常取决于目标设备、延迟要求和具体的应用场景。

标签:流媒体,HTTP,HLS,FLV,DASH,传输
From: https://www.cnblogs.com/strive-sun/p/18224637

相关文章

  • Maven项目通过maven central 发布到中央仓库 https://repo.maven.apache.org/ 手把手
    一、注册mavencentral账号​https://central.sonatype.com/publishing/namespaces我这里直接使用github账号登录,可以自己注册或者直接使用google账号或者github账号登录这里github账号登录之后应该只出现io.github下面的io.gitee我也验证过所以这里出现了github......
  • 如何在 Firebase 云消息 HTTP V1 API 中创建群组?
    我目前正在从Firebase传统API迁移到适用于Firebase云消息(FCM)的HTTPV1API。虽然HTTPV1文档提供了向组发送消息的详细信息,但我却找不到任何有关如何使用HTTPV1API创建或管理组的信息。在传统API中,我们曾经使用/notification等端点创建通知组,并在这些组中管......
  • for循环外创建一个http请求对象,循环内赋值参数多次请求返回数据相同定位及解决(共用一
    一次项目线上问题定位,发现多次不同参数请求值相同,直接上代码List<String>list=newArrayList<>();list.add("85657218,上海奉贤恒盛湖畔豪庭xxx号xxx");list.add("85657219,上海虹口虬江支路xxx弄xxx室");if(CollectionUtil.isNotEmpty(list))......
  • request to https://registry.npm.taobao.org/cnpm failed, reason: certificate has
    换华为的,否则会出问题:cnpmconfgsetregistryhttps://mirrors.huaweicloud.com/repository/npm/npmERR!codeCERT_HAS_EXPIREDnpmERR!errnoCERT_HAS_EXPIREDnpmERR!requesttohttps://registry.npm.taobao.org/cnpmfailed,reason:certificatehasexpirednpmER......
  • Nginx配置https
            HTTPS相对于HTTP提供了更高级别的数据保护和安全性,尤其适合处理敏感信息如个人数据、支付信息等,而HTTP则更适合对安全性要求不高的普通网页浏览。随着网络安全意识的提升和搜索引擎的推动,HTTPS正逐渐成为网络通信的标准。配置自签证书opensslreq-x509-nod......
  • net/http shutdown退出的原理
      使用nginxreload的时候,nginx会close掉listenfd,然后启动新的worker,老的worker继续工作直到当前的fd完全关闭后worker退出。目前使用gin框架的时候也需要频繁的在http:9000监听和htttps:9000之间切换。所以也涉及到上述逻辑看下gin框架中run启动listen的逻辑//Runat......
  • Vitis HLS 学习笔记--块级控制协议-ap_ctrl_chain/ap_ctrl_hs/ap_ctrl_none
    目录1.简介2.详细分析2.1使用场景区别2.2 ap_continue行为详解2.3 ap_ctrl_chain行为详解3.总结1.简介块级控制协议允许硬件模块表明:何时可以开始处理数据。何时完成了数据处理。以及何时处于空闲状态,准备接受新的数据输入。这些信号用于本模块在与其他硬......
  • go net/http send req
      之前写到net/http客户端发送http请求时,会开启HTTP事务发送HTTP请求并等待远程的响应,经过下面一连串的调用,我们最终来到了标准库实现底层HTTP协议的结构体— net/http.Transport:net/http.Client.Donet/http.Client.donet/http.Client.sendnet/http.sendnet/htt......
  • 在Spring Boot应用中使用RestTemplate类发送不同的HTTP GET请求(带请求头、不带请求头)
    原文链接:https://www.cnblogs.com/windyWu/p/16872871.html在本文中,你将学会在SpringBoot应用中使用RestTemplate类发送不同的HTTPGET请求。简单GET请求发送GETHTTP请求,可以使用getForObject()或getForEntity()方法。如下示例,使用getForObject()方法获取JSON字符串形式的用......
  • nginx中$host、$http_host、$proxy_host的区别
    nginx中$host、$http_host、$proxy_host的区别变量 是否显示端口 值$host 不显示端口 浏览器请求的ip,不显示端口$http_host 端口存在则显示 浏览器请求的ip和端口号$proxy_host 默认80端口不显示,其它显示 被代理服务的ip和端口号配置nginx代理服务后不设置proxy_set_head......