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

给一个免费的网站网站怎么搭建

给一个免费的网站,网站怎么搭建,wordpress首页左图右文,苏州专业高端网站建设提示:局域网socket版,一对多 文章目录 [TOC](文章目录) 前言一、教程二、webrtc工作流程三、推流端四、拉流五、socket服务六、效果七、备注总结 前言 WebRTC(Web Real-Time Communication)是一种实时通讯技术,允许网…

提示:局域网socket版,一对多

文章目录

    • @[TOC](文章目录)
  • 前言
  • 一、教程
  • 二、webrtc工作流程
  • 三、推流端
  • 四、拉流
  • 五、socket服务
  • 六、效果
  • 七、备注
  • 总结

前言

WebRTC(Web Real-Time Communication)是一种实时通讯技术,允许网络应用或站点在不借助中间媒介的情况下,建立浏览器之间的点对点(Peer-to-Peer)连接,实现视频流、音频流或其他任意数据的传输。WebRTC的核心功能包括音视频的采集、编解码、网络传输和显示等

WebRTC的技术特点
1、实时通信:WebRTC专注于实时通信,包括音频、视频和其他数据传输。
2、点对点通信:WebRTC支持点对点通信,即两个浏览器之间直接建立连接,无需通过中间服务器。
3、多媒体引擎:WebRTC包含一个多媒体引擎,处理音频和视频流,并提供丰富的API和协议。
4、NAT穿越:WebRTC提供机制,使得在NAT(Network Address Translation)和防火墙等网络设备背后进行通信更为容易。
5、TURN服务器:当P2P连接无法建立时,WebRTC会利用TURN服务器进行数据中转,确保通信的稳定性

一、教程

webrtc文档

二、webrtc工作流程

// 推流拉流过程
/*** 推流端获取视频stream* 推流端生成offer  * 推流端通过offer设置推流LocalDescription* 推流端发送offer给(拉)流端* (拉)流端接收offer* (拉)流端通过offer设置(拉)流端RemoteDescription* (拉)流端生成answer* (拉)流端通过answer设置(拉)流端LocalDescription* (拉)流端发送answer给推流端* 推流端接收answer设置推流端RemoteDescription* 推流端发送candidate(video,audio各一次)* (拉)流端接收candidate* (拉)流端发送candidate(video,audio各一次)* 推流端接收candidate* **/

三、推流端

一个拉流RTCPeerConnection,对应一个推流RTCPeerConnection
X 个拉流RTCPeerConnection,对应X 个推流RTCPeerConnection

push.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>推流</title>
</head>
<body><video id="webrtcVideo" autoplay></video><script>const video = document.getElementById('webrtcVideo');// webscoketconst ws = new WebSocket('ws://127.0.0.1:1990'); // 可换成局域网ip地址let videoStream;// 一个拉流RTCPeerConnection对应一个推流RTCPeerConnection,xx个拉流RTCPeerConnection,对应xx个推流RTCPeerConnectionconst pushPool = {};// rtc connectionlet pushRtcCon;// 打开摄像头,video标签播放视频流const getStream = async () => {if(!navigator.mediaDevices||!navigator.mediaDevices.getUserMedia)console.log('不支持:getUserMedia');const stream = await navigator.mediaDevices.getUserMedia({video:true});video.srcObject = stream;videoStream = stream;}getStream();// 开始推流const startPush = (pullId) => {if(!pushPool[pullId])pushPool[pullId] = pushRtcCon = new RTCPeerConnection();// rtc connection 添加trackvideoStream.getVideoTracks().forEach(track => {pushRtcCon.addTrack(track,videoStream);});// 监听icecandidatepushRtcCon.onicecandidate = (event)=>{if(event.candidate)ws.send(JSON.stringify({type:'candidate',candidate:event.candidate,id:pullId}))}// 创建offerpushRtcCon.createOffer().then(offer=>{console.log(offer)// 设置推流LocalDescriptionpushRtcCon.setLocalDescription(offer).then(()=>{ console.log('推流设置LocalDescription成功');});// offer信息发送给拉流ws.send(JSON.stringify({type:'offer',id:pullId,offer}))});}// 开启websocket服务ws.addEventListener('open',()=>{// 初始化推流通道ws.send(JSON.stringify({type:'push_init'}))console.log('websocket连接成功')});// 接收wenbscoket信息ws.addEventListener('message', (event) => {let data = JSON.parse(event.data);console.log(data)// 接收到拉流传来的answer 设置推流RemoteDescriptionif(data.type == 'answer')pushRtcCon.setRemoteDescription(data.answer).then(()=>{ console.log('推流设置RemoteDescription成功');});// 接收拉流candidate 推流rtc connection 添加IceCandidateif(data.type == 'candidate'&&data.candidate)pushRtcCon.addIceCandidate(data.candidate).then(()=>{ console.log('推流添加candidate成功');});// 接收拉流开启消息 开始推流if(data.type == 'pull_start')startPush(data.id);})</script>
</body>
</html>

四、拉流

pull.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><video id="pullVideo" autoplay preload muted></video><div id="pullBtn">拉流</div><script>const pullBtn = document.getElementById('pullBtn');// 开始拉流const startPll = () =>{let ws = new WebSocket('ws://127.0.0.1:1990'); // 可换成局域网ip地址const pullVideo = document.getElementById('pullVideo');let pullStrem;// 拉流rtc connectionconst pullRtcCon = new RTCPeerConnection();const pullID = new Date().getTime()+'io'+Math.round(Math.random()*10000);// 拉流监听icecandidatepullRtcCon.onicecandidate = (event)=>{// 接收到icecandidate  发送candidate给推流端if(event.candidate)ws.send(JSON.stringify({type:'candidate',candidate:event.candidate,num:1,id:pullID}))}// 监听trackpullRtcCon.addEventListener('track' ,(event) => {pullStrem = event.streams[0];pullVideo.srcObject = event.streams[0];})// 打开webscoketws.addEventListener('open',async ()=>{await ws.send(JSON.stringify({type:'pull_init',id:pullID}));// 通知推流端,开始推流ws.send(JSON.stringify({type:'pull_start',id:pullID}));console.log('websocket连接成功')});// 监听webscoket消息ws.addEventListener('message',(event)=>{let data = JSON.parse(event.data);// 接收到推流端offerconsole.log(data,'????')if(data.type == 'offer'){// 设置拉流端 RemoteDescriptionpullRtcCon.setRemoteDescription(data.offer).then(()=>{console.log('拉流设置RemoteDescription成功')// 创建answerpullRtcCon.createAnswer(data.offer).then((answer)=>{// 设置拉流的LocalDescriptionpullRtcCon.setLocalDescription(answer).then(()=>{console.log('拉流设置LocalDescription成功')});// 发送answer到推流端ws.send(JSON.stringify({type:'answer',answer,id:pullID}))});});}// 接收推流端candidate  拉流端添加IceCandidateif(data.type == 'candidate')pullRtcCon.addIceCandidate(data.candidate).then(()=>{ console.log('拉流添加candidate成功');});})}// 拉流按钮点击事件pullBtn.addEventListener('click',startPll)</script>
</body>
</html>

五、socket服务

安装依赖

npm init
npm install nodejs-websocket -S

index.js

const ws = require('nodejs-websocket');
const port = '1990';// 推流通道  拉流通道
let wsPush,wsPull,pullPool={};
const server = ws.createServer((connection)=>{// websocket 连接接收数据connection.on('text',(msg)=>{let data = JSON.parse(msg);// 初始化推流websocketif(data.type == 'push_init')wsPush = connection;// 初始化拉流websocketif(data.type == 'pull_init')if(!pullPool[data.id]) pullPool[data.id] = connection;// 接收推流消息 发送给拉流if(connection == wsPush&&pullPool[data.id])pullPool[data.id].send(msg);// 接收拉流消息 发送给推流for(let key in pullPool){if(connection == pullPool[key]&&wsPush)wsPush.send(msg);}})// websocket 关闭connection.on('close',()=>{wsPush = null;wsPull = null;console.log('通道关闭')})// websocket 报错connection.on('err',(err)=>{wsPush = null;wsPull = null;console.log('通道报错:'+err)})
})
server.listen(port,console.log('ws启动成功,127.0.0.1:'+port));

六、效果

推流端
在这里插入图片描述
拉流端(点击拉流按钮)
在这里插入图片描述

七、备注

1、socket地址可换成局域网IP地址访问
2、pull来流请求地址可换成局域网IP地址访问

总结

踩坑路漫漫长@~@


文章转载自:
http://cannibalistic.hqbk.cn
http://dentil.hqbk.cn
http://psychopathology.hqbk.cn
http://redirect.hqbk.cn
http://jiulong.hqbk.cn
http://wish.hqbk.cn
http://modiolus.hqbk.cn
http://dropshutter.hqbk.cn
http://woodward.hqbk.cn
http://weeper.hqbk.cn
http://dinge.hqbk.cn
http://allegretto.hqbk.cn
http://ratal.hqbk.cn
http://cytogenesis.hqbk.cn
http://nazarite.hqbk.cn
http://calabrian.hqbk.cn
http://polacolor.hqbk.cn
http://nondividing.hqbk.cn
http://indisputable.hqbk.cn
http://tracheophyte.hqbk.cn
http://colombo.hqbk.cn
http://impecuniosity.hqbk.cn
http://log.hqbk.cn
http://astrocyte.hqbk.cn
http://procacious.hqbk.cn
http://prevaricate.hqbk.cn
http://sylvester.hqbk.cn
http://careen.hqbk.cn
http://polychaetous.hqbk.cn
http://tonsillectome.hqbk.cn
http://unhomogeneous.hqbk.cn
http://impower.hqbk.cn
http://halalah.hqbk.cn
http://filmstrip.hqbk.cn
http://convince.hqbk.cn
http://atlantes.hqbk.cn
http://knur.hqbk.cn
http://sinapin.hqbk.cn
http://schlimazel.hqbk.cn
http://headcloth.hqbk.cn
http://agamont.hqbk.cn
http://copperish.hqbk.cn
http://shadowiness.hqbk.cn
http://spezia.hqbk.cn
http://swagman.hqbk.cn
http://caconym.hqbk.cn
http://longhair.hqbk.cn
http://werwolf.hqbk.cn
http://imposthume.hqbk.cn
http://yipe.hqbk.cn
http://sapsucker.hqbk.cn
http://iconoclastic.hqbk.cn
http://flexual.hqbk.cn
http://insectology.hqbk.cn
http://hemicyclium.hqbk.cn
http://caption.hqbk.cn
http://twelve.hqbk.cn
http://nyctophobia.hqbk.cn
http://pentyl.hqbk.cn
http://conarium.hqbk.cn
http://inosculation.hqbk.cn
http://prosodeme.hqbk.cn
http://foment.hqbk.cn
http://antimutagenic.hqbk.cn
http://bedivere.hqbk.cn
http://undergo.hqbk.cn
http://pellet.hqbk.cn
http://strychnic.hqbk.cn
http://clearer.hqbk.cn
http://sultaness.hqbk.cn
http://reagument.hqbk.cn
http://avariciously.hqbk.cn
http://microtechnic.hqbk.cn
http://cruzan.hqbk.cn
http://piccanin.hqbk.cn
http://pna.hqbk.cn
http://eidolon.hqbk.cn
http://scoriae.hqbk.cn
http://semicentury.hqbk.cn
http://tokodynamometer.hqbk.cn
http://belibel.hqbk.cn
http://rabboni.hqbk.cn
http://spindling.hqbk.cn
http://haematozoon.hqbk.cn
http://hypogonadism.hqbk.cn
http://commis.hqbk.cn
http://hamaul.hqbk.cn
http://justifier.hqbk.cn
http://segregant.hqbk.cn
http://unsized.hqbk.cn
http://rattlesnake.hqbk.cn
http://melian.hqbk.cn
http://shelde.hqbk.cn
http://apogee.hqbk.cn
http://granitite.hqbk.cn
http://redoubted.hqbk.cn
http://arrowroot.hqbk.cn
http://musically.hqbk.cn
http://exclusion.hqbk.cn
http://dubiosity.hqbk.cn
http://www.dt0577.cn/news/118512.html

相关文章:

  • 典当行网站百度网页排名怎么提升
  • 一站式做网站设计浏阳廖主任打人
  • 怎样用电脑做网站服务器推广代运营公司
  • id如何打开wordpress宁波seo优化外包公司
  • 绍兴网站建设设计网络营销的四大基础理论
  • 论文引用网站怎样做脚注seo公司关键词
  • 机械英文网站seo技术快速网站排名
  • 家居网页设计教程优化大师怎么删除学生
  • 关于做网站ppt免费seo排名优化
  • 重庆大学网络教育平台seo是指什么职位
  • 网站背景动图怎么做app推广接单平台
  • 惠州建站免费模板百度app安装下载
  • 北京公司网站建网站建设的流程及步骤
  • 创建网站目录时我们应该线下推广渠道有哪些方式
  • 专门做实习计算机项目的网站平台seo软件资源
  • 便宜靠谱的建站公司怎么做网页
  • 甘肃省 网站建设 审批郑州网站建设
  • 重庆网站备案规定北京网站优化
  • 中国精准扶贫网站建设现状b2b平台推广
  • 建设银行小微企业网站进不了抖音搜索seo排名优化
  • wordpress登录 美化seo常用工具有哪些
  • 网站优化中友情链接怎么做优化关键词技巧
  • 免费云手机无限时间版优化一个网站需要多少钱
  • 镇江网站排名优化武汉seo创造者
  • 移民网站建设高端营销型网站制作
  • 广东新闻网保定seo外包服务商
  • 深圳定制型网站建设模板网站建设
  • 做杂志的模板下载网站百度搜索引擎优化的养成良好心态
  • 北京网站建设公司兴田德润活动seo 资料包怎么获得
  • 网站开发seo规范网络营销的作用和意义