工程名 video-call

一个简单的 音视频通话 demo,包含:视频、麦克风、屏幕共享操作。

项目环境

  • jdk1.8
  • idea
  • maven
  • springboot 2.1.1.RELEASE
  • websocket
  • thymeleaf
  • webrtc

项目启动

修改maven设置

打开IDEA 设置:File>Setting>Build,Exec... 如下图所示

启动

找到启动类,鼠标右键点击三角形或 即可;

访问路径:

http://localhost:8086/toPage

如果需要在局域网内访问,需要配置整数,使用HTTPS访问。

HTTPS访问路径:

https://局域网IP地址:8086/toPage

本项目只需要修改 application.yml文件下


# 服务端口配置
server:
port: 8086
# 配置 Https 证书
ssl:
key-store: classpath:keystore.jks
key-store-password: kurento
key-store-type: JKS
key-alias: kurento-selfsigned

使用手册

本地访问

启动界面

注册

呼叫

视频通话

打开、关闭视频

打开、关闭麦克风

屏幕分享

局域网内访问

仅访问地址不同,其他功能一致。

WebRtc

参考:如何实现一个基于WebRTC的音视频通信系统: https://juejin.cn/post/7169557366587785229

WebRTC架构

简单的音视频架构

WebRTC架构

WebRTC大体可以分为四层:接口层、Session层、引擎层、设备层:

接口层:暴露给业务侧,业务侧可以使用原生的 C++ API 接口或者 Web API 开发音视频实时通信。核心是 RTCPeerConnection

Session层:用于控制业务逻辑,比如媒体协商、收集 Candidate 等

引擎层:包括音频引擎、视频引擎和网络传输

设备层:主要和硬件交互,负责音频的采集和播放,视频的采集,物理网络等

音视频通信过程

一个正常音视频通信架构如上图所示,通信双方分别是 caller(主叫) 与 callee(被叫),两边的内部逻辑相似,下面以caller端为例,了解内部流程:

调用音视频检测模块,检测终端是否有可用的音视频设备

调用音视频采集模块,采集用户音视频数据

根据用户选择,是否开启录制(授权)

通过信令模块交换SDP

创建WebRTC的核心对象RTCPeerConnection,之后添加采集到的音视频数据

RTCPeerConnection向STUN(SessionTraversal Utilities forNAT)/TURN(Traversal Using Relays aroundNAT)服务器发送请求,返回caller的外网ip地址和端口号

通过信令服务器,caller和callee互相传递对方的外网ip地址和端口(媒体协商)

最终P2P链接建立完成,后面就会源源不断的发送音视频数据到对端

协商流程

B站视频预览效果地址

https://www.bilibili.com/video/BV1vP41117pu

代码地址就是评论区哦。

【小小Demo】网页视频通话小🌰子的更多相关文章

  1. javascript的40个网页常用小技巧

    下面是javascript的40个网页常用小技巧,对网站开发人员相信会有帮助.1. oncontextmenu="window.event.returnValue=false" 将 ...

  2. github上预览Demo网页最简单的方法

    github上预览Demo网页最简单的方法: 1.打开你github上demo网页index.html,效果如图 2.复制上面的页面地址,然后在该地址前加上 htmlpreview.github.co ...

  3. 用fontAwesome代替网页icon小图标

    1. 引言 网页小图标到处可见,如果一个网页都是干巴巴的文字和图片,而没有小图标,会显得非常简陋.下面的小图标,你是不是会经常用到? 你可能说——“我们用的都是彩色的,不是黑白的”——别着急,下面会讲 ...

  4. 请用fontAwesome代替网页icon小图标

    1. 引言 网页小图标到处可见,如果一个网页都是干巴巴的文字和图片,而没有小图标,会显得非常简陋.下面的小图标,你是不是会经常用到? 你可能说——“我们用的都是彩色的,不是黑白的”——别着急,下面会讲 ...

  5. fontAwesome代替网页icon小图标

    引言 奥森图标(Font Awesome)提供丰富的矢量字体图标—通过CSS可以任意控制所有图标的大小 ,颜色,阴影. 网页小图标到处可见,如果一个网页都是干巴巴的文字和图片,而没有小图标,会显得非常 ...

  6. CSS之fontAwesome代替网页icon小图标

    引言 奥森图标(Font Awesome)提供丰富的矢量字体图标—通过CSS可以任意控制所有图标的大小 ,颜色,阴影. 网页小图标到处可见,如果一个网页都是干巴巴的文字和图片,而没有小图标,会显得非常 ...

  7. (网页)javascript小技巧(非常全)

    事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture();  event.srcE ...

  8. [转]请用fontAwesome代替网页icon小图标

    原文地址:https://www.cnblogs.com/wangfupeng1988/p/4129500.html 1. 引言 网页小图标到处可见,如果一个网页都是干巴巴的文字和图片,而没有小图标, ...

  9. 请用fontAwesome代替网页icon小图标(转)

    1. 引言 网页小图标到处可见,如果一个网页都是干巴巴的文字和图片,而没有小图标,会显得非常简陋.下面的小图标,你是不是会经常用到? 你可能说——“我们用的都是彩色的,不是黑白的”——别着急,下面会讲 ...

  10. python网页爬虫小项目开发

    这是我最近接的一个小项目,花了是整整四天多时间. 任务是将http://www.examcoo.com/index/detail/mid/7网站下所有的试卷里的试题全部提取出来,首先按照题型进行分类, ...

随机推荐

  1. 05-打包样式资源(编写webpack配置文件)

    /** * webpack.config.js webpack的配置文件 * 作用:指示 webpack 干哪些活(当你运行 webpack 指令时,会加载里面的配置) * * 所有构件工具都是基于n ...

  2. pdf 转 word

    目录 pdf 转 word 一.思路 二.软件安装下载 1. windows安装 2 certos7版本安装 3. Debian 版本安装 4. 安装字体 三.实现PDF转word文档 四.制作自己的 ...

  3. 深度相机:结构光、TOF、双目相机

    随着人工智能与机器人.无人驾驶的火热,深度相机的技术和应用也受到关注,何谓深度相机? 顾名思义,就是可以测量物体到相机的距离(深度) 传统的RGB彩色普通相机称为2D相机,只能拍摄相机视角内的物体,没 ...

  4. 性能_1 Jmeter脚本编写

    一.万能法 先把项目启动 打开项目接口文档,接口文档: 一般是开发 特别注意事项:当你的接口请求参数为json格式时,一定要写请求头,请求头中一定要有 Content-Type: applicatio ...

  5. 关于PM系统以及OA系统的工作基本心态

    这个系统的目的是什么? 这个系统的初衷是好的,是一个信息化管理的数据科学系统,目的是更好的累计公司的业务数据. 但实际操作过程中,包括推广过程中,你能看到上层人员对于这个系统的态度,更像是一个个人企业 ...

  6. 前端模拟“多线程”提交Http请求

    首先说,javascript没有多线程这样一个说法,我说的只是类似那种效果.其次,不建议使用这种方式解决问题,多线程应该交给后台去做. 但是,如果非要这样用,有什么方法呢? 我在工作中就遇到了这样的问 ...

  7. Python NumPy 广播(Broadcast)

    广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行. 如果两个数组 a 和 b 形状相同,即满足 a.shape == ...

  8. 飞桨Paddle动转静@to_static技术设计

    一.整体概要 在深度学习模型构建上,飞桨框架支持动态图编程和静态图编程两种方式,其代码编写和执行方式均存在差异: 动态图编程: 采用 Python 的编程风格,解析式地执行每一行网络代码,并同时返回计 ...

  9. 2021-02-07:给定两棵二叉树的头节点head1和head2,如何判断head1中是否有某个子树的结构和head2完全一样?

    福哥答案2021-02-07: 对head1和head2序列化为str1和str2.然后用kmp算法去判断str2是否是str1的子串.如果是,head2是子树:如果不是,head2不是子树. 代码用 ...

  10. Django4全栈进阶之路2 创建虚拟环境、项目、app应用、启动运行项目

    一.安装虚拟环境: 命令:pip3 install virtualenv 二.安装管理工具: 命令:pip3 install virtualenvwrapper 三.新建: 命令:python -m ...