• FreeSWITCH 1.10.10 简单图形化界面11 - 简单封装一下JSSIP


    FreeSWITCH 1.10.10 简单图形化界面11 - 简单封装一下JSSIP


    FreeSWITCH界面安装参考:https://blog.csdn.net/jia198810/article/details/132479324

    0、 界面预览

    http://myfs.f3322.net:8020/
    用户名:admin,密码:admin

    FreeSWITCH界面安装参考:https://blog.csdn.net/jia198810/article/details/132479324


    1、前言

    使用JSSIP拨打电话,通过研究官网,实现起来确实不太难、自己感觉难得是各种网络环境及各种修改配合VOIP服务器配置。
    这几天简单封装了一下jssip,基本200行代码实现网页拨号,有小伙伴用到的,做个参考。

    2、demo地址

    直接右击看源码,js文件下载即可。

    网址在这里

    3、简单演示

    简单演示一下。

    20230917_234207

    *上传了一个视频,模糊成这个样子了。,服了

    4、demo代码

    备份一下代码,代码这玩意过几天自己都忘的差不多了。

    DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <title>MyJsSIP Demotitle>
    head>
    
    <body>
        <video id="localvideo" controls="controls" style="
                    border: 1px solid blue;
                    width: 100%;
                    height: 200px;
                    text-align: right;
                  " muted>video>
        <video id="remotevideo" controls="controls" style="
                    border: 1px solid blue;
                    width: 100%;
                    height: 200px;
                    text-align: right;
                  " muted>video>
        <button onclick="openLocalMedia()">打开本地摄像头button>
        <button onclick="closeLocalMedia()">关闭本地摄像头button>
        <input type="text" id="username" value="2001" placeholder="用户名" autocomplete="on">
        <input type="text" id="password" value="2001" placeholder="密码" autocomplete="on">
        <input type="text" id="server" value="pbx.x3322.net" placeholder="服务器地址" autocomplete="on">
        <button onclick="start()">首先初始化button>
        <input type="text" id="calleeNumber" value="401" placeholder="被叫号码" autocomplete="on">
        <button onclick="makeCall('audio')">发起音频呼叫button>
        <button onclick="makeCall('video')">发起视频呼叫button>
        <button onclick="answer()">接听button>
        <button onclick="sendDtmf(0)">发送dtmf(0)button>
        <button onclick="hangup()">挂断button>
        <button onclick="unRegister()">注销button>
        <button onclick="stop()">结束一切button>
        <div id="log">div>
    
    
        <script src="static/js/myjssip-3.10.0.js">script>
        <script>
            // 实例化 MyJsSIP 对象,并指定配置选项和事件回调
            myJsSIP = new MyJsSIP({
                //账号
                username: '',
                //密码
                password: '',
                //服务器地址
                server: '',
                //服务器端口
                port: '7443',
                //ice设置
                //enableIce:  false,
                //服务器地址
                //iceServer: 'stun:test.sipserver.cn:3478?transport=udp',
                //turn服务器用户名
                //iceUsername:'turnuser',
                //turn服务器密码
                //icePassword:'123456',
                //本地视频控件id
                localVideoElementId: "localvideo",
                //远端视频控件id,只能拨打音频通话
                remoteVideoElementId: "remotevideo",
    
                //来电铃声
                ringToneSound: "static/sounds/incomingcall.mp3",
                //日志
                log: true,
                //jssip日志
                jssiplog: false,
                //回调
                // onRegistered: function (e) {
                //     console.log('注册成功:', e);
                // },
                // onUnregistered: function (e) {
                //     console.log('取消注册:', e);
                // },
                // onRegistrationFailed: function (e) {
                //     console.log("注册失败:", e)
                // },
                // onDisconnected: function (response, cause) {
                //     console.log("连接断开:", response, cause)
                // },
                // onIncomingCall: function (e) {
                //     console.log("有来电:", e)
                // },
                // onCallProgress: function (e) {
                //     console.log("呼叫进行中:", e)
                // },
                // onCallConnecting: function (e) {
                //     console.log("呼叫连接中:", e)
                // },
                // onCallConfirmed: function (e) {
                //     console.log("呼叫接听:", e)
                // },
                // onCallFailed: function (e) {
                //     console.log("呼叫失败:", e)
                // },
                // onCallEnded: function (e) {
                //     console.log("呼叫结束:", e)
                // },
            });
    
            //开启本地摄像头
            function openLocalMedia() {
                myJsSIP.openLocalMedia()
            }
            //关闭本地摄像头
            function closeLocalMedia() {
                myJsSIP.closeLocalMedia()
            }
    
            //初始化,连接服务器,注册账号
            function start() {
                //账号
                myJsSIP.username = document.getElementById('username').value
                //密码
                myJsSIP.password = document.getElementById('password').value
                //服务器地址
                myJsSIP.server = document.getElementById('server').value
                //启动
                myJsSIP.start();
            }
    
            //注销号码,结束ua,断开连接
            function stop() {
                myJsSIP.stop();
            }
    
            //应答呼叫
            function answer() {
                myJsSIP.answer();
            }
    
            //挂断呼叫
            function hangup() {
                myJsSIP.hangup();
    
            }
            //发起呼叫.
            function makeCall(mediaType) {
                let calleeInput = document.getElementById("calleeNumber")
                calleeNumber = calleeInput.value;
                //calleeNumber 被叫号码; meidaType 呼叫类型=audio / video
                myJsSIP.makeCall(calleeNumber, mediaType);
            }
            //注销号码
            function unRegister() {
                myJsSIP.unRegister()
            }
    
            //发送dtmf
            function sendDtmf(value) {
                myJsSIP.sendDtmf(value);
            }
    
        script>
    body>
    
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
  • 相关阅读:
    信号量优先级反转问题记录(总是遗忘)
    Windows下搭建GTK3开发环境
    2022年安徽省技术创新示范企业奖励补贴标准以及申报条件(附合肥市各地区奖补标准)
    十、非线性激活函数
    select_characters
    MB51选择屏幕与报表增强
    Springboot旅游网站管理系统3ogg3计算机毕业设计-课程设计-期末作业-毕设程序代做
    java.lang.Float类下isInfinite(float v)方法具有什么功能呢?
    OS--学习笔记:调度与死锁
    Golang 继承
  • 原文地址:https://blog.csdn.net/jia198810/article/details/132957281