流媒體協(xié)議與Darwin服務器課件
單擊此處編輯母版標題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,*,流媒體協(xié)議與DARWIN媒體服務器,1 流媒體協(xié)議介紹1.1Rtp(,RTP:Real Time Transport Protocol,),實時傳輸協(xié)議 RTP 為數(shù)據(jù)提供了具有實時特征的終端對終端傳送服務,如在組播或單播網(wǎng)絡服務下的交互式式視頻音頻或仿真數(shù)據(jù)。,RTP 由兩個相近鏈接部分組成:,RTP:傳送具有實時屬性的數(shù)據(jù);,RTP 控制協(xié)議 RTCP:監(jiān)控服務質(zhì)量并傳送正在進行的會話參與者的相關信息。,協(xié)議結(jié)構(gòu),PT 識別 RTP 有效載荷的格式,并通過應用程序決定其解釋。,序列號 每發(fā)送一個 RTP 數(shù)據(jù)包,序列號增加1。接收方可以依次檢測數(shù)據(jù)包的丟失并恢復數(shù)據(jù)包序列。,Timestamp 反映 RTP 數(shù)據(jù)包中的第一個八位組的采樣時間。,SSRC 同步源。該標識符隨機選擇,旨在確保在同一個 RTP 會話中不存在兩個同步源具有相同的 SSRC 標識符。,RTCP協(xié)議,當應用程序開始一個RTP會話時將使用兩個端口:一個給RTP,一個給RTCP。RTP本身并不能為按順序傳送數(shù)據(jù)包提供可靠的傳送機制,也不提供流量控制或擁塞控制,它依靠RTCP提供這些服務。在RTP的會話之間周期的發(fā)放一些RTCP包以用來傳監(jiān)聽服務質(zhì)量和交換會話用戶信息等功能。RTCP包中含有已發(fā)送的數(shù)據(jù)包的數(shù)量、丟失的數(shù)據(jù)包的數(shù)量等統(tǒng)計資料。因此,服務器可以利用這些信息動態(tài)地改變傳輸速率,甚至改變有效載荷類型。RTP和RTCP配合使用,它們能以有效的反饋和最小的開銷使傳輸效率最佳化,因而特別適合傳送網(wǎng)上的實時數(shù)據(jù)。根據(jù)用戶間的數(shù)據(jù)傳輸反饋信息,可以制定流量控制的策略,而會話用戶信息的交互,可以制定會話控制的策略。,(Real Time Streaming Protocol),RTSP協(xié)議定義了如何有效地通過IP網(wǎng)絡傳送多媒體數(shù)據(jù),是一種客戶端到服務器端的多媒體描述協(xié)議。RTSP是一個流媒體標示控制協(xié)議,用于控制具有實時特性的傳輸服務,它本身并不傳輸數(shù)據(jù),而是利用低層傳輸協(xié)議提供的傳輸服務如RTP來傳輸數(shù)據(jù)。它提供對媒體流的控制功能,例如播放,暫停,快進等。RTSP定義控制中所用的消息、操作方法、狀態(tài)碼以及頭域等,另外還描述與RTP的交互操作。RTSP制定時參考了HTTP/1.1,在語法及操作上均與HTTP/1.1相似,并使HTTP的擴展機制在大多數(shù)情況下,可以加到RTSP上。,C-S:,DESCRIBE rtsp:/127.0.0.1/sample_100kbit.mp4 RTSP/1.0rn,CSeq:1rn,Accept:application/sdprn,Bandwidth:384000rn,rn,S-C:,RTSP/1.0 200 OKrn,Server:DSS/5.5.1(Build/489.8;Platform/Win32;Release/Darwin;)rn,Cseq:1rn,Content-length:1203rn,Content-Type:application/sdprn,x-Accept-Retransmit:our-retransmitrn,x-Accept-Dynamic-Rate:1rn,Content-Base:rtsp:/127.0.0.1/sample_100kbit.mp4/rn,rn,v=0rn,o=StreamingServer,s=sample_100kbit.mp4rn,u=http:/rn,e=adminrn,c=IN IP4 0.0.0.0rn,b=AS:96rn,t=0 0rn,a=control:*rn,a=mpeg4-iod:data:application/mpeg4-iod;base64,AoJrAE/w/z/wOBdgABQNhkYXRhOmFwcGxpY2F0aW9uL21wZWc0LW9kLWF1O2Jhc2U2NCxBWUVDQVV3Rkh3TklBTWtnQUdVRUx5QVJBRzNkQUFFaytBQUJKUGdGSUFBQUFiRHpBQUFCdFE3Z1FNRFBBQUFCQUFBQUFTQUFoRUQ2S0RBZzhxSWZCaEFBUkFBQUFsZ0FBQUFBSUFBQUFBQURBVElDbndNdUFHVUFCSUNBZ0JSQUZRQVlBQUFBVGlBQUFFNGdCWUNBZ0FJVmtBWVFBRVFBQUI5QUFBQWZRQ0FnQUFBQUF3PT0EDQEFAADIAAAAAAAAAAAGCQEAAAAAAAAAAANpAAJARmRhdGE6YXBwbGljYXRpb24vbXBlZzQtYmlmcy1hdTtiYXNlNjQsd0JBU2daTUNvRmNtRUVIOEFBQUIvQUFBQkVLQ0tDbjQEEgINAABkAAAAAAAAAAAFAwAAYAYJAQAAAAAAAAAArn,a=isma-compliance:1,1.0,1rn,a=range:npt=0-70.00000rn,m=video 0 RTP/AVP 96rn,b=AS:76rn,a=rtpmap:96 MP4V-ES/90000rn,a=control:trackID=3rn,a=cliprect:0,0,242,192rn,a=framesize:96 192-242rn,a=mpeg4-esid:201rn,m=audio 0 RTP/AVP 97rn,b=AS:20rn,a=rtpmap:97 mpeg4-generic/8000/2rn,a=control:trackID=4rn,a=fmtp:97 profile-level-id=15;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3;config=1590rn,a=mpeg4-esid:101rn,1.3sdp(SDP:Session Description Protocol),會話描述協(xié)議(SDP)為會話通知、會話邀請和其它形式的多媒體會話初始化等目的提供了多媒體會話描述。會話目錄用于協(xié)助多媒體會議的通告,并為會話參與者傳送相關設置信息。SDP 即用于將這種信息傳輸?shù)浇邮斩?SDP 文本信息包括:,會話名稱和意圖;,會話持續(xù)時間;,構(gòu)成會話的媒體;,有關接收媒體的信息(地址等)。,協(xié)議結(jié)構(gòu),SDP 信息是文本信息,采用 UTF-8 編 碼中的 ISO 10646 字符集。SDP 會話描述如下:,v=(協(xié)議版本),o=(所有者/創(chuàng)建者和會話標識符),s=(會話名稱),一個或更多時間描述(如下所示):,0個或多個媒體描述(如下所示),時間描述,t=(會話活動時間),媒體描述,m=(媒體名稱和傳輸?shù)刂罚?例子,其中,DESCRIBE,SETUP,PLAY命令是遵循rtsp協(xié)議的,而會話描述是遵循sdp協(xié)議的,媒體數(shù)據(jù)的傳輸是采用rtp協(xié)議的。,2.Darwin 流媒體服務器介紹,2.1各個流媒體解決方案比較,流媒體商業(yè)解決方案比較,目前市面上有real networks公司的real system,microsoft公司的windows media系統(tǒng),蘋果公司的quicktime流媒體系統(tǒng)及philips公司的webcine,后者在目前市場上的占有率微乎其微,而另外三大主流流媒體解決方案則占據(jù)了90以上的市場。,微軟的流媒體系統(tǒng)以其方便性、先進性、集成性、低費用等特點而漸漸被人們注意,它的缺點是僅支持windows操作系統(tǒng),采用的是私有協(xié)議MMS而不是RTSP/RTP協(xié)議。提供SDK進行二次開發(fā).,Realnetwork公司的流媒體系統(tǒng)是目前最流行的流媒體解決方案,支持幾乎所有主流的個人計算機平臺,提供SDK進行二次開發(fā)。,蘋果公司的流媒體系統(tǒng)支持幾乎所有主流的個人計算機平臺,提供媒體服務器darwin stream server(DSS)的開源代碼,播放器quicktime提供SDK進行二次開發(fā).,2.1.2 開源流媒體服務器比較,開源方面,因為目前編解碼器及流媒體的標準未定,開源資源比較紊亂,下面對開源領域較多人使用的程序做一比較,2.2DSS架構(gòu),DSS處理流媒體的過程如圖所示,客戶端經(jīng)由DSS中的RTP session及RTSP session建立RTP/UDP/IP數(shù)據(jù)連接以及RTSP/TCP/IP控制連接,接著流媒體數(shù)據(jù)由RTP鏈路傳送到客戶RTSP鏈路控制RTP流的播放。,服務器架構(gòu),服務器自己擁有的主線程(Main Thread)。這個線程負責檢查服務器是否需要關閉,記錄狀態(tài)信息,或者打印統(tǒng)計信息。,空閑任務線程(Idle Task Thread)。空閑任務線程管理一個周期性的任務隊列。,事件線程(Event Thread)。事件線程負責偵聽套接口事件,比如收到RTSP請求和RTP數(shù)據(jù)包,然后把事件傳遞給任務線程。,一個或者多個任務(Task)線程。任務線程從事件線程中接收RTSP和RTP請求,然后把請求傳遞到恰當?shù)姆掌髂K進行處理,把數(shù)據(jù)包發(fā)送給客戶端。缺省情況下,核心服務器為每一個處理器創(chuàng)建一個任務線程。,任務線程,DSS中RTSP監(jiān)聽對象、RTSP會話對象、RTP會話對象均為“任務”對象,可被任務線程調(diào)度完成RTSP請求監(jiān)聽、RTSP請求處理、RTP數(shù)據(jù)包發(fā)送等工作。每個任務對象都有兩個主要的方法:Signal和Run,用于實現(xiàn)任務對象的通知和運行。任務對象的概念圖如圖3所示:,Signal方法,若想要通知任務對象完成某一任務,只需調(diào)用其Signal方法,并傳遞事件,即通知任務對象某一事件。例如在RTP會話任務對象的Play()中想要啟動RTP任務對象開始發(fā)送RTP數(shù)據(jù)包,則通知RTP會話對象一個“啟動事件(StartEvent)。任務對象Signal方法所作的工作僅僅是設置任務對象的事件標記值并將任務對象自身作為一個隊列元素加入到任務線程的任務對象隊列中去,然后任務線程會調(diào)度到該任務并完成特定任務。,Run方法,在任務線程調(diào)度到某一任務對象后,會調(diào)用其Run方法來完成特定的工作。在任務對象的Run方法中,首先根據(jù)其事件標記值判斷被通知的事件,然后根據(jù)該事件完成特定的任務。,任務對象的運行,任務線程調(diào)度任務對象并調(diào)用任務對象的Run方法完成任務后,根據(jù)返回值對任務對象有進一步的處理:若返回值為負,則刪除該任務對象,一般任務對象在收到“kill事件”后,其Run方法返回負值使得任務對象在任務線程上被刪除;若返回值為零,則不進行進一部處理,使得在任務對象只有在收到新的事件通知后才能夠再次被調(diào)度運行:若返回值為正,則標明該任務對象在返回值時間間隔后需再次被調(diào)度運行,則設置其事件標記為空閑,并以當前時刻和返回值之和作為其運行時刻,然后將其插入到任務隊列中,使得在任務對象的運行時刻到來后會被任務線程調(diào)度得以運行。,事件線程,事件線程在啟動時構(gòu)造有一個消息窗口用于接收消息。套接字若想通過該消息窗口產(chǎn)生消息,需調(diào)用WSAAsyncSelectQ函數(shù)請求“當套接字上有網(wǎng)絡事件時,產(chǎn)生消息到該消息窗口”。,事件線程啟動后,它一直循環(huán)阻塞等待消息,若接收到消息(即有套接字收到數(shù)據(jù)),根據(jù)消息中參數(shù)找到對應的套接字并撤銷該套接字的“網(wǎng)絡事件通知消息”功能,最后調(diào)用該套接字處理消息,并循環(huán)等待消息。,在套接字處理事件時將該事件通知給與之聯(lián)系在一起的任務對象,即調(diào)用該任務對象的Signal方法,所傳遞事件為讀取數(shù)據(jù)事件。這樣可以將套接字與任務對象聯(lián)系起來,當套接字上收到數(shù)據(jù)后可在事件線程上通知對應的任務對象,任務對象在任務線程上得到運行以處理來自套接字的數(shù)據(jù)。例如:RTSP監(jiān)聽任務對象和其監(jiān)聽套接字聯(lián)系起來,RTSP會話任務對象和其會話連接套接字聯(lián)系起來,而RTCP任務對象和所有RTP會話接收RTCP數(shù)據(jù)包的套接字聯(lián)系起來。因此,通過任務/事件機制,使得在單個線程上處理所有的流會話成為可能,空閑線程,在服務器啟動時創(chuàng)建、啟動有空閑