smart rtmpd 服务器配置文件说明及优化方法介绍
作者:互联网
----------------------------------------------------------------------------------------------------------------------------------------
一分钟快速搭建 rtmpd 服务器: https://blog.csdn.net/freeabc/article/details/102880984
软件下载地址: http://www.qiyicc.com/download/rtmpd.rar
github 地址:https://github.com/superconvert/smart_rtmpd
-----------------------------------------------------------------------------------------------------------------------------------------
smart rtmpd 服务器配置文件说明及优化方法介绍
就 smart rtmpd 做一个简单的介绍。
第一 smart rtmpd 无任何依赖,无需安装,解压即可运行,非常方便快捷,无论是技术老手还是新手,都能轻易部署。
第二 smart rtmpd 跨平台,windows, linux ( ubuntu & centos ), 都支持。
第三 smart rtmpd 性能高,体积小,作为一款新型的直播服务器,就是为挑战而生的,否则,就没存在的意义了。
第四 smart rtmpd 支持级联(可做大规模集群)和 CDN 的分发。
第五 smart rtmpd 具有灵活的接口,满足各种业务的需要。就说这么多吧有兴趣的可以看看
一分钟快速搭建 rtmpd 服务器: https://blog.csdn.net/freeabc/article/details/102880984
1. smart rtmpd 配置文件说明
<?xml version="1.0" encoding="UTF-8"?>
<!-- 配置更改后,重启 rtmp 服务器 -->
<config>
<!-- 跟踪耗时, 不要轻易打开, 容易 crash -->
<elapse>false</elapse>
<!-- 鉴权地址: http://authurl/v1/smart_rtmpd?type=rtmp&action=publisher&your param. -->
<authurl></authurl>
<!-- 套结字基本配置项 -->
<sock>
<!-- 接收缓冲区, 单位 KB -->
<recvbuffer>4096</recvbuffer>
<!-- 发送缓冲区, 单位 KB -->
<sendbuffer>4096</sendbuffer>
</sock>
<!-- SSL 配置, 单项认证 serverkey, servercert 不为空; 双向认证主要用于级联 -->
<ssl>
<serverca></serverca>
<serverkey></serverkey>
<servercert></servercert>
<clientca></clientca>
<clientkey></clientkey>
<clientcert></clientcert>
</ssl>
<!-- RTMP 网络,CPU,内存相关 -->
<rtmp>
<!-- 服务器地址 -->
<ip></ip>
<!-- 服务器端口 -->
<port>1935</port>
<!-- 开启 ssl -->
<ssl>false</ssl>
<!-- 直播标签 -->
<live>live</live>
<!-- h265 的 CodecID -->
<codech265>12</codech265>
<!-- 组包模式 1 或 2 -->
<packmode>1</packmode>
<!-- gop 队列最大大小 -->
<gopsize>512</gopsize>
<!-- 秒开功能, 不过增加延时 -->
<gopenable>false</gopenable>
<!-- 心跳包间隔时间(分) -->
<heartbeat>3</heartbeat>
<!-- chunksize -->
<chunksize>8192</chunksize>
<!-- 接收端队列抖动大小,超过就丢包 -->
<shrinkesize>80</shrinkesize>
<!-- 堆积包个数 -->
<waitcount>4</waitcount>
<!-- 堆积延时设置 -->
<waitsleep>120</waitsleep>
<!-- 堆积大小设置 当 waitcount == 0 时,启用 -->
<waitchunk>8192</waitchunk>
<!-- 数据发送连续阻塞次数, 超过断开链接 -->
<blockcount>1024</blockcount>
<!-- 是否开启 http-flv 输出 -->
<hasflv>true</hasflv>
<!-- 是否开启 http-hls 输出 -->
<hashls>true</hashls>
<!-- 是否开启 http-dash 输出 -->
<hasdash>true</hasdash>
<!-- 是否开启 rtsp-live 输出 -->
<hasrtsp>true</hasrtsp>
<!-- rtmp2rtsp rtp payload 类型定义 -->
<rtp h265="98" h264="96" aac="97"/>
</rtmp>
<!-- RTSP 服务器配置 -->
<rtsp>
<!-- 服务器地址 -->
<ip></ip>
<!-- 服务器端口 -->
<port>8554</port>
<!-- 开启 ssl -->
<ssl>false</ssl>
<!-- 是否开启 rtmp 输出 -->
<hasrtmp>true</hasrtmp>
<!-- 关闭 rrsp 服务 -->
<enable>true</enable>
<!-- rtp & rtcp 端口区间, que 接收队列最大缓冲 -->
<rtp min="30000" max="60000" que="20000" />
</rtsp>
<!-- HTTP 服务器配置 -->
<http>
<!-- 服务器地址 -->
<ip></ip>
<!-- http 端口 -->
<port>8085</port>
<!-- 开启 ssl -->
<ssl>false</ssl>
<!-- 关闭 http 服务 -->
<enable>true</enable>
<!-- 状态查询, vod 列表查询,需要验证 -->
<httpcmd user="admin" pwd="123456"/>
<!-- http 累积数据大小, 超过此值才发送 -->
<httpcache>8192</httpcache>
<!-- http 文件下发, 文件每次读取数据大小 -->
<httpchunk>8192</httpchunk>
<!-- IO 队列堆积个数 -->
<ioshrink>512</ioshrink>
<!-- http-flv 数据累积超过此值丢包, 单位 KB -->
<flvblock>2048</flvblock>
<!-- http-hls vod 模式缓存文件个数, 如出现音视频文件找不到,扩大这个值 -->
<hlsvodcache>20</hlsvodcache>
<!-- http-hls live 模式缓存文件个数, 如出现音视频丢帧,扩大这个值 -->
<hlslivecache>4</hlslivecache>
<!-- http-hls 模式 0 - ts, 1 - fmp4 -->
<hlsmode>0</hlsmode>
<!-- http-hls 切片个数 -->
<hlssegment>3</hlssegment>
<!-- http-hls 切片时长(秒) -->
<hlsduration>5</hlsduration>
<!-- dash vod 模式缓存文件个数, 如出现音视频文件找不到,扩大这个值 -->
<dashvodcache>20</dashvodcache>
<!-- dash live 模式缓存文件个数, 如出现音视频丢帧找不到,扩大这个值 -->
<dashlivecache>8</dashlivecache>
<!-- dash 回收文件时延, 最小 10 秒 -->
<dashduration>10</dashduration>
<!-- http-vod 模式 0 - dash 模式, 1 - hls 模式 -->
<vodmode>0</vodmode>
<!-- http-vod 存储分割时间( 分钟 ) -->
<vodduration>1</vodduration>
</http>
<!-- vhost 列表 vhost 可以有多个节点,url 也可以有多个节点,Forward 第三方平台,上面的 packmode 一定配置为 2 -->
<vhosts>
<!-- 可以针对虚拟主机进行 forward,name 就是虚拟主机地址和端口比如: 192.168.1.108:1936 -->
<vhost name="">
<!-- 改写 url , 如: 本机 192.168.1.1, forward 地址 192.168.1.2, 就改写成 forward 的地址 -->
<rewrite>false</rewrite>
<!-- 是否开启 flv ,优先级高于全局配置 -->
<hasflv>true</hasflv>
<!-- 是否开启 hls ,优先级高于全局配置 -->
<hashls>true</hashls>
<!-- 是否开启 dash ,优先级高于全局配置 -->
<hasdash>true</hasdash>
<!-- 是否开启 rtsp ,优先级高于全局配置 -->
<hasrtsp>true</hasrtsp>
<!-- forword 地址列表,默认端口号 1935 也可以不加 -->
<forward></forward>
<!-- forword 地址列表,默认端口号 1935 也可以不加 -->
<forward></forward>
</vhost>
<vhost name="">
</vhost>
<!-- 可以针对具体的 url 进行 forward,从而避免 forward 整个 vhost name 比如: rtmp://192.168.1.108/live/stream -->
<url name="">
<!-- 改写 rtmp url ,为空表示不改写,改写格式: rtmp://192.168.1.108/live/stream -->
<!-- 例如: rtmp://www.cctv.com/live/sport 可以改写成 rtmp://www.shandong.com/live/sport -->
<rewrite></rewrite>
<!-- 是否开启 flv ,优先级高于全局配置 -->
<hasflv>true</hasflv>
<!-- 是否开启 hls ,优先级高于全局配置 -->
<hashls>true</hashls>
<!-- 是否开启 dash ,优先级高于全局配置 -->
<hasdash>true</hasdash>
<!-- 是否开启 rtsp ,优先级高于全局配置 -->
<hasrtsp>true</hasrtsp>
<!-- forword 地址列表,默认端口号 1935 也可以不加 -->
<forward></forward>
<!-- forword 地址列表,默认端口号 1935 也可以不加 -->
<forward></forward>
</url>
<url name="">
</url>
</vhosts>
<!-- 日志相关 -->
<log>
</log>
</config>
1.1 --- 性能跟踪 ( 技术人员 )
elapse 性能追踪开关,技术人员调试跟踪时,值为: true 或 false , 默认是 false 。运营时,建议关闭。
1.2 --- 鉴权服务器地址 ( 技术人员 )
authurl 鉴权服务器地址,防止有恶意用户推流,拉流,同时也可以配合自己的业务对用户进行授权处理,具体用法可参考博文
https://blog.csdn.net/freeabc/article/details/105781985
1.3 --- 套接字选项 ( 技术人员 )
TCP 套接字 recvbuffer 接收缓冲区大小,默认是 KB, TCP 套接字 sendbuffer 发送缓冲区大小,默认是 KB
1.4 --- SSL 配置项说明 ( 技术人员 )
我们知道 SSL 支持单项和双向认证,下面就两种方法,我们一一介绍。
我们最常见的是单项认证,单项认证的配置方法如下,别的字段为空
<serverkey>server_key.pem</serverkey>
<servercert>server_cert.pem</servercert>
双向认证配置如下,一般 ca 为同一个。
<serverca>ca.pem</serverca>
<serverkey>server_key.pem</serverkey>
<servercert>server_cert.pem</servercert>
<clientca>ca.pem</clientca>
<clientkey>client_key.pem</clientkey>
<clientcert>client_cert.pem</clientcert>
1.5 --- rtmp 相关配置项
服务器绑定指定的网络地址 --- 空表示绑定所有的网络地址 (多网卡)
<ip></ip>
服务器端口 --- 默认都是 1935,这也是 rtmp 的默认端口
<port>1935</port>
true : 开启 ssl , 推流拉流必须是 rtmps 方式; false : 关闭 ssl,推流拉流必须是 rtmp 方式
怎么让 ffmpeg 支持推送 rtmps 流,参考博文 https://blog.csdn.net/freeabc/article/details/105526273
<ssl>false</ssl>
smart rtmpd 只支持两种格式的推流和拉流, 举例如下:
点播 url --- rtmp://192.168.1.1:1935/vod/stream
直播 url --- rtmp://192.168.1.1:1935/live/stream
支持两种 app 标签, live 和 vod ,如果你觉得 live 不符合你的需求,
可以改成你想要的格式 <live>xxx</live>,那么推拉流格式如下:
rtmp://192.168.1.1:1935/xxx/stream
我们就有关 rtmp 的 url 做一个简单的说明
rtmp://192.168.1.1:1935/live/stream
上述的 rtmp url 具体
rtmp:// 代表的是 rtmp 协议
192.168.1.1:1935 代表 vhost ,也可以是域名,一个机器可能有一个 ip 多个域名
live 是 app 标签,代表一个应用的标签,类型,可以看作一个应用分类
stream 是这个流的名字,这个可以随意写自己想要的。比如:
rtmp://192.168.1.1:1935/live/sport
rtmp://192.168.1.1:1935/live/movie
rtmp://192.168.1.1:1935/live/music
由于 adobe 没用在 rtmp 协议内并不支持 h265 ,因此协议内的 codecID 是没有统一的值的,
包括数据格式,但国内的媒体爱好者,有个不成文的规矩,流的格式尽量按 h264 的风格走,codecID
定义为 12. 但也有可能采用其它的值,这个地方就可以灵活配置 codecID,以适应不同的需求
<codech265>12</codech265>
smart rtmpd 打包模式分为两种,这里值只能是 1 或 2. 对于模式 1 性能会更高一点,但只适合
smart rtmpd 内部交互,如果采用这种模式可能和第三方的程序对接会有问题,比如做 CDN 分发或
级联. 如果级联对象或 CDN 对象都是 smart rtmpd 没问题,打包模式可以为 1. 如果是第三方的
产品,比如 srs 或 nginx rtmp ,就必须采用打包模式 2. 建议服务器端全部用 smart rtmpd 做
级联和 CDN 分发,模式为 1, 这样性能更高。
<packmode>1</packmode>
这个选项是对于有些推流软件, gopsize 超级大,非常不适合直播,也不适合妙可,如果 gopsize
超过 512 帧,就采用丢弃的方式,防止因为坏流导致 smart rtmpd 出现性能降低或不稳定。
<gopsize>512</gopsize>
秒开功能, 值为 true 表示开启,false 表示关闭,如果开启妙开功能,肯定会带来直播的延时,最大
可能一个 GOP 的时长。
<gopenable>false</gopenable>
smart rtmpd 的心跳时间,单位分钟,默认是 3 分钟
<heartbeat>3</heartbeat>
性能调优项之一
rtmp 包的 chunk 大小, 理论上数值越大,性能越好,当然不是无限大最好,默认是 8K ,你可以设置
64K, 跟踪一下效果,找到一个适合自己的值,good luck!
<chunksize>8192</chunksize>
smart rtmpd 为播放端设置的缓冲区大小,不适合过大,如果日志内出现 shrinke 的字样,说明播放端
接收数据过慢,出现丢包,通过调整这个值,可以增大缓冲队列,可能会改善,但不从根本上解决问题。
<shrinkesize>80</shrinkesize>
性能调优项之一
包堆积超过多少,才发送 rtmp 数据到播放端,建议采用 0 到 4 之间,太大肯定引起延时
<waitcount>4</waitcount>
性能调优项之一
发送时间间隔,单位毫秒。如果包的累积满足条件了,但 waitsleep 时间还未到,smart rtmpd 也不会
继续发包。如果想提速,可以设置为 0 或者 20,设置过大,也会带来一点点延时。
<waitsleep>120</waitsleep>
性能调优项之一
waitcount == 0 时,这种发送模式才起作用,单位 B。如果 waitcount == 0 ,意思就是说数据累积
8K ,smart rtmpd 就可以推数据到播放端,如果你网络足够好,可以设置 128 试试。
<waitchunk>8192</waitchunk>
数据发送连续阻塞次数, 超过断开链接 , 如果 smart rtmpd 推送数据到播放器,如果尝试了 1024 次
都是阻塞状态,则认为这个播放器网络太差,不具有直播的条件,断开与这个播放器的链接。
<blockcount>1024</blockcount>
true : 开启 rtmp 转 http-flv , false : 关闭
<hasflv>true</hasflv>
true : 开启 rtmp 转 http-hls , false : 关闭
<hashls>true</hashls>
true : 开启 rtmp 转 mpeg-dash , false : 关闭
<hasdash>true</hasdash>
true : 开启 rtmp 转 rtsp , false : 关闭
<hasrtsp>true</hasrtsp>
rtmp 转 rtsp ,需要对视频的 rtp payload 进行定义
<rtp h265="98" h264="96" aac="97"/>
1.6 --- rtsp 配置项
服务器绑定指定的网络地址 --- 空表示绑定所有的网络地址 (多网卡)
<ip></ip>
服务器端口 --- 默认都是 8554
<port>8554</port>
true : 开启 ssl , 推流拉流必须是 rtsp 的加密方式; false : 关闭 ssl
<ssl>false</ssl>
是否开启 rtsp 转 rtmp , 这必须要求 rtsp 视频编码为 h264, 音频编码是 aac
<hasrtmp>true</hasrtmp>
关闭 rtsp 服务
<enable>true</enable>
rtp 传输一般都是 UDP 的,这里是是需要开启的 UDP 服务的端口区间 que 接收队列最大缓冲 ,
如果接收到的 RTP 包,超过这个队列,则会自动丢弃未处理的包。
<rtp min="30000" max="60000" que="20000" />
1.7 --- http 配置项
服务器绑定指定的网络地址 --- 空表示绑定所有的网络地址 (多网卡)
<ip></ip>
服务器端口 --- 默认都是 8080
<port>8080</port>
true : 开启 ssl , 推流拉流必须是 https 的加密方式; false : 关闭 ssl
<ssl>false</ssl>
true : 开启 http 服务, false : 关闭 http 服务
<enable>true</enable>
smart rtmpd 提供了一些对外的接口,以方便查询 smart rtmpd 的内部流的状态信息,
为了防止恶意查询,查询时,需要带上用户名和密码才行,这个就是那个配置
<httpcmd user="admin" pwd="123456"/>
查询接口如下,查看所有流信息
http://192.168.1.1:8080/application?user=admin&pwd=123456
查看具体流信息
http://192.168.1.1:8080/application?user=admin&pwd=123456&stream=流的名字
查看统计信息
http://192.168.1.1:8080/statistics?user=admin&pwd=123456
http-flv 等数据下发时,有个数据缓冲累积单位字节,如果累积到了 8K 就下发给播放器
<httpcache>8192</httpcache>
如果下发的是文件,那么每次需要下发数据大小,如果速度加快,建议这个值可以再大点,
不过需要注意的是,不是越大越好,需要自己慢慢调试,找出最优的值。
<httpchunk>8192</httpchunk>
smart rtmpd 有写磁盘的动作,如果写磁盘的数据队列超过这个值,则会丢弃这些还未写到
磁盘的数据,这表明您的磁盘 IO 确实太慢了。。。。。
<ioshrink>512</ioshrink>
http-flv 数据累积超过此值丢包, 单位 KB
<flvblock>2048</flvblock>
http-hls vod 模式缓存文件个数, 如出现音视频文件找不到,扩大这个值
<hlsvodcache>20</hlsvodcache>
http-hls live 模式缓存文件个数, 如出现音视频丢帧,扩大这个值
<hlslivecache>4</hlslivecache>
http-hls 模式 0 - ts, 1 - fmp4, 这里就别改动了,建议存成 ts 格式。fmp4 支持的不好,别启用了
hls 一般时延比较大,最好的改善方法是,推流端的 GOP 设置要合适,建议要控制在 1 秒之内,这个条
件满足,然后 smart rtmpd 的这些配置项,切片时长可以设置为 2 秒或这 1 秒(保证 GOP 小于 1 秒)
然后切片格式就为 3 吧,不断的尝试优化,基本上时延能在 3 秒左右。
<hlsmode>0</hlsmode>
http-hls 切片个数
<hlssegment>3</hlssegment>
http-hls 切片时长(秒)
<hlsduration>5</hlsduration>
dash vod 模式缓存文件个数, 如出现音视频文件找不到,扩大这个值
<dashvodcache>20</dashvodcache>
dash live 模式缓存文件个数, 如出现音视频丢帧找不到,扩大这个值
<dashlivecache>8</dashlivecache>
dash 回收文件时延, 最小 10 秒
<dashduration>10</dashduration>
smart rtmpd 的录像模式,具体可参考博文
https://blog.csdn.net/freeabc/article/details/103360588
0 - dash 模式, 1 - hls 模式 ,建议录像采用 hls 模式,毕竟这个是最成熟的。
<vodmode>0</vodmode>
http-vod 录像分割时间( 分钟 )
<vodduration>1</vodduration>
标签:false,配置文件,rtmpd,rtmp,http,true,smart 来源: https://blog.csdn.net/freeabc/article/details/106545569