我用的是jrtplib库。这是我的代码,请高手指点,这是实验程序。请高手顺便说一下怎么发送RTP数据包(多媒体数据)
发送端:
#ifdef WIN32
WSADATA dat;
WSAStartup(MAKEWORD(2,2),&dat);
#endif // WIN32
RTPSession sess;
RTPUDPv4TransmissionParams transparams;
RTPSessionParams sessparams;
int val;
char buffer[10] = "123456789";
unsigned long  destip = ntohl(inet_addr("10.3.129.175"));
int destport = htons(3228);
int portbase = 1532;
sessparams.SetOwnTimestampUnit((double)(1.0/10.0)); 
sessparams.SetUsePollThread(1);
sessparams.SetAcceptOwnPackets(true);
transparams.SetPortbase(portbase);
val = sess.Create(sessparams, &transparams);
string err=RTPGetErrorString(val);
checkerror(val); 
RTPIPv4Address addr(destip, destport);
val = sess.AddDestination(addr);
err=RTPGetErrorString(val);
checkerror(val);
while(1) {
val = sess.SendPacket(buffer, sizeof(buffer), 0, false, 10);
cout<<"buffer"<<endl;
err=RTPGetErrorString(val);
checkerror(val);                                                                   
// cout << "Send packet:"<< buffer << endl;
#ifndef RTP_SUPPORT_THREAD
val = sess.Poll();
checkerror(val);
#endif // RTP_SUPPORT_THREAD
RTPTime::Wait(RTPTime(1,0));
}
sess.BYEDestroy(RTPTime(10,0),0,0);
接收端:
#ifdef WIN32
WSADATA wsaData;
WORD wVersionRequested = MAKEWORD( 2, 2 );
WSAStartup(wVersionRequested, &wsaData);
#endif // WIN32
RTPSession sess;
RTPUDPv4TransmissionParams transparams;
RTPSessionParams sessparams;
int val;
int localport ;


unsigned long remoteIP;//
int portBase;//
unsigned long timeStamp;//
unsigned char *rawData;//
unsigned char temp[30];//
remoteIP=ntohl(inet_addr("10.3.129.175"));//
localport=3228;//
portBase=atoi("2336");//
int length,i;//
bool allPorts=1;//
// sess.AddToAcceptList(addr);//
sessparams.SetOwnTimestampUnit(1.0/10.0);        
sessparams.SetAcceptOwnPackets(true);
transparams.SetPortbase(localport);
//sessparams.SetUsePollThread(0);
val = sess.Create(sessparams, &transparams);
RTPIPv4Address addr(remoteIP,allPorts);
using namespace std;
std::string err;
err=RTPGetErrorString(val); 
checkerror(val);
val=sess.SetReceiveMode(RTPTransmitter::AcceptSome);
err=RTPGetErrorString(val); 
checkerror(val);
val=sess.AddToAcceptList(addr);
err=RTPGetErrorString(val); 
checkerror(val);

while (1) {
sess.BeginDataAccess();

if (sess.GotoFirstSourceWithData()) {
do {
cout<<"get packet"<<endl;
RTPPacket *pack;
while ((pack = sess.GetNextPacket()) != NULL) 
{
pack ->GetExtendedSequenceNumber();
pack->GetSSRC();
pack->GetPayloadLength();
pack->GetPayloadData();
pack->GetPacketData();
sess.DeletePacket(pack);
}
} while (sess.GotoNextSourceWithData());
}
sess.EndDataAccess();

#ifndef RTP_SUPPORT_THREAD
val = sess.Poll();
checkerror(val);
#endif // RTP_SUPPORT_THREAD
// RTPTime::Wait(RTPTime(1,0));
}
sess.BYEDestroy(RTPTime(10,0),0,0);