一 前言
RTP/RTCP協(xié)議是流媒體通信的基石。RTP協(xié)議定義流媒體數(shù)據(jù)在互聯(lián)網(wǎng)上傳輸?shù)臄?shù)據(jù)包格式,而RTCP協(xié)議則負(fù)責(zé)可靠傳輸、流量控制和擁塞控制等服務(wù)質(zhì)量保證。在WebRTC項目中,RTP/RTCP模塊作為傳輸模塊的一部分,負(fù)責(zé)對發(fā)送端采集到的媒體數(shù)據(jù)進(jìn)行進(jìn)行封包,然后交給上層網(wǎng)絡(luò)模塊發(fā)送;在接收端RTP/RTCP模塊收到上層模塊的數(shù)據(jù)包后,進(jìn)行解包操作,最后把負(fù)載發(fā)送到解碼模塊。因此,RTP/RTCP 模塊在WebRTC通信中發(fā)揮非常重要的作用。
本文在深入研究WebRTC源代碼的基礎(chǔ)上,以Video數(shù)據(jù)的發(fā)送和接收為例,力求用簡潔語言描述RTP/RTCP模塊的實現(xiàn)細(xì)節(jié),為進(jìn)一步深入掌握WebRTC打下良好基礎(chǔ)。
二 RTP/RTCP協(xié)議概述
RTP協(xié)議是Internet上針對流媒體傳輸?shù)幕A(chǔ)協(xié)議,該協(xié)議詳細(xì)說明在互聯(lián)網(wǎng)上傳輸音視頻的標(biāo)準(zhǔn)數(shù)據(jù)包格式。RTP協(xié)議本身只保證實時數(shù)據(jù)的傳輸,RTCP協(xié)議則負(fù)責(zé)流媒體的傳輸質(zhì)量保證,提供流量控制和擁塞控制等服務(wù)。在RTP會話期間,各參與者周期性彼此發(fā)送RTCP報文。報文中包含各參與者數(shù)據(jù)發(fā)送和接收等統(tǒng)計信息,參與者可以據(jù)此動態(tài)控制流媒體傳輸質(zhì)量。
RFC3550 [1]定義RTP/RTCP協(xié)議的基本內(nèi)容,包括報文格式、傳輸規(guī)則等。除此之外,IETF還定義一系列擴展協(xié)議,包括RTP協(xié)議基于檔次的擴展,和RTCP協(xié)議基于報文類型的擴展,等等。詳細(xì)內(nèi)容可參考文獻(xiàn)[2]。
三 WebRTC線程關(guān)系和數(shù)據(jù)流