转自:http://www.cnblogs.com/ningskyer/articles/5534512.html

上篇我们讲述了如何让直播内容以“最短”路径从主播到观众上,传输层面获得最低延迟,在本篇中我们会介绍直播应用层协议及传输层协议的选择以及对直播体验影响的分析。

直播协议选择

国内常见公开的直播协议有几个: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 是一个直播留链接,其内容如下:

#EXTM3U

#EXT-X-VERSION:1

#EXT-X-TARGETDURATION:10

#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:3,

4.ts

#EXTINF:8,

6.ts

#EXTINF:8,

8.ts

#EXTINF:8,

10.ts

假设列表里面的包含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服务器。

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

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

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

直播网络 的协议选择相关推荐

  1. 在直播平台搭建平台中,购物源码开发公司的直播间搭建该如何选择流媒体直播系统传输协议

    2019年直播行业面临着来势汹汹的短视频挑战,但在垂直细分领域,网络直播平台依旧有着难以企及的位置.如今,直播平台搭建的势头依旧没有减弱,只是更多的人想要将直播平台与更多的行业相结合.对于直播平台搭建 ...

  2. 5G时代RTC技术是直播互动的最终选择,EasyRTC视频会议系统将赋能VR/电商直播等更多新场景

    2016年我们出了一篇博客:<网络直播流媒体协议的选择讨论,RTSP,RTMP,HTTP,私有协议?>,当时的讨论无非是在RTSP.RTMP.HTTP中讨论关于视频直播协议的选择,经过多年 ...

  3. 网络编程2_网络通讯协议, socket(tcp, udp)

    一. 网络通讯协议     互联网协议的功能: 定义计算机如何接入internet, 以及接入internet的计算机的通信标准     互联网协议按照功能的不同分为osi七层或tcp/ip五层    ...

  4. 没有mssqlserver的协议_LoadRunner是什么 LoadRunner协议选择原则介绍【图文】

    LoadRunner对不同协议的选择 以前使用Loadrunner只选择过web(Http/Html),但其实协议多种多样.在B/S结构的网站多种业务的特点需要选择不同的协议,耿电在给我们就介绍了用过 ...

  5. MMS发送的无线网络连接协议分析

    MMS 在进行发送前,要对无线模块进行无线网络连接,实现GPRS的拨号上网,无线网络连接成功后,才能利用无线模块基于WAP的方式对MMS进行发送,通过移动交换网络,最终发送到终端用户手机上.本节将对无 ...

  6. 再谈网游同步技术:实时动作游戏同步方式和传输协议选择

    如今十年过去,网上越来越多的人开始讨论游戏同步技术了,然而很多文章往往只针对某种特定的游戏情况,而观点又经常以偏概全.很多人并没有真正开发过实时动作游戏,更别说了解同步技术的前世今生了.转载别人的观点 ...

  7. Linux网络编程服务器模型选择之并发服务器(上)

    转载:http://www.cnblogs.com/lizhenghn/p/3617666.html 与循环服务器的串行处理不同,并发服务器对服务请求并发处理.循环服务器只能够一个一个的处理客户端的请 ...

  8. loadrunner之协议选择

    loadrunner  用LoadRunner测试c/s架构的软件,怎样去选择协议,困扰了我很久,看到这篇文章,感觉有点收获,所以特意转了过来,希望对大家有用. 首先,什么是协议? 协议无非就是一个约 ...

  9. 物联网应用层协议选择和分析--MQTT、CoAP 、HTTP、XMPP、SoAP

    物联网应用层协议选择和分析--MQTT.CoAP .HTTP.XMPP.SoAP MQTT协议 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)最早 ...

最新文章

  1. ssh免密码登录的原理
  2. freebsd系统/: write failed, filesystem is full问题解决办法
  3. PHP的$_SERVER['HTTP_HOST']获取服务器地址功能详解
  4. 全球最伟大社交软件!微信入选“现代百大设计最佳产品”:排名超Facebook
  5. 最新android studio创建项目,创建项目  |  Android 开发者  |  Android Developers
  6. sql server 死锁排查
  7. exe反编译为python语言_如何反编译Python写的exe到py
  8. .NET 使用MD5加盐加密
  9. 服务器虚拟机系统镜像安装win7系统,VMware虚拟机安装ghost win7系统_VM虚拟机怎么安装w7 iso映像文件?...
  10. android体脂代码,该减肥了吗?教你用手机App测量体脂率
  11. 矩阵分析之 伪逆矩阵,左逆,右逆,广义逆
  12. Web大学生网页作业成品——篮球网站设计与实现(HTML+CSS)
  13. matlab 呼吸灯,一种控制呼吸灯呼吸效果的方法与流程
  14. day 05 random time sys os pickle json re模块 爬取dytt
  15. 极限挑战 极致突破——奇安信的2022
  16. 音乐flac格式如何快速简单的转换为mp3格式
  17. 新一代态势感知系统发布——北望
  18. C语言字符串函数及如何实现这些函数
  19. 区块链安全和传统安全有什么不同
  20. Spring容器父子类继承关系交给spring容器管理采用@autowired自动装配分析

热门文章

  1. arcgis 圈选获取图层下点位_关于Arcgis这62个常用技巧,你造吗
  2. 计算机系统的组成基础知识,计算机系统的组成基础知识.ppt
  3. Ubuntu16.04安装Caffe史上最详细教程(CPU),亲测三次!!!
  4. 嵌入式linux ARM 开发板 使用pyqt显示界面
  5. yolov3的训练(五)darknet的VOC测试集和训练集以及训练前准备
  6. C++先序和中序确定二叉树
  7. 1002 图论专练 解题报告
  8. python多线程结束线程_Python多线程和Office第2部分
  9. 最小费用最大流算法 网络流
  10. cannot have an existing value