当前位置: 首页 > news >正文

提供服务好的网站制作建一个团购网站需要多少钱

提供服务好的网站制作,建一个团购网站需要多少钱,外贸网站建设渠道,京东商城网站特色1 背景 webrtc的代码中有peerconnectionclient和peerconnectionserver的例子#xff0c;但是没有对应的web端的例子#xff0c;这里简单的写了一个测试例子#xff0c;具体如下#xff1a; 2 具体操作 2.1 操作流程 2.2 测试效果 使用webclient与peerconnectionclient的…1 背景 webrtc的代码中有peerconnectionclient和peerconnectionserver的例子但是没有对应的web端的例子这里简单的写了一个测试例子具体如下 2 具体操作 2.1 操作流程 2.2 测试效果 使用webclient与peerconnectionclient的测试效果如下 3 前端代码 html headtitlewebclient p2p demo/titlemeta charsetutf-8style.left_part {width: 50%;float: left;}.right_part {width: 50%;float: right;overflow-y: scroll;}/stylescript srchttps://code.jquery.com/jquery-3.6.0.min.js/script /headbodydiv classright_part idleft_part_containerdivSignalServer:input typetext idsignal_url value127.0.0.1:8888button idbtn_sign_in登入/buttonbutton idbtn_sign_out登出/buttonbrinput typetext idselected_peerid_for_p2p disabled value不允许修改的文本button idbtn_start_p2p disabledstart_p2p/button/divbrtable idPeersTabletheadtrthName/ththPeerId/ththStatus/th/tr/thead/table/divdiv classleft_part idleft_part_containervideo controls autoplay idrtc_video_play height500 stylewidth:100%/video/divscript typetext/javascriptvar myselfPeerId -1;var pc new RTCPeerConnection({ offerExtmapAllowMixed: false });var datachannel null;var stream new MediaStream();async function initPC() {pc.addTransceiver(audio, {direction: recvonly});pc.addTransceiver(video, {direction: recvonly});pc.onconnectionstatechange function(event){console.log(connection state change: , pc.connectionState);};pc.onicecandidate async (ev) {console.log( JSON.stringify(ev.candidate)); };pc.ontrack function(event) {stream.addTrack(event.track); };datachannel pc.createDataChannel(chat);datachannel.onopen function(event) {console.log(datachannel onopen: , event.data);}datachannel.onmessage function(event) {console.log(receive message: , event.data);}datachannel.onerror function(event) {console.log(datachannel error: , event.data);}datachannel.onclose function(event) {console.log(datachannel close: );} }async function startP2P(signal_url) {initPC();var offer await pc.createOffer();await pc.setLocalDescription(offer);let sendOfferPromise await fetch(signal_url, {method: POST,body: JSON.stringify(offer)});if (sendOfferPromise.ok) {console.log(send offer: JSON.stringify(offer)); } else {alert(HTTP-Error: sendOfferPromise.status);} } async function nfyFromSignal(nfyPromise) {let nfyString await nfyPromise.text();if (nfyString.includes(answer)) {console.log(receive answer: nfyString);pc.setRemoteDescription(new RTCSessionDescription(JSON.parse(nfyString)));} else if (nfyString.includes(candidate)) {console.log(receive candidate: nfyString);pc.addIceCandidate(new RTCIceCandidate(JSON.parse(nfyString)));} else {let peersString nfyString;// console.log(rsp: , peersString)let peersChunk peersString.split(\n);for (let i0; ipeersChunk.length peersChunk[i].length0; i) {const peerColumns peersChunk[i].split(,);// console.log(index: i , data: peerColumns)// for example: kevinhome-pc,36,1// peerColumns[0]: peer_name// peerColumns[1]: peer_id// peerColumns[2]: peer_status// tables column index starts from 1, not 0const row_find_peer_id $(#PeersTable tr:has(td:nth-child(2):contains( peerColumns[1] )));if (row_find_peer_id.length 0) {console.log(peerid: peerColumns[1] , status change from row_find_peer_id.find(td:nth-child(3)).text() to peerColumns[2]);row_find_peer_id.find(td:nth-child(3)).text(peerColumns[2]);continue;}const row_find_peer_name $(#PeersTable tr:has(td:nth-child(1):contains( peerColumns[0] )));if (row_find_peer_name.length 0) {console.log(peerid: peerColumns[1] , status change from row_find_peer_name.find(td:nth-child(3)).text() to peerColumns[2]);row_find_peer_name.find(td:nth-child(2)).text(peerColumns[1]);row_find_peer_name.find(td:nth-child(3)).text(peerColumns[2]);continue;} const row_peer $(tr);row_peer.append($(td).text(peerColumns[0]));row_peer.append($(td).text(peerColumns[1]));row_peer.append($(td).text(peerColumns[2]));$(#PeersTable).append(row_peer);} }}async function pendingWait(myself_peerid) {const signal_url document.getElementById(signal_url).value;while (true) {let v await fetch(http://${signal_url}/wait?peer_id${myself_peerid});nfyFromSignal(v);}}$(#btn_sign_in).on(click, async () {const signal_url document.getElementById(signal_url).value;let signinResultPromise await fetch(http://${signal_url}/sign_in);if (signinResultPromise.ok) {myselfPeerId parseInt(signinResultPromise.headers.get(Pragma));console.log(my peerid is: myselfPeerId);nfyFromSignal(signinResultPromise);pendingWait(myselfPeerId); } else {alert(HTTP-Error: signinResultPromise.status);}}) $(#btn_sign_out).on(click, async () {$(#PeersTable tbody).empty();const signal_url document.getElementById(signal_url).value;let signoutResultPromise await fetch(http://${signal_url}/sign_out?peer_id${myselfPeerId});if (signoutResultPromise.ok) {console.log(sign_out: myselfPeerId successful); } else {alert(HTTP-Error: signoutResultPromise.status);}})$(#PeersTable).on(click, tr, function() {const row_selected $(this);const row_selected_peer_id parseInt(row_selected.find(td:nth-child(2)).text());if (row_selected_peer_id myselfPeerId) {console.log(You should not choose yourself [ myselfPeerId ] to start p2p);$(#btn_start_p2p).prop(disabled, true);return;}const row_selected_peer_id_status parseInt(row_selected.find(td:nth-child(3)).text());if (row_selected_peer_id_status 1) {console.log(selected peerid: row_selected_peer_id);$(#selected_peerid_for_p2p).val(row_selected_peer_id);$(#btn_start_p2p).prop(disabled, false); } else {console.log(The peer [ row_selected_peer_id ] you choose is offline);$(#btn_start_p2p).prop(disabled, true);}})$(#btn_start_p2p).on(click, async () {const signal_url document.getElementById(signal_url).value;const remote_peer_id $(#selected_peerid_for_p2p).val();const sendmsg_url http://${signal_url}/message?peer_id${myselfPeerId}to${remote_peer_id};console.log(sendmsg url: sendmsg_url);// $(#rtc_video_play).show();// $(#rtc_video_play).prop(muted, false);$(#rtc_video_play).prop(srcObject, stream);console.log(Start P2P from [ myselfPeerId ] to [ remote_peer_id ]);startP2P(sendmsg_url);})/script /body /html
http://www.tj-hxxt.cn/news/132717.html

相关文章:

  • 西安网站开发公司哪家强互联网大会官网
  • 深圳精品网站设计网站建设培训学校北京
  • 做网站买服务器穿山甲广告联盟
  • 上海定制网站建设推广智慧团建重置密码验证码
  • 建设网站后如何上线seo的基本步骤顺序正确的是
  • wordpress管理历史版本宁波最好的seo外包
  • 建设信用卡秒批网站wordpress输出副标题
  • 太原网站搜索引擎优化网站建设 大公司排名
  • wordpress 图片展示主题整站优化报价
  • 微科技h5制作网站模板西安网站建设技术外包
  • 彩票网站模版东莞建筑设计院排名
  • 绍兴cms建站系统街景地图手机版下载
  • 济南专业网站建设咨询网站在线生成器
  • 设计购物网站咋做做网站引入字体
  • 三只松鼠商务网站建设目的诛仙3官方网站时竹任务荧灵怎么做
  • 重庆网站推广外包企业河南便宜网站建设费用
  • 网站内做全文搜索丹徒网站建设多少钱
  • 运营一个企业网站的推广方案中山 家居 骏域网站建设专家
  • 做企业网站设营销策划书范文大全
  • 律所网站建设方案书怎么写wordpress 调用所有分类
  • 阿里云网站怎么备案域名wordpress 用户中心
  • 校友网站建设龙岩seo招聘
  • 有什么推广网站网站模板免费网盘
  • php网站开发工资一个云主机 多个网站
  • 提供深圳网站制作公司生活服务行业网站建设
  • 电子商务和网络购物网站网站流量分析的指标有哪些
  • wordpress 建站简单吗自我介绍网站html
  • 如何做优惠券网站广东哪里网站建设
  • 浙江省建设厅干部学校网站主流网站 技术
  • php 网站模板网站总体规划