交流一下,如何实现jrtp传送video数据?

上海老李 上海老李 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我在发了后,收能收到数据,但是解码后发现不对,而且包也不一致,请教一下用过的人JRTP如何发送大数据?
发送端:
bool CSendRtp::send( byte* data,long len )
{
byte buff[PERPACKET];
long hid=0;
RTPTime starttime = RTPTime::CurrentTime();
//如果包比较大,则进行分包
while(len>0)
{

memset(buff,0,sizeof(buff));
if (len>PERPACKET)
{
int i=0;
while(i<PERPACKET)
{
buff[i++] =(byte) data++;
}
len=len-PERPACKET;
}
else
{
int i=0;
while(i<len)
{
buff[i++] =(byte)data++;
}
len=0;
}

session.SendPacket((void*)buff,sizeof(buff),96,false,starttime.GetMicroSeconds());

}
session.SendPacket(data,len);

return true;
}
//发送端初始化
long destip;
destip = inet_addr(ip);
if (destip == INADDR_NONE)
{
//std::cerr << "Bad IP address specified" << std::endl;
return false;
}

destip = ntohl(destip);
//sessionparams.SetOwnTimestampUnit(1.0/10.0);
sessionparams.SetOwnTimestampUnit(1.0/8000.0);

sessionparams.SetAcceptOwnPackets(true);
transparams.SetPortbase(0);
int status = session.Create(sessionparams,&transparams);
//checkerror(status);

RTPIPv4Address addr(destip,port);

status = session.AddDestination(addr);
session.SetDefaultPayloadType(96);
session.SetDefaultMark(false);
session.SetDefaultTimestampIncrement(160);
//接收端代码:初始化
localPort =port;
sessionparams.SetOwnTimestampUnit(1.0/8000.0);
sessionparams.SetAcceptOwnPackets(true);
sessionparams.SetUsePollThread(true);

transparams.SetPortbase(localPort);

int status = session.Create(sessionparams,&transparams);
if (status <0)
{
return false;
}
session.SetDefaultPayloadType(96);
session.SetDefaultMark(false);
session.SetDefaultTimestampIncrement(160);
//接收线程
DWORD WINAPI threadproc(void* params)
{

int status=0;
FCALLBACK fun=(FCALLBACK)params;
RTPTime delay(0.020);
RTPTime starttime = RTPTime::CurrentTime();
unsigned char *recvdata;
//用于统计每次接收到数据的大小
long recvsize = 0;
long packid=0;
byte buff[DATALENGTH];
long len=0;
while (true)
{
if (runs)
{

session.BeginDataAccess();
if( session.GotoFirstSourceWithData() )
{
do
{
RTPPacket *rtppack;
memset(buff,0,sizeof(buff));
while( ( rtppack = session.GetNextPacket() ) != NULL )
{
recvsize = rtppack->GetPayloadLength();

recvdata = rtppack->GetPayloadData();

for (int i=0;i<recvsize;i++)
{

buff[len++]=recvdata[i];
}
session.DeletePacket( rtppack );
}
fun(buff,len);
//std::cout << "size:"<<len <<"data:" << buff << std::endl;
len=0;
}while( session.GotoNextSourceWithData() );
}

session.EndDataAccess();
}
else
{
break;
}
}

return NULL;
}
...全文
评论 11
收藏 已收藏
分享
返回顶部