EasyRTMP CPU占用问题调优(一)
EasyRTMP
前面介绍过EasyRTMP是高效的跨平台的RTMP推送库。
libEasyRTMP的基本操作
RTMP_Alloc() :用于创建一个RTMP会话的句柄。
RTMP_Init():初始化句柄。
RTMP_SetupURL():设置会话的参数。
RTMP_Connect():建立RTMP链接中的网络连接(NetConnection)。
RTMP_ConnectStream():建立RTMP链接中的网络流(NetStream)。
RTMP_Read():读取RTMP流的内容。
客户端可以在调用RTMP_Connect()之前调用RTMP_EnableWrite(),然后在会话开始之后调用 RTMP_Write()。
RTMP_Pause():流播放的时候可以用于暂停和继续
RTMP_Seek():改变流播放的位置
当RTMP_Read()返回0 字节的时候,代表流已经读取完毕,而后可以调用RTMP_Close()
RTMP_Free():用于清理会话。
所有的数据都使用 FLV 格式进行传输。一个基本的会话需要一个RTMP URL。RTMP URL 格式如下所示:
rtmp[t][e|s]://hostname[:port][/app[/playpath]]
支持普通的,隧道的,以及加密的会话。
其他附加的选项可以在URL的后面添加以空格为间隔符的“key=value”形式的字符串。
推送视频流是CPU较高
LibRTMP的结构体RTMP的成员是有m_outChunkSize,并且在RTMP_Init函数中被初始化了默认值128,然后整个LibRTMP代码没有改变m_outChunkSize的接口函数,内部也没有改变m_outChunkSize的实现逻辑,也没有发送改变块大小的消息给流媒体服务器的代码逻辑,关闭Nagle加如此小的块大小会导致很多小包,而以太网的MTU是1500,这样如果用在播放客户端由于主要是接收媒体流到也没有什么,但是如果用在发布媒体流的推流客户端网络效率就太低了,并且IP小包太多还会引起流媒体的服务器软中断升高,导致内核占用的CPU过高。
调整输出块大小的函数
static int
ChangeChunkSize(RTMP *r,int outChunkSize)
{
RTMPPacket packet;
char pbuf[RTMP_MAX_HEADER_SIZE + 4];packet.m_nBytesRead = 0;
packet.m_body = pbuf + RTMP_MAX_HEADER_SIZE;packet.m_packetType = RTMP_PACKET_TYPE_CHUNK_SIZE;
packet.m_nChannel = 0x04;
packet.m_headerType = RTMP_PACKET_SIZE_LARGE;
packet.m_nTimeStamp = 0;
packet.m_nInfoField2 = 0;
packet.m_hasAbsTimestamp = 0;
packet.m_nBodySize = 4;
r->m_outChunkSize = outChunkSize;r->m_outChunkSize = htonl(r->m_outChunkSize);memcpy(packet.m_body, &r->m_outChunkSize, 4);r->m_outChunkSize = ntohl(r->m_outChunkSize);
return RTMP_SendPacket(r, &packet, TRUE);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 调用调整输出块大小的函数的时机
if (r->Link.protocol & RTMP_FEATURE_WRITE)
{
ChangeChunkSize(r, 1360);//若不改拉流时的输出块大小在这里调用ChangeChunkSize
SendReleaseStream(r);
SendFCPublish(r);
}
else
{
RTMP_SendServerBW(r);
RTMP_SendCtrl(r, 3, 0, 300);
}//ChangeChunkSize(r,1360);//若推、拉流时的输出块大小都改变在这里调用ChangeChunkSize
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
本文感谢:http://www.cnblogs.com/oldmanlv/p/5487146.html
获取更多信息
邮件:support@easydarwin.org
WEB:www.EasyDarwin.org
Copyright © EasyDarwin.org 2012-2016
EasyRTMP CPU占用问题调优(一)相关推荐
- CPU的IPC调优:通过优化代码,提高每个时钟的指令数
目录 代码目录结构 compile-sx.sh compile.sh s1.c s2.c s3.c s4.c alu.c nop.c alu8.c 性能测试 s1.c s2.c s3.c s4.c a ...
- KVM虚拟机绑定物理CPU进行性能调优
使用KVM虚拟化,当虚拟机的vcpu不是很多时,可以通过绑定物理cpu的方式提到虚拟机的性能.实验证明Host整体性能大约能提高5%,单台虚拟机性能最高提高10%. 实验数据(数据来自同事,Thank ...
- Java基础之《JVM性能调优(14)—CPU性能调优》
一.linux cpu使用率100%的性能分析调优 1.问题 现在你接到运营电话说"线上系统很卡",你马上登陆linux服务器,你会做哪些动作,解决系统卡顿的问题? 2.top命令 ...
- 6 月直播 7 场全剧透。今天:飞腾CPU调优原理及方法 | 第 19 期
「龙蜥大讲堂」第 19 期直播来啦!本期龙蜥大讲堂直播邀请了龙蜥社区 Arm SIG 核心成员.飞腾软件技术专家李文成分享<飞腾平台软件调优方法>,快来扫码入群,预定前排小板凳观看直播吧! ...
- 《Apache Kafka实战》读书笔记-调优Kafka集群
<Apache Kafka实战>读书笔记-调优Kafka集群 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.确定调优目标 1>.常见的非功能性要求 一.性能( ...
- Liunx 系统调优
Sysctl命令用来配置与显示在/proc/sys目录中的内核参数.如果想使参数长期保存,可以通过编辑/etc/sysctl.conf文件来实现. 命令格式: sysctl [-n] [-e] -w ...
- Linux系统性能监控与调优
基本概念 QPS:query per second, 1秒内完成的请求数 RT:response time, 1个请求完成的时间 Throughput越大,Latency会越差.因为请求量过大,系统太 ...
- CPU-IO-网络-内核参数调优
一. 有关使用CPU资源的调优 1. nice概述 在LINUX系统中,Nice值的范围从-20到+19(不同系统的值范围是不一样的),正值表示低优先级,负值表示高优先级,值为零则表示不会调整该进程的 ...
- SSD性能调优的几种方法
在服务器测试中,storage 的测试是很重要的一部分.在测试过程中,经常会遇到硬盘(一般指固态硬盘)的性能偏低的情况,这其中有环境因素,也有SSD本身的问题.下面我们介绍一下SSD性能调优的几种方法 ...
最新文章
- VC中TXT文件的存取
- ASPNET登陆总结
- 图解http-ping使用
- HashMap源码浅析
- 基于Zookeeper使用ZkClient实现分布式锁
- 2021级C语言大作业 - 坏蛋冰淇凌
- 强烈推荐 | 算法/深度学习/NLP面试笔记
- Ps 初学者教程,如何添加选择、减去选择和进行交叉选择?
- Lwip协议详解(基于Lwip 2.1.0)-IP协议
- python贝叶斯网络预测天气_基于pym的贝叶斯网络条件概率表的生成
- PE安装win10系统
- 易地推拓客分享:内容获客是最稳定的获客方式之一
- Leo:一个outlining editor
- linux系统1060的显卡驱动打不上,ubuntu14.04+GTX1060 重新安装显卡驱动
- 液压比例阀放大器比例控制器比例阀放大板
- 爬虫系列 一次采集.NET WebForm网站的坎坷历程
- BIM+9大技术,你知多少?
- docker开放的端口_docker容器怎么开端口
- 电脑连接手机热点,显示无法连接到这个网络
- ✔G【OPA695】【单运放 】<高速>宽带放大模块 1.4G 高速电流型运放 同相反相带偏移
热门文章
- 只允许特定的组用户su切换到root
- openstack中swift和cinder中的区别
- 使用IPSec加强系统安全性
- 异步调用WebService方式!
- 牛客多校 - 1 or 2(一般图最大匹配)
- CodeForces - 1341F Nastya and Time Machine(dfs+构造)
- HDU - 1847 Good Luck in CET-4 Everybody!(sg函数,水题)
- python mysql链接安全_Python最佳实践和最安全的方法来连接MySQL和执行查询
- 卷积神经网络精确率不增反降_深度学习 第四门课:卷积神经网络(Convolutional Neural Networks)...
- 离散对数(Baby Step Giant Step)