隨著互連網的飛速發展,流媒體技術的應用越來越廣泛,從網上廣播、電影播放至遠程教學以及線上的新聞網站等都用到了流媒體技術。但現有公開文獻所報道的大多是利用現有的流媒體伺服器來搭建一個流媒體服務系統,或者是針對流媒體資料的編碼方式所進行的研究。本文對流媒體伺服器技術的研究重點在於如何建立一個伺服器,並且在實現流媒體傳輸的兩個基本協議RTP/RTCP的基礎上構建一個基本的流媒體伺服器。
2流媒體技術簡介
2.1“流”的定義
現在網上傳輸視頻、音頻主要有下載(Download)和串流(Streaming)兩種方式。串流是連續傳送視/音頻訊號,當流媒體在客戶機播放時其餘部分在後台繼續下載。串流有順序串流(Progressive Streaming)和即時資料流式傳輸(Realtime Streaming)兩種方式。即時資料流式傳輸是即時傳送,特別適合現場事件,即時資料流式傳輸必須匹配串連頻寬,這意味著映像品質會因網路速度降低而變差,以減少對傳輸頻寬的需求。“即時”的概念是指在一個應用中資料的交付必須與資料的產生保持精確的時間關係。
在Internet中使用串流技術的連續時基媒體就稱為流媒體,通常也將其視頻與音頻稱為視頻流和音頻流。實現串流一般都需要專用伺服器和播放器。
2.2流媒體系統組件
流媒體是由各種不同軟體構成的,這些軟體在各個不同層面上互相通訊,基本的流媒體系統包含以下3個組件:
播放器(Player),用來播放流媒體的軟體。
伺服器(Server),用來向使用者發送流媒體的軟體。
編碼器(Encode),用來將原始的音頻視頻轉化為流媒體格式的軟體。
這些組件之間通過特定的協議互相通訊,按照特定的格式互相分頁檔資料。有些檔案中包含了由特定轉碼器解碼的資料,這種轉碼器通過特定演算法壓縮檔的資料量。
3流媒體伺服器的準系統和服務方式
3.1流媒體伺服器的主要功能
(1)響應客戶的請求,把媒體資料傳送給客戶。流媒體伺服器在流媒體傳送期間必須與客戶的播放器保持雙向通訊(這種通訊是必需的,因為客戶可能隨時暫停或快放一個檔案)。
(2)響應廣播的同時能夠及時處理新接收的即時廣播資料,並將其編碼。
(3)可提供其他額外功能,如:數字許可權管理(DRM),插播廣告,分割或鏡像其他伺服器的流,還有組播。
3.2流媒體伺服器的服務方式
(1)單播。在用戶端與媒體伺服器之間建立一個單獨的資料通道,從1台伺服器送出的每個資料包只能傳送給1個客戶機。
(2)組播。在以組播技術構建的網路上,允許路由器一次將資料包複製到多個通道上。
(3)點播與廣播。點播串連是用戶端與伺服器之間的主動的串連,在點播串連中,使用者通過選擇內容項目來初始化用戶端串連,使用者可以開始、停止、後退、快進或暫停流。廣播指的是使用者被動地接收流,在廣播過程中,資料包的單獨一個拷貝將發送給網路上的所有使用者,用戶端接收流,但不能控制流程。
4構建流媒體伺服器
4.1RTP/RTCP協議簡介
即時傳輸協議RTP(Realtime Transport Protocol):是針對Internet上多媒體資料流的一個傳輸協議, 由IETF(Internet工程工作群組)作為RFC1889發布。RTP被定義為在一對一或一對多的傳輸情況下工作,其目的是提供時間資訊和實現流同步。RTP的典型應用建立在UDP上,但也可以在TCP或ATM等其他協議之上工作。RTP本身只保證即時資料的傳輸,並不能為按順序傳送資料包提供可靠的傳送機制,也不提供流量控制或擁塞控制,它依靠RTCP提供這些服務。
即時傳輸控制通訊協定RTCP(Realtime Transport Control Protocol):負責管理傳輸品質在當前應用進程之間交換控制資訊。在RTP會話期間,各參與者周期性地傳送RTCP包,包中含有已發送的資料包的數量、丟失的資料包的數量等統計資料,因此,伺服器可以利用這些資訊動態地改變傳輸速率,甚至改變有效載荷類型。RTP和RTCP配合使用,能以有效反饋和最小的開銷使傳輸效率最佳化,故特別適合傳送網上的即時資料。
RTCP主要有4個功能:
(1)用反饋資訊的方法來提供分配資料的傳送品質,這種反饋可以用來進行流量的擁塞控制,也可以用來監視網路和用來診斷網路中的問題;
(2)為RTP源提供一個永久性的CNAME(規範性名字)的傳送層標誌,因為在發現衝突或者程式更新重啟時SSRC(同步源標識)會變,需要一個運作痕迹,在一組相關的會話中接收方也要用CNAME來從一個指定的與會者得到相聯絡的資料流(如音頻和視頻);
(3)根據與會者的數量來調整RTCP包的發送率;
(4)傳送會話控制資訊,如可在使用者介面顯示與會者的標識,這是可選功能。
4.2RTP/RTCP工作過程
工作時,RTP協議從上層接收流媒體資訊碼流(如H.263),裝配成RTP資料包發送給下層,下層協議提供RTP和RTCP的分流。如在UDP中,RTP使用一個偶數號連接埠,則相應的RTCP使用其後的奇數號連接埠。RTP資料包沒有長度限制,它的最大包長只受下層協議的限制。
4.3伺服器的演算法
伺服器軟體模型主要有兩種,即並發伺服器和迴圈伺服器。迴圈伺服器(Iterative Server)是指在一個時刻只處理一個請求的伺服器。並發伺服器(Concurrent Server)是指在一個時刻可以處理多個請求的伺服器。事實上,多數伺服器沒有用於同時處理多個請求的冗餘裝置,而是提供一種表面上的並發性,方法是依靠執行多個線程,每個線程處理一個請求,從客戶的角度看,伺服器就像在並發地與多個客戶通訊。
由於流媒體服務時間的不定性和資料互動即時性的請求,流媒體伺服器一般採用並發伺服器演算法。本文構建了一個基本的流媒體伺服器,能夠同時響應多個使用者的請求,把本地硬碟流媒體檔案或即時資料流(H.263格式)發送給使用者。在應用中,把客戶分為請求即時資料的即時客戶和請求檔案資料的檔案客戶兩類。主要演算法為:
(1)開啟裝置,分配資源。當裝置準備好時,建立一個RTP即時服務線程和一個RTCP即時服務線程。
(2)建立一個UDP通訊端並將其綁定到所提供服務的地址之上。
(3)反覆調用接收模組,接收來自客戶的RTCP報告,根據其類型做出響應。對新即時客戶的請求,把客戶地址添加到即時服務的客戶列表中,對新檔案客戶的請求,則建立一個新RTP檔案服務線程和一個新RTCP檔案服務線程;對已經在服務中的客戶則根據RTCP報告的內容調整服務。
RTP即時服務線程1:初始化客戶列表和RTP首部。
RTP即時服務線程2:從裝置讀取媒體資料,把資料發送給即時服務列表中的客戶。
RTP即時服務線程3:更新RTP首部和統計資料。
RTP即時服務線程4:計算延時,重複第二步。
RTCP即時服務線程1:初始化RTCP首部。
RTCP即時服務線程2:發送發送方報告給即時服務列表中的客戶。
RTCP即時服務線程3:計算延時,重複第二步。
RTP檔案服務線程1:初始化RTP首部。
RTP檔案服務線程2.:從檔案讀取媒體資料,把資料發送給客戶。
RTP檔案服務線程3:更新已發送資料的統計資訊,為產生發送方報告做準備。
RTP檔案服務線程4:計算延時,調整發送速度,正常情況下開始重複第二步。
RTCP檔案服務線程1:初始化RTCP首部,發送一個源描述(SDES)報文給客戶。
RTCP檔案服務線程2:根據已發送資料的統計資訊產生發送方報告,發送給客戶。
RTCP檔案服務線程3:計算延時,正常情況下開始重複第一步。
5流媒體伺服器實現中應注意的問題
5.1會話和流的兩級分用
一個RTP會話(Session)包括傳給某個指定目的地對(Destination Pair)的所有通訊量,發送方可能包括多個。而從同一個同步源發出的RTP分組序列稱為流(Stream),一個RTP會話可能包含多個RTP流。一個RTP分組在伺服器端發送出去的時候總是要指定屬於哪個會話和流,在接收時也需要進行兩級分用,即會話分用和流分用。只有當RTP使用同步源標識(SSRC)和分組類型(PTYPE)把同一個流中的分組組合起來,才能夠使用序號(Sequence Number)和時間戳記(Timestamp)對分組進行排序和正確回放。
5.2多線程的管理
並發伺服器模式要求用多線程來提供服務,所以多線程的管理十分重要。在本文構建的伺服器中,不同客戶的請求和反饋都由伺服器的主線程處理,由於即時資料的專屬性,不同即時客戶可以共用一個RTP即時服務線程和一個RTCP即時服務線程,這樣可以大大減小伺服器的負擔,而每個檔案客戶由於請求的檔案不同,相應地對速度和開始時間的要求都可能不同,所以需要有自己專屬的RTP檔案服務線程和RTCP檔案服務線程。
RTP服務線程負責把即時資料流發送給客戶,RTCP服務線程根據RTP線程的統計資料,產生髮送方報告給客戶。RTP線程和RTCP線程之間通過一段共用記憶體互動統計資料,對共用記憶體必須設定互斥體進行保護,防止出現錯誤讀寫。在這種方式下,伺服器可以根據每個使用者的不同請求和具體情況方便地提供不同的服務。
5.3時間戳記的處理
時間戳記欄位是RTP首部中說明資料包時間的同步資訊,是資料能以正確的時間順序恢複的關鍵。時間戳記的值給出了分組中資料的第一個位元組的採樣時間(Sampling Instant),要求發送方時間戳記的時鐘是連續、單調增長的,即使在沒有資料輸入或發送資料時也是如此。在靜默時,發送方不必發送資料,保持時間戳記的增長,在接收端,由於接收到的資料分組的序號沒有丟失,就知道沒有發生資料丟失,而且只要比較前後分組的時間戳記的差異,就可以確定輸出的時間間隔。
RTP規定一次會話的初始時間戳記必須隨機播放,但協議沒有規定時間戳記的單位,也沒有規定該值的精確解釋,而是由負載類型來確定時鐘的顆粒,這樣各種應用類型可以根據需要選擇合適的輸出計時精度。
在RTP傳輸音頻資料時,一般選定邏輯時間戳記速率與採樣速率相同,但是在傳輸視頻資料時,必須使時間戳記速率大於每幀的一個滴答。如果資料是在同一時刻採樣的,協議標準還允許多個分組具有相同的時間戳記值。
5.4媒體資料發送速度的控制
由於RTP協議沒有規定RTP分組的長度和發送資料的速度,因而需要根據具體情況調整伺服器端發送媒體資料的速度。對來自裝置的即時資料可以採取等時間間隔訪問裝置緩衝區,在有新資料輸入時發送資料的方式,時間戳記的設定相對容易。對已經錄製好的本地硬碟上的媒體檔案,以H.263格式的檔案為例,由於檔案本身不包含幀率資訊,所以需要知道錄製時的幀率或者設定一個初始值,在發送資料的時候找出發送資料中的幀數目,根據幀率和預置值來計算時延,以適當的速度發送資料並設定時間戳記資訊。
5.5多種流同步
RTCP的一個關鍵作用就是能讓接收方同步多個RTP流,例如:當音頻與視頻一起傳輸的時候,由於編碼的不同,RTP使用兩個流分別進行傳輸,這樣兩個流的時間戳記以不同的速率運行,接收方必須同步兩個流,以保證聲音與影像的一致。為能進行流同步,RTCP要求發送方給每個傳送一個唯一的標識資料來源的規範名(Canonical Name),儘管由一個資料來源發出的不同的流具有不同的同步源標識(SSRC),但具有相同的規範名,這樣接收方就知道哪些流是有關聯的。而發送方報告報文所包含的資訊可被接收方用於協調兩個流中的時間戳記值。發送方報告中含有一個以網路時間協議NTP(Network Time Protocol)格式表示的絕對時間值,接著RTCP報告中給出一個RTP時間戳記值,產生該值的時鐘就是產生RTP分組中的TimeStamp欄位的那個時鐘。由於發送方發出的所有流和發送方報告都使用同一個絕對時鐘,接收方就可以比較來自同一資料來源的兩個流的絕對時間,從而確定如何將一個流中的時間戳記值對應為另一個流中的時間戳記值。
6結論
流媒體技術的應用日益廣泛,對流媒體技術的研究具有很大的實際意義,本文通過對RTP/RTCP協議的研究,分析流媒體伺服器的一般功能和結構,給出構建一個基本的流媒體伺服器的實現方案,實驗證明可以同時滿足多個即時和檔案客戶的要求,並已經應用於一個遠程監控系統中。