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

SamirChen2016-07-1761 阅读

前言

随着直播业务的兴起,越来越多的直播平台开始涌现,这火热的程度好像一个应用不带上直播业务出来都不好意思跟人打招呼。想要做一个直播业务,主要包括三个部分:采集推流端、流媒体服务端、播放端。这里不多说,就主要结合 iOS 平台,从观看端出发,介绍一下对直播协议的选择。

通常在 iOS 平台做直播业务,会有两种协议可供选择:HLS 和 RMTP。

  • HLS ,是苹果公司实现的基于 HTTP 的流媒体传输协议,全称 HTTP Live Streaming,可支持流媒体的直播和点播,主要应用在 iOS 系统,为 iOS 设备(如 iPhone、iPad)提供音视频直播和点播方案。
  • RTMP ,实时消息传输协议,Real Time Messaging Protocol,是 Adobe Systems 公司为 Flash 播放器和服务器之间音频、视频和数据传输开发的开放协议。协议基于 TCP,是一个协议族,包括 RTMP 基本协议及 RTMPT/RTMPS/RTMPE 等多种变种。RTMP 是一种设计用来进行实时数据通信的网络协议,主要用来在 Flash/AIR 平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。

上面是这两种协议的简介,那它们在实际应用中会有什么差异呢?

HLS

先说说 HLS。HLS 的基本原理就是当采集推流端将视频流推送到流媒体服务器时,服务器将收到的流信息每缓存一段时间就封包成一个新的 ts 文件,同时服务器会建立一个 m3u8 的索引文件来维护最新几个 ts 片段的索引。当播放端获取直播时,它是从 m3u8 索引文件获取最新的 ts 视频文件片段来播放,从而保证用户在任何时候连接进来时都会看到较新的内容,实现近似直播的体验。相对于常见的流媒体直播协议,例如 RTMP 协议、RTSP 协议等,HLS 最大的不同在于直播客户端获取到的并不是一个完整的数据流,而是连续的、短时长的媒体文件,客户端不断的下载并播放这些小文件。这种方式的理论最小延时为一个 ts 文件的时长,一般情况为 2-3 个 ts 文件的时长。HLS 的分段策略,基本上推荐是 10 秒一个分片,这就看出了 HLS 的缺点:

  • 通常 HLS 直播延时会达到 20-30s,而高延时对于需要实时互动体验的直播来说是不可接受的。
  • HLS 基于短连接 HTTP,HTTP 是基于 TCP 的,这就意味着 HLS 需要不断地与服务器建立连接,TCP 每次建立连接时的三次握手、慢启动过程、断开连接时的四次挥手都会产生消耗。

不过 HLS 也有它的优点:

  • 数据通过 HTTP 协议传输,所以采用 HLS 时不用考虑防火墙或者代理的问题。
  • 使用短时长的分片文件来播放,客户端可以平滑的切换码率,以适应不同带宽条件下的播放。
  • HLS 是苹果推出的流媒体协议,在 iOS 平台上可以获得天然的支持,采用系统提供的 AVPlayer 就能直接播放,不用自己开发播放器。

RTMP

相对于 HLS 来说,采用 RTMP 协议时,从采集推流端到流媒体服务器再到播放端是一条数据流,因此在服务器不会有落地文件。这样 RTMP 相对来说就有这些优点:

  • 延时较小,通常为 1-3s。
  • 基于 TCP 长连接,不需要多次建连。

因此业界大部分直播业务都会选择用 RTMP 作为流媒体协议。通常会将数据流封装成 FLV 通过 HTTP 提供出去。但是这样也有一些问题需要解决:

  • iOS 平台没有提供原生支持 RTMP 或 HTTP-FLV 的播放器,这就需要开发支持相关协议的播放器。

直播协议的选择:RTMP vs. HLS相关推荐

  1. oracle直播,利用Simple-RTMP-Server搭建RTMP和HLS直播服务(上)

    SRS(Simple-RTMP-Server)定位是运营级的互联网直播服务器集群,追求更好的概念完整性和最简单实现的代码,在Github上人气颇高.本文是由王学投稿的SRS搭建直播的学习笔记,由Liv ...

  2. 基于nginx和ffmpeg前端flv.js简单的直播环境搭建(rtmp+http-flv+hls)

    https://blog.csdn.net/xjb2006/article/details/106681078 https://segmentfault.com/a/1190000016043297? ...

  3. 直播协议HLS技术要点分析:分段生成与m2u8文件

    1.概述: HTTP Live Streaming(HLS)是苹果公司(Apple Inc.)实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播,主要应用在iOS系统,为iOS设备(如iPh ...

  4. 流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls)

    RTP     参考文档 RFC3550/RFC3551     Real-time Transport Protocol)是用于Internet上针对多媒体数据流的一种传输层协议.RTP协议详细说明 ...

  5. WebRTC学习进阶之路 --- 五、WebRTC网络知识详解(三)(最全流媒体协议(RTP/RTCP/RTSP/RTMP/MMS/HLS/HTTP/ HTTP-FLV(HDL)/SDP)

    WebRTC学习进阶之路系列总目录:https://blog.csdn.net/xiaomucgwlmx/article/details/103204274 RTP:实时传输协议(Real-time ...

  6. 最全流媒体协议详细总结介绍(RTP/RTCP/RTSP/RTMP/MMS/HLS/HTTP/ HTTP-FLV(HDL) /SDP)

    RTP:实时传输协议(Real-time Transport Protocol)          RTP是一种基于包的传输协议,它用来传输实时数据.在网络上传输数据包的延迟和误差是不可避免的,对此R ...

  7. 一篇文章读懂SDP、RTMP、HLS、SIP、MMS

    SDP 会话描述协议(SDP)为会话通知.会话邀请和其它形式的多媒体会话初始化等目的提供了多媒体会话描述.参考RFC2327        会话目录用于协助多媒体会议的通告,并为会话参与者传送相关设置 ...

  8. 直播协议 HTTP-FLV 详解

    传统的直播协议要么使用 Adobe 的基于 TCP 的 RTMP 协议,要么使用 Apple 的基于 HTTP 的 HLS 协议. 今天我要向大家介绍另外一种结合了 RTMP 的低延时,以及可以复用现 ...

  9. 直播技术学习笔记(直播协议+流媒体服务器+音视频处理+FFmpeg)

    直播协议 RTMP(Real Time Messaging Protocol) 简介 Time Messaging Protocol,实时消息传送协议 RTMP是Adobe公司为Flash播放器和服务 ...

最新文章

  1. 图解使用Win8Api进行Metro风格的程序开发十一----联系人选择
  2. 47. 全排列 II(回溯算法)
  3. 去除U盘插入后自动弹框的问题
  4. [ACM] hdu 1754 I Hate It (线段树,单点更新)
  5. 2.2 PostgreSQL 概念
  6. php 数据访问练习:投票页面
  7. openfilename 选择文件夹_这个软件能帮你1秒内搜索文件夹中的东西
  8. 计算机教师自检自查报告,信息技术教学工作自查报告
  9. 电脑故障扫描修复软件_常见的电脑故障及处理方法,教你几招,不求人,自己也能修复...
  10. 为什么2 *(i * i)比Java中的2 * i * i更快?
  11. Oracle 一次生产分库,升级,迁移
  12. 保存自动修复_CAD小技巧:怎样将自动保存的图形复原
  13. JAVA_WEB程序设计教程 pdf
  14. 2021最新Node.js视频教程(基础+全栈项目)
  15. 【日常实用篇】解决2345压缩软件自带的流氓广告
  16. 2019年全国高校计算机能力挑战赛C++组题解
  17. UI设计必掌握的软件之一:Axure!
  18. WebRTC[7]-Failed to set remote offer sdp: Called with SDP without DTLS fingerprint
  19. windows10罪过_七大罪过与如何避免
  20. java程序计算圆周率

热门文章

  1. 微软的JavaScript,Post的实例(XMLHTTP)
  2. ios html cookies,iOS-WKWebView携带cookie发送http请求,cookie失效
  3. 下拉框选中事件ajax,LayUI中select下拉框选中触发事件
  4. Linux SSH远程文件/目录传输命令scp
  5. sublimeText3 工具
  6. [Erlang 0034] Erlang iolist
  7. iOS 11和xcode9
  8. Android零基础入门第40节:自定义ArrayAdapter
  9. 《企业软件交付:敏捷与高效管理精要》——1.6 结论
  10. jQuery中ajax的4种常用请求方式