smart rtmpd 服務器配置文件說明及優化方法介紹

歡迎你們使用性能最高的 rtmp, rtsp 服務器 smart rtmpdphp

----------------------------------------------------------------------------------------------------------------------------------------html

一分鐘快速搭建 rtmpd 服務器: https://blog.csdn.net/freeabc/article/details/102880984linux

軟件下載地址: http://www.qiyicc.com/download/rtmpd.rarios

github 地址:https://github.com/superconvert/smart_rtmpdnginx

-----------------------------------------------------------------------------------------------------------------------------------------
git

smart rtmpd 服務器配置文件說明及優化方法介紹

就 smart rtmpd 作一個簡單的介紹。github

第一 smart rtmpd 無任何依賴,無需安裝,解壓便可運行,很是方便快捷,不管是技術老手仍是新手,都能輕易部署。ubuntu

第二 smart rtmpd 跨平臺,windows, linux ( ubuntu & centos ), 都支持。windows

第三 smart rtmpd 性能高,體積小,做爲一款新型的直播服務器,就是爲挑戰而生的,不然,就沒存在的意義了。centos

第四 smart rtmpd 支持級聯(可作大規模集羣)和 CDN 的分發。

第五 smart rtmpd 具備靈活的接口,知足各類業務的須要。就說這麼多吧有興趣的能夠看看

一分鐘快速搭建 rtmpd 服務器: http://www.javashuo.com/article/p-guggvhuj-ms.html

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>
相關文章
相關標籤/搜索