在直播应用中,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 文件:

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

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

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-ALLOW-CACHE:YES
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION:1
#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 方式来请求播放地址。

❯ curl -v http://uplive.b0.upaiyun.com/live/loading.m3u8\?shp_identify\=302 -o playlist
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying 183.158.35.59...
* TCP_NODELAY set
* Connected to uplive.b0.upaiyun.com (183.158.35.59) port 80 (#0)
> GET /live/loading.m3u8?shp_identify=302 HTTP/1.1
> Host: uplive.b0.upaiyun.com
> User-Agent: curl/7.51.0
> Accept: */*
>
< HTTP/1.1 302 Found
< Server: marco/0.26
< Date: Wed, 22 Mar 2017 08:54:11 GMT
< Content-Type: text/plain; charset=utf-8
< Content-Length: 259
< Connection: keep-alive
< Access-Control-Allow-Methods: GET
< Access-Control-Allow-Origin: *
< 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
<
{ [259 bytes data]
* Curl_http_done: called premature == 0
100 259 100 259 0 0 4813 0 --:--:-- --:--:-- --:--:-- 4886
* 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. 如何在 ASP.NET Core 中发送邮件

    前言 我们知道目前 .NET Core 还不支持 SMTP 协议,当我么在使用到发送邮件功能的时候,需要借助于一些第三方组件来达到目的,今天给大家介绍两款开源的邮件发送组件,它们分别是 MailKit ...

  2. HTML5工具做屏幕自适应的两种方法

    近一两年,HTML5在中国很火,也出了不少HTML5工具和模板.别的先不说,对于不同的H5工具,解决屏幕自适应问题的区别是什么? 简单来说,感应式设计是当用不同设备访问时,能够根据设备的宽度和高度对设 ...

  3. OA办公系统,一个沉淀企业文化的容器

    资源是会枯竭的,唯有文化才会生生不息.一切工业产品都是人类智慧创造的.随着公司规模的扩大,企业中两大根本"人和规则"面临诸多挑战,OA办公系统是一个全员使用的办公软件产品,员工可通 ...

  4. MM们,你们为什么要找一个程序猿男票?

    前言 免责声明:这篇文章关于什么?六一儿童节马上就要到了,作为一个前端攻城师,自我感觉效率还可以,老早已把任务搞完,页面布局和前端编码高效按时交付,呵呵.趁有时间,写写文章娱乐一下.MM们,请不要拿起 ...

  5. 第三章 霍夫变换(Hough Transform)

    主要内容: 霍夫变换的作用 霍夫变换检测直线的原理 霍夫变换检测圆的原理 OpenCV中的霍夫变换 1.霍夫变换检测直线原理 霍夫变换,英文名称Hough Transform,作用是用来检测图像中的直 ...

  6. Java IO详解(一)------File 类

    File 类:文件和目录路径名的抽象表示. 注意:File 类只能操作文件的属性,文件的内容是不能操作的. 1.File 类的字段 我们知道,各个平台之间的路径分隔符是不一样的. ①.对于UNIX平台 ...

  7. 如何在Unity中分别实现Flat Shading(平面着色)、Gouraud Shading(高洛德着色)、Phong Shading(冯氏着色)

    写在前面: 先说一下为什么决定写这篇文章,我也是这两年开始学习3D物体的光照还有着色方式的,对这个特别感兴趣,在Wiki还有NVIDIA官网看了相关资料后,基本掌握了渲染物体时的渲染管道(The re ...

  8. aws上redhat安装redis服务记

    1.准备 官网下载

  9. 给sftp创建新用户、默认打开和限制在某个目录

    一.环境: CentOS 6.8 使用 FileZilla 进行 sftp 连接 二.背景 给外包的工作人员提供我司服务器的某一目录的访问(包括读写)权限,方便他们部署代码文件. 之所以是某一目录的访 ...

  10. web worker 扫盲篇

    什么是woker 官方的解释是这样的: worker是一个对象,通过构造函数Worker创建,参数就是一个js文件的路径:文件中的js代码将运行在主线程之外的worker线程: var jsFileU ...