js分解RTMP的url地址
因為產品需要,要求前端網頁可以自動分解客戶填寫的RTMP的url地址,在與底層互動時,將分解好的欄位傳給底層,不能直接傳完整的URL,所以自己寫了一個方法來分解RTMP的url地址。
URL組成
標準的RTMP的URL由以下部分組成:
- Schema:協議頭,RTMP為RTMP/RTMPS/RTMPE/RTMPT等眾多協議,還有新出的RTMFP。
- Host:主機,表示要連線的主機,可以為主機DNS名稱或者IP地址。商用時,一般不會用IP地址,而是DNS名稱,這樣可以用CDN分發內容(CDN一般使用DNS排程,即不同網路和地理位置的使用者,通過DNS解析到的IP不一樣,實現使用者的就近訪問)。
- Port:埠,HTTP預設為80,RTMP預設為1935。當埠沒有指定時,使用預設埠。
- App:RTMP的Application(應用)名稱,可以類比為資料夾。以資料夾來分類不同的流,沒有特殊約定,可以任意劃分。
- Stream:RTMP的Stream(流)名稱,可以類比為檔案。
URL主要格式列舉:
目前客戶使用的地址分為3中:
- rtmp://demo.srs.com/live/livestream
- rtmp://192.168.1.100/live?vhost=demo.srs.com/livestream
- rtmp://demo.srs.com/live?key=ER892ID839KD9D0A1D87D/livestream
第一種為最為普遍的URL地址,是普通使用者的標準訪問方式,觀看直播流,第二種是運維對特定伺服器排錯,第三種是token驗證使用者,或者頻寬測試的key驗證,實際情況以第一種為準。
URL格式分解
function analyzeRTMPURl(url){ var head=url.indexOf("://"); var pro=url.substring(0,head); var body=url.substring(head+3); var array=body.split("/"); var servername=array[0]; var server=servername.indexOf(":"); var serverLength; var ip; var port; if(server==-1){ ip=servername; port="1935"; serverLength=ip.length+1; }else{ ip=servername.substring(0,server); port=servername.substring(server+1); serverLength=ip.length+port.length+2; } var app = array[1]; var appLength = app.length + 1; var stream = body.substring(serverLength + appLength); var reList = [ip, port, app, stream]; return reList; }
初步封裝了一個方法,將分解結果以陣列方式返回,用analyzeRTMPURL(url)[i]來返回分解的值
更新要求:
前幾天某客戶的推流地址有特殊要求,新增驗證欄位,例如:rtmp://admin:123456@p.ep512007.i.akamaientrypoint.net/live/live1
原先的方法就無法正常解析這類地址,所以又重新寫了一個通用的方法:
function analyzePasswordRTMPURl(url){ var head=url.indexOf("://"); var pro=url.substring(0,head); var body=url.substring(head+3); var array=body.split("/"); var servername=array[0]; var server; var serverLength; var ip; var port; var name; var password; var isEnablePass=servername.indexOf("@"); if(isEnablePass==-1){ server = servername.indexOf(":"); if(server==-1){ ip=servername; port="1935"; serverLength=ip.length+1; }else{ ip=servername.substring(0,server); port=servername.substring(server+1); serverLength=ip.length+port.length+2; } name=""; password=""; }else{ let namePart = servername.substring(0, isEnablePass); let addressPart = servername.substring(isEnablePass + 1); let namePass = namePart.indexOf(":"); name = namePart.substring(0, namePass); password= namePart.substring(namePass + 1); server= addressPart.indexOf(":"); if(server==-1){ ip=addressPart; port="1935"; serverLength=ip.length+1+isEnablePass+1; }else{ ip=addressPart.substring(0,server); port=addressPart.substring(server+1); serverLength=ip.length+port.length+2+isEnablePass+1; } } var app = array[1]; var appLength = app.length + 1; var stream = body.substring(serverLength + appLength); var reList = [ip, port, app, stream,name,password]; return reList; }這樣就會解析url欄位中的使用者名稱和密碼的欄位,使用和原先的方法一樣。
相關文章
- 使用js修改url地址引數JS
- JS 點選複製當前URL地址JS
- POST URL 地址資料開啟URL地址
- 獲取URL地址
- IP地址 、域名、 URL、 埠
- URL地址特殊字元轉換字元
- JavaScript對url地址編碼JavaScript
- 使用 jquery.qrcode.js 生成網站地址url二維碼圖片jQueryJS網站
- [提問交流]URL地址問題,,
- web工程中URL地址的推薦寫法Web
- js解析url的三種方法JS
- 封裝了一個? URL地址解析封裝
- 根據URL地址生成二維碼
- URL地址中的中文亂碼怎麼解決?
- URL地址中的中文亂碼問題的解決
- js解析url引數JS
- URL地址抓取用什麼軟體好?
- js一鍵複製urlJS
- 【iis】URL重寫可以引用原地址內容
- 透過bat檔案批次判斷url地址的狀態BAT
- js獲取url傳遞引數,js獲取url?號後面的引數JS
- FFmpeg開發筆記(三十八)APP如何訪問SRS推流的RTMP直播地址筆記APP
- 簡述瀏覽器輸入 URL 地址後發生的事情瀏覽器
- 3分鐘短文:Laravel slug,讓你的url地址更“好記”Laravel
- js去除url中指定引數JS
- js 原生獲取 url地址引數 const query = new URLSearchParams(window.location.search); const added = query.get("added")JS
- angular4 上傳本地圖片,將拿到的files轉化為url地址,提示sanitizing unsafe URL valueAngular地圖
- 如何查詢SAP Fiori launchpad Designer的準確路徑即url地址
- PbootCMS模板如何輸出當前頁面的完整URL地址boot
- Java web 專案,在網頁url地址訪問名JavaWeb網頁
- js匹配網址url的正規表示式集合JS
- WEB播放RTMP的方案Web
- JS呼叫本地exe(通過URL Protocol)JSProtocol
- js實現獲取URL引數JS
- 軟體的分解-程式語言自帶分解功能
- js解決url中文亂碼問題JS
- UNIX epoll 與 Node.js 事件迴圈多路分解器Node.js事件
- js根據IP地址獲取當前的省市JS