非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); //100Msessparams.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 packetsif (sess.GotoFirstSourceWithData()){do{RTPPacket *pack;while ((pack = sess.GetNextPacket()) != NULL){RTPSourceData *mRTPSourceData = sess.GetCurrentSourceInfo();uint32_t ssrc = mRTPSourceData->GetSSRC();//ssrc是cameraId gb28181 server invite 的ssrcint 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使用方式的差异相关推荐

  1. 运行SSIS包的几种方式

    很多程序员,不止.net程序员都有可能会用到SSIS包来处理一些数据流程上的任务.可以说SSIS作为BI下的一个ETL工具,方便易学,而且功能也确实很强大.于是开发OLTP的同事总会到我们这边寻求技术 ...

  2. 总结运行SSIS包的几种方式

    很多程序员,不止.net程序员都有可能会用到SSIS包来处理一些数据流程上的任务.可以说SSIS作为BI下的一个ETL工具,方便易学,而且功能也确实很强大.于是开发OLTP的同事总会到我们这边寻求技术 ...

  3. Eclipse下导入外部jar包的3种方式

    转载自  Eclipse下导入外部jar包的3种方式   我们在用Eclipse开发程序的时候,经常要用到第三方jar包.引入jar包不是一个小问题,由于jar包位置不清楚,而浪费时间.下面配图说明3 ...

  4. 【maven】maven jar 包 冲突 的解决方式

    1.概述 视频参考:maven jar 包 冲突 的解决方式 此处文章参考:Mvn : Maven的依赖管理 依赖冲突 解决思路

  5. Intellij IDEA 添加jar包的三种方式

    Intellij IDEA 添加jar包的三种方式 inzaghihalo https://blog.csdn.net/superinzaghi747/article/details/80539095 ...

  6. Swagger 配置多个接口文档实现 和 实现多包扫描的配置方式

    一.Swagger 配置多个接口文档实现 场景说明:在一个项目中,后台接口分为后端后台接口和小程序端接口,为了方便区分,希望将2种不同的接口分开展示. 在做当前配置之前,首先你得先配置好基础的swag ...

  7. 内核源码包打包成rpm方式

    内核源码包打包成rpm方式 文章目录 内核源码包打包成rpm方式 第一部分,rpm包简单定制 一.rpm 制作前的环境准备 二.准备内核的源代码组件 1.下载地址 https://www.kernel ...

  8. ubuntu2004安装wine 7.21(利用源码包下载编译的方式)

    安装wine 本文参考: https://blog.csdn.net/qq_40489522/article/details/125295276 https://blog.csdn.net/icang ...

  9. Linux 运行jar包的几种方式

    nohup java -jar wechat-push-0.0.1-SNAPSHOT.jar > wechat-push-0.0.1.out 2>&1 & 一.Linux ...

最新文章

  1. Kali2021.2 VMware最新版安装步骤
  2. 人工智能,能治工人!
  3. 十年AI学者影响力盘点:何恺明排名第一,华人学者呈正向流入
  4. spring使用JUnit测试,@Autowired无法注入原因
  5. 同事查询多行_从零学会SQL-简单查询
  6. Np计算机领域,我国数学家证明NP=P
  7. windows apache部署php,Windows下部署Apache+PHP+MySQL运行环境实战
  8. java兔子问题流程图_C语言编程狼追兔子问题代码解析
  9. zhongdexing-pro
  10. php三步运算法,小技巧----“三步翻转法”
  11. python入门24 json模块
  12. 36. Web 主机托管
  13. 粉丝关注数据库表的设计
  14. 某些函数原型及其用法
  15. 资源 | 有了这些字体,你的设计也立即“高大上”起来。
  16. 葵花8号卫星数据简介与下载(一)——数据介绍与FTP下载
  17. matlab复合梯形法,matlab实现复合梯形法则
  18. realme真我gt能升级鸿蒙系统吗,realme真我GT Neo闪速版曝光,换用双电芯电池
  19. 面试-Iteration Owner-新加坡航空
  20. python浮点数多少位_python 浮点数保留几位小数

热门文章

  1. 金蝶云星空与旺店通·企业版对接集成其他出库查询打通创建其他出库单
  2. html5+css3案例——仿瓢城旅行网
  3. kepware怎么读modbus/tcp数据_kepware怎么选择驱动?它是怎么与下位机进行通讯的?...
  4. Android Studio配置ArcGIS Runtime SDK for Android
  5. 并联四足机器人项目开源教程(一)--- 机器人学导论的学习
  6. 《数学之美》——第六章 个人笔记
  7. 计算机设备管理器老是闪烁,电脑经常闪屏的原因和解决方法
  8. aspose转换pdf分页问题处理
  9. python学习笔记(自用)
  10. GeekOS操作系统课程设计 project0