中文字幕蜜桃,久久六国产视频,在线欧美一区,97人人爽人人澡人人精品

產(chǎn)品列表PRODUCTS LIST

首頁 > 技術(shù)與支持 > rtp音視頻同步問題解決方法
rtp音視頻同步問題解決方法
點擊次數(shù):1491 更新時間:2018-05-18

rtp音視頻同步問題解決方法

由于音視頻流是以兩條獨立的數(shù)據(jù)流在網(wǎng)絡(luò)上傳輸?shù)?,如果網(wǎng)絡(luò)質(zhì)量相當(dāng)差,那么在接收端收到的音視頻數(shù)據(jù)流就有可能不是同步的了,為了克服這種不同步的現(xiàn)象,需要添加同步機制。的同步機制是使用開源庫jrtplib3.7.1來實現(xiàn)的,嚴(yán)格遵守rtp協(xié)議標(biāo)準(zhǔn)。

解決的方案如下:

當(dāng)有數(shù)據(jù)需要發(fā)送時,往數(shù)據(jù)中加入時間戳,在接收端,讀取時間戳,進行比較,如果相同或相差很近,就提交播放,如果其中一個時間戳更大,就等待。如果網(wǎng)絡(luò)質(zhì)量很差,那么存在兩種不同步的情況:

1.   對于單條數(shù)據(jù)流來說,如果網(wǎng)絡(luò)質(zhì)量很差,可能出現(xiàn)數(shù)據(jù)流的接收不流暢,如果沒有做流暢處理,那么就可能出現(xiàn)抖動現(xiàn)象,這需要使用rtp中的時間戳解決。

2.   對于多條數(shù)據(jù)流來說,如果網(wǎng)絡(luò)質(zhì)量很差,可能出現(xiàn)本應(yīng)該同時播放的數(shù)據(jù)幀沒有在同一時間到達(dá),需要做同步處理。

解決第1個問題的方法是向每個發(fā)送的數(shù)據(jù)包加上時間戳,在rtp庫中,時間戳表示在打包數(shù)據(jù)段中*個采樣所對應(yīng)的時間,時間戳的啟始值是隨機的,后續(xù)的時間戳是在前一個時間戳上的增量,在SendPacket中的時間戳參數(shù)表示的是時間戳增量,所以數(shù)據(jù)流的同步需要計算出時間戳增量。

對于音頻數(shù)據(jù),由于音頻數(shù)據(jù)的采樣率是8000Hz,所以每采樣一次需要時間是1/8000s,由于是每20ms封包一次,所以時間戳的增量是(20*10**-3)*8000=160。

對于視頻數(shù)據(jù),由于視頻數(shù)據(jù)的采樣率是90000Hz,所以每采樣一次需要時間是1/90000s,如果幀率是25幀/s,所以時間戳增量是90000/25=3600。

在發(fā)送端,每發(fā)送一個數(shù)據(jù)包,都打上該數(shù)據(jù)包對應(yīng)的時間戳值,只需要向SendPacket的zui后個參數(shù)傳遞時間戳增量,rtp庫會自動算出時間戳,并加到發(fā)送的rtp數(shù)據(jù)包首部里邊。

在接收端,當(dāng)收到一個數(shù)據(jù)包時,獲取該rtp數(shù)據(jù)包的時間戳值,計算出與前一個數(shù)據(jù)包的時間戳值的差值,乘以該媒體流的時間戳單位,就得出了當(dāng)前數(shù)據(jù)包與前一個數(shù)據(jù)包之間的間隔的打包時間T。所以只要保證在與前一個數(shù)據(jù)包被提交過后T時間后再提交當(dāng)前接收到的數(shù)據(jù)包,那么在rtp層就解決了上邊提出的*個問題。

解決第2個問題的方法是使用rtcp發(fā)送者報告數(shù)據(jù)包中的時間信息,發(fā)送者報告被發(fā)送的間隔時間是不固定的,它的大小與參與到會話中的同步源數(shù)量成正比。每個發(fā)送者報告中都有個ntp時間和rtp時間,該ntp時間表示在發(fā)送時間戳為該rtp時間的rtp包時的系統(tǒng)時間,就是在發(fā)送這個rtp包時的系統(tǒng)時間,所以這兩個時間值有對應(yīng)關(guān)系,由于對于一個同步源,時間戳單位是固定的,所以可以由后續(xù)的某個數(shù)據(jù)包的rtp時間戳計算出這個數(shù)據(jù)包所對應(yīng)的時間,這個時間就是在發(fā)送這個數(shù)據(jù)包時,發(fā)送端的系統(tǒng)時間。

使用這種方法就可以計算出每個收到的rtp數(shù)據(jù)包在發(fā)送端的系統(tǒng)時間,這個系統(tǒng)時間在發(fā)送端是單調(diào)遞增的,所以可以通過這個值來同步多條數(shù)據(jù)流。