歡迎你們使用性能最高的 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>
![](http://static.javashuo.com/static/loading.gif)
![點擊並拖拽以移動](http://static.javashuo.com/static/loading.gif)