在直播应用中,RTMP 和 HLS 是两种较为成熟且广泛应用的流媒体协议,基本上可以覆盖所有客户端。RTMP 是互联网 TCP/IP 五层体系结构中应用层的协议,主要优势就是实时性高,基本可将直播延时控制在3秒以内,因此广泛应用于低延时直播。

HLS是由 Apple 公司实现的基于 HTTP 的流媒体传输协议,拥有性能高、完美支持 iOS等优势。相比于 RTMP 协议,HLS 无需在移动端安装 APP,同时兼容HTML5,因此在移动直播的传播和体验上都拥有巨大的优势。不过HLS 的实时性较差,业界的平均直播延时达在10s ~35s。

在让许多用户最头痛的 HLS 延时问题上,又拍云做了针对性的技术优化,实现了 HLS 的超低延时,将 HLS 延时稳定控制在了 4 秒左右。

HLS 高延时原因分析

HLS 理论上延时=1个切片的时长+ 0-1个td(td是EXT-X-TARGETDURATION,可简单理解为播放器取片的间隔时间) + 0-n个启动切片(苹果官方建议是请求到3个片之后才开始播放) + 播放器最开始请求的片的网络延时(网络连接耗时)。

从延时组成公式可以看出,HLS 的延时主要是以下四部分组成:

  1. 服务器端的编码器和流分割器生成 TS 文件的时常,HLS 协议应用于直播视频传输时,是将媒体文件切割成了对应于媒体分段的 TS 文件。

  2. 播放器取片的间隔时间,在客户端开始下载之前,必须等待服务器端的编码器和流分割器至少生成一个TS 文件。

  3. 客户端下载切片的时间及启动播放所需的切片个数,通常下载完两个媒体文件后才能保证不同分段音视频间的无缝连接。

  4. 客户端最开始解码并开始播放的时间。

HLS的延时优化主要是针对前三个部分,第四个部分是取决于用户客户端的性能。

又拍云 4S 延时 HLS+ 技术详解

由于客户端每次请求 TS 或 m3u8 可能都是一个新的连接请求,所以,我们无法有效地标识客户端,一旦出现问题,基本无法有效地定位问题,因此一般服务器都会对传统的 HLS 做一些改进。

又拍云 HLS+ ,又称为流式 HLS 技术,将标准的 HLS 进行流式处理,能大幅度降低标准 HLS 延迟,提高HTML5 端直播兼容性,且具有回源量小、系统简单、排错容易、防盗链、避免 HLS 404 等优势。

又拍云 HLS+ 能够标记每个客户端的 HLS 请求,并为每个 HLS 请求建立起连接,再动态的为每个播放请求生成独立的 M3U8 列表,并动态快速的生成仅针对这个播放请求的小切片文件。

为了解决 HLS 请求不友好的问题,又拍云采用Variant HLS+HTTP 302的方式标识客户端的行为。

1、Variant HLS

首先,下载一条又拍云的 m3u8 文件:

  1. wget http://uplive.bo.upaiyun.com/live/loading.m3u8

然后,打开下载得到的 playlist 文件:

  1. #EXTM3U
  2. #EXT-X-VERSION:3
  3. #EXT-X-ALLOW-CACHE:YES
  4. #EXT-X-MEDIA-SEQUENCE:0
  5. #EXT-X-TARGETDURATION:1
  6. #EXTINF:0.998, no desc

http://183.158.35.12:8080/uplive.b0.upaiyun.com/live/loading-0.ts?shp_uuid=e4989f34fcab282e21ef1fd2980284cb&shp_ts=1490172420851&shp_cid=17906&shp_pid=3370578&shp_sip0=127.0.0.1&shp_sip1=183.158.35.12&domain=uplive.b0.upaiyun.com&shp_seqno=0

可以看出又拍云的 HLS+ 支持这种 Variant HLS 方式来标识一条 HLS 连接,同时是使用 UUID 来表示一条 HLS 连接。

2、HTTP 302

首先,以 HTTP 302 方式来请求播放地址。

  1. curl -v http://uplive.b0.upaiyun.com/live/loading.m3u8\?shp_identify\=302 -o playlist
  2. % Total % Received % Xferd Average Speed Time Time Time Current
  3. Dload Upload Total Spent Left Speed
  4. 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying 183.158.35.59...
  5. * TCP_NODELAY set
  6. * Connected to uplive.b0.upaiyun.com (183.158.35.59) port 80 (#0)
  7. > GET /live/loading.m3u8?shp_identify=302 HTTP/1.1
  8. > Host: uplive.b0.upaiyun.com
  9. > User-Agent: curl/7.51.0
  10. > Accept: */*
  11. >
  12. < HTTP/1.1 302 Found
  13. < Server: marco/0.26
  14. < Date: Wed, 22 Mar 2017 08:54:11 GMT
  15. < Content-Type: text/plain; charset=utf-8
  16. < Content-Length: 259
  17. < Connection: keep-alive
  18. < Access-Control-Allow-Methods: GET
  19. < Access-Control-Allow-Origin: *
  20. < Location: http://183.158.35.19:8080/uplive.b0.upaiyun.com/live/loading.m3u8?shp_uuid=2862b1b817a74cf719b1cd8f554616cd&shp_ts=1490172851450&shp_cid=59553&shp_pid=1730488&shp_sip0=127.0.0.1&shp_sip1=183.158.35.19&domain=uplive.b0.upaiyun.com&shp_identify=302
  21. <
  22. { [259 bytes data]
  23. * Curl_http_done: called premature == 0
  24. 100 259 100 259 0 0 4813 0 --:--:-- --:--:-- --:--:-- 4886
  25. * Connection #0 to host uplive.b0.upaiyun.com left intact

  

打开 playlist 内容:

Redirect to http://183.158.35.19:8080/uplive.b0.upaiyun.com/live/loading.m3u8?shp_uuid=2862b1b817a74cf719b1cd8f554616cd&shp_ts=1490172851450&shp_cid=59553&shp_pid=1730488&shp_sip0=127.0.0.1&shp_sip1=183.158.35.19&domain=uplive.b0.upaiyun.com&shp_identify=302

跳转之后的地址存放真正的 playlist,同时也能够将 UUID 加入到了连接上。

总的来说,不管通过这个方法,最终能通过一个唯一的 ID 来标识一条媒体流,这样在排查问题时就可以根据这个 ID 来定位播放过程中的问题。

又拍云 HLS+延时实测

以下是通过又拍云 HLS+ 直播技术所测试的延迟实例,又拍直播云已可将 HLS 延时控制在4秒左右。

推荐阅读:

让Chrome看不了WWDC直播的HLS技术详解
技术干货|直播转码系统架构与实践
无连麦,不直播,都在说的直播利器连麦互动到底是啥?

如何将HLS延时缩短至4秒,HLS+技术详解的更多相关文章

  1. 让Chrome看不了WWDC直播的HLS技术详解

    Requirements: Live streaming uses Apple's HTTP Live Streaming (HLS) technology. HLS requires an iPho ...

  2. 图片延时加载jquery.inview.js用法详解

    我们在网站上总能见到这样的效果,若是有图片,图片都是先用loading加载一小段时间,然后紧接着出来要显示的图片,即效果如下: v2_loading.gif,几秒钟时间过渡到v2_pic_01_s.j ...

  3. [转帖]技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解

    技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解    http://www.52im.net/thread-1309-1-1.html   本文来自腾讯资深研发工程师罗成的技术分享, ...

  4. 详解API Gateway流控实现,揭开ROMA平台高性能秒级流控的技术细节

    摘要:ROMA平台的核心系统ROMA Connect源自华为流程IT的集成平台,在华为内部有超过15年的企业业务集成经验. 本文分享自华为云社区<ROMA集成关键技术(1)-API流控技术详解& ...

  5. 实时监控、直播流、流媒体、视频网站开发方案流媒体服务器搭建及配置详解:使用nginx搭建rtmp直播、rtmp点播、,hls直播服务配置详解

    注意:这里不会讲到nginx流媒体模块如何安装的问题,只研究rtmp,hls直播和录制相关的nginx服务器配置文件的详细用法和说明.可以对照这些命令详解配置nginx -rtmp服务 一.nginx ...

  6. 【官方文档】Nginx模块Nginx-Rtmp-Module学习笔记(二)HLS 指令详解

    源码地址:https://github.com/Tinywan/PHP_Experience 一.在Nginx配置文件的RTMP模块中配置hls hls_key_path /tmp/hlskeys; ...

  7. [视频播放] HLS协议之M3U8、TS流详解

    本文转载自:<hls之m3u8.ts流格式详解> HLS,Http Live Streaming 是由Apple公司定义的用于实时流传输的协议,HLS基于HTTP协议实现,传输内容包括两部 ...

  8. 开机延时启动多程序(Dos下Start命令详解)

    前言 在实际开发当中,很多程序需要开机自启,并且对启动顺序有所要求,这里推荐一种最简单的开机延时启动多程序的方法,使用bat脚本来控制程序的启动顺序. Bat脚本实现 Bat比较简单,延时是采用pin ...

  9. 【JAVA秒会技术之秒杀面试官】秒杀Java面试官——集合篇(一)

    [JAVA秒会技术之秒杀面试官]秒杀Java面试官——集合篇(一) [JAVA秒会技术之秒杀面试官]JavaEE常见面试题(三) http://blog.csdn.net/qq296398300/ar ...

随机推荐

  1. springcloud(一):大话Spring Cloud

    研究了一段时间spring boot了准备向spirng cloud进发,公司架构和项目也全面拥抱了Spring Cloud.在使用了一段时间后发现Spring Cloud从技术架构上降低了对大型系统 ...

  2. 当谈 SQL 优化时谈些什么?

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:孙银行 背景 Mysql数据库作为数据持久化的存储系统,在实际业务中应用广泛.在应用也经常会因为SQL遇 ...

  3. Quartz (一)

    1 核心接口 1.1 Scheduler---核心调度器 1.2 Job---任务 1.3 JobDetail---任务描述 1.4 Trigger---触发器 2 触发器 Tigger(CornTr ...

  4. BM25和Lucene Default Similarity比较 (原文标题:BM25 vs Lucene Default Similarity)

    原文链接: https://www.elastic.co/blog/found-bm-vs-lucene-default-similarity 原文 By Konrad Beiske 翻译 By 高家 ...

  5. PHP 类的封装和使用

    类:相似的数据和数据操作的封装  class 成员量:普通的量加上一定的修饰就变成了成员量 public,protected,private 成员方法:普通的函数,加上一定的修饰,放入到类中就变成了成 ...

  6. EF Core 2.0 新特性

    前言 目前 EF Core 的最新版本为 2.0.0-priview1-final,所以本篇文章主要是针对此版本的一些说明. 注意:如果你要在Visual Studio 中使用 .NET Core 2 ...

  7. XD

    题目 是否完成 题目分类 简要题解 没有上司的舞会(codevs1380) Y 树形dp dp[u][0]表示不包含此节点,dp[u][1]表示包含,转移方程为 dp[u][0]+=max(dp[v] ...

  8. php的八大数据类型

    1. 八大数据: bool 布尔类型:0,1:真假 integer 整形 float 浮点型 string 字符串 array 数组 object 对象,类,class resource 文件,图片, ...

  9. javaWeb学习总结(2)- http协议

    一.http简介 1.基本介绍: (1)客户端连上web服务器后,若想获得web服务器中的某个web资源,需遵守一定的通讯格式,HTTP协议用于定义客户端与web服务器通迅的格式. (2)WEB浏览器 ...

  10. List在执行remove方法不能删除指定的对象

    我们根据List中的源码分析, remove方法的原理: public boolean remove(Object o){      if(o ==null) {           for(inti ...