摘要:本文基于RTP/RTCP協議設計了一種高效網絡直播模型,以Linux操作系統為軟件平臺,移植了MPEG-4編碼模型和jRtpLib開源庫。該模型通過分析RTP/RTCP協議得出反饋機制的方向,來控制發送端和接收端Buffer,建立起一個動態的反饋機制,彌補了UDP傳輸協議的不足,從而大幅提高了直播系統的效能,使其更流暢,具有更高的可靠性。
關鍵詞:RTP;RTCP;JRTPLIB;UDP;MPEG-4
一、引言
隨著互聯網技術的發展,傳輸帶寬逐步提升,網絡直播應用也跟隨流媒體技術不斷朝前發展。流媒體又叫流式媒體,是一種新的媒體傳送方式,采用流式傳輸方式在網絡上進行直播,將音視頻文件經過特殊的壓縮方式組合成一個個壓縮包,由服務器向用戶終端連續、實時地進行傳送;而在終端,前臺則邊下載邊為用戶展示實時視音頻節目。
二、系統設計及關鍵技術
(一)總體分析
本方案選取操作系統為Linux系統,由于Linux系統強大的MMU以及多任務支持,是系統穩定可靠運行的基本保證。主要流程:從攝像頭或其他視頻源采集視頻圖像,然后對其進行編碼,通過網絡實時發送到主機上,主機端再解碼重現,如圖1。

(二)MPEG-4壓縮標準
MPEG即Moving Picture Expert Group,它是專門從事制定多媒體視音頻壓縮編碼標準的國際組織。MPEG-4的應用能大幅度的降低錄像存儲容量,獲得較高的錄像清晰度,特別適用于長時間實時錄像的需求,同時具備在低帶寬上優良的網絡傳輸能力。
(三)RTP/RTCP網絡傳輸協議
實時傳輸協議RTP(Real-time Transport Protocol)由IETF的AVT工作組于1996年公布為RFC正式文檔,編號為RFC1889,是專門為交互式語音、視頻等實時數據而設計的傳輸協議,用于視頻傳輸等實時多媒體應用。RTP被定義為在一對一或一對多的傳輸情況下工作,其目的是提供時間信息和實現流同步。RTP的典型應用建立在UDP上,本方案通過分析RTCP協議提供的數據得出反饋機制的方向,來控制發送端和接收端Buffer,建立起一個動態的反饋機制,彌補了UDP傳輸協議的不足。
三、軟件設計及實現
(一)構建基于JRTPLIB庫的流媒體傳輸
JRTPLIB是一個面向對象的RTP庫,它完全遵循RFC 1889設計,該庫是用C++語言實現的開源項目,目前已經可以運行在Windows、Linux、FreeBSD、Solaris、Unix和VxWorks等多種操作系統上。
1.初始化。在使用JRTPLIB進行實時流媒體數據傳輸之前,首先應該生成RTPSession類的一個實例來表示此次RTP會話,然后調用Create(?搖?搖)方法來對其進行初始化操作。
RTPSession sess;//建立一個新的實例
sess.Create(5000);//參數為端口號
2.數據發送。當RTP會話成功建立起來之后,接下去就可以開始進行流媒體數據的實時傳輸了。首先需要設置好數據發送的目標地址,RTP協議允許同一會話存在多個目標地址,這可以通過調用RTPSession類的AddDestination( )、DeleteDestination( )和ClearDestinations( )方法來完成。
unsigned long addr=ntohl(inet_addr(\"127.0.0.1\"));//設定IP地址
sess.AddDestination(addr,6000);//設定目的端口號
sess.SendPacket(buffer,5,0,1,10);//發送數據
3.數據接收。在接收端,首先需要調用RTPSession類的PollData( )方法來接收發送過來的RTP或者RTCP數據報。在檢測出有效的數據源之后,接下去就可以調用RTPSession類的GetNextPacket( )方法從中抽取RTP數據報,下面的代碼示范了該如何對接收到的RTP數據報進行處理:
if(sess.GotoFirstSourceWithData( ))
do{RTPPacket*pack;pack=sess.GetNextPacket( );//處理接收到的數據delete pack;while(sess.GotoNextSourceWithData( ))
(二)RTP會話控制及基于反饋的智能流機制的實現
無論對于Stream Server還是Client而言,對于一個發起的流媒體傳輸會話,都會在系統資源中占用一定的Buffer資源。在對RTCP協議進行分析的時候,已經得到了一個基于RTCP報告、可獲取對網絡狀況變化趨勢的反饋機制,使得能夠根據網絡狀況,改變相應Session的Buffer大小,使其適應當前網絡的狀況,實現智能流。其基本機制為:假設Buffer的大小和相鄰包的時延只是一個簡單的反向關系,即時延越大,按增加比例縮小Buffer,反之則按減少比例減少Buffer。
四、小結
基于Linux平臺及JRTPLIB庫,實現RTP/RTCP傳輸模型的整體設計。在對RTP/RTCP工作模型的詳細分析中,建立了一個動態的網絡反饋機制,并利用其提供的動態的反饋信息實現了對發送端和接收端Buffer的控制,保證流媒體傳輸的QoS,以提高流媒體傳輸的效率。
參考文獻:
[1]莊捷.流媒體原理與應用[M].北京:中國廣播電視出版社,2007.
[2]鐘玉琢,向哲,沈洪.流媒體和視頻服務器[M].北京:清華大學出版社,2003.
[3]彭熙.基于P2P結構的流媒體系統研究[D].上海:華東師范大學信息學院,2007.
[4]余江,劉威,王泰,等.流媒體代理緩存技術研究[J].計算機科學,2006.
[5]劉紅英.基于流媒體技術的視頻點播系統的研究[J].電腦知識與技術,2008.