有性,不同實時客戶可以共用一個RTP實時服務線程和一個RTCP實時服務線程,這樣可以大大減小伺服器的負擔,而每個檔案客戶由于請求的檔案不同,相應地對速度和開始時間的要求都可能不同,是以需要有自己獨有的RTP檔案服務線程和RTCP檔案服務線程。 RTP服務線程負責把實時資料流發送給客戶,RTCP服務線程根據RTP線程的統計資料,産生發送方報告給客戶。RTP線程和RTCP線程之間通過一段共享記憶體互動統計資料,對共享記憶體必須設定互斥體進行保護,防止出現錯誤讀寫。在這種方式下,伺服器可以根據每個使用者的不同請求和具體情況友善地提供不同的服務。 RTP 時間戳的處理 時間戳字段是RTP首部中說明資料包時間的同步資訊,是資料能以正确的時間順序恢複的關鍵。時間戳的值給出了分組中資料的第一個位元組的采樣時間(Sampling Instant),要求發送方時間戳的時鐘是連續、單調增長的,即使在沒有資料輸入或發送資料時也是如此。在靜默時,發送方不必發送資料,保持時間戳的增長,在接收端,由于接收到的資料分組的序号沒有丢失,就知道沒有發生資料丢失,而且隻要比較前後分組的時間戳的差異,就可以确定輸出的時間間隔。 RTP規定一次會話的初始時間戳必須随機選擇,但協定沒有規定時間戳的機關,也沒有規定該值的精确解釋,而是由負載類型來确定時鐘的顆粒,這樣各種應用類型可以根據需要選擇合适的輸出計時精度。 在RTP傳輸音頻資料時,一般標明邏輯時間戳速率與采樣速率相同,但是在傳輸視訊資料時,必須使時間戳速率大于每幀的一個滴答。如果資料是在同一時刻采樣的,協定标準還允許多個分組具有相同的時間戳值。 RTP協定沒有規定RTP分組的長度和發送資料的速度,因而需要根據具體情況調整伺服器端發送媒體資料的速度。對來自裝置的實時資料可以采取等時間間隔通路裝置緩沖區,在有新資料輸入時發送資料的方式,時間戳的設定相對容易。對已經錄制好的本地硬碟上的媒體檔案,以H.263格式的檔案為例,由于檔案本身不包含幀率資訊,是以需要知道錄制時的幀率或者設定一個初始值,在發送資料的時候找出發送資料中的幀數目,根據幀率和預置值來計算時延,以适當的速度發送資料并設定時間戳資訊。 RTCP的一個關鍵作用就是能讓接收方同步多個RTP流,例如:當音頻與視訊一起傳輸的時候,由于編碼的不同,RTP使用兩個流分别進行傳輸,這樣兩個流的時間戳以不同的速率運作,接收方必須同步兩個流,以保證聲音與影像的一緻。為能進行流同步,RTCP要求發送方給每個傳送一個唯一的辨別資料源的規範名(Canonical Name),盡管由一個資料源發出的不同的流具有不同的同步源辨別(SSRC),但具有相同的規範名,這樣接收方就知道哪些流是有關聯的。而發送方報告封包所包含的資訊可被接收方用于協調兩個流中的時間戳值。發送方報告中含有一個以網絡時間協定NTP(Network Time Protocol)格式表示的絕對時間值,接着RTCP報告中給出一個RTP時間戳值,産生該值的時鐘就是産生RTP分組中的TimeStamp字段的那個時鐘。由于發送方發出的所有流和發送方報告都使用同一個絕對時鐘,接收方就可以比較來自同一資料源的兩個流的絕對時間,進而确定如何将一個流中的時間戳值映射為另一個流中的時間戳值。