1. 程式人生 > >FreeSWITCH學習筆記 第二場 第二個鏡頭 JsSIP視訊通訊

FreeSWITCH學習筆記 第二場 第二個鏡頭 JsSIP視訊通訊

var outgoingSession = null; var incomingSession = null; var currentSession = null; var meVideo = document.getElementById('meVideo'); meVideo.setAttribute('autoplay', ''); //meVideo.setAttribute('muted', ''); meVideo.setAttribute('playsinline', ''); meVideo.style.width = '360px'
; var youVideo = document.getElementById('youVideo'); youVideo.setAttribute('autoplay', ''); //meVideo.setAttribute('muted', ''); youVideo.setAttribute('playsinline', ''); youVideo.style.width = '360px'; var constraints = { audio: true, video: { faceMode: 'user'
} }; var localStream = null; var userAgent = null; navigator.mediaDevices.getUserMedia(constraints).then(function success(stream) { meVideo.srcObject = stream; document.body.addEventListener('click', function() { meVideo.play(); }); // wait until the video stream is ready
var interval = setInterval(function(){ if(!meVideo.videoWidth){ return; } //stage.appendChild(videoView); clearInterval(interval); }, 1000 / 50); }).catch(function(error){ onError({ name: error.name, message: error.message }); }); function testStart(){ var sip_uri = document.getElementById("sip_uri").value.toString(); var sip_password = document.getElementById("sip_password").value.toString(); var ws_uri = document.getElementById("ws_uri").value.toString(); console.info("get input info: sip_uri = ", sip_uri, " sip_password = ", sip_password, " ws_uri = ", ws_uri); var socket = new JsSIP.WebSocketInterface(ws_uri); var configuration = { sockets: [ socket ], outbound_proxy_set: ws_uri, uri: sip_uri, password: sip_password, register: true, session_timers: false }; userAgent = new JsSIP.UA(configuration); userAgent.on('registered', function(data) { console.info("registered: ", data.response.status_code, ",", data.response.reason_phrase); }); userAgent.on('registrationFailed', function(data) { console.log("registrationFailed, ", data); }); userAgent.on('registrationExpiring', function() { console.warn("registrationExpiring"); }); userAgent.on('newRTCSession', function(data) { console.info('onNewRTCSession: ', data); if(data.originator == 'remote') { console.info("incomingSession, answer the call"); incomingSession = data.session; data.session.answer({'mediaConstraints' : constraints, 'mediaStream': null}); } else { console.info("outgoingSession"); outgoingSession = data.session; outgoingSession.on('connecting', function(data){ console.info('onConnecting - ', data.request); currentSession = outgoingSession; outgoingSession = null; }); } data.session.on('accepted', function(data){ console.info('onAccepted - ', data); if(data.originator == 'remote' && currentSession == null){ currentSession = incomingSession; incomingSession = null; console.info("setCurrentSession - ", currentSession); } }); data.session.on('confirmed', function(data){ console.info('onConfirmed - ', data); if(data.originator == 'remote' && currentSession == null){ currentSession = incomingSession; incomingSession = null; console.info("setCurrentSession - ", currentSession); } }); data.session.on('sdp', function(data){ console.info('onSDP, type - ', data.type, ' sdp - ', data.sdp); //data.sdp = data.sdp.replace('UDP/TLS/RTP/SAVPF', 'RTP/SAVPF'); //console.info('onSDP, changed sdp - ', data.sdp); }); data.session.on('progress', function(data){ console.info('onProgress - ', data.originator); if(data.originator == 'remote'){ console.info('onProgress, response - ', data.response); } }); data.session.on('peerconnection', function(data){ console.info('onPeerconnection - ', data.peerconnection); data.peerconnection.onaddstream = function(ev){ console.info('onaddstream from remote - ', ev); youVideo.srcObject = ev.stream; document.body.addEventListener('click', function() { meVideo.play(); }); // wait until the video stream is ready var interval = setInterval(function(){ if(!meVideo.videoWidth){ return; } //stage.appendChild(videoView); clearInterval(interval); }, 1000 / 50); }; }); }); userAgent.on('newMessage', function(data){ if(data.originator == 'local'){ console.info('onNewMessage , OutgoingRequest - ', data.request); }else{ console.info('onNewMessage , IncomingRequest - ', data.request); } }); console.info("call register"); userAgent.start(); } // Register callbacks to desired call events var eventHandlers = { 'progress': function(e) { console.log('call is in progress'); }, 'failed': function(e) { console.log('call failed: ', e); alert('呼叫失敗'); }, 'ended': function(e) { console.log('call ended : ', e); }, 'confirmed': function(e) { console.log('call confirmed'); } }; function testCall(){ var sip_phone_number = document.getElementById("sip_phone_number").value.toString(); var options = { 'eventHandlers' : eventHandlers, 'mediaConstraints' : constraints, 'mediaStream': null }; outgoingSession = userAgent.call(sip_phone_number, options); }