您好,登錄后才能下訂單哦!
怎么分析nginx-rtmp-module的缺陷,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
VHOST(虛擬主機(jī))就是一址多域的意思,主流的Web服務(wù)器都有這個(gè)功能,它解決了運(yùn)行Web的主機(jī)在同一個(gè)IP地址情況下可以為不同域名的請(qǐng)求提供服務(wù)的問題。假設(shè)有兩個(gè)域名A和B,在DNS上A和B都指向同一個(gè)A記錄(IPv4)或者AAAA記錄(IPv6),Web服務(wù)器通過不同的域名信息解析到不同的配置,從而為A和B提供不同的服務(wù)。Nginx根據(jù)請(qǐng)求的信息(端口,IP地址和域名)匹配到對(duì)應(yīng)的配置的大概過程如下:
nginx-rtmp-module有個(gè)嚴(yán)重的問題:如果在rtmp配置塊里沒有l(wèi)isten選項(xiàng),那么它根本就不能運(yùn)行,因?yàn)闆]有默認(rèn)監(jiān)聽任何端口。而且就算配置了listen選項(xiàng),它也無法根據(jù)域名找到正確的配置。例如有如下配置:
rtmp {
server {
listen 1935;
...
}
server {
listen 1935;
...
}
}
我如果想推流到第二個(gè)server配置塊里的某個(gè)application,nginx-rtmp-module只能將流推到第一個(gè)server配置塊里的某個(gè)application,因?yàn)樗鼪]有像Nginx本身提供的server_name配置項(xiàng)的功能。究其原因,是因?yàn)閚ginx-rtmp-module沒有實(shí)現(xiàn)上圖中的“有無域名匹配”和“域名是否匹配”的功能。這個(gè)問題還導(dǎo)致stat.xsl也沒有考慮適配VHOST的功能,所以就算能推到第二個(gè)server配置塊里的某個(gè)application,如果這個(gè)application的名稱與第一個(gè)server配置塊里的某個(gè)application相同,在查詢統(tǒng)計(jì)信息的時(shí)候,點(diǎn)第二個(gè)application的詳情,會(huì)打開第一個(gè)application的詳情。nginx-http-flv-module部分解決了這個(gè)問題。單進(jìn)程模式下沒有任何問題,多進(jìn)程模式下有些情況下也沒有問題,詳情見nginx-http-flv-module-note-6的描述。這是因?yàn)橐粋€(gè)進(jìn)程接收到推流請(qǐng)求后,會(huì)將流auto push到別的進(jìn)程,這是通過unix domain socket實(shí)現(xiàn)的,但是unix domain socket不像AF_INET/AF_INET6協(xié)議族的socket,它是沒有端口號(hào)的,所以目前不知道如何從接收推流的進(jìn)程傳遞端口號(hào)給別的進(jìn)程,從而匹配正確的配置。
歡迎關(guān)注我在nginx-rtmp-module基礎(chǔ)上開發(fā)的項(xiàng)目:nginx-http-flv-module。
看完上述內(nèi)容,你們掌握怎么分析nginx-rtmp-module的缺陷的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。