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
- js獲取url地址中的引數JS
- POST URL 地址資料開啟URL地址
- JS 點選複製當前URL地址JS
- 常用URL地址
- 獲取URL地址
- IP地址 、域名、 URL、 埠
- javascript如何修改url地址的引數JavaScript
- 獲得url地址?後的引數
- URL地址特殊字元轉換字元
- JavaScript對url地址編碼JavaScript
- javascript獲取url地址的幾種方式JavaScript
- as3獲取url地址的引數S3
- 取本頁URL地址的方法總結
- [提問交流]URL地址問題,,
- jboss歷史版本地址url
- URL toJSON()JSON
- web工程中URL地址的推薦寫法Web
- 使用 jquery.qrcode.js 生成網站地址url二維碼圖片jQueryJS網站
- 封裝了一個? URL地址解析封裝
- 根據URL地址生成二維碼
- 如何規範化網站URL地址?網站
- URL地址中的中文亂碼怎麼解決?
- javascript如何獲取當前網頁的url地址JavaScript網頁
- URL地址中的中文亂碼問題的解決
- 匹配http,https,ftp,ftps以及IP地址的URL地址的正規表示式HTTPFTP
- js處理urlJS
- js解析url的三種方法JS
- URL地址抓取用什麼軟體好?
- java獲取url連線地址引數的工具類Java
- url地址中 "&" "/"等符號的轉義處理(轉)符號
- js解析url引數JS
- FFmpeg開發筆記(三十八)APP如何訪問SRS推流的RTMP直播地址筆記APP
- PHP獲取當前頁面完整URL地址PHP
- 【iis】URL重寫可以引用原地址內容
- 判斷url連結地址是否合法的例項程式碼
- 透過bat檔案批次判斷url地址的狀態BAT