999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Darwin Streaming server的研究與應用

2008-12-31 00:00:00王志剛
電腦知識與技術 2008年35期

摘要:介紹了Darwin streaming server(DSS)源碼的架構和核心流程;詳細分析了Darwin streaming server的關鍵技術:媒體封包和流量控制;最后給出了Darwin streaming server的應用實例。

關鍵詞:RTP;流媒體;Darwin Streaming Server(DSS)

中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)35-2118-02

Research and Application of the Darwin Streaming Server

WANG Zhi-gang,ZHOU Nan,GAO Qing

(School of Computer Science Technology, Soochow University,Suzhou 215006,China)

Abstract:This paper introduces the architecture and the core flow of the Darwin streaming server(DSS) source code, then discusses the key technology in detail :Media Data Packetization and Flow Control, at last it shows an example Applications of DSS.

Key words: RTP; streaming media; darwin streaming Server (DSS)

1 引言

作為新一代互聯網應用的標志, 流媒體技術在近幾年得到了飛速的發展, 并且廣泛應用于遠程教育、網絡監控、視頻點播等系統之中。目前在流式媒體領域,有三種占有主導地位的產品,它們分別是Apple公司的Quick Time、Microsoft公司的Media Server以及Real公司的Real System。Darwin Streaming Server(簡稱DSS)是QuickTime Streaming Server開放式源代碼的版本,同時支持FreeBSD、Linux、Solaris、Windows NT和Windows 2000等多個操作系統,是當前所有同類產品中支持平臺最多的一個。

2 Darwin流化服務器介紹

Darwin Streaming Server(簡稱DSS)是QuickTime Streaming Server開放式源代碼的版本,目前最新的版本是6.0.3。DSS源代碼完全采用標準C++語言寫成,編程風格非常優秀,每一個C++類都對應著一對和類同名的.h/.cpp文件。整個服務器包括多個子系統,分別存放在獨立的工程內,其中,最為重要的是基礎功能類庫(Common Utilities Lib)和流化服務器(Streaming Server)兩個工程。表1給出了這個兩個模塊的具體功能。

表1 DSS 程序模塊架構分類及功能

3 Server程序詳細分析

整個DSS的運行是以模塊(Module)為基礎,以角色(Role)來分類各項任務的(Task),每一個角色都是為完成某一特定的任務而設定的。當客戶端提出請求時,DSS會根據該請求屬于哪一個角色來啟動適當的模塊。如前所述,Server Core 主要分三大模組:Server Core,RTSP subsystem 及RTP subsystem。Server從開始到結束整個流程也大概分為這三個部分。

3.1 Server Core(Startup Shutdown)

圖2 為程序啟動與結束時的流程圖。服務器在啟動的時候,會首先裝載沒有被編譯到服務器里面的模塊(即動態模塊),然后再裝載編譯為服務器一部分的模塊(即靜態模塊)。在模塊裝載完成之后,服務器會調用每個QTSS模塊的Register(注冊)角色,每個模塊都必須支持這個角色。在Register角色中,模塊會調用QTSS_AddRole函數來指定自己支持的其它角色。接下來服務器就以Initialize(初始化)角色調用每一個注冊支持該角色的模塊。Initialize角色執行模塊所需要的任何初始化任務,比如分配內存和初始化全局的數據結構。然后進入聆聽(Listen)的狀態接收客戶端的RTSP 請求。

3.2 RTSP 子系統

在服務器調用所有注冊了Initialize角色的模塊之后,就已經為接收來自客戶端的請求做好準備了,這些請求就是RTSP請求。當服務器收到一個RTSP請求時,就會創建一個RTSP請求對象,接著服務器會根據預先定義好的順序,調用各個模塊的相關角色,如圖3所示。在處理RTSP請求的時候,服務器調用的第一個角色是RTSP Filter(過濾器)角色。之后,服務器就會對請求進行解析。RTSP請求解析完成之后,服務器會以RTSP Route(路由)角色調用所有注冊了該角色的模塊,并傳入一個RTSP對象。在調用了所有RTSP Route角色之后,服務器就會以RTSP Preprocessor角色調用每個注冊了該角色的模塊。如果請求的類型互相匹配,則RTSP Preprocessor角色就調用QTSS_Write或者QTSS_WriteV函數來向客戶發送數據,對客戶端進行響應。如果沒有RTSP Preprocessor角色對RTSP的請求進行響應,則服務器就以RTSP Request(請求)角色調用成功注冊了該角色的模塊(第一個注冊RTSP Request角色的模塊,是唯一一個可以注冊RTSP Request角色的模塊)。RTSP Request角色負責響應所有沒有被RTSP Preprocessor角色(的模塊)處理過的RTSP請求。RTSP Request角色對請求進行處理之后,服務器就調用注冊了RTSP Postprocessor角色的模塊。處理RTSP Preprocessor或者RTSP Request角色的模塊可能需要為特定的客戶會話生成一些媒體數據。如果這樣的話,模塊可以通過調用QTSS_Play函數來實現,這個函數會使模塊的RTP Send Packets(RTP發送數據包)角色被調用,即進入RTP子系統。

3.3 RTP子系統

RTP subsystem 主要包括RTP 封包傳送及RTCP串流控制兩部份。在封包傳送方面,RTP Send Packets角色調用QTSS_Write或者QTSS_WriteV函數,在RTP會話的基礎上向客戶發送數據。當RTP Send Packets角色發送完成一些數據包之后,就會把控制權返回給服務器,并指定服務器下次調用模塊的RTP Send Packets角色的間隔時間。這個周期會一直重復,直到所有的媒體數據包被發送完成,或者由于客戶請求的原因需要暫停或中止客戶會話為止。在串流控制方面,當Server 接收到RTCP 封包時會先判定此RTCP 封包屬于哪一種,根據封包的種類,Server 會呼叫相應的模塊進行處理。

4 服務器關鍵技術研究

在了解了DSS整個運行流程的基礎上,本文主要研究了下面兩個重點:DSS對媒體資料的封包的算法和服務器端如何控制流量。這兩者的目的都是在使得客戶端的播放能夠清晰流暢。

4.1 媒體封包切割(Media Data Packetization)

在封包切割前,我們必須得到以下的幾個信息:

1) 在單一RTP 封包中能容納的最大QuickTime 媒體數據尺寸(Maxima QT Media Data Size, MQD)

2) 此種媒體數據其所有取樣(Sample)尺寸是否固定?(Constant QT Sample Size, CQS)

3) 此種媒體數據其所有取樣的持續期間(Duration)是否固定?(Constant QT Duration , CQD)

4) 當所有取樣尺寸固定時其取樣尺寸為多少?(Constant Sample Size, CSS)

5) 當取樣尺寸不固定時其某一個取樣的大小(Sample Size, SS)

根據以上的信息,DSS 采用三種封包切割方式:

1) (CQS=true)and(CQD=true)and(CSS<=0.5 * MQD)把多個取樣封裝成一個RTP 封包,同時每個RTP標頭中M 字段設為1,QT 標頭中的PCK 字段也設為1。(RTP 標頭中M 字段設為1,表示此為某一取樣的最后一個封包;QT 標頭的PCK字段表示該封包切割所采用的方式。)

2) ((CQS=1)or(CQD=1))and(SS<=05 * MQD)數個取樣封裝成一個RTP 封包,同時此一RTP封包標頭的M 字段設為1,QT 標頭中PCK 欄位設為2。

3) 不符合(1)和(2)的情況時,采用之。單一的取樣被封裝成一個或數個RTP 封包中,同時最后一個屬于該取樣的RTP 封包之M字段設為1,其它設為0;QT 標頭PCK 字段設為3。由于客戶端必須以一個取樣為單位進行封包重組,因此根據RTP 的M 字段及QT 的PCK 字段,可以知道此一封包所采用的分割方式,同時采取相應的封包重組方法。另外在處理某一封包遺失時,也可以快速決定是否該丟棄與其相關的封包,增進客戶端的效率。

4.2 流量控制(Flow Control)

DSS 利用客戶端傳送回來的RTCP 封包信息以及變量“Quality level”來達成流量控制的機制。這些信息包括“Loss Rate”,“Getting better”以及“Getting worse”消息。

1) 封包遺失率(Loss Rate):

如果客戶端的RTCP 回報中封包遺失率連續數次大于某一數值(此值為一百分比定值,由程序給定,稱SLossThinTolerance),則將ratchetless 設為True,表示需要調降傳輸速度。如果RTCP 回報中封包遺失率連續數次小于某一數值(此為一百分比定值,稱為SLossThickTolerance),則將ratchetmore 設為True。

2)“Getting Worse”及“Getting Better”:如果客戶端的RTCP 發出“Getting Worse”的消息,則直接將ratchetless 設為True。如果客戶端的RTCP 發出“Getting Better”的消息,則直接將ratchetmore 設為True。由ratchetless 或ratchetmore 的設定,可以調整QualityLevel 的數值。DSS 根據QualityLevel 的數值大小來決定傳輸速度的快或慢,進而達到一部份的流量控制的目的。

5 DSS應用實例

作為一個運行于多個操作系統平臺的開發源代碼的服務器,其不但功能強大、易于操作,而且DSS還提供了一種稱為Module的二次開發接口。使用這個開發接口,我們可以充分利用服務器的可擴展性及其實現的多種協議,并且能夠保證和將來版本兼容。這樣就可以分為兩種用途:直接使用和二次開發使用。

5.1 直接使用DSS

作為一個具有工業強度的產品,DSS完全可以直接用在我們項目中,例如,利用Vara software公司的Wirecast可以采集USB Camer實時的影音圖像,然后通過簡單的設置后發送給DSS,通過DSS傳送出去,這樣就可以建立我們的實時影音服務器。同時,如果存在大量客戶端,我們可以利用DSS的中繼功能通過簡單的增加PC機的數量來滿足我們的需求,簡單快捷,成本也并非一定高于找開發人員開發程序。

5.2 二次開發使用

我們可以利用DSS作為平臺進行二次開發,如增加對媒體格式的支持,增加客戶身份認證,增加對媒體內容的管理等模塊,使DSS成為一個符合實際需求的實用系統。抱此目的的讀者在掌握DSS整體流程的基礎上,應著重于其二次開發平臺(如Module)以及底層文件和媒體格式支持庫的研究。

6 結束語

作為三大主要流式媒體應用中唯一一個開放源代碼的產品,DSS讓開發人員能夠從最底層研究流式媒體技術,事實上,當前國內外許多公司正是在DSS的基礎上開發了自己的流式媒體相關產品,而且通過研究DSS, 我們學習到了高級網絡編程(Socket)、多線程之間的通信、任務調度、系統資源(CPU、磁盤等)的合理利用以及用于流式媒體的多個標準協議(RTP/RTCP、RTSP、SDP)的具體實現等等。這也是我們研究源碼的意義所在。

參考文獻:

[1] Apple Computer Inc. QTSS Modules Programming Guide, 2006.

[2] Sven Hessler, Michael Welzl. An Empirical Study of the Congestion Response of RealPlayer, Windows Media Player and QuickTime. IEEE. 2005.

[3] 黃拔峰,鐘明,楊傳均,張家鈺.Darwin Streaming Server的研究與應用[J].計算機工程,2004(10):134-135.

主站蜘蛛池模板: 亚洲动漫h| 伊人久久久大香线蕉综合直播| 成年A级毛片| 久久一级电影| 久久99国产精品成人欧美| 四虎影视国产精品| 久久精品一品道久久精品| 久久久久无码国产精品不卡| 国产欧美视频综合二区| 亚洲婷婷六月| 老司国产精品视频91| 国产AV毛片| 欧美性天天| 亚洲AV一二三区无码AV蜜桃| 亚洲日本www| 尤物国产在线| 99re经典视频在线| 国产精品主播| 浮力影院国产第一页| 伊人色婷婷| 久久超级碰| 日本高清有码人妻| 日韩大片免费观看视频播放| 全部免费特黄特色大片视频| 妇女自拍偷自拍亚洲精品| 狠狠做深爱婷婷综合一区| 嫩草国产在线| 无码中文AⅤ在线观看| 亚洲第一页在线观看| 亚洲欧洲一区二区三区| 国产91在线|日本| 精品少妇人妻av无码久久| 久久精品日日躁夜夜躁欧美| 日韩高清成人| 99热这里只有免费国产精品| 激情国产精品一区| 99免费在线观看视频| 露脸一二三区国语对白| AV网站中文| 91在线精品免费免费播放| 精品国产成人高清在线| 久久女人网| 中文字幕亚洲乱码熟女1区2区| 国产噜噜噜| 日本三级黄在线观看| 久久综合色视频| 日韩亚洲综合在线| 精品国产aⅴ一区二区三区| 无码国产偷倩在线播放老年人| 日韩福利在线观看| 亚洲无码四虎黄色网站| 中文字幕免费在线视频| 国内熟女少妇一线天| 日本在线国产| 日韩av高清无码一区二区三区| 亚洲国产成人精品青青草原| 无码电影在线观看| 午夜福利无码一区二区| 国产电话自拍伊人| AV无码无在线观看免费| 女人18毛片一级毛片在线 | 99久久国产综合精品2023| 精品久久高清| 日韩精品毛片| 自拍偷拍欧美日韩| 成人免费网站久久久| 欧洲在线免费视频| 天堂在线www网亚洲| 国产91麻豆免费观看| 国产另类视频| 亚洲精品图区| 色哟哟精品无码网站在线播放视频| 国产精品视频猛进猛出| 国产在线视频自拍| 无码 在线 在线| 精品福利国产| 久久亚洲国产视频| 亚洲无码91视频| 88国产经典欧美一区二区三区| 一级毛片免费的| 99热这里只有精品在线观看| 大学生久久香蕉国产线观看|