SIP.js的0.20.0版本是使用typescript开源的JavaScript库
npm install sip.js
<script lang="ts">
import { UserAgent, UserAgentOptions, Registerer, Inviter, SessionState } from 'sip.js'
const transportOptions = {
server: "wss://xxxxx.xxxx"
}
const uri = UserAgent.makeURI("sip:分机号@服务器地址")
const userAgentOptions: UserAgentOptions = {
authorizationPassword: '',
authorizationUsername: '',
transportOptions,
uri
}
const userAgent = new UserAgent(userAgentOptions)
const registerer = new Registerer(userAgent)
userAgent.start()
.then(() => {
registerer.register()
const target: any = UserAgent.makeURI("sip:被叫号码@服务器地址")
const inviter = new Inviter(userAgent, target);
inviter.invite()
})
</script>
- 挂断电话,如果是使用的简单用户,那么直接调用simpleUser.hangup()即可,使用完全API的用户,需要判断下通话状态,接通前的建立阶段和接通后的确立阶段挂断电话调用的方法不同
inviter.stateChange.addListener((state: SessionState) => {
switch (state) {
case SessionState.Initial: console.log('SessionState.Initial')
break;
case SessionState.Establishing: console.log('SessionState.Establishing')
break;
case SessionState.Established: console.log('SessionState.Established')
break;
case SessionState.Terminating: console.log('SessionState.Terminating')
case SessionState.Terminated: console.log('SessionState.Terminated')
break;
default:
throw console.log(`Unknown session state.`)
}
})
- 建立阶段使用
inviter.cancel()
,确立阶段使用inviter.bye()
- 简单用户的demo,简单用户的方法都很简单直接调用方法即可
<script lang="ts">
import { SimpleUser,SimpleUserOptions,SimpleUserDelegate} from 'sip.js/lib/platform/web'
import { UserAgent} from 'sip.js'
let displayName = "分机号"
let webSocketServer = "wss://Websocket URL"
let target = "sip:被叫号码@服务器地址"
let uri = UserAgent.makeURI("sip:分机号@服务器地址")
let simpleUserOptions: SimpleUserOptions = {
media: {
remote: {
audio: document.getElementById('audio')
}
},
userAgentOptions: {
displayName,
authorizationPassword: '',
authorizationUsername: '',
uri
}
}
let simpleUser = new SimpleUser(webSocketServer,simpleUserOptions)
simpleUser.connect()
simpleUser.register()
simpleUser.call(target,{inviteWithoutSdp: false})
simpleUser.hangup()
simpleUser.disconnect()
</script>