(信号与信息处理专业论文)流媒体服务器中端到端服务质量的研究.pdf_第1页
(信号与信息处理专业论文)流媒体服务器中端到端服务质量的研究.pdf_第2页
(信号与信息处理专业论文)流媒体服务器中端到端服务质量的研究.pdf_第3页
(信号与信息处理专业论文)流媒体服务器中端到端服务质量的研究.pdf_第4页
(信号与信息处理专业论文)流媒体服务器中端到端服务质量的研究.pdf_第5页
已阅读5页,还剩91页未读 继续免费阅读

(信号与信息处理专业论文)流媒体服务器中端到端服务质量的研究.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

南京邮电学院硕士研究生学位论文 中文摘要 摘要 流媒体技术当前应用十分广泛,实现了通过网络对多媒体数据进行连续实时的播放。 流媒体服务器作为存储和传输流媒体数据的主要设备,对它的设计和研制正受到越来越多 的关注。 目前,制约流媒体宽带应用发展的核心问题是服务质量。所以解决好流媒体宽带应用 的服务质量问题对于流媒体宽带应用是极为重要的。在有限的服务器资源下,设计一种实 时自适应网络带宽、提高服务质量的流媒体服务器便是本课题的目标。 本文首先对传统d s s 流服务器的系统结构和控制策略进行分析描述,阐明任务调度 思想是d s s 流服务器中重要策略,接着提出为q o s 正确决策提供可靠依据的网络状态测 量方法和评估指标。 然后详细讨论了本文所提出的基于网络状态端到端分级管理q o s 模型及其实现。阐 述了该方案的核心思想:以满足客户端演示满意度为前提,系统上分为服务器端q o s 和 用户端q o s ,每一端含有多级策略调度。服务器端q o s 宏观上控制流服务器性能,用户 端q o s 从微观上对用户进行差异化服务。q o s 策略调度模块负责控制整个模型实体和流 服务器的运作。 最后,通过i n t e r n e t 、l a n 和w l a n 网络平台上大量实验,测试了流媒体服务器在各 种策略控制下的性能,认证了q o s 策略调度模型的有效性和可扩展性,证明其性能较之 d s s 流服务器有很大的提高。 关键词:q o s ,策略,任务调度,流服务器,端到端分级模型 南褒邮电学院顽士研究生学位论文英文摘要 a b s t r a c t w i t ht h ed e v e l o p m e n to fs t r e a m i n gm e d i at e c h n o l o g y , b r o a d c a s t i n gr e a l t i m em u l t i m e d i a d a t ac o n t i n u o u s l yt h r o u g hc o m p u t e rn e t w o r k sc o m e st r u e a st h ep r i m a r ye q u i p m e n to fs t o r i n g a n dt r a n s m i t t i n gs t r e a m i n gm e d i ad a t a ,t h er e s e a r c ho ns t r e a m i n gm e d i as e v e rh a sa t t r a c t e d m o r ea n dm o r ei n t e r e s t s t h eq u a l i t yo fs e r v i c e ( q o s ) i st h ek e yp r o b l e mw h i c hr e s t r i c t st h es t r e a m i n gm e d i a s a p p l i c a t i o ni nb r o a db a n d t h e r e f o r et h ef o c u so ft h i st h e s i si st od e s i g nak i n do fs t r e a m i n g m e d i as e v e rw h i c hc a nb ea d a p t e dt ot h er e a l t i m en e t w o r k s b a n d w i d t hv a r i e t ya n di m p r o v et h e q o si nt h el i m i t e ds e v e rr e s o u r c e f i r s t l y , t h i st h e s i sa n a l y z e st h ed s ss t r e a m i n gs e r v e r ss y s t e mf r a m e w o r ka n dc o n t r o l s t r a t e g y , p o i n t so u tt h a tt a s ks c h e d u l ei s t h ei m p o r t a n ts t r a t e g yo fd s ss t r e a m i n gs e r v e r , a n d p r o p o s e st h en e t w o r k s s t a t em e a s u r ea n de v a l u a t i n gi n d e x a n dt h e nt h eq o sm o d e lb a s e do nt h ee n dt oe n ds c a l i n gm a n a g e m e n to fn e t w o r k s s t a t e i sp r o p o s e da n dd i s c u s s e di nd e t a i l t h es y s t e mi ss e p a r a t e di n t ot w op a r t so fs e r v e re n dq o s a n dc l i e n te n dq o s e a c he n dh a ss c a l i n gs c h e d u l es t r a t e g y s e r v e re n dq o sc o n t r o l st h e p e r f o r m a n c eo fs e v e ri nt h em a c r oa s p e c t ,a n dc l i e n te n dq o sg i v e st h ec l i e n tag r e a td i v e r s i t y o fs e r v i c e si nt h em i c r oa s p e c t q o ss t r a t e g yc o n t r o lm o d u l et & k e sc h a r g eo ft h ea c to ft h e w h o l em o d e le n t i t ya n ds t r e a m i n gs e r v e l i nt h ee n d ,t h r o u g hag r e a td e a lo fe x p e r i m e n t so nd i f f e r e n tn e t w o r kp l a t f o r ms u c ha s i n t e r n e t ,l a na n dw l a n ,s t r e a m i n gm e d i as e r v e r sp e r f o r m a n c eu n d e rt h ec o n t r o lo fd i f f e r e n t s t r a t e g i e sh a sb e e nt e s t e d t h er e s u l to fe x p e r i m e n t sp r o v e st h ev a l i d i t ya n de x t e n s i b i l i t yo fq o s s t r a t e g ys c h e d u l em o d e l i t sp e r f o r m a n c eh a sb e e ni m p r o v e dm o r eg r e a t l yt h a nd s ss t r e a m i n g s e n ,e r k e y w o r d s :q o s ,p o l i c y ,t a s ks c h e d u l i n g ,s t r e a m i n gm e d i as e r v e r ,e n d t o e n ds c a l i n g m o d e l l i 南京邮电学院学位论文独创性声明 x 7 6 5 0 8 9 本人声明所呈交的学位论文是我个人在导师指导下进行的研究 工作及取得的研究成果。尽我所知,除了文中特别加以标注和致谢的 地方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包 含为获得南京邮电学院或其它教育机构的学位或证书而使用过的材 料。与我一同工作的同志对本研究所做的任何贡献均已在论文中作了 明确的说明并表示了谢意。 研究生签名:氯鲨军 日期:丝盥 南京邮电学院学位论文使用授权声明 南京邮电学院、中国科学技术信息研究所、国家图书馆有权保留 本人所送交学位论文的复印件和电子文档,可以采用影印、缩印或其 他复制手段保存论文。本人电子文档的内容和纸质论文的内容相一 致。除在保密期内的保密论文外,允许论文被查阅和借阅,可以公布 ( 包括刊登) 论文的全部或部分内容。论文的公布( 包括刊登) 授权 南京邮电学院研究生部办理。 研究生签名:重- 哔导师签名f 逛日期:到 南京邮电学院硕士研究生学位论文第一章引言 第一章引言 随着网络技术、音视频压缩技术和计算机存储技术的发展,以及在各种网络中对流 媒体服务需求的增加,流媒体技术也得到快速的发展,它在影视点播、流媒体新闻发布、 网络广告、在线直播、视频会议、远程教育等流媒体信息服务领域已展现出广阔的应用前 景。 流服务器是整个流媒体技术发展应用中的核心组件,它决定了流媒体系统性能好坏。 目前,制约流媒体宽带应用发展的核心问题是服务质量。简单地说,由于因特网不太可靠, 其带宽、负荷等变化剧烈,难以满足流媒体宽带业务的实时服务质量要求,并常常发生播 放卡壳、延迟、视频质量抖动剧烈等不良情况,给使用者感官上造成很大的影响。所以解 决好流媒体宽带应用的服务质量问题对于流媒体宽带应用是极为重要的。在有限的服务器 硬件资源下,设计一种实时自适应网络带宽、提高服务质量的流媒体服务器便是本课题的 目标。 解决流媒体系统的q o s 问题一般有两种思路:一种是对路途做文纠卜3 】;另一种是对 流媒体系统本身做文章【】。i s d n 、a t m 以及未来的i p v 6 等网络协议属前一种办法,但 是,截至目前,i s d n 与a t m 并没有成为网络技术的主流,t c p i p 仍然是事实上的标准。 对流媒体系统本身有过深入的探讨,主要是从各种编码技术、压缩技术等角度出发,但流 媒体系统的核心与瓶颈问题并没有得到很好的解决。 考虑到网络技术自身的发展很难为流媒体应用提供绝对的服务质量保证,本文主要定 位在流服务器和流媒体客户端的服务质量控制,以求在不同的网络环境下利用控制策略使 得用户享受到尽可能好的服务质量并尽量减轻网络的负担。进一步,由于丢包率和时延的 需求在一定条件下可转化为带宽需求以及流媒体码率和网络带宽变化范围很广等原因,我 们认为因特网可提供的网络带宽和流媒体要求的码率之间的不匹配是q o s 矛盾的中心, 所以在客户端上主要利用流服务器的质量控制和发送速率控制来解决带宽与媒体流码率 的不匹配问题。 因此,为克服网络状况不确定所造成的影响,流媒体服务器必须自适应地调整发送策 略来保证音视频服务的质量和实时性。从客户演示满意度的角度,深入探讨自适应网络 带宽的实时流媒体传送问题,本文提出了实时流媒体服务器控制传送方案:基于网络状态 端到端分级管理q o s 模型及实现。 具体而言,与国际上已有的流媒体传输技术相比,本文所提出的方法具有以下优点: ( 1 ) 该方法显著特点:满足客户端演示满意度,宏观调控流媒体服务器性能和微观 1 南京邮电学院硕士研究生学位论文 第一章引言 差异化客户端服务。 ( 2 ) 该方法能有效地控制客户端访问,保证流服务器对现有接纳用户的播放演示 度,同时释放无效客户端的链接资源,接纳更多的用户。 ( 3 ) 该方法给出了基于r t p r t c p 协议网络状态测量方法、评估标准和实现方案, r t c p 本身动态改变占用带宽,能及时有效地反馈信息,避免了网络拥塞带来 的统计准确性较大下降。 ( 4 ) 该方法能使流媒体服务器自动适应网络状况,采用相应等级的q o s 策略调度, 实时传送流媒体数据。即使在剧烈变化网络环境下,仍能保证客户享受到连续 的、平稳的、较高质量的视频服务。 ( 5 ) 该方法能很好地屏蔽网络带宽短时间尺度波动对视频播放质量的影响。避免了 由于拥塞控制的作用,网络带宽的短时间尺度波动常常比较大,如果直接按照 网络实时带宽进行视频质量调节,必然会造成视频质量抖动剧烈,极大影响播 放效果的问题。 本文所提出的方法完全有别于r e a l n e t w o r k s 的真实流【6 ( s u r es t r e a m i n g ) 和m i c r o s o f t 的智能流刀( i n t e l l i g e n ts t r e a m i n g ) 。这两种解决方案其实是在与用户建立连接的初始,检 测用户的网络带宽资源状况以及连接数目的多少,以此来判断,发送文件大小最适合的流 媒体文件。而在用户观看流媒体文件的2 3 个小时过程中,网络状况和带宽资源其实一直 在变化的,可能不断有新的用户连接上来,并发数不断在变化,但系统无力实时调整,结 果在用户端就会时常出现图像卡壳、抖动和停停放放的情况,服务质量无法保证。而本文 提出的基于网络状态端到端分级管理方法,始终对用户的访问和发送速率进行动态调整, 并且实时准确计算网络资源和用户端缓冲区的状况,进行精确调整,保证了终端用户播放 的流畅和清晰。 全文共有六章组成,各章内容组织如下: 第一章:引言。阐述了流媒体服务器的技术背景和发展,对相关研究工作和文献进行 了综述,并归纳了本文所要研究的主要内容。 第二章:流媒体服务器的系统架构。主要从d a r w i ns t r e a m i n gs e r v e r ( d s s ) 系统的 体系结构( 线程结构、模块结构、通信机制、运行流程、管理机制) 和d s s 系统的控制 策略两个方面来阐述d s s 流服务器的整体架构。 第三章:网络状态的测量和评估。主要从网络状态的评估指标、测量方法和状态评估 三个方面来研究网络状态,说明网络状态正确判断是q o s 正确决策的可靠依据。 2 南京邮电学院硕士研究生学位论文 第一章引言 第四章:流媒体服务器q o s 模型设计与实现。详细讨论了基于网络状态端到端分级 管理q o s 模型,并给出了q o s 模型的软件实现。 第五章:流媒体服务器q o s 体系测试与分析。对q o s 策略模型进行测试,分析、讨 论了流媒体服务器整体性能,阐述策略的有效性。 第六章:全文总结 南京邮电学院硕士研究生学位论文第= 章流媒体服务器的系统架构 第二章流媒体服务器的系统架构 流媒体服务器系统结构的研究是基于a p p l e 公司的d a r w i ns t r e a m i n gs e r v e r ( d s s ) 流 服务器 8 1 ,主要从d s s 系统的体系结构( 线程结构、模块结构、通信机制、运行流程、 管理机制) 和d s s 系统的控制策略两个方面来阐述d s s 流服务器的整体架构。 2 1d s s 流服务器的体系结构 d s s 流服务器【9 】的体系结构框图如图2 - 1 所示: c l i e n t sm o d u l e s | m a l n 恻 t 埘e :) u _ i = :e = a d 悯协i d s l e k l 、| = 二= l l 窖国 r 一 i ! , p r o c e s s t 星h 广矿l 广一e 剖r e q u e s t 7 t a s k s e n d p a c k e t s t a s k 图2 - 1d s s 流服务器体系结构图 d s s 流服务器系统采用“内核+ 模块”的组织方式。服务器内核主要承担网络客户 端之间通信的接口,它使用r t p 和r t s p 来发送请求和接收响应,使用服务器模块来处 理请求和发送数据报给客户端。 2 1 1d s s 系统的线程结构 服务器内核通常创建主线程、空闲任务线程、事件线程、任务线程四种类型的线程来 完成服务器的运行。 1 ) 主线程( m a i nt h r e a d ) 主线程的功能是用来查看服务器是否需要关闭、记录状态信息或打印统计信息。 程序体上由r u n s e r v e r 函数来完成相应功能,其中w h i l e 循环担当主线程的监察职责, 它的主要工作流程如下: 获取服务器的当前状态,如果当前状态不为“即将关闭”( q t s s s h u t t i n g d o w n s t a t e ) 和 4 南京邮电学院硕士研究生学位论文第二章流媒体服务器的系统架构 “致命错误”( q t s s f a t a l e r r o r s t a t e ) 将进入w h i l e 循环体内,每隔一秒循环一次。记录当前 服务器的状态到记录文件( s e r v e rs t a t u s ) 中,如果需要在命令窗口显示当前服务器状态, 只需设置s s t a t u s u p d a t e i n t e r v a l 的值,这样循环体内就每隔l o s s t a t u s u p d a t e i n t e r v a l 秒输 出状态值。接着判断服务器的所收到的信号类型,如果是“中断”( i n t e r r u p t ) 或“结束” ( k i l l ) 类型,则将服务器的状态设为“即将关闭”( q t s s s h u t t i n g d o w n s t a t e ) 并写入服务 器目录数据结构中,同时,判断是由于收到“中断”信号,则置r e s t a r t s e r v e r 为t r u e ,用 于重启服务器。再取得服务器状态,如果是“空闲”( q t s s i d l e s t a t e ) 状态,则杀死所有r t p 会话。再次执行下一轮循环。 如果当前状态为“即将关闭”( q t s s s h u t t i n g d o w n s t a t e ) 或“致命错误” ( q t s s f a t a l e r r o r s t a t e ) 则杀死所有r t p 会话,并等待这些会话彻底结束,等待时间不超过 5 秒。从任务线程池中删除所有任务线程,以确保服务器不再处理任何事情。接着删除服 务器对象,并清除进程d 。最后,判断服务器的状态若为“致命错误”( q t s s f a t a l e r r o r s t a t e ) 或“重启”( r e s t a r t s e r v e r ) 则返回2 ,通知父进程重启服务器。 2 ) 空闲任务线程( i d l et a s kt h r e a d ) 空闲任务线程的功能是管理具有周期性出现的任务所组成的任务队列( 参见图2 2 ) 。 通常任务队列有两种类型:超时任务队列和套接字任务队列。 e t a s k t h r o 启动运行 缈 是否有最小任 ! 、务对象 、 l 否 阻塞等特 直到堆中有任务对象 嚣茹羹妒 吵- l 是 设置婷待时间 。恶舞莛簋! :辘ll 阻塞等待直到等待时间结束 并设其为空闲事件| 1 俐陋洲刚钥爪 图2 - 2空闲任务线程运行流程图 南京邮电学院硕士研究生学位论文第二章流媒体服务器盼系统架构 在服务器启动时创建、启动空闲线程,它用于为任务对象提供定时信息。 设置任务对象的定时值时,设置其“时间到时刻( 当前时刻与延时值之和) ”,并将任 务对象作为一个最小堆元素插入到空闲线程的最小堆中。当需要撤销任务线程的定时功能 时,只需要将其从空闲线程的最小堆中删除即可。 通过为任务对象通知对间到事件为任务对象提供定时器的作用。r t s p 监听对象中就 用到了这种定时器,当服务器的文件描述符不够用时,暂停一段时间不接受来自客户端的 连接请求,当时间到后由空闲线程通知其再开始处理r t s p 连接请求。 超时任务线程 当r t s p 会话、r t p 会话由于某些原因,不能得以运行后,但又并未通过任务线程删 除会话对象,这样会占用服务器一定的资源,需要及时的回收这些资源,d s s 中设计有 超时线程。在服务器启动阶段创建、启动有一超时线程。 在r t s p 会话对象,r t p 会话对象中均有超时任务对象,并通过配置参数设置其超时 值,例如设置r t p 会话1 2 0 ,0 0 0 毫秒超时,在某一r t p 会话的超时任务对象超时后通知 其所计时的任务对象也即该r t p 会话任务对象一个“超时事件”。r t s p 会话对象、r t p 会话对象在运行时,如r t s p 会话处理r t s p 请求,r t p 会话发送r t p 数据包时都会更新 其超时任务对象的时间值。若r t s p 会话对象、r t p 会话对象被任务线程调度运行时得知 所通知的事件为超时事件,需要通知任务线程删除其自身。 超时线程本身并不是一个真正意义上的线程,它是一个空闲任务对象,在空闲线程上 定时6 0 秒,在6 0 秒到后有任务线程调度任务线程任务对象的r u n 方法,在其中检查保 存在超时任务对象队列中的超时任务对象是否超时,若超时则通知超时任务对象所要通知 的任务对象。 3 ) 事件线程( e v e n tt h r e a d ) 事件线程的功能是监听套接字事件并将它们转发给任务线程( 参见图2 3 ) 。 【实现原理】调用s e l e c tw a i t e v e n t 函数监听所有s o c k e t 端口的事件。该函数在 w i n d o w s 平台上是采用w s a a s y n c s e l e c t ( 异步选择) 模型实现的。具体实现是:系统首 先刨建一个窗口类,该类专门用于接受消息;在每个s o c k e t 端口创建后,调用 w s a a s y n c s e l e c t 函数,同时将上述窗口类的句柄作为参数传入:将来这些s o c k e t 端口有 事件发生时,w i n d o w s 就会自动将这些事件映射为标准的w i n d o w s 消息发送给窗口类, 此时s e l e c tw a i t e v e n t 函数通过检查消息就能够获得对应s o c k e t 端口发生的事件。 调用的e v e n t c o n t e x t 对象的p r o c e s s e v e n t 函数实现上很简单,只有一行代码: 南京邮电学院硕士研究生学位论文 第二章流媒体服务器的系统架构 t t a s k - s i g n a l ( t a s k :k r e a d e v e n t ) 其中f l a s k 为该e v e n t c o n t e x t 对象对应的t a s k 对象; p r o c e s s e v e n t 函数向t a s k 对象传信,以便及时处理剐刚发生的s o c k e t 事件。 【工作流程】事件线程启动后,它一直循环阻塞等待消息,若接收有消息( 即有套接 字收到数据) ,根据消息中参数找到对应的套接字并撤销该套接字的网络事件通知消息功 能,最后调用该套接字处理消息,并循环等待消息。 图2 - 3事件线程运行流程图 在套接字处理事件时将该事件通知给与之联系在一起的任务对象,即调用该任务对象 的s i g n a l 方法,所传递事件为读取数据事件。这样可以将套接字与任务对象联系起来, 当套接字上收到数据后可在事件线程上通知对应的任务对象,任务对象在任务线程上得到 运行处理来自套接字的数据。例如:r t s p 监听任务对象就和其监听套接字联系起来,r t s p 会话任务对象就和其会话连接套接字联系起来,而r t c p 任务对象和r t p 会话的接收 r t c p 数据包的套接字联系起来。 因此,通过任务事件机制,使得在单个线程上处理所有的服务连接成为可能。 4 ) 任务线程( t a s kt h r e a d ) 任务线程的功能是接收事件线程发来的r t s p 和r t p 请求,然后转发这些请求给服务 器相应的处理模块,以及发送数据报给客户端。缺省情况下,服务器内核为每个处理器创 建一个任务线程( 参见图2 4 ) 。 在服务器启动阶段创建并启动任务线程,任务线程负责为需要运行的任务对象调度并 提供时间运行,任务线程提供两种存储形式以调度任务对象:最小堆和阻塞队列。 【调度】存在于最小堆中的任务对象都有一个“运行时刻”,该运行时刻标明该任务 对象应该在时刻被调度运行。 任务线程在调度任务对象( 即让任务线程获取线程时间得以运行) 时: 首先查看最小堆中的最小任务对象( 即运行时刻最小的任务对象) 。若最小堆中无任 务对象,则设置“等待时间”为l o 毫秒;若堆中任务对象的运行时刻大于当前时刻( 即 南京邮电学院硕士研究生学位论文第二章流媒体服务器的系统架构 最小堆中最早需运行的任务对象还未到运行时刻) ,则设置“等待时间”为该最小运行时 刻与当前时刻的差值,若堆中任务对象运行时刻不大于当前时刻,即该最小任务对象需马 上调度运行,则调度该任务对象。 若设置完成等待时间后,从阻塞队列中等待任务对象。若此时任务队列中存在有任务 对象,则马上调度该任务对象,因为该任务对象已被通知需分配线程时间调度运行。若此 时任务队列中无任务对象,由于该队列是阻塞队列,它会在任务对象入队列时返回所加入 的任务对象,调度该任务对象;或者在等待时间到时返回空值,并跳转到第一步,此时最 小堆中最小任务队列的运行时刻已到,调度该最小任务对象。 因此,任务线程首先调度最小堆中已需要运行的任务对象,在完成任务对象的运行后 再次调度;若最小堆中无任务对象或最小任务对象的运行时刻未到,通过阻塞队列等待任 务对象被通知得以调度,在等待时间内,若无任务对象到来。 t a o t h t e a d 调度任务对象 缈 是否有最小任 2 复要y l 是 务对象 时刻是 至u 是 设置等待时间为1 0 毫秒 否 设置等待时阔为当前时刻与 最小任务对象运行时刻差值 到阻塞队列中等待任务对象 臻爹 # 待结束,队列否 中是否有任务 对象 l 是 返回该最小任务对象l 返回阻塞队列头部任务对象 图2 , - 4任务线程调度任务对象流程图 【运行】任务线程调度任务对象并调用任务对象r u n 方法完成任务后,根据返回值对 任务对象有进一步的处理:若返回值为负,则删除该任务对象,一般任务对象在收到“k i l l 事件”后运行其r u n 方法后返回负值使得任务对象删除它;若返回值为零,则不进行进 一部处理,使得在任务对象在收到新的时间通知能够再次被调度运行;若返回值为正,则 标明该任务对象在返回值时间后需再次被调度运行,则设置其事件标记为空闲,并以当前 8 南京邮电学院硕士研究生学位论文 第二章流媒体服务器的系统架构 时刻和返回值之和作为其运行时刻,然后将其插入到最小堆中,使得在任务对象的运行时 刻到来后会被任务线程调度得以运行。 2 1 2d s $ 系统的模块结构 模块是一些功能的集合体,它针对特定的功能表现为特定的角色。服务器通知模块扮 演某个角色、调用模块完成特定的功能( 用角色名形容特定的功能) 。 为了实现内核对模块的支持、内核对模块的调用,每个模块都有两个程序:主程序 ( m a i nr o u t i n e ) 和派遣程序( d i s p a t c hr o u t i n e ) 。主程序用于服务器启动时内核加载模块,派遣 程序用于服务器通过内核调用模块完成特定的功能。 主程序举例如下( 本文模块均以“文件模块”为例) : q t s s _ e r r o rq t s s f i l e m o d u l e _ m a i n ( v o i d 。i n p r i v a t e a r g s ) ( r e t u r n _ s t u b l i b r a r y _ m a i n ( i n p r i v a t e a r g s ,q t s s f i l e m o d u l e d i s p a t c h ) ; ) q t s s f i l e m o d u l em a i n 为文件模块的主程序函数名,q t s s f i l e m o d u l e d i s p a t c h 为文件 模块的派遣程序函数名。 当内核加载模块时调用模块的主程序,主程序将该模块的派遣程序函数地址返回给内 核。 派遣程序举例如下: q t s s _ e r r o rq t s s f i l e m o d u l e d i s p a t c h ( q t s s _ r o l ei n r o l e , q t s s _ r o l e p a r a m p t r i n p a r a m b l o c k ) s w i t c h ( i n r o l e ) c a s eq t s s _ r e g i s t e r _ r o l e : r e t u r nr e g i s t e r ( & i n p a r a m b l o c k 一 r e 庐a r a m s ) ; c a s eq t s s _ r t s p r e q u e s t _ r o l e : r e t u r np r o c e s s r t s p r e q u e s t ( & i n p a r a m b l o c k 一 r t s p r e q u e s t p a r a m s ) ; ) ) 服务器通过内核调用模块实现特定功能时,需传递给派遣程序一个角色名i n r o l e 和角 9 南京邮电学院硕士研究生学位论文第二章流媒体服务器的系统架构 色参数块指针i n p a r a m b l o c k 。模块的派遣程序根据角色名调用特定的函数扮演特定的角 色。角色参数块是一个共用体结构,将所有可能的角色参数块封装在q t s s _ r o l e p a r a m e s 接口下,模块的派遣程序需根据不同的角色名取用不同类型的参数块。例如:当服务器调 用文件模块处理r t s p 请求时,通过内核传递角色名q t s sr t s p r e q u e s t和角色参role 数块指针i n p a r a m b l o c k 给文件模块的派遣程序,该派遣程序根据角色名调用相应的功能 函数p r o c e s s r t s p r e q u e s t o ,并将对应角色名的角色参数块 i n p a r a m b l o c k r t s p r e q u e s t p a r a m s 传递给该功能函数。 模块的组织结构框图如图2 5 所示: 莎 弧 内该偷) l 对象j 主程序 i 返回派遣程序的地址给内按 内棱在模块对象内存储该地址) 派遣程序 根据角色名调用不同的角色函 数。并传递相应的参数块l 图2 - 5模块组织结构图 d s s 提供了两种方式把我们自己开发的m o d u l e 添加到服务器中:一种称为静态模块 ( s t a t i cm o d u l e ) ,该方式将我们开发的m o d u l e 代码直接编译到内核中去:另一种称为动 态模块( d y n a m i cm o d u l e ) ,该方式将我们开发的m o d u l e 单独编译称为一个动态库,然 后修改配置,使服务器在启动时将其加载。 当服务器启动时,它首先装载没有被编译进内核的动态模块,然后才装载被编译进内 核的静态模块;由于现有的大部分系统功能都是以静态模块的方式存在的,如果你希望用 自己的模块替换某个系统功能,最好是编写一个动态模块,因为它们将早于静态模块被装 载。 无论是静态模块还是动态模块,它们的代码都是相同的,唯一的不同就是它们的编译 方式。首先为了将静态模块编译到服务器中,我们必须修改q t s s e r v e r c p p 文件中的 q t s s e r v e r :l o a d c o m p i l e d l n m o d u l e s ,并向其中加入以下代码: l n 南京邮电学院硕士研究生学位论文 第二章流媒体服务器的系统架构 q t s s m o d u l e m y m o d u l e - - - n e wq t s s m o d u l e ( + x y z 一+ ) ; ( v o i d ) m y m o d u l e 一 i n i t i a l i z e ( & s c a l l b a c k s ,& x y z m a i n j ; ( v o i d ) a d d m o d u l e ( m y m o d u l e ) ; 其中,x y z 是静态模块的名字,而x y z m a i n 则是其主函数入口。 动态模块的编译方法如下:首先单独编译动态模块为一个动态共享库;将该共享库与 q t s s a p is t u b l i b r a r y 链接到一起;最后将结果文件放置至l j q t s s m o d u l e s 目录中去。此后, 服务器在启动时就将自动调用该动态模块。 2 1 3d s s 系统的通信机制 默认情况( 单处理器系统) 下d s s 在一个线程上处理所有的会话,即在唯一的任务 线程上调度不同的任务对象,d s s 服务器的大部分工作都在各种任务对象的r u n ( ) 函数中 得以完成。由于所有会话都运行在这一个任务线程上,任何阻塞都将影响到全体会话,因 此所有套接字均需设置工作于非阻塞模式。由于服务器大量应用异步机制,则需要一种消 息通信机制。例如:当一个用于r t s p 会话连接的套接字接收到数据,对应的r t s p 会话 对象必须被通知有数据需要处理。任务对象就是用来实现这种通信的机制。 所谓任务是指能够被调度的对象,d s s 中r t p 状态更新对象、r t s p 监听对象、r t s p 会话对象、r t p 会话对象均为“任务”对象,可被任务线程调度完成r t p 状态信息的更 新、r t s p 请求监昕、r t s p 请求处理、r t p 数据包发送等工作。例如:r t c p t a s k 类的一 个实例即为一个r t c p 任务对象,这些类都继承自t a s k 类,如图2 - 6 所示,在t a s k 类中 实现有“任务对象”的概念。 图2 - 6d s s 任务、事件类关系图 i l 南京邮电学院硕士研究生学位论文 第二章流媒体服务器的系统架构 每个任务对象都有两个主要的方法:s i g n a l 和r u n ,它们之间协同操作如图2 7 所示。 图2 7任务对象操作示意图 若想要调用任务对象来完成某一任务,需调用其s i g n a l 方法,并传递事件,即通知任 务对象某一事件。例如在r t p 会话任务对象的p l a y ( ) q b 想要启动r t p 任务对象开始发送 r t p 数据包,则通知r t p 会话对象一个“启动事件( s t a r te v e n 0 ”。任务对象s i g n a l 方法所 作工作仅仅是设置任务对象的事件标记值并将任务对象自身作为一个队列元素加入到任 务线程的任务对象队列中去,然后任务线程会调度到任务并完成特定任务。 在任务线程调度到某一任务对象后,会调用其r u n 方法来完成特定的工作。在任务对 象的r u n 方法中,首先根据其事件标记值读取所通知的事件,然后根据该事件完成特定 的任务。在r u n 方法运行结束前,该任务对象必须清除所有事件,以免该r u n ( ) 函数 被立即再次调用。 2 1 4d s s 系统的运行流程 d s s 的运作是以模块为基础,以角色( r o l e ) 来分类各项工作( t a s k ) ,每一个角色 皆是为完成某一类特定工作而设。当客户端提出请求,d s s 根据该请求属于哪一个角色 ( r o l e ) 来启动适当的模块。 如前所述,s e r v e rc o r e 主要分三大模块:s e r v e rc o r e ,r t s ps u b s y s t e m 及r t p s u b s y s t e m 。s e r v e r :从开始到结束整个流程也大略可分为以上三个部分( s e g m e n t ) ,以下就 以这三个部分来阐述服务器运行流程。 s e r v e rc o r e ( s t a r t u p s h u t d o w n ) 图2 8 为服务器启动与结束时的流程图,s e r v e r 启动时先载入事先编译( c o m p i l e ) 在 南京邮电学院硕士研究生学位论文 第二章漉媒体服务器的系统架构 程序中的模块( d y n a m i cm o d u l e ) ,在接下来载入静态模块时若有相同的模块时则以动态 模块为准,这样的设计可以让程序设计者撰写自己的模块取代程序中具有相同功能的静态 模块。当载入模块完成后就进入注册角色( r e # s t e rr o l e ) ,此角色主要的工作是将各模块 所支持角色注册已各呼日q 之用。完成注册后,具有初始化角色( i n i t i a l i z er o l e ) 的模块开 始进行初始化工作,进入监听( l i s t e n ) 状态接收客户端的r t s p 请求。 s t a r t u p s h u t d o w n s e r v e rs t a r t su p j 铀”r l o a d s d y ”k 帅岫 j s e r v s i ri o a d 3 $ t a t i cm o d u l e s 1 l r s e r v i b r 训sm 哪1 n r e g i t rr o k j 1 i r s e i v o r c a l l 。m 。d u i - s i n i n i t h i l z er o l e 上 s e e rp r e c g s s o sr t s pr e q u e s t s s e r v e r s h u bd o w n j s 。r v r c i i s m o d u i 。f n s h u 埘a w nr o f e 上 s e r v e r q u i t s 图2 - 8服务器启动与结束流程图 结束流程则是呼叫具有关闭角色( s h u t d o w n r o l e ) 的各模块执行s h u t d o w n 的工作, 释放资源并结束程序。 r t ps u b s y s t e m ( 处理r t p r t c p 数据包的传送) r t ps u b s y s t e m 主要包括r t p 数据包的传送及r t c p 媒体流控制两部分。在数据包传 送方面,“r t ps e n dp a c k e t sr o l e ”在r t ps e s s i o n 中由“q t s s _ w r i t e ”或“q t s s 嘣t e v ” 把媒体资料传送到客户端。在传送过程中,每送一次数据包后,服务器等待一个时间值再 继续呼叫“r t ps e n dp a c k e t sr o l e ”传送数据包。 图2 - 9r t p 数据包传送流程 1 3 南京邮电学院硕士研究生学位论文 第二章流媒体服务器的系统架构 在媒体流控制方面,当服务器收到r t c p 包时会先判定此r t c p 包属于哪一种, r f c l 8 8 9 中定义了五种r t c p 包:s r ( s e n d e r r e p o r t ) 、r r ( r e c e i v e r r e p o r t ) 、s d e s ( s o u r c e d e s c r i p t i o ni t e m s ) 、a p p ( a p p l i c a t i o ns p e c i f i cf u n c t i o n s ) 及b y e ( i n d i c a t e se n do f p a r t i c i p a t i o n ) 。根据数据包的种类,服务器会调用相应的模块进行处理。 r t s ps u b s y s t e m ( 处理r t s p 相关工作) 当服务器接收到一个r t s p 请求时,先建立一个r t s p 请求对象,该对象存储该请求 的参数。接着根据图2 1 0 的流程处理此请求。先经由“r t s pf i l t e rr o l e ”对数据包资料 作某些改变等前置处理。当“r t s p f i l t e r r o l e ”完成,开始进行对该请求数据包的分析以 取得各种参数并建立一个r t s ps e s s i o n 及一个c l i e n ts e s s i o n 。r t s ps e s s i o n 主要负责处理 此请求所建立的r t s p 连接阶段的请求回应。c l i e n ts e s s i o n 则负责流媒体数据发送阶段的 维护工作。对该请求分析完毕后,服务器调用各模块中的“r t s p r o u t e r o l e ”对r t s p 对 象进行参数修改或设定。接着判断该请求是属于r t s p 数据包中的哪一种类型,以便把该 请求传送到对应的函数处理此请求,若无法判别属于哪一个类型,则将其传送到“r t s p r e q u e s tr o l e ”,此角色处理所有在“p r e p m c e s s o rr o l e ”中未定义的类型。最后,由 “p o s t p r o c e s s o rr o l e ”角色负责统计工作,例如存取记录等。 驰”r f ;。c r a r t s l l sm

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论