描述

程序在 iamshaunjp 的群聊功能基础上利用webRTC技术,添加了语音群聊功能,在其他人键盘输入时,会出现类似微信的对方正在输入字样。

  • demo:https://biptedu.cn:4000/
  • source code: https://github.com/sunlanchang/voice_chat

使用的nodejs模块

  • express:创建一个web服务器
  • https:创建https连接(局域网或者外网webRTC需要https连接,具体见tutoril)
  • socket.io:客户端与服务端实时通信

js文件

  • chat.js:实现按钮事件的注册、文本数据的发送等
  • record.js:实现语音消息的录取、播放、发送等

结构图和流程图

文本通信

详情见public/js/chat.js注释

发送数据

  • 进入页面进行与服务器的socket连接
  • 客户端输入文本数据
  • 客户点击sent按钮,触发click事件,并产生chat事件准备想服务器emit
  • soket连接发送给服务器chat事件和客户端产生的数据

接收数据

  • socket接受到服务器发送来的data和服务器发送来的chat事件
  • 提取data文本
  • js在index.html添加文本数据,完成接收数据并显示

语音通信

详情见public/js/record.js注释

  • 接受和发送语音数据类似与文本数据的通信
  • 利用webRTC获取到用户的视频或者音频转换为blob格式数据,并发送给服务器数据。
  • 接受消息时,数据类型是blob格式,对blob数据解析,利用html5的audio标签进行播放

服务器转发数据

客户端发送给服务器数据,服务器触发chat事件,将客户端发送来的数据以广播的形式发送到每一个客户端,完成群聊的功能。

创建https证书

在localhost中使用webRTC不需要使用https,但是在局域网或者外网使用webRTC,必须强制使用webRTC,这里采用自己生成证书供测试使用,具体生成方法和设置https方法参考博客:

  • 生成自己签名的证书(有效期365天)
 openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365
  • 使用https连接的express,例子如下:
  var fs = require('fs'),https = require('https'),express = require('express'),app = express();https.createServer({key: fs.readFileSync('key.pem'),cert: fs.readFileSync('cert.pem')}, app).listen(55555);app.get('/', function (req, res) {res.header('Content-type', 'text/html');return res.end('<h1>Hello, Secure World!</h1>');});

基于nodejs的语音聊天相关推荐

  1. 基于Internet的语音聊天软件设计与实现

    基于Internet的语音聊天软件设计与实现 朱国华,夏敏捷 (中原工学院 计算机科学系 ,河南 郑州 450007) 摘要:文章对网络环境下语音通信的原理进行了系统地分析,详细阐述了语音的采集.语音 ...

  2. 基于C#局域网语音聊天

    基​于​C​#​局​域​网​语​音​聊​天​室​,​可​实​现​文​本​消​息​的​发​送​.​接​收​及​语​音​聊​天​,​是​一​个​很​不​错​的​,​适​合​初​学​者​的​软​件​开​发​ ...

  3. 基于nodejs的网络聊天室实现

    一.实验选题 1.1选题背景及意义 本次课程设计选题为 :仿QQWeb即时聊天系统. 由于WEB的易用性.实用性,它很快占据了主导地位,目前成为使用最广泛.最有前途.最具魅力的信息传播技术.本次实验就 ...

  4. node php聊天室,利用socket.io实现多人聊天室(基于Nodejs)

    利用socket.io实现多人聊天室(基于Nodejs) socket.io简介 在Html5中存在着这样的一个新特性,引入了websocket,关于websocket的内部实现原理可以看这篇文章,这 ...

  5. 基于 QT5 百度语音API 图灵机器人API 的智能语音聊天机器人

    基于 QT5 百度语音API 图灵机器人API 的智能语音聊天机器人 程序简介 代码一共分为以下几个模块 伪代码形式为 部分代码 源代码下载地址 程序简介 程序界面包含录音和发送两个按钮 点录音将开始 ...

  6. Java基于TCP(Socket)协议的网络语音聊天

    Java基于TCP协议的网络语音聊天 本聊天是基于tcp协议进行的,其本质为:本地录音->将录音通过网络编程转发给他人->他人进行录音的播放. 所需知识:多线程,基于tcp协议的网络编程 ...

  7. 基于Python+百度语音的智能语音ChatGPT聊天机器人(机器学习+深度学习+语义识别)含全部工程源码 适合个人二次开发

    目录 前言 总体设计 系统整体结构图 系统流程图 运行环境 Python 环境 Pycharm 环境 ChatterBot 环境 模块实现 1. 模型构建 2. 服务器端 3. 客户端 4. 语音录入 ...

  8. chatbot:基于 AIML 的 PHP 聊天机器人

    基于AIML的PHP聊天天机器人 本文章中讲介绍用PHP实现的一个小聊天机器人程序,用到了php操作dom相关的知识和mysql数据库,可以用来学习.代码可以从https://github.com/k ...

  9. 抓住语音社交风口,1天快速搭建语音聊天室

    语音聊天室孵化 一起KTV.众人大合唱.语音开黑.狼人杀.剧本杀.多人配音.观影.语音电台.相亲联谊社交等,一般都是在语音聊天室中进行,那么语音聊天室产品如此火热的原因有哪些呢? 一对一社交适用于朋友 ...

最新文章

  1. 牛客华为机试第2题python
  2. RS485通信简单介绍
  3. Xamarin.Android 使用 SQLite 出现 Index -1 requested, with a size of 10 异常
  4. 机器学习知识点(十六)集成学习AdaBoost算法Java实现
  5. linux 查看文件夹大小 du命令
  6. 2017网易有道内推编程题
  7. C#/.Net Core/WPF框架初建(国际化、主题色)
  8. 我的内核学习笔记5:proc目录文件创建及读写
  9. java 线程栈大小配置,JVM运行时数据区详解-Stack栈(优化配置、代码样例)
  10. MyBatis理解与掌握(输入与输出)
  11. JQuery筛选器全系列介绍
  12. Python入门--特殊方法
  13. 分享我用cnode社区api做微信小应用的入门过程
  14. logisim软件简单入门使用
  15. 系统架构变迁——个人成长路线
  16. ajax实现留言板功能 -
  17. 天猫精灵对接智能设备
  18. Calendar类、System类、StringBuilder类、包装类
  19. 面试-vue组件间通信
  20. eda多功能数字钟课程设计_《多功能数字钟》EDA实验报告

热门文章

  1. IBM Java多线程 - 7.结束语和参考资料
  2. Android自定义View之七色环颜色采集器: 续我未完的大学梦 !
  3. 非常成功的破解了Mac Myeclipse2018.8,内附破解工具下载
  4. mysql索引优化口诀
  5. 各大IT公司的起名缘由(英文版)
  6. 【AIX】AIX磁盘相关操作
  7. PS中使用橡皮擦抠图
  8. Python实现凯撒密码的加密与解密
  9. java 总结(String类、StringBuffer类)
  10. VS2010WriteString函数不能输出汉字