RTSP推流

1、数据解析过程

数据都会通过回调的方式到达RtspSession类(会话)的onRecv函数
先给出类的继承关系:

class RtspSession: public TcpSession, public RtspSplitter, public RtpReceiver , public MediaSourceEvent
{}
class RtspSplitter : public HttpRequestSplitter
{}

数据回调后进入分包处理,然后去根据协议查找头部数据和内容

void RtspSession::onRecv(const Buffer::Ptr &buf) {...if (_on_recv) {//http poster的请求数据转发给http getter处理_on_recv(buf);} else {input(buf->data(), buf->size());}
}void HttpRequestSplitter::input(const char *data,size_t len) {...onRecvHeader(header_ptr, header_size);onRecvContent(ptr,_content_len);...
}

通过头部区别是否是rtp包还是rtsp命令包,rtp包的处理函数是onRtpPacket,rtsp包的处理函数是onWholeRtspPacket

ssize_t RtspSplitter::onRecvHeader(const char *data, size_t len) {if(_isRtpPacket){onRtpPacket(data,len);return 0;}_parser.Parse(data);auto ret = getContentLength(_parser);if(ret == 0){onWholeRtspPacket(_parser);_parser.Clear();}return ret;
}

2、处理rtsp包

rtsp处理过程,解析出来的各种交互命令进入不同的处理函数

void RtspSession::onWholeRtspPacket(Parser &parser) {string method = parser.Method(); //提取出请求命令字_cseq = atoi(parser["CSeq"].data());if (_content_base.empty() && method != "GET") {_content_base = parser.Url();_media_info.parse(parser.FullUrl());_media_info._schema = RTSP_SCHEMA;}using rtsp_request_handler = void (RtspSession::*)(const Parser &parser);static unordered_map<string, rtsp_request_handler> s_cmd_functions;static onceToken token([]() {s_cmd_functions.emplace("OPTIONS", &RtspSession::handleReq_Options);s_cmd_functions.emplace("DESCRIBE", &RtspSession::handleReq_Describe);s_cmd_functions.emplace("ANNOUNCE", &RtspSession::handleReq_ANNOUNCE);s_cmd_functions.emplace("RECORD", &RtspSession::handleReq_RECORD);s_cmd_functions.emplace("SETUP", &RtspSession::handleReq_Setup);s_cmd_functions.emplace("PLAY", &RtspSession::handleReq_Play);s_cmd_functions.emplace("PAUSE", &RtspSession::handleReq_Pause);s_cmd_functions.emplace("TEARDOWN", &RtspSession::handleReq_Teardown);s_cmd_functions.emplace("GET", &RtspSession::handleReq_Get);s_cmd_functions.emplace("POST", &RtspSession::handleReq_Post);s_cmd_functions.emplace("SET_PARAMETER", &RtspSession::handleReq_SET_PARAMETER);s_cmd_functions.emplace("GET_PARAMETER", &RtspSession::handleReq_SET_PARAMETER);});auto it = s_cmd_functions.find(method);if (it == s_cmd_functions.end()) {sendRtspResponse("403 Forbidden");throw SockException(Err_shutdown, StrPrinter << "403 Forbidden:" << method);}(this->*(it->second))(parser);parser.Clear();
}

3、处理rtp包(rtcp包处理此处忽略),rtp解码

void RtspSession::onRtpPacket(const char *data, size_t len) {uint8_t interleaved = data[1];if (interleaved % 2 == 0) {if (!_push_src) {return;}auto track_idx = getTrackIndexByInterleaved(interleaved);handleOneRtp(track_idx, _sdp_track[track_idx]->_type, _sdp_track[track_idx]->_samplerate, (uint8_t *) data + RtpPacket::kRtpTcpHeaderSize, len - RtpPacket::kRtpTcpHeaderSize);} else {auto track_idx = getTrackIndexByInterleaved(interleaved - 1);onRtcpPacket(track_idx, _sdp_track[track_idx], data + RtpPacket::kRtpTcpHeaderSize, len - RtpPacket::kRtpTcpHeaderSize);}
}using RtpReceiver = RtpMultiReceiver<2>;bool RtpMultiReceiver::handleOneRtp(int index, TrackType type, int sample_rate, uint8_t *ptr, size_t len) {assert(index < kCount && index >= 0);	//RtpTrackImp _track[kCount];return _track[index].inputRtp(type, sample_rate, ptr, len).operator bool();
}

在这里将数据封装成一个rtp包,然后调用onBeforeRtpSorted**(作用暂时没搞清楚)**
调用sortPacket排序

class RtpTrackImp : public RtpTrack
//处理了一个完整的rtp包
RtpPacket::Ptr RtpTrack::inputRtp(TrackType type, int sample_rate, uint8_t *ptr, size_t len)
{...auto rtp = RtpPacket::create();//需要添加4个字节的rtp over tcp头rtp->setCapacity(RtpPacket::kRtpTcpHeaderSize + len);rtp->setSize(RtpPacket::kRtpTcpHeaderSize + len);rtp->sample_rate = sample_rate;rtp->type = type;//赋值4个字节的rtp over tcp头uint8_t *data = (uint8_t *) rtp->data();data[0] = '$';data[1] = 2 * type;data[2] = (len >> 8) & 0xFF;data[3] = len & 0xFF;...onBeforeRtpSorted(rtp);sortPacket(rtp->getSeq(), rtp);return rtp;
}

排好序的包放入 _pkt_sort_cache_map,然后将第一个数据抛出来,过程如下

class RtpTrack : private PacketSortor<RtpPacket::Ptr>;
//pkt排序缓存,根据seq排序
PacketSortor::map<SEQ, T> _pkt_sort_cache_map;/*** 输入并排序* @param seq 序列号* @param packet 包负载*/
void sortPacket(SEQ seq, T packet) {......tryPopPacket();}void tryPopPacket() {......popPacket();......}void popPacket() {......//过滤回跳包popIterator(it);......}void popIterator(typename map<SEQ, T>::iterator it) {......_cb(seq, data);}

_cb 就是onRtpSorted函数,所以抛出来的数据最终都会回调到 RtspSession的onRtpSorted函数,然后进入RtspSession的成员RtspMediaSourceImp::Ptr _push_src

void RtspSession::onRtpSorted(RtpPacket::Ptr rtp, int track_idx) {_push_src->onWrite(std::move(rtp), false);
}

进入_push_src 的函数如下:

  /*** 输入rtp并解析* 接收到的排好序的rtp*/void onWrite(RtpPacket::Ptr rtp, bool key_pos) override {if (_all_track_ready && !_muxer->isEnabled()) {//获取到所有Track后,并且未开启转协议,那么不需要解复用rtp//在关闭rtp解复用后,无法知道是否为关键帧,这样会导致无法秒开,或者开播花屏key_pos = rtp->type == TrackVideo;} else {//需要解复用rtpkey_pos = _demuxer->inputRtp(rtp);}GET_CONFIG(bool, directProxy, Rtsp::kDirectProxy);if (directProxy) {//直接代理模式才直接使用原始rtpRtspMediaSource::onWrite(std::move(rtp), key_pos);//DebugL<<"directProxy:"<<directProxy;}}

然后进入RtspMediaSourceImp的解复用器 RtspDemuxer,调用代码如下:

bool RtspDemuxer::inputRtp(const RtpPacket::Ptr &rtp) {switch (rtp->type) {case TrackVideo: {if (_video_rtp_decoder) {return _video_rtp_decoder->inputRtp(rtp, true);}return false;}case TrackAudio: {if (_audio_rtp_decoder) {_audio_rtp_decoder->inputRtp(rtp, false);return false;}return false;}default: return false;}
}

以H264为例,解复用的调用过程如下:

_video_rtp_decoder->inputRtp(rtp, true);

仔细分析一下这个过程 ,其中_video_rtp_decoder 定义如下

RtpCodec::Ptr _video_rtp_decoder;

赋值如下:

···
_video_rtp_decoder = Factory::getRtpDecoderByTrack(_video_track);
···
//
RtpCodec::Ptr Factory::getRtpDecoderByTrack(const Track::Ptr &track) {switch (track->getCodecId()){case CodecH264 : return std::make_shared<H264RtpDecoder>();case CodecH265 : return std::make_shared<H265RtpDecoder>();case CodecAAC : return std::make_shared<AACRtpDecoder>(track->clone());case CodecL16 :case CodecOpus :case CodecG711A :case CodecG711U : return std::make_shared<CommonRtpDecoder>(track->getCodecId());default : WarnL << "暂不支持该CodecId:" << track->getCodecName(); return nullptr;}
}

所以_video_rtp_decoder 本质是RtpCodec的继承类H264RtpDecoder,所以rtp包最终进入H264RtpDecoder类的inputRtp的函数,函数如下:

bool H264RtpDecoder::inputRtp(const RtpPacket::Ptr &rtp, bool key_pos) {auto seq = rtp->getSeq();auto ret = decodeRtp(rtp);if (!_gop_dropped && seq != (uint16_t) (_last_seq + 1) && _last_seq) {_gop_dropped = true;WarnL << "start drop h264 gop, last seq:" << _last_seq << ", rtp:\r\n" << rtp->dumpString();}_last_seq = seq;return ret;
}

最终在H264RtpDecoder类中的decodeRtp函数将rtp包变成了h264帧数据,并调用RtpCodec::inputFrame将分发出去,也就是如下函数

   /*** 写入帧并派发*/bool inputFrame(const Frame::Ptr &frame) override{if(_need_update){//发现代理列表发生变化了,这里同步一次lock_guard<mutex> lck(_mtx);_delegates_read = _delegates_write;_need_update = false;}//_delegates_read能确保是单线程操作的bool ret = false;for (auto &pr : _delegates_read) {if (pr.second->inputFrame(frame)) {ret = true;}}return ret;}

_delegates_read 定义如下,显然是一个map对象,map的value是一个FrameWriterInterface ,用来将帧数据回调出去,通过代码可知最终是代理类调用了inputFrame。

	/*** 写帧接口的抽象接口类*/
class FrameWriterInterface {
public:typedef std::shared_ptr<FrameWriterInterface> Ptr;FrameWriterInterface(){}virtual ~FrameWriterInterface(){}/*** 写入帧数据*/virtual bool inputFrame(const Frame::Ptr &frame) = 0;
};map<void *,FrameWriterInterface::Ptr>  _delegates_read;

注意上面函数中_delegates_read = _delegates_write;
而_delegates_write 只在如下函数中才会有更新,也就是说数据分发的代理类都在下面函数添加

   /*** 添加代理*/void addDelegate(const FrameWriterInterface::Ptr &delegate){//_delegates_write可能多线程同时操作lock_guard<mutex> lck(_mtx);_delegates_write.emplace(delegate.get(),delegate);_need_update = true;}

那么addDelegate是何时调用的呢?回到RtspDemuxer类,显然在创建VideoTrack时给解码类添加了代理

void RtspDemuxer::makeVideoTrack(const SdpTrack::Ptr &video) {if (_video_rtp_decoder) {return;}//生成Track对象,这里如果是h264编码,返回的就是H264Track_video_track = dynamic_pointer_cast<VideoTrack>(Factory::getTrackBySdp(video));if (!_video_track) {return;}setBitRate(video, _video_track);//生成RtpCodec对象以便解码rtp_video_rtp_decoder = Factory::getRtpDecoderByTrack(_video_track);if (!_video_rtp_decoder) {//找不到相应的rtp解码器,该track无效_video_track.reset();return;}//设置rtp解码器代理,生成的frame写入该Track_video_rtp_decoder->addDelegate(_video_track);addTrack(_video_track);}

知道了代理是怎么设置了,那么就能确认是谁调用了H264帧,现在看下面代码,getTrackBySdp返回的是一个H264Track类,最终是调用了_video_track (继承类是:H264Track)的inputFrame;

_video_track = dynamic_pointer_cast<VideoTrack>(Factory::getTrackBySdp(video));Track::Ptr Factory::getTrackBySdp(const SdpTrack::Ptr &track) {auto codec = getCodecId(track->_codec);if (codec == CodecInvalid) {//根据传统的payload type 获取编码类型以及采样率等信息codec = RtpPayload::getCodecId(track->_pt);}switch (codec) {......case CodecH264 : {//a=fmtp:96 packetization-mode=1;profile-level-id=42C01F;sprop-parameter-sets=Z0LAH9oBQBboQAAAAwBAAAAPI8YMqA==,aM48gA==auto map = Parser::parseArgs(track->_fmtp, ";", "=");auto sps_pps = map["sprop-parameter-sets"];string base64_SPS = FindField(sps_pps.data(), NULL, ",");string base64_PPS = FindField(sps_pps.data(), ",", NULL);auto sps = decodeBase64(base64_SPS);auto pps = decodeBase64(base64_PPS);if (sps.empty() || pps.empty()) {//如果sdp里面没有sps/pps,那么可能在后续的rtp里面恢复出sps/ppsreturn std::make_shared<H264Track>();}return std::make_shared<H264Track>(sps, pps, 0, 0);}
......
}

然后数据进入H264Track::inputFrame,很显然在这里对H264帧数据进行了处理,分包,

bool H264Track::inputFrame(const Frame::Ptr &frame) {using H264FrameInternal = FrameInternal<H264FrameNoCacheAble>;int type = H264_TYPE(frame->data()[frame->prefixSize()]);if (type == H264Frame::NAL_B_P || type == H264Frame::NAL_IDR) {return inputFrame_l(frame);}//非I/B/P帧情况下,split一下,防止多个帧粘合在一起bool ret = false;splitH264(frame->data(), frame->size(), frame->prefixSize(), [&](const char *ptr, size_t len, size_t prefix) {H264FrameInternal::Ptr sub_frame = std::make_shared<H264FrameInternal>(frame, (char *) ptr, len, prefix);if (inputFrame_l(sub_frame)) {ret = true;}});return ret;
}

再来观察下面函数,在这里会添加pps,sps信息(添加完pps,sps信息的h264数据就能直接用ffmpeg播放了),然后将数据发出去给各个代理,

bool H264Track::inputFrame_l(const Frame::Ptr &frame){int type = H264_TYPE( frame->data()[frame->prefixSize()]);bool ret = true;switch (type) {case H264Frame::NAL_SPS: {_sps = string(frame->data() + frame->prefixSize(), frame->size() - frame->prefixSize());break;}case H264Frame::NAL_PPS: {_pps = string(frame->data() + frame->prefixSize(), frame->size() - frame->prefixSize());break;}case H264Frame::NAL_AUD: {//忽略AUD帧;ret = false;break;}default://这里后面的帧就是h264帧,存文件就可以播放文件if (frame->keyFrame()) {//这里插入sps,pps帧信息insertConfigFrame(frame);}ret = VideoTrack::inputFrame(frame);break;}_is_idr = type == H264Frame::NAL_IDR;if (_width == 0 && ready()) {onReady();}return ret;
}

3、处理H264包,编码

那么数据时怎么从解码类(RtspDemuxer)到编码类(MultiMediaSourceMuxer)呢?注意在RtspMediaSourceImp类中有以下2个成员,分布式编码类和解码类

    RtspDemuxer::Ptr _demuxer;MultiMediaSourceMuxer::Ptr _muxer;

在以下函数中建立数据联系,_demuxer中的H264Track类将_muxer(MultiMediaSourceMuxer)添加进了他的代理

    /*** _demuxer触发的添加Track事件*/bool addTrack(const Track::Ptr &track) override {if (_muxer) {if (_muxer->addTrack(track)) {track->addDelegate(_muxer);return true;}}return false;}

所以H264Track处理后的h264帧在数据分发时会进入MultiMediaSourceMuxer类的接口inputFrame

 bool inputFrame(const Frame::Ptr &frame) override {GET_CONFIG(bool, rtsp_demand, General::kRtspDemand);if (_clear_cache && rtsp_demand) {_clear_cache = false;_media_src->clearCache();}if (_enabled || !rtsp_demand) {_media_src->intputFrame(frame);//笔者添加的过程return RtspMuxer::inputFrame(frame);}return false;}

然后数据进入RtspMuxer的inputFrame

//RtspMuxer成员变量
RtpCodec::Ptr _encoder[TrackMax];bool RtspMuxer::inputFrame(const Frame::Ptr &frame) {auto &encoder = _encoder[frame->getTrackType()];bool ret = encoder ? encoder->inputFrame(frame) : false;;return ret;
}

下面说明_encoder的申明、类的继承关系、及赋值过程;

//RtspMuxer成员变量
RtpCodec::Ptr _encoder[TrackMax];
class RtpCodec : public RtpRing, public FrameDispatcher , public CodecInfo{}//_encoder赋值过程
bool RtspMuxer::addTrack(const Track::Ptr &track) {//根据track生成sdpSdp::Ptr sdp = track->getSdp();if (!sdp) {return false;}auto &encoder = _encoder[track->getTrackType()];encoder = Factory::getRtpEncoderBySdp(sdp);if (!encoder) {return false;}//设置rtp输出环形缓存encoder->setRtpRing(_rtpInterceptor);//添加其sdp_sdp.append(sdp->getSdp());trySyncTrack();return true;
}

在getRtpEncoderBySdp中赋值,函数如下,显然根据编码类型,返回编码类,这之后依然以h264为例说明,那么返回的就是H264RtpEncoder


RtpCodec::Ptr Factory::getRtpEncoderBySdp(const Sdp::Ptr &sdp) {......switch (codec_id){case CodecH264 : return std::make_shared<H264RtpEncoder>(ssrc, mtu, sample_rate, pt, interleaved);case CodecH265 : return std::make_shared<H265RtpEncoder>(ssrc, mtu, sample_rate, pt, interleaved);case CodecAAC : return std::make_shared<AACRtpEncoder>(ssrc, mtu, sample_rate, pt, interleaved);case CodecL16 :case CodecOpus :case CodecG711A :case CodecG711U : return std::make_shared<CommonRtpEncoder>(codec_id, ssrc, mtu, sample_rate, pt, interleaved);default : WarnL << "暂不支持该CodecId:" << codec_id; return nullptr;}
}

那么此时数据也就会进入H264RtpEncoder的inputFrame函数


bool H264RtpEncoder::inputFrame(const Frame::Ptr &frame) {// WarnL<<"inputFrame:";auto ptr = frame->data() + frame->prefixSize();switch (H264_TYPE(ptr[0])) {case H264Frame::NAL_SPS: {_sps = Frame::getCacheAbleFrame(frame);return true;}case H264Frame::NAL_PPS: {_pps = Frame::getCacheAbleFrame(frame);return true;}default: break;}if (_last_frame) {//如果时间戳发生了变化,那么markbit才置true//WarnL<<"inputFrame_l:";inputFrame_l(_last_frame, _last_frame->pts() != frame->pts());}_last_frame = Frame::getCacheAbleFrame(frame);return true;
}bool H264RtpEncoder::inputFrame_l(const Frame::Ptr &frame, bool is_mark){if (frame->keyFrame()) {//保证每一个关键帧前都有SPS与PPS//WarnL<<"keyFrame";insertConfigFrame(frame->pts());}packRtp(frame->data() + frame->prefixSize(), frame->size() - frame->prefixSize(), frame->pts(), is_mark, false);return true;
}

然后重新将数据打包,最终都会调用RtpCodec::inputRtp(rtp, gop_pos)函数,rtp包进入环形数组,准备分发出去

virtual bool inputRtp(const RtpPacket::Ptr &rtp, bool key_pos){//string bytes = bytestohexstring(rtp->data(),rtp->size());// WarnL<<"rtp index:"<<rtp->rtpDebugIndex<<rtp->getSeq();//"\n"<<bytes;if(_rtpRing){_rtpRing->write(rtp,key_pos);}return key_pos;}

**总结:通过rtsp端口的数据最终都会在RtspSession类中处理,推流时首先实例化_push_src(RtspMediaSourceImp),同时将_push_src放入一个全局的map变量s_media_source_map中去管理(用来后面取出数据),接下来开始处理数据包,过程如下:
1、处理rtp包:将接收到的原始rtp,经过分包排序,最终回调到RtspSession自身的成员函数中,在这里将数据发给_push_src(RtspMediaSourceImp)去处理
2、解码:在RtspMediaSourceImp类中又会将数据发给H264RtpDecoder去处理,最后将rtp包解码成h264,然后分发出来
3、编码:解码时数据最终又会回调到RtspMediaSourceImp类的成员变量_muxer(MultiMediaSourceMuxer)中去处理,然后到达H264RtpEncoder类中去编码,最后进入环形队列
**

RTSP 拉流

在鉴权成功时,找到推流媒体源,同时将sdp信息绑定到当前sdp


void RtspSession::onAuthSuccess() {TraceP(this);weak_ptr<RtspSession> weakSelf = dynamic_pointer_cast<RtspSession>(shared_from_this());MediaSource::findAsync(_media_info, weakSelf.lock(), [weakSelf](const MediaSource::Ptr &src){auto strongSelf = weakSelf.lock();if(!strongSelf){return;}auto rtsp_src = dynamic_pointer_cast<RtspMediaSource>(src);if (!rtsp_src) {//未找到相应的MediaSourcestring err = StrPrinter << "no such stream:" << strongSelf->_media_info._vhost << " " << strongSelf->_media_info._app << " " << strongSelf->_media_info._streamid;strongSelf->send_StreamNotFound();strongSelf->shutdown(SockException(Err_shutdown,err));return;}//找到了相应的rtsp流strongSelf->_sdp_track = SdpParser(rtsp_src->getSdp()).getAvailableTrack();if (strongSelf->_sdp_track.empty()) {//该流无效WarnL << "sdp中无有效track,该流无效:" << rtsp_src->getSdp();strongSelf->send_StreamNotFound();strongSelf->shutdown(SockException(Err_shutdown,"can not find any available track in sdp"));return;}strongSelf->_rtcp_context.clear();for (auto &track : strongSelf->_sdp_track) {strongSelf->_rtcp_context.emplace_back(std::make_shared<RtcpContextForSend>());}strongSelf->_sessionid = makeRandStr(12);strongSelf->_play_src = rtsp_src;......});
}

在handleReq_Play函数中利用_play_reader 去取出环形缓存区的rtp包,同时发给客户端

void RtspSession::handleReq_Play(const Parser &parser) {......auto play_src = _play_src.lock();......if (!_play_reader && _rtp_type != Rtsp::RTP_MULTICAST) {weak_ptr<RtspSession> weakSelf = dynamic_pointer_cast<RtspSession>(shared_from_this());_play_reader = play_src->getRing()->attach(getPoller(), useGOP);_play_reader->setDetachCB([weakSelf]() {auto strongSelf = weakSelf.lock();if (!strongSelf) {return;}strongSelf->shutdown(SockException(Err_shutdown, "rtsp ring buffer detached"));});_play_reader->setReadCB([weakSelf](const RtspMediaSource::RingDataType &pack) {auto strongSelf = weakSelf.lock();if (!strongSelf) {return;}strongSelf->sendRtpPacket(pack);});}......
}
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. Java学习笔记--Java中必记常见异常

    JAVA常见异常 Java.io.NullPointerException null 空的&#xff0c;不存在的NullPointer 空指针 空指针异常&#xff0c;该异常出现在我们操作某个对象的属性或方法时&#xff0c;如果该对象是null时引发。 String str null; str.length();//空指针异常上述代码中引用类型…...

    2024/4/13 9:43:11
  2. constexpr关键字

    constexpr关键字 起因 cppreference.com上查看std::find_if函数的签名如下: c20前函数没有constexpr修饰&#xff0c;c20及以后使用constexpr进行修饰&#xff0c;为什么&#xff1f; c20后添加constexpr对之前的代码会有影响吗&#xff08;会不会导致之前的代码失效&#…...

    2024/5/3 15:44:56
  3. 剑指Offer刷题记录_Day17

    排序&#xff08;中级&#xff09; Q1 最小的k个数 感觉比较快的两个思路&#xff1a; 快速排序&#xff1a; 已知快排每一次调用Partition函数会将数列划分为大于小于基准数的两个序列&#xff0c;则我们可以在快排某次调用Partition函数时判断是否是K1的位置&#xff0c;若…...

    2024/4/13 9:43:11
  4. Java学习笔记--异常知识笔记

    结合学习和菜鸟笔记整理~附菜鸟教程中关于异常的网址 https://www.runoob.com/java/java-exceptions.html 我们为什么要处理异常&#xff1f;当程序执行过程中&#xff0c;遇到某一个异常&#xff08;该异常通常难以解决&#xff0c;例如拔网线产生的断网异常&#xff09;将会直…...

    2024/4/18 14:42:18
  5. 拓端tecdat|Python贝叶斯推断Metropolis-Hastings(M-H)MCMC采样算法的实现

    原文链接&#xff1a;http://tecdat.cn/?p25376 原文出处&#xff1a;拓端数据部落公众号 Metropolis-Hastings 算法对概率分布进行采样以产生一组与原始分布成比例的轨迹。 首先&#xff0c;目标是什么&#xff1f;MCMC的目标是从某个概率分布中抽取样本&#xff0c;而不需要…...

    2024/4/13 9:43:56
  6. HelloWorld、java语法规范、标识符、关键字

    HelloWorld 新建一个文件夹(存放代码)(注意文件名称示例Hello.java)文件夹里新建一个java文件(文件后缀名改成.java) 新建档案.txt–>新建档案.java(注意文件后缀名) 编写代码&#xff08;格式如下&#xff09; class HelloWorld{public static void main(String[] args…...

    2024/4/19 9:22:46
  7. OpenCV学习笔记(3)_OpenCV中的灰度阈值筛选和连通域分析实例

    OpenCV学习笔记(3)_OpenCV中的灰度阈值筛选和连通域分析实例 文章目录OpenCV学习笔记(3)_OpenCV中的灰度阈值筛选和连通域分析实例1. 实例来源2. 实例核心代码3. 实例知识点3.1 读取灰度图像3.2 cv::threshold3.3 cv::connectedComponentsWithStats3.4 连通域长宽筛选3.5 筛选结…...

    2024/4/13 9:44:06
  8. element ui Transfer 穿梭框清除查询条件

    关闭后清除查询条件 1.弹出框代码 关闭方法&#xff1a;closeroleFormVisible <el-dialog ref"roleTransfer" :title"dialogTitle" :visible.sync"roleFormVisible" width"50%" close"closeroleFormVisible"><e…...

    2024/4/19 12:56:36
  9. s32k1xx的FLASH学习笔记Flash Memory Module (FTFC)

    一、概述 FTFC仅适用于S32K1xx系列设备&#xff0c; S32K1xx系列map分布表格下载&#xff1a;S32K1XX_内存_MAP-硬件开发文档类资源-CSDN下载 1.Flsah内存类型 1.1程序Flsah&#xff1a;可执行程序代码的非易失性闪存 1.2FlexNVM: 非易失性闪存&#xff0c;可以执行程序代码…...

    2024/4/13 9:44:01
  10. 游戏思考04:网络游戏同步算法的理解(参考网易雷火jerish的文章,未完待续2/9)

    文章目录一、网络同步概念理解二、网络架构与传统同步1&#xff09;网络游戏架构的发展2&#xff09;传统同步面临的问题一、网络同步概念理解 举例&#xff1a; 比如说用户A用他的手机点击按钮注册了一个QQ账号&#xff0c;那么他的手机号等个人信息就会被存储到服务器上面&a…...

    2024/4/8 17:56:19
  11. Java: 将中文省市名转换为指定格式拼音

    需要实现的是&#xff1a; 输入中文城市名 自动转换成 指定格式拼音 如&#xff1a; 内蒙古自治区 自动转换成 Neimenggu 北京市 自动转换成 Beijing 青海省 自动转换成 Qinghai 香港 自动转换成 Xianggang 具体实现&#xff1a; package com.xx.utils.http; import n…...

    2024/4/13 9:44:11
  12. 云服务器与云虚拟主机的区别,服务器就真的比虚拟主机好吗?

    云服务器和云虚拟主机都是基于云计算的产品&#xff0c;具有灵活的可扩展性&#xff0c;可以根据实际需要随时补差价升级到更高级的产品。这两者的区别其实就如同服务器和虚拟主机的区别。很多人误以为服务器比虚拟主机更高级&#xff0c;其实并非如此。服务器和虚拟主机并无绝…...

    2024/4/14 18:25:33
  13. 纠葛划上休止符,英伟达失落,ARM奋起?

    “Arm公司将有一个光明的未来。作为Arm的客户&#xff0c;我们将在未来几十年里继续支持他们。”当英伟达创始人兼CEO黄仁勋说出这番话时&#xff0c;他是在针对2月8日英伟达和日本软银集团的联合声明发表评论&#xff1a;英伟达终止对Arm的收购业务。但人们或许会不由得想起&a…...

    2024/4/13 9:43:56
  14. 未找到可输出成fbx或obj的合并mesh且保留原材质球的方法

    下载了一个插件&#xff0c;可以将mesh输出成fbx或者obj格式&#xff0c;但是它不能将一个空物体组输出成一个独立模型&#xff0c;所以需要将空物体组下的子物体做合并 找到了以下代码段&#xff0c;用于在editor中添加选项&#xff0c;用以合并mesh并生成新物体 using Unit…...

    2024/4/19 0:29:55
  15. L1-043 阅览室 (20 分) C语言

    一、题目 天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时&#xff0c;管理员输入书号并按下S键&#xff0c;程序开始计时&#xff1b;当读者还书时&#xff0c;管理员输入书号并按下E键&#xff0c;程序结束计时。书号为不超过1000的正整数。当管理员将0作为…...

    2024/4/8 17:56:13
  16. ErrorMessage = InvalidVideo.NotFound : The video does not exist.

    场景&#xff1a;使用阿里云的视频点播服务&#xff0c;密钥、ID都没有问题但是就是找不到这个视频地址 原因&#xff1a;点播服务接入地域配置有问题&#xff0c;得写自己开通的时候选择的地址&#xff0c;要是真忘了干脆一个个试...

    2024/4/16 23:49:32
  17. 获取字符串中最多的字母

    <script>// abcdefgsdds 获取里面字面最多的字母var str abcdefgsdds;var obj {};for (var i 0; i < str.length; i) {// console.log(str[i]);//obj.str[i] 不能这样写 .运算权限最高if (obj[str[i]]) { //存在obj[str[i]] obj[str[i]] 1;} else { //不存在o…...

    2024/4/16 22:48:28
  18. Jmeter和JDK安装以及环境配置

    JDK安装和配置&#xff1a;https://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html?qq-pf-topcqq.c2c Jmeter安装和配置&#xff1a; Jmeter下载安装配置---测试小白_上天呐的博客-CSDN博客_jmeter下载...

    2024/4/13 9:44:01
  19. RTKLIB源码解析(二)、 RTK定位(rtkpos.c)

    本博客是转载&#xff0c;感谢&#xff1a; rtklib代码详解——rtkpos.c - 博客园—哆啦A梦 - 博客园 主函数&#xff1a;rtkpos 1、 设置基站位置 2、 统计基站和流动站的卫星数量 3、 单点定位解算   4、若定位模式为单点定位&#xff0c;直接返回 5、精密单点定位 …...

    2024/4/18 8:52:08
  20. 反射的使用

    反射是什么 .java文件在编译后会生成 .class文件&#xff0c;而这个 .class就像是镜子一样拥有 .java的全部属性方法等&#xff0c;而我们通过 .class获取到 .java的全部内容&#xff0c;这样通过中转一样的方式就叫反射。java本是静态语言&#xff0c;反射的存在让java成为半个…...

    2024/4/13 9:44:16

最新文章

  1. Redisson和RedisTemplate

    Redisson Redisson 是一个提供了多种分布式数据结构和分布式服务的高级功能的 Redis 客户端库。它建立在 Redis 这个开源键值存储系统的基础上&#xff0c;提供了Java对象(如&#xff1a;Map, Set, List, Queue, Lock, AtomicLong 等)与 Redis 服务器之间的映射。 简言之&…...

    2024/5/3 20:28:08
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 阿里云8核32G云服务器租用优惠价格表,包括腾讯云和京东云

    8核32G云服务器租用优惠价格表&#xff0c;云服务器吧yunfuwuqiba.com整理阿里云8核32G服务器、腾讯云8核32G和京东云8C32G云主机配置报价&#xff0c;腾讯云和京东云是轻量应用服务器&#xff0c;阿里云是云服务器ECS&#xff1a; 阿里云8核32G服务器 阿里云8核32G服务器价格…...

    2024/5/3 7:37:38
  4. 贪心算法|376.摆动序列

    力扣题目链接 class Solution { public:int wiggleMaxLength(vector<int>& nums) {if (nums.size() < 1) return nums.size();int curDiff 0;int preDiff 0;int result 1;for (int i 0; i < nums.size() - 1; i) {curDiff nums[i 1] - nums[i];if ((pre…...

    2024/5/3 1:30:00
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/1 17:30:59
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/2 16:16:39
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/2 9:28:15
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/2 15:04:34
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/30 22:21:04
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/1 4:32:01
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/2 9:07:46
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; 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
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在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