上篇《关于直播,所有的技术细节都在这里了(一)》我们讲述了如何让直播内容以“最短”路径从主播到观众上,传输层面获得最低延迟,在本篇中我们会介绍直播应用层协议及传输层协议的选择以及对直播体验影响的分析 。

直播协议的选择

国内常见公开的直播协议有几个:RTMP、HLS、HDL(HTTP-FLV)、RTP,我们来逐一介绍。

RTMP协议:

是Adobe的专利协议,现在大部分国外的CDN已不支持。在国内流行度很高。原因有几个方面:

1、开源软件和开源库的支持稳定完整。如斗鱼主播常用的OBS软件,开源的librtmp库,服务端有nginx-rtmp插件。

2、播放端安装率高。只要浏览器支持FlashPlayer就能非常简易的播放RTMP的直播,协议详解可以Google了解。相对其他协议而言,RTMP协议初次建立连接的时候握手过程过于复杂(底层基于TCP,这里说的是RTMP协议本身的交互),视不同的网络状况会带来给首开带来100ms以上的延迟。基于RTMP的直播一般内容延迟在2~5秒。

HTTP-FLV协议:

即使用HTTP协议流式的传输媒体内容。相对于RTMP,HTTP更简单和广为人知,而且不担心被Adobe的专利绑架。内容延迟同样可以做到2~5秒,打开速度更快,因为HTTP本身没有复杂的状态交互。所以从延迟角度来看,HTTP-FLV要优于RTMP。

HLS 协议:

即Http Live Streaming,是由苹果提出基于HTTP的流媒体传输协议。HLS有一个非常大的优点:HTML5可以直接打开播放;这个意味着可以把一个直播链接通过微信等转发分享,不需要安装任何独立的APP,有浏览器即可,所以流行度很高。社交直播APP,HLS可以说是刚需,下来我们分析下其原理 。

基于HLS的直播流URL是一个m3u8的文件,里面包含了最近若干个小视频TS(一种视频封装格式,这里就不扩展介绍)文件,如 http://www.ucloud.cn/helloworld.m3u8  是一个直播留链接,其内容如下:

假设列表里面的包含5个TS文件,每个TS文件包含5秒的视频内容,那么整体的延迟就是25秒。当然可以缩短列表的长度和单个TS文件的大小来降低延迟,极致来说可以缩减列表长度为1,1秒内容的m3u8文件,但是极易受网络波动影响造成卡顿。

通过公网的验证,目前按同城网络可以做到比较好的效果是5~7秒的延迟,也是综合流畅度和内容延迟的结果。那么HTML5是否可以有更低延迟直接打开的直播流技术呢? 我们在最后会探讨这个问题。

RTP协议:

即Real-time Transport Protocol,用于Internet上针对多媒体数据流的一种传输层协议。

实际应用场景下经常需要RTCP(RTP Control Protocol)配合来使用,可以简单理解为RTCP传输交互控制的信令,RTP传输实际的媒体数据。

RTP在视频监控、视频会议、IP电话上有广泛的应用,因为视频会议、IP电话的一个重要的使用体验:内容实时性强。

对比与上述3种或实际是2种协议,RTP和它们有一个重要的区别就是默认是使用UDP协议来传输数据,而RTMP和HTTP是基于TCP协议传输。为什么UDP 能做到如此实时的效果呢?关于TCP和UDP差别的分析文章一搜一大把,这里不在赘述,简单概括:

UDP:单个数据报,不用建立连接,简单,不可靠,会丢包,会乱序;

TCP:流式,需要建立连接,复杂,可靠 ,有序。

实时音视频流的场景不需要可靠保障,因此也不需要有重传的机制,实时的看到图像声音,网络抖动时丢了一些内容,画面模糊和花屏,完全不重要。TCP为了重传会造成延迟与不同步,如某一截内容因为重传,导致1秒以后才到,那么整个对话就延迟了1秒,随着网络抖动,延迟还会增加成2秒、3秒,如果客户端播放是不加以处理将严重影响直播的体验。

总结一下:在直播协议的选择中,如果选择是RTMP或HTTP-FLV则意味着有2~5秒的内容延迟,但是就打开延迟开,HTTP-FLV 要优于RTMP。HLS则有5~7秒的内容延迟。选择RTP进行直播则可以做到1秒内的直播延迟。但就目前所了解,各大CDN厂商没有支持基于RTP直播的,所以目前国内主流还是RTMP或HTTP-FLV。

是否有除了HLS外更低延迟的方案?

HLS的优点点是显而易见的:移动端无需安装APP使用兼容HTML5的浏览器打开即可观看,所有主流的移动端浏览器基本都支持HTML5,在直播的传播和体验上有巨大的优势。

而看起来唯一的缺点:内容延迟高(这里也有很多HLS限制没有提到,比如必须是H264+AAC编码,也可认为是“缺点”之一)。如果能得到解决,那将会是直播技术非常大的一个进步。或者换个说法,有没有更低延迟可直接用链接传播的直播方案?不局限于HLS本身。

对于浏览器直接的视频互动,Google一直在推WebRTC,目前已有不少成型的产品出现,可以浏览器打开即实时对话、直播。但来看看如下的浏览器覆盖图:

非常遗憾的说,在直至iOS 9.3上的Safari仍然不能支持WebRTC。继续我们的探索,那Websocket支持度如何呢?

除了老而不化的Opera Mini外,所有的浏览器都支持WebSocket。这似乎是个好消息。梳理一下HTML5 WebSocket直播需要解决的问题:

1、后端兼容

2、传输

3、解码播放

对于#1似乎不是特别大问题,对于做过RTMP转HLS、RTP来说是基本功。#2对于浏览器来说使用HTTP来传输是比较好的选项。对于#3 这里推荐一个开源的JS解码项目jsmpeg: https://github.com/phoboslab/jsmpeg,里面已有一个用于直播的stream-server.js的NodeJS服务器。

从测试结果看,该项目的代码相对较薄,还没达到工业级的成熟度,需要大规模应用估计需要自填不少坑,有兴趣的同学可以学习研究。

以上就是直播云:直播应用层协议及传输层协议的选择以及对直播体验影响的分析 。关于接入网络优化、内容缓存与传输策略优化、终端优化,请参阅接下来发布的其他部分。

延迟与卡顿的矛盾关系如何解决?有的时候需要主动丢包?欲知内容缓存与传输策略优化技巧,请关注下一篇解析内容:《关于直播,所有的技术细节都在这里了(三)》。

第一时间获得不止个人原创 android/音视频技术干货,问题深度总结,FrameWork源码解析,插件化研究,FFmpeg研究,直播技术,最新开源项目推荐,还有更多职场思考,欢迎关注我的微信公众号,扫一扫下方二维码或者长按识别二维码

关于直播,所有的技术细节都在这里了(二)相关推荐

  1. 关于直播,所有的技术细节都在这里了(2)《转载》

    本文转载置顶:http://blog.ucloud.cn/archives/694 感谢作者无私的奉献精神! 上篇< 关于直播,所有的技术细节都在这里了(1)<转载> >我们讲 ...

  2. 关于直播,所有的技术细节都在这里了(3)《转载》

    本文转载置顶:http://blog.ucloud.cn/archives/760 感谢作者无私的奉献精神! 上篇<关于直播,所有的技术细节都在这里了(2)<转载>>我们讲述了 ...

  3. 直播系统开发技术细节分享

    直播的火爆成就了无数人的财富梦,而进入直播市场首先要解决的就是直播系统开发的问题,例如采集推流.编解码.服务器.页面播放等问题,本文就对编解码的一些技术细节进行汇总,使大家能够进一步了解直播系统开发. ...

  4. 直播平台软件开发都使用了什么协议呢?

    直播平台软件开发都使用了什么协议呢? 最近直播比较火,很多人都喜欢看直播,那一个直播系统里面都有哪些组成部分,都使用了什么协议呢? 直播平台软件开发中无论是直播还是点播,其实都是对于视频数据的传输.一 ...

  5. 弘辽科技:一元秒杀重回抖音直播间,一切都是流量“惹的祸”

    在今年略显平淡的618大促过去之后,李佳琦.薇娅与背后的MCN传出了或将IPO的消息.虽然两者很快否认要做张大奕第二的传闻,但不可否认的是,经过了一年多的野蛮生长后,直播电商领域已经开始趋于平淡,并且 ...

  6. 关于直播的技术细节都在这里

    (2016-05-26 17:59:34) 加速会注:本文由 著名直播平台都在使用的云计算公司 UCloud 流媒体研发团队撰写! 网络视频直播存在已有很长一段时间,随着移动上下行带宽提升及资费的下调 ...

  7. 关于直播,所有的技术细节都在这里了

    前言: 网络视频直播存在已有很长一段时间,随着移动上下行带宽提升及资费的下调, 视频直播被赋予了更多娱乐和社交的属性,人们享受随时随地进行直播和观看, 直播的打开时间和延迟变成了影响产品功能发展重要指 ...

  8. 动态分辨率是什么意思_b站么么直播最新动态里都有啥 b站什么意思

    他们已经为这个实验发出了250多部手机,但这可能只是一小部分. 无聊的时候做什么?这是一个永恒的.自相矛盾的命题. Bilibili决定用一个纯粹无聊的直播节目和其他几百万无聊的人来回答这个问题,看着 ...

  9. 新手怎么做直播卖货?都有哪些卖货成交话术技巧?

    都说2020年是直播电商全面爆发的一年,受疫情影响,全民直播的盛况更是空前绝后.不管怎样,现在,直播带货已明显地成为所有商家的共识. 直播带货虽火爆,但分化明显.头号主播有流量,有议价权,每场直播的销 ...

  10. 计算机网课用什么app,电脑录屏软件哪个好?游戏直播网课我都用它录制

    大家在电脑上直播网课或玩游戏的时候,想要将其过程给保存下来的时候,都是怎么操作的呢?小编遇到这种情况都是选择用电脑录屏的方法把他们给录制下来,从而便于自己想要反复观看,或者分享给别人的需求.而有些朋友 ...

最新文章

  1. Java并发编程的艺术(二)——重排序
  2. 剑指 offer set 19 翻转单词顺序 字符串左旋
  3. C#变量命名的几种方式—C#基础回顾
  4. AI基础:特征工程-文本特征处理
  5. 利用金山快盘云服务搭建自己的SVN服务器
  6. Web开发-Django表单
  7. java 单例设计_Java 之单例设计模式
  8. 【CodeForces - 1197C】Array Splitting(水题)
  9. “树人杯”辽宁科技大学第三届校园程序设计大赛
  10. mysql 5.5 编译参数_mysql5.5编译安装
  11. QT之实现斗鱼直播PC客户端
  12. Android计分器课程设计,比赛计分器课程设计.doc
  13. 求解哈夫曼编码Java实现,哈夫曼编码(Java)
  14. 2018/9/27---高质量SCI论文撰写方法以及ESI引用经验交流 韩光洁教授(大连理工)
  15. 数字电子钟Multisim仿真(数电课设+实验报告)
  16. Android APP性能分析工具大全
  17. 4.花瓣特效----js+旋转+位移+随机颜色+随机位置
  18. 巴别塔合约作战终端开发日记4——后端效率优化
  19. CSDN网站勋章获取介绍
  20. 【数据库系统原理】第一节数据库系统概述

热门文章

  1. c语言 归一化图片大小,OpenCV学习笔记(1)——resize函数实现图像大小归一化
  2. python 特征选择卡方_为什么pythonsklearn特征选择卡方(chi2)测试不是对称的?
  3. 如何快速删除代码中的空行?eclipse删除空行超实用
  4. 深度学习与硬件GPU,软件框架关系及相关概念解析
  5. 检测提取图像中的直线(基于霍夫变换)
  6. VAE变分自编码器的一点理解
  7. #ifndef #define #endif用法理解
  8. PAT 7-14 公路村村通
  9. linux 设置时间
  10. 区块链中心化业务必须基于中心化平台吗?