Spring Boot WebSocket + WenRTC 实现点对点视频通话功能Demo
一、创建 SpringBoot 项目
1.1、创建一个空项目:传送门
1.2、添加 websocket 引用
<!-- websocket -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
1.3、添加 WebSocketConfig 配置文件
package com.example.demo.conf;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;@Configuration
public class WebSocketConfig {/*** 注入一个ServerEndpointExporter,该Bean会自动注册使用@ServerEndpoint注解申明的websocket endpoint*/@Beanpublic ServerEndpointExporter serverEndpointExporter() {return new ServerEndpointExporter();}}
1.4、添加 WebSocketServer 核心代码
package com.example.demo.socket;import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.Enumeration;
import java.util.concurrent.ConcurrentHashMap;@ServerEndpoint("/msgServer/{userId}")
@Component
@Scope("prototype")
public class WebSocketServer {/*** 静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。*/private static int onlineCount = 0;/*** concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。*/private static ConcurrentHashMap<String, Session> webSocketMap = new ConcurrentHashMap<>();/*** 与某个客户端的连接会话,需要通过它来给客户端发送数据*/private Session session;/*** 接收userId*/private String userId = "";@OnOpenpublic void onOpen(Session session, @PathParam("userId") String userId) {this.session = session;this.userId = userId;/*** 连接被打开:向socket-map中添加session*/webSocketMap.put(userId, session);System.out.println(userId + " - 连接建立成功...");}@OnMessagepublic void onMessage(String message, Session session) {try {this.sendMessage(message);} catch (IOException e) {e.printStackTrace();}}@OnErrorpublic void onError(Session session, Throwable error) {System.out.println("连接异常...");error.printStackTrace();}@OnClosepublic void onClose() {System.out.println("连接关闭");}/*** 实现服务器主动推送*/public void sendMessage(String message) throws IOException {if (message.equals("心跳")) {this.session.getBasicRemote().sendText(message);}Enumeration<String> keys = webSocketMap.keys();while (keys.hasMoreElements()) {String key = keys.nextElement();if (key.equals(this.userId)) {System.err.println("my id " + key);continue;}if (webSocketMap.get(key) == null) {webSocketMap.remove(key);System.err.println(key + " : null");continue;}Session sessionValue = webSocketMap.get(key);if (sessionValue.isOpen()) {System.out.println("发消息给: " + key + " ,message: " + message);sessionValue.getBasicRemote().sendText(message);} else {System.err.println(key + ": not open");sessionValue.close();webSocketMap.remove(key);}}}/*** 发送自定义消息*/public static void sendInfo(String message, @PathParam("userId") String userId) throws IOException {System.out.println("发送消息到:" + userId + ",内容:" + message);if (!StringUtils.isEmpty(userId) && webSocketMap.containsKey(userId)) {webSocketMap.get(userId).getBasicRemote().sendText(message);//webSocketServer.sendMessage(message);} else {System.out.println("用户" + userId + ",不在线!");}}public static synchronized int getOnlineCount() {return onlineCount;}public static synchronized void addOnlineCount() {WebSocketServer.onlineCount++;}public static synchronized void subOnlineCount() {WebSocketServer.onlineCount--;}
}
二、编写测试HTML
<!DOCTYPE html>
<html><head><title>RTC视频通话测试页面</title><meta charset="UTF-8"> <!-- for HTML5 --><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1" /></head><body><style type="text/css">body {background: #000;}button {height: 40px;line-height: 40px;width: auto;padding: 0 15px;background: #ccc;border: none;border-radius: 10px;margin-bottom: 10px;overflow: hidden;}.wrap {width: 100vw;height: 100vh;display: flex;justify-content: center;align-items: center;}.video-box {border-radius: 20px;background: pink;position: relative;width: 800px;height: 600px;overflow: hidden;}.remote-video {width: 800px;height: 600px;border: 1px solid black;overflow: hidden;}.local-video {width: 320px;height: 240px;position: absolute;right: 0;bottom: 0;border-radius: 20px 0 0 0;overflow: hidden;}video {width: 100%;height: 100%;}</style><div class="wrap"><div><div><button type="button" onclick="startVideo();">开启本机摄像和音频</button><button type="button" onclick="connect();">建立连接</button><button type="button" onclick="hangUp();">挂断</button><button type="button" onclick="refreshPage();">刷新页面</button></div><div class="video-box"><div class="local-video"><video id="local-video" autoplay style=""></video></div><div class="remote-video"><video id="remote-video" autoplay></video></div></div></div></div><script>// ===================以下是socket=======================var user = Math.round(Math.random() * 1000) + ""var socketUrl = "ws://localhost:8080/msgServer/" + user;var socket = nullvar socketRead = falsewindow.onload = function() {socket = new WebSocket(socketUrl)socket.onopen = function() {console.log("成功连接到服务器...")socketRead = true}socket.onclose = function(e) {console.log('与服务器连接关闭: ' + e.code)socketRead = false}socket.onmessage = function(res) {var evt = JSON.parse(res.data)console.log(evt)if (evt.type === 'offer') {console.log("接收到offer,设置offer,发送answer....")onOffer(evt);} else if (evt.type === 'answer' && peerStarted) {console.log('接收到answer,设置answer SDP');onAnswer(evt);} else if (evt.type === 'candidate' && peerStarted) {console.log('接收到ICE候选者..');onCandidate(evt);} else if (evt.type === 'bye' && peerStarted) {console.log("WebRTC通信断开");stop();}}}// ===================以上是socket=======================var localVideo = document.getElementById('local-video');var remoteVideo = document.getElementById('remote-video');var localStream = null;var peerConnection = null;var peerStarted = false;var mediaConstraints = {'mandatory': {'OfferToReceiveAudio': false,'OfferToReceiveVideo': true}};//----------------------交换信息 -----------------------function onOffer(evt) {console.log("接收到offer...")console.log(evt);setOffer(evt);sendAnswer(evt);peerStarted = true}function onAnswer(evt) {console.log("接收到Answer...")console.log(evt);setAnswer(evt);}function onCandidate(evt) {var candidate = new RTCIceCandidate({sdpMLineIndex: evt.sdpMLineIndex,sdpMid: evt.sdpMid,candidate: evt.candidate});console.log("接收到Candidate...")console.log(candidate);peerConnection.addIceCandidate(candidate);}function sendSDP(sdp) {var text = JSON.stringify(sdp);console.log('发送sdp.....')console.log(text); // "type":"offer"....// textForSendSDP.value = text;// 通过socket发送sdpsocket.send(text)}function sendCandidate(candidate) {var text = JSON.stringify(candidate);console.log(text); // "type":"candidate","sdpMLineIndex":0,"sdpMid":"0","candidate":"....socket.send(text) // socket发送}//---------------------- 视频处理 -----------------------function startVideo() {navigator.webkitGetUserMedia({video: true,audio: true},function(stream) { //successlocalStream = stream;localVideo.srcObject = stream;//localVideo.src = window.URL.createObjectURL(stream);localVideo.play();localVideo.volume = 0;},function(error) { //errorconsole.error('发生了一个错误: [错误代码:' + error.code + ']');return;});}function refreshPage() {location.reload();}//---------------------- 处理连接 -----------------------function prepareNewConnection() {var pc_config = {"iceServers": []};var peer = null;try {peer = new webkitRTCPeerConnection(pc_config);} catch (e) {console.log("建立连接失败,错误:" + e.message);}// 发送所有ICE候选者给对方peer.onicecandidate = function(evt) {if (evt.candidate) {console.log(evt.candidate);sendCandidate({type: "candidate",sdpMLineIndex: evt.candidate.sdpMLineIndex,sdpMid: evt.candidate.sdpMid,candidate: evt.candidate.candidate});}};console.log('添加本地视频流...');peer.addStream(localStream);peer.addEventListener("addstream", onRemoteStreamAdded, false);peer.addEventListener("removestream", onRemoteStreamRemoved, false);// 当接收到远程视频流时,使用本地video元素进行显示function onRemoteStreamAdded(event) {console.log("添加远程视频流");// remoteVideo.src = window.URL.createObjectURL(event.stream);remoteVideo.srcObject = event.stream;}// 当远程结束通信时,取消本地video元素中的显示function onRemoteStreamRemoved(event) {console.log("移除远程视频流");remoteVideo.src = "";}return peer;}function sendOffer() {peerConnection = prepareNewConnection();peerConnection.createOffer(function(sessionDescription) { //成功时调用peerConnection.setLocalDescription(sessionDescription);console.log("发送: SDP");console.log(sessionDescription);sendSDP(sessionDescription);}, function(err) { //失败时调用console.log("创建Offer失败");}, mediaConstraints);}function setOffer(evt) {if (peerConnection) {console.error('peerConnection已存在!');return;}peerConnection = prepareNewConnection();peerConnection.setRemoteDescription(new RTCSessionDescription(evt));}function sendAnswer(evt) {console.log('发送Answer,创建远程会话描述...');if (!peerConnection) {console.error('peerConnection不存在!');return;}peerConnection.createAnswer(function(sessionDescription) { //成功时peerConnection.setLocalDescription(sessionDescription);console.log("发送: SDP");console.log(sessionDescription);sendSDP(sessionDescription);}, function() { //失败时console.log("创建Answer失败");}, mediaConstraints);}function setAnswer(evt) {if (!peerConnection) {console.error('peerConnection不存在!');return;}peerConnection.setRemoteDescription(new RTCSessionDescription(evt));}//-------- 处理用户UI事件 -----// 开始建立连接function connect() {if (!localStream) {alert("请首先捕获本地视频数据.");} else if (peerStarted || !socketRead) {alert("请刷新页面后重试.");} else {sendOffer();peerStarted = true;}}// 停止连接function hangUp() {console.log("挂断.");stop();}function stop() {peerConnection.close();peerConnection = null;peerStarted = false;}</script></body>
</html>
三、本地打开测试
因为打开摄像头就露脸了,所以就初始化截个图吧
四、搭建STUN和TURN服务:传送门
五、更改 html 配置
var pc_config = {"iceServers": [{url: "stun:ip:端口"}, {url: "turn:ip:端口",credential: "kurento",username: "kurento"}]};
注:如果想要非局域网测试,需要把 STUN、TURN 和 websocket服务 要部署到公网环境,然后记得更改 html内的 websocket ip和端口
注:以上内容仅提供参考和交流,请勿用于商业用途,如有侵权联系本人删除!
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 设计模式系统回顾(14)门面模式
目的:提供一个统一的接口 public class SubSystemA {public void doSomething(){System.out.println("Im A");} }public class SubSystemB {public void doSomething(){System.out.println("Im B");} }public class SimpleFacade {private SubS…...
2024/4/18 5:44:07 - Windows 2000虚拟机安装全过程(VMware)
由于一次意外,我发现了一本很旧很旧的旧书,上面的编程示例都是以Windows 2000来举例子的(哪本书用win2000?emm……)。我原本想给电脑重装Windows 2000,但又舍不得现在的Win 11,又是一次意外&…...
2024/4/18 7:59:48 - 如何练口才
1.跟 每天十分钟,跟着新闻联播、评书电影等。这个主要是练习讲话语音语调语感。 2.背 每天花十分钟背一些专业知识。肚子里有东西讲话的时候才知道怎么说。 3.诵 每天晚上诵读一些名著经典。陶冶情操。...
2024/4/13 6:37:58 - 网页前端培训(JavaScript)
1.JavaScript学习的内容 2.JavaScript简介 2.1简介: 2.2组成: 3.JS基本用法 基本使用: JS的三种使用方式 1.行内JS 在html标签上直接写js代码 2.内部JS 在scri…...
2024/5/4 14:46:02 - Keepass实现网页的自动输入
Author: codepig16 我们在开发的时候,或者登录一个网站的时候,每次登录都要输入用户和密码,很是麻烦。就想着有没有什么方式可以实现自动输入。本篇文章主要就是介绍如何通过keepass软件结合插件实现自动输入账号密码。 1. 安装和配置keepas…...
2024/4/8 18:53:33 - 计算机二级Python真题(十)
第十套真题 1、数据库系统的核心是___________。 A.数据库管理系统 B.数据模型 C.软件工具 D.数据库 正确答案: A 2、下列叙述中正确的是___________。 A.线性表链式存储结构的存储空间可以是连续的,也可以是不连续的 B.线性表链式存储结构与顺序…...
2024/4/13 6:37:33 - 【Linux】12. 高级IO之五种IO模型(阻塞IO,非阻塞IO,信号驱动IO,异步IO,多路转接IO)
目录1. 什么是IO?2. 五种IO模型:阻塞IO,非阻塞IO,信号驱动IO,异步IO,多路转接IO2.1 阻塞IO 阻塞IO的特点2.2 非阻塞IO 非阻塞IO的特点2.3 信号驱动IO 信号驱动IO的特点2.4 异步IO 阻塞 & 非阻塞的区分 …...
2024/4/8 18:53:31 - TensorRT+yolov5:yolov5添加小目标检测层2
前面我们在yolov5添加了小目标检测层,进行了训练,但是训练的次数也不是很多,接下来我们使用tensorrt进行四个检测头的yolov5部署。具体如何添加小目标检测层可以查看我上一篇文章。 TensorRT+yolov5:yolov5添加小目标检测层_zhangdaoliang1的博客-CSDN博客https://blog.csd…...
2024/4/13 6:37:58 - 腾讯云服务器开启8080端口教程
阿里云服务器8080端口开放在安全组中放行,Tomcat默认使用8080端口,8080端口也用于www代理服务,端口号以8080端口为例来详细说下阿里云服务器8080端口开启教程教程: 阿里云服务器8080端口开启教程 阿里云服务器8080端口默认是不开…...
2024/4/13 6:37:38 - Spark之RDD转换算子
目录 一.value类型 1.map() 2.mapPartitions() 3.mapPartitionsWithIndex() 4.flatMap()扁平化 5.glom() 6.groupBy() 7.filter() 8.sample() 9. distinct() 10.coalesce() 11.repartition() 12.sortBy() 13. pipe() 二、双value 1.intersection() 2.union() 3.su…...
2024/5/4 16:35:30 - 【学习总结匈牙利算法到KM算法】
目录匈牙利算法概述匈牙利算法流程从匈牙利算法到KM算法小结参考匈牙利算法概述 网上已经存在很多介绍匈牙利算法与KM算法,但是很多都混为一谈。基本上没有进行区分开来,我也是混淆了许久。一是确实二者确实很类似,二是没有仔细分析拿来就用主…...
2024/4/13 6:37:48 - C语言, C++ IO 总结. 一篇文章帮你透析缓冲区存在的意义, C, C++ IO的常见用法
目录 一. IO缓冲区存在的意义 (屏蔽低级IO) 二. C标准IO C标准IO 刨析及其解决字符串输入空格结束问题刨析 (以及常用IO函数刨析) 三. C 文件IO (从常用函数刨析到具体案例实现) 四. C 文件IO (从常见方法刨析到 案例实现) 五. 从C语言的 fprintf 进化到 sstre…...
2024/5/4 15:21:23 - Rhino基础教程---三管混接
三管混接看起来简单,做起来难,因为有很多细节要处理,如果处理不好,面与面之间连接就会不顺。接下来让我们一起来学习一下。 第一步:以原点为中心画一个圆管,距离原点留一点距离。 第二步:鼠标…...
2024/4/16 19:48:10 - C++出现错误类型error C2664的解决方案(VS环境)
定义如下形式的字符串 char *testString “This is test string…”编译器显示这段代码错误,运行后显示为C2664错误 这时候我们只需要修改一下项目设置 具体步骤: 一、标签页点击项目,下拉找到自己的项目名称 二、找到 C/C -> 语言 …...
2024/4/5 2:09:47 - Java语法中“==”与“.equals”的区别
以字符串类型为例: 1.定义字符串 String str1 “abcd”,str2 "abcd"; 此时用“”比较str1与str2,输出结果为true 这样定义的两个字符串内容相同,在常量池中的内存地址相同,所以比较的结果相等 像下面这样定义&#…...
2024/4/13 6:38:54 - java在字符串中“==”和“equals”的区别
一、二者简介 如果是两个基本类型的数据,""是判断两个数值是否相等。在两个字符串中“”是判断它们的内存地址是否相同,“equals()”方法是比较两个字符串是否一样,它们的结果都是布尔值。 例1: boolean is (123 1…...
2024/4/20 16:51:16 - 可变阻抗控制思想
机器人为了与周围环境进行身体互动,以完成一些任务或协助人类进行活动,需要以一种安全和熟练的方式利用接触力。阻抗控制被认为是机器人技术中的一种突出的方法,以避免在非结构化环境中工作时的巨大冲击力。在这样的环境中,交互发…...
2024/4/13 6:38:54 - uboot移植star(linux驱动开发篇)
拿走不谢! 从EMMC启动 ls mmc 1:1 setenv bootargs ‘consolettymxc0,115200 root/dev/mmcblk1p2 rootwait rw’ setenv bootcmd ‘mmc dev 1; fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 imx6ull-14x14-emmc-4.3-800x480-c.dtb; bootz 808000…...
2024/4/13 6:38:24 - LeetCode 70. 爬楼梯
https://leetcode-cn.com/problems/climbing-stairs/ 动态规划 当前楼梯的方法数 前一阶楼梯的方法数 前前一阶楼梯的方法数 f (n) f(n - 1) f(n - 2) 状态转移: 遍历, 逐个计算当前楼梯的方法数 public int climbStairs(int n) {int p 0, q 0, r 1;for (int i 0; i &…...
2024/4/8 18:53:23 - day 03
三. 压缩与解压缩的命令 1. bzip2 用于压缩文件 格式: bzip2 文件名称 文件会压缩, 并被命名为新的压缩包文件.(原文件被替代) 例: bzip2 chunxiao.txt > chunxiao.txt.bz2 解压缩 bz2文件 bunzip2 压缩包.bz2 > 文件, 压缩包被替代 例: bunzip…...
2024/4/13 6:38:34
最新文章
- 频谱模拟器
频谱模拟器,特别是模拟频谱仪,是一种基于特定原理的频谱分析工具。以下是对其的详细介绍: 工作原理: 模拟频谱仪的工作原理主要基于频率转换原理,包括两个关键步骤:信号混频和滤波分析。 信号混频…...
2024/5/4 21:37:45 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - Linux从入门到精通 --- 2.基本命令入门
文章目录 第二章:2.1 Linux的目录结构2.1.1 路径描述方式 2.2 Linux命令入门2.2.1 Linux命令基础格式2.2.2 ls命令2.2.3 ls命令的参数和选项2.2.4 ls命令选项的组合使用 2.3 目录切换相关命令2.3.1 cd切换工作目录2.3.2 pwd查看当前工作目录2.4 相对路径、绝对路径和…...
2024/5/1 13:38:20 - 文件系统 FTP Ubuntu 安装入门介绍
FTP 环境: Ubuntu 14.04 blog zh_CN ubuntu14.04 Install 全新安装:apt-get install vsftpd 重新安装:apt-get --reinstall install vsftpd 卸载并清除配置文件:apt-get --purge remove vsftpd Start & Restart $ service vsftpd start $ se…...
2024/5/2 18:20:21 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/1 17:30:59 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/2 16:16:39 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/29 2:29:43 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/3 23:10:03 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/27 17:58:04 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/27 14:22:49 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/28 1:28:33 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/30 9:43:09 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/27 17:59:30 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/4 18:20:48 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/28 1:34:08 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/29 20:46:55 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/30 22:21:04 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/1 4:32:01 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/4 2:59:34 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/28 5:48:52 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/30 9:42:22 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/2 9:07:46 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/30 9:42:49 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57