转载:SRT传输库评估报告(V1.0.0)
原文地址:https://blog.csdn.net/mediapro/article/details/105790057,感谢大神;
SRT传输库评估报告(V1.0.0)
www.mediapro.cc
- SRT传输库简介
SRT是Haivision开源的一套集FEC前向纠错、ACK、NAK选择性重传、JitterBuff、拥塞控制、传输安全保障等技术于一体的实时传输解决方案。方案基于UDP协议进行扩展,目前SRT在广电领域获得了不错的应用,因其弱网抵抗以及较好的实时性,必将取代基于TCP的RTMP伪直播方案。SRT方案使用C++开发,提供C风格接口,依赖OpenSSL\Pthreads库,官方编译脚本支持Windows、Linux、Mac\IOS系统,可自行参考移植到Android。
本文对SRT封装库SD-SRT进行测试,该封装库主要针对音视频领域需求,进行了帧码流拆分合并、丢包冻结、自动重连、EPoll收发、状态回调等功能的扩展,并对外提供简洁易用的接口,可用于内网点对点或者公网CS架构,其接口说明见附录。
希望通过本测试,加深对于SRT的传输特征、参数配置、适用场合的认识。
从官方声明可见,SRT具有以下特点:
- 基于ARQ(ACK+NAK),ACK机制相比TCP ACK做了一定改进,采用Full ACK和Light ACK结合的模式,其中Full ACK每10ms发送一次,对端收到ACK后会返回ACKACK信令。Light ACK则无需ACKACK,每64个包发送一次。
SRT利用Full ACK完成RTT的计算、反馈接收端的接收缓存情况等。
- SRT中的NAK机制可与FEC相结合,可以选择三种模式:仅对FEC恢复失败的情况下发起NAK重传请求、丢包均发起NAK、丢包不发起NAK。另外SRT会在预估超时的情况下,提前结束无意义的重传动作,在延时和码率允许的情况下支持反复重传直至成功。
- 在1.4版本之后支持2D 异或FEC(默认关闭,需自行以Filter方式启用)。注:经过测试,收发双方均设置FEC成功,码流中确实产生冗余包,但未见显著的丢包恢复能力,当开启FEC时,SRT库长时间拷机存在异常奔溃的情况。正如Nimble Streamer描述的那样(https://blog.wmspanel.com/search/label/srt),SRT中的FEC功能正处于开发完善中,存在较大风险,用户根据自身情况决策是否在当前版本开启。在本次测试中,我们使用SRT的默认配置即关闭FEC功能。
- 发端Smooth处理和收端JitterBuff处理。
- 仿socket,支持双向通讯,支持Epoll异步处理。
- 支持AES 128/192/256加密
- 内容无关,即可以传输音视频也可以传输其他类型数据。
- 提供较为详尽的统计信息(上下行丢包率、码率、RTT、重传成功率等),支持带宽估计参考(定时插入探针包,通过包间隔评估码率)。
- 支持Message消息模式、文件Buff模式和Live实时模式(默认),前两者可保证传输不丢包但不保证实时性,后者以实时性为目标允许丢包。本文仅考虑Live实时模式。
SRT基于UDP,在UDP基础上增加16字节头部,其包结构如下:
默认情况,SRT按MTU 1500字节进行配置,去除20字节IP头、8字节UDP头、16字节SRT头后,支持负载可达到1456字节,又因其保持对TS容器的友好性,默认限定负载长度为188*7=1316字节。(Windows平台为了网络性能达到最优,建议用户设置UDP负载小于1024,此时用户可设置SRT最大长度不超过1024 - 16)。
- 实验环境
SRT版本说明
本次测试使用SRT版本:1.4.1-152-a4ff6ab
网络环境说明
为了保证测试环境一致性和可重现性,我们将在较好的网络环境下借助第三方弱网模拟工具Clumsy,模拟各类网络情况。
Clumsy是一款小巧而功能强大的开源弱网模拟工具,支持windows平台,可用于模拟:丢包(Drop)、延时(Lag)、重复(Duplicate)、乱序(Out of order)、篡改(Tamper)、抖动(Throttle)等。其项目地址:http://jagt.github.io/clumsy/cn/index.html
图3 Clumsy对所有发送的包按10%进行丢包处理示意
如果要对发往指定某IP的UDP包进行丢包,可将Filtering条件设置为:
udp and (ip.DstAddr == 192.168.31.33)
本次测试我们使用两台PC机器,二者接入到同一个WIFI网络,信号强度充足,其中一台作为发送端并在其上执行Clumsy,另一台作为接收端。
测试DEMO说明
本次测试使用windows平台下的桌面投屏DEMO,DEMO分为发送端和接收端,发送端采集自身桌面和扬声器音频,压缩后通过SD-SRT 点对点SDK发往接收端,后者解码并渲染输出,从而实现屏幕共享功能。在此场景下,DEMO接收端将充SRT服务端,DEMO发送端充当SRT客户端。
A、接收端
该组DEMO的功能与投屏类应用类似,我们首先启动接收端DEMO。进入UDP-AVClient-ScreenPlay文件夹,双击启动AVClient.exe即可。
图4 接收端DEMO启动界面
接收端启动后,将显示其投屏码(IP:PORT),发送端可以使用该投屏码进行投屏。
当发送端码流到来时,接收端将使用一个新的窗口“Remote Video”显示远端画面,如下图所示:
图5 接收端独立的窗口展示远端画面
注意:“Remote Video”窗口是一个全屏窗口,用户可以自行在底部任务栏切换。当远端停止音视频传输时,该窗口内容无更新。该窗口不会响应鼠标事件,只能底部切换。
接收端文件夹下的AVClient.ini文件为其配置文件,对配置文件的修改需要重启客户端方能生效。配置文件包括如下几项:
图6 接收端配置文件
UseFreezeFrameWhenLost 表示当出现视频丢包无法恢复时,为了不展现出花屏而将画面冻结,直至完整的关键帧到来再继续送显。该值一般设置为1开启。
BufferTime表示接收端Jitter buff缓存毫秒数,对应SRT的SRTO_RCVLATENCY参数。为了抵抗网络传输、丢包重传等行为带来的抖动,SRT需要设置接收端缓存以保障输出的流畅性(可以在发送端和接收端中任意一方或双方设置,实际缓存时间取二者中的较大值),SRT的默认缓存时间为120ms,官方建议设置为RTT*4,最小值不低于120ms。因为流畅性和实时性(时延)是一对矛盾的指标,Jitter buff必然将引入一定延时。在后面的测试过程中,将会对BuffTime进行调整,查看调整前后的效果对比。
B、发送端
发送端为UDP-AVClient-ScreenCap目录下的AVClient.exe,在启动前我们需要先对其进行配置,配置文件为AVClient.ini
图7 发送端配置文件
VideoBitrate表示发送端使用的视频编码码率,单位kbps,设置为2000即表示2Mbps
VideoTransWidth表示发送端使用的视频编码宽度,VideoTransHeight表示视频编码高度,ViceFrameRate表示视频编码帧率(本程序使用Direct桌面采集,在性能较低的机器上可能采集帧率无法达到30fps,编码帧率仍然会按30fps配置编码器)
EncodeQualityLevel0to7表示当采用X264软编码时,使用的preset级别,0表示ultrafast,1表示superfast,2表示veryfast,3表示faster,4表示fast,5表示medium,6表示slow,7表示slower。等级越高同等码率下的图像质量越好,但CPU占用也越高,请根据自身机器配置而定,建议设置为1。当使用X264软编码时,使用5秒一个IDR帧。当使用硬编码时,使用3秒一个IDR帧。
HWEnable表示是否启用硬编码,程序支持Intel QSV硬编码和Nvidia硬编码,相比X264能获得更低的CPU占用。不过硬编码的缺点是灵活性不足,无法支持传输层IDR帧请求机制。
SrtMaxBitrateFactor表示设置SRT最大码率MAXBW为编码码率VideoBitrate的几倍,我们称之为峰值码率容忍度。比如该值为2.0,VideoBitrate为2000时,则将设置SRT的SRTO_MAXBW为2.0*2000 kbps(实际内部会转换为SRT所要求的BytePerSecond)。当设置为0.0时,SRT将不限码率。
SRT的 MAXBW对于传输性能影响较大,主要体现在两个方面,发送端将依据MAXBW调整发送数据间隔,实现Smooth发送平滑处理。另一方面,允许的MAXBW越大,短时间内允许的重传次数更多,越能提高弱网重传成功率,但也会给网络带来更大的码率波动压力。实际过程中应该根据自身编码器码率及其波动范围、信道带宽来综合权衡,设置合理的MAXBW。
启动发送端后进入如下界面,输入接收端展示的投屏码(IP:PORT)即可开始SRT连接。
图8 发送端启动界面
连接后,客户端将进入下图所示的待共享屏幕状态。可以点击主界面启动按钮或者使用悬浮球来启动桌面共享。启动后,接收端就能看到发送端的桌面并能听到发送端扬声器播放的音乐了。
图9 发送端开始共享桌面
- 测试项说明
说明:同市面上各大实时视频服务商一样,DEMO也提供丢帧冻结机制,这样用户无法察觉到丢帧带来的花屏,从而获得更好的用户体验。因此本次测试中,丢包最终将体现为画面卡顿。
评测项:流畅度
关于流畅度,我们将分为以下几个级别:
- 画面流畅
- 偶尔微弱卡顿(附加:卡顿时长+频率描述)
- 明显卡顿(附加:卡顿时长+频率描述)
- 较长时间卡顿
评测项:延时
延时计算方式:在发送端打开毫秒精度秒表,接收端将看到秒表值,使用手机对二者屏幕拍照,计算二者差值得到总延时。整个系统中,延时主要有非传输层延时和传输层延时两部分组成。非传输层延时包括:采集、编码、解码、渲染引入的延时,本DEMO实际采集帧率无法达到恒定30fps,对整体延时稍有影响。
传输层延时主要由接收端JitterBuff引入,后者用于消除网络因丢包重传、网络本身带来的抖动。JitterBuff越大,播发端缓存的数据越多。
需要说明的是延时指标和流畅性指标往往是一对矛盾,播发端缓存的数据越多,流畅性越好,延时也越大,反之若缓存的数据较少或者不缓存,则延时更低,但与此同时它的弱网抵抗力越差,重传恢复成功率越低进而影响流畅性。
上图是SRT的Too-Late Packet Drop机制描述,虽然为3号包的丢失发起了NAK请求,但发送端在收到NAK请求后判断3号包即便发出也已经超出了其接收端的dead line,已经错过了它的输出时间,而放弃重传。同样即便3号包被重传,接收端也会因其错过输出时间而直接丢弃之。
评测项:清晰度
DEMO图像质量与传输层无紧密关系,主要由用户指定的编码分辨率、码率、桌面画面内容决定。注:帧率降低时,帧间相关性降低,运动估计残差更大,同等码率下编码质量会稍弱。
- 测试结果
- 丢包测试
为了研究接收端缓存时间、发送端峰值码率容忍度对于丢包抵抗力的影响,我们设计以下测试(发送端编码码率为2Mbps,720P分辨率,X264软编码,30fps,发送端全屏播放影片《美女与野兽》,画面中等复杂度)。
A、丢包率5%,发送端峰值码率容忍度设置为2.0,接收端缓存时间依次设置为200ms、300ms、400ms、500ms,观察卡顿频率、峰值码率、延时三个指标。
接收缓存时间 | 卡顿频率 | 实际峰值/平均码率 | 实际延时 |
120ms(SRT默认值) | 约20秒卡顿一次 | 2.7Mbps/2.1Mbps | 300ms |
200ms | 约30秒卡顿一次 | 2.7Mbps/2.1Mbps | 420ms |
300ms | 约40秒卡顿一次 | 2.9Mbps/2.1Mbps | 530ms |
400ms | 约40秒卡顿一次 | 2.9Mbps/2.1Mbps | 630ms |
500ms | 约40秒卡顿一次 | 2.9Mbps/2.1Mbps | 720ms |
通过本项实验,我们发现接收端缓存时间对丢包抵抗有一定正向作用,缓存时间过短,容易在发送端放弃重传(预判超出接收端包输出时间)或者接收端收到后因超时而主动丢弃。当缓存时间达到要求后,继续增大缓存时间对丢包抵抗力无明显作用。
- 丢包率5%,接收端缓存时间设置为500ms,发送端峰值码率容忍度依次设置为3.0、4.0、0.0(无限制),观察卡顿频率、峰值码率、延时三个指标。
峰值码率容忍度 | 卡顿频率 | 实际峰值/平均码率 | 实际延时 |
3.0 | 约220秒卡顿一次 | 3.2Mbps/2.2Mbps | 720ms |
4.0 | 约240秒卡顿一次 | 3.5Mbps/2.3Mbps | 720ms |
无限制(SRT默认值) | 长时间无卡顿 | 3.6Mbps/2.3Mbps | 720ms |
通过本项实验,我们确定发送端码率峰值放得越宽,丢包抵抗力越强,这是因为短时间内可以更高频率的进行丢包重传,增加了重传次数也就提升了成功率。当我们的网络允许较大的码率波动时,非受限的MAXBW设置可以获得显著的质量提升。
- 接收端缓存时间设置为500ms,发送端峰值码率容忍度设置为0.0(无限制),依次设置丢包率为10%、20%、30%、50%,观察卡顿频率、峰值码率三个指标。
丢包率 | 卡顿频率 | 实际峰值/平均码率 |
10% | 长时间无卡顿 | 3.5Mbps/2.4Mbps |
20% | 约300秒卡顿一次 | 3.5Mbps/2.5Mbps |
30% | 约30秒卡顿一次 | 4.5Mbps/2.9Mbps |
50% | 约10秒卡顿一次 | 8Mbps/4Mbps |
随着丢包率的继续上升,即便不限制码率峰值,由于缓存时间的限制,在有限的时间内重传仍然存在失败的可能,导致最终丢包卡顿。此时需要增大接收缓存时间来进一步提高丢包抵抗力。
- 重复测试
发送端使用Clumsy 设置Duplicate发送重复率5%、12%、20%、30%,每次重复1包(Count设置为2)。发送端使用峰值码率容忍度设置为0.0(无限制),接收端使用缓存时间120ms。
5%重复包时,连续观察20分钟,画面流畅,延时稳定在300ms左右。
12%重复包时,连续观察20分钟,画面流畅,延时稳定在300ms左右。
20%重复包时,连续观察20分钟,画面流畅,延时稳定在300ms左右。
30%重复包时,连续观察20分钟,画面流畅,延时稳定在300ms左右。
可见单纯的重复包对SRT影响很小。
- 乱序测试
发送端使用Clumsy 设置Out of order发送乱序率30%。发送端使用峰值码率容忍度设置为0.0(无限制),接收端使用缓存时间依次为120ms、300ms、500ms。
缓存时间 | 卡顿频率 | 实际峰值/平均码率 |
120ms | 约100秒卡顿一次 | 3.5Mbps/2.5Mbps |
300ms | 约120秒卡顿一次 | 3.5Mbps/2.5Mbps |
500ms | 约155秒卡顿一次 | 3.5Mbps/2.5Mbps |
可见乱序包对系统影响很大,接近丢包的影响,可能系统内部的乱序容忍窗口上限较小,很多乱序当做丢包处理(SRT会根据超时迟到包的偏离间隔来更新乱序容忍窗口)。但缓存时间增大时,对乱序的恢复能力明显增加,这可能是乱序容忍窗口扩大以及重传成功率提升两方面因素导致。
- 延时测试
发送端使用Clumsy 设置Lag发送延时50、100、200、400、600ms。
经过测试,线路延时最终会叠加到总体延时之上,测试结果符合预期。
- 抖动测试
发送端峰值码率容忍度设置为0.0(无限制),接收端使用缓存时间为120ms,进行如下实验:
发送端使用Clumsy 设置Throttle分别5%、12%、20%、30%概率抖动30ms。
测试结果:5%~30%概率30ms抖动对流畅性、延时无可感知的影响。
发送端使用Clumsy 设置Throttle 30%概率抖动100ms。
测试结果:小概率卡顿,延时增长到500ms,关闭抖动后延时仍为500ms未回归。说明SRT根据抖动情况自动增大缓存时间,避免因缓存不足而持续卡顿。
- 极速测试
发送端峰值码率容忍度设置为0.0(无限制),接收端使用缓存时间为5ms,不开启丢包等其他弱网测试,视频卡顿频繁。也证实了官网的说法,即便网络RTT非常小,也不要修改接收端缓存时间小于默认值120ms。
- 断网测试
本DEMO基于SD-SRT库,内部实现了自动重连机制,当物理网络断开或者丢包率过高导致SRT断开后,SD-SRT将不断尝试重连,网络恢复后将快速重连上并恢复业务。实际验证网线插拔,突发丢包率达到80%以上等场景,业务均可恢复。
- SRT中的FEC方案
SRT采用滤镜的方式引入FEC并且默认情况下关闭了FEC功能,可通过SRTO_PACKETFILTER选项设置FEC描述字符串来启用。描述字符串格式为:
"fec,cols:%d,rows:%d,layout:%s,arq:%s"
其中col用于描述2D 异或FEC的列数,rows描述行数,layout描述FEC的布局(even、staircase),arq描述FEC与NAK的结合方式。下图是一种3行6列even布局的FEC示意图,图中1~18号灰色包为媒体包,R1~R9号橙色包为冗余包,它们共同组成一个FEC Group。其中1号冗余包由1~6号媒体包异或得到,4号冗余包由1、7、13号媒体包异或得到。
2D FEC rows=3, cols=6
以上布局,冗余率为9/18=50%。
假设丢包1、2、3、4、5、6、R1、7共8个,可以由8~12 + R2恢复7号媒体包,7、13、R4恢复1号媒体包,8、14、R5恢复2号媒体包并按此规则依次恢复3、4、5、6。
假设丢包13、14、15、16、17、18、R3、R4,将无法恢复。
假设超出8个丢包,比如丢包1、2、3、4、5、6、R1、7、8,只能恢复3、4、5、6号媒体包。这种两头丢失、中间恢复的情况对于视频流用途不太大,因为视频流往往采用丢包冻结机制,一帧中任意丢包均丢弃整帧码流避免花屏。对于音频包,任何包的恢复都是有利的。两头丢失、中间恢复对于重传来说可以减少部分包的重传,但相比全部重传是否一定产生优势比较难说。(对比2D异或FEC,若采用RS FEC 50%的冗余(18 + 9),可以抵抗任意9个丢包)
以上为even布局,包的发送顺序为:1、2、3、4、5、6、R1、7、8、9、10、11、12、R2、13、R4、14、R5、15、R6、16、R7、17、R8、18、R9、R3,可见在Group的尾部形成了较为密集的数据发送(带宽增长了一倍),对网络并不友好。Staircase阶梯布局正是为了解决这一问题,通过阶梯排列可以将冗余包的发送错开,避免集中发送带来的码率波动。
值得注意的是2D FEC的冗余度是由行和列决定的,列越大抵抗连续丢包的能力越强。如果上图改成6行3列,其最多抵抗连续5个丢包。
开启FEC时,若发生丢包,FEC恢复处理将引入抖动,比如收到的媒体包和冗余包:1、3、4、5、6、7、8、R1、R2、R3,其中2号媒体包的丢失需要暂停输出,并等到R1号冗余包到来才能恢复并输出。对于2D异或FEC,为消除FEC带来的抖动,至少需要准备的延时LatencyFec为N个包的发送时长:
N = (R + (C - 1)) + 2
其中R为row行大小,C为cols列大小,N个包的发送时长与码率、帧率强相关。极端情况下假设码率比较低,1帧视频仅1个包,帧率30fps,N为30时,最小需要准备的缓存时间为1秒。
当FEC的ARQ选项配置为ALWAYS时,即只要发现丢包即刻发起NAK重传请求,则推荐的延时为max(RTT*4, LatencyFec)。当FEC的ARQ选项配置为ONREQ时,推荐的延时为RTT*4 + LatencyFec即二者之和,这是因为ONREQ模式下,需要等到确认FEC失败才发起NAK重传,确认失败的条件是当前FEC GROUP已经接收完成了仍旧无法恢复GROUP内丢失的包。
QOS-FEC-NACK方案的重传机制与SRT有所不同,QOS-FEC-NACK会根据GROUP内已检测到的丢包数目、包类型结合GROUP的冗余包数量提前预判是否需要发起重传,不需要等到下一个GROUP到来才发起重传请求,这样做的目的是尽量减少重传等待时间进而减小延时,对于已经具备媒体包恢复条件或者媒体包未丢失的情况,FEC冗余包的丢失不会触发重传,因为它们已经没有意义。
- SRT与QOS-FEC-NACK方案的区别
| SRT | QOS-FEC-NACK |
机制 | ARQ(ACK+NACK)+ FEC | NACK + FEC |
模式 | Live /File/Message | Live |
主要技术 | 发端Smooth JitterBuff 2D XOR FEC,固定冗余度 FEC作为NACK重传参考 超时时间内反复重传 NACK信令冗余防丢失 NACK主动放弃机制 带宽估计 内部传输模式(内部维护socket) OpenSSL安全 | 发端Smooth JitterBuff 1D RS FEC 自适应冗余度 FEC 视频帧边界形成大GROUP抗连续丢包抵抗力强 FEC作为NACK重传参考 仅单次重传机会 NACK预判提前发起 NACK信令冗余防丢失 NACK主动放弃机制 内部传输模式 外部传输模式 码率自适应参考信息提供 |
推荐场景 | 推荐单链路上4*RTT延时(服务器转发模式下总延时8*RTT)。适合实时性要求1秒左右的单向抗弱网直播或者RTT较小、带宽不受限但需要抵抗突发丢包的内网场合。 有望成为一些领域的标准协议。 | 推荐在实时性要求较高的互动场合使用,允许一定的丢包(体现为画面卡顿)。适合要求带宽波动比较稳定可控的场合。 对外无依赖性、轻量级、跨平台性能佳。 |
缺点 | 默认未开启FEC的情况下,弱网抵抗力重点依赖ARQ机制,总体延时偏大。 FEC为新增功能稳定性还有所欠缺,FEC未与视频帧信息结合,同样冗余度的情况下抗丢包能力弱。 | 即便放宽延时指标,也无法保证100%的接收成功率。(FEC+单次NACK重传,若重传仍然丢失或者重传超时,都将体现为最终丢包)。 为私有协议,收发双方均需集成才能互通。 |
- 总结
我们测试了SRT在默认关闭FEC的场景下的弱网抵抗力,对其传输性能影响较大的两个参数(接收缓存时间、最大码率)进行了重点评估。当前SRT版本的推荐应用场景为:实时性要求1秒左右的单向抗弱网直播或者RTT较小、带宽不受限但需要抵抗突发丢包的内网场合。另外SRT提供的可靠传输文件模式和消息模式可用于改进现有TCP传输方案,提高弱网下的吞吐率。我们将进一步跟踪SRT项目的进展,待其FEC功能稳定性提升后另行评估。
- 参考文献
- Efficient usage of SRT latency and maxbw parameters, Nimble Streamer的SRT推荐配置
https://blog.wmspanel.com/2019/06/srt-latency-maxbw-efficient-usage.html
- SRT FEC (forward error correction) support in Nimble Streamer,Nimble Streamer的SRT FEC风险说明
https://blog.wmspanel.com/2020/04/srt-fec-forward-error-correction.html
- SRT_Protocol_TechnicalOverview_DRAFT_2018-10-17.pdf
- https://datatracker.ietf.org/meeting/107/materials/slides-107-dispatch-srt-overview-01
- Interoperable Retransmission Protocols with Low Latency and Constrained Delay
http://kth.diva-portal.org/smash/get/diva2:1335907/FULLTEXT01.pdf
附录
SD-SRT封装库接口
- 系统初始化接口
/***
* 环境初始化,系统只需调用一次,主要用于SRT环境以及日志模块的初始化
* @param: outputPath 表示日志存放路径,支持相对路径和绝对路径,若目录不存在将自动创建
* @param: outputLevel表示日志输出的级别,只有等于或者高于该级别的日志输出到文件,取值范围参考LOG_OUTPUT_LEVEL
* @return:
*/
void SDSrtAvCom_Enviroment_Init(const char* outputPath, int outputLevel);
void SDSrtAvCom_Enviroment_Free();
- 创建和删除SD-SRT对象
/***
* 创建SrtAvCom
* @param unLogId: 日志ID,仅用于日志输出时的对象标识。
* @return: 返回模块指针,为NULL则失败
*/
void* SDSrtAvCom_Create(UINT unLogId);
/***
* 销毁SrtAvCom,使用者应该做好与其他API之间的互斥保护
* @param pRtp_avcom: 模块指针
* @return:
*/
void SDSrtAvCom_Delete(void* pRtp_avcom);
- 启动
/***
* 开始工作
* @param strLocalIP: 本地IP地址,允许为NULL,为非NULL时将绑定到该IP(网卡)。
* @param shLocalPort: 本地通信端口(该端口用于音频,视频端口号将在此基础上加1),对于客户端模式时,允许设置本地端口号为0,此时将由系统自动选择可用的端口。
* @param strRemoteIP: 对方IP地址,当为服务端模式时设置为NULL
* @param shRemotePort: 对方收发端口(该端口用于音频,视频端口号将在此基础上加1),当为服务端模式时设置为0
* @param pfVideoRecvCallBack: 接收到视频数据后的对外输出回调函数
* @param pfAudioRecvCallBack: 接收到音频数据后的对外输出回调函数
* @param pObject: 调用上述两个回调函数时的附带透传形参,模块内部不会解析本参数仅做透传处理
* @return: TRUE FALSE
*/
BOOL SDSrtAvCom_Start(
void* pRtp_avcom,
const char *strLocalIP,
USHORT shLocalPort,
const char *strRemoteIP,
USHORT shRemotePort,
CallBackFuncRecvVideoData pfVideoRecvCallBack,
CallBackFuncRecvAudioData pfAudioRecvCallBack,
void *pObject);
- 结束
/***
* 停止SrtAvCom工作
* @param pRtp_avcom: 模块指针
* @return:
*/
void SDSrtAvCom_Stop(void* pRtp_avcom);
- 发送视频
/***
* 发送视频数据
* @param pRtp_avcom: 模块指针
* @param byBuf: 传入一帧带起始码的裸码流,内部自行拆分拼接。
* @param nLen: 数据长度
* @return:
*/
BOOL SDSrtAvCom_SendVideoData(void* pRtp_avcom, unsigned char *byBuf, int nLen);
- 发送音频
/***
* 发送音频数据
* @param pRtp_avcom: 模块指针
* @param byBuf: 传入一帧音频裸码流,可以是ADTS,内部无拆包透传
* @param nLen: 数据长度
* @return:
*/
BOOL SDSrtAvCom_SendAudioData(void* pRtp_avcom, unsigned char *byBuf, int nLen);
- 设置通用传输参数
/***
* 设置基础传输参数,请在Start接口之前调用
* @param pRtp_avcom: 模块指针
* @param nRecvDelayMs: 接收缓存时间,建议4*RTT,单位ms。可在发送端或接收端设置,将取其中较大的值
* @param nMaxBitrateKbps:最大传输码率,建议3*VideoEncBitrate,单位kbps。需要在发送端设置,当设置为0时表示不受限。若码率本身比较平稳,可设置为2*VideoEncBitrate。
* @return:
*/
BOOL SDSrtAvCom_SetBaseTransParams(void* pRtp_avcom, int nRecvDelayMs, int nMaxBitrateKbps);
- 设置视频通道传输参数
/***
* 设置视频通道FEC传输参数,请在Start接口之前调用
* @param pRtp_avcom: 模块指针
* @param bEnable: 是否启用FEC,收发双方需保持一致
* @param nCols: FEC Group列数
* @param nRows: FEC Group行数
* @param eLayoutMode:2D FEC布局模式
* @param eArqMode:FEC-ARQ配合模式
* @return:
*/
BOOL SDSrtAvCom_SetVideoFecParams(void* pRtp_avcom, BOOL bEnable, int nCols, int nRows, E_SRT_FEC_LAYOUT eLayoutMode, E_SRT_FEC_ARQ eArqMode);
- 设置音频通道传输参数
/***
* 设置音频通道FEC传输参数,请在Start接口之前调用
* @param pRtp_avcom: 模块指针
* @param bEnable: 是否启用FEC,收发双方需保持一致
* @param nCols: FEC Group列数
* @param nRows: FEC Group行数
* @param eLayoutMode:2D FEC布局模式
* @param eArqMode:FEC-ARQ配合模式
* @return:
*/
BOOL SDSrtAvCom_SetAudioFecParams(void* pRtp_avcom, BOOL bEnable, int nCols, int nRows, E_SRT_FEC_LAYOUT eLayoutMode, E_SRT_FEC_ARQ eArqMode);
- 获得视频通道统计数据
/***
* 获取视频通道统计信息
* @param pRtp_avcom: 模块指针
* @param pfRttMs: RTT,单位毫秒
* @param pfUpLossRate: 上行丢包率.内部已经乘100
* @param pfDownLossRate: 下行丢包率.内部已经乘100
* @param pfEstimatedUpBitrate:上行带宽估算.Kbps
* @param pfUpBitrate:上行码率.Kbps
* @param pfDownBitrate:下行码率.Kbps
* @return:
*/
BOOL SDSrtAvCom_GetVideoTransStatis(void* pRtp_avcom, double *pfRttMs, double *pfUpLossRate, double *pfDownLossRate, double *pfEstimatedUpBitrate, double *pfUpBitrate, double *pfDownBitrate);
- 获得音频通道统计数据
/***
* 获取音频通道统计信息
* @param pRtp_avcom: 模块指针
* @param pfRttMs: RTT,单位毫秒
* @param pfUpLossRate: 上行丢包率.内部已经乘100
* @param pfDownLossRate: 下行丢包率.内部已经乘100
* @param pfEstimatedUpBitrate:上行带宽估算.Kbps
* @param pfUpBitrate:上行码率.Kbps
* @param pfDownBitrate:下行码率.Kbps
* @return:
*/
BOOL SDSrtAvCom_GetAudioTransStatis(void* pRtp_avcom, double *pfRttMs, double *pfUpLossRate, double *pfDownLossRate, double *pfEstimatedUpBitrate, double *pfUpBitrate, double *pfDownBitrate);
附录:结构体说明
//2D FEC布局模式
Typedef enum E_SRT_FEC_LAYOUT
{
//普通连续模式
e_SRT_FEC_LAYOUT_EVEN = 0,
//阶梯模式,可以降低一定码率波动(冗余包分散发送)
e_SRT_FEC_LAYOUT_STAIR
} E_SRT_FEC_LAYOUT;
//FEC-ARQ配合模式
typedef enum E_SRT_FEC_ARQ
{
//只要丢包均会发起NAK,不管FEC能否恢复
e_SRT_FEC_ARQ_ALWAYS = 0,
//仅在FEC失败时发起NAK
e_SRT_FEC_ARQ_ONREQ,
//关闭NAK
e_SRT_FEC_ARQ_NEVER,
} E_SRT_FEC_ARQ;
/*输出接收到的视频数据 回调函数
* @param bComplete用来表示当前帧数据是否完整(无局部丢包)
* @param bPrevTotalFrameLost用来表示当前帧与上一次输出帧之间无整帧丢失的情况,即本帧序号与上一帧序号是否连续。
* 通过以上两个标志,结合关键帧判定标志,外层可以很方便的实现丢帧冻结机制
*/
typedef void (*CallBackFuncRecvVideoData)(void* pObj, int nLen, unsigned char *byBuf, unsigned int unPTS, BOOL bComplete, BOOL bPrevTotalFrameLost);
/*输出接收到的视频数据 回调函数*/
typedef void (*CallBackFuncRecvAudioData)(void* pObj, int nLen, unsigned char *byBuf, unsigned int unPTS);
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- linux更换aliyun源
linux更换国内源CentOS更换为阿里云的源 什么是国内源,通俗讲就是应用市场,Android系统有Android应用市场,Apple系统有Apple应用市场,Linux系统也有Linux应用市场。 Linux的国内源根据不同的版本分,主要有: CentOS版本:yum源 Ubuntu版本:apt-get源 注1:如果只是…...
2024/4/24 12:30:03 - 南京大学2020软工专硕初试第一经验分享
写在前面:以下的所有经验都是我自己备考中亲身经历得出的,不存在想象或者编造的情况,但由于我自己的性格,我对于不喜欢的人或事的印象极难改变,所以你会看到我对一些老师相当负面的评价。 另外由于每个人的实际情况不同,当然每个人最适合的复习策略也不同,我会尽可能的介…...
2024/5/8 13:46:45 - CAT1域格模块常见问题部分设计参考
天线部分 CLM920_RC3 的 49 脚为主集天线接口,为方便天线调试需要在主板上增加π型匹 配电路,走 50 欧阻抗线。 CLM920_RC3 的 47 脚为 GNSS 天线接口,为方便天线调试需要在主板上增加π型 匹配电路,走 50 欧阻抗线 主天线与分集天线之间需要保持一定的间距 CLM920_RC3 模块…...
2024/4/15 4:33:30 - MySQL数据库笔记10——视图、DBA命令、数据库设计三范式
1.视图 1.1 什么是视图?站在不同的角度去看待数据,即同一张表的数据,通过不同的角度去看待。 1.2 怎么创建视图?怎么删除视图? create view myview as select empno,ename from emp; drop view myview; 注意:只有DQL语句才能以视图对象的方式创建出来。 1.3 对视图进行增…...
2024/4/15 4:33:27 - 从0开始手动配置redis主从复制
手动配置redis主从复制主从复制的概念主从复制的特点开始搭建1、下载redis:可以通过把下载好的redis安装包上传到服务器上,也可以通过yum,wget方式进行安装,我这里是通过wget方式进行安装的。2、开始搭建主从复制3、配置完毕,开始测试 主从复制的概念 1、在主从复制模型中…...
2024/4/23 0:55:17 - liunx自学第三天
文章目录更改用户组 chgrp常用环境变量常用文件管理命令df命令 更改用户组 chgrp chgrp 123456 123 123456这里代表的就是更改用户组的名称,123就是你的文件敲完命令之后:常用环境变量 DISPLAY 用来设置将图形显示到何处。 HOME 当前用户的主目录。 IFS …...
2024/4/15 4:33:25 - IntelliJ IDEA彻底删除项目
IDEA彻底删除项目 1.在项目上单击右键选择Remove Module,也可以直接在项目上按下delete键 2.提示我们工程只是从工作空间移除,但是磁盘上的不会删除,选择remove 3.到磁盘的工作空间Project中,删除项目即可彻底删除。...
2024/4/17 7:38:06 - 线程中介之Java线程池
在云计算、5G技术快速发展的互联网世界,为了快速响应用户的请求,宏观上除了团队内部实行DevOps机制管理、使用微服务架构进行技术设计、使用Docker或K8s进行应用部署外,微观上在程序开发中使用并行计算的能力也是必不可少的。而在Java开发中,最常用的便是通过线程池来最大程…...
2024/4/19 14:18:33 - 【Java】java 的!file.exists()与 file !=null使用场景/区别
1.exists()方法使用//这里使用new 创建实例,所以f不可能为null File f = new File("D:/xyz/hashdog.text")//用exists()方法判断 if(!f.exists()){System.out.print("该文件不存在") }2.!=null条件使用//这里使用new 创建实例,所以f不可能为null File f ; …...
2024/4/15 4:33:23 - php神秘的函数应用
话不多说,直接上代码: // 获取数组中某个键值对应的总个数 $list = array(array(id => 1, userId => 5),array(id => 2, userId => 5),array(id => 2, userId => 6), );// $userId = 5; $arr=array_column($list,userId);//把值提取出来转成一维数组 $arr=a…...
2024/4/24 12:30:02 - Mysql的锁和并发参数的介绍
Mysql的锁和并发参数的介绍 一、Mysql并发参数调整从实现上来说,MySQL Server 是多线程结构,包括后台线程和客户服务线程。多线程可以有效利用服务器资源,提高数据库的并发性能。在Mysql中,控制并发连接和线程的主要参数包括 max_connections、back_log、thread_cache_size…...
2024/4/24 12:30:04 - S=A-BIS-dS+u2w2I+u1w1E数模作业
给定模型S=A-BIS-dS+u2w2I+u1w1E,E=BIS-dE-eE-w1E,I=eE-dI-aI-w2I,给出潜伏者和感染者在t属于0~100上时间序列图。其中,点表示S,E,I分别关于时间t的导数。 (注意是左边S,E,I,因为我就是在这给坑了下,仔细看左边S,E,I和右边的确实不同,那右边S,E,I表示何物?表示原方程。…...
2024/4/24 12:30:01 - 企业级Redis安装部署(非常详细,更适合学习使用)
导游前言更新GCC下载安装Redis系统环境优化1.修改文件最大打开数2&3修改/etc/sysctl.conf文件4.关闭透明巨页启动Redis登录测试Redis环境优化关闭Redis 前言 此篇安装Redis适用于企业,对于安装环境进行了优化,使Redis能够发挥更好的性能。 更新GCC 系统版本CentOS7.7 cat…...
2024/4/24 12:30:00 - 搞清clientHeight、offsetHeight、scrollHeight、offsetTop、scrollTop
转载自:https://www.imooc.com/article/17571网页可见区域高:document.body.clientHeight网页正文全文高:document.body.scrollHeight网页可见区域高(包括边线的高):document.body.offsetHeight网页被卷去的高:document.body.scrollTop屏幕分辨率高:window.screen.heig…...
2024/5/6 13:22:07 - 深浅拷贝的区别既处理
一、栈和堆概念栈:一般用来存变量名和地址,空间小,不可修改堆:一般用来存值(变量的值...如)空间大,可修改关系1.一一对应:一个栈对应一个堆2.多对一:多个栈对应一个堆存取规则栈:先进后出堆:先进先出二、数据类型分类1.基本类型:特点:1. 数据存在栈中,默认深拷贝,…...
2024/4/24 12:29:57 - 计算机组成原理--指令系统
只有操作码,没有地址码...
2024/4/24 12:29:57 - java理论知识
一 八大基本类型数据类型类型长度取值范围包装类byte整型1字节8bit(位)10000000(-128)到 01111111(127)Byteshort整型2字节16bit(位)10000000 00000000(-32768)到 01111111 11111111(32767)Shortint整型4字节32bit(位)-2^31 (-2,147,483,648)到 2^31-1(2,147,483,64…...
2024/4/24 12:29:57 - 怎样保护Windows Azure AD的安全性?
网络攻击每时每刻都在进行着,攻击手段也在不断更新,使用第三方黑客程序或从外部注入病毒方式会留下明显的痕迹。如今大多数反恶意软件工具都可以检测到这种攻击并将其阻止。 新的攻击方式正在逐渐向无恶意软件或无文件攻击进行转变。无恶意软件的占比在2019年的攻击行为统计中…...
2024/4/24 12:29:57 - 如何免费下载Tuxera NTFS for Mac序列号
1、将Tuxera ntfs这款Mac读写工具正确在Mac中安装成功;2、将你要使用的NTFS格式磁盘插入Mac中,此时软件会开始自动加载NTFS磁盘,你可以在系统偏好设置中找到已经安装好的软件,并点击打开软件(通常软件安装成功既可以使用NTFS磁盘,无需其他操作);二、使用功能简介 1、软…...
2024/4/24 12:29:56 - pytorch学习5-word2vec(skip-gram)实现
pytorch实现word2vec1.准备训练数据(1)读取文本数据(2)实现dataloader2.定义模型3.定义评估函数4.定义优化函数5.训练模型6.准确度评估 1.准备训练数据 (1)读取文本数据 import torch import torch.nn as nn import torch.nn.functional as F import torch.utils.data as…...
2024/4/24 12:29:52
最新文章
- 【Kolmogorov-Arnold网络 替代多层感知机MLPs】KAN: Kolmogorov-Arnold Networks
KAN: Kolmogorov-Arnold Networks 论文地址 代码地址 知乎上的讨论(看一下评论区更正) Abstract Inspired by the Kolmogorov-Arnold representation theorem, we propose Kolmogorov-Arnold Networks (KANs) as promising alternatives to Multi-Layer…...
2024/5/9 2:01:21 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/5/7 10:36:02 - 贪心算法|1005.K次取反后最大化的数组和
力扣题目链接 class Solution { static bool cmp(int a, int b) {return abs(a) > abs(b); } public:int largestSumAfterKNegations(vector<int>& A, int K) {sort(A.begin(), A.end(), cmp); // 第一步for (int i 0; i < A.size(); i) { // 第二步if…...
2024/5/7 15:39:52 - 字符串匹配算法之BF与KMP算法
目录 BF算法(暴力匹配算法) KMP算法 核心思想: next数组 next数组的优化 BF算法(暴力匹配算法) #include <assert.h> int BF(const char* str, const char* sub) {assert(str ! NULL && sub ! NULL);if (str NULL || sub NULL){return -1;}int…...
2024/5/4 9:41:01 - CTK插件框架学习-事件监听(04)
CTK插件框架学习-插件注册调用(03)https://mp.csdn.net/mp_blog/creation/editor/136989802 一、主要流程 发送者注册消息事件接收者订阅消息事件接收者相应消息事件 事件监听比插件接口调用耦合性更弱,事件由框架维护,不需要指定发送方和接收方 二、…...
2024/5/6 8:34:00 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/8 6:01:22 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/7 9:45:25 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/5/4 23:54:56 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/7 14:25:14 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/5/4 23:54:56 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/5/4 23:55:05 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/5/4 23:54:56 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/5/7 11:36:39 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/5/4 23:54:56 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/6 1:40:42 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/5/4 23:54:56 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/5/8 20:48:49 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/5/7 9:26:26 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/5/4 23:54:56 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/8 19:33:07 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/5 8:13:33 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/5/8 20:38:49 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/5/4 23:54:58 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/6 21:42:42 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/5/4 23:54:56 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下: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