首页 >> 数码 >> WebRTC 实现各别视频通话会议

WebRTC 实现各别视频通话会议

2025-05-08 数码

"toId": userId, "data": { "candidate": { "sdpMlineIndex": event.candidate.sdpMLineIndex, "sdpMid": event.candidate.sdpMid, "candidate": event.candidate.candidate } }}send(data)

各不相同的其业务传送各不相同的数据类型,到服务项目器,服务项目器根据toId将假消息发帖给对应的浏览器id,在浏览器寄出假消息后,只能根据各不相同的赶回其业务code来解决缺陷其业务,其业务解决缺陷主要在websocket的onmessage回调步骤中所

onmessage: function () { let that = this console.log(that.users) that.ws.onmessage = function (event) { let msg = JSON.parse(event.data) console.log("寄出假消息-----") console.log(msg) if (msg.code == 10000) { that.users = msg.data } if (msg.code == 10005) { that.addMessage('from ' + msg.data.username + ": ", msg.data.message); return; } if (msg.code == 10006) { // 有浏览器提出申请 console.log(that.users) if (that.users == null) { that.users = [] that.users.push(msg.data) return; } let isIn = 0 for (let i = 0; i < that.users.length; i++) { if (that.users[i].id == msg.data.id) { isIn = 1 } } if (isIn == 0) { that.users.push(msg.data) } } if (msg.code == 10008) { let userId = msg.data.fromId let newUser = [] for (let i = 0; i < that.users.length; i++) { if (that.users[i].id != userId) { newUser.push(that.users[i]) } } that.users = newUser } if (msg.code == 10009) { that.onCandidate(msg) return; } if (msg.code == 10010) { that.onOffer(msg) return; } if (msg.code == 10011) { that.onAnswer(msg) return; } that.addMessage('系统假消息', msg.message); }5、服务项目后台

main.go 是整个算子的入口算子用于goang 的gin基本发挥作用了http服务项目,打包括传输websocket传输等

package mainimport ( "ginweb/controllers/wss" "ginweb/dao" "ginweb/route" "ginweb/runtime" "github.com/gin-gonic/gin")func Init() { go wss.HandleMessages()}func main() { config.InitConfig() runtime.InitLog() dao.Install() defer dao.Uninstall() r := route.RegisterRouters() // 提出申请传输 r.GET("/wss", wss.OnWssMessage) // websockt传输 r.LoadHTMLGlob("www/**/**/*") // 加载实例文件 r.StaticFS("/static", http.Dir("./static")) r.Run(":" + config.Data.Port)}

route.go传输文件加载传输

package routeimport ( "ginweb/controllers/blog" "ginweb/controllers/elasticSearch" "ginweb/controllers/game/gobang" "ginweb/controllers/webrtc" "github.com/gin-gonic/gin")// @Title 提出申请传输// @return route *gin.Enginefunc RegisterRouters() *gin.Engine { r := gin.Default() webrtcGroup := r.Group("/webrtc") { webrtcGroup.GET("/login", webrtc.LoginPage) webrtcGroup.POST("/login", webrtc.Login) webrtcGroup.POST("/register", webrtc.Register) webrtcGroup.GET("/admin", webrtc.ShowHead) webrtcGroup.Use(webrtc.LoginAuth(r)) // 验证提出申请 // webrtc 基本加载 webrtcGroup.GET("/in", webrtc.Home) webrtcGroup.GET("/wss", webrtc.OnWsMessage) } return r}

wss.go文件 发挥作用了websockt浏览器相连及断开服务项目的数据绑定等

func OnWsMessage(req *gin.Context) { var loginMsg webrtc.LoginMessage r := req.Request w := req.Writer c, err := upgrader.Upgrade(w, r, nil) if err != nil { zaplogger.Error(err) c.Close() return } err = c.ReadJSON(&loginMsg) if err != nil { zaplogger.error(err) c.Close() return } // 暂停相连只能修改 defer logout(loginMsg, c) if loginMsg.FromId <= 0 { return } // 2.接寄出浏览器相连,执行提出申请 code, res := login(loginMsg, c) if code> 0 { zaplogger.Error("connect error:"+res, code, loginMsg) return } // 系统浏览器假消息 for { // 1.解决缺陷意味著浏览器给与系统假消息 var userMsg webrtc.ReceiveMessage err = c.ReadJSON(&userMsg) if err != nil { zaplogger.Error("寄出假消息 json解析err:", err) break } if userMsg.Method == "User/Connect" { continue } // TODO message 去掉 client 和数组 zaplogger.Info("寄出假消息:->", userMsg) code, res := GetRouter(userMsg) zaplogger.Info("解决缺陷结果:->", code, res) }}

message.go 文件主要打包括发帖亦会讲假消息等

// @Title SendToAll// @Description 批量假消息传送给所有因特网浏览器// @Param message 浏览器假消息// @return code int16 赶回code// @return message string 假消息func (m *Message) Candidate(message webrtc.ReceiveMessage) (code int16, res string) { var returnData map[string]interface{} returnData = make(map[string]interface{}) returnData["fromId"] = message.FromId returnData["data"] = message.Data m.SendToIds([]int32{message.ToId}, webrtc.MessageCandidate, message.Message, message.Method, returnData, 1) return}// @Title SendToAll// @Description 批量假消息传送给所有因特网浏览器// @Param message 浏览器假消息// @return code int16 赶回code// @return message string 假消息func (m *Message) Offer(message webrtc.ReceiveMessage) (code int16, res string) { var returnData map[string]interface{} returnData = make(map[string]interface{}) returnData["fromId"] = message.FromId returnData["data"] = message.Data m.SendToIds([]int32{message.ToId}, webrtc.MessageCreateOffer, message.Message, message.Method, returnData, 1) return}func (m *Message) Answer(message webrtc.ReceiveMessage) (code int16, res string) { var returnData map[string]interface{} returnData = make(map[string]interface{}) returnData["fromId"] = message.FromId returnData["data"] = message.Data m.SendToIds([]int32{message.ToId}, webrtc.MessageAnswer, message.Message, message.Method, returnData, 1) return}6、服务项目侦察

1、本次前端采行layui+h5+vue.js 发挥作用关键词的组件展示,因此只能在项目中所导入layui.js和vue.js

2、后台web服务项目采行golang的gin基本发挥作用http服务项目及关键词新功能,在服务项目器只能配置golang 1.16.3完整版

wget tar -C /usr/local -xzf go1.16.1.linux-amd64.tar.gz vim /etc/profile export GOROOT=/usr/local/go #新设为go配置的路径 export goPATH=/home/gocode #选项配置打包的路径 export PATH=$PATH:$GOROOT/bin:$GOPATH/binsource /etc/profile // 生效go env -w GOPROXY=,direct

3、golang 1.14完整版后用于go.mod进行打包管理创建人项目很简单,进入到项目的根目录下执行

go mod init ginwebgo mod tidygo run main.go

4、webrtc只能通过域名+https访问因此服务项目器只能打开80,443,以及stun服务项目器的 3478 端口。另外https服务项目只能给予证笔记。本次侦察我是采行宝塔背光配置简单,http和websocket服务项目只只能做端口发帖需

三、总结

通过前面几引言的学习后我们学亦会了,加载本地新闻媒基底引,新闻媒基底加载渲染,数据通道,数据传送等基本新功能,并且发挥作用了网关服务项目,STUN服务项目器等实际上新功能,前期准备工作做好后就可以将所有新功能整合好像,发挥作用webrtc一对一片段来电新功能。在基本上解决缺陷过程中所只能注意到以下缺陷。

1、在浏览器传送亦会讲表示同意offer和Answer的时候语义代code在一个关键词笔记非常简单而且挺绕,只能提前熟悉webrtc的相连工序,教导原理后笔记写就很简单。

2、系统中所的浏览器基底系在玩游戏用户界面中所可以发挥作用假消息亦会讲以及发挥作用发动玩游戏,挂断等加载。

3、stun服务项目器现今留言板有很多折扣的但是好多都不可用,如果自己就让木料的讲 可以用于折扣的,但是用于前只能飞行测到试一致性 该首页可以飞行测到试

4、须要木料的STUN服务项目器一般都自带turn服务项目。木料完成后依然只能须要测到飞行测到试

5、关于STUN服务项目器的原理以及webrtc端到端的相连原理亦会在下一章编纂。

除口臭
整肠生的功效与作用
眼整形
眼睛充血用什么方法快速缓解
角膜炎用什么滴眼液
新冠特效药是什么药
牙疼快速止痛
营养眼睛的药物有哪些
腰椎间盘突出
血糖仪哪个牌子的好
友情链接