node搭建webrtc信令服务器
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>我的视频 <button type="button" id="startvideo">发起视频</button> <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信令服务器相关推荐
- 调用ice服务器_Nodejs+socket.io搭建WebRTC信令服务器
前言 我们在学习 WebRTC 时,首先要把实验环境搭建好,这样我们就可以在上面做各种实验了. 对于 WebRTC 来说,它有一整套规范,如使它使用的接口.使用SDP进行媒体协商.通过ICE收集地址并 ...
- Nodejs+socket.io搭建WebRTC信令服务器
前言 我们在学习 WebRTC 时,首先要把实验环境搭建好,这样我们就可以在上面做各种实验了. 对于 WebRTC 来说,它有一整套规范,如使它使用的接口.使用SDP进行媒体协商.通过ICE收集地址并 ...
- android webrtc教程,WebRTC 入门教程(一)| 搭建WebRTC信令服务器
作者:李超,音视频技术专家.本入门教程将分为三篇内容,分别讲述信令服务器的搭建.媒体服务器的搭建.Android 端的 WebRTC 应用实现,全文采用开源框架来搭建,适用于大多数入门的开发者.转载请 ...
- WebRTC信令服务器
一.信令&信令服务器 1.信令 驱动系统运转,控制各个模块的前后调用关系. 信令系统 客户端:join.leave.message 服务端:joined.left.other_joined.b ...
- Node搭建静态资源服务器时后缀名与响应头映射关系的Json文件
场景 使用Node搭建一个静态资源服务器,使其根据请求不同的文件类型设置不同的响应头. 比如: ".png":"image/png" , ".png& ...
- webRTC(六):webrtc信令服务器实现
信令服务器实现 引入socketIo和log4js //命令服务器 var socketIo =require('socket.io'); var log4js = require('log4js') ...
- 【WebRTC---入门篇】(十五)WebRTC信令服务器实现
如何使用socket.io发送消息 io代表整个节点
- Mac/Ubuntu 上编译、搭建 WebRtc/licode 服务器
1.下代码 git clone https://github.com/ging/licode.git cd licode 2.安装依赖 2.1 配置ubuntu开发环境: 2.1.1 安装C/C++开 ...
- WebRTC 入门教程(二)| WebRTC信令控制与STUN/TURN服务器搭建
本文将向大家介绍两个方面的知识: WebRTC信令控制 STUN/TURN服务器的搭建 在https://mp.csdn.net/postedit/92436226已经向大家介绍了如何构建信令服务器. ...
最新文章
- 企业数据移动服务管理软件SAP
- 数据导入HBase最常用的三种方式及实践分析
- C语言-typedef与#define的区别
- ZooKeeper入门(三)zookeeper的Watcher机制
- ubuntu下chromium 安装flash player
- Netty 从源码的角度深入剖析 ByteBuffer
- 京东供应链金融科技推出“采购融资”服务 最高100万无抵押融资
- 科技文献检索与计算机应用试卷,科技文献检索试卷
- 桌面计算机未响应,电脑软件总是未响应 电脑应用程序经常无响应,
- 大学生计算机自我鉴定500字,大学生计算机专业的自我鉴定范文
- 关于监控服务器指标、CPU、内存、警报的一些解决方案
- 关于在GET请求中使用body
- QT窗口嵌入桌面内部(在桌面图标之上):可以实现自定义桌面
- 信用评分卡模型开发中双峰分布原因及解决方案
- 关于版权声明的写法 (转)
- python游戏彩蛋_用python写游戏之2D跑酷游戏(一)
- AutoSAR系列讲解(入门篇)2.2-SWC的类型
- scrapy爬取豆瓣top250电影数据
- 树莓派3B+做一个带智能语音的树莓派魔镜
- java画股道站图_「游资股道指标库」通达信操盘主图分析公式