【小小Demo】网页视频通话小🌰子
工程名 video-call
一个简单的 音视频通话 demo,包含:视频、麦克风、屏幕共享操作。
项目环境
- jdk1.8
- idea
- maven
- springboot 2.1.1.RELEASE
- websocket
- thymeleaf
- webrtc
项目启动
修改maven设置
打开IDEA 设置:File>Setting>Build,Exec... 如下图所示

启动

找到启动类,鼠标右键点击三角形或虫 即可;
访问路径:
如果需要在局域网内访问,需要配置整数,使用HTTPS访问。
HTTPS访问路径:
本项目只需要修改 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】网页视频通话小🌰子的更多相关文章
- javascript的40个网页常用小技巧
下面是javascript的40个网页常用小技巧,对网站开发人员相信会有帮助.1. oncontextmenu="window.event.returnValue=false" 将 ...
- github上预览Demo网页最简单的方法
github上预览Demo网页最简单的方法: 1.打开你github上demo网页index.html,效果如图 2.复制上面的页面地址,然后在该地址前加上 htmlpreview.github.co ...
- 用fontAwesome代替网页icon小图标
1. 引言 网页小图标到处可见,如果一个网页都是干巴巴的文字和图片,而没有小图标,会显得非常简陋.下面的小图标,你是不是会经常用到? 你可能说——“我们用的都是彩色的,不是黑白的”——别着急,下面会讲 ...
- 请用fontAwesome代替网页icon小图标
1. 引言 网页小图标到处可见,如果一个网页都是干巴巴的文字和图片,而没有小图标,会显得非常简陋.下面的小图标,你是不是会经常用到? 你可能说——“我们用的都是彩色的,不是黑白的”——别着急,下面会讲 ...
- fontAwesome代替网页icon小图标
引言 奥森图标(Font Awesome)提供丰富的矢量字体图标—通过CSS可以任意控制所有图标的大小 ,颜色,阴影. 网页小图标到处可见,如果一个网页都是干巴巴的文字和图片,而没有小图标,会显得非常 ...
- CSS之fontAwesome代替网页icon小图标
引言 奥森图标(Font Awesome)提供丰富的矢量字体图标—通过CSS可以任意控制所有图标的大小 ,颜色,阴影. 网页小图标到处可见,如果一个网页都是干巴巴的文字和图片,而没有小图标,会显得非常 ...
- (网页)javascript小技巧(非常全)
事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture(); event.srcE ...
- [转]请用fontAwesome代替网页icon小图标
原文地址:https://www.cnblogs.com/wangfupeng1988/p/4129500.html 1. 引言 网页小图标到处可见,如果一个网页都是干巴巴的文字和图片,而没有小图标, ...
- 请用fontAwesome代替网页icon小图标(转)
1. 引言 网页小图标到处可见,如果一个网页都是干巴巴的文字和图片,而没有小图标,会显得非常简陋.下面的小图标,你是不是会经常用到? 你可能说——“我们用的都是彩色的,不是黑白的”——别着急,下面会讲 ...
- python网页爬虫小项目开发
这是我最近接的一个小项目,花了是整整四天多时间. 任务是将http://www.examcoo.com/index/detail/mid/7网站下所有的试卷里的试题全部提取出来,首先按照题型进行分类, ...
随机推荐
- k8s介绍与常用命令
kubernetes基础与常用命令 原文地址 https://blog.csdn.net/footless_bird/article/details/125798691 官方文档 https://ku ...
- Midjourney:一步一步教你如何使用 AI 绘画 MJ
一步一步如何使用 Midjourney 教程:教学怎么用 MJ? 一.Midjourney(MJ)是什么? Midjourney是一款使用文字描述来生成高质量图像的AI绘画工具.这篇文章主要介绍了Mi ...
- 【GPT开发】人人都能用ChatGPT4.0做Avatar虚拟人直播
0 前言 最近朋友圈以及身边很多朋友都在研究GPT开发,做了各种各样的小工具小Demo,AI工具用起来是真的香!在他们的影响下,我也继续捣鼓GPT Demo,希望更多的开发者加入一起多多交流. 上一篇 ...
- js复制功能(pc复制,移动端复制到手机剪切板)
一个函数,直接调就好了,已测pc和app都适用 1 // 一键复制 2 copyBtn(data) { 3 const input = document.createElement("inp ...
- 【leetcode】258. 各位相加
[leetcode]258. 各位相加 C++解法: class Solution { public: int addDigits(int num) { string s;//用来将num转换成字符串 ...
- Java设计模式简介(总结)
Java设计模式简介(总结) 什么是设计模式 Java设计模式是一组经过验证的解决特定问题的编程技术,这些技术可以帮助开发人员快速.有效地开发高质量的软件.使用设计模式是为了可重用代码.让代码更容易被 ...
- 2022-12-18:给定一个长度为n的二维数组graph,代表一张图, graph[i] = {a,b,c,d} 表示i讨厌(a,b,c,d),讨厌关系为双向的, 一共有n个人,编号0~n-1, 讨
2022-12-18:给定一个长度为n的二维数组graph,代表一张图, graph[i] = {a,b,c,d} 表示i讨厌(a,b,c,d),讨厌关系为双向的, 一共有n个人,编号0~n-1, 讨 ...
- 2022-11-26:给定一个字符串s,只含有0~9这些字符 你可以使用来自s中的数字,目的是拼出一个最大的回文数 使用数字的个数,不能超过s里含有的个数 比如 : 39878,能拼出的最大回文数是
2022-11-26:给定一个字符串s,只含有0~9这些字符 你可以使用来自s中的数字,目的是拼出一个最大的回文数 使用数字的个数,不能超过s里含有的个数 比如 : 39878,能拼出的最大回文数是 ...
- 2022-10-16:以下go语言代码输出什么?A:timed out;B:panic;C:没有任何输出。 package main import ( “context“ “fmt“
2022-10-16:以下go语言代码输出什么?A:timed out:B:panic:C:没有任何输出. package main import ( "context" &quo ...
- <form>表单中的action和method使用方法
<form action="" method="post"> form是表单 里面的内容是要提交出去的. action 是链接 点击浏览选择 ...