GB28181 收包方式jrtplib使用方式的差异
Posted qianbo_insist
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GB28181 收包方式jrtplib使用方式的差异相关的知识,希望对你有一定的参考价值。
非thread模式
1 使用非thread和 thread模式对比
在使用正常的情况下,使用jthread 和 比使用 非jthread 模式要节省较多的cpu
以下代码使用自己产生一个线程模式
void RtpServer::run()
Running = true;
RTPSession sess;
uint16_t portbase;
int status;
RTPUDPv4TransmissionParams transparams;
RTPSessionParams sessparams;
sessparams.SetOwnTimestampUnit(1.0 / 9000.0);
sessparams.SetUsePollThread(true);
int rtpPort = MEDIASERVER_RTP_PORT;
portbase = rtpPort;
transparams.SetRTPReceiveBuffer(1024 * 1024 *100); //100M
sessparams.SetAcceptOwnPackets(true);
transparams.SetPortbase(portbase);
status = sess.Create(sessparams, &transparams);
if (status < 0)
std::cout << "ERROR: " << RTPGetErrorString(status) << std::endl;
return;
while(!mIsStop)
sess.BeginDataAccess();
// check incoming packets
if (sess.GotoFirstSourceWithData())
do
RTPPacket *pack;
while ((pack = sess.GetNextPacket()) != NULL)
RTPSourceData *mRTPSourceData = sess.GetCurrentSourceInfo();
uint32_t ssrc = mRTPSourceData->GetSSRC();
//ssrc是cameraId gb28181 server invite 的ssrc
int cameraId = ssrc;
VideoChannel* channel =gGB28181Server->VideoChannel(cameraId);
if (channel != nullptr)
//插入数据
channel->push(.........);
sess.DeletePacket(pack);
while (sess.GotoNextSourceWithData());
sess.EndDataAccess();
sess.BYEDestroy(RTPTime(10, 0), 0, 0);
Running = false;
使用thread模式
使用RTPserv从RTPSession上继承,如下:
class RtpReciever:public RTPSession
重写OnPollThreadStep函数
void RtpServer::OnPollThreadStep()
BeginDataAccess();
if (GotoFirstSourceWithData())
do
RTPPacket *pack;
while ((pack = GetNextPacket()) != NULL)
RTPSourceData *mRTPSourceData = GetCurrentSourceInfo();
uint32_t ssrc = mRTPSourceData->GetSSRC();
int cameraId = ssrc-100000000; //这里的ssrc就是cameraId 在invite的时候传给相机的
VideoChannel* channel = AppConfig::gGB28181Server->getVideoChannel(cameraId);
if (channel != nullptr)
//插入数据
channel->push(.......);
DeletePacket(pack);
while (GotoNextSourceWithData());
EndDataAccess();
使用自己的线程,光收包直接cpu飚成10%
使用jthread 线程poll模式,收包+ 1路渲染,cpu降下来不到1%
差距比较大,更好的建议使用异步模式收rtp包。
以上是关于GB28181 收包方式jrtplib使用方式的差异的主要内容,如果未能解决你的问题,请参考以下文章