CDN技术之--流媒体CDN系统的组成
流媒体业务是一种对实时性、连续性、时序性要求非常高的业务,无论从带宽消耗上还是质量保障上来说,
对best-effort的IP网络都是一个不小的冲击
–高带宽要求
–高QoS要求
–组播、广播要求(目前IP网络无法实现端到端的组播业务)
播放一个视频分为以下四个步骤
–Access
–Demux(音视频分离)
–Decode(解码解压缩)
–Output
RTP、RTCP、RTSP、RTMP的关系:
RTSP协议用来实现远程播放控制,RTP用来提供时间信息和实现流同步,
RTCP协助RTP完成传输质量控制<=(播放控制),
=>(传输控制)RTMP和HTTP streaming则是将流同步、播放控制、质量控制集成起来的企业自有流媒体传送协议
RTMP是adobe的传输协议。
RTMP的基本通信单元:消息块(chunk)和消息(message)
RTMP协议架构在TCP层之上,但RTMP消息并不是直接封装在TCP中,而是通过一个被称为消息块的封装单元进行传输。
消息在网络上发送之前往往需要分割成多个较小的部分,这样较小的部分就是消息块,属于不同消息流的消息块可以在网络上交叉发送。
RTSP/RTP和HTTP streaming是目前应用最广泛的流化协议,
目前电信运营商在IPTV(特殊通道的基于IP的流媒体播放)的流化上主要以RTSP/RTP技术为主,
而互联网视频网站(点播/直播)则多倾向于使用HTTP streaming的流化技术。
HTTP streaming前身是progressive download(渐进式下载:边下载边播放,直到下载完)。
HTTP streaming首先会将视频数据(包括直播的视频流和点播的视频文件)在服务器上进行编码,
然后将编码后的数据进行更细粒度的分片,再把每个分片通过 HTTP协议传输到客户端。
HTTP streaming的客户端需要对视频文件的每个分片都发出一个HTTP请求,
这样,在视频播放速度低于下载速度的情况下,
客户端可以灵活控制HTTP请求的发出速度,从而保证用户在中途退出时不会出现下载浪费。
另外,因为采用分片的特点,HTTP streaming还可以实现媒体播放过程中的码率切换(码率自适应),
结合网络带宽资源,为用户提供更好的体验。
HTTP streaming
支持点播、直播
可对分片文件加密,保证数字版权
因为分片传输,故支持码率自适应
Progressive download
仅支持点播
直接把媒体文件分割成多个小文件分片,无法保障版权所有
只支持固定码率
HTTP streaming
基于TCP,更高可靠性,也可以直接利用TCP的流控机制来适应带宽的变化
可将播放过的内容保存在客户端
使用80端口,能穿越防火墙
采用标准的HTTP协议来传输,只需要标准的HTTP服务器支撑
RTSP/RTP
基于UDP
不能保存在客户端
使用特殊端口
需要特殊的流媒体服务器
HTTP streaming的几个主流阵营:
–3GPP adaptive HTTP Streaming
–Microsoft IIS Smooth Streaming
-Adobe HTTP Dynamic Streaming (HDS)
–Apple HTTP Live Streaming (HLS)
HLS流化技术主要分三个部分:
服务器组件、分发组件和客户端软件
–服务器组件主要负责从原始的音视频设备捕捉相应的音视频流,并对这些输入的媒体流进行编码,
然后进行封装和分片,最后交付给分发组件来进行传送;
–分发组件主要负责接收客户端发送的请求,然后将封装的流媒体分片文件连同相关的索引文件一起发送给客户端。
对于没有采用CDN服务的源服务器,标准的 Web服务器就是一个分发组件,
而对于大型的视频网站或者类似的大规模应用平台,分发组件还应包括支持RTMP协议的CDN;
–客户端软件负责确定应该请求的具体媒体流,下载相关资源,并在下载后通过拼接分片将流媒体重新展现给用户
HLS音视频流或流媒体文件在经过编码、封装和分片后,变成多个以.ts结尾的分片文件。
流分割器产生的索引文件是以.M3U8为后缀的,用户可以直接通过Web访问来获取
分发组件负责将分片文件和索引文件通过HTTP的方式发送给客户端,
无须对现有的Web服务器和Cache设备进行额外的扩展、配置和升级
客户端组件根据URL来获取这个视频的索引文件。
索引文件包含了可提供分片文件的具体位置、解密密钥以及可用的替换流。
HDS,点播内容是通过一个简单的预编码生成MP4片段以及Manifest清单文件;
直播的内容准备工作流程相对复杂一点,
在播放的过程中生成MP4.(直播推荐用RTMP,使用FMS推流器)
MPEG-2 TS是指TS格式封装的、MPEG-2编码格式的媒体流。大多数IPTV系统使用这种内容源。
H.264这一层完成原始文件的压缩编码,TS这一层负责音 视频的复用以及同步,
RTP这一层负责流的顺序传输,UDP这一层负责数据包的交付,IP层负责传输路由选择
流媒体加速的回源要求:因为流媒体文件传送带宽需求高,而且往往需要维持TCP长连接,
所以一旦CDN回源比例过高,源 站服务器I/O将不堪负荷。
CDN对内容采取分发方式分为pull和push两种。Pull是被动下拉的方式,push是主动推送的方式。
对于流媒体内容,系统一般会选择对热点内容采取push方式的预分发,而普通的网页内容几乎100%是pull方式的。
在流媒体CDN系统中,用户访问的调度会更多考虑内容命中,主要是因为流媒体内容文件体积大,业务质量要求高,
如果从其他节点拉内容再向用户提供服务会带来额外的延迟,影响用户体验。
为进一步提高命中率,流媒体CDN系统普遍采用了对热点内容实施预先push的内容分发策略
在流媒体服务系统中,主要关注的技术是对不同流媒体协议、不同编码格式、不同播放器、不同业务质量要求等的适应。
流媒体CDN与Web CDN的对比(业务差异)
主要差异点
内容类型
流媒体CDN:大文件、实时流、QoS要求高
Web CDN:小文件、固定大小、QoS要求低
用户行为
流媒体CDN:拖曳、暂停等播放控制
Web CDN:下载后浏览
内容管理
流媒体CDN:内容冷热度差异明显(对命中率要求高),内容生命周期长
Web CDN:内容冷热度差异不明显,内容生命周期短
回源要求
流媒体CDN:回源比例小
Web CDN:回源比例大
现在已经投入商用的CDN系统,基本都是同时提供Web CDN能力和流媒体CDN能力的,
而且这两种能力的实现在系统内部几乎都是互相隔离的,从调度系统到节点设备都没有交叉互用
流媒体CDN与Web CDN的设计差异(设计差异)
主要差异点
Cache
流媒体CDN:支持多种流化协议,硬件配置大存储、高I/O
Web CDN:支持多协议(HTTP、FTP等)硬件配置小存储、高性能CPU
负载均衡
流媒体CDN:DNS+HTTP重定向方式
Web CDN:DNS方式
内容分发方式
流媒体CDN:热片PUSH,冷片PULL
Web CDN:全PULL方式
组网
流媒体CDN:多级组网,可能要求组播、单播混合组网
Web CDN:两级组网
流媒体CDN的Cache设备与Web Cache无论在软件实现还是硬件要求上差异都很大,我们很少看到这两种业务共用同一台设备
当用户请求的内容在Cache上命中时,Cache直接向用户提供流服务,此时Cache设备充当流媒体服务器的角色; 当用户请求内容未能在Cache上命中时,Cache会从上一级Cache(二级缓存设备或中间缓存设备)或者源站服务器获取内容,再提供给用户。
Cache在用户与另一个流媒体服务器之间扮演代理的角色
分布式存储技术因其大容量、低成本的特点,目前也被业界关注和研究作为流媒体CDN系统的存储解决方案之一。
常用的分布式存储技术包括分布式文件系统和分布式数据库,
由于采用了数据副本冗余(每份数据复制2~3份)、磁盘冗余(Raid1、Raid10、Raid5)等技术,
通常可以提供良好的数据容错机制,当单台存储设备断电或者单个存储磁盘失效时,整个存储系统仍能正常工作
负载均衡设备在进行用户访问调度时,会综合考虑很多静态的、动态的参数,包括IP就近性、连接保持、内容命中、响应速 度、连接数等。
但没有哪个CDN会考虑所有参数,而是会根据业务特点进行一些取舍,否则均衡系统就太复杂了。
而流媒体CDN在进行用户访问调度时,会更多考虑内容命中这一参数
有两种GSLB实现方式,一种是基于DNS的,一种是基于应用层重定向的
PUSH方式适合内容访问比较集中的情况,如热点的影视流媒体内容,PULL方式比较适合内容访问分散的情况
对使用CDN服务的SP来说,CDN的作用在于尽量就近为用户提供服务,
帮助SP解决长距离IP传输和跨域传输带来的种 种业务质量问题(通过空间换取时间)。
因此,为用户提供服务的Cache设备一定部署在离用户比较近的地方。另一方面,CDN的建设者从成本角度考虑,又 不能把所有内容都存放在这些离用户最近的节点中,这会消耗大量存储成本,所以这些提供服务的Cache设备会根据需要从源站服务器或者其他Cache获取 内容。
这样就形成了CDN网络分层部署的概念。
从网络分层上看,Web CDN通常是两级架构(也有三级架构以减少回源),即中心-边缘。而流媒体CDN通常有三级以上架构,即中心-区域-边缘。
产生这种区别的原因在于流媒体 回源成本比较高,源站服务器响应一次流媒体内容回源请求,要比Web内容回源消耗更多资源。
尤其对于流媒体直播业务来说,只要直播节目没结束,服务器就需 要长时间持续吐流,如果没有第二层节点作为中继,那么中心节点的压力将是不可想象的。
分层部署的方式,对点播业务而言的主要意义是节省存储成本,对直播业务而言在于减少带宽成本。
在点播业务中,边缘Cache只需存储用户访问量大的内容或者内容片断,其余内容存储在区域Cache中。
在直播业务中,边缘Cache从区域中心获取直播流,而不需要直接向中心节点(源站)获取,
从而节省了区域中心到中心节点这一段的大部分带宽。
因为直播流在各个Cache中都不需要占用很大的存储空间,只需少量缓存空间即可,
所以直播业务方面并不用注重考虑存储成本
考虑到电信运营商的IP拓扑和流量模型,区域中心Cache通常部署在重点城市的城域网出口的位置,
以保障向各个边缘 Cache的链路通畅。
边缘Cache的位置选择则以整个节点能够提供的并发能力为主要依据,依据业务并发数收敛比,
计算出单个Cache需要覆盖的用户 规模,从而选择一个合适的部署位置。
当然,边缘Cache离用户越近,服务质量越好,但覆盖的用户数越少,部署成本越高。
内容文件预处理
是指视频内容进入CDN以后,进入内容分发流程之前,CDN系统对内容进行的一系列处理过程。这个预处理过程的目的有几个:
–为全网内容管理提供依据,比如对内容进行全网唯一标识,对内容基础信息进行记录等
–为提高CDN服务效率或降低系统成本提供手段,比如内容切片
–为满足业务要求提供能力,比如对同一内容进行多种码率的转换以满足动态带宽自适应或三屏互动业务要求
视频转码(video transcoding)
– 码率转换
–空间分辨率转换
–时间分辨率转换
– 编码格式转换。编码格式主要包括H.264、MPEG-4、MPEG-2、VC-1、REAL、H.263、WMV。通常是把其他编码格式转换成H.264
文件切片
是指按照一定的规则把一个完整的文件切成大小一致的若干个小文件;
由于流媒体CDN需要提供的内容体积越来越大,传统整片存储带来的成本消耗超出了CDN服务商的承受范围;
切片的另一个目的是,使边缘Cache能够支持自适应码率业务
防盗链机制和实现
–基于IP的黑白名单
–利用HTTP header的referer字段
–使用动态密钥(随机生成的key通过算法生成新的url)
–在内容中插入数据(对有版权内容进行加密(DRM),如Microsoft的playready,Google的Widevine)
–打包下载:在原文件的基础上进一步封装,使得资源的hash值改变
备注:随笔中内容来源于网上资料整理,仅供参考。
CDN技术之--流媒体CDN系统的组成的更多相关文章
- CDN技术详解及实现原理
CDN技术详解 一本好的入门书是带你进入陌生领域的明灯,<CDN技术详解>绝对是带你进入CDN行业的那盏最亮的明灯.因此,虽然只是纯粹的重点抄录,我也要把<CDN技术详解>的精 ...
- CDN技术介绍
CDN技术介绍 一.CDN概述 1.1 CDN定义 CDN即Content Delivery Network (内容分发网络).CDN是建立在现有IP网络基础结构之上的一种增值网络.是在应用层部署的一 ...
- CDN技术分享
CDN技术分享目录 网络应用服务发展 CDN技术 1.CDN是什么?为什么我们需要它?(简介) 2.CDN能做什么?(作用) 3.CDN是如何工作?(原理) 4.CDN有那些具体应用?(应用) 我们项 ...
- CDN 技术详解(DNS,GSLB,Cache)
CDN 是什么 CDN(Content Delivery Network,内容分发网络),即全网内容加速服务.为了尽可能的避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快.更稳 ...
- 《CDN技术详解》 - CDN知多少?
开发时间久了,就会接触到性能和并发方面的问题,如果说,在自己还是菜鸟的时候完全不用理会这种问题或者说有其他的高手去处理这类问题,那么,随着经验的丰富起来,自己必须要独立去处理了.或者,知道思路也行,毕 ...
- CDN技术
CDN 是构建在数据网络上的一种分布式的内容分发网. CDN 的作用是采用流媒体服务器集群技术,克服单机系统输出带宽及并发能力不足的缺点,可极大提升系统支持的并发流数目,减少或避免单点失效带来的不良影 ...
- 现如今的CDN网站加速技术,细说CDN
CDN技术应用越来越广泛的被各大互联网公司所应用.已经成为了互联网企业离不开的一种网络运维方式.什么是CDN? CDN 利用全局负载均衡技术将用户的访问指向离用户最近的工作正常的流媒体服务器上,由流媒 ...
- 【转载】视频CDN技术原理与流程说明
视频CDN专为移动互联网视频内容分发量身定做的一套自主研发的分布式平台,该平台以深圳为中心,分布在全国各地BGP机房的服务器为边缘节点,汇聚中国电信.中国联通.中国移动.中国教育网等运营商网络资源,构 ...
- CDN技术详解笔记
1.影响网络传输的四个因素(1)“第一公里”:网站服务器接入互联网的链路所能提供的带宽.(2)“最后一公里”:用户接入带宽.(3)对等互联关口:不同网络之间的互联互通带宽.(4)长途骨干传输:首先是长 ...
随机推荐
- JS中arguments对象
与其他程序设计语言不同,ECMAScript 不会验证传递给函数的参数个数是否等于函数定义的参数个数. 开发者定义的函数都可以接受任意个数的参数而无需跟定义的函数相匹配(根据 Netscape 的文档 ...
- linux 正则表达式与实践
正则表达式基础 准备 (1)alias grep='grep --color=auto' 易于显示 (2)LC_ALL=C,字符集,设置环境变量,字符顺序 基础正则 1)^word 匹配以Word开 ...
- python练习题之计算字符串中所有字符得和
第二题:计算字符串中所有数字的和1.字符串中只有小写字母和数字2.数字可能连续,也可能不连续3.连续数字要当做一个数处s='1234adg3g11's1 = "" for i in ...
- docstoc对Scribd的威胁比SlideShare还要大。
docstoc,这是在TechCrunch40互联网交流会上崭露头角的个性化服务.docstoc为用户提供了在线存储.分享以及交流文档的互联网服务.与Scribd相同的是,除了文档分享功能以外,doc ...
- char指针类型的传值和传址
- error C2065: “SHELLEXECUTEINFO”: 未声明的标识符
转自VC错误:http://www.vcerror.com/?p=1385 问题描述: error C2065: "SHELLEXECUTEINFO": 未声明的标识符 解决方法: ...
- 用 Flask 来写个轻博客 (29) — 使用 Flask-Admin 实现后台管理 SQLAlchemy
目录 目录 前文列表 扩展阅读 Flask-Admin BaseView 基础管理页面 ModelView 实现效果 前文列表 用 Flask 来写个轻博客 (1) - 创建项目 用 Flask 来写 ...
- setTimeout,clearTimeout,setInterval,clearInteral详解
设置定时器,在一段时间之后执行指定的代码,setTimeout与setInterval的区别在于setTimeout函数指定的代码仅执行一次 方法一: window.setTimeout(" ...
- Django-自定义用户模型
Django最方便的一点,是自带用户系统,但有些情况下,不符合项目需求, 原因1.我们有时候需要自定义一些字段,或者删除Django自带字段,2.我们有时候需要定义哪些字段是必填的,登陆时的用户名是哪 ...
- 正则split的使用
import re #\s 空格 +号表示至少出现一次 # path = 'C:\\Users\\cz\Desktop\py06\\PY6_Day01\\爬虫作业\\2018_03_07\\05_sp ...