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>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章