JRTPLIB3.5.0中文簡要翻譯(一)

版權聲明:

THE SOFTWARE IS PROVIDED ”AS IS”, WITHOUT WARRANTY OF ANYKIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

本文介紹瞭如何使用JRtpLib3.5.0庫中的函數和類對象。

1、RTP

1.1、初始化

生成RTPSession對象:RTPSession Session

初始化RTPSession:Session.Create(RTPSessionParams, RTPUDPv4TransmissionParams ),RTPSessionParams的關鍵作用就是設置時間戳,形式如下:

   RTPSessionParams SessionParams;

  SessionParams.SetOwnTimestampUnit(1.0/8000.0)(1/8000表示:當RTP會話傳輸8000HZ數據的時間戳)

 RTPUDPv4TransmissionParams表示傳輸協議採用UDP、IP採用IPV4時端口參數設置。形式如下:

RTPUDPv4TransmissionParams t ransparams ;
t ransparams . Se tPortbas e ( 8 0 0 0 ) ;(8000表示端口號)。

注意:Create一個重載函數,有多種形式。而第二個參數的形式根據傳輸協議和IP地址版本來定。

Session對象創建示例:

RTPSession session;

int Status = session.Create(SessionParams,ransparams );

if(Status < 0)

{

    std::err<<RTPGetErrorString(Status)<<std::endl;

    exit(-1);

}

Create調用成功後,下面就要增加目的地址,使用RTPSession成員函數AddDestination,如果使用IPV4地址則其參數類型爲RTPIPV4Address。程序示例:

u _i n t 8 _t  l o c a l i p [ ]={1 2 7 , 0 , 0 , 1 };
RTPIPv4Address addr ( l o c a l i p , 9 0 0 0 ) ;
s t a tu s = s e s s i o n . AddDestination ( addr ) ;
i f ( s t a tu s < 0)
{

    s td : : c e r r << RTPGetErrorString ( s t a t u s ) << s td : : endl ;
    e x i t (−1);
}

 

2、數據發送

初始化後,接下來可以調用 RTPSession 類的數據發送函數 SendPacket(),向所有目的地址發送流媒體數據。這是一個重載函數,具有多種調用形式(參看 RTPSession 類對該函數的定義),例如在下面的調用形式:

int SendPacket(void *data,int len,unsigned char pt,bool mark,unsigned long timestampinc);

其中第一個參數是待發送的數據緩衝區地址,第二個參數是待發送數據的長度,後面依次是 RTP 負載類型、標識和時基增量。

對於同一個 RTP 會話雙方,負載類型、標識和時戳增量相同,可以對它們提前設置,調用 RTPSession 類的 SetDefaultPayloadType()、SetDefaultMark()和SetDefaultTimeStampIncrement()函數就可實現。在設會話雙方,負載類型、標識和時戳增量,就可以使用SendPacket的簡化類型:SendParket(void *data, int len)。

3、數據接收

接收實時流媒體數據,通過調用 RTPSession 類的 PollData()函數來接收收到的 RTP 或RTCP 數據報。同 一個RTP 會話中允許有多個參與者( 源),通 過調用GotoFirstSourceWithData()和 GotoNextSourceWithData()函數來實現源的遍歷,通過 GetNextPacket()函數提取 RTP 數據包。數據包接受以RTPSession的成員函數BeginDataAccess開始、EndDataAccess結束示例:

sess.BeginDataAccess();

if (sess.GotoFirstSourceWithData())

{
    do{
             RTPPacket *pack;
             while ((pack = sess.GetNextPacket()) != NULL)
             {

                  printf("Got packet !/n"); delete pack;

                  delete pack;

            }
             } while (sess.GotoNextSourceWithData());

}

sess.EndDataAccess();

 4、數據傳輸結束,釋放資源

RTPTime(10.0);//釋放資源最多等待十秒

sess.BYEDestroy(delay, Time' s up,9);//釋放佔有的

  

發佈了5 篇原創文章 · 獲贊 0 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章