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><!-- NAT 映射地址 --><natmap/><!-- 內網地址推流,映射成外網地址, 內外網都能播放 --><hostmap outer="" inner=""/><!-- 套結字基本配置項 --><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><!-- 推流空閑時間間隔超時斷開(分) --><maxidle>3</maxidle><!-- 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><!-- http 累積數據大小, 超過此值才發送 --><httpcache>8192</httpcache><!-- http 文件下發, 文件每次讀取數據大小 --><httpchunk>8192</httpchunk><!-- IO 隊列堆積個數 --><ioshrink>512</ioshrink><!-- http-flv 數據累積超過此值丟包, 單位 KB --> <flvblock>2048</flvblock><!-- http-hls rec 模式緩存文件個數, 如出現音視頻文件找不到,擴大這個值 --><hlsreccache>20</hlsreccache><!-- 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 rec 模式緩存文件個數, 如出現音視頻文件找不到,擴大這個值 --><dashreccache>20</dashreccache><!-- dash live 模式緩存文件個數, 如出現音視頻丟幀找不到,擴大這個值 --><dashlivecache>8</dashlivecache><!-- dash 回收文件時延, 最小 10 秒 --><dashduration>10</dashduration><!-- http-rec 模式 0 - dash 模式, 1 - hls 模式 --><recmode>0</recmode><!-- http-rec 存儲分割時間( 分鐘 ) --><recduration>1</recduration></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 。運營時,建議關閉。
natmap 如果您的服務器位于內網 NAT 后面提供服務,有些服務對我暴露的是 NAT 上的外網地址, 那么你們就可以配置這個選項,natmap 需要填寫服務在 NAT 上的外網地址,否則,部分服務可能 不能正常使用,比如:webrtc 的 udp 服務,rtsp 的 udp 傳輸模式下,如果不配置此項,況且 服務器處于 NAT 映射模式,則這個不能正確運行 hostmap 如果您的服務器位于內網,想內網外網同時混合使用,比如您內網地址是 192.168.1.1, 外網域名是 www.qiyicc.com,那么 hostmap 就要配置為 inner="192.168.1.1" outer="www.qiyicc.com",那么如果內網推流 rtmp://192.168.1.1/live/stream, 那么服務器則會自動把流的 url 轉換為 rtmp://www.qiyicc.com/live/stream,內網用戶可以用 rtmp://192.168.1.1/live/stream 播放流, 外網用戶則可以使用 rtmp://www.qiyicc.com/live/stream1.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/rec/stream 直播 url --- rtmp://192.168.1.1:1935/live/stream支持兩種 app 標簽,?live 和 rec,如果你覺得 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 分鐘,超過鏈接自動斷開 <maxidle>3</maxidle> 性能調優項之一 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 的內部流的狀態信息, 現在統一改成第三方接口驗證,具體參數用戶自己定義。查詢接口如下,查看所有流信息 http://192.168.1.1:8080/api/application?token=md5(user + pwd) 查看具體流信息 http://192.168.1.1:8080/api/application?token=md5(user + pwd)&stream=流的名字 查看統計信息 http://192.168.1.1:8080/api/statistics?token=md5(user + pwd)token 等于 user + pwd 的字符串的 md5 值 16 位小寫字符串值, 比如: admin + 123456 = admin123456,token=84c45962d887564fhttp-flv 等數據下發時,有個數據緩沖累積單位字節,如果累積到了 8K 就下發給播放器 <httpcache>8192</httpcache>如果下發的是文件,那么每次需要下發數據大小,如果速度加快,建議這個值可以再大點, 不過需要注意的是,不是越大越好,需要自己慢慢調試,找出最優的值。 <httpchunk>8192</httpchunk>smart rtmpd 有寫磁盤的動作,如果寫磁盤的數據隊列超過這個值,則會丟棄這些還未寫到 磁盤的數據,這表明您的磁盤 IO 確實太慢了。。。。。 <ioshrink>512</ioshrink>http-flv 數據累積超過此值丟包, 單位 KB <flvblock>2048</flvblock>http-hls rec 模式緩存文件個數, 如出現音視頻文件找不到,擴大這個值 <hlsreccache>20</hlsreccache>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 rec 模式緩存文件個數, 如出現音視頻文件找不到,擴大這個值 <dashreccache>20</dashreccache> dash live 模式緩存文件個數, 如出現音視頻丟幀找不到,擴大這個值 <dashlivecache>8</dashlivecache> dash 回收文件時延, 最小 10 秒 <dashduration>10</dashduration> smart rtmpd 的錄像模式,具體可參考博文 https://blog.csdn.net/freeabc/article/details/1033605880 - dash 模式, 1 - hls 模式 ,建議錄像采用 hls 模式,畢竟這個是最成熟的。 <recmode>0</recmode> http-rec 錄像分割時間( 分鐘 ) <recduration>1</recduration>?
總結
以上是生活随笔為你收集整理的smart rtmpd 服务器配置文件说明及优化方法介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是数字化?为什么需要数字化?数字化的
- 下一篇: 新疆之春(二)魂牵梦绕赛里木湖