美文网首页
webrtc进阶实战之信令服务器

webrtc进阶实战之信令服务器

作者: 码代码的小公举 | 来源:发表于2023-01-15 15:32 被阅读0次

对比上一篇webrtc入门实战,进阶篇中新增的点最重要的就是信令服务器,入门中我们是在同一个html页面中进行信息交换,现实中我们视频通话当然是身在远处了,那么就需要一个信令服务器来交互通信“地址”(sdp等信息)。
此处来实现一个基于nodejs的简单信令服务(未发布,局域网可用),使得下一篇的完整例子可以实现真实的视频通话。

安装依赖:

// npm node 都是需要的哈
npm install ws; 

服务器代码:

const WebSocket = require('ws');
const WebSocketServer = WebSocket.Server;

const wss = new WebSocketServer({
  port: 3002
}, () => {
  console.log('open')
})
let clents = [];
wss.on('connection', (ws) => {
  console.log('some connection');
  // ws.send(ws)
  ws.on('message', (message) => {
    let res = {};
    try {
      res = JSON.parse(message.toString());
    } catch { console.log(message + '不是json') }
    const { type, name } = res;
    console.log(type);
    if (type === 'init') {
      clents = clents.filter(i => i.name !== name); // 防止重复
      clents.push({ name, target: ws });
    } else {
      //  if (type === 'offer' || type === 'answer' || type==='ice') 
      clents.filter(i => i.name !== name).forEach(({ target }) => {
        // 广播 , 注意就不用给自己发了
        target.send(JSON.stringify(res))
      })
    }
  })
})

wss.on('close', () => {
  console.log('wss closed')
})

启动命令:

node server.js // 你保存叫啥就运行啥
运行

................稍微修改一下,可以按自己的接下去想做的发挥..........

给指定在线用户拨打视频

webrtc进阶实战之完整版 - 简书 (jianshu.com)

const WebSocket = require('ws');
const WebSocketServer = WebSocket.Server;

const wss = new WebSocketServer({
  port: 3002
}, () => {
  console.log('open')
})
let clents = [];
wss.on('connection', (ws) => {
  console.log('some connection');
  // ws.send(ws)
  ws.on('message', (message) => {
    let res = {};
    try {
      res = JSON.parse(message.toString());
    } catch { console.log(message + '不是json') }
    const { type, name, targetName } = res;
    console.log(type);
    if (type === 'init') {
      clents = clents.filter(i => i.name !== name); // 防止重复
      clents.push({ name, target: ws });
      console.log(clents.map(i => i.name))
      clents.forEach(({ target }) => {
        target.send(JSON.stringify({ type: 'list', list: clents.map(i => i.name) })) // 广播一份在线列表
      })
    } else {
      //  if (type === 'offer' || type === 'answer' || type==='ice') 
      const target = (clents.filter(i => i.name === targetName)[0] || {}).target;
      target && target.send(JSON.stringify(res)); // 发送给指定人员
    }
  })
})

wss.on('close', () => {
  console.log('wss closed')
})

相关文章

  • webrtc进阶实战之信令服务器

    对比上一篇webrtc入门实战[https://www.jianshu.com/p/819962032f70],进...

  • WebRTC 服务器要干些什么

    概述 WebRTC 的服务器大体分为信令服务器和媒体服务器 WebRTC 信令服务器是主要功能是为 WebRTC ...

  • Webrtc服务器搭建

    Webrtc服务器包括:房间服务器(Room Server)、信令服务器(Signaling Server)、防火...

  • WebRTC信令交互流程

    WebRTC信令交互流程: 上述序列中,WebRTC并不提供Stun服务器和Signal服务器,服务器端需要自己实...

  • WebRTC学习(二)

    信令服务器 没有信令服务器,各个WebRTC之间是没办法通信的。传递媒体数据有两个信息,必须经过信令服务器进行交换...

  • webrtc

    使用WebRTC搭建前端视频聊天室——入门篇使用WebRTC搭建前端视频聊天室——信令篇Android之WebRTC介绍

  • 游戏服务器之Java进阶实战(HotSwap/Script/JV

    游戏服务器之Java进阶实战(HotSwap/Script/JVM) Java HotSwap hotswap定义...

  • Web网页音视频通话之基于SIPJS

    简述本文是以FreeSwitch作为信令服务器,通过sipjs(基于webRtc) 进行媒体协商,网络协商后,进行...

  • js实现WebRTC点对点视频通话

    先看页面代码,这里使用的webRTC原生的API。目前信令服务器使用的是websocket实现的,后续改成将soc...

  • WebRTC之信令篇

    在WebRTC中,信令发挥着举足轻重的作用,但是webrtc工作组并没有对信令交互进行标准化,留给开发人员自行选择...

网友评论

      本文标题:webrtc进阶实战之信令服务器

      本文链接:https://www.haomeiwen.com/subject/ezdacdtx.html