以下为数据发送端代码,它负责向用户指定的IP地址和端口,不断地发送RTP数据包:
#include <stdio.h>
#include <string.h>
#include "rtpsession.h"
// 错误处理函数
void checkerror(int err)
{
if (err < 0)
{
char *errstr = RTPGetErrorString(err);
printf("Error:%s\\n", errstr);
exit(-1);
}
}
int main(int argc, char **argv)
{
RTPSession sess;
unsigned long destip;
int destport;
int portbase = 6000;
int status, index;
char buffer[128];
// 获得接收端的IP地址和端口号
destip = inet_addr(argv[1]);
destip = ntohl(destip);
destport = atoi(argv[2]);
// 创建RTP会话
status = sess.Create(portbase);
checkerror(status);
// 指定RTP数据接收端
status = sess.AddDestination(destip, destport);
checkerror(status);
// 设置RTP会话默认参数
sess.SetDefaultPayloadType(0);
sess.SetDefaultMark(false);
sess.SetDefaultTimeStampIncrement(10);
// 发送流媒体数据
index = 1;
do
{
sprintf(buffer, "%d: RTP packet", index++);
sess.SendPacket(buffer, strlen(buffer));
printf("Send packet !\\n");
} while (1);
return 0;
}
以下为数据接收端代码,它负责从指定的端口不断地读取RTP数据包:
#include <stdio.h>
#include "rtpsession.h"
#include "rtppacket.h"
// 错误处理函数
void checkerror(int err)
{
if (err < 0)
{
char *errstr = RTPGetErrorString(err);
printf("Error:%s\\n", errstr);
exit(-1);
}
}
int main(int argc, char **argv)
{
RTPSession sess;
int localport;
int status;
// 获得用户指定的端口号
localport = atoi(argv[1]);
// 创建RTP会话
status = sess.Create(localport);
checkerror(status);
do
{
// 接受RTP数据
status = sess.PollData();
// 检索RTP数据源
if (sess.GotoFirstSourceWithData())
{
do
{
RTPPacket *packet;
// 获取RTP数据报
while ((packet = sess.GetNextPacket()) != NULL)
{
printf("Got packet !//n");
// 删除RTP数据报
delete packet;
}
} while (sess.GotoNextSourceWithData());
}
} while (1);
return 0;
}