首页/新闻资讯/正文详情

ffmpeg编解码过程中AVCodecContex的作用分析

发布时间:2026/11/11 13:27:44 来源:云帆数科 栏目:资讯中心
ffmpeg编解码过程中AVCodecContex的作用分析
主要内容本章主要内容就是讲解ffmpeg中实现硬件加速的代码的AVCodecContext的讲解内容主要是基于ffmpeg 4.0代码进行分析。以下流程以h264硬件编解码为例。硬件解码过程中AVCodecContext的变化用户设置AVCodecContext项目成员函数类型说明(description)hw_device_ctx用户设置AVHWDeviceContext的AVBufferRef指针AVCodecContext在不同的API中的作用和内部变量都会发生变化。avcodec_alloc_context3avcodec_alloc_context3(libavcodec\options.c)会根据AVCodec的值来分配和初始化AVCodecContext结构体。avcodec_alloc_context3AVCodecContext使用malloc分配内存init_context_defaultsav_opt_set_defaults2成员函数类型说明(description)av_classinit_context_defaultsAVClassav_codec_context_classcodec_typeinit_context_defaultsAVMediaTypeAVMEDIA_TYPE_VIDOE,AVMEDIA_TYPE_AUDIO等codecinit_context_defaultsAVCode指针decoder的指针codec_idinit_context_defaultsAVCodecIDAV_CODEC_ID_H264AV_CODEC_ID_HEVC等time_baseinit_context_defaultsAVRational设置为1framerateinit_context_defaultsAVRational设置为1pkt_timebaseinit_context_defaultsAVRational设置为1get_buffer2init_context_defaults函数指针avcodec_default_get_buffer2get_formatinit_context_defaults函数指针avcodec_default_get_formatexecuteinit_context_defaults函数指针avcodec_default_executeexecute2init_context_defaults函数指针avcodec_default_execute2sample_aspect_ratioinit_context_defaultsAVRational设置为1pix_fmtinit_context_defaults函数指针AV_PIX_FMT_NONEsw_pix_fmtinit_context_defaults函数指针AV_PIX_FMT_NONEsample_fmtinit_context_defaults函数指针AV_SAMPLE_FMT_NONEreordered_opaqueinit_context_defaults函数指针AV_NOPTS_VALUEpriv_datainit_context_defaults普通指针使用malloc根据AVCodec的priv_data_size分配对h264而言就是H264Context结构体并将AVCodec-priv_class赋值给priv_dataavcodec_parameters_to_contextavcodec_parameters_to_context完全是拷贝赋值操作将AVStream中的AVCodecParameters赋值给AVCodecContext没有调用其他函数。成员函数类型说明(description)codec_typeavcodec_parameters_to_contextAVMediaTypeAVMEDIA_TYPE_VIDOE,AVMEDIA_TYPE_AUDIO等codec_idavcodec_parameters_to_contextAVCodecIDAV_CODEC_ID_H264AV_CODEC_ID_HEVC等codec_tagavcodec_parameters_to_contextintbit_rateavcodec_parameters_to_contextintbits_per_coded_sampleavcodec_parameters_to_contextintbits_per_raw_sampleavcodec_parameters_to_contextintintprofileavcodec_parameters_to_contextintlevelavcodec_parameters_to_contextintpix_fmtavcodec_parameters_to_contextAVPixelFormat属于视频参数如AV_PIX_FMT_RGB24AV_PIX_FMT_VAAPI等widthavcodec_parameters_to_contextint属于视频和subtile参数heiightavcodec_parameters_to_contextint属于视频和subtile参数field_orderavcodec_parameters_to_contextint属于视频参数color_rangeavcodec_parameters_to_contextAVColorRange属于视频参数color_primariesavcodec_parameters_to_contextAVColorPrimaries属于视频参数color_trcavcodec_parameters_to_contextAVColorTransferCharacteristic属于视频参数colorspaceavcodec_parameters_to_contextAVColorSpace属于视频参数chroma_sample_locationavcodec_parameters_to_contextAVChromaLocation属于视频参数sample_aspect_ratioavcodec_parameters_to_contextAVRational属于视频参数has_b_framesavcodec_parameters_to_contextint属于视频参数sample_fmtavcodec_parameters_to_contextAVSampleFormat属于音频参数channel_layoutavcodec_parameters_to_contextuint64_t属于音频参数channelsavcodec_parameters_to_contextint属于音频参数sample_rateavcodec_parameters_to_contextint属于音频参数block_alignavcodec_parameters_to_contextint属于音频参数frame_sizeavcodec_parameters_to_contextint属于音频参数delayavcodec_parameters_to_contextint属于音频参数initial_paddingavcodec_parameters_to_contextint属于音频参数trailing_paddingavcodec_parameters_to_contextint属于音频参数seek_prerollavcodec_parameters_to_contextint属于音频参数initial_paddingavcodec_parameters_to_contextint属于音频参数initial_paddingavcodec_parameters_to_contextint属于音频参数extradataavcodec_parameters_to_context普通指针使用av_mallocz分配AVCodecParameters-extradata_size AV_INPUT_BUFFER_PADDING_SIZE64大小空间并将AVCodecParameters-extradata其数据拷贝到extradata中extradata_sizeavcodec_parameters_to_contextintAVCodecParameters-extradata_size赋值给extradata_sizeav_hwdevice_ctx_createav_hwdevice_ctx_create主要是进行device创建和初始化工作。并将创建和初始化完成的AVHWDeviceContext的AVBufferRef指针赋值给AVCodecContext-hw_device_ctx。表格中的属于AVHWDeviceContext *device_ctx的成员。成员函数类型说明(description)user_opaqueav_hwdevice_ctx_createVAAPIDevicePrivVAAPIDevicePriv.display保存XOpenDisplay的Display指针internalav_hwdevice_ctx_createAVHWDeviceInternalav_mallocz分配内存internal-privav_hwdevice_ctx_createVAAPIDeviceContext根据HWContextTypehw_type-device_priv_size使用av_mallocz分配内存internal-hw_typeav_hwdevice_ctx_createHWContextType对于VAAPI而言就是ff_hwcontext_type_vaapihwctxav_hwdevice_ctx_createAVVAAPIDeviceContext根据HWContextTypehw_type-device_hwctx_size使用av_mallocz分配内存av_classav_hwdevice_ctx_createAVClasshwframe_ctx_class实例typeav_hwdevice_ctx_createAVHWDeviceType对于VAAPI而言就是AV_HW_DEVICE_TYPE_VAAPIsw_ formatav_hwdevice_ctx_createAVPixelFormatAV_PIX_FMT_NONEdisplayvaapi_device_connectVADisplayav_hwdevice_ctx_create调用函数vaapi_device_connectavcodec_open2使用硬件解码过程中需要在avcodec_open2之前对AVCodecContext.hw_device_ctx使用av_hwdevice_ctx_create根据AVHWDeviceType进行创建并赋值给AVCodecContext.hw_device_ctx。avcodec_open2调用h264_decode_init进行进一步初始化操作成员函数类型说明(description)internalavcodec_open2AVCodecInternal使用malloc分配内存internal-poolavcodec_open2FramePool使用malloc分配内存internal-to_freeavcodec_open2AVFrame指针使用av_frame_alloc分配内存internal-compat_decode_frameavcodec_open2AVFrame指针使用av_frame_alloc分配内存internal-buffer_frameavcodec_open2AVFrame指针使用av_frame_alloc分配内存internal-buffer_pktavcodec_open2AVPacket指针使用av_packet_alloc分配内存internal-ds.in_pktavcodec_open2AVPacket指针使用av_packet_alloc分配内存internal-last_pkt_propsavcodec_open2AVPacket指针使用av_packet_alloc分配内存internal-skip_samples_multiplieravcodec_open2int设置为1priv_dataavcodec_open2void指针根据codec-priv_data_size 使用malloc分配内存codec_ widthff_set_dimensionsint视频编码宽度codec_heightff_set_dimensionsint视频比编码宽度widthff_set_dimensionsint视频宽度与视频宽度有区别大部分时候相同heightff_set_dimensionsint视频长度与视频长度有区别大部分时候相同codecavcodec_open2AVCodec指针直接赋值给AVCodecContext.AVCodec指针frame_numberavcodec_open2AVCodec指针设置0codec_descriptoravcodec_open2AVCodecDescriptor指针avcodec_descriptor_get根据codec_id获取AVCodecDescriptorsw_pix_fmtavcodec_open2AVPixelFormat当AVCodecContext.hw_frames_ctx初始化后将frames_ctx-sw_format直接赋值给AVCodecContext.sw_pix_fmtpts_correction_num_faulty_ptspts_correction_num_faulty_dtsavcodec_open2int设置为0pts_correction_last_ptspts_correction_last_dtsavcodec_open2int6_t设置为INT64_MINav_read_frameav_read_frame主要是从AVFormatContext中获取AVPacket不会对AVCodecContext造成影响。avcodec_send_packetavcodec_send_packet是将packet发送给ffmpeg进行内部解码并进行逐级调用直到ff_get_format调用hwaccel_init。成员函数类型说明(description)sw_pix_fmtff_get_formatAVPixelFormatAV_PIX_FMT_NONEinternal-hwaccel_priv_dataff_get_format普通指针根据hwaccel-priv_data_size使用malloc分配内存hwaccelhwaccel_initAVHWAccel指针根据AVPixelFormat格式将avctx-codec-hw_configs[i]中的AVHWaccel赋值给hwaccelhwaccel_inithwaccel_init实质调用ff_vaapi_decode_init进行初始化操作初始化avctx-internal-hwaccel_priv_data即VAAPIDecodeContext结构体。表格中为VAAPIDecodeContext *vaapictx的成员成员函数类型说明(description)AVCodecContext-internal-hwaccel_priv_datahwaccel_initVAAPIDecodeContext根据AVHWAccelhwaccel-hwaccel_priv_size使用av_mallocz分配内存have_old_contextff_vaapi_decode_initAVPixelFormatAV_PIX_FMT_NONEold_contextff_vaapi_decode_init普通指针根据hwaccel-priv_data_size使用malloc分配内存device_refff_vaapi_decode_initAVBufferRef指针have_old_context为1时有效为旧版本的VAAPI使用方法deviceff_vaapi_decode_initAVHWDeviceContext指针have_old_context为1时有效为旧版本的VAAPI使用方法hwctxff_vaapi_decode_initAVVAAPIDeviceContext指针have_old_context为1时有效为旧版本的VAAPI使用方法hwctx-displayff_vaapi_decode_initVADisplayhave_old_context为1时有效为旧版本的VAAPI使用方法va_configff_vaapi_decode_initVAConfigIDhave_old_context为1时有效为旧版本的VAAPI使用方法va_contextff_vaapi_decode_initVAContextIDhave_old_context为1时有效为旧版本的VAAPI使用方法AVCodecContext.hw_frames_ctxff_decode_get_hw_frames_ctxAVBufferRef指针,AVHWFramesContext数据ff_decode_get_hw_frames_ctx–avcodec_get_hw_frames_parameters–av_hwframe_ctx_allocAVCodecContext-hwaccelhwaccel_initAVHWAccel将ff_h264_vaapi_hwaccel结构体指针赋值给hwaccelff_decode_get_hw_frames_ctxff_decode_get_hw_frames_ctx进行AVHWFramesContext的初始化操作初始化avctx-hw_frames_ctxff_decode_get_hw_frames_ctx会调用avcodec_get_hw_frames_parameters然后再avcodec_get_hw_frames_parameters中进行av_hwframe_ctx_allocAVHWAccel.frame_params(ff_vaapi_common_frame_params)和av_hwframe_ctx_init操作。av_hwframe_ctx_allocav_hwframe_ctx_alloc进行AVHWFramesContext内存分配操作初始化avctx-hw_frames_ctx即AVHWFramesContext结构体。表格中为AVHWFramesContext*ctx的成员成员函数类型说明(description)internalav_hwframe_ctx_allocAVHWFramesInternalav_mallocz分配内存internal-privav_hwframe_ctx_allocVAAPIFramesContext根据HWContextTypehw_type-frames_priv_size使用av_mallocz分配内存hwctxav_hwframe_ctx_allocAVVAAPIFramesContext根据HWContextTypehw_type-frames_hwctx_size使用av_mallocz分配内存av_classav_hwframe_ctx_allocAVClasshwframe_ctx_class实例device_refav_hwframe_ctx_allocAVBufferRef指针avctx-hw_device_ctx数据的AVBufferRef指针device_ctxav_hwframe_ctx_allocAVHWDeviceContext指针avctx-hw_device_ctx数据formatav_hwframe_ctx_allocAVPixelFormatAV_PIX_FMT_NONEsw_ formatav_hwframe_ctx_allocAVPixelFormatAV_PIX_FMT_NONEff_vaapi_common_frame_paramsff_vaapi_common_frame_params调用vaapi_decode_make_config初始化 AVHWFramesContext结构体即AVHWFramesContext结构体。表格中为AVHWFramesContext*ctx的初始化成员成员函数说明(description)formatff_vaapi_common_frame_params确定解码类型的格式AV_PIX_FMT_VAAPI或者AV_PIX_FMT_VDPAUwidthff_vaapi_common_frame_params解码的宽度来自于AVCodecContext的coded_width用来创建surface并会将其传递给AVFrame的widthheightff_vaapi_common_frame_params解码的高度来自于AVCodecContext的coded_height用来创建surface并会将其传递给AVFrame的heightsw_formatvaapi_decode_find_best_format解码的格式通过查询驱动确定vaapi_decode_make_config调用initial_pool_sizeff_vaapi_common_frame_params用来确定surface分配的个数av_hwframe_ctx_initav_hwframe_ctx_init进行AVHWFramesContext判断操作并不对AVHWFramesContext结构体的数值进行修改vaapi_decode_make_configvaapi_decode_make_config对AVVAAPIHWConfig内部只有VAConfigID成员进行av_hwdevice_hwconfig_alloc内存分配操作和使用av_hwdevice_get_hwframe_constraints对AVHWFramesConstraints成员的初始化这两个结构体不对外部AVCodecContext结构体产生影响,只是作为内部数据参考只有VAConfigID 赋值给VAAPIDecodeContext -va_config成员函数类型说明(description)AVHWFramesContext.formatvaapi_decode_make_configAVPixelFormatAV_PIX_FMT_VAAPIAVHWFramesContext.widthvaapi_decode_make_configintavctx-coded_widthAVHWFramesContext.heightvaapi_decode_make_configintavctx-coded_heightAVHWFramesContext.initial_pool_sizevaapi_decode_make_configint原值为1根据不同的code_id增加H264(16),HEVC(16),VP9(8),VP8(3),OTHERS(2),除此之外所有的还会在增加3所以对于h264而言surface的最大数目就是20硬件编码过程中AVCodecContext的变化编码过程的很多函数和解码过程中的函数是通用的以下只对差异点进行介绍用户设置AVCodecContext项目成员函数类型说明(description)width用户设置int编码宽度height用户设置int编码高度time_base用户设置AVRational可以为{1, 25}framerate用户设置AVRational可以为{1, 25}sample_aspect_ratio用户设置AVRational可以为{1, 1}pix_fmt用户设置AVPixelFormatAV_PIX_FMT_VAAPIhw_frames_ctx用户设置AVHWFramesContext的AVBufferRef指针用于确定编码surface的size和format对于hw_frames_ctx需要设置以下项目成员函数类型说明(description)format用户设置AVPixelFormat编码的硬件格式标准如AV_PIX_FMT_VAAPIsw_format用户设置AVPixelFormat编码的硬件像素格式如AV_PIX_FMT_NV12width用户设置int编码surface的宽度height用户设置int编码surface的高度initial_pool_size用户设置int编码surface的的使用个数最大值avcodec_alloc_context3与解码相同av_hwdevice_ctx_create与解码相同avcodec_open2使用硬件编码过程中需要在avcodec_open2之前对AVCodecContext.hw_device_ctx使用av_hwdevice_ctx_create根据AVHWDeviceType进行创建并赋值给AVCodecContext.hw_device_ctx。avcodec_open2对AVCodecContext成员进行初始化与解码过程相同avcodec_open2会调用vaapi_encode_h264_init对AVCodecContext的成员造成影响主要是VAAPIEncodeContext结构体即AVCodecContext.priv_data分配的内存。以下表格中为VAAPIEncodeContext成员成员函数类型说明(description)codecvaapi_encode_h264_initVAAPIEncodeType全局变量vaapi_encode_type_h264指针AVCodecContext.profilevaapi_encode_h264_initint用户设定如果不存在就使用默认值AVCodecContext.levelvaapi_encode_h264_initint用户设定如果不存在就使用默认值va_profilevaapi_encode_h264_initVAProfile根据AVCodecContext.profile设定va_entrypointvaapi_encode_h264_initVAEntrypoint根据VA_CHECK_VERSION版本设定低版本为VAEntrypointEncSliceLP高版本为VAEntrypointEncSliceva_rt_formatvaapi_encode_h264_initint设定为VA_RT_FORMAT_YUV420va_rc_modevaapi_encode_h264_initint设定为VA_RC_CBRVA_RC_VBRVA_RC_CQPva_packed_headersvaapi_encode_h264_initint设定为VA_ENC_PACKED_HEADER_SEQUENCEVA_ENC_PACKED_HEADER_SLICEVA_ENC_PACKED_HEADER_MISCsurface_widthvaapi_encode_h264_initint设定为avctx-width的16字节对齐值surface_heightvaapi_encode_h264_initint设定为设定为avctx-height的16字节对齐值codec_optionsff_vaapi_encode_initvoid*设定为本身的codec_optionsinput_frames_refff_vaapi_encode_initAVBufferRef*设定为AVCodecContext.hw_frames_ctx的引用priv_dataff_vaapi_encode_initvoid*av_mallocz分配VAAPIEncodeTyp.priv_data_size大小的内存input_framesff_vaapi_encode_initAVHWFramesContext*device_refff_vaapi_encode_initAVBufferRef*设定为AVCodecContext.hw_frames_ctx的引用deviceff_vaapi_encode_initAVHWDeviceContext*设定为device_ref的datahwctxff_vaapi_encode_initAVHWDeviceContext*设定为device的hwctxva_configff_vaapi_encode_initVAConfigID调用vaCreateConfigva_contextff_vaapi_encode_initVAContextID调用vaCreateContextoutput_buffer_poolff_vaapi_encode_initVAContextID调用av_buffer_pool_init2用来获取VABufferIDav_hwframe_get_buffer获取一个free的surface不会对结构体AVCodecContext产生影响。avcodec_send_frameavcodec_send_frame主要是调用do_encode进行编码。成员函数类型说明(description)internal-buffer_pkt_validdo_encodeint编码的packet是否成功,不成功时avcodec_receive_packet调用do_encodeavcodec_receive_packet成员函数类型说明(description)internal-buffer_pkt_validdo_encodeint编码的packet是否成功,不成功时avcodec_receive_packet调用do_encodeffmpeg硬件解码对于AVCodecContext的影响如上所示其他不做多余介绍。

相关推荐

单一与多重继承实验(附源代码)
单一与多重继承实验(附源代码)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/9 17:21:07

libdrm相关结构体简介
libdrm相关结构体简介

主要内容 本章主要讲解libdrm相关结构体的说明。 Mode相关结构体 drmModeRes typedef struct _drmModeRes {int count_fbs;uint32_t *fbs;int count_crtcs;uint32_t *crtcs;int count_connectors;uint32_t *connectors;int count_encoders;uint32_t *encoders;uint32_t min_wid… · 2026/11/4 23:13:04

Qt自定义委托实现定制输入的效果
Qt自定义委托实现定制输入的效果

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 19:02:01

邯郸河北电工证焊工证考不过怕白交钱?官方报名入口这样用最稳妥
邯郸河北电工证焊工证考不过怕白交钱?官方报名入口这样用最稳妥

邯郸河北电工证焊工证考不过怕白交钱?官方报名入口这样用最稳妥 怕考不过白交培训费?邯郸河北电工证焊工证考试别踩坑,官方报名入口用对了,一步到位。… · 2026/11/11 13:27:39

泰州高港电工证电子证书怎么查?工地太忙根本没时间复习考试
泰州高港电工证电子证书怎么查?工地太忙根本没时间复习考试

泰州高港电工证电子证书怎么查?工地太忙根本没时间复习考试 工地太忙根本没时间复习考试,这是很多一线电工的真实写照。尤其是像泰州高港这样的区域,电工证考试和复审成为了很多从业者不得不面对的问题。随着 电子证书… · 2026/11/11 13:27:39

雄县低压电工证培训保姆级教程:工地太忙根本没时间复习考试
雄县低压电工证培训保姆级教程:工地太忙根本没时间复习考试

雄县低压电工证培训保姆级教程:工地太忙根本没时间复习考试 工地太忙根本没时间复习考试,这是无数一线电工师傅的共同心声。特别是在雄县这样的建筑大县,低压电工证不仅是上岗的“入场券”,更是工资涨、项目稳、机会多的关键。可偏偏这个证,不是谁都能顺… · 2026/11/11 13:27:39

甘肃高压电工证查询千万别踩坑,外省证能转吗?看看真实流程
甘肃高压电工证查询千万别踩坑,外省证能转吗?看看真实流程

甘肃高压电工证查询千万别踩坑,外省证能转吗?看看真实流程 之前考的证在外省能不能转过来?这个问题困扰了很多人,尤其是像你这样在焦作转岗、想要在甘肃继续从事高压电工工作的朋友。现在不少人都在问【甘肃高压电工证查询】,但一不小心就容易踩坑,比如… · 2026/11/11 13:27:39

南阳市哪有考电工证的官方回应:实操考试心里没底怕挂科
南阳市哪有考电工证的官方回应:实操考试心里没底怕挂科

南阳市哪有考电工证的官方回应:实操考试心里没底怕挂科 实操考试心里没底怕挂科?南阳市哪有考电工证的官方回应来了,别再被中介忽悠。很多人在报考电工证时,最怕的就是实操考试不过,耽误时间又花冤枉钱。而南阳市作为河南中部的重要城市,特种作业操作证… · 2026/11/11 13:27:39

邢职毕业有电工证吗?网上查询报名渠道别走弯路
邢职毕业有电工证吗?网上查询报名渠道别走弯路

邢职毕业有电工证吗?网上查询报名渠道别走弯路 你是不是也这样,拿着毕业证却不知道怎么考电工证?怕被中介坑?别急,这篇讲透邢职毕业有电工证吗、网上查询报名、信阳房建工程从业者的报考攻略。 ### 邢职毕业有电工证吗?证书怎么考?… · 2026/11/11 13:26:39

电工证丢失还能补吗?千万别踩坑,丢了证等于失业
电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/11 12:18:07

电力电缆作业证直播报名入口与办理流程良心建议
电力电缆作业证直播报名入口与办理流程良心建议

电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/10 17:46:39

英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑

英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/10 17:11:43

_中职电工证最新政策解读
_中职电工证最新政策解读

中职电工证在哪考?工地太忙根本没时间复习考试的救星来了 工地太忙根本没时间复习考试,这是很多正在备考 中职电工证 的建筑工友的真实写照。你不是不想考,而是真的没时间。但别担心,这期内容是 新乡初次报考人员… · 2026/11/11 0:00:52

昆明电工证培训价格值不值得考?老电工告诉你真相
昆明电工证培训价格值不值得考?老电工告诉你真相

昆明电工证培训价格值不值得考?老电工告诉你真相 之前考的证在外省能不能转过来?这个问题是很多在外地打工、换城市生活、或者是想在昆明发展的朋友最关心的。尤其是现在云南发展快,很多企业都在招持证上岗的电工,如果你手头有证但不在本地,那这个证是不… · 2026/11/11 0:00:52

特种电缆张工网上查询全攻略:外省证如何转过来
特种电缆张工网上查询全攻略:外省证如何转过来

特种电缆张工网上查询全攻略:外省证如何转过来 之前考的证在外省能不能转过来?这是很多特种作业从业者最关心的问题,尤其是像特种电缆张工这类证书,直接关系到日常工作是否合规、能否顺利晋升。很多小伙伴因为证书归属地的问题,陷入职业发展的瓶颈,甚至… · 2026/11/11 0:00:52

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 20:19:29

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 19:22:45

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 17:00:47

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码