<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Worker - tag - 沐木</title><link>https://oldletter.cn/tags/worker/</link><description>Worker - 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/worker/" rel="self" type="application/rss+xml"/><item><title>实时视频（三）：解码与断流</title><link>https://oldletter.cn/posts/rtsp-browser-03-webcodecs-wasm/</link><pubDate>Sat, 11 Jul 2026 00:00:00 +0000</pubDate><author>mumu</author><guid>https://oldletter.cn/posts/rtsp-browser-03-webcodecs-wasm/</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>浏览器有 <code>VideoDecoder</code> 接口，不代表当前 H.264/H.265 配置一定可用。能力探测、输入格式、解码队列和断流重建必须放在同一条状态链里。当前 demo 采用 Worker 解耦主线程，Rust/WASM 在解码提交前检查码流结构。</p>
<h2 id="能力探测绑定具体配置">能力探测绑定具体配置</h2>
<p>收到参数集后构造 <code>VideoDecoderConfig</code>，配置中包含 codec string、description、codedWidth、codedHeight 和必要的硬件提示。先调用 <code>VideoDecoder.isConfigSupported()</code>，成功后再创建解码器。参数集摘要、分辨率或 profile 变化时，旧结果失效，必须重新探测。</p>
<div class="mermaid" id="id-2" data-mermaid-definition="c3RhdGVEaWFncmFtLXYyCiAgICBbKl0gLS0&#43;IElkbGUKICAgIElkbGUgLS0&#43;IFByb2Jpbmc6IOaUtuWIsOWPguaVsOmbhgogICAgUHJvYmluZyAtLT4gV2ViQ29kZWNzOiDmlK/mjIEKICAgIFByb2JpbmcgLS0&#43;IFdhc206IOS4jeaUr&#43;aMgeaIluWIneWni&#43;WMluWksei0pQogICAgV2ViQ29kZWNzIC0tPiBQbGF5aW5nOiDlhbPplK7luKflj6/op6PnoIEKICAgIFdhc20gLS0&#43;IFBsYXlpbmc6IFdvcmtlciDliJ3lp4vljJblrozmiJAKICAgIFBsYXlpbmcgLS0&#43;IFdhaXRpbmdLZXlmcmFtZTog5Lii5YyF5oiW6YWN572u5Y&#43;Y5YyWCiAgICBXYWl0aW5nS2V5ZnJhbWUgLS0&#43;IFByb2Jpbmc6IOaWsOWPguaVsOmbhgogICAgUGxheWluZyAtLT4gUmVjb3ZlcmluZzog5pat5rWB5oiW6Kej56CB6ZSZ6K&#43;vCiAgICBSZWNvdmVyaW5nIC0tPiBQcm9iaW5nOiDph43lu7rmiJDlip8KICAgIFJlY292ZXJpbmcgLS0&#43;IEVycm9yOiDotoXov4fph43or5XpooTnrpc=">stateDiagram-v2
    [*] --&gt; Idle
    Idle --&gt; Probing: 收到参数集
    Probing --&gt; WebCodecs: 支持
    Probing --&gt; Wasm: 不支持或初始化失败
    WebCodecs --&gt; Playing: 关键帧可解码
    Wasm --&gt; Playing: Worker 初始化完成
    Playing --&gt; WaitingKeyframe: 丢包或配置变化
    WaitingKeyframe --&gt; Probing: 新参数集
    Playing --&gt; Recovering: 断流或解码错误
    Recovering --&gt; Probing: 重建成功
    Recovering --&gt; Error: 超过重试预算</div><p>探测失败和解码失败是两类信号。前者说明配置不被当前实现接受，后者可能来自 Annex B/长度前缀不匹配、缺失参考帧或坏包。用异常重试代替能力探测会让错误路径反复创建解码器，页面只会越来越卡。</p>]]></description></item></channel></rss>