pc网站开发成app难度,保定seo建站,文化宣传 加强网站建设 创办网站,基于网站的app开发写在前面#xff1a;FreeSWITCH作为服务器#xff0c;通过SIP协议#xff0c;Web端使用jssipwebrtc和其他软电话进行通信一、先配置FreeSWITCH(用的版本1.6.20)的配置#xff1a;1 、修改vars.xml文件#xff0c;找到下面字段#xff0c;并设置2、修改 autoload_configs/…写在前面FreeSWITCH作为服务器通过SIP协议Web端使用jssipwebrtc和其他软电话进行通信一、先配置FreeSWITCH(用的版本1.6.20)的配置1 、修改vars.xml文件找到下面字段并设置2、修改 autoload_configs/acl.conf.xml文件增加acl选项在配置文件 sip_profiles/internal.xml 增加如下配置默认情况下建立连接失败提示下面错误,并呼叫失败a21d347d-5622-451b-a1db-d241ca823e4d 2018-08-09 20:28:15.217384 [WARNING] switch_core_media.c:3451 NO candidate ACL defined, Defaulting to wan.autoa21d347d-5622-451b-a1db-d241ca823e4d 2018-08-09 20:28:15.217384 [DEBUG] switch_core_media.c:3481 Save audio Candidate cid: 1 proto: udp type: host addr: 10.10.21.32:52786a21d347d-5622-451b-a1db-d241ca823e4d 2018-08-09 20:28:15.217384 [DEBUG] switch_core_media.c:3523 Searching for rtp candidate.a21d347d-5622-451b-a1db-d241ca823e4d 2018-08-09 20:28:15.217384 [DEBUG] switch_core_media.c:3523 Searching for rtcp candidate.a21d347d-5622-451b-a1db-d241ca823e4d 2018-08-09 20:28:15.217384 [DEBUG] switch_core_media.c:3567 sofia/internal/82s6ps5e80ug9oo63ltj.invalid no suitable candidates found.a21d347d-5622-451b-a1db-d241ca823e4d 2018-08-09 20:28:15.217384 [DEBUG] switch_core_media.c:4767a21d347d-5622-451b-a1db-d241ca823e4d 2018-08-09 20:28:15.217384 [NOTICE] sofia.c:8240 Hangup sofia/internal/82s6ps5e80ug9oo63ltj.invalid [CS_CONSUME_MEDIA] [INCOMPATIBLE_DESTINATION]5fe89e1d-bb0c-473b-8877-d3648acd4076 2018-08-09 20:28:15.217384 [DEBUG] switch_core_codec.c:248 sofia/internal/1009192.168.20.78 Restore previous codec PCMA:8.a21d347d-5622-451b-a1db-d241ca823e4d 2018-08-09 20:28:15.217384 [DEBUG] sofia.c:1453 Channel is already hungup.在配置文件 sip_profiles/internal.xml 增加如下配置解决这个问题二、编写Web客户端样式如下不是专业前端没有做布局启动之后就和正常的SIP软终端一致了通过FreSWITCH拨打其他软终端测试正常。源代码基于JsSIP的客户端参考网上并自己修改并调试通过JsSIP 对接 FreeSWITCHstylewidth: 424px; height: 260px; background-color: #f2f4f4; border: 1px solid grey; padding-top: 4pxSIP URI:SIP Password:WSS URI:SIP Phone Info: 初始化 注册 注销 呼叫 挂断var outgoingSession null;var incomingSession null;var currentSession null;var videoView document.getElementById(videoView);var constraints {audio: true,video: false,mandatory: {maxWidth: 640,maxHeight: 360}};URL window.URL || window.webkitURL;var localStream null;var userAgent null;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);//console.warn(registrationFailed, , data.response.status_code, ,, data.response.reason_phrase, cause - , data.cause);});//注册超时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: {audio: true,video: false,mandatory: {maxWidth: 640, maxHeight: 360}}, mediaStream: localStream});} 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.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);videoView.src URL.createObjectURL(ev.stream);};});});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 eventsvar eventHandlers {progress: function (e) {console.log(call is in progress);},failed: function (e) {console.log(call failed: , e);},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: {audio: true, video: false,mandatory: {maxWidth: 640, maxHeight: 360}},mediaStream: localStream};outgoingSession userAgent.call(sip_phone_number_, options);}function reg() {console.log(register-----------);userAgent.register();}function unReg() {console.log(unregister-----------);userAgent.unregister(true);}function hangup() {console.log(hangup-----------);userAgent.terminateSessions();}