<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>H.264 - tag - 沐木</title><link>https://oldletter.cn/tags/h.264/</link><description>H.264 - tag - 沐木</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Sat, 11 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://oldletter.cn/tags/h.264/" rel="self" type="application/rss+xml"/><item><title>实时视频（二）：RTP 解包、Access Unit 与关键帧等待</title><link>https://oldletter.cn/posts/rtsp-browser-02-rtp-access-unit/</link><pubDate>Sat, 11 Jul 2026 00:00:00 +0000</pubDate><author>mumu</author><guid>https://oldletter.cn/posts/rtsp-browser-02-rtp-access-unit/</guid><description><![CDATA[<blockquote>
<p>系列导航：<a href="/posts/rtsp-browser-01-protocol-options/" rel="">8</a> | <a href="/posts/rtsp-browser-02-rtp-access-unit/" rel="">9</a> | <a href="/posts/rtsp-browser-03-webcodecs-wasm/" rel="">10</a></p></blockquote>
<p>RTP 一个包不等于一帧视频。H.264 和 H.265 都支持单 NAL、聚合和分片，网络还会产生乱序、重复、丢包和序列号回绕。播放器下游需要的是带时间戳、关键帧标记、参数集版本和完整性结果的 Access Unit，不能把 RTP 细节继续泄漏到渲染代码。</p>
<h2 id="扩展序列号和乱序窗口">扩展序列号和乱序窗口</h2>
<p>每个 SSRC 维护自己的序列号状态。RTP 序列号是 16 位，扩展序列号需要根据已记录的基准判断回绕方向。实现不应直接用普通整数比较，否则从 <code>65535</code> 到 <code>0</code> 会被当成大范围乱序。</p>
<p>乱序缓冲保存包、到达时间和期望序列号。窗口按包数或时间限制，窗口到期就记录缺口并决定丢弃当前 NAL。重复包不再次拼接，但计入重复指标。SSRC 变化时切换独立状态，不能把两路源的分片放进同一缓冲。</p>
<div class="mermaid" id="id-2" data-mermaid-definition="Zmxvd2NoYXJ0IFRECiAgICBQYWNrZXRbUlRQIOWMhV0gLS0&#43;IEhlYWRlclvmoKHpqowgUlRQIOWktOS4jiBTU1JDXQogICAgSGVhZGVyIC0tPiBPcmRlclvmianlsZXluo/liJflj7fkuI7kubHluo/nqpflj6NdCiAgICBPcmRlciAtLT4gUGF5bG9hZHvotJ/ovb3nsbvlnot9CiAgICBQYXlsb2FkIC0tPiBTaW5nbGVb5Y2VIE5BTF0KICAgIFBheWxvYWQgLS0&#43;IEFnZ3JlZ2F0ZVvogZrlkIjljIXmi4bliIZdCiAgICBQYXlsb2FkIC0tPiBGcmFnbWVudFvliIbniYfph43nu4RdCiAgICBTaW5nbGUgLS0&#43;IEFVW&#43;aMieaXtumXtOaIs&#43;e7hCBBY2Nlc3MgVW5pdF0KICAgIEFnZ3JlZ2F0ZSAtLT4gQVUKICAgIEZyYWdtZW50IC0tPiBBVQogICAgQVUgLS0&#43;IENoZWNrW&#43;WujOaVtOaAp&#43;S4juWPguaVsOmbhuajgOafpV0KICAgIENoZWNrIC0tPiBLZXlb5YWz6ZSu5bin562J5b6F5oiW5Lqk5LuYXQ==">flowchart TD
    Packet[RTP 包] --&gt; Header[校验 RTP 头与 SSRC]
    Header --&gt; Order[扩展序列号与乱序窗口]
    Order --&gt; Payload{负载类型}
    Payload --&gt; Single[单 NAL]
    Payload --&gt; Aggregate[聚合包拆分]
    Payload --&gt; Fragment[分片重组]
    Single --&gt; AU[按时间戳组 Access Unit]
    Aggregate --&gt; AU
    Fragment --&gt; AU
    AU --&gt; Check[完整性与参数集检查]
    Check --&gt; Key[关键帧等待或交付]</div><h2 id="h264-与-h265-负载解析">H.264 与 H.265 负载解析</h2>
<p>H.264 常见单 NAL、STAP-A 和 FU-A。H.265 使用不同的 NAL 头以及聚合和分片类型，NAL 类型所在的位段不能直接复用 H.264 的掩码。聚合包每个单元带长度字段，解析前检查长度不超过剩余字节；一项越界，整个 RTP 包丢弃。</p>]]></description></item></channel></rss>