【协议】RTMP、HTTP-FLV、HLS三大直播协议_软泡芙的博客-程序员信息网

技术标签: 直播、视频协议  # Base  # WEB_C#  网络协议  

看了这么多直播,你好像发现了一个小秘密,不同类型的直播延时有所不同,像与主播实时互动的一般延迟比较短,而相对的,在线教育这一类就比较长了。这就是我今天想给大家讲解的一些东西,除了网络环境以外,对延时影响较大的就是直播架构中选择的直播协议。

常见的直播协议

国内常见的直播协议有几个:RTMP、HLS、HTTP-FLV,下面我们来一一介绍。

RTMP,全称 Real Time Messaging Protocol,即实时消息传送协议。Adobe 公司为 Flash 播放器和服务器之间音视频数据传输开发的私有协议。工作在 TCP 之上的明文协议,默认使用端口 1935。协议中的基本数据单元成为消息(Message),传输的过程中消息会被拆分为更小的消息块(Chunk)单元。最后将分割后的消息块通过 TCP 协议传输,接收端再反解接收的消息块恢复成流媒体数据。

RTMP 主要有以下几个优点:RTMP 是专为流媒体开发的协议,对底层的优化比其它协议更加优秀,同时它 Adobe Flash 支持好,基本上所有的编码器(摄像头之类)都支持 RTMP 输出。现在 PC 市场巨大,PC 主要是 Windows,Windows 的浏览器基本上都支持 Flash。另外RTMP适合长时间播放,曾经有过测试,联系 100 万秒,即 10 天多连续播放没有出现问题。最后 RTMP 的延迟相对较低,一般延时在 1-3s 之间,一般的视频会议,互动式直播,完全是够用的。

当然 RTMP 并没有尽善尽美,它也有不足的地方。一方面是它是基于 TCP 传输,非公共端口,可能会被防火墙阻拦;另一方面,也是比较坑的一方面是 RTMP 为 Adobe 私有协议,很多设备无法播放,特别是在 iOS 端,需要使用第三方解码器才能播放。

FLV (Flash Video) 是 Adobe 公司推出的另一种视频格式,是一种在网络上传输的流媒体数据存储容器格式。其格式相对简单轻量,不需要很大的媒体头部信息。整个 FLV 由 The FLV Header, The FLV Body 以及其它 Tag 组成。因此加载速度极快。采用 FLV 格式封装的文件后缀为 .flv。
在这里插入图片描述
而我们所说的 HTTP-FLV 即将流媒体数据封装成 FLV 格式,然后通过 HTTP 协议传输给客户端。

HTTP-FLV 依靠 MIME 的特性,根据协议中的 Content-Type 来选择相应的程序去处理相应的内容,使得流媒体可以通过 HTTP 传输。相较于 RTMP 协议,HTTP-FLV 能够好的穿透防火墙,它是基于 HTTP/80 传输,有效避免被防火墙拦截。除此之外,它可以通过 HTTP 302 跳转灵活调度/负载均衡,支持使用 HTTPS 加密传输,也能够兼容支持 Android,iOS 的移动端。

说了这么多优点,也来顺便说下 HTTP-FLV 的缺点,由于它的传输特性,会让流媒体资源缓存在本地客户端,在保密性方面不够好。因为网络流量较大,它也不适合做拉流协议。

上述两个协议都是有Adobe公司推出的,而下面要讲的 HLS (HTTP Live Streaming) 则是苹果公司基于 HTTP 的流媒体传输协议。主要应用于 iOS 设备,包含(iPhone, iPad, iPod touch) 以及 Mac OSX 提供音视频直播服务和录制内容(点播)等服务。

相对于常见的流媒体协议,HLS 最大的不同在于它并不是一下请求完整的数据流。它会在服务器端将流媒体数据切割成连续的时长较短的 ts 小文件,并通过 M3U8 索引文件按序访问 ts 文件。客户端只要不停的按序播放从服务器获取到的文件,从而实现播放音视频。

相较 RTMP 而言,使用 HLS 在 HTML5 页面上实现播放非常简单:

直接:
在这里插入图片描述
或者:
在这里插入图片描述
HLS 的优势:

  • Apple 的全系列产品支持:由于 HLS 是苹果提出的,所以在 Apple 的全系列产品包括 iPhone、 iPad、safari
    都不需要安装任何插件就可以原生支持播放 HLS, 现在 Android 也加入了对 HLS 的支持。
  • 穿透防火墙。基于 HTTP/80 传输,有效避免防火墙拦截
  • 性能高。通过 HTTP 传输, 支持网络分发,CDN 支持良好,且自带多码率自适应,Apple 在提出 HLS
    时,就已经考虑了码流自适应的问题。

HLS 的劣势:

  • 实时性差,延迟高。HLS 的延迟基本在 10s+ 以上
  • 文件碎片。特性的双刃剑,ts 切片较小,会造成海量小文件,对存储和缓存都有一定的挑战

流媒体协议 RTMP, HTTP-FLV, HLS 简单对比

在这里插入图片描述

RTMP 协议为流媒体而设计,在推流中用的比较多,同时大多 CDN 厂商支持RTMP 协议。

HTTP-FLV 使用类似 RTMP流式的 HTTP 长连接,需由特定流媒体服务器分发的,兼顾两者的优点。以及可以复用现有 HTTP 分发资源的流式协议。它的实时性和 RTMP 相等,与 RTMP 相比又省去了部分协议交互时间,首屏时间更短,可拓展的功能也更多。

HLS 作为苹果提出的直播协议,在 iOS 端占据了不可撼动的地位,Android 端也同时提供相应的支持。

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

拓展

基于http-flv的抖音直播端到端延迟优化实践

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44231544/article/details/125663077

智能推荐

【JSP&Servlet】Cookie 记住用户名密码_梦想不断超越的博客-程序员信息网_jsp servlet记住密码和用户名

效果展示 首页 login.jsp<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http:/

Metrics使用简介_end的博客-程序员信息网_metrics 使用

Metrics可以为你的代码的运行提供无与伦比的洞察力。作为一款监控指标的度量类库,它提供了很多模块可以为第三方库或者应用提供辅助统计信息, 比如Jetty, Logback, Log4j, Apache HttpClient, Ehcache, JDBI, Jersey, 它还可以将度量数据发送给Ganglia和Graphite以提供图形化的监控。Metrics提供了Gauge、Counter、...

Ubuntu16.04_ROS_kinetic下如何使用OpenCV2.4进行编译_zhuoyueljl的博客-程序员信息网

1、背景       由于之前是在ROS indigo下编译相关的包的,而且indigo默认使用OpencCV2.4.8进行编译,所以相关的自己写的一些package都是基于OpenCV2.4实现的;由于自己买了新电脑,Ubuntu14.04各种对新电脑硬件支持不好;被迫无奈用Ubuntu16.04,由于ubuntu16不支持ROS-indigo,所以自然而然的用了ROS-kinetic;

win7摄像头软件_菜鸟记400旧手机当摄像头,网课直播设备不用愁_weixin_39897449的博客-程序员信息网

欢迎转发扩散点在看万一您身边的朋友用得着呢?截止今日小菜已分享350+篇经验之谈,可以文章编号或关键词进行搜索以下才是今天的正式内容……郑重声明:本文仅为传递更多信息,软件下载安装有风险,请注意自我甄别,小菜不承担您由此带来的任何损失。请支持正版软件,保护知识产权!摘要:本文介绍通过网络在电脑上使用手机摄像头的方法。关键词:DroidCam;手机当摄像头;操作难度*****每位朋友家里...

初探Spoon(附上用spoon检查HideUtilityClassConstructor)_维他豆浆的博客-程序员信息网

最近收到友人的委托,帮忙研究下spoon,尝试下用spoon来实现一个工具类的检查,于是做了个demo,以供参考。首先说下工具类的一些规范约束,又或者是最佳实践,以下是checkstyle网站上面的定义:http://checkstyle.sourceforge.net/config_design.html#HideUtilityClassConstructorHideUtilityClassCon

随便推点

三星android pay,Samsung Pay Android Download APK_weixin_39555951的博客-程序员信息网

More than a wallet.•tWith Samsung Pay, add all your credit, debit, gift and membership cards to your devices.*• Samsung Pay has partnered with American Express, Discover, MasterCard, and Visa...

Ubuntu下使用Nginx进行静态网站搭建_binout的博客-程序员信息网

Ubuntu 静态网站 搭建1.安装Nginx2.静态网站配置1.安装Nginxsudo apt-get install nginx2.静态网站配置将静态静态网站复制到默认目录下,文件名必须为index.htmlsudo cp index.html /var/www/html...

Intellij IDEA 使用技巧__明月的博客-程序员信息网

1、在IntelliJ IDEA中导入 *.jar 包:在IntelliJ IDEA中导入 *.jar 包2、IntelliJ IDEA 环境常用设置整理3、IntelliJ IDEA 使用心得与常用快捷键4、IntelliJ中的main函数和System.out.println()快捷键...

用BeanUtils工具类进行JavaBean和Map之间的转换_陈大碗_的博客-程序员信息网

JavaBean是由属性+属性名组成;Map是由key-value的键值对组成。如果把JavaBean的属性名看作是Map的key,把属性值看作是Map的value,那么一个Map对象和一个JavaBean是等级的。我们可以使用apache的BeanUtils工具类进行JavaBean和Map之间的转换。bean to mapJavaBean对象的所有属性都会成为Map的key值,另外增加...

java 拼多多电子面单打印_商家自定义模板_Hxning.的博客-程序员信息网_java 打印面单

1.打开平多多电子面单平台:https://wb.pinduoduo.com/logistics/open-service进入一下页面2.点击下图位置点击确定后 到如下页面 可以开始设计模板了现在来说说 这里的变量&lt;%=data.pName%&gt;&lt;%=data.key%&gt; :key可以是任何值 data.put(“key”,“你想要展示的参数”);配上打印信息组装代码下面的代码 data 就是 存放自定义模板参数的 datapName =k

推荐文章

热门文章

相关标签