ringcentral-softphone
Advanced tools
Comparing version 0.1.7 to 0.1.8
@@ -20,6 +20,5 @@ import RingCentral from '@ringcentral/sdk' | ||
await rc.logout() // rc is no longer needed | ||
const inputAudioStream = await navigator.mediaDevices.getUserMedia({ audio: true, video: false }) | ||
const audioElement = document.getElementById('audio') | ||
softphone.on('INVITE', sipMessage => { | ||
softphone.answer() | ||
softphone.on('INVITE', async sipMessage => { | ||
softphone.on('track', e => { | ||
@@ -29,2 +28,3 @@ audioElement.srcObject = e.streams[0] | ||
}) | ||
await softphone.answer(inputAudioStream) | ||
}) | ||
@@ -31,0 +31,0 @@ softphone.on('BYE', () => { |
import RingCentral from '@ringcentral/sdk' | ||
import fs from 'fs' | ||
import { nonstandard } from 'wrtc' | ||
import { nonstandard, MediaStream } from 'wrtc' | ||
import RTCAudioSource from 'node-webrtc-audio-source' | ||
@@ -9,2 +10,4 @@ import Softphone from '../src/index' | ||
const rtcAudioSource = new RTCAudioSource() | ||
const rc = new RingCentral({ | ||
@@ -32,4 +35,3 @@ server: process.env.RINGCENTRAL_SERVER_URL, | ||
} | ||
softphone.on('INVITE', sipMessage => { | ||
softphone.answer() | ||
softphone.on('INVITE', async sipMessage => { | ||
softphone.on('track', e => { | ||
@@ -42,4 +44,10 @@ audioSink = new RTCAudioSink(e.track) | ||
}) | ||
const stream = new MediaStream() | ||
const track = rtcAudioSource.createTrack() | ||
stream.addTrack(track) | ||
await softphone.answer(stream) | ||
rtcAudioSource.start() | ||
}) | ||
softphone.on('BYE', () => { | ||
rtcAudioSource.stop() | ||
audioSink.stop() | ||
@@ -46,0 +54,0 @@ audioStream.end() |
@@ -152,3 +152,3 @@ "use strict"; | ||
async answer() { | ||
async answer(inputAudioStream = undefined) { | ||
const sdp = this.inviteSipMessage.body; | ||
@@ -159,3 +159,3 @@ const remoteRtcSd = new _isomorphicWebrtc.RTCSessionDescription({ | ||
}); | ||
const rtcpc = new _isomorphicWebrtc.RTCPeerConnection({ | ||
const pc1 = new _isomorphicWebrtc.RTCPeerConnection({ | ||
iceServers: [{ | ||
@@ -165,8 +165,14 @@ urls: 'stun:74.125.194.127:19302' | ||
}); | ||
rtcpc.addEventListener('track', e => { | ||
pc1.addEventListener('track', e => { | ||
this.emit('track', e); | ||
}); | ||
rtcpc.setRemoteDescription(remoteRtcSd); | ||
const localRtcSd = await rtcpc.createAnswer(); | ||
rtcpc.setLocalDescription(localRtcSd); | ||
pc1.setRemoteDescription(remoteRtcSd); | ||
if (inputAudioStream) { | ||
const track = inputAudioStream.getAudioTracks()[0]; | ||
pc1.addTrack(track, inputAudioStream); | ||
} | ||
const localRtcSd = await pc1.createAnswer(); | ||
pc1.setLocalDescription(localRtcSd); | ||
await this.send(new _ResponseSipMessage.default(this.inviteSipMessage, 200, 'OK', { | ||
@@ -173,0 +179,0 @@ Contact: `<sip:${this.fakeEmail};transport=ws>`, |
{ | ||
"name": "ringcentral-softphone", | ||
"version": "0.1.7", | ||
"version": "0.1.8", | ||
"license": "MIT", | ||
@@ -32,5 +32,8 @@ "main": "dist/index.js", | ||
"jest": "^24.9.0", | ||
"mic": "^2.1.2", | ||
"node-webrtc-audio-source": "^0.1.1", | ||
"ramda": "^0.26.1", | ||
"standard": "^14.2.0", | ||
"webpack": "^4.40.2", | ||
"webpack-cli": "^3.3.9", | ||
"webpack-dev-server": "^3.8.1", | ||
@@ -37,0 +40,0 @@ "wrtc": "^0.4.2", |
# RingCentral Softphone SDK for JavaScript | ||
## Experimental | ||
This project is still in its early stage. It is not ready for production yet! | ||
## What are the differences between ringcentral-web-phone and this project? | ||
@@ -41,8 +36,11 @@ | ||
await rc.logout() | ||
// const stream = <input-audio-stream-from-microphone> | ||
softphone.on('INVITE', sipMessage => { | ||
softphone.answer() | ||
softphone.answer(stream) | ||
softphone.on('track', e => { | ||
// phone call connected | ||
const { track, streams } = e | ||
// you can audio data from track and streams | ||
// you can get audio data from track and streams | ||
}) | ||
@@ -129,3 +127,2 @@ }) | ||
- state machine | ||
- make outbound call |
@@ -110,12 +110,16 @@ import uuid from 'uuid/v4' | ||
async answer () { | ||
async answer (inputAudioStream = undefined) { | ||
const sdp = this.inviteSipMessage.body | ||
const remoteRtcSd = new RTCSessionDescription({ type: 'offer', sdp }) | ||
const rtcpc = new RTCPeerConnection({ iceServers: [{ urls: 'stun:74.125.194.127:19302' }] }) | ||
rtcpc.addEventListener('track', e => { | ||
const pc1 = new RTCPeerConnection({ iceServers: [{ urls: 'stun:74.125.194.127:19302' }] }) | ||
pc1.addEventListener('track', e => { | ||
this.emit('track', e) | ||
}) | ||
rtcpc.setRemoteDescription(remoteRtcSd) | ||
const localRtcSd = await rtcpc.createAnswer() | ||
rtcpc.setLocalDescription(localRtcSd) | ||
pc1.setRemoteDescription(remoteRtcSd) | ||
if (inputAudioStream) { | ||
const track = inputAudioStream.getAudioTracks()[0] | ||
pc1.addTrack(track, inputAudioStream) | ||
} | ||
const localRtcSd = await pc1.createAnswer() | ||
pc1.setLocalDescription(localRtcSd) | ||
await this.send(new ResponseSipMessage(this.inviteSipMessage, 200, 'OK', { | ||
@@ -122,0 +126,0 @@ Contact: `<sip:${this.fakeEmail};transport=ws>`, |
Sorry, the diff of this file is not supported yet
70119
979
20
127