nodejs搭建信令服务器

由于最近在研究webRTC视频推流,查了很多webRTC的资料,准备搭建rtsp的流媒体推送服务器,属于个人研究,非团队。进度慢之又慢!资料查了又查,始终找不到webrtc推送rtsp流的开源项目,自己后续慢慢研究吧!
虽然没开发出来什么东西,但是学习不少的东西!例如:创建nodejs搭建的聊天室,创建视频通话。生命就是在不断学习的过程!谢谢大佬的博客https://huangxiaoguo.blog.csdn.net/article/details/104229233
虽然需要修改一部分变量,但最终还是跑通了!如果对于流程及api感到比较陌生的话可以看看这篇文章webrtc开发入门教程
一下代码是修改过后的代码可以直接运行!在gitee上开源源码地址gitee码云,单独复制代码,会运行报错!

'use strict'
//引入express框架
var express = require('express');
//引入http
var http = require('http');
//引入文件管理的fs
var fs = require('fs');
//引入路径
var path = require('path');
//引入静态文件内容插件
var serveIndex = require('serve-index');
//初始化 express框架;
let app = express();
//express挂载
app.use(express.static('./public'));//引入scoket
var { ioinit, logger, USERCOUNT } = require('./scoket');app.use('/index', function (req, res, next) {logger.debug('主页面请求')console.log('主页面请求', req.url, req.url.indexOf('/favicon.ico') != -1);if (req.url.indexOf('/index') != -1) { }if (req.url.indexOf('/tall') != -1) {console.log('进到消息通话页面');res.sendFile(path.resolve(__dirname, './static/tall.html'));} else if (req.url.indexOf('/webrtc') != -1) {console.log('进到视频通话页面123');res.sendFile(path.resolve(__dirname, './view/index.html'))} else if (req.url.indexOf('/js') != -1) {res.sendFile(path.resolve(__dirname, './static/client.js'));} else if (req.url.indexOf('/tjs') != -1) {res.sendFile(path.resolve(__dirname, './view/tjs/client.js'));} else {res.send({ code: 400, message: '请求的页面不见了', success: false })}
});
//挂载静态文件夹下所有文件名称路径
app.use('/filepath', serveIndex('./public'));
app.use('/', (req, res, next) => {console.log('荣阔所有路径', req.url);res.sendFile(path.resolve(__dirname, './static/favicon.ico'));
})let serve = http.createServer(app)
let io = ioinit(serve)
serve.listen(3100)io.sockets.on('connection', (socket) => {console.log('创建socket', 11);logger.info("connection");//转发信息socket.on('message', (room, data) => {console.log('message消息推送', 33,room,data);logger.info("message data " + socket.id + " " + room, data);socket.emit('message', room, socket.id, '回复链接')//房间内所有人,除自己外});//用户加入socket.on('join', (room) => {console.log('用户加入', room, 22);logger.info("join", ",room = ", room, ",socket.id = ", socket.id);var myRoom = io.sockets.adapter.rooms[room];console.log('===========', myRoom);var users = (myRoom) ? Object.keys(myRoom.sockets).length : 0;logger.debug('the number of user in room is:' + users)//处理一对一通信if (users < USERCOUNT) {//给本人回信息socket.emit('joined', room, socket.id);if (users > 1) {socket.to(room).emit('otherjoin', room, socket.id);}} else {socket.leave(room);socket.emit('full', room, socket.id);}});//用户离开socket.on('leave', (room) => {console.log('用户离开', 44);var myRoom = io.sockets.adapter.rooms[room];var users = (myRoom) ? Object.keys(myRoom.sockets).length : 0;//users-1logger.debug('the number of user in room is:' + (users - 1));socket.to(room).emit('exit', room, socket.id);socket.emit('leaved', room, socket.id);});
});serve.on('error', (error) => {console.log('启动失败', error)
})
serve.on('listening', () => {logger.debug('监听3100端口启动-启动成功')console.log('3100端口启动成功');
})

使用了express框架,没有使用路由中间件,使用log4js进行日志记录,使用scoketIo进行数据通讯
聊天室代码

<html><head><title>Chat Room</title></head><body><table align="center"><tr><td><label>UserName:</label><input type="text" id="uesrname"/></td>    </tr><tr><td><label>room:</label><input type="text" id="room"/><button id="connect">加入</button></td></tr><tr><td><label>Content:</label><br><textarea disabled  id="output" rows="10" cols="50"></textarea></td></tr><tr><td><label>Input:</label><br><textarea disabled  id="input" rows="3" cols="50"></textarea></td></tr><tr><td><button id="send">Send</button></td></tr></table><script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.5.1/socket.io.js"></script><script src="./js/client.js"></script></body>
</html>

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>视频通话</title></head><body><div><h4>我的视频&nbsp;&nbsp;<button type="button" id="startvideo">发起视频</button>&nbsp;&nbsp;<button type="button" id="endvideo">结束视频</button></h4><video id="myvideo" autoplay playsinline></video></div><div><h4>对方的视频:</h4><video id="usersvideo" width="" height="" controls autoplay></video></div>
</body>
<script src="https://webrtc.github.io/adapter/adapter-latest.js"></script>
<script>console.log(adapter.browserDetails.browser);var myvideo = document.querySelector('#myvideo');var usersvideo = document.querySelector('#usersvideo');var startvideo = document.querySelector('#startvideo')var endvideo = document.querySelector('#endvideo')var videostream = ''console.log(startvideo);var constraints = {audio: true,video: true};//发起视频startvideo.onclick = () => {console.log('发起视频');function handleSuccess (stream) {var videoTracks = stream.getVideoTracks();console.log('Using video device: ' + videoTracks[0].label);myvideo.srcObject = stream;}function handleError (error) {console.log('getUserMedia error: ' + error.name, error);}videostream = navigator.mediaDevices.getUserMedia(constraints).then(handleSuccess).catch(handleError);}//结束视频endvideo.onclick = () => {myvideo.src = ''console.log('结束视频');videostream.then(item => {console.log(item);})// videostream.then(item => {//   console.log(item);// })// videostream.getTracks().forEach(function (track) {//   track.stop();//   console.log('关闭视频通道不成功', track);//   myvideo.src = ''// })}</script></html>


对于不懂的api及流程可以看看webrtc开发入门教程

node搭建webrtc信令服务器相关推荐

  1. 调用ice服务器_Nodejs+socket.io搭建WebRTC信令服务器

    前言 我们在学习 WebRTC 时,首先要把实验环境搭建好,这样我们就可以在上面做各种实验了. 对于 WebRTC 来说,它有一整套规范,如使它使用的接口.使用SDP进行媒体协商.通过ICE收集地址并 ...

  2. Nodejs+socket.io搭建WebRTC信令服务器

    前言 我们在学习 WebRTC 时,首先要把实验环境搭建好,这样我们就可以在上面做各种实验了. 对于 WebRTC 来说,它有一整套规范,如使它使用的接口.使用SDP进行媒体协商.通过ICE收集地址并 ...

  3. android webrtc教程,WebRTC 入门教程(一)| 搭建WebRTC信令服务器

    作者:李超,音视频技术专家.本入门教程将分为三篇内容,分别讲述信令服务器的搭建.媒体服务器的搭建.Android 端的 WebRTC 应用实现,全文采用开源框架来搭建,适用于大多数入门的开发者.转载请 ...

  4. WebRTC信令服务器

    一.信令&信令服务器 1.信令 驱动系统运转,控制各个模块的前后调用关系. 信令系统 客户端:join.leave.message 服务端:joined.left.other_joined.b ...

  5. Node搭建静态资源服务器时后缀名与响应头映射关系的Json文件

    场景 使用Node搭建一个静态资源服务器,使其根据请求不同的文件类型设置不同的响应头. 比如: ".png":"image/png" , ".png& ...

  6. webRTC(六):webrtc信令服务器实现

    信令服务器实现 引入socketIo和log4js //命令服务器 var socketIo =require('socket.io'); var log4js = require('log4js') ...

  7. 【WebRTC---入门篇】(十五)WebRTC信令服务器实现

    如何使用socket.io发送消息  io代表整个节点

  8. Mac/Ubuntu 上编译、搭建 WebRtc/licode 服务器

    1.下代码 git clone https://github.com/ging/licode.git cd licode 2.安装依赖 2.1 配置ubuntu开发环境: 2.1.1 安装C/C++开 ...

  9. WebRTC 入门教程(二)| WebRTC信令控制与STUN/TURN服务器搭建

    本文将向大家介绍两个方面的知识: WebRTC信令控制 STUN/TURN服务器的搭建 在https://mp.csdn.net/postedit/92436226已经向大家介绍了如何构建信令服务器. ...

最新文章

  1. 企业数据移动服务管理软件SAP
  2. 数据导入HBase最常用的三种方式及实践分析
  3. C语言-typedef与#define的区别
  4. ZooKeeper入门(三)zookeeper的Watcher机制
  5. ubuntu下chromium 安装flash player
  6. Netty 从源码的角度深入剖析 ByteBuffer
  7. 京东供应链金融科技推出“采购融资”服务 最高100万无抵押融资
  8. 科技文献检索与计算机应用试卷,科技文献检索试卷
  9. 桌面计算机未响应,电脑软件总是未响应 电脑应用程序经常无响应,
  10. 大学生计算机自我鉴定500字,大学生计算机专业的自我鉴定范文
  11. 关于监控服务器指标、CPU、内存、警报的一些解决方案
  12. 关于在GET请求中使用body
  13. QT窗口嵌入桌面内部(在桌面图标之上):可以实现自定义桌面
  14. 信用评分卡模型开发中双峰分布原因及解决方案
  15. 关于版权声明的写法 (转)
  16. python游戏彩蛋_用python写游戏之2D跑酷游戏(一)
  17. AutoSAR系列讲解(入门篇)2.2-SWC的类型
  18. scrapy爬取豆瓣top250电影数据
  19. 树莓派3B+做一个带智能语音的树莓派魔镜
  20. java画股道站图_「游资股道指标库」通达信操盘主图分析公式

热门文章

  1. 【solidity学习】僵尸之谜一
  2. 2021年高压电工考试题库及高压电工证考试
  3. 排序算法稳定性与不稳定性的理解
  4. 去除浏览器自动记住密码功能
  5. seo工具小旋风搜狗收录推送工具v2.3(无需cookie,VPS挂机自动推送)
  6. 准备了两个月的阿里面经,写给初中级Java程序员 的BAT 面试宝典
  7. Matlab中imadjust函数的使用方法
  8. Arduino编程器 USBasp USBtinyISP FT232-ISP 对比 区别
  9. 斐波那契数列和青蛙跳台阶问题
  10. 日本語:中國と日本祝日情報一覧