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中:

  1. rtmp://demo.srs.com/live/livestream
  2. rtmp://192.168.1.100/live?vhost=demo.srs.com/livestream
  3. 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字段中的用户名和密码的字段,使用和原先的方法一样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值