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占用问题调优(一)相关推荐

  1. 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 ...

  2. KVM虚拟机绑定物理CPU进行性能调优

    使用KVM虚拟化,当虚拟机的vcpu不是很多时,可以通过绑定物理cpu的方式提到虚拟机的性能.实验证明Host整体性能大约能提高5%,单台虚拟机性能最高提高10%. 实验数据(数据来自同事,Thank ...

  3. Java基础之《JVM性能调优(14)—CPU性能调优》

    一.linux cpu使用率100%的性能分析调优 1.问题 现在你接到运营电话说"线上系统很卡",你马上登陆linux服务器,你会做哪些动作,解决系统卡顿的问题? 2.top命令 ...

  4. 6 月直播 7 场全剧透。今天:飞腾CPU调优原理及方法 | 第 19 期

    「龙蜥大讲堂」第 19 期直播来啦!本期龙蜥大讲堂直播邀请了龙蜥社区 Arm SIG 核心成员.飞腾软件技术专家李文成分享<飞腾平台软件调优方法>,快来扫码入群,预定前排小板凳观看直播吧! ...

  5. 《Apache Kafka实战》读书笔记-调优Kafka集群

    <Apache Kafka实战>读书笔记-调优Kafka集群 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.确定调优目标 1>.常见的非功能性要求 一.性能( ...

  6. Liunx 系统调优

    Sysctl命令用来配置与显示在/proc/sys目录中的内核参数.如果想使参数长期保存,可以通过编辑/etc/sysctl.conf文件来实现. 命令格式: sysctl [-n] [-e] -w ...

  7. Linux系统性能监控与调优

    基本概念 QPS:query per second, 1秒内完成的请求数 RT:response time, 1个请求完成的时间 Throughput越大,Latency会越差.因为请求量过大,系统太 ...

  8. CPU-IO-网络-内核参数调优

    一. 有关使用CPU资源的调优 1. nice概述 在LINUX系统中,Nice值的范围从-20到+19(不同系统的值范围是不一样的),正值表示低优先级,负值表示高优先级,值为零则表示不会调整该进程的 ...

  9. SSD性能调优的几种方法

    在服务器测试中,storage 的测试是很重要的一部分.在测试过程中,经常会遇到硬盘(一般指固态硬盘)的性能偏低的情况,这其中有环境因素,也有SSD本身的问题.下面我们介绍一下SSD性能调优的几种方法 ...

最新文章

  1. VC中TXT文件的存取
  2. ASPNET登陆总结
  3. 图解http-ping使用
  4. HashMap源码浅析
  5. 基于Zookeeper使用ZkClient实现分布式锁
  6. 2021级C语言大作业 - 坏蛋冰淇凌
  7. 强烈推荐 | 算法/深度学习/NLP面试笔记
  8. Ps 初学者教程,如何添加选择、减去选择和进行交叉选择?
  9. Lwip协议详解(基于Lwip 2.1.0)-IP协议
  10. python贝叶斯网络预测天气_基于pym的贝叶斯网络条件概率表的生成
  11. PE安装win10系统
  12. 易地推拓客分享:内容获客是最稳定的获客方式之一
  13. Leo:一个outlining editor
  14. linux系统1060的显卡驱动打不上,ubuntu14.04+GTX1060 重新安装显卡驱动
  15. 液压比例阀放大器比例控制器比例阀放大板
  16. 爬虫系列 一次采集.NET WebForm网站的坎坷历程
  17. BIM+9大技术,你知多少?
  18. docker开放的端口_docker容器怎么开端口
  19. 电脑连接手机热点,显示无法连接到这个网络
  20. ✔G【OPA695】【单运放 】<高速>宽带放大模块 1.4G 高速电流型运放 同相反相带偏移

热门文章

  1. 只允许特定的组用户su切换到root
  2. openstack中swift和cinder中的区别
  3. 使用IPSec加强系统安全性
  4. 异步调用WebService方式!
  5. 牛客多校 - 1 or 2(一般图最大匹配)
  6. CodeForces - 1341F Nastya and Time Machine(dfs+构造)
  7. HDU - 1847 Good Luck in CET-4 Everybody!(sg函数,水题)
  8. python mysql链接安全_Python最佳实践和最安全的方法来连接MySQL和执行查询
  9. 卷积神经网络精确率不增反降_深度学习 第四门课:卷积神经网络(Convolutional Neural Networks)...
  10. 离散对数(Baby Step Giant Step)