基于live555实现的RTSPServer对底层进行性能优化的方法

在博客《EasyIPCamera高性能摄像机RTSP服务器RTSPServer解决方案》我介绍了基于live555实现的一套RTSPServer功能组件,当时开发者经过几个月的调试,已经将底层的性能调试到了一个业界非常优秀的程度,主要优化的几点:

  • 发送优化
  • 调度优化

发送优化方面,主要就是调整live555的缓冲区大小和每次发送的数据大小,众所周知,流媒体发送的是各种大小的音视频数据,而这些数据大的几百k,小的就几个字节,如果每一个零散的数据都要走一遍发送循环,对于live555这种单线程的架构来说,性能吃紧,所以,我们做了几点调整:


// 加大发送Packet大小
MultiFramedRTPSink.cpp
47行:setPacketSizes(1000, 8192);RTPInterface.cpp129行:
increaseSendBufferTo(envir(), fGS->socketNum(), 512*1024);//数据累积发送,不再单独发送
//注释掉332行,修改为以下:
//if (!sendDataOverTCP(socketNum, framingHeader, 4, False)) break;
//if (!sendDataOverTCP(socketNum, packet, packetSize, True)) break;struct iovec iov[2];iov[0].iov_base = framingHeader;iov[0].iov_len = 4;iov[1].iov_base = packet;iov[1].iov_len = packetSize;writev(socketNum, iov, 2);

在调度方面的优化


402//当前的数据缓冲区如果没有发送完成,就继续发送,不再走一遍live555的eventloop流程,提高效率!#if 0// We have more frames left to send.  Figure out when the next frame// is due to start playing, then make sure that we wait this long before// sending the next packet.struct timeval timeNow;gettimeofday(&timeNow, NULL);int secsDiff = fNextSendTime.tv_sec - timeNow.tv_sec;int64_t uSecondsToGo = secsDiff*1000000 + (fNextSendTime.tv_usec - timeNow.tv_usec);if (uSecondsToGo < 0 || secsDiff < 0) { // sanity check: Make sure that the time-to-delay is non-negative:uSecondsToGo = 0;}if (uSecondsToGo > 0)printf("uSecondsToGo: %d\n", uSecondsToGo);// Delay this amount of time:nextTask() = envir().taskScheduler().scheduleDelayedTask(uSecondsToGo, (TaskFunc*)sendNext, this);
#elsesendNext(this);
#endif

这样几点修改,大大提升了live555在网络数据发送方面的性能,使得在海思3516A这样的板子上,高清视频能提升到4路4M高清视频的发送,且很稳定(当然,网络一定要保证,大部分走wifi的测试都到不了这个效果)!

关于EasyIPCamera

EasyIPCamera是一套非常稳定、易用、支持多种平台(包括Windows/Linux 32&64,Android,ARM hisiv100/hisiv200/hisiv400等平台)的RTSP Server组件,适用于IPCamera、内网RTSP服务等小型RTSP流媒体服务器,接口调用非常简单成熟,无需关注RTSPServer中关于客户端监听接入、音视频多路复用、RTSP具体流程、RTP打包与发送等相关问题,支持多种音视频格式,再也不用像调用live555 RTSPServer那样处理整个RTSP OPTIONS/DESCRIBE/SETUP/PLAY/RTP/RTCP的复杂流程和担心内存释放的问题了!

获取更多信息

邮件:support@easydarwin.org

WEB:www.EasyDarwin.org

Copyright © EasyDarwin.org 2012-2017

EasyDarwin

转载于:https://www.cnblogs.com/babosa/p/7518010.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/399850.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sqlite 字符串 转 整型 cast 函数 (强制类型转换 )

sqlite 字符串 转 整型使用 cast 函数 语法&#xff1a; cast(col_name as type) 例子&#xff1a; 表&#xff1a;JobInfo 表内字段&#xff1a;Salary 薪水 select * from JobInfo where cast(substr(Salary,1,5)as int)>10000 结果集&#xff1a; 转载于:https://www.cn…

2018.2.2PHPstrom破解版

--------------------- 作者&#xff1a;聽の雨ぷ 来源&#xff1a;CSDN 原文&#xff1a;https://blog.csdn.net/qq_39439751/article/details/82758330 版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请附上博文链接&#xff01; 首先将我为大家事先准备好的打…

python-上传下载文件

https://www.cnblogs.com/jessicaxu/p/7891372.html python-上传下载文件 一、服务端接口 import flask, os,sys,time from flask import request, send_from_directoryinterface_path os.path.dirname(__file__) sys.path.insert(0, interface_path) #将当前文件的父目录加…

Quartz.net 2.0的使用说明

Quartz.NET是一个开源的作业调度框架&#xff0c;是OpenSymphony 的 Quartz API的.NET移植&#xff0c;它用C#写成&#xff0c;可用于WinForm和ASP.NET应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而 创建简单的或复杂的调度。它有很多特征&#x…

Android View滚动、拉伸到顶/底部弹性回弹复位

&#xfeff;&#xfeff;《Android View滚动、拉伸到顶/底部弹性回弹复位》 我在上一篇文章介绍了如何实现一个Android ListView拉到顶/底部后&#xff0c;像橡皮筋一样弹性回弹复位&#xff08;《Android ListView拉到顶/底部&#xff0c;像橡皮筋一样弹性回弹复位》&#xf…

JavaScript If...Else 语句

条件语句用于基于不同的条件来执行不同的动作。 条件语句 通常在写代码时&#xff0c;您总是需要为不同的决定来执行不同的动作。您可以在代码中使用条件语句来完成该任务。 在 JavaScript 中&#xff0c;我们可使用以下条件语句&#xff1a; if 语句 - 只有当指定条件为 true …

使用手机游戏的新闻推送

使用手机游戏的新闻推送——WeCloud 团队 消息推送是游戏开发人员与玩家沟通最直接的桥梁。开发人员能够通过推送一条消息直观地在手机屏幕上把信息传达给玩家。可是因为开发人员一些不恰当推送或者对于推送细节的疏忽大意&#xff0c;使得大多数的玩家都选择了彻底关闭推送消息…

Python -- post方式上传文件

说明 使用第三方库Request&#xff0c;安装方法为&#xff1a; pip install requests 具体安装方法参考http://docs.python-requests.org/en/master/user/install/。 代码 import requestsurl http://127.0.0.1/upload files {file: open(D:/test.apk, rb)} da…

WeakReference与SoftReference

WeakReference与SoftReference都可以用来保存对象的实例引用&#xff0c;这两个类与垃圾回收有关。 WeakReference是弱引用&#xff0c;其中保存的对象实例可以被GC回收掉。这个类通常用于在某处保存对象引用&#xff0c;而又不干扰该对象被GC回收&#xff0c;通常用于Debug、内…

TCP是如何保证包的顺序传输

转自&#xff1a;http://blog.csdn.net/ggxxkkll/article/details/7894112 大家都知道&#xff0c;TCP提供了最可靠的数据传输&#xff0c;它给发送的每个数据包做顺序化&#xff08;这看起来非常烦琐&#xff09;&#xff0c;然而&#xff0c;如果TCP没有这样烦琐的操作&#…

Python文件上传功能简单实现

本文章代码上传在码云上 代码地址 gitgitee.com:DanYuJie/upanddown.git这里我们使用flask框架&#xff0c;简单实用 目录结构&#xff1a; upandown/static/css/js/jquery.min.jstoastr.min.jstemplates/index.htmltest.py 首先我们需要一个页面在templates/index.html(…

Arduino 端口通信实例

// //Arduino 1.0.x-----Arduino Uno----COM9 //使用3-10号引脚连接8个LED // int incomingByte 0; //输入的数据存储变量 int count1; void setup() {Serial.begin(9600);// opens serial port, sets data rate to 9600 bpsfor(int i3;i<10;i)//打开3-10号引脚pinMode(i…

redhat6.4 安装oracle 10g error

环境&#xff1a;操作系统:redhat6.4 64位数据库版本:10.2.0.4 64位搭建测试原因&#xff1a;http://718693.blog.51cto.com/708693/1682945说明&#xff1a;在redhat6.4上安装10.2.0.1 64位接着再升级到10.2.0.4 64位&#xff0c;在执行DBCA报如下错误UnsatisfiedLinkError ex…

sha256---利用java自带的实现加密

利用java自带的实现加密&#xff1a;参考https://jingyan.baidu.com/article/2fb0ba40a2ef2b00f3ec5f74.html /*** 利用java原生的摘要实现SHA256加密* param str 加密后的报文* return*/public static String getSHA256StrJava(String str){MessageDigest messageDigest;Stri…

Flask文件上传

https://zhuanlan.zhihu.com/p/23731819 Flask文件上传&#xff08;一&#xff09;&#xff1a;原生实现 李辉 greyli.com 87 人赞同了该文章 文件上传是个躲不掉的问题&#xff0c;用户头像&#xff0c;文章图片&#xff0c;文件分享等等都需要上传功能。但这里涉及很多内…

Python匿名函数——lambda表达式

如果要定义的函数很简单&#xff0c;一个return语句就能搞定&#xff0c;可以使用lambda表达式来定义&#xff0c; lambda表达式的语法如下&#xff1a; lambda parameters: expressionlambda表达式并不包含return语句&#xff0c;凡是使用函数作为参数或返回值的地方&#xff…

jQuery实现radio第一次点击选中第二次点击取消功能(转)

转载自&#xff1a;http://www.jb51.net/article/113730.htm 由于项目的需求&#xff0c;要求radio点击两次后为取消状态&#xff0c;不方便修改为checkbox&#xff0c;可以用正面的方法实现。 // jquery$(input:radio).click(function(){//alert(this.checked);//var $radio …

简单编码

将一串文本译成密码&#xff0c;密码的规律是&#xff1a; 将原来的小写字母全部翻译成大写字母&#xff0c;大写字母全部翻译成小写字母&#xff0c;数字的翻译规律如下&#xff1a; 0——>9 1——>8 2——>7 3——>6 4——>5 5——>4 6——>3 7——>…

QCon上海2015热点前瞻:Uber伸缩之道、注重实效的性能

QCon上海2015将于10月15日~17日举行。8月16日前报名&#xff0c;可享受8折优惠。\\本次大会设计了15个热点技术专题&#xff0c;涵盖大数据、架构、移动开发、产品设计、安全、团队建设、技术创业等热点话题。我们将邀请业界知名专家&#xff0c;分享他们的实践经验。目前已经确…

工具配置链接

一、idea运行eclipse和myeclipse项目 二、idea中git的使用 三、idea快捷键 转载于:https://www.cnblogs.com/javabeginer/p/7515071.html