第一步我們要先把 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
#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