/*
* 该API配合服务器端API模块使用
* hhMedia/svr/nodesvr.js
* *//**/function TKmsClient(){this.config={apiUrl :"https://wss.hhdata.cn:20020/hhapi" ,wsUrl:"wss://wss.hhdata.cn:20020/hhws" ,kurentUrl:"wss://wss.hhdata.cn:8433/kurento",defaultPeerOptions:{configuration: {"iceServers":[{urls:"stun:223.68.161.139:3478"},{urls:["turn:223.68.161.139:3478"],username:"kurento",credential: "kurento"}]},mediaConstraints:{audio: true,video: {width: {exact: 1280}, height: {exact: 720}}},localVideo: null ,remoteVideo: null}};this.kmsPeerTypes={send:kurentoUtils.WebRtcPeer.WebRtcPeerSendonly,rec:kurentoUtils.WebRtcPeer.WebRtcPeerRecvonly,sendRec:kurentoUtils.WebRtcPeer.WebRtcPeerSendrecv}this.events={onWsOpen: function (ws) {} ,onWsClose: function (ws) {} ,onWsMsg: function (ws, msg) {} ,};this.objs={kurentClient:null,ws:null};this.callBack = function( callback , ps){if( callback){try{callback(ps);}catch (er) {console.log(er)}}}
}
TKmsClient.prototype.callApi = function( ac , data , callback){var me = this;try{var aUrl = me.config.apiUrl+"/"+ac+"?tm="+( new Date()).getTime().toString();$.ajax({url: aUrl ,data : data ,type:"POST",success: function (resData) {try{var res = JSON.parse(resData);me.callBack(callback , res);}catch (erSuccess) {console.log(erSuccess);}},error: function (er0, er1  ) {try{var res = JSON.parse(resData);me.callBack(callback , {er0:er0 , er1:er1});}catch (erSuccess) {console.log(erSuccess);}}})}catch (er) {console.log(er);}
};
TKmsClient.prototype.dbQuery = function( appName , key , ps , callback){var me = this;try{var data ={app:appName ,key: key ,ps:JSON.stringify(ps)};var ac ="queryArray";me.callApi(ac , data , callback);}catch (er) {console.log(er);}
};
TKmsClient.prototype.dbQueryDict = function( appName , key , ps , callback){var me = this;try{var data ={app:appName ,key: key ,ps:JSON.parse(ps)};var ac ="queryDict";me.callApi(ac , data , callback);}catch (er) {console.log(er);}
};
TKmsClient.prototype.openWs = function( onOpen , onClose , onMsg ){var me = this;try{var ws = new WebSocket(me.config.wsUrl);ws.onopen = function(){//当WebSocket创建成功时,触发onopen事件console.log("wss is openned!");if( onOpen){try{onOpen(ws);}catch (e1) {console.log(e1);}}};ws.onerror = function(){try{ws.close();}catch (e1) {console.log(e1);}};ws.onclose = function(){try{if( onClose){try{onClose(ws);}catch (e1) {console.log(e1);}}}catch (e1) {console.log(e1);}};ws.onmessage = function(e){//当客户端收到服务端发来的消息时,触发onmessage事件,参数e.data包含server传递过来的数据console.log(e.data);try{var msg = JSON.parse(e.data);if( msg.id == "s2cSetWsId" ){ws.wsId = msg.body.wsId;}else  if( onMsg){onMsg(ws,msg);}}catch (err) {console.log(err);}};me.objs.ws = ws;}catch (er) {console.log(er);}
};
TKmsClient.prototype.wsSendMsg = function( id , body ){var me = this;try{if( me.objs.ws){me.objsws.send(JSON.parse({id:id,body:body}));}}catch (er) {console.log(er);}
};
TKmsClient.prototype.wsSetInfo = function( key, data ){var me = this;try{me.wsSendMsg("setWsInfo",{wsId: me.objs.ws.wsId ,  key:key, data:data});}catch (er) {console.log(er);}
};
TKmsClient.prototype.wsGetInfo = function( key, callback ){var me = this;try{me.callApi("getWsInfo",{wsId: me.objs.ws.wsId, key:key}, callback);}catch (er) {console.log(er);}
};
TKmsClient.prototype.wsMutilcast = function( groupId , data , callback ){var me = this;try{me.wsSendMsg("wsMutilcast",{groupId:groupId , data:data});}catch (er) {console.log(er);}
};
TKmsClient.prototype.wsSetGroup = function( groupId , callback ){var me = this;try{me.wsSendMsg("wsMutilcast",{wsId: me.objs.ws.wsId,  groupId:groupId , data:data});}catch (er) {console.log(er);}
};
TKmsClient.prototype.ioSetData = function(  key , data , callback ){var me = this;try{me.callApi('setData',{key:key, data:data}, callback);}catch (er) {console.log(er);}
};
TKmsClient.prototype.ioGetData = function( key , callback ){var me = this;try{me.callApi('getData',{key:key, data:data}, callback);}catch (er) {console.log(er);}
};
TKmsClient.prototype.kmsGetClient = function( callback){var me = this;try{if (me.objs.kurentClient){me.callBack(callback, {res:me.objs.kurentClient, error:null});}else {kurentoClient(me.config.kurentUrl, function (error, client) {if (client) {me.objs.kurentClient = client;}me.callBack(callback, {res:client, error:error});});}}catch (er) {console.log(er);}
};
TKmsClient.prototype.kmsBindPeerAndEndpoint = function ( peer , endpoint,  callback) {var me = this;try{if( endpoint && peer){peer.generateOffer(function (errorPeerGenerateOffer, sdpOffer) {if( errorPeerGenerateOffer && callback){callback( errorPeerGenerateOffer , null);}else {endpoint.processOffer(sdpOffer, function (errorSdpOffer, sdpAnswer) {if (errorSdpOffer && callback) {console.log("process sdpOffer error.", errorSdpOffer)callback(errorSdpOffer, null);} else {me.setCandidateEvent(peer , endpoint);peer.processAnswer(sdpAnswer);endpoint.gatherCandidates(function (errorGatherCandidates) {if (errorGatherCandidates && callback) {console.log('webRtcPoint gatherCandidates error.', errorGatherCandidates)callback(errorGatherCandidates, null);}else{peer.endpoint = endpoint;endpoint.peer = peer;if( callback) {callback(null, {endpoint: endpoint, peer: peer});}}});}});}});}else {if( callback) {callback({ error:"endPoint or peer is null."}, null);}}}catch (er) {console.log(er,"bindPeerAndEndpoint error.");}
};
TKmsClient.prototype.setCandidateEvent = function( peer , endpoint   ){var me = this;try{if( peer && endpoint){endpoint.on('OnIceCandidate', function(event) {var candidate = event.candidate;peer.addIceCandidate(candidate);console.log('candidate w->p')});peer.on('icecandidate', function(candidate){var iceCandidate = kurentoClient.register.complexTypes.IceCandidate(candidate);endpoint.addIceCandidate(iceCandidate);console.log('candidate p->w')});}}catch (er) {console.log(er,"setCandidateEvent error.");}
};TKmsClient.prototype.kmsFreeEndpoint = function ( endpoint) {var me = this;try{if( endpoint  ){endpoint.release(function (err) {console.log('free endpoint.')});endpoint = null;}}catch (er) {console.log(er,"freeEndpoint error.");}
};
TKmsClient.prototype.kmsFreePeer = function ( peer) {var me = this;try{if( peer  ){if( peer.peerConnection){peer.peerConnection.close();}peer.dispose();peer = null;}}catch (er) {console.log(er,"freePeer error.");}
};
TKmsClient.prototype.kmsCreatePeer = function ( localVideo , remoteVideo , sendSource, beforeCreateCallback ,callback) {var me = this;try{var opts= JSON.parse(JSON.stringify(me.config.defaultPeerOptions));var localFlag = false;if( localVideo && (localVideo!=null)){opts.localVideo = localVideo;localFlag = true;}var remoteFlag = false;if( remoteVideo && (remoteVideo!=null)){opts.remoteVideo = remoteVideo;remoteFlag = true;}if( sendSource=="window" || sendSource=="screen" || sendSource=="desktop"){opts.sendSource = sendSource;}var createFactory = null;if( (localFlag)&&(!remoteFlag) ){createFactory = kurentoUtils.WebRtcPeer.WebRtcPeerSendonly;}else  if( (!localFlag)&&(remoteFlag) ){createFactory = kurentoUtils.WebRtcPeer.WebRtcPeerRecvonly;}else  if( (localFlag)&&(remoteFlag) ){createFactory = kurentoUtils.WebRtcPeer.WebRtcPeerSendrecv;}if( beforeCreateCallback){try{beforeCreateCallback(opts);}catch (e0) {console.log(e0)}}var res ={error:null,peer:null}if( createFactory){var peer = createFactory(opts , function (err) {//opts.video ={ width:1280, height:720};var peerId = "peer_"+( new Date()).getTime().toString();peer.clientId = peerId;peer.peerConnection.addEventListener('iceconnectionstatechange', function(event){if( event){console.log('create peer error.', event);}else {if (peer && peer.peerConnection) {console.log("oniceconnectionstatechange -> " + peer.peerConnection.iceConnectionState);console.log('icegatheringstate -> ' + peer.peerConnection.iceGatheringState);}}});res.error = err;res.peer = peer;me.callBack(callback, res);})}else{res.error ="createFactory error.";me.callBack(callback, res);}}catch (er) {console.log(er,"createPeer error.");}
};
TKmsClient.prototype.kmsGetAvDevices = function ( callback) {var me = this;try{var res ={};
/*navigator.mediaDevices.enumerateDevices(function (devs) {for( var i=0;i<devs.length;i++){var item = devs[i];if( !res[item.kind]){res[item.kind]=[]}res[item.kind].push(item);}console.log(res);if (callback){callback({error: null, devices:res});}});
*/navigator.mediaDevices.enumerateDevices().then(function (devs) {for( var i=0;i<devs.length;i++){var item = devs[i];if( !res[item.kind]){res[item.kind]=[]}res[item.kind].push(item);}console.log(res);if (callback){callback({error: null, devices:res});}});}catch (er) {console.log(er,"createPeer error.");}
};
TKmsClient.prototype.changeCamera = function ( peer, newCameraDeviceId , callback) {var me = this;try{var result={error:null , res: null}//var constraints = {video: {deviceId: {exact: newCameraDeviceId}}};var constraints = {video: {deviceId: newCameraDeviceId}};var sender = null;navigator.mediaDevices.getUserMedia(constraints).then(function (stream) {try{if( stream){let videoTrack = stream.getVideoTracks()[0];peer.localVideo.srcObject = stream;sender = peer.peerConnection.getSenders().find(function (s) {return s.track.kind == videoTrack.kind;});sender.track.stop();sender.replaceTrack(videoTrack);result.res = constraints;if( callback){callback(result);}}else{if( callback){result.error = "stream is null";callback(result);}}}catch (er) {console.log(er);}});}catch (er) {console.log(er);}
}
TKmsClient.prototype.kmsShareScreen = function ( peer , callback) {var me = this;try{if (navigator.mediaDevices.getDisplayMedia) {navigator.mediaDevices.getDisplayMedia({video:true}).then(function (stream) {let videoTrack = stream.getVideoTracks()[0];peer.localVideo.srcObject = stream;sender = peer.peerConnection.getSenders().find( function (s) {return s.track.kind == videoTrack.kind;});sender.track.stop();sender.replaceTrack(videoTrack);if( callback) {callback( );}})}}catch (er) {console.log(er);}
}
TKmsClient.prototype.kmsCreatePeerEnd = function ( pipe, shareScreenFlag , localVideo , remoteVideo, callback) {var me = this;try{var result={error:null,peer: null,endpoint:null};var shareOpts = shareScreenFlag?"screen":"webcam";me.kmsCreatePeer(localVideo, remoteVideo , shareOpts, null , function (res) {if( res.error ){result.error = res.error;me.callBack(callback,result);}else{result.peer = res.peer;pipe.create("WebRtcEndpoint", function ( errEnd , end) {result.endpoint = end;if( errEnd){result.error = errEnd;me.callBack(callback , result);}else{me.kmsBindPeerAndEndpoint(res.peer , end, function () {me.callBack(callback , result);})}})}})}catch (er) {console.log(er);}
}

Kurento 客户端相关推荐

  1. 什么是Kurento

    2019独角兽企业重金招聘Python工程师标准>>> Kurento是一个WebRTC媒体服务器和一组简化WWW和智能手机平台的高级视频应用程序的开发客户端API.Kurento的 ...

  2. 关于Kurento 和 WebRTC-Kurento学习(一)

    关于Kurento 和 WebRTC 关于Kurento 和 WebRTC Kurento是一个WebRTC媒体服务器和一组客户端API,简化了针对web和智能手机平台的高级视频应用程序的开发.它的特 ...

  3. kurento 6.14.0文档翻译第十一章 Kurento常用问题

    11.1关于NAT,ICE,STUN,TURN 这些是非常重要的概念,开发人员必须充分理解才能使用WebRTC,这是有关这些首字母缩略词的所有Kurento的集合: 1.词汇: --什么是NAT -- ...

  4. Kurento Java Tutorial - Hello World

    Kurento Java Tutorial - Hello World 这个web应用程序是为Java开发人员介绍用Kurento编程的原则而设计的.它包含一个WebRTC镜像视频通信(环回).本教程 ...

  5. kurento 6.14.0文档翻译第九章 编写Kurento应用程序

    目录 编写Kurento应用程序 全局架构 通讯客户端,服务器和Kurento 媒体协商阶段(信令) 媒体交换阶段 使用实时的WebRTC应用 媒体平面 9.1全局架构 可以按照网络的架构原理使用Ku ...

  6. kurento教程_Kurento应用开发指南(以Kurento 6.0为模板) 之七:Kurento API 参考

    13.1 Kurento API 参考 Kurento媒体服务器提供了一套API给高级语言使用,以用于应用程序开发人员来控制它. 这些API可以被用于Java或Javascript开发的Kurento ...

  7. kurento教程_如何使用WebRTC和Kurento媒体服务器,来建立视频会议App(一)

    原文标题:[TUTORIAL] ​How ​to ​Build ​a ​Video Conference ​Application ​with WebRTC ​& ​Kurento ​Medi ...

  8. kurento 6.14.0文档翻译 第一章 关于kurento与webrtc

    第一章:关于kurento与webrtc Kurento是一个Webrtc媒体服务,通过客户端API为网页和手机平台更轻松的开发高级的视频程序,Kurento包括组通信.转码.录制.混淆.广播和路由音 ...

  9. Kurento应用开发指南(以Kurento 6.0为模板) 之八: Kurento协议

    14.1 Kurento协议 Kurento媒体服务器可以被两种外部Kurento客户端控制,如Java或JavaScript. 这些客户端使用Kuernto协议来和KMS通信. Kurento协议是 ...

最新文章

  1. WIN7源码安装Apache和PHP注意事项
  2. lab_2 Selenium
  3. 为什么你那么努力,却很难突破技术瓶颈?
  4. 网友问答之:AD、DNS转发器、WINS不能自动启动
  5. matlab 多个波段,MatLab读取ENVI图像统计多波段图像信息
  6. 经常在比特币中看到的merkle树是什么?
  7. vb子程序未定义怎么改怎么办_煤粉输送不畅、秤不稳怎么办?多家企业这样改!...
  8. k8s 集群居然可以图形化安装了?
  9. [转载] python中print()函数的用法和end=““不换行详解
  10. Python的os模块常用文件夹的增删改查详解
  11. zoho配置dmarc_停止[营销]电子邮件反弹! 如何配置SPF,DMARC和DKIM
  12. 小米手机将终结卡顿?未来所有机型将升级新MIUI
  13. 加载geojson面数据_地理数据可视化
  14. 软件测试之python面试题_常见Python面试题整理带答案
  15. 计算机安全的重要性 小论文,网络安全的重要性初中议论文
  16. 计算机科学技术考研内容,计算机科学技术考研考什么科目
  17. heightForRow
  18. python 类装饰器和继承_python装饰器、继承、元类、mixin,四种給类动态添加类属性和方法的方式(一)...
  19. 宝塔系统linux xss,宝塔漏洞 XSS窃取宝塔面板管理员漏洞高危
  20. cvSlite 和cvMerge 实现图像的通道分离和混合的说明

热门文章

  1. Python Gui程序 记事本可输入
  2. 电脑访问discuz手机版【触屏版跳转标准版的修改方法】
  3. Nginx多台服务器负载均衡
  4. html css投影效果,CSS添加阴影效果
  5. 收集了两年多的PPT技巧PowerPoint幻灯片演示技巧
  6. abaqus切削为什么没有切屑_教你如何用Abaqus模拟金属切削
  7. 【布局优化】基于鲸鱼算法实现3D无线传感器网(WSN)覆盖优化 Matlab源码
  8. vue打包生成的js文件过大优化
  9. 机械设计图纸管理有什么方法?机械设计图纸管理解决方案
  10. 猿创征文|2022个人开发工具集积累和分享