流媒体服务器架构知识视频流知识•流文件(Flv)•SharedObjects•VP6andH.264codecs•RTMFPvs.RTMP•SecureCommunicationsSSLcertificate,SSLandTomcat•集群和负载均衡FLV(FlashVideo)•FLV是一个二进制文件,由文件头(FLVheader)和很多tag组成。tag又可以分成三类:audio,video,script,分别代表音频流,视频流,脚本流(关键字或者文件信息之类)。FLVHeader•包括文件类型之类的全局信息FLVbody由很多tag组成videotag数据区SharedObjects•SharedObject(共享对象)可以看作是小型的数据库,它用来存储任何Flash支持的数据类型,比如数字、字符串、数组和对象等等•SharedObject按存放位置可分为本地型(存在客户端)和远程型(存在服务器端)。本地型共享对象的扩展名为.sol。RemoteSharedObjects•SharedObjects(SOs)主要用于多客户端的实时数据同步和方法统一调用。SharedObject是一个远程的对象能够被多个在同一个域(scope)里面的客户端共享。•SharedObject可以跟踪和广播消息,连接到SharedObject中的其中任何一个客户端改变了SharedObject中的数据,SharedObject就会将最新的数据广播到连接到它的所有客户端什么是scope?你可以把scope当作一个聊天室,这个聊天室是通过URI链接到服务器例如:rtmp://localhost/red5test/lobbyred5test是application域(scope)lobby是聊天室作用域,也即red5test子域RemoteSharedObjectsLocalSharedObject•Flash的Cookie,可以用来记录客户的浏览次数、自动登录信息、游戏存盘信息等等。•他是Flash存储数据在客户端的唯一方法。•默认大小为10KSharedObjectsVP6andH.264codecsTrueMotionVP6是由On2Technologies所推出的视频压缩编解码器(videocodec)On2Technologies,是美国一家视讯压缩科技公司,前身是TheDuckCorporation[1],以开发TrueMotionS、TrueMotion2、VP3、VP4、VP5、TrueMotionVP6,TrueMotionVP7以及VP8等产品闻名。2009年8月,Google以1亿650万美元收购On22004年,On2的VP6被MacromediaFlash8videocodec所采用H.264/MPEG-4AVC•是由ITU-T视频编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG)联合组成的联合视频组(JVT,JointVideoTeam)提出的高度压缩数字视频编解码器标准。•应用:光盘存储、数字电视、卫星数字电视、网络电视IPTV、VODRTMP(Real-TimeMessagingProtocol)•RTMP协议(RealTimeMessagingProtocol)是被Flash用于对象,视频,音频的传输.该协议建立在TCP协议或者轮询HTTP协议之上.•RTMP协议就像一个用来装数据包的容器,这些数据可以是AMF格式的数据,也可以是FLV中的视/音频数据.•一个单一的连接可以通过不同的通道传输多路网络流.这些通道中的包都是按照固定大小的包传输的.RTMP•RTMP协议是一个基于TCP的高层协议族•在RTMP协议中信令和媒体数据都称之为Message,在网络中传输这些Message•每一个Message+head都是由一个和多个chunk组成的,因为TCP的包长度是有限制的(一般来说不超过1500个字节),而RTMP的Message长度是有可能很大的,所以要对Message进行分片处理RTMP有三种变种•1)工作在TCP之上的明文协议,使用端口1935;•2)RTMPT封装在HTTP请求之中,可穿越防火墙;•3)RTMPS类似RTMPT,但使用的是HTTPS连接RTMP通信方式RTMFP•RTMFPisaprotocolthatprovidesawaytoestablishclient-to-clientcommunicationsoverUDP.•Oncetheconnectionismade,eachFlashclientisassignedauniqueIDandcanpublishdirectUDPstreamscontainingaudio,video,anddatathatareassociatedwithitsID.AnyclientsconnectedtoStratusortothesameapplicationinstanceinFMSthatknowthestreamnameandclientIDofapublishingclientcanarrangetoreceivetheotherclient'sUDPstreamdirectly.RTMFP通信方式RTMFPvs.RTMP•RTMPisaTCP-basedprotocoldesignedtofacilitateclient-to-server-to-clientcommunications.SinceRTMPworksoverTCP,apersistentandbidirectionalconnectionisestablishedbetweeneachFlashclientandtheserver.Audio,video,anddataflowswithinunidirectionalstreamsfromclientstotheserverandbackouttotheotherclientsoverRTMPconnections.AMF•AMF是Adobe独家开发出来的通信协议,它采用二进制压缩,序列化、反序列化、传输数据,从而为Flash播放器与FlashRemoting网关通信提供了一种轻量级的、高效能的通信方式。AMF•AMF最大的特色在于可直接将Flash内置对象,例如Object,Array,Date,XML,传回服务器端,并且在服务器端自动进行解析成适当的对象•由于AMF采用二进制编码,这种方式可以高度压缩数据,因此非常适合用来传递大量的资料。数据量越大,FlashRemoting的传输效能就越高,远远超过WebServiceAMF0和AMF3•AMF从FlashMX时代的AMF0发展到现在的AMF3。AMF3用作FlashPlaye9的ActionScript3.0的默认序列化格式负载均衡(LoadBalancing)•负载均衡(又称为负载分担),英文名称为LoadBalance,其意思就是将负载(工作任务)进行平衡、分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。Apache集群技术JK负载均衡器•它应该实现了负载均衡算法,通过将请求分发到不同的服务器来达到高可用性和高效的处理能力•它会监控集群中节点的健康状况,来防止将请求转发到一个失败的节点。•它会使用“会话粘滞”技术以确保来自同一个用户的请求会被转发到同一个服务器。主流流媒体服务器•AdobeFlashMediaServer目前最新版本4.5•Red5最新版本1.0RC1注:RC1,ReleaseCandidate的缩写,意思是发布倒计时,该版本已经完成全部功能并清除大部分的BUG。到了这个阶段只会除BUG,不会对软件做任何大的更改。AdobeFlashMediaServerfamily•FlashMediaStreamingServer4.5•FlashMediaInteractiveServer4.5•FlashMediaEnterpriseServer4.5•AdobeFlashMediaServer4onAmazonWebServicesAdobeFlashMediaServerRed5MediaServer•Red5includessupportforthelatestmulti-userAPI’sincludingNetConnection,NetStreamandSharedObject’swhileprovidingapowerfulRTMP/Servletimplementation.InadditiontosupportfortheRTMPprotocol,theapplicationserverhasanembeddedTomcatServletcontainerforJEEWebApplications.ApplicationdevelopmentdrawsadditionalbenefitsfromtheSpringFrameworkandScopebasedeventdrivenservices.Red5架构特征•StreamingAudio/Video(FlvandMp3)•RecordingClientStreams(Flvonly)•SharedObjects•LiveStreamPublishing(liveh264supported)•Remoting(AMF0/AMF3)•EdgeOriginSolutiononTerracottaRed5MediaServer••TerracottaTerracotta是一款由美国Terracotta公司开发的著名开源Java集群平台。它在JVM与Java应用之间实现了一个专门处理集群功能的抽象层,以其特有的增量检测、智能定向传送、分布式协作、服务器镜像、分片等技术,允许用户在不改变现有系统代码的情况下实现单机Java应用向集群话应用的无缝迁移。网站推荐•源代码•软件论坛•淘宝开源•淘宝DBA•中间件•阿里DBA•核心系统完毕谢谢大家!