来自 Developer 官网:MediaCodec 。

MediaCodec类可用于访问低级媒体编解码器,即编码器/解码器组件。它是 Android 低电平多媒体支持基础设施的一部分(通常与它们一起使用:MediaExtractor , MediaSync , MediaMuxer , MediaCrypto , MediaDrm , Image , Syrface , 和 AudioTrack )。

广义而言,编解码器处理输入数据以生成输出数据。它异步处理数据,并使用一组输入和输出缓冲区。在一个简单的级别上,您请求(或接受)一个空的输入缓冲区,将其填充数据并将其发送到编解码器进行处理。编解码器用完数据并将其转换为空的输出缓冲区之一。最后,您请求(或接受)已填充的输出缓冲区,使用其内容并将其释放回编解码器。

 

数据类型

编解码器对于三种数据进行操作:压缩数据,原始音频数据和原始视频数据。可以使用来处理所有三种数据 ButeBuffer,但是对于原始视频数据应提供一个Surface以提高编解码器的性能。Surface 使用本机视频缓冲区,而不将其映射或复制到 ByteBuffer ;因此,它效率更高。使用 Surface 时,通常不能访问原始视频数据,但是可以使用 ImageReader 该类来访问不安全的解码(原始)视频帧。这可能仍比使用 ByteBuffer 更有效,因为某些本机缓冲区可能已映射到 ByteBuffer 。使用 ByteBuffer 模式时,可以使用 Image 类和 getInput / OutputImage(int) 方法访问原始视频帧。

压缩缓冲区

输入缓冲区(用于解码器)和输出缓冲区(用于编码器)包含由多媒体格式类型决定的压缩数据。对于视频类型,这通常是单个压缩的视频帧。对于音频数据,这通常是一个访问单元(一个编码的音频段,通常包含几毫秒的音频,这由格式类型决定),但是由于缓冲区中可能包含多个编码的访问单元,因此这一要求并不严格。在这两种情况下,缓存不会在任意的字节边界上开始或结束,而是在帧或可访问单元的边界上开始或结束。

原始音频缓冲区

原始音频缓冲区包换 PCM 音频数据的整个帧,这是按通道顺序每个通道的样本。每个 PCM 音频样本都是16位带符号证书或浮点数(以本机字节顺序)。

原始视频缓冲区

在 ByteBuffer 模式下,视频缓冲区根据它们的颜色格式 color format 进行展现,您可以从下面获取支持的颜色格式作为数组: getCodecInfo().getCapabilitiesForType(…).colorFormats 。视频编解码器可以支持三种颜色格式:

 · 本地原始视频格式:这种格式通过COLOR_FormatSurface标记,并可以与输入或输出Surface一起使用。

 · YUV 缓存:(如:COLOR_FormatYUV420Flexible)利用一个输入或输出Surface,或在在ByteBuffer模式下,可以通过调用getInput/OutputImage(int)方法使用这些格式。

 · 其它特定格式:通常只在ByteBuffer模式下被支持。有些颜色格式是特定供应商指定的。其他的一些被定义在 MediaCodecInfo.CodecCapabilities中。这些颜色格式同 flexible format相似,你仍然可以使用 getInput/OutputImage(int)方法。

从 Android5.1 开始,所有视频编解码器均支持灵活的 YUV4:2:0 缓冲区。

 

状态

在其生命周期内,编解码器从概念上讲处于以下三种状态之一:停止( Stopped ),执行( Executing )或释放( Released )。停止( Stopped )的状态包含了三个子状态:未初始化( Uninitialized ),已配置( Configured )和错误( Error )。执行( Executing )状态从概念上讲经过三个子状态:刷新( Flushed ),运行( Running )和流结束( End-of-Stream )。

使用工厂方法之一创建编解码器时,编解码器处于未初始化状态( Uninitialized )。首先,您需要使用 configure() 对编解码器进行配置,使它进入已配置状态( Configured ),然后调用 start 将其移动到执行状态( Executing )。在这状态下,您可以通过上诉缓冲区队列操作来处理数据。

执行状态具有三个子状态:刷新( Flushed ),运行( Running )和流结束( End-of-Stream )。 start 编解码器立即处于刷新状态( Flushed ),它将保存所有缓冲区。一旦第一个输入缓冲区出队,编解码器将移至运行状态( Running ),在此状态将花费大部分的时间。当您将输入缓冲区与流结束标记排队时,编解码器将装华为流结束状态( End-of-Stream )。在这种状态下,编解码器将不再接受其它输入缓冲区,但仍会生成输出缓冲区,直到在输出端达到流结束为止。在处于执行状态( Executing )时,您可以随时返回到刷新状态( Flushed )。

调用 stop 已将编解码器返回到未初始化状态( Uninitialized ),然后可以再次对其进行配置。使用编解码器完成操作后,必须通过调用释放它 release 。

在极少数情况下,编解码器可能遇到错误并进入到错误状态( Error )。使用来自排队操作额无效返回值后有时通过异常来传达此信息。调用 reset 已使编解码器再次可用。您可以从任何状态调用它,已将编解码器移回未初始化状态( Uninitialized )。否则,请调用 release 已移至终端的已释放状态( Released )。

 

创建

根据指定的 MediaFormat 使用 MeidaCidecList 创建一个 MediaCodec 的实例。解码文件或流时,可以从 MediaExtractor.getTrackFormat 获得所需的格式。并调用 MediaFormat.setFeatureEnabled 添加您想添加的任何属性,然后调用 MediaCodecList.findDecoderForFormat 获取可以处理该特定媒体格式的编解码器的名称。最后,使用创建编解码器 createByCodecName。

注意

在 Android5.0 上,传递给 MediaCodecList.findDecoder/EncoderForFormat 不能包含帧率 frame rate 。通过调用 format.setString(MediaFormat.KEY_FRAME_RAT,null) 以清除当前任何格式的帧率。

您还可以使用 createDecoder / EncoderByType(String) 方法为特定的 MIME 类型创建首选编解码器。但是,这不能注入特征,而且创建的编解码器可能不能处理你期望的格式。

创建安全的解码器

在Android 4.4 及之前版本,安全的编解码器(secure codecs)没有被列在MediaCodecList中,但是仍然可以在系统中使用。安全编解码器只能够通过名字进行实例化,其名字是在常规编解码器的名字后附加.secure标识(所有安全编解码器的名字都必须以.secure结尾),调用createByCodecName(String)方法创建安全编解码器时,如果系统中不存在指定名字的编解码器就会抛出IOException异常。

从Android 5.0 及之后版本,你可以在媒体格式中使用FEATURE_SecurePlayback属性来创建一个安全编解码器。

 

初始化

创建编解码器后,如果要异步处理数据,通过设置 setCallback 设置回调。然后,指定特定的媒体格式配置编解码器。此时,您可以 Surface 为视频制作指定输出,即产生原始视频数据的编解码器( 例如:视频解码器 )。这也是您可以设置安全编解码器的解密参数的时候(请参阅参考资料 MediaCrypto )。最后,由于某些编解码器可以在多种模式下运行,因此必须指定该编码器是作为编码器还是解码器使用。

您可以在已配置状态下查询结果输入和输出格式。您可以在启动编解码器之前使用它来验证最终的配置,如颜色格式。

如果要使用原始视频数据送视频消费者处理(将原始视频数据作为输入的编解码器,例如视频编码器),你可以在配置好视频消费者编解码器(encoder)后调用createInputSurface方法创建一个目的surface来存放输入数据,如此,调用视频生产者(decoder)的setInputSurface(Surface)方法将前面创建的目的Surface配置给视频生产者作为输出缓存位置。

编解码器专用数据(Codec-specific 数据)

某些格式,尤其是 AAC 音频和MPEG4,H.264 和 H.265 视频格式,要求实际数据的前缀是许多包含设置数据或编解码器特定数据的缓冲区。处理此类压缩格式时,必须在调用 start() 方法后并且在处理任何帧数据之前交给编码器。这些数据必须在调用 queueInputBuffer 方法时使用 BUFFER_FLAG_CODEC_CONFIG 标记。

Codec-specific 数据也可以被包含在传递给 configure 方法的格式信息(MediaFormat)中,在 ByteBuffer 条目中以"csd-0", "csd-1"等key标记。这些 keys 一直包含在通过 MediaExtractor 获得的 Audio Track or Video Track的MediaFormat 中。一旦调用 start() 方法,MediaFormat 中的 Codec-specific 数据会自动提交给编解码器;你不能显示的提交这些数据。如果 MediaFormat 中不包含编解码器指定的数据,你可以根据格式要求,按照正确的顺序使用指定数目的缓存来提交 codec-specific 数据。在 H264 AVC 编码格式下,你也可以连接所有的 codec-specific 数据并作为一个单独的 codec-config buffer 提交。

Android 使用下列的 codec-specific data buffers。对于适当的 MediaMuxer 轨道配置,这些也要在轨道格式中进行设置。每个参数集和标有(*)的特定于编解码器的数据段均必须以起始码开头"\ x00 \ x00 \ x00 \ x01"。

注意:当编解码器被立即刷新或 start 之后不久刷新,并且在任何输出 buffer 或输出格式变化被返回前需要特别地小心,因为编解码器的 codec specific data 可能会在 flush 过程中丢失。为保证编解码器的正常运行,你必须在刷新后使用标记为BUFFER_FLAG_CODEC_CONFIGbuffers 的 buffers 再次提交这些数据。

编码器(或者产生压缩数据的编解码器)将会在有效的输出缓存之前产生和返回编解码器指定的数据,这些数据会以codec-config flag进行标记。包含codec-specific-data的Buffers没有有意义的时间戳。 

 

数据处理

每个编解码器包含一组输入和输出缓冲区(input and output buffers),这些缓存在API调用中通过buffer-id进行引用。成功调用 start() 方法后,客户端将不会 "拥有" 输入和输出缓冲区。在同步模式下,调用 dequeueInput / OutputBuffer() 从编解码器获取输入或输出缓冲区。在异步模式下,您将通过 Callback.onInputBufferAvailable / Callback.onOutputBufferAvailable 回调自动接入可用的缓冲区。

数据获取缓冲区后,将其填充数据,然后使用 queueInputBuffer 提交给编解码器,若使用解密则使用 queueSecureInputBuffer 提交。不要提交带有相同时间戳的多个输入缓冲区(除非它是也被同样标记的codec-specific data)。

在异步模式下通过 onOutputBufferAvailable 方法的回调或者在同步模式下响应 dequeuOutputBuffer 的调用,编解码器返回一个只读的输出缓冲区。在这个输出缓冲区被处理后,调用一个 releaseOutputBuffer 方法将这个缓冲区返回给编解码器。

当你不需要立即将缓冲区重新提交/释放到编解码器,但保持输入/输出缓冲区可能会使编解码器停止工作,并且这与设备相关。特别是,编解码器可能会推迟生成输出缓冲区,直到所有未完成的缓冲区都已释放/重新提交。因此,请尝试尽可能少地保留可用缓冲区。

根据 API版本,您可以通过三种方式处理数据:

使用缓冲区的异步处理

从 Android5.0 开始,首选方法是调用 configure 之前设置回调来异步处理数据。因为你必须在调用 flush() 方法后再调用 start() 方法才能使编解码器的状态转换为 Running 子状态并开始接收输入缓冲区。同样,在首次调用 start() 编解码器时,将直接移至 Running 状态,变开始用过回调传递可用的输入缓冲区。

MediaCodec 通常在异步模式下像这样使用:

MediaCodec codec = MediaCodec.createByCodecName(name);MediaFormat mOutputFormat; // member variablecodec.setCallback(new MediaCodec.Callback() {@Overridevoid onInputBufferAvailable(MediaCodec mc, int inputBufferId) {ByteBuffer inputBuffer = codec.getInputBuffer(inputBufferId);// fill inputBuffer with valid data…codec.queueInputBuffer(inputBufferId, …);}@Overridevoid onOutputBufferAvailable(MediaCodec mc, int outputBufferId, …) {ByteBuffer outputBuffer = codec.getOutputBuffer(outputBufferId);MediaFormat bufferFormat = codec.getOutputFormat(outputBufferId); // option A// bufferFormat is equivalent to mOutputFormat// outputBuffer is ready to be processed or rendered.…codec.releaseOutputBuffer(outputBufferId, …);}@Overridevoid onOutputFormatChanged(MediaCodec mc, MediaFormat format) {// Subsequent data will conform to new format.// Can ignore if using getOutputFormat(outputBufferId)mOutputFormat = format; // option B}@Overridevoid onError(…) {…}});codec.configure(format, …);mOutputFormat = codec.getOutputFormat(); // option Bcodec.start();// wait for processing to completecodec.stop();codec.release();

使用缓冲区的同步处理

从 Android5.0 开始,即使在同步模式下使用编解码器,也应该使用 getInput / OutputBuffer(int) 和/或 getInput / OutputImage(int) 检索输入和输出缓冲区 OutputImage(int) 。这允许框架进行某些优化,例如在处理动态内容时。如果调用 getInput /,则会禁用此优化 OutputBuffers() 。

MediaCodec通常在同步模式下按以下方式使用

MediaCodec codec = MediaCodec.createByCodecName(name);MediaFormat mOutputFormat; // member variablecodec.setCallback(new MediaCodec.Callback() {@Overridevoid onInputBufferAvailable(MediaCodec mc, int inputBufferId) {ByteBuffer inputBuffer = codec.getInputBuffer(inputBufferId);// fill inputBuffer with valid data…codec.queueInputBuffer(inputBufferId, …);}@Overridevoid onOutputBufferAvailable(MediaCodec mc, int outputBufferId, …) {ByteBuffer outputBuffer = codec.getOutputBuffer(outputBufferId);MediaFormat bufferFormat = codec.getOutputFormat(outputBufferId); // option A// bufferFormat is equivalent to mOutputFormat// outputBuffer is ready to be processed or rendered.…codec.releaseOutputBuffer(outputBufferId, …);}@Overridevoid onOutputFormatChanged(MediaCodec mc, MediaFormat format) {// Subsequent data will conform to new format.// Can ignore if using getOutputFormat(outputBufferId)mOutputFormat = format; // option B}@Overridevoid onError(…) {…}});codec.configure(format, …);mOutputFormat = codec.getOutputFormat(); // option Bcodec.start();// wait for processing to completecodec.stop();codec.release();

流结束处理

到达输入数据的末尾时,必须调用 queueInputBuffer 方法中通过指定 BUFFER_FLAG_END_OF_STREAM 标记通知编解码器。您可以在最后一个有效的输入缓冲区上执行此操作,或者通过提交另外一个空输入缓冲区并设置流结束标志来执行此操作。如果使用空缓冲区,则时间戳将被忽略。

编解码器将继续返回输出缓冲区,直到它发出输出流结束的信号,这是通过指定 dequeueOutputBuffer 方法中 MediaCodec.BufferInfo的end-of-stream 标记来实现的,或者是通过回调方法 onOutputBufferAvailable 来返回 end-of-stream 标记。可以在最后一个有效的输出 buffer 中设置或者在最后一个有效的输出 buffer 后添加一个空的 buffer 来设置,这种空的buffer的时间戳应该被忽略。

在发出输入流结束信号后不要提交其他输入缓冲区。除非一刷新,停止或重新启动编解码器。

使用输出表面

使用输出时,数据处理几乎与 ByteBuffer 模式相同 Surface ;但是,输出缓冲区将不可访问,并表示为 null 值。如,getOutputBuffer / Image(int) 将返回 null ,并且 getOutputBuffers 返回包含 null 的数组。

使用输出 Surface 时,可以选择是否在表面上渲染每个输出缓冲区。您有三种选择:

· 不渲染缓冲区:调用 releaseOutputBuffer(bufferId , false)。

· 使用默认时间戳渲染缓冲区:调用 releaseOutputBuffer(bufferId , true)。

· 使用特定的时间戳渲染缓冲区:调用 releaseOutputBuffer(bufferId , timestamp)。

从 Android6.0 开始,默认时间戳是缓冲区的 presentationTimeUs(转换为纳秒)。在此之前未定义。

另外从 Android6.0 开始,您可以使用 setOutputSurface 方法动态更改输出 Surface 。

当使用输入 Surface 时,将没有可访问的输入 buffers ,因为这些buffers将会从输入 surface 自动地向编解码器传输。调用 dequeueInputBuffer 时将抛出一个 IllegalStateException 异常,调用 getInputBuffers() 将要返回一个不能写入的伪 ByteBuffer[] 数组。

调用 signalEndOfInputStream() 方法发送 end-of-stream 信号。调用这个方法后,输入 surface 将会立即停止向编解码器提交数据。

 

搜寻和自适应播放支持

视频解码器(通常指处理压缩视频数据的编解码器)关于搜索-seek和格式转换(不管它们是否支持)表现不同,且被配置为adaptive playback。你可以通过调用 CodecCapabilities.isFeatureSupported(String) 方法来检查解码器是否支持 adaptive playback 。支持 Adaptive playback 的解码器只有在编解码器被配置在 Surface 上解码时才被激活。

流边界和关键帧

在调用 start() 或 flush() 之后,输入数据在合适的流边界开始是非常重要的:第一帧必须是关键帧。一个关键帧可以完全独立的被解码(对于大多数编解码器它意味着I-frame),并且关键帧之后显示的帧不会引用关键帧之前的帧。

下面总结适用于各种视频格式的关键帧:

对于不支持自适应播放的编解码器(包括解码到Surface上解码器)

为了开始解码与先前提交的数据(也就是seek后)不相邻的数据你必须刷新解码器。由于所有输出buffers会在flush的一刻立即撤销,你可能希望在调用flush方法前等待这些buffers首先被标记为end-of-stream。在调用flush方法后输入数据在一个合适的流边界或关键帧开始是非常重要的。

注意:flush后提交的数据的格式不能改变;flush()方法不支持格式的不连续性;为此,一个完整的stop()-configure(...)-start()的过程是必要的。

另外注意:如果你调用start()方法后过快地刷新编解码器,通常,在收到第一个输出buffer或输出format变化前,你需要向这个编解码器再次提交codec-specific-data。具体查看codec-specific-data部分以获得更多信息。

对于支持并配置为自适应播放的解码器

为了开始解码与先前提交的数据(也就是seek后)不相邻的数据,不必刷新解码器;但是,在间断后传入的数据必须开始于一个合适的流边界或关键帧。

针对一些视频格式-也就是H.264、H.265、VP8和VP9,也可以修改图片大小或者配置 mid-stream 。为了做到这些你必须将整个新 codec-specific 配置数据与关键帧一起打包到一个单独的buffer中(包括所有的开始数据),并将它作为一个常规的输入数据提交。

在picture-size被改变后以及任意具有新大小的帧返回之前,你可以从 dequeueOutputBuffer 方法或 onOutputFormatChanged 回调中得到 INFO_OUTPUT_FORMAT_CHANGED的返回值。

注意:就像使用 codec-specific data 时的情况,在你修改图片大小后立即调用fush()方法时需要非常小心。如果你没有接收到图片大小改变的确认信息,你需要重试修改图片大小的请求。

 

摘要

嵌套类

BufferInfo : 每个缓冲区元数据包含一个偏移量和大小,用于指定关联的编解码器(输出)缓冲区中有效数据的范围。

Callback : MediaCodec回调接口。

CodecException : 在发生内部编解码器错误时抛出。

CryptoException : 对于安全输入缓冲区进行排队时发生加密错误时抛出。

CryptoInfo : 描述加密输入样本结构的元数据。

OnFrameRenderredListener : 在输入表面渲染了输出帧时将调用的侦听器。

常数

BUFFER_FLAG_CODEC_CONFIG  : 这表明这样标记的缓冲区包含编解码器初始化/编解码器特定的数据,而不是媒体数据。

BUFFER_FLAG_END_OF_STREAM : 标志流的结束。

BUFFER_FLAG_KEY_FRAME : 这表明这样标记的(编码)缓冲区包含关键帧的数据。

BUFFER_FLAG_SYNC_FRAME : 这表明这样标记的(编码)缓冲区包含关键帧的数据。

CONFIGUER_FLAG_ENCODE : 如果将此编解码器作为编码器,传此标志。

 

 

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 搞不懂分布式事务?看这篇就够了

    文章结尾有彩蛋前言不知道你是否遇到过这样的情况,去小卖铺买东西,付了钱,但是店主因为处理了一些其他事,居然忘记你付了钱,又叫你重新付。又或者在网上购物明明已经扣款,但是却告诉我没有发生交易。事实上,上面所描述的这一系列情况都是因为没有事务导致的。这说明了事…...

    2024/4/15 5:46:26
  2. docker启动失败Failed to start Docker Application Container Engine.

    查看docker服务状态重启docker服务以下是解决办法查看 daemon.jsoncat /etc/docker/daemon.json看不出来什么,其实这个是daemon.json配置的docker容器加速器,配置它的目的是拉取镜像更快速vim /etc/docker/daemon.json一定要缩进 就是daemon.json文件中采用缩进可以,但是不能…...

    2024/4/28 2:29:03
  3. pycharm软件的快捷操作

    pycharm常用快捷键与设置 pycharm高频率使用的快捷键 Ctrl+Shift+F10 运行当前的页面 Ctrl + / 注释(取消注释)选择的行 Ctrl+Shift+F 高级查找 Shift + Enter 开始新行 TAB Shift+TAB 缩进/取消缩进所选择的行 Ctrl + Y 删除当前插入符所在的行 Ctrl + D 复制当前行、或者选择…...

    2024/4/18 17:17:19
  4. 搭建主网以太坊全节点钱包

    搭建全节点钱包 前言最近公司需要开发以一个基于以太坊的 DApp, 使用 ETH 作为中转介质,需要开发一个简易版的以太坊的钱包组件。考虑到 API 的并发,为了保证 DApp 的稳定运行, 不能使用 Infura 的免费接口,所以还是决定自己搭建钱包节点。安装相关工具 配置go语言运行环境…...

    2024/4/24 10:17:35
  5. 程序员一定要会的软件项目管理评估方案,不做只会敲代码的码农!(建议收藏)

    软件项目管理是通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,以达到既定目标的过程,是在软件开发过程中,对开发工作进行全方位评估的有效措施。目录软件项目管理软件规模评估一、代码行技术二、功能点技术工作量评估一、静态单变量模型1. 面向KLOC的估算模型…...

    2024/4/28 0:04:09
  6. 职业规划

    职业兴趣测评报告报告时间:2020.06.03 10:39剖析图用雷达图(六角形)展现职业兴趣测评分数在6个因子上的程度。每个因子的轴线上从中心至外围分别表示0—5分,即分数越低越接近中心,分数越高越接近外围。职业兴趣测评您的职业兴趣类型为:REA下述是您的结论:类型:技能型…...

    2024/4/24 10:17:33
  7. 运营视频直播交友平台前期需要做哪些准备工作?1V1直播源码是什么?

    运营视频直播交友平台前期需要做哪些准备工作?1V1直播源码是什么? 2020年,在疫情的阴影笼罩下,各行各业严重受挫,然而网络直播平台却掀起了一个不小的高潮,其丰厚的运营收益也引起了更多投资者的关注,跃跃欲试想分一杯羹。雷军曾说过 站在风口上,猪都能飞起来!就目前来…...

    2024/4/24 10:17:32
  8. 手动搭建k8s集群,搭建第一个程序

    什么是Kubernetes? Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展。如果你曾经用过Docker容器技术部署容器,那么可以将Docker看成Kubernetes内部使用的低级别组件。Kubernetes不仅仅支持Docker,还支持Rocket,这是另一种容器技术。…...

    2024/4/28 0:02:33
  9. 在Remix-IDE中部署本地插件

    在Remix-IDE中部署本地插件 一、环境准备remix-ide 是基于Solidity编写的以太坊智能合约开发环境,用于对solidity语言编写的智能合约程序进行编译。关于remix的内容不做具体介绍。为了部署插件,可以进入在线remix编辑器(可能需要科学上网)。也可以搭建本地的remix环境,具体…...

    2024/4/24 10:17:30
  10. 论文阅读笔记:Multimodal Self-Supervised Learning for Medical Image Analysis

    来源arxiv标题Multimodal Self-Supervised Learning for Medical Image Analysis作者单位德国波茨坦大学Hasso Plattner研究所方法简介关键词:自监督学习,图像拼接(Jigsaw puzzle),名义任务(pretext),下游任务(downstream task),多模态图像方法本质:自监督学习算法…...

    2024/4/24 10:17:30
  11. 我和女朋友是如何从渣二本一起考研逆袭京都985和211的(成长历程)

    前言:这篇博客写的很乱,但是都是我的真实经历以及当时的感受,希望能够通过这篇博客让你们相信,努力,菜鸟也是可以成功的,努力,蜗牛也会跑向终点的,只要心中有梦想,趁着年轻,抓紧去实现吧! 最近很多人私信问我,我是如何一战没有考上北邮,二战仍旧顶住压力坚持考北邮…...

    2024/4/24 10:17:36
  12. docker(10)——docker容器的通信

    1.基本介绍 1)Docker的本地网络实现其实就是利用了Linux上的网络命名空间和虚拟网络设备(特别是veth pair)。 (2)Docker中的网络接口默认都是虚拟的接口。虚拟接口的最大优势就是转发效率极高。这是因为Linux通过在内核中进行数据复制来实现虚拟接口之间的数据转发,即发送…...

    2024/4/24 10:17:27
  13. 面试大数据工程师,这些面试技巧你懂么?

    文章来源:加米谷大数据 许多毕业的学员在面试大数据工程师职位的抱怨,为什么面试时老是要考什么算法呀,还要现场写代码?弄得咱们天天去刷面试题,这些有什么用?今天老师带着大家一起来洞察HR的心思,总结面试的经验和技巧。今天我们就来聊聊这么大数据工程师面试后边这么做…...

    2024/4/24 10:17:28
  14. python|Flask&bootstrap&echarts简单应用

    文章目录0 系统简介1 Flask部分1.1 wsgi.py1.2 config.py + models.py1.3 router.py1.4 jinjia2传值至前端1.5 Ajax1.5.1 前端向后端传递数据1.5.2 后端向前端传递响应2 bootstrap部分2.1 下载2.2 使用2.2.1 垂直侧边导航栏2.2.2 带分页的表格3 echarts3.1 下载3.2 使用4 所有代…...

    2024/4/24 10:17:32
  15. Linux SX1278 无线网卡 并通过NAT路由访问外网

    Linux SX1278 无线网卡 并通过NAT路由访问外网简述基于的设备驱动模型主要代码片段上板测试总结 简述 SX1278已经使用好几年了,一直是基于单片机的私有协议或者Lorawan协议。最近业余时间又重新翻阅了宋宝华老师的《Linux设备驱动开发详解》萌生出了在linux下将sx1278作为一个…...

    2024/4/24 10:17:26
  16. 【网络】ping命令检测网络故障

    前言: 以前在不怎么使用ping命令的时候,检查网络特别费劲,没有目的,但是昨天和几个小伙伴一起探讨了ping命令,并且实践了一下,发现分分钟就可以解决电脑的联网上的问题!在实践的过程中,发现了以前好多的理论知识,在将理论联系到实践过程中,真的是最快乐的事情了!接下…...

    2024/4/18 19:31:54
  17. 每日论文速递:自然语言处理相关(6月1日更新版)

    公众号关注 “ML_NLP” 设为 “星标”,重磅干货,第一时间送达!出品 | 深度学习这件小事公众号 如需转载,请联系后台授权 自然语言处理(6月1日更新版) [1] Prosody leaks into the memories of words 作者 | Kevin Tang, Jason A. Shaw 链接 | https://arxiv.org/abs/2005…...

    2024/4/16 7:43:30
  18. Java基础---接口是啥?

    接口 接口:是一个特殊的抽象类,规定了接口的使用者和接口的实现者之间的规范 定义:interface 接口名 {} 特点:接口中定义的属性都是公开静态常量(即使不加修饰符,也默认是public static final)接口中定义的方法都是公开抽象方法(即使不加修饰符,也默认是public abstra…...

    2024/4/17 12:21:25
  19. 纳米材料的特点和用途

    纳米材料的特点: 当粒子的尺寸减小到纳米量级,将导致声、光、电、磁、热性能呈现新的特性。比方说:被广泛研究的II-VI族半导体硫化镉,其吸收带边界和发光光谱的峰的位置会随着晶粒尺寸减小而显著蓝移。按照这一原理,可以通过控制晶粒尺寸来得到不同能隙的硫化镉,这将大大…...

    2024/4/16 7:43:25
  20. vue中ios13/安卓10以下浏览器使用axios请求状态码为0

    因为有自定义请求头userId和token,所以先会进行options,options后服务端返回了,但是前端浏览器没有进行post,因为后台设置的headers为*,可能ios13/安卓10一下浏览器识别不出来后台允许有自定义请求头的存在 所以后台将Access-Control-Allow-Headers: *修改为Access-Contro…...

    2024/4/16 7:43:15

最新文章

  1. GateWay具体的使用之全链路跟踪TraceId日志

    1.创建全局过滤器,在请求头上带入traceId参数,穿透到下游服务. package com.by.filter;import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.jwt.JWTValidator;…...

    2024/4/28 3:30:26
  2. 梯度消失和梯度爆炸的一些处理方法

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

    2024/3/20 10:50:27
  3. javaWeb网上零食销售系统

    1 绪 论 目前,我国的网民数量已经达到7.31亿人,随着互联网购物和互联网支付的普及,使得人类的经济活动进入了一个崭新的时代。淘宝,京东等网络消费平台功能的日益完善,使得人们足不出户就可以得到自己想要的东西。如今…...

    2024/4/27 19:08:10
  4. 磁盘管理与文件管理

    文章目录 一、磁盘结构二、MBR与磁盘分区分区的优势与缺点分区的方式文件系统分区工具挂载与解挂载 一、磁盘结构 1.硬盘结构 硬盘分类: 1.机械硬盘:靠磁头转动找数据 慢 便宜 2.固态硬盘:靠芯片去找数据 快 贵 硬盘的数据结构:…...

    2024/4/23 6:16:19
  5. 【外汇早评】美通胀数据走低,美元调整

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

    2024/4/26 18:09:39
  6. 【原油贵金属周评】原油多头拥挤,价格调整

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

    2024/4/28 3:28:32
  7. 【外汇周评】靓丽非农不及疲软通胀影响

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

    2024/4/26 23:05:52
  8. 【原油贵金属早评】库存继续增加,油价收跌

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

    2024/4/27 4:00:35
  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/27 9:01:45
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

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

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

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

    2024/4/25 18:39:16
  15. 【外汇早评】美伊僵持,风险情绪继续升温

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

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

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

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

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

    2024/4/28 1:22:35
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

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

    2024/4/25 18:39:14
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

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

    2024/4/26 23:04:58
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

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

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

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

    2024/4/25 18:39:00
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

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

    2024/4/26 19:46:12
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

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

    2024/4/27 11:43:08
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

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

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

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

    2022/11/19 21:17:18
  26. 错误使用 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
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 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系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...

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

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

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

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

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

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

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

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

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

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

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

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