RTPSession

   第一步我們要先把 rtpsession.h 給 include 進來:  
   
  #include "rtpsession.h"  
   
  接下來再產生 RTPSession 類別的物件:  
   
  RTPSession sess;  
   
  最後再建立 session 就完成最簡單的初始動作了:  
   
  sess.Create(5000);  
   
  Create() 成員函數接收一個 portbase 的參數, 指定 session 的 port, 接著開始初始化 timestamp 與 packet sequence number。RTPSession::Create() 程式碼如下:  
   
  int RTPSession::Create(int localportbase,unsigned long localip)  
  {  
  int status;  
   
  if (initialized)  
  return ERR_RTP_SESSIONALREADYINITIALIZED;  
  if ((status = rtpconn.Create(localportbase,localip)) < 0)  
  return status;  
  if ((status = contribsources.CreateLocalCNAME()) < 0)  
  {  
  rtpconn.Destroy();  
  return status;  
  }  
  CreateNewSSRC();  
  localinf.CreateSessionParameters();  
  rtcpmodule.Initialize();  
  initialized = true;  
  return 0;  
  }  
   
  Create() 接著會再建立一個 SSRC:  
   
  CreateNewSSRC();  
   
  SSRC 為 local synchronization source identifier。  
   
  指定目的端  
   
  接下來再指定目的端的 IP 位址:  
   
  unsigned long addr = ntohl(inet_addr("127.0.0.1"));  
  sess.AddDestination(addr,5000);  
   
  這裡表示我們要將封包傳送到 127.0.0.1 (本地端) 的 port 5000, 只要照著套用即可。  
   
  傳送 RTP 封包  
   
  sess.SendPacket("1234567890",10,0,false,10);  
   
  1234567890 是要傳送的字串, 第二個參數 (10) 表示傳送字串的長度, 第三個參數為 payload type, 第四個參數為 mark flag, 最後第五個參數則是 timestamp 的遞增單位。  
   
  RTP 的封包格式  
   
   
  RTP 與其它 Internet 通訊協定一樣, 在封包裡也會有封包檔頭, 接著才是封包的資料。  
   
  在 RTPsession::SendPacket() 的第三個參數與第四個參數分別是 payload type 與 mark flag, 在 RTP 封包檔頭裡, 分別是 Payload 欄位與 M 欄位。  
   
  Payload 欄位的長度為 7 bits, M 欄位的長度為 1 bits。  
   
   
  RTP 的 Payload type  
   
  RTP 檔頭的 Payload type 指定封包資料的編碼方式, 我們列出五個常用的 Audio 標準, 與三個常用的 Video 標準, 其中 JPEG/H.261/H.263 我們本文第一篇裡都有做過簡單的介紹。常用的 Payload type 如下表:  
   
  Payload type 編碼標準 支援Audio或Video Clock Rate (Hz)  
  2 G.721 A 8000  
  4 G.723 A 8000  
  7 LPC A 8000  
  9 G.722 A 8000  
  15 G.728 A 8000  
  26 JPEG V 90000  
  31 H.261 V 90000  
  34 H.263 V 90000  

你可能感兴趣的:(session,video,include,internet,audio)