天天看點

jrtplib發送資料包時預設RTP參數設定講解

在看jrtplib手冊的時候發現發送資料包有多個函數

eg:sendpacket(sendbuf,bytes);sendpacket(sendbuf,bytes,96,false,3600);

大多數時候都會設定預設參數比如:

sess.SetDefaultPayloadType(96);//RTP頭中的PT

sess.SetDefaultMark(false);//RTP頭中的M;重要事件标志,1bit

sess.SetDefaultTimestampIncrement(3600);//時間戳增量

當設定了預設參數的時候調用sendpacket(sendbuf,bytes);直接發送資料,此時每調用一次sendpacket的時候都會加載預設參數中的這三個值,也就是說每調用一次時間戳都會增加預設增量

調用sendpacket(sendbuf,bytes,96,false,3600);函數發送資料包時其實也是需要設定前面的參數的,因為第一次調用此函數的時候會用到預設參數,很多人認為此函數後面的三個形參不就是此次發送時所需要的三個參數嗎,其實不是這樣的

此函數相當于一下程式語句

sendpacket(sendbuf,bytes);

sess.SetDefaultPayloadType(96);//RTP頭中的PT

sess.SetDefaultMark(false);//RTP頭中的M;重要事件标志,1bit

sess.SetDefaultTimestampIncrement(3600);//時間戳增量

也就是說此函數後三個形參表示發送下一個資料包時預設參數設定

很多人會問不就應該是每發送一個資料包都要增加時間戳的值嗎,那第二個函數參數多還有陷阱豈不是麻煩嗎

其實不然

在發送H.264視訊資料的時候,很多NALU單元大小其實超出了網絡最大包1500,有的會遠遠的超出這個值

是以就需要采用分片封包模式來打包每個NALU單元,這個時候就不是每個發送的包都要增加時間戳了,每個nalu單元增加時間戳,這事采用第二個函數就友善的多了,隻需要在分片封包模式發送最後一個資料包的時候将時間戳增量設定為3600,第一片和中間片都設定為0就好了