目前,国内主流的直播协议有HLS、RTMP、HTTP FLV,适用于不同的直播场景。

一、HLS、RTMP与HTTP FLV

1.HLS

HLS 全称是 HTTP Live Streaming, 是一个由 Apple 公司实现的基于 HTTP 的媒体流传输协议. 它跟 DASH 协议的原理非常类似. 通过将整条流切割成一个小的可以通过 HTTP 下载的媒体文件, 然后提供一个配套的媒体列 表文件, 提供给客户端, 让客户端顺序地拉取这些媒体文件播放, 来实现看上去是在播放一条流的效果。

△HLS 原理架构图

HLS 协议基于 HTTP,主要内容是关于 M3U8 这个文本协议的。其实生成和解析都非常简单, HLS 的请求流程是:

  1. http 请求 m3u8 的 url。

  2. 服务端返回一个 m3u8 的播放列表,这个播放列表是实时更新的,一般一次给出5段数据的 url。

  3. 客户端解析 m3u8 的播放列表,再按序请求每一段的 url,获取 ts 数据流。

HLS 的优势

  • 客户端支持简单, 只需要支持 HTTP 请求即可, HTTP 协议无状态, 只需要按顺序下载媒体片段即可.

  • 使用 HTTP 协议网络兼容性好, HTTP 数据包也可以方便地通过防火墙或者代理服务器, CDN 支持良好.

  • Apple 的全系列产品支持, 由于 HLS 是苹果提出的, 所以在 Apple 的全系列产品包括 iphone, ipad, safari 都不需要安装任何插件就可以原生支持播放 HLS, 现在, Android 也加入了对 HLS 的支持.

  • 自带多码率自适应, Apple 在提出 HLS 时, 就已经考虑了码流自适应的问题.

HLS 的劣势

  • 相比 RTMP 这类长连接协议, 延时较高, 难以用到互动直播场景.

  • 对于点播服务来说, 由于 TS 切片通常较小, 海量碎片在文件分发, 一致性缓存, 存储等方面都有较大挑战.

2. RTMP

RTMP协议是一个互联网TCP/IP五层体系结构中应用层的协议。RTMP协议中基本的数据单元称为消息。当RTMP协议在互联网中传输数据的时候,消息会被拆分成更小的单元,称为消息块。RTMP传输媒体数据的过程中,发送端首先把媒体数据封装成消息,然后把消息分割成消息块,最后将分割后的消息块通过TCP协议发送出去。接收端在通过TCP协议收到数据后,首先把消息块重新组合成消息,然后通过对消息进行解封装处理就可以恢复出媒体数据。

RTMP的优势

  • 速度快,误码率低,延迟低

  • RTMP 是专为流媒体服务而生,协议在制定的时候就考虑到很多底层的优化

  • 消息块的传输能够提供更加稳定的直播环境,在硬件上要求会更高,但是却能够缓解http的繁琐的传输介质。

RTMP的劣势

  • 不支持Html5传播、浏览器推送

  • 基于TCP协议,虽然开发难度大,推广度还不够,对于开发人员来说门槛比较高。

  • 对硬件要求相较于HLS较高

3.HTTP FLV

HTTP FLV是一种将直播流模拟成FLV文件,通过HTTP协议进行下载的模式来实现流媒体传输的协议。

HTTP FLV 结合了 RTMP 的低延时,以及可以复用现有HTTP分发资源的流式协议。它的实时性和RTMP相等,与RTMP相比又省去了部分协议交互时间,首屏时间更短,可拓展的功能也更多。

HTTP FLV的优势

  • 可以在一定程度上避免防火墙的干扰

  • 可以很好的兼容HTTP 302跳转,做到灵活调度

  • 可以使用HTTPS做加密通道

  • 很好的支持移动端(Android,IOS)

二、直播协议HLS、RTMP与HTTP FLV的简单对比

协议

传输方式

视频封装格式

延时

数据分段

HTML5直播

应用场景

HLS

HTTP流

Ts文件

10-30s

切片

支持

H5直播,游戏直播

RTMP

tcp流

flv tag

2s

连续流

不支持

互动直播

http flv

HTTP流

flv

2s

连续流

支持

互动直播

三、总结

RTMP格式目前在国内是用比较多,国内CDN厂商也多支持RTMP协议。HLS作为苹果提出的直播协议,在iOS端占据了不可撼动的地位,同时又便于传播。HTTP FLV使用类似RTMP流式协议的HTTP长连接,需由特定流媒体服务器分发的,兼顾两者的优点。

又拍云一站式直播解决方案基于又拍云CDN,支持 RTMP、HTTP-FLV 和 HLS协议,并且通过智能调度、链路保障、追帧处理、丢帧处理以及业界首创的 HLS+ 技术,将RTMP、HTTP FLV直播延迟控制在1秒内,将HLS协议控制在4秒左右。

推荐阅读:

WebSocket+MSE——HTML5 直播技术解析

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

技术干货|HLS 协议详解及优化技术解析

从Html5直播到互动直播,看直播协议的选择的更多相关文章

  1. 看直播 csust oj

    看直播 Description 小明喜欢看直播,他订阅了很多主播,主播们有固定的直播时间 [Li, Ri] . 可是他网速只有2M,不能同时播放两个直播,所以同一时间只能看一个直播. 并且他只会去看能 ...

  2. 直播协议的选择:RTMP vs. HLS

    文章转自:直播协议的选择:RTMP vs. HLS 前言 随着直播业务的兴起,越来越多的直播平台开始涌现,这火热的程度好像一个应用不带上直播业务出来都不好意思跟人打招呼.想要做一个直播业务,主要包括三 ...

  3. 国内游戏直播火热 为何YY游戏直播却巨亏

    为何YY游戏直播却巨亏" title="国内游戏直播火热 为何YY游戏直播却巨亏"> 伴随"千万年薪主播"."美女主播陪玩那些事儿&q ...

  4. 阿里云低延时直播 RTS 能力升级 让直播推流效果更佳

    行业背景 直播技术飞速发展让各个行业的用户体验呈现多样化和个性化,不同业务场景下创新实践满足大众对于音视频互动体验和参与的高标准要求.历经2020年初的巨变之后,以视频.游戏.电商.教育为主的互联网经 ...

  5. 5┃音视频直播系统之 WebRTC 中的协议UDP、TCP、RTP、RTCP详解

    一.UDP/TCP 如果让你自己开发一套实时互动直播系统,在选择网络传输协议时,你会选择使用UDP协议还是TCP协议 假如使用 TCP 会怎样呢?在极端网络情况下,TCP 为了传输的可靠性,将会进行反 ...

  6. 网络直播流媒体协议的选择讨论,RTSP,RTMP,HTTP,私有协议?

    最近有不少人在EasyDarwin的交流群里面问关于花椒.映客手机直播技术的问题,还有RTSP.RTMP协议选择的问题,这里个人谈一下自己的愚见. 1.不管是RTSP/RTP.RTMP.HTTP,亦或 ...

  7. day122:MoFang:OSSRS流媒体直播服务器&基于APICloud的acLive直播推流模块实现RTMP直播推流

    目录 1.docker安装OSSRS流媒体直播服务器 2.基于APICloud的acLive直播推流模块实现RTMP直播推流 3.直播流管理 1.docker安装OSSRS流媒体直播服务器 1.OSS ...

  8. 推荐下:开源ckplayer 网页播放器, 跨平台(html5, mobile),flv, f4v, mp4, rtmp协议. webm, ogg, m3u8 !

    视频播放, 原本是想h5 自带视频播放,使用很简单,结果现实很骨感. <video controls="controls" preload="auto" ...

  9. html5播放m3u8视频,web端看直播

    https://github.com/jiqing9006/hLive <!DOCTYPE html> <html> <head> <meta charset ...

随机推荐

  1. 【WPF】获取电磁笔的压感

    WPF 不仅支持触控,也支持笔的输入,比如现在比较高大上的电磁笔.便宜的板子一般不配备电磁笔,而是配电容笔,虽然也号称XXX级压感,但是效果自然不可与电磁笔相比. UIElement 类规范了UI元素 ...

  2. Oracle 12C 新特性之表分区或子分区的在线迁移

    Oracle 12c 中迁移表分区或子分区到不同的表空间不再需要复杂的过程.与之前版本中未分区表进行在线迁移类似,表分区或子分区可以在线或是离线迁移至一个不同的表空间.当指定了 ONLINE 语句,所 ...

  3. Win10更新补丁失败后出现无法更新正在撤销 解决办法

    系统更新失败,反复重启还是不行,那是不是下载下来的补丁没用了呢??所以我们先要删除Windows更新的缓存文件!在做以下操作之前,首先我们要确认系统内的windows update & BIT ...

  4. Rabin-Karp字符串查找算法

    1.简介 暴力字符串匹配(brute force string matching)是子串匹配算法中最基本的一种,它确实有自己的优点,比如它并不需要对文本(text)或模式串(pattern)进行预处理 ...

  5. 每天一道Java题[3]

    问题 为什么在重写equals()方法的同时,必须重写hashCode()方法? 解答 在<每天一道Java题[2]>中,已经对hashCode()能否判断两个对象是否相等做出了解释.eq ...

  6. springboot(四):thymeleaf使用详解

    在上篇文章springboot(二):web综合开发中简单介绍了一下thymeleaf,这篇文章将更加全面详细的介绍thymeleaf的使用.thymeleaf 是新一代的模板引擎,在spring4. ...

  7. Java基础知识二次学习--第七章 容器

    第七章 容器   时间:2017年4月27日15:08:30 章节:07章01节~07章04节 视频长度:20:21 +12:38 +3:55 +2:57 内容:容器API 心得: Java API ...

  8. java虚拟机学习-JVM调优总结-典型配置举例(10)

    以下配置主要针对分代垃圾回收算法而言. 堆大小设置 年轻代的设置很关键 JVM中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理 ...

  9. A function to help graphical model checks of lm and ANOVA(转)

    As always a more colourful version of this post is available on rpubs. Even if LM are very simple mo ...

  10. opencv基础到进阶(2)

    本文为系列文章的第2篇,主要讲解对图像的像素的操作方法. 2.1存取像素值 为了存取矩阵元素,需要指定元素所在的行和列,程序会返回相应的元素.单通道图像返回单个数值,多通道图像,返回的则是一组向量(V ...