目录背景一、编码、容器、分发是三层1.1 编码、容器、分发三层介绍1.2、三层各留各的信息二、MP4索引在 moov样本在 mdat2.1 盒子2.2 一个点播文件里的三块2.3 用这些表定位一帧2.4 moov 在头还是在尾2.5 分片 MP42.6 参数集和 NAL 的两种形态三、MPEG-TS188 字节的传送流3.1 包头只有 4 字节3.2 PAT、PMT 和 PES3.3 PCR 管时钟PTS 管显示3.4 广播和直播里它为什么稳四、FLV、PS、MKV以及切片协议4.1 FLV按 Tag 往下写4.2 MPEG-PS国标监控里很常见4.3 MKV 与 WebM4.4 MOV 与 AVI4.5 HLS、DASH、CMAF 是清单加切片五、放在一张表里看六、按场景选七、转封装时要守住的几件事八、自己把结构看出来总结背景录像、转码和播放里H.264 与 AAC 会反复出现在 MP4、TS、FLV 中。画面可以一样。能不能拖动、能不能边录边播、丢几个包之后还能不能重新对齐差别在容器。容器把已经压好的基本流放上时间轴轨道怎么排、时间戳用什么刻度、关键帧记在哪里、参数集放在带内还是带外。下面按结构往下拆。先分清编码、容器和分发再看 MP4 的盒子和 TS 的定长包然后把 FLV、PS、MKV 以及 HLS、DASH 放回各自的场景。一、编码、容器、分发是三层1.1 编码、容器、分发三层介绍图 1同一路压缩数据可以换打包方式再换传送方式1.2、三层各留各的信息换容器时压缩数据可以原样拷贝。会变的是时间戳刻度、参数集的位置以及 NAL 用起始码还是长度前缀。FFmpeg 里这叫 stream copy-c copy。它跳过解码和编码速度接近文件拷贝。分发再在容器外面套一层。HLS 的m3u8是播放列表DASH 的 MPD 是清单RTMP 是会话。它们描述“去哪拿下一段”本身不替代 MP4 或 TS。二、MP4索引在 moov样本在 mdatMP4 属于 ISO 基本媒体文件格式ISO/IEC 14496-12。文件由盒子组成。读取器先认品牌再靠moov里的表把每一帧从mdat里捞出来。2.1 盒子每个盒子开头是长度和类型size 为 0 表示这个盒子一直延伸到文件末尾常见于还在增长的mdat。类型决定后面是子盒子还是一张表。moov、trak、mdia、minf、stbl、moof、traf里面继续嵌盒子stts、stsz、mdat的载荷是表或样本不能再按盒子往下切。2.2 一个点播文件里的三块图 2ftyp 表明品牌moov 放索引mdat 里音视频按时间交错ftyp写出主要品牌和兼容品牌例如isom、mp42、avc1、iso6。ffprobe对 MP4 和 MOV 经常给出同一个format_namemov,mp4,m4a,3gp,3g2,mj2因为它们共用一套解复用器。要区分文件代际看ftyp的品牌。moov是整部片子的索引。一条轨道一个trak。和定位直接相关的表都在stbl里mdat 里是样本本体。点播文件会把音视频按时间交错写进去。整段视频在前、整段音频在后时即使moov已经在文件头前面一段时间也只有画面。MOV 和 MP4 是同一套盒子。QuickTime 文件的品牌常为 qt。很多mov 转 mp4只改品牌和样本描述码流可以原样拷贝。2.3 用这些表定位一帧设视频轨 timescale 为 90000stts 里每帧时长 3000也就是 30 帧每秒。要播第 10 秒(1). 媒体时间 10 × 90000 900000。(2). 样本序号 900000 / 3000 300。(3). 在 stss 里取不大于 300 的最后一个同步样本。GOP 为 30 帧且第 0 帧是同步样本时300 本身就能独立解开(4). 用 stsc 查出它落在哪个 chunk、是这个 chunk 里的第几帧。(5). stco 给出该 chunk 的文件偏移stsz 把同 chunk 里前面几帧的字节数加起来。文件位置 chunk 偏移 帧内偏移。播放器由此只读这一帧不必扫描整个 mdat。stts 推进的是解码时间。有 B 帧时显示顺序和解码顺序不一致ctts 把显示时刻从解码时刻上挪开。忽略 cttsB 帧会画在错误的时间上。ctts 的 version 1 允许负偏移只认 version 0 的旧实现遇到负值会把显示时间算错。拖动还要落在真正的同步样本上。H.264 里这通常是 IDR。开放 GOP 中如果把普通 I 帧写进 stss拖过去要等下一帧真正的随机访问点中间会花。2.4 moov 在头还是在尾录制过程中总时长和每帧大小要等写完才知道所以很多文件先写 mdat把 moov 留在末尾。这样的文件做渐进下载时播放器要先拿到文件尾才能开播。点播成品把 moov 放在 ftyp 后面ffmpeg -i input.ts -c copy -movflags faststart out.mp4faststart需要可以回头写的输出文件。它在写完后把moov挪到前面并修正stco/co64因为mdat的位置变了。管道、边传边写这类不能回头改的输出用下一节的分片 MP4。时长也有版本问题。mvhdversion 0 的时长是 32 位。timescale 取 90000 时大约 13.3 小时就会溢出。更长的录像要用 version 1 的 64 位时长。单文件超过 4GB 时偏移改走co64。2.5 分片 MP4图 3点播把一个 moov 放在文件头直播和切片用初始化段加重复的 moof/mdat分片文件分成两段职责初始化段ftypmoovmvex。这里有编码参数和轨道默认值没有每帧索引。媒体分片moofmdat。moof里的tfdt给出这个分片在时间轴上的起点trun给出分片内每帧的时长、大小和是否关键帧。因此后一个分片不依赖前一个分片的样本表。直播可以一直追加播放器从任意一个以关键帧开头的分片切入。sidx是可选的段索引用来按字节范围请求一个大文件里的某一段。default_base_moof让trun的数据偏移相对moof本身计算输出端还不知道最终文件偏移时也能写。DASH 的主流封装、新一代 HLS以及 CMAFISO/IEC 23000-19都使用这套结构。HLS 用#EXT-X-MAP指向初始化段。CMAF 把约束收紧让 DASH 和 HLS 共用同一套分片。生成可追加的分片文件ffmpeg -i input.ts -c copy -f mp4 -movflags frag_keyframeempty_moovdefault_base_moof out.mp4frag_keyframe在关键帧处切开。转封装造不出新的关键帧分片能不能独立解码取决于原来的 GOP。希望 2 秒一切并且每段都能单独起播编码时就要让关键帧间隔落在 2 秒以内。本地点播仍优先用带头moov的整文件。分片文件适合边写边播、CDN 切片和中途加入。2.6 参数集和 NAL 的两种形态H.264 在 TS 里常见形态是 Annex-BNAL 前面有00 00 01起始码SPS/PPS 周期性地出现在 IDR 之前方便中途加入。在 MP4 的mdat里以及 FLV 的 AVC NAL Tag 里常见形态是长度前缀。每一条 NAL 前面是长度字段。MP4 把长度占几个字节写在avcC的lengthSizeMinusOne里通常是 4 字节FLV 的序列头用同一份AVCDecoderConfigurationRecord。SPS/PPS 放在参数集里不在每帧里重复。只把mdat抠出来当裸流播解码器没有参数集。H.265 同样有两套习惯hvc1把 VPS/SPS/PPS 放在hvcChev1允许参数集同时出现在带内。分片直播如果中途会换参数集要确认初始化段和分片里的约定一致。三、MPEG-TS188 字节的传送流MPEG-TSISO/IEC 13818-1没有文件级样本表。它用固定长度的包往前送节目结构靠周期性重复的表来宣布。接收端丢了几个包还能从下一个同步字节重新对齐。3.1 包头只有 4 字节图 4同步字节 0x47 对齐包PAT 指出 PMTPMT 指出各路 PES标准包长 188 字节。包头字段只含适配字段、没有载荷的包不增加连续性计数。同一 PID 上计数保持不变多半是重复包计数跳变说明中间丢了包。适配字段里可以放 PCR。PCR 是 27 MHz 时钟33 位基值按 90 kHz 走9 位扩展把精度补到 27 MHz。规范要求相邻 PCR 的间隔不超过 100 ms广播里常见大约 40 ms。实际文件不一定是 188 一步标准 TS188 字节。一部分 DVB 流在每个包后面带 16 字节校验步长 204。蓝光m2ts在每个包前面有 4 字节到达时间步长 192。自己写解析时从0x47向后看下一次0x47的间距。连续几个包都落在 188、192 或 204 上步长就确定了。3.2 PAT、PMT 和 PESPID 0 上是 PAT。它把节目号映射到该节目 PMT 的 PID。PMT 再宣布两件事PCR 在哪一路以及每路基本流的stream_type和 PID。这些表会周期重发所以中途加入的播放器不用从文件头读起。常见stream_typePES 才装基本流。一个 PES 跨多个 TS 包只有起点那个包把 PUSI 置 1。PES 头里带 33 位的 PTS需要时再带 DTS单位都是 90 kHz。视频在 TS 里多为 Annex-B。AAC 若是0x0F帧外还有 ADTS 头。直播推流大多是单节目 TSPAT 里一套节目。广播复用器把多套节目打进一路PAT 里有多条节目号这种叫多节目 TS。统计码率时要单独看空包空包的 PID 是0x1FFF用来把变码率填成恒定码率。把空包算进视频码率会和编码器输出对不上。3.3 PCR 管时钟PTS 管显示PCR 告诉解码器现在几点。PTS 告诉这一帧该在几点显示。解码器把本地时钟锁到 PCR 上等到时钟追上 PTS再把这帧送去显示。DTS 告诉解码器何时解码。有 B 帧时 PTS 和 DTS 不同解码顺序和显示顺序就靠这两个值拉开。两个时间都要有。只有 PTS、PCR 长期不来时钟会漂音画逐渐分开。把 PCR 直接当成显示时间也会和 PTS 对不齐。PTS 是 33 位。90 kHz 下大约 26.5 小时回绕一次。长时间录像要把回绕接回连续时间轴不能把它当成时间倒流。HLS 在切段处用#EXT-X-DISCONTINUITY明确告诉播放器下一段的时间轴另起。3.4 广播和直播里它为什么稳定长包对复用器友好丢包后按同步字节重新找到边界PAT/PMT 过一会儿又会来不需要一份越写越大的全局索引。代价是随机拖动要扫描或者靠外面的索引。FFmpeg 打开大 TS 时会扫建索引所以同样时长的文件TS 往往比 MP4 开得慢。传统 HLS 的媒体段就是短 TS。播放列表负责第几秒在哪个文件TS 负责这一小段里的时钟和基本流。ffmpeg -i input.mp4 -c copy -f mpegts out.ts进 TS 时H.264 会从长度前缀改回起始码。新版本 FFmpeg 在-c copy时通常自动插入h264_mp4toannexb。四、FLV、PS、MKV以及切片协议4.1 FLV按 Tag 往下写FLV 文件以FLV三个字节开头接着是版本、音视频标志和 9 字节头长然后是一个值为 0 的 PreviousTagSize。后面是重复的 Tag视频 CodecID 为 7 表示 AVC。AVC 包再分序列头和 NAL 包序列头里是AVCDecoderConfigurationRecord和 MP4 的avcC是同一份参数NAL 包里还可以带 CompositionTime用来放 B 帧的显示偏移。音频格式 10 表示 AAC同样先来序列头AudioSpecificConfig再来裸 AAC 帧。脚本 Tag 里的onMetaData可以带关键帧时间表。点播 FLV 靠这张表拖动。直播可以没有它因为本来就不往回 seek。RTMP 的音视频消息和 FLV Tag 同构消息类型也是 8、9、18。所以 RTMP 推上来的流落地时可以直接存成 FLV。HTTP-FLV 则是一条不结束的 HTTP 响应响应体是一个不断增长的 FLV开头几个 Tag 交出 AAC/AVC 序列头之后按 Tag 往下播。常见延迟在 1 到 3 秒适合要接现有 RTMP 推流、又希望浏览器用 HTTP 来拉的直播。32 位毫秒时间戳大约 49.7 天回绕一次。超长推流要处理这个回绕。Tag 的 StreamID 固定为 0格式里只有一路视频和一路音频的位置。多音轨和软字幕要换 MP4 或 MKV。4.2 MPEG-PS国标监控里很常见节目流PS也来自 ISO/IEC 13818-1包长可变。包头起始码是00 00 01 BA节目映射在 PSM00 00 01 BC视频 PES 的 stream_id 常为0xE0音频常为0xC0。DVD 的 VOB 就是 PS。国标监控的实时预览RTP 负载里经常是 PS设备用 PSM 宣布视频和音频。平台级联和录像里也能见到 TS。收流程序要按起始码认壳。拿 TS 的0x47、按 188 去切 PS会对不齐。PS 适合可靠链路上的存储和单路传输。包长不固定丢一个包之后边界不如 TS 好找。4.3 MKV 与 WebMMatroska 用 EBML 编码。媒体放在 Cluster 里每个 Cluster 有自己的时间码Cues 把时间映射到 Cluster 的文件位置粒度通常是一块。章节、多音轨、软字幕和附件都可以放进同一个文件适合归档和后期工程。WebM 是收紧后的子集视频 VP8、VP9 或 AV1音频 Vorbis 或 Opus。浏览器里的 Media Source Extensions 既能接分片 MP4也能接 WebM。直播时 Cluster 可以往外推Cues 往往要等收尾才完整所以更常用来保存录制结果。广播复用仍走 TS。4.4 MOV 与 AVIMOV 已在第二节说过和 MP4 同源。AVI 是 RIFF索引用idx1。它能装老的编码现代的 H.265 和可变帧率都很别扭。新录像不必再选 AVI。4.5 HLS、DASH、CMAF 是清单加切片这三者和容器的关系是HLSm3u8列出每一段的时长和地址。传统媒体段是 TS使用分片 MP4 时用#EXT-X-MAP给出初始化段。DASHMPD 描述 Period、AdaptationSet 和 Representation。媒体段主流是分片 MP4初始化段单独缓存。CMAF约束分片 MP4 的写法使同一组初始化段和媒体段同时给 HLS 和 DASH 用。传统 HLS 的延迟常见在十几秒到半分钟主要花在「等满一个切片再公布」。低延迟 HLS 和 CMAF 的分块可以把这个等待压到数秒。再往下的超低延迟WebRTC 的媒体直接走 RTP会话结束再录成 WebM 或分片 MP4。加密也沿这条线分开。MP4 的 CENC 在样本层加密pssh、tenc、senc仍留在盒子结构里清单和索引可读。HLS 的 AES-128 则把整个切片文件加密播放器先按密钥解开再按 TS 或 fMP4 去解析。广播 TS 使用条件接收表和文件层的 CENC、AES-128 各走各的。五、放在一张表里看六、按场景选图 5拖动、收尾、丢包这三件事决定用哪一种壳可以收成六条(1). 点播成品用带头 moov 的 MP4。手机、浏览器、桌面播放器都认拖动是一次查表。(2). 边录边播、多端切片用分片 MP4。DASH 和新一代 HLS 直接吃它CMAF 让两边共用。(3). 广播、UDP、传统 HLS 切片用 TS。定长包、周期表、PCR都是为「中途加入」和「丢了还能接」准备的。(4). 低延迟 HTTP 直播上游已经是 RTMP 时用 FLV / HTTP-FLV。Tag 到了就能播不必等一个完整切片。(5). 国标监控先按 PS 解 RTP 负载用 PSM 认轨道平台侧若约定的是 TS再走 PAT/PMT。(6). 多音轨、软字幕、章节放进 MKV。网页点播仍以 H.264/H.265 AAC 的 MP4 最稳Opus 更常见于 WebM 和 WebRTC。选壳之前先看编码是否被目标普遍接受。H.264 AAC 在 MP4、TS、FLV 之间拷贝播放器支持最齐。Opus 进 TS、AC-3 进 MP4封装可以成功播放器却不一定解得开。七、转封装时要守住的几件事(1). 点播文件把 moov 放在头上。 faststart 会重写偏移。不能回头写的输出改用分片。(2). 分片从关键帧开始。 -c copy 不会新增 IDR。GOP 是 5 秒就不要指望切出 2 秒且每段都能独立起播的切片。(3). 比特流形态会变压缩数据可以不变。 TS 进 MP4视频改成长度前缀AAC 去掉 ADTS对应的过滤器是 aac_adtstoasc。MP4 进 TS视频改回起始码对应 h264_mp4toannexb。新版本在 -c copy 时通常会自动插入。(4). 有 B 帧就保留显示时间。 MP4 靠 cttsFLV 靠 CompositionTimeTS 靠 PES 里同时存在的 PTS 和 DTS。只拷解码时间显示顺序会乱。(5). 大文件用 co64长时长用 64 位 mvhd。 32 位偏移止于 4GB90000 的 timescale 配 32 位时长大约 13.3 小时封顶。(6). 时间戳回绕要接上。 TS 的 PTS 约 26.5 小时回绕FLV 的毫秒时间戳约 49.7 天回绕。HLS 切段处的不连续要用标签标明。(7). PCR 和 PTS 各干各的。 PCR 恢复时钟间隔不超过 100 ms。PTS 决定显示。音画分开时先看这两路是不是还在同一条时间轴上。(8). 参数集要能被中途加入的人拿到。 MP4 把它们放在 avcC / hvcC初始化段必须先到。TS 里则要在 IDR 前周期性重发。(9). 音轨的编辑列表会挪几十毫秒。 AAC 编码器延迟常见约 2112 个采样48 kHz 下大约 44 ms。elst 用来把这段延迟从时间轴上补偿掉。忽略它音画会有一个稳定的小错位。(10). 先认壳再切包。 TS 找 0x47 并确认步长是 188、192 还是 204。PS 找 00 00 01 BA。两种起始码不能混用。八、自己把结构看出来先看容器名、时长和每路编码ffprobe -v error -show_entries formatformat_name,duration,bit_rate -show_streams -of json input.mp4看 TS 前几包的时间戳和关键帧标志。flags里的K表示这个包落在关键帧上ffprobe -v error -show_packets -select_streams v:0 -show_entries packetpts_time,dts_time,flags,pos -read_intervals %#5 input.tsMP4 的盒子层级可以用下面的脚本打印。它按长度跳过mdat不会把媒体数据读进内存。stsd的载荷以版本和条目数开头后面才是样本条目。把它放进继续下钻的名单会把版本号当成盒子。import struct import sys from pathlib import Path CONTAINERS { moov, trak, mdia, minf, stbl, dinf, edts, mvex, moof, traf, } def walk(f, start: int, end: int, depth: int 0) - None: pos start while pos 8 end: f.seek(pos) hdr f.read(8) if len(hdr) 8: return size, typ struct.unpack(I4s, hdr) try: name typ.decode(ascii) except UnicodeDecodeError: return if not name.isprintable(): return header 8 if size 1: ext f.read(8) if len(ext) 8: return size struct.unpack(Q, ext)[0] header 16 elif size 0: size end - pos if size header or pos size end: return print(f{ * depth}{name} offset{pos} size{size}) if name in CONTAINERS: walk(f, pos header, pos size, depth 1) pos size def main() - None: path Path(sys.argv[1]) with path.open(rb) as f: f.seek(0, 2) walk(f, 0, f.tell()) if __name__ __main__: main()点播 MP4 上输出大致是ftyp、moov里面有trak/stbl/stco、然后mdat。若moov出现在mdat之后这个文件还没做 faststart。分片文件则会在初始化用的moov之后反复出现moof和mdat。总结编码负责压缩容器负责把压缩结果放上时间轴。MP4 用moov换来随机访问分片之后又能边写边播。TS 用 188 字节的定长包和周期发送的 PAT/PMT 换来丢包后的重新同步所以广播、UDP 和传统 HLS 都用它。FLV 按 Tag 顺序写接得住 RTMP 和低延迟 HTTP 直播。国标实时流先认 PS多轨归档用 MKV。换壳时优先-c copy同时改好 NAL 形态、参数集位置和时间戳。关键帧间隔在编码时已经定了切片和拖动都得顺着它来。
企业数字化 ERP 产品动态
相关推荐
11.1[A] 453直觉上是让各值减去最小值的差值的和但是如何证明?关键观察:把操作换一种等价说法这个转化非常关键视为所有元素1,然后一个元素减1等价,是说从相对差值上来看主要就是相对的一个概念从相对的差值上来看,每次就是选1… · 2026/11/3 10:49:18
算力的尽头是电力?从第一性原理看AI基础设施 AI 竞争的下半场,是一场电力与制造的系统工程
一个冰箱大小的服务器机柜,重量超过一辆皮卡;到 2027 年,它的峰值功率将相当于 65 户家庭同时用电;为了不让它烧掉,每个机柜需要排出的热量相当于 30 台燃气锅… · 2026/11/3 10:48:17
混沌拓扑学(HDT)论有效域与可核验性是数学证明的前置条件 摘要
本文针对 OpenAI 基于 Lean 4 完成的 Navier–Stokes 问题形式化工作,提出一个基础性质疑:该项产出是否具备数学意义上"证明"的资格。本文不主张其证明结论错误,而主张它从根本上不满足证明的两项前置条件——有效域的明确划定… · 2026/11/3 10:48:17
LangChain+ChromaDB 崩溃排查:OOM、段错误与工程化配置 内核掉了。不是抛异常,不是栈回溯,是 Jupyter 的 kernel 直接变灰,或者终端里的 python 进程凭空消失,只留下一行Killed或者什么都没有。我第一次在 LangChain 里挂上 ChromaDB 做本地知识库时,就是这么被教育了一整晚… · 2026/11/3 15:24:57
Sigma-Delta ADC噪声整形:从1位量化到15位精度的系统设计 简介:《高性能sigma-delta ADC的设计与研究》PDF为西安电子科技大学微电子学与固体电子学博士学位论文,面向微电子、模拟集成电路及ADC设计方向的研究生、工程师与科研人员,聚焦过采样和噪声整形机制下的高精度模数转换器系统设计与实现。包内… · 2026/11/3 15:24:57
MCP协议:自描述通信与AI系统集成实践 1. MCP协议的本质与自描述特性 MCP(Model Context Protocol)本质上是一种为AI系统设计的通信协议,它最革命性的突破在于将"自描述"特性深度融入协议设计。这种自描述机制使得协议本身能够携带完整的元数据说明,就像给每… · 2026/11/3 15:24:57
VMware Workstation Pro 17安装与优化指南 1. VMware Workstation Pro 17 核心价值解析 作为业界领先的虚拟化解决方案,VMware Workstation Pro 17在Windows平台上的表现堪称经典。这款软件允许用户在同一台物理机上同时运行多个操作系统实例,从Windows 10/11到各种Linux发行版,甚至是… · 2026/11/3 15:24:57
高频电路选频网络:串联/并联谐振与部分接入解析 简介:这份PPT课件面向电子工程、通信工程等专业的学生与自学者,聚焦高频电路中选频网络的基础理论与串联谐振回路这一核心知识点,适合课堂同步学习、期末复习或考研前的概念梳理。课件共1个文件,为单一PPT格式,压缩包约… · 2026/11/3 15:24:57
从冷启动到传播引爆:一文拆解内容热度背后的buzz机制 这两年不管做内容还是做产品的人,应该都会经历过这种困惑:一条消息发出去,阅读量看着还行,点赞也有,可评论区像集体断网,更没人转发。项目复盘的时候,大家把这个现象叫“有曝光没热度”。后来我… · 2026/11/3 15:23:55
双极步进电机控制实战: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/2 13:10:28
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/3 6:04:24
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/3 5:52:46
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
双极步进电机控制实战: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/2 13:10:28
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/3 6:04:24
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/3 5:52:46