<?xml version="1.0" encoding="utf-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>VLC Media Player VLC播放器</title><link>https://www.videolan.com.cn/</link><description>VLC官方网站 - 全平台的自由多媒体解决方案！ - VideoLAN</description><item><title>VLC下载 Windows 64bit版</title><link>https://www.videolan.com.cn/post/4.html</link><description>&lt;p style=&quot;text-align: center;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;text-wrap-mode: nowrap; font-size: 24px;&quot;&gt;VLC media player&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;VLC 是一款自由、开源的跨平台多媒体播放器及框架，可播放大多数多媒体文件，以及 DVD、音频 CD、VCD 及各类流媒体协议。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&lt;img src=&quot;https://www.videolan.com.cn/zb_users/upload/2026/03/202603031772504518566128.jpg&quot; alt=&quot;1527693941_vlc_media_player.jpg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;VLC media player&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;VLC 是一款强大的媒体播放器，能播放当今大多数媒体及视频格式。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;https://www.videolan.com.cn/zb_users/upload/2026/03/202603031772504589599987.jpg&quot; style=&quot;&quot; title=&quot;image (3)_1.jpg&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;https://www.videolan.com.cn/zb_users/upload/2026/03/202603031772504589635015.jpg&quot; style=&quot;&quot; title=&quot;image (2)_1.jpg&quot;/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Wed, 21 Oct 2026 09:09:55 +0800</pubDate></item><item><title>VLC下载 Windows版</title><link>https://www.videolan.com.cn/post/5.html</link><description>&lt;p style=&quot;text-align: center;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;text-wrap-mode: nowrap; font-size: 24px;&quot;&gt;VLC media player&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;VLC 是一款自由、开源的跨平台多媒体播放器及框架，可播放大多数多媒体文件，以及 DVD、音频 CD、VCD 及各类流媒体协议。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;&lt;img src=&quot;https://www.videolan.com.cn/zb_users/upload/2026/03/202603031772504518566128.jpg&quot; alt=&quot;1527693941_vlc_media_player.jpg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;VLC media player&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;VLC 是一款强大的媒体播放器，能播放当今大多数媒体及视频格式。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;https://www.videolan.com.cn/zb_users/upload/2026/03/202603031772504589599987.jpg&quot; style=&quot;&quot; title=&quot;image (3)_1.jpg&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;https://www.videolan.com.cn/zb_users/upload/2026/03/202603031772504589635015.jpg&quot; style=&quot;&quot; title=&quot;image (2)_1.jpg&quot;/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Tue, 20 Oct 2026 09:11:38 +0800</pubDate></item><item><title>VLC下载 Android版</title><link>https://www.videolan.com.cn/post/10.html</link><description>&lt;p style=&quot;text-align: center;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;text-wrap-mode: nowrap; font-size: 24px;&quot;&gt;VLC media player&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;VLC 是一款自由、开源的跨平台多媒体播放器及框架，可播放大多数多媒体文件，以及 DVD、音频 CD、VCD 及各类流媒体协议。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;https://www.videolan.com.cn/zb_users/upload/2026/03/20260303121456177251129648682.jpeg&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;VLC media player&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;VLC 是一款强大的媒体播放器，能播放当今大多数媒体及视频格式。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;https://www.videolan.com.cn/zb_users/upload/2026/03/20260303121458177251129815532.jpeg&quot; alt=&quot;VLC on Android&quot;/&gt;&lt;img src=&quot;https://www.videolan.com.cn/zb_users/upload/2026/03/20260303121500177251130060269.jpeg&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;h3 style=&quot;margin: 12px 0px 8px; padding: 0px 4px; font-size: 15px; height: 36px; border-bottom: 1px dashed rgb(23, 162, 231); color: rgb(51, 51, 51); font-family: &amp;quot;Microsoft YaHei&amp;quot;; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;【vlc for android功能】&lt;/h3&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; position: relative; width: 710px; line-height: 36px; color: rgb(51, 51, 51); font-family: &amp;quot;Microsoft YaHei&amp;quot;; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;1. 广泛格式支持：支持播放各种音频和视频格式，包括 MP4、AVI、MKV、FLV、WMV、MOV 等。&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; position: relative; width: 710px; line-height: 36px; color: rgb(51, 51, 51); font-family: &amp;quot;Microsoft YaHei&amp;quot;; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;2. 网络流媒体：能够直接播放网络上的流媒体内容，支持 HTTP、RTSP、MMS 等协议。&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; position: relative; width: 710px; line-height: 36px; color: rgb(51, 51, 51); font-family: &amp;quot;Microsoft YaHei&amp;quot;; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;3. 字幕支持：支持加载外部字幕文件，并提供字幕样式和位置的调整选项。&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; position: relative; width: 710px; line-height: 36px; color: rgb(51, 51, 51); font-family: &amp;quot;Microsoft YaHei&amp;quot;; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;4. 音频和视频同步：自动调整音频和视频同步，确保播放流畅。&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; position: relative; width: 710px; line-height: 36px; color: rgb(51, 51, 51); font-family: &amp;quot;Microsoft YaHei&amp;quot;; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;5. 播放列表管理：支持创建和管理播放列表，方便用户组织和播放多个媒体文件。&lt;/p&gt;&lt;h3 style=&quot;margin: 12px 0px 8px; padding: 0px 4px; font-size: 15px; height: 36px; border-bottom: 1px dashed rgb(23, 162, 231); color: rgb(51, 51, 51); font-family: &amp;quot;Microsoft YaHei&amp;quot;; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;【vlc for android亮点】&lt;/h3&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; position: relative; width: 710px; line-height: 36px; color: rgb(51, 51, 51); font-family: &amp;quot;Microsoft YaHei&amp;quot;; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;1. 开源免费：VLC for Android 是完全开源和免费的，用户无需支付任何费用即可享受其功能。&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; position: relative; width: 710px; line-height: 36px; color: rgb(51, 51, 51); font-family: &amp;quot;Microsoft YaHei&amp;quot;; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;2. 界面简洁：软件界面设计简洁明了，易于上手，提供良好的用户体验。&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; position: relative; width: 710px; line-height: 36px; color: rgb(51, 51, 51); font-family: &amp;quot;Microsoft YaHei&amp;quot;; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;3. 高性能：采用高效的解码引擎，确保在各种设备上都能流畅播放高清视频。&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; position: relative; width: 710px; line-height: 36px; color: rgb(51, 51, 51); font-family: &amp;quot;Microsoft YaHei&amp;quot;; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;4. 多语言支持：支持多种语言界面，满足不同用户的需求。&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; position: relative; width: 710px; line-height: 36px; color: rgb(51, 51, 51); font-family: &amp;quot;Microsoft YaHei&amp;quot;; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;5. 后台播放：支持后台播放功能，用户可以在播放视频的同时进行其他操作。&lt;/p&gt;&lt;h3 style=&quot;margin: 12px 0px 8px; padding: 0px 4px; font-size: 15px; height: 36px; border-bottom: 1px dashed rgb(23, 162, 231); color: rgb(51, 51, 51); font-family: &amp;quot;Microsoft YaHei&amp;quot;; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;【vlc for android用法】&lt;/h3&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; position: relative; width: 710px; line-height: 36px; color: rgb(51, 51, 51); font-family: &amp;quot;Microsoft YaHei&amp;quot;; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;1. 导入媒体文件：通过文件管理器或直接从其他应用导入媒体文件到 VLC 中进行播放。&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; position: relative; width: 710px; line-height: 36px; color: rgb(51, 51, 51); font-family: &amp;quot;Microsoft YaHei&amp;quot;; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;2. 创建播放列表：将多个媒体文件添加到播放列表中，按顺序或随机播放。&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; position: relative; width: 710px; line-height: 36px; color: rgb(51, 51, 51); font-family: &amp;quot;Microsoft YaHei&amp;quot;; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;3. 调整播放设置：根据需要调整亮度、音量、播放速度等设置，以获得最佳观看体验。&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; position: relative; width: 710px; line-height: 36px; color: rgb(51, 51, 51); font-family: &amp;quot;Microsoft YaHei&amp;quot;; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;4. 使用字幕：加载外部字幕文件，并调整字幕样式、位置和大小，以适应不同的观看需求。&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; position: relative; width: 710px; line-height: 36px; color: rgb(51, 51, 51); font-family: &amp;quot;Microsoft YaHei&amp;quot;; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;5. 分享媒体内容：通过社交媒体或其他应用分享正在播放的媒体内容给朋友或家人。&lt;/p&gt;&lt;h3 style=&quot;margin: 12px 0px 8px; padding: 0px 4px; font-size: 15px; height: 36px; border-bottom: 1px dashed rgb(23, 162, 231); color: rgb(51, 51, 51); font-family: &amp;quot;Microsoft YaHei&amp;quot;; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;【vlc for android点评】&lt;/h3&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 8px; padding: 0px; position: relative; width: 710px; line-height: 36px; color: rgb(51, 51, 51); font-family: &amp;quot;Microsoft YaHei&amp;quot;; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;VLC for Android 凭借其强大的功能、广泛的格式支持和简洁的界面设计，成为了 Android 设备上备受推崇的多媒体播放器之一。无论是本地文件播放还是网络流媒体播放，该软件都能提供流畅、高质量的播放体验。此外，其开源免费的特点也使得更多用户能够享受到这款优秀的多媒体播放器带来的便利。&lt;/p&gt;</description><pubDate>Wed, 14 Oct 2026 10:20:18 +0800</pubDate></item><item><title>VLC 3.0.24：FFmpeg 大跳级</title><link>https://www.videolan.com.cn/post/65.html</link><description>&lt;section style=&quot;text-align: center; color: rgba(0, 0, 0, 0.9); margin-bottom: 24px; line-height: 2;&quot; data-layout-id=&quot;0&quot; nodeleaf=&quot;&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img data-src=&quot;https://www.videolan.com.cn/zb_users/upload/2026/10/20261021091936_79959.jpeg&quot; alt=&quot;VLC 3.0.24 Upgrades to FFmpeg 8.1.2, Adds Flatpak Support&quot; data-ratio=&quot;0.562962962962963&quot; data-w=&quot;1080&quot; style=&quot;display: block; max-width: 100%; margin: 16px auto; height: auto !important; visibility: visible !important; width: 676.984px !important;&quot; data-original-style=&quot;display: block; max-width: 100%; height: auto; margin: 16px auto&quot; data-index=&quot;0&quot; src=&quot;https://www.videolan.com.cn/zb_users/upload/2026/10/20261021091936_79959.jpeg&quot; _width=&quot;677px&quot; __sec_open_place_holder__=&quot;true&quot; data-sec-load-status=&quot;2&quot; data-report-img-idx=&quot;0&quot;/&gt;&lt;/p&gt;&lt;/section&gt;&lt;h1 data-layout-id=&quot;1&quot; style=&quot;font-weight: 400; color: rgb(234, 120, 0); margin-bottom: 12px; line-height: 2; text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;&lt;span class=&quot;&quot; link-id=&quot;link-1792545540068-0.8876462675811342&quot;&gt;FFmpeg&lt;/span&gt; 直接跳级，解码更稳了 🎬&lt;/span&gt;&lt;/h1&gt;&lt;p&gt;&lt;section data-layout-id=&quot;2&quot; style=&quot;color: rgba(0, 0, 0, 0.9); margin-bottom: 24px; line-height: 2;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;VLC 3.0.24 “Vetinari” 来了。最炸裂的变化，是从 FFmpeg 4.4 直接换到 8.1.2。开发团队说，新多媒体栈能提升解码性能，还能解决不少格式的播放问题。第三方库也顺手更新，Qt 6 兼容继续优化。&lt;/span&gt;&lt;/section&gt;&lt;/p&gt;&lt;h1 data-layout-id=&quot;3&quot; style=&quot;font-weight: 400; color: rgb(234, 120, 0); margin-bottom: 12px; line-height: 2; text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;Linux 用户：Flatpak 支持安排上 🐧&lt;/span&gt;&lt;/h1&gt;&lt;p&gt;&lt;section data-layout-id=&quot;4&quot; style=&quot;color: rgba(0, 0, 0, 0.9); margin-bottom: 24px; line-height: 2;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;Linux 这边有个好消息：VLC 现在直接包含 Flatpak 构建支持。编解码也扩了，新增 &lt;span class=&quot;&quot; link-id=&quot;link-1792545540065-0.21906952329603924&quot;&gt;ATRAC3&lt;/span&gt;、ATRAC9 音频解码；MP4 文件支持 CEA-708 隐藏字幕。字幕处理也有改进，语言检测更准，WebVTT 更稳。&lt;/span&gt;&lt;/section&gt;&lt;/p&gt;&lt;h1 data-layout-id=&quot;5&quot; style=&quot;font-weight: 400; color: rgb(234, 120, 0); margin-bottom: 12px; line-height: 2; text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;这些崩溃和卡死，终于修了 🛠️&lt;/span&gt;&lt;/h1&gt;&lt;p&gt;&lt;section data-layout-id=&quot;6&quot; style=&quot;color: rgba(0, 0, 0, 0.9); margin-bottom: 24px; line-height: 2;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;这次修了大量 demuxer 问题，包括 MKV、MP4、&lt;span class=&quot;&quot; link-id=&quot;link-1792545540066-0.2970786743432896&quot;&gt;MPEG-TS&lt;/span&gt;、Ogg、AVI 等格式的崩溃、内存泄漏、卡死和畸形文件处理。流媒体方面，RIST 输入输出改用 librist，支持 Simple 和 Main 配置；&lt;span class=&quot;&quot; link-id=&quot;link-1792545540067-0.11872817456027285&quot;&gt;SRT&lt;/span&gt; 增加 listener 模式。SFTP 也改进了，支持公钥认证和 ED25519 主机密钥。&lt;/span&gt;&lt;/section&gt;&lt;/p&gt;&lt;h1 data-layout-id=&quot;7&quot; style=&quot;font-weight: 400; color: rgb(234, 120, 0); margin-bottom: 12px; line-height: 2; text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;Windows、macOS 各有修复 💻&lt;/span&gt;&lt;/h1&gt;&lt;p&gt;&lt;section data-layout-id=&quot;8&quot; style=&quot;color: rgba(0, 0, 0, 0.9); margin-bottom: 24px; line-height: 2;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;Windows 上，修复 Direct3D11 adjust 滤镜和纹理泄漏，还加入 NV12 DirectShow 采集支持。多个音频崩溃、泄漏、死锁也被解决。另一个改动修复了夏令时切换时 VLC 启动慢的问题。还新增摩尔线程 GPU 的 Super Resolution 缩放支持。macOS 用户则拿到 AudioToolbox MIDI 合成器崩溃修复，影响 macOS 26 及更新版本。&lt;/span&gt;&lt;/section&gt;&lt;/p&gt;&lt;h1 data-layout-id=&quot;9&quot; style=&quot;font-weight: 400; color: rgb(234, 120, 0); margin-bottom: 12px; line-height: 2; text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;旧组件退场，安全补丁不少 🔒&lt;/span&gt;&lt;/h1&gt;&lt;p&gt;&lt;section data-layout-id=&quot;10&quot; style=&quot;color: rgba(0, 0, 0, 0.9); margin-bottom: 24px; line-height: 2;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;VLC 3.0.24 还改进了几个 Qt 对话框，修复效果窗口几何信息保存方式，并解决 &lt;span class=&quot;&quot; link-id=&quot;link-1792545540067-0.5799990882640699&quot;&gt;LibVLC&lt;/span&gt; 媒体列表播放器的竞态条件。一些过时或损坏组件被移除：RealRTSP 插件在所有构建配置中禁用，旧 NPAPI 浏览器插件和损坏的 YouTube Lua 脚本删除。注意，向初代 Chromecast 设备串流 HEVC 也被禁用。最后，这版包含许多安全修复，涉及越界访问、整数溢出、双重释放和释放后使用等问题。&lt;/span&gt;&lt;/section&gt;&lt;/p&gt;</description><pubDate>Wed, 14 Oct 2026 09:19:06 +0800</pubDate></item><item><title>万能视频播放器VLC  ，再也不用担心视频格式不对了</title><link>https://www.videolan.com.cn/post/64.html</link><description>&lt;section style=&quot;white-space: normal; background: rgb(240, 244, 248); border-radius: 12px; padding: 20px; margin-bottom: 24px;&quot;&gt;&lt;p style=&quot;margin: 0px; line-height: 1.95; color: rgb(38, 48, 58); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;你有没有过这种时候，下载一个视频死活打不开，提示缺少解码器，或者弹窗让你付费装 &lt;span class=&quot;&quot; link-id=&quot;link-1792545497406-0.5021893457975247&quot;&gt;codec&lt;/span&gt; 包。&lt;/span&gt;&lt;/p&gt;&lt;section style=&quot;text-align: center;&quot; nodeleaf=&quot;&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img data-aistatus=&quot;1&quot; data-imgfileid=&quot;100002727&quot; data-s=&quot;300,640&quot; data-src=&quot;https://www.videolan.com.cn/zb_users/upload/2026/10/20261021091850_53436.png&quot; data-type=&quot;png&quot; type=&quot;block&quot; data-original-style=&quot;null&quot; data-index=&quot;0&quot; data-ratio=&quot;0.5689814814814815&quot; data-w=&quot;2160&quot; src=&quot;https://www.videolan.com.cn/zb_users/upload/2026/10/20261021091850_53436.png&quot; _width=&quot;677px&quot; __sec_open_place_holder__=&quot;true&quot; data-sec-load-status=&quot;2&quot; style=&quot;height: auto !important; visibility: visible !important; width: 636.984px !important;&quot; data-report-img-idx=&quot;0&quot; alt=&quot;图片&quot;/&gt;&lt;/p&gt;&lt;/section&gt;&lt;p style=&quot;margin: 0px; line-height: 1.95; color: rgb(38, 48, 58); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;系统自带的播放器挑格式，某主流播放器捆绑广告和工具栏，还有的一打开就推流。其实有个开源播放器，完全免费、零广告、不打探隐私，几乎什么格式丢进去都能放，电脑手机全通用。它就是 &lt;span class=&quot;&quot; link-id=&quot;link-1792545497404-0.00937552177117773&quot;&gt;VLC&lt;/span&gt;。&lt;/span&gt;&lt;/p&gt;&lt;/section&gt;&lt;p&gt;&lt;section style=&quot;white-space: normal; background: rgb(255, 255, 255); border: 1px solid rgb(230, 234, 240); border-radius: 10px; padding: 18px 20px; margin-bottom: 14px;&quot;&gt;&lt;h2 style=&quot;margin: 0px 0px 12px; line-height: 1.6; color: rgb(15, 27, 45); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;一、VLC 是什么&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;margin: 0px; line-height: 1.9; color: rgb(38, 48, 58); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;VLC 是 VideoLAN 社区维护的开源媒体播放器，采用 GPL-2.0 协议，100% 免费、无广告、无后台上传。它内置了几乎所有音视频编解码器，不需要你额外装任何解码包，MKV、MP4、AVI、FLV、MOV、&lt;span class=&quot;&quot; link-id=&quot;link-1792545497405-0.9508614373937577&quot;&gt;M2TS&lt;/span&gt;，甚至不完整或损坏的文件都能硬撑着播。&lt;/span&gt;&lt;/p&gt;&lt;section style=&quot;text-align: center;&quot; nodeleaf=&quot;&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img data-aistatus=&quot;1&quot; data-imgfileid=&quot;100002730&quot; data-s=&quot;300,640&quot; data-src=&quot;https://www.videolan.com.cn/zb_users/upload/2026/10/20261021091851_96325.png&quot; data-type=&quot;png&quot; type=&quot;block&quot; data-original-style=&quot;null&quot; data-index=&quot;1&quot; data-ratio=&quot;0.4148397976391231&quot; data-w=&quot;1779&quot; src=&quot;https://www.videolan.com.cn/zb_users/upload/2026/10/20261021091851_96325.png&quot; _width=&quot;677px&quot; __sec_open_place_holder__=&quot;true&quot; style=&quot;height: auto !important; visibility: visible !important; width: 634.984px !important;&quot; alt=&quot;图片&quot; data-before-load-time=&quot;1792545498256&quot; data-report-img-idx=&quot;1&quot; data-fail=&quot;0&quot;/&gt;&lt;/p&gt;&lt;/section&gt;&lt;p style=&quot;margin: 0px; line-height: 1.9; color: rgb(38, 48, 58); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;官网&lt;span textstyle=&quot;&quot; style=&quot;color: #0080ff;font-weight: bold;&quot;&gt; videolan.org&lt;/span&gt;，代码托管在 GitHub 的 videolan/vlc，Windows、macOS、Linux、安卓、iOS 全平台通用，一个软件覆盖你所有看片设备。&lt;/span&gt;&lt;/p&gt;&lt;/section&gt;&lt;section style=&quot;white-space: normal; background: rgb(255, 255, 255); border: 1px solid rgb(230, 234, 240); border-radius: 10px; padding: 18px 20px; margin-bottom: 14px;&quot;&gt;&lt;h2 style=&quot;margin: 0px 0px 12px; line-height: 1.6; color: rgb(15, 27, 45); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;二、为什么不用别的&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;margin: 0px 0px 10px; line-height: 1.9; color: rgb(38, 48, 58); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;对比系统自带播放器。Windows 的默认播放器挑格式，HEVC、MKV 经常打不开，还得另装解码器，折腾半天。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0px 0px 10px; line-height: 1.9; color: rgb(38, 48, 58); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;对比某主流第三方播放器。功能强但捆绑广告、工具栏和推荐位，启动时弹窗，体验被稀释。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0px; line-height: 1.9; color: rgb(38, 48, 58); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;对比在线解析网站。看个片要先上传或填链接，速度慢还隐私泄露，大文件根本传不动。&lt;/span&gt;&lt;/p&gt;&lt;/section&gt;&lt;section style=&quot;white-space: normal; background: rgb(255, 255, 255); border: 1px solid rgb(230, 234, 240); border-radius: 10px; padding: 18px 20px; margin-bottom: 14px;&quot;&gt;&lt;h2 style=&quot;margin: 0px 0px 12px; line-height: 1.6; color: rgb(15, 27, 45); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;三、核心功能&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;margin: 0px 0px 8px; line-height: 1.9; color: rgb(38, 48, 58); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;1. 全格式通吃。内置解码器，什么格式拖进去都能播，不用再找 codec。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0px 0px 8px; line-height: 1.9; color: rgb(38, 48, 58); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;2. 零广告零打扰。开源社区维护，没有弹窗、没有推荐位、不收集你的观看记录。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0px 0px 8px; line-height: 1.9; color: rgb(38, 48, 58); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;3. 网络串流。粘贴一个网络地址或 &lt;span class=&quot;&quot; link-id=&quot;link-1792545497550-0.5909231836510227&quot;&gt;IPTV&lt;/span&gt; 链接就能直接播，不用先下载。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0px 0px 8px; line-height: 1.9; color: rgb(38, 48, 58); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;4. 转码与录屏。能边播边转格式，也能把正在看的内容录成文件，应急够用。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0px; line-height: 1.9; color: rgb(38, 48, 58); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;5. 字幕自动匹配。加载本地字幕，也能联网搜同名字幕，外语片看着不费劲。&lt;/span&gt;&lt;/p&gt;&lt;/section&gt;&lt;section style=&quot;white-space: normal; background: rgb(255, 255, 255); border: 1px solid rgb(230, 234, 240); border-radius: 10px; padding: 18px 20px; margin-bottom: 14px;&quot;&gt;&lt;h2 style=&quot;margin: 0px 0px 12px; line-height: 1.6; color: rgb(15, 27, 45); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;四、安装教程&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;margin: 0px 0px 8px; line-height: 1.9; color: rgb(38, 48, 58); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;第一步，打开官网 &lt;span textstyle=&quot;&quot; style=&quot;color: #0080ff;font-weight: bold;&quot;&gt;videolan.org&lt;/span&gt;，首页就有下载按钮，按你的系统选 Windows、macOS 或 Linux 版本。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0px 0px 8px; line-height: 1.9; color: rgb(38, 48, 58); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;第二步，下载完成后双击安装包，一路下一步即可，无需注册、无需账号。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0px; line-height: 1.9; color: rgb(38, 48, 58); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;第三步，安卓和 iOS 在各自应用商店搜 VLC 即可安装，电脑和手机用同一个软件，习惯一致。&lt;/span&gt;&lt;/p&gt;&lt;/section&gt;&lt;section style=&quot;white-space: normal; background: rgb(255, 255, 255); border: 1px solid rgb(230, 234, 240); border-radius: 10px; padding: 18px 20px; margin-bottom: 14px;&quot;&gt;&lt;h2 style=&quot;margin: 0px 0px 12px; line-height: 1.6; color: rgb(15, 27, 45); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;五、使用教程&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;margin: 0px 0px 8px; line-height: 1.9; color: rgb(38, 48, 58); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;第一步，打开 VLC，把视频文件直接拖进窗口，或点媒体、打开文件选择。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0px 0px 8px; line-height: 1.9; color: rgb(38, 48, 58); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;第二步，想看网络视频，点媒体、打开网络串流，粘贴地址回车即可。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0px 0px 8px; line-height: 1.9; color: rgb(38, 48, 58); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;第三步，外语片点字幕、下载字幕，搜到后自动加载。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0px; line-height: 1.9; color: rgb(38, 48, 58); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;第四步，需要转格式时点媒体、转换，选目标格式保存，简单的格式处理不用再开别的软件。&lt;/span&gt;&lt;/p&gt;&lt;/section&gt;&lt;section style=&quot;white-space: normal; background: rgb(255, 255, 255); border: 1px solid rgb(230, 234, 240); border-radius: 10px; padding: 18px 20px; margin-bottom: 14px;&quot;&gt;&lt;h2 style=&quot;margin: 0px 0px 12px; line-height: 1.6; color: rgb(15, 27, 45); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;六、优缺点与适合人群&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;margin: 0px 0px 8px; line-height: 1.9; color: rgb(38, 48, 58); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;1. 优点：完全免费开源，无广告无后台，隐私干净。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0px 0px 8px; line-height: 1.9; color: rgb(38, 48, 58); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;2. 优点：格式覆盖极广，损坏文件也能试着播，救急神器。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0px 0px 8px; line-height: 1.9; color: rgb(38, 48, 58); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;3. 优点：全平台通用，电脑手机一个软件搞定。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0px 0px 8px; line-height: 1.9; color: rgb(38, 48, 58); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;4. 缺点：界面朴素，没有花哨的皮肤和在线资源库。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0px; line-height: 1.9; color: rgb(38, 48, 58); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;5. 缺点：不是专业剪辑软件，复杂剪辑得另请高明。适合人群：受够了播放器广告和解码器收费的人，什么格式都看的人，想要一个干净看片工具的人。&lt;/span&gt;&lt;/p&gt;&lt;/section&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Wed, 14 Oct 2026 09:17:51 +0800</pubDate></item><item><title>VLC发布史上最大规模安全更新，修复超130个漏洞</title><link>https://www.videolan.com.cn/post/66.html</link><description>&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;&lt;img data-src=&quot;https://www.videolan.com.cn/zb_users/upload/2026/10/20261021092018_29015.jpeg&quot; class=&quot;&quot; data-ratio=&quot;0.5253333333333333&quot; data-type=&quot;image&quot; data-w=&quot;750&quot; height=&quot;394&quot; sizes=&quot;auto, (max-width: 750px) 100vw, 750px&quot; width=&quot;750&quot; data-original-style=&quot;null&quot; data-index=&quot;0&quot; src=&quot;https://www.videolan.com.cn/zb_users/upload/2026/10/20261021092018_29015.jpeg&quot; _width=&quot;677px&quot; __sec_open_place_holder__=&quot;true&quot; data-sec-load-status=&quot;2&quot; style=&quot;height: auto !important; visibility: visible !important; width: 677px !important; float: none;&quot; data-report-img-idx=&quot;1&quot; alt=&quot;图片&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;/h2&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;VLC媒体播放器迎来了里程碑式的安全版本——3.0.24。这一版本被官方称为”史上最重要的安全更新”，为播放器及其内置组件库修复了超过130项安全隐患。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;VideoLAN组织主席Jean-Baptiste Kempf透露，此次补丁中修复的多数安全漏洞”在实际操作中难以被利用”，但他同时强调，并非所有问题都可以掉以轻心。他呼吁广大用户尽快完成升级操作。&lt;/span&gt;&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;功能改进亮点&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;section nodeleaf=&quot;&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img data-src=&quot;https://www.videolan.com.cn/zb_users/upload/2026/10/20261021092018_99633.jpeg&quot; class=&quot;&quot; data-ratio=&quot;0.5253333333333333&quot; data-type=&quot;image&quot; data-w=&quot;750&quot; height=&quot;394&quot; sizes=&quot;auto, (max-width: 750px) 100vw, 750px&quot; width=&quot;750&quot; data-original-style=&quot;null&quot; data-index=&quot;1&quot; src=&quot;https://www.videolan.com.cn/zb_users/upload/2026/10/20261021092018_99633.jpeg&quot; _width=&quot;677px&quot; __sec_open_place_holder__=&quot;true&quot; data-sec-load-status=&quot;2&quot; style=&quot;height: auto !important; visibility: visible !important; width: 677px !important;&quot; data-report-img-idx=&quot;0&quot; alt=&quot;图片&quot;/&gt;&lt;/p&gt;&lt;/section&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;虽然本次更新未在用户界面上引入重大新功能，但在兼容性方面仍有值得关注的提升：&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;新增&lt;span class=&quot;&quot; link-id=&quot;link-1792545597206-0.6008109671528227&quot;&gt;ATRAC3&lt;/span&gt;与ATRAC9音频解码支持，前者广泛应用于索尼MiniDisc设备，后者常见于PSP时代的音频文件&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;支持在MP4文件中读取CEA-708格式的字幕数据&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;关注微信号：&lt;/span&gt;&lt;strong&gt;智享开源&lt;/strong&gt;&lt;span leaf=&quot;&quot;&gt; ，及时了解更新信息。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Thu, 01 Oct 2026 09:20:03 +0800</pubDate></item><item><title>VLC 3.0.24「Vetinari」正式发布</title><link>https://www.videolan.com.cn/post/67.html</link><description>&lt;h1 data-heading=&quot;true&quot; style=&quot;display: table; padding: 0px 1em; border-bottom: 2px solid rgb(0, 152, 116); margin-right: auto; margin-bottom: 1em; margin-left: auto; color: rgb(63, 63, 63); text-align: left; margin-top: 0px !important;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;&lt;span class=&quot;&quot; link-id=&quot;link-1792545741840-0.5727740033918105&quot;&gt;VLC&lt;/span&gt; 媒体播放器 3.0.24「Vetinari」正式发布&lt;/span&gt;&lt;/h1&gt;&lt;p style=&quot;text-align: left; margin: 1.5em 8px; letter-spacing: 0.1em; color: rgb(63, 63, 63);&quot;&gt;&lt;span leaf=&quot;&quot;&gt;三天前3.0.24 RC1&lt;/span&gt;&lt;sup&gt;&lt;span leaf=&quot;&quot;&gt;[1]&lt;/span&gt;&lt;/sup&gt;&lt;span leaf=&quot;&quot;&gt;候选版本发布后今天正式发布本次是 VLC 3.0 分支的第 25 次版本更新，版本代号 &lt;/span&gt;&lt;strong style=&quot;color: rgb(0, 152, 116); font-weight: bold;&quot;&gt;「Vetinari」&lt;/strong&gt;&lt;span leaf=&quot;&quot;&gt;，命名致敬《碟形世界》中的城邦执政官。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; margin: 1.5em 8px; letter-spacing: 0.1em; color: rgb(63, 63, 63);&quot;&gt;&lt;span leaf=&quot;&quot;&gt;3.0.24&lt;/span&gt;&lt;sup&gt;&lt;span leaf=&quot;&quot;&gt;[2]&lt;/span&gt;&lt;/sup&gt;&lt;span leaf=&quot;&quot;&gt; 版本将核心 FFmpeg 库从 4.4 大幅升级至 8.1.2，预计将全面提升解码性能，并修复多种媒体格式下的各类播放异常问题。&lt;/span&gt;&lt;/p&gt;&lt;h2 data-heading=&quot;true&quot; style=&quot;display: table; padding: 0px 0.2em; margin: 4em auto 2em; color: rgb(255, 255, 255); background: rgb(0, 152, 116); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;本次更新核心内容&lt;/span&gt;&lt;/h2&gt;&lt;ul style=&quot;list-style-type: circle;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• 升级 49 个第三方依赖库&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• 新增 &lt;span class=&quot;&quot; link-id=&quot;link-1792545741841-0.1920477284035692&quot;&gt;Atrac3&lt;/span&gt; / Atrac9 音频解码支持&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• MP4 容器新增 CEA-708 隐藏式字幕支持&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• 新增 SRT &lt;/span&gt;&lt;strong style=&quot;color: rgb(0, 152, 116); font-weight: bold;&quot;&gt;listener&lt;/strong&gt;&lt;span leaf=&quot;&quot;&gt;模式&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• 新增 &lt;span class=&quot;&quot; link-id=&quot;link-1792545741841-0.5920206313128185&quot;&gt;SFTP&lt;/span&gt; 公钥认证选项，以及 ED25519 主机密钥支持&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• 优化 Qt6 框架兼容性&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• 提升字幕语言检测准确率，优化 WebVTT 字幕处理逻辑&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• 优化 Qt 对话框交互体验，修复特效窗口几何尺寸保存异常&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• &lt;span class=&quot;&quot; link-id=&quot;link-1792545741957-0.2818143503983941&quot;&gt;RIST&lt;/span&gt; 输入 / 输出切换为 librist 实现，支持 &lt;/span&gt;&lt;strong style=&quot;color: rgb(0, 152, 116); font-weight: bold;&quot;&gt;main&lt;/strong&gt;&lt;span leaf=&quot;&quot;&gt; 与 &lt;/span&gt;&lt;strong style=&quot;color: rgb(0, 152, 116); font-weight: bold;&quot;&gt;simple&lt;/strong&gt;&lt;span leaf=&quot;&quot;&gt; 配置集&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• 修复 MKV、MP4、MPEG-TS、Ogg、AVI 等多种&lt;span class=&quot;&quot; link-id=&quot;link-1792545741957-0.42548344463695154&quot;&gt;解封装器&lt;/span&gt;中大量崩溃、内存泄漏、卡死及损坏文件兼容问题&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• 修复 LibVLC 媒体列表播放器的竞态条件问题&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• 新增对摩尔线程（Moore Threads）GPU 超分辨率缩放的支持&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• Windows 平台新增 NV12 格式 DirectShow 采集支持&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• 修复 Direct3D11 调整滤镜相关问题与纹理内存泄漏&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• 修复 Windows 平台音频模块的崩溃、内存泄漏与死锁问题&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• 修复夏令时切换时 Windows 版本启动缓慢的问题&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• 修复 macOS 26 及以上系统中 AudioToolbox MIDI 合成器崩溃问题&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• 新增 Flatpak 打包格式支持&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 data-heading=&quot;true&quot; style=&quot;display: table; padding: 0px 0.2em; margin: 4em auto 2em; color: rgb(255, 255, 255); background: rgb(0, 152, 116); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;功能移除与调整&lt;/span&gt;&lt;/h2&gt;&lt;ul style=&quot;list-style-type: circle;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• 所有编译配置中均禁用 RealRTSP 插件&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• 移除 NPAPI 浏览器插件&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• 移除存在功能故障的 YouTube Lua 脚本插件&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• 更新程序校验密钥升级为全新 RSA-4096 密钥&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 data-heading=&quot;true&quot; style=&quot;display: table; padding: 0px 0.2em; margin: 4em auto 2em; color: rgb(255, 255, 255); background: rgb(0, 152, 116); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;安全修复&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;text-align: left; margin: 1.5em 8px; letter-spacing: 0.1em; color: rgb(63, 63, 63);&quot;&gt;&lt;span leaf=&quot;&quot;&gt;3.0.24 版本在 VLC 本体及其捆绑依赖库中，累计修复了超过 130 项安全问题，涵盖越界访问、整数溢出、重复释放、释放后使用等各类底层漏洞。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; margin: 1.5em 8px; letter-spacing: 0.1em; color: rgb(63, 63, 63);&quot;&gt;&lt;span leaf=&quot;&quot;&gt;更多安全细节可访问官方安全公告页：&lt;/span&gt;&lt;br/&gt;&lt;span leaf=&quot;&quot;&gt;https://www.videolan.org/security/&lt;/span&gt;&lt;sup&gt;&lt;span leaf=&quot;&quot;&gt;[3]&lt;/span&gt;&lt;/sup&gt;&lt;/p&gt;&lt;blockquote style=&quot;padding: 1em; border-left: 4px solid rgb(0, 152, 116); border-radius: 6px; color: rgb(63, 63, 63); background: rgb(247, 247, 247); margin: 0px 0px 1em; text-align: left;&quot;&gt;&lt;p style=&quot;text-align: left; letter-spacing: 0.1em; margin: 0px;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;安全公告将在版本发布后数日内完成更新。&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;h1 data-heading=&quot;true&quot; style=&quot;display: table; padding: 0px 1em; border-bottom: 2px solid rgb(0, 152, 116); margin: 2em auto 1em; color: rgb(63, 63, 63); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;第三方依赖库更新（Contrib）&lt;/span&gt;&lt;/h1&gt;&lt;ul style=&quot;list-style-type: circle;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• libarchive 归档处理库升级至 3.8.8&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• libass 字幕渲染库升级至 0.17.5&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• aom（AV1 编解码库）升级至 3.15.0&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• amf 高级媒体框架升级至 1.5.2&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• asdcp 库升级至 2_13_2&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• Chromaprint 音频指纹库升级至 1.6.0&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• dav1d（AV1 解码库）升级至 1.5.4&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• FAAD2 AAC 解码库升级至 2.11.2&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• FLAC 无损音频编解码库升级至 1.4.2&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• FFmpeg 多媒体处理核心库升级至 8.1.2&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• FreeType 字体渲染库升级至 2.14.3&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• libgcrypt 加密算法库升级至 1.12.2&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• GLEW OpenGL 扩展库升级至 2.3.1&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• Game_Music_Emu 游戏音乐解码库升级至 0.6.5&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• GnuTLS 传输层安全库升级至 3.8.13&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• libgpg-error 通用错误处理库升级至 1.61&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• HarfBuzz 文本塑形库升级至 14.2.1&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• JPEG 图像编解码库升级至 v9f&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• libbluray 蓝光媒体解析库升级至 1.4.1&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• libebml EBML 基础格式库升级至 1.4.6&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• libmad MP3 解码库升级至 0.16.14&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• libmicrodns 轻量级 DNS 库升级至 0.2.0&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• libtasn1 ASN.1 结构解析库升级至 4.21.0&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• libxml2 XML 解析库升级至 2.15.3&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• libmatroska Matroska 容器处理库升级至 1.7.2&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• mpg123 MP3 播放处理库升级至 1.33.6&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• mysofa 空间音频处理库升级至 1.2.1&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• Nettle 轻量加密库升级至 3.10.2&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• NFS 网络文件系统协议库升级至 6.0.2&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• OpenJPEG JPEG2000 编解码库升级至 2.5.4&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• libpng PNG 图像库升级至 1.6.58&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• Protocol Buffers 序列化协议库升级至 3.4.1&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• Opus 音频编解码库升级至 1.6.1&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• libshout 流媒体广播库升级至 2.4.6&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• SDL 跨平台多媒体开发库升级至 3.4.10&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• SDL_image 图像加载扩展库升级至 3.4.4&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• libsmb2 SMB 网络共享协议库升级至 6.1&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• SRT 可靠流媒体传输协议库升级至 1.5.6&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• libssh2 SSH 安全传输协议库升级至 1.11.1&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• libupnp 通用即插即用协议库升级至 1.14.20&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• VNC 远程桌面客户端库升级至 0.9.15&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• Vorbis 有损音频编解码库升级至 1.3.7&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• x265 HEVC 视频编码库升级至 4.1&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• zlib 通用压缩库升级至 1.3.2&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• ZVBI 消隐期数据处理库升级至 0.2.45&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• 新增 librist（RIST 流媒体协议库）0.2.20&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;• mfx 媒体 SDK 切换为英特尔 vpl 2.13.0 版本&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 data-heading=&quot;true&quot; style=&quot;display: table; padding: 0px 0.2em; margin: 4em auto 2em; color: rgb(255, 255, 255); background: rgb(0, 152, 116); text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;致谢&lt;/span&gt;&lt;/h2&gt;&lt;p style=&quot;text-align: left; margin: 1.5em 8px; letter-spacing: 0.1em; color: rgb(63, 63, 63);&quot;&gt;&lt;span leaf=&quot;&quot;&gt;感谢所有安全研究人员、OSS-Fuzz 项目，以及所有协助发现、上报并修复这些问题的贡献者。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Tue, 22 Sep 2026 09:22:30 +0800</pubDate></item><item><title>VLC 3.0.24</title><link>https://www.videolan.com.cn/post/63.html</link><description>&lt;div style=&quot;box-sizing: border-box; padding: 0px; margin: 0px; line-height: inherit; white-space: normal; background-color: rgb(255, 255, 255); text-align: left;&quot;&gt;&lt;p&gt;VLC 3.0.24 是一次重要的安全更新，修复了 VLC 及其捆绑库中超过 130 项安全漏洞。此次更新将 FFmpeg 从 4.4 升级到 8.1.2，并更新了 49 个第三方库。新增功能包括 ATRAC 解码、MP4 格式的 CEA-708 字幕、SRT 字幕播放器模式以及 Windows 系统上的 NV12 DirectShow 捕获。此外，此版本还修复了夏令时切换时 Windows 启动缓慢的问题，以及 macOS 26 及更高版本上 MIDI 播放崩溃的问题。更多详情请访问&lt;a href=&quot;https://www.videolan.org/vlc/releases/3.0.24.html&quot;&gt;发布页面&lt;/a&gt;。&lt;a href=&quot;https://www.videolan.org/security/&quot;&gt;安全公告&lt;/a&gt;将在发布后几天内更新。&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Tue, 22 Sep 2026 09:14:10 +0800</pubDate></item><item><title>VLC 源码拆解：从 play 到屏幕上的那一帧</title><link>https://www.videolan.com.cn/post/68.html</link><description>&lt;h1 data-tool=&quot;mdnice编辑器&quot; style=&quot;margin: 30px 0px 15px; padding: 0px; text-align: left;&quot;&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;VLC 大概是唯一一个不用解释的播放器名字。1996 年从巴黎中央理工的学生项目起步，现在桌面、手机、机顶盒、嵌入式设备上都能见到它——很多商业产品底层用的也是它。&lt;/span&gt;&lt;/section&gt;&lt;/h1&gt;&lt;p data-tool=&quot;mdnice编辑器&quot; style=&quot;line-height: 1.8em; letter-spacing: 0em; text-indent: 0em; margin-top: 0px; margin-bottom: 0px; padding: 8px 0px; text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;它凭什么什么都能播？我把 videolan/vlc 的 master 分支拉下来看了一段时间，这篇把架构、核心代码和数据流转拆开讲。代码引用都标了文件和行号，可以自己对着看。&lt;/span&gt;&lt;/p&gt;&lt;h2 data-tool=&quot;mdnice编辑器&quot; style=&quot;margin: 30px 0px 15px; padding: 0px; text-align: left;&quot;&gt;&lt;span style=&quot;line-height: 1.5em; letter-spacing: 0em; display: block;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;一、播放一个视频到底要经过多少步&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p data-tool=&quot;mdnice编辑器&quot; style=&quot;line-height: 1.8em; letter-spacing: 0em; text-indent: 0em; margin-top: 0px; margin-bottom: 0px; padding: 8px 0px; text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;拿最普通的本地 MP4 说。VLC 要先打开文件，读字节流，解析容器格式，从里面分出视频轨和&lt;span class=&quot;&quot; link-id=&quot;link-1792545831457-0.7148056112807136&quot;&gt;音频轨&lt;/span&gt;，按各自的编码格式解码，视频帧送去渲染、音频采样送去声卡，最后还得让两边对上时间。&lt;/span&gt;&lt;/p&gt;&lt;p data-tool=&quot;mdnice编辑器&quot; style=&quot;line-height: 1.8em; letter-spacing: 0em; text-indent: 0em; margin-top: 0px; margin-bottom: 0px; padding: 8px 0px; text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;单路播放就这些活儿。再加上网络串流、字幕、转码、硬件解码，组合数就上去了。&lt;/span&gt;&lt;/p&gt;&lt;p data-tool=&quot;mdnice编辑器&quot; style=&quot;line-height: 1.8em; letter-spacing: 0em; text-indent: 0em; margin-top: 0px; margin-bottom: 0px; padding: 8px 0px; text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;这里有个常见误解：以为 VLC 是靠写了一大堆 if-else 覆盖各种格式。不是。它是一个很小的核心加一大堆插件，新格式、新协议、新滤镜都做成模块挂上去，核心基本不动。这个思路不新鲜，但 VLC 坚持了二十多年，插件数量到了几百个还能维持住，这就比较难得了。&lt;/span&gt;&lt;/p&gt;&lt;h2 data-tool=&quot;mdnice编辑器&quot; style=&quot;margin: 30px 0px 15px; padding: 0px; text-align: left;&quot;&gt;&lt;span style=&quot;line-height: 1.5em; letter-spacing: 0em; display: block;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;二、四层结构加一张插件网&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h3 data-tool=&quot;mdnice编辑器&quot; style=&quot;margin: 30px 0px 15px; padding: 0px; text-align: left;&quot;&gt;&lt;span style=&quot;line-height: 1.5em; letter-spacing: 0em; display: block;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;2.1 目录就是架构图&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p data-tool=&quot;mdnice编辑器&quot; style=&quot;line-height: 1.8em; letter-spacing: 0em; text-indent: 0em; margin-top: 0px; margin-bottom: 0px; padding: 8px 0px; text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;VLC 的目录划分基本等于它的架构说明：&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;margin-top: 8px; margin-bottom: 8px; padding: 0px 0px 0px 25px;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;section style=&quot;margin-top: 5px; margin-bottom: 5px; color: rgb(1, 1, 1); line-height: 1.8em; letter-spacing: 0em;&quot;&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;lib/&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;：公共 API，也就是 &lt;span class=&quot;&quot; link-id=&quot;link-1792545831458-0.45850210649391276&quot;&gt;libvlc&lt;/span&gt;&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section style=&quot;margin-top: 5px; margin-bottom: 5px; color: rgb(1, 1, 1); line-height: 1.8em; letter-spacing: 0em;&quot;&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;src/&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;：核心引擎，编译产物叫 libvlccore&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section style=&quot;margin-top: 5px; margin-bottom: 5px; color: rgb(1, 1, 1); line-height: 1.8em; letter-spacing: 0em;&quot;&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;modules/&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;：几百个功能模块&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section style=&quot;margin-top: 5px; margin-bottom: 5px; color: rgb(1, 1, 1); line-height: 1.8em; letter-spacing: 0em;&quot;&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;include/&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;：模块之间的接口契约&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;figure data-tool=&quot;mdnice编辑器&quot; style=&quot;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;&quot;&gt;&lt;section style=&quot;text-align: center;&quot; nodeleaf=&quot;&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img data-src=&quot;https://www.videolan.com.cn/zb_users/upload/2026/10/20261021092425_40257.png&quot; data-ratio=&quot;1.4666666666666666&quot; data-s=&quot;300,640&quot; data-type=&quot;png&quot; data-w=&quot;1080&quot; type=&quot;block&quot; data-imgfileid=&quot;100000061&quot; data-aistatus=&quot;1&quot; data-original-style=&quot;null&quot; data-index=&quot;0&quot; src=&quot;https://www.videolan.com.cn/zb_users/upload/2026/10/20261021092425_40257.png&quot; _width=&quot;677px&quot; __sec_open_place_holder__=&quot;true&quot; data-sec-load-status=&quot;2&quot; style=&quot;height: auto !important; visibility: visible !important; width: 656.984px !important;&quot; data-report-img-idx=&quot;0&quot; alt=&quot;图片&quot;/&gt;&lt;/p&gt;&lt;/section&gt;&lt;figcaption style=&quot;color: rgb(136, 136, 136); line-height: 1.5em; letter-spacing: 0em; text-align: center; margin: 5px 0px 0px; padding: 0px;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;VLC 播放器分层架构图（依据 videolan/vlc master 源码）&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;section data-tool=&quot;mdnice编辑器&quot; style=&quot;margin-top: 0px;margin-bottom: 0px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;overflow-x: auto;&quot;&gt;&lt;table&gt;&lt;thead&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;th style=&quot;line-height: 1.5em; letter-spacing: 0em; text-align: left; background: none left top / auto no-repeat scroll padding-box border-box rgb(240, 240, 240); height: auto; border-color: rgba(204, 204, 204, 0.4); border-radius: 0px; min-width: 85px;&quot;&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;层次&lt;/span&gt;&lt;/section&gt;&lt;/th&gt;&lt;th style=&quot;line-height: 1.5em; letter-spacing: 0em; text-align: left; background: none left top / auto no-repeat scroll padding-box border-box rgb(240, 240, 240); height: auto; border-color: rgba(204, 204, 204, 0.4); border-radius: 0px; min-width: 85px;&quot;&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;所在目录&lt;/span&gt;&lt;/section&gt;&lt;/th&gt;&lt;th style=&quot;line-height: 1.5em; letter-spacing: 0em; text-align: left; background: none left top / auto no-repeat scroll padding-box border-box rgb(240, 240, 240); height: auto; border-color: rgba(204, 204, 204, 0.4); border-radius: 0px; min-width: 85px;&quot;&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;职责&lt;/span&gt;&lt;/section&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr style=&quot;background: none left top / auto no-repeat scroll padding-box border-box rgb(255, 255, 255); width: auto; height: auto;&quot;&gt;&lt;td style=&quot;min-width: 85px; border-color: rgba(204, 204, 204, 0.4); border-radius: 0px;&quot;&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;前端与 API 层&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;td style=&quot;min-width: 85px; border-color: rgba(204, 204, 204, 0.4); border-radius: 0px;&quot;&gt;&lt;code&gt;lib/&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;min-width: 85px; border-color: rgba(204, 204, 204, 0.4); border-radius: 0px;&quot;&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;对外 libvlc 接口，GUI 只调它&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;background: none left top / auto no-repeat scroll padding-box border-box rgb(248, 248, 248); width: auto; height: auto;&quot;&gt;&lt;td style=&quot;min-width: 85px; border-color: rgba(204, 204, 204, 0.4); border-radius: 0px;&quot;&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;核心引擎层&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;td style=&quot;min-width: 85px; border-color: rgba(204, 204, 204, 0.4); border-radius: 0px;&quot;&gt;&lt;code&gt;src/&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;min-width: 85px; border-color: rgba(204, 204, 204, 0.4); border-radius: 0px;&quot;&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;播放调度、输入、解码、输出、时钟&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;background: none left top / auto no-repeat scroll padding-box border-box rgb(255, 255, 255); width: auto; height: auto;&quot;&gt;&lt;td style=&quot;min-width: 85px; border-color: rgba(204, 204, 204, 0.4); border-radius: 0px;&quot;&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;模块插件层&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;td style=&quot;min-width: 85px; border-color: rgba(204, 204, 204, 0.4); border-radius: 0px;&quot;&gt;&lt;code&gt;modules/&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;min-width: 85px; border-color: rgba(204, 204, 204, 0.4); border-radius: 0px;&quot;&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;access、demux、codec、filter、输出后端等&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;background: none left top / auto no-repeat scroll padding-box border-box rgb(248, 248, 248); width: auto; height: auto;&quot;&gt;&lt;td style=&quot;min-width: 85px; border-color: rgba(204, 204, 204, 0.4); border-radius: 0px;&quot;&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;操作系统层&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;td style=&quot;min-width: 85px; border-color: rgba(204, 204, 204, 0.4); border-radius: 0px;&quot;&gt;&lt;code&gt;posix/&lt;/code&gt;&lt;section&gt;&lt;code&gt;win32/&lt;/code&gt;&lt;code&gt;darwin/&lt;/code&gt;&lt;/section&gt;&lt;/td&gt;&lt;td style=&quot;min-width: 85px; border-color: rgba(204, 204, 204, 0.4); border-radius: 0px;&quot;&gt;&lt;section&gt;&lt;span leaf=&quot;&quot;&gt;系统接口的抽象封装&lt;/span&gt;&lt;/section&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/section&gt;&lt;/p&gt;&lt;h3 data-tool=&quot;mdnice编辑器&quot; style=&quot;margin: 30px 0px 15px; padding: 0px; text-align: left;&quot;&gt;&lt;span style=&quot;line-height: 1.5em; letter-spacing: 0em; display: block;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;2.2 libvlc：所有 GUI 只碰这一层&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p data-tool=&quot;mdnice编辑器&quot; style=&quot;line-height: 1.8em; letter-spacing: 0em; text-indent: 0em; margin-top: 0px; margin-bottom: 0px; padding: 8px 0px; text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;Qt 桌面版、Android、iOS、Web、命令行，全都只依赖同一个 C 接口。看一下 play 的实现：&lt;/span&gt;&lt;/p&gt;&lt;pre data-tool=&quot;mdnice编辑器&quot; style=&quot;border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px; margin-top: 10px; margin-bottom: 10px; padding: 0px;&quot;&gt;&lt;code style=&quot;overflow-x: auto; padding: 15px 16px 16px; color: rgb(171, 178, 191); background: rgb(40, 44, 52); border-radius: 5px; display: -webkit-box;&quot;&gt;&lt;span style=&quot;color: #5c6370;font-style: italic;line-height: 26px;&quot;&gt;// lib/media_player.c:1044&lt;/span&gt;&lt;span style=&quot;line-height: 26px;&quot;&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;int&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #61aeee;line-height: 26px;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;libvlc_media_player_play&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;line-height: 26px;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;(&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;libvlc_media_player_t&lt;/span&gt;&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp;*p_mi )&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;vlc_player_t&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp;*player = p_mi-&amp;gt;player;&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; vlc_player_Lock(player);&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;int&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp;ret = vlc_player_Start(player);&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;if&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp;(ret == VLC_SUCCESS)&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;if&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp;(vlc_player_IsPaused(player))&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; vlc_player_Resume(player);&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; vlc_player_Unlock(player);&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;return&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp;ret;&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p data-tool=&quot;mdnice编辑器&quot; style=&quot;line-height: 1.8em; letter-spacing: 0em; text-indent: 0em; margin-top: 0px; margin-bottom: 0px; padding: 8px 0px; text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;两个细节。一是 API 层不自己管播放状态，直接转给核心层的 &lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;vlc_player_t&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;；二是全程加锁——播放器内部线程很多，状态访问不加锁迟早出问题。&lt;/span&gt;&lt;/p&gt;&lt;p data-tool=&quot;mdnice编辑器&quot; style=&quot;line-height: 1.8em; letter-spacing: 0em; text-indent: 0em; margin-top: 0px; margin-bottom: 0px; padding: 8px 0px; text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;对 GUI 开发者来说，需要理解的就只有 &lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;libvlc_media_player_*&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt; 这几十个函数，内部跑了多少线程完全不用管。&lt;/span&gt;&lt;/p&gt;&lt;h3 data-tool=&quot;mdnice编辑器&quot; style=&quot;margin: 30px 0px 15px; padding: 0px; text-align: left;&quot;&gt;&lt;span style=&quot;line-height: 1.5em; letter-spacing: 0em; display: block;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;2.3 &lt;/span&gt;&lt;code&gt;src/&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;：核心只管流程&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p data-tool=&quot;mdnice编辑器&quot; style=&quot;line-height: 1.8em; letter-spacing: 0em; text-indent: 0em; margin-top: 0px; margin-bottom: 0px; padding: 8px 0px; text-align: left;&quot;&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;src/&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt; 下面这么分的：&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;margin-top: 8px; margin-bottom: 8px; padding: 0px 0px 0px 25px;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;section style=&quot;margin-top: 5px; margin-bottom: 5px; color: rgb(1, 1, 1); line-height: 1.8em; letter-spacing: 0em;&quot;&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;src/player/&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;：新一代播放状态机 &lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;vlc_player&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;，管媒体项、轨道选择、速度、A/V 同步这些高层语义&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section style=&quot;margin-top: 5px; margin-bottom: 5px; color: rgb(1, 1, 1); line-height: 1.8em; letter-spacing: 0em;&quot;&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;src/input/&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;：输入引擎，创建输入线程，协调 demux、es_out、decoder、stream&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section style=&quot;margin-top: 5px; margin-bottom: 5px; color: rgb(1, 1, 1); line-height: 1.8em; letter-spacing: 0em;&quot;&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;src/video_output/&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;、&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;src/audio_output/&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;：输出核心&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section style=&quot;margin-top: 5px; margin-bottom: 5px; color: rgb(1, 1, 1); line-height: 1.8em; letter-spacing: 0em;&quot;&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;src/clock/&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;：时间权威，管 PCR/DTS/&lt;span class=&quot;&quot; link-id=&quot;link-1792545831666-0.24529212693679536&quot;&gt;PTS&lt;/span&gt;&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section style=&quot;margin-top: 5px; margin-bottom: 5px; color: rgb(1, 1, 1); line-height: 1.8em; letter-spacing: 0em;&quot;&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;src/modules/&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;：模块装载器，按优先级选插件&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section style=&quot;margin-top: 5px; margin-bottom: 5px; color: rgb(1, 1, 1); line-height: 1.8em; letter-spacing: 0em;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;还有 &lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;playlist/&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;、&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;preparser/&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;、&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;stream_output/&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;、&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;interface/&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt; 等&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-tool=&quot;mdnice编辑器&quot; style=&quot;line-height: 1.8em; letter-spacing: 0em; text-indent: 0em; margin-top: 0px; margin-bottom: 0px; padding: 8px 0px; text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;核心层写得很克制：只管流程编排和通用机制，具体能力一律往外推。它根本不知道 MKV 是什么东西——要解某个格式，是模块装载器去 &lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;modules/&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt; 里找对应插件来干。&lt;/span&gt;&lt;/p&gt;&lt;h3 data-tool=&quot;mdnice编辑器&quot; style=&quot;margin: 30px 0px 15px; padding: 0px; text-align: left;&quot;&gt;&lt;span style=&quot;line-height: 1.5em; letter-spacing: 0em; display: block;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;2.4 &lt;/span&gt;&lt;code&gt;modules/&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;：能力全外挂&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p data-tool=&quot;mdnice编辑器&quot; style=&quot;line-height: 1.8em; letter-spacing: 0em; text-indent: 0em; margin-top: 0px; margin-bottom: 0px; padding: 8px 0px; text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;按能力分类，数量很夸张：&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;margin-top: 8px; margin-bottom: 8px; padding: 0px 0px 0px 25px;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;section style=&quot;margin-top: 5px; margin-bottom: 5px; color: rgb(1, 1, 1); line-height: 1.8em; letter-spacing: 0em;&quot;&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;modules/access/&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;：&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;file&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;、&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;http&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;、&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;ftp&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;、&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;srt&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;、&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;dvdnav&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;、&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;dvb&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt; 等&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section style=&quot;margin-top: 5px; margin-bottom: 5px; color: rgb(1, 1, 1); line-height: 1.8em; letter-spacing: 0em;&quot;&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;modules/demux/&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;：&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;mkv&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;、&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;mp4&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;、&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;ts&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;、&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;avi&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;、&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;ogg&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;、&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;asf&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt; 等&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section style=&quot;margin-top: 5px; margin-bottom: 5px; color: rgb(1, 1, 1); line-height: 1.8em; letter-spacing: 0em;&quot;&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;modules/codec/&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;：&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;avcodec&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;（FFmpeg）、&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;dav1d&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;（AV1）、&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;x264&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;/&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;x265&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt; 等&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section style=&quot;margin-top: 5px; margin-bottom: 5px; color: rgb(1, 1, 1); line-height: 1.8em; letter-spacing: 0em;&quot;&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;modules/packetizer/&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;：把散的数据整理成完整帧&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section style=&quot;margin-top: 5px; margin-bottom: 5px; color: rgb(1, 1, 1); line-height: 1.8em; letter-spacing: 0em;&quot;&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;modules/video_output/&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;、&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;modules/audio_output/&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;：各平台显示和声卡后端&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section style=&quot;margin-top: 5px; margin-bottom: 5px; color: rgb(1, 1, 1); line-height: 1.8em; letter-spacing: 0em;&quot;&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;video_filter&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;、&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;audio_filter&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;、&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;mux&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;、&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;stream_out&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;、&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;services_discovery&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt; 等&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-tool=&quot;mdnice编辑器&quot; style=&quot;line-height: 1.8em; letter-spacing: 0em; text-indent: 0em; margin-top: 0px; margin-bottom: 0px; padding: 8px 0px; text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;每个模块就是实现了某个接口的插件，由 &lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;vlc_module_load&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt; 动态加载。几十种封装格式、几百种编解码器，全挂外面。&lt;/span&gt;&lt;/p&gt;&lt;h2 data-tool=&quot;mdnice编辑器&quot; style=&quot;margin: 30px 0px 15px; padding: 0px; text-align: left;&quot;&gt;&lt;span style=&quot;line-height: 1.5em; letter-spacing: 0em; display: block;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;三、播放流水线是怎么搭起来的&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h3 data-tool=&quot;mdnice编辑器&quot; style=&quot;margin: 30px 0px 15px; padding: 0px; text-align: left;&quot;&gt;&lt;span style=&quot;line-height: 1.5em; letter-spacing: 0em; display: block;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;3.1 es_format_t：管道里的通用货币&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p data-tool=&quot;mdnice编辑器&quot; style=&quot;line-height: 1.8em; letter-spacing: 0em; text-indent: 0em; margin-top: 0px; margin-bottom: 0px; padding: 8px 0px; text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;VLC 内部用 &lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;es_format_t&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt; 统一描述一路音视频流。MP4 里的 h264 视频轨、AAC 音频轨，最后都归一化成这个结构：&lt;/span&gt;&lt;/p&gt;&lt;pre data-tool=&quot;mdnice编辑器&quot; style=&quot;border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px; margin-top: 10px; margin-bottom: 10px; padding: 0px;&quot;&gt;&lt;code style=&quot;overflow-x: auto; padding: 15px 16px 16px; color: rgb(171, 178, 191); background: rgb(40, 44, 52); border-radius: 5px; display: -webkit-box;&quot;&gt;&lt;span style=&quot;color: #5c6370;font-style: italic;line-height: 26px;&quot;&gt;// include/vlc_es.h:615（节选）&lt;/span&gt;&lt;span style=&quot;line-height: 26px;&quot;&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;struct&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #e6c07b;line-height: 26px;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;es_format_t&lt;/span&gt;&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;enum&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp;es_format_category_e i_cat; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5c6370;font-style: italic;line-height: 26px;&quot;&gt;/**&amp;lt; ES category */&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;vlc_fourcc_t&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; i_codec; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5c6370;font-style: italic;line-height: 26px;&quot;&gt;/**&amp;lt; FOURCC value as used in vlc */&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;vlc_fourcc_t&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; i_original_fourcc; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5c6370;font-style: italic;line-height: 26px;&quot;&gt;/**&amp;lt; original FOURCC from the container */&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;int&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;i_id; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5c6370;font-style: italic;line-height: 26px;&quot;&gt;/* es identifier */&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;int&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;i_group; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5c6370;font-style: italic;line-height: 26px;&quot;&gt;/* program group */&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;int&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;i_priority;&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;char&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *psz_language; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5c6370;font-style: italic;line-height: 26px;&quot;&gt;/* human-readable language name */&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;union&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp;{&lt;/span&gt;&lt;span style=&quot;line-height: 26px;&quot;&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;struct&lt;/span&gt;&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp;{&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;audio_format_t&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;audio; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5c6370;font-style: italic;line-height: 26px;&quot;&gt;/* description of audio format */&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;audio_replay_gain_t&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; audio_replay_gain;&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; };&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;video_format_t&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp;video; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5c6370;font-style: italic;line-height: 26px;&quot;&gt;/* description of video format */&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;subs_format_t&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; subs; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5c6370;font-style: italic;line-height: 26px;&quot;&gt;/* description of subtitle format */&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; };&lt;/span&gt;&lt;span style=&quot;color: #5c6370;font-style: italic;line-height: 26px;&quot;&gt;/* ... */&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;};&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p data-tool=&quot;mdnice编辑器&quot; style=&quot;line-height: 1.8em; letter-spacing: 0em; text-indent: 0em; margin-top: 0px; margin-bottom: 0px; padding: 8px 0px; text-align: left;&quot;&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;i_cat&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt; 是类别（&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;VIDEO_ES&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;/&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;AUDIO_ES&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;/&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;SPU_ES&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;/&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;DATA_ES&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;），&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;i_codec&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt; 是 &lt;span class=&quot;&quot; link-id=&quot;link-1792545831668-0.08186294679400419&quot;&gt;FOURCC&lt;/span&gt; 编码号，&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;union&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt; 里放分辨率、采样率这些具体参数。&lt;/span&gt;&lt;/p&gt;&lt;p data-tool=&quot;mdnice编辑器&quot; style=&quot;line-height: 1.8em; letter-spacing: 0em; text-indent: 0em; margin-top: 0px; margin-bottom: 0px; padding: 8px 0px; text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;这个结构在整条管道里到处传：demux 产出它，decoder 靠它选解码器，vout/aout 靠它分配资源。定义稳定，上下游才能各自独立演进。&lt;/span&gt;&lt;/p&gt;&lt;h3 data-tool=&quot;mdnice编辑器&quot; style=&quot;margin: 30px 0px 15px; padding: 0px; text-align: left;&quot;&gt;&lt;span style=&quot;line-height: 1.5em; letter-spacing: 0em; display: block;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;3.2 输入线程的 MainLoop&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p data-tool=&quot;mdnice编辑器&quot; style=&quot;line-height: 1.8em; letter-spacing: 0em; text-indent: 0em; margin-top: 0px; margin-bottom: 0px; padding: 8px 0px; text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;输入引擎的核心在 &lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;src/input/input.c&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt; 的 &lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;MainLoop&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;。结构不复杂，但它是整个播放的驱动源——一个线程反复推着 demux 往前走：&lt;/span&gt;&lt;/p&gt;&lt;pre data-tool=&quot;mdnice编辑器&quot; style=&quot;border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px; margin-top: 10px; margin-bottom: 10px; padding: 0px;&quot;&gt;&lt;code style=&quot;overflow-x: auto; padding: 15px 16px 16px; color: rgb(171, 178, 191); background: rgb(40, 44, 52); border-radius: 5px; display: -webkit-box;&quot;&gt;&lt;span style=&quot;color: #5c6370;font-style: italic;line-height: 26px;&quot;&gt;// src/input/input.c:502（节选）&lt;/span&gt;&lt;span style=&quot;line-height: 26px;&quot;&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;static&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;void&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #61aeee;line-height: 26px;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;MainLoopDemux&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;line-height: 26px;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;(&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;input_thread_t&lt;/span&gt;&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp;*p_input,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;bool&lt;/span&gt;&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp;*pb_changed )&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;{&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; ...&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;if&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;( i_ret == VLC_DEMUXER_SUCCESS )&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; i_ret = demux_Demux( p_demux ); &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5c6370;font-style: italic;line-height: 26px;&quot;&gt;// 驱动解复用器向前解析&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; ...&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;if&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;( i_ret == VLC_DEMUXER_EOF )&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; msg_Dbg( p_input,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #98c379;line-height: 26px;&quot;&gt;&amp;quot;EOF reached&amp;quot;&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp;);&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; p_priv-&amp;gt;master-&amp;gt;b_eof =&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #56b6c2;line-height: 26px;&quot;&gt;true&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;;&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; es_out_Eos(p_priv-&amp;gt;p_es_out); &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5c6370;font-style: italic;line-height: 26px;&quot;&gt;// 通知输出端：流结束&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;span style=&quot;color: #5c6370;font-style: italic;line-height: 26px;&quot;&gt;/* ... */&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p data-tool=&quot;mdnice编辑器&quot; style=&quot;line-height: 1.8em; letter-spacing: 0em; text-indent: 0em; margin-top: 0px; margin-bottom: 0px; padding: 8px 0px; text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;一次 &lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;demux_Demux(p_demux)&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt; 会让当前 demux 模块（比如 mkv demux）解析出一段数据，同时回调给 &lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;es_out&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;。返回 EOF 就广播流结束。&lt;/span&gt;&lt;/p&gt;&lt;p data-tool=&quot;mdnice编辑器&quot; style=&quot;line-height: 1.8em; letter-spacing: 0em; text-indent: 0em; margin-top: 0px; margin-bottom: 0px; padding: 8px 0px; text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;整个播放过程，就是这个循环一遍一遍跑。&lt;/span&gt;&lt;/p&gt;&lt;h3 data-tool=&quot;mdnice编辑器&quot; style=&quot;margin: 30px 0px 15px; padding: 0px; text-align: left;&quot;&gt;&lt;span style=&quot;line-height: 1.5em; letter-spacing: 0em; display: block;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;3.3 es_out：分发的中间层&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p data-tool=&quot;mdnice编辑器&quot; style=&quot;line-height: 1.8em; letter-spacing: 0em; text-indent: 0em; margin-top: 0px; margin-bottom: 0px; padding: 8px 0px; text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;demux 解出来的 ES 要送到不同解码器去，中间靠 &lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;es_out&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;。它的接口是一张回调表：&lt;/span&gt;&lt;/p&gt;&lt;pre data-tool=&quot;mdnice编辑器&quot; style=&quot;border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px; margin-top: 10px; margin-bottom: 10px; padding: 0px;&quot;&gt;&lt;code style=&quot;overflow-x: auto; padding: 15px 16px 16px; color: rgb(171, 178, 191); background: rgb(40, 44, 52); border-radius: 5px; display: -webkit-box;&quot;&gt;&lt;span style=&quot;color: #5c6370;font-style: italic;line-height: 26px;&quot;&gt;// include/vlc_es_out.h:131&lt;/span&gt;&lt;span style=&quot;line-height: 26px;&quot;&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;struct&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #e6c07b;line-height: 26px;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;es_out_callbacks&lt;/span&gt;&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;es_out_id_t&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp;*(*add)(&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;es_out_t&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp;*,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;input_source_t&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp;*in,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;es_format_t&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp;*);&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;int&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (*send)(&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;es_out_t&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp;*,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;es_out_id_t&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp;*,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;block_t&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp;*);&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;void&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(*del)(&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;es_out_t&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp;*,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;es_out_id_t&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp;*);&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;int&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (*control)(&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;es_out_t&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp;*,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;input_source_t&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp;*in,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;int&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp;query, va_list);&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;void&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(*destroy)(&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;es_out_t&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp;*);&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;};&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p data-tool=&quot;mdnice编辑器&quot; style=&quot;line-height: 1.8em; letter-spacing: 0em; text-indent: 0em; margin-top: 0px; margin-bottom: 0px; padding: 8px 0px; text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;语义很直接：发现新轨道就 &lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;add&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;，有数据就 &lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;send&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;，轨道结束就 &lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;del&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;。核心通过 &lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;control&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt; 下发控制命令，比如 &lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;ES_OUT_SET_PCR&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;、&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;ES_OUT_SET_ES&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;（枚举在 &lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;vlc_es_out.h:39&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;）。&lt;/span&gt;&lt;/p&gt;&lt;p data-tool=&quot;mdnice编辑器&quot; style=&quot;line-height: 1.8em; letter-spacing: 0em; text-indent: 0em; margin-top: 0px; margin-bottom: 0px; padding: 8px 0px; text-align: left;&quot;&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;es_out&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt; 的实现（&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;src/input/es_out.c&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;）里会为每路 ES 建对应的解码器。demux 完全不知道解码器的存在，两边解耦就靠这一层。&lt;/span&gt;&lt;/p&gt;&lt;h3 data-tool=&quot;mdnice编辑器&quot; style=&quot;margin: 30px 0px 15px; padding: 0px; text-align: left;&quot;&gt;&lt;span style=&quot;line-height: 1.5em; letter-spacing: 0em; display: block;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;3.4 每路 ES 一条解码线程&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p data-tool=&quot;mdnice编辑器&quot; style=&quot;line-height: 1.8em; letter-spacing: 0em; text-indent: 0em; margin-top: 0px; margin-bottom: 0px; padding: 8px 0px; text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;解码是 CPU/GPU 重活，不能放在主循环里。所以每路 ES 有自己的解码线程，主循环在 &lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;src/input/decoder.c:1976&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;：&lt;/span&gt;&lt;/p&gt;&lt;pre data-tool=&quot;mdnice编辑器&quot; style=&quot;border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px; margin-top: 10px; margin-bottom: 10px; padding: 0px;&quot;&gt;&lt;code style=&quot;overflow-x: auto; padding: 15px 16px 16px; color: rgb(171, 178, 191); background: rgb(40, 44, 52); border-radius: 5px; display: -webkit-box;&quot;&gt;&lt;span style=&quot;line-height: 26px;&quot;&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;static&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;void&lt;/span&gt;&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp;*&lt;/span&gt;&lt;span style=&quot;color: #61aeee;line-height: 26px;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;DecoderThread&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;line-height: 26px;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;(&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;void&lt;/span&gt;&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp;*p_data )&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;vlc_input_decoder_t&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp;*p_owner = (&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;vlc_input_decoder_t&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp;*)p_data;&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; ...&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;switch&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp;(p_owner-&amp;gt;cat)&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;case&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp;VIDEO_ES: thread_name =&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #98c379;line-height: 26px;&quot;&gt;&amp;quot;vlc-dec-video&amp;quot;&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;break&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;case&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp;AUDIO_ES: thread_name =&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #98c379;line-height: 26px;&quot;&gt;&amp;quot;vlc-dec-audio&amp;quot;&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;break&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;case&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp;SPU_ES: &amp;nbsp; thread_name =&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #98c379;line-height: 26px;&quot;&gt;&amp;quot;vlc-dec-spu&amp;quot;&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;break&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;;&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ...&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; vlc_thread_set_name(thread_name);&lt;/span&gt;&lt;span style=&quot;color: #5c6370;font-style: italic;line-height: 26px;&quot;&gt;/* The decoder&amp;#39;s main loop */&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; vlc_fifo_Lock( p_owner-&amp;gt;p_fifo );&lt;/span&gt;&lt;span style=&quot;color: #c678dd;line-height: 26px;&quot;&gt;while&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;( !p_owner-&amp;gt;aborting || p_owner-&amp;gt;flushing )&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ...&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DecoderThread_ProcessInput( p_owner, frame ); &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5c6370;font-style: italic;line-height: 26px;&quot;&gt;// 取一帧喂给解码模块&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;span leaf=&quot;&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p data-tool=&quot;mdnice编辑器&quot; style=&quot;line-height: 1.8em; letter-spacing: 0em; text-indent: 0em; margin-top: 0px; margin-bottom: 0px; padding: 8px 0px; text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;在系统里 &lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;ps&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt; 一下能看到 &lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;vlc-dec-video&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;、&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;vlc-dec-audio&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt; 这些线程。各自从一个 FIFO 拿 &lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;block_t&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;，调真正的解码模块（多半是 avcodec），把输出（&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;picture_t&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt; 或音频采样）往后送。&lt;/span&gt;&lt;/p&gt;&lt;p data-tool=&quot;mdnice编辑器&quot; style=&quot;line-height: 1.8em; letter-spacing: 0em; text-indent: 0em; margin-top: 0px; margin-bottom: 0px; padding: 8px 0px; text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;解码和输入解耦这件事，是边下边播、拖拽不卡的基础。输入线程读它的，解码线程解它的，中间靠队列缓冲，一边慢下来不会直接把另一边卡死。&lt;/span&gt;&lt;/p&gt;&lt;h2 data-tool=&quot;mdnice编辑器&quot; style=&quot;margin: 30px 0px 15px; padding: 0px; text-align: left;&quot;&gt;&lt;span style=&quot;line-height: 1.5em; letter-spacing: 0em; display: block;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;四、一帧画面从文件到屏幕&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p data-tool=&quot;mdnice编辑器&quot; style=&quot;line-height: 1.8em; letter-spacing: 0em; text-indent: 0em; margin-top: 0px; margin-bottom: 0px; padding: 8px 0px; text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;把上面这些串起来，就是完整链路。一张图把数据流、控制流、时钟流三套链路分开画：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;figure data-tool=&quot;mdnice编辑器&quot; style=&quot;margin-top: 10px;margin-bottom: 10px;margin-left: 0px;margin-right: 0px;padding-top: 0px;padding-bottom: 0px;padding-left: 0px;padding-right: 0px;display: flex;flex-direction: column;justify-content: center;align-items: center;&quot;&gt;&lt;section style=&quot;text-align: center;&quot; nodeleaf=&quot;&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img data-src=&quot;https://www.videolan.com.cn/zb_users/upload/2026/10/20261021092425_83731.png&quot; data-ratio=&quot;0.8740740740740741&quot; data-s=&quot;300,640&quot; data-type=&quot;png&quot; data-w=&quot;1080&quot; type=&quot;block&quot; data-imgfileid=&quot;100000063&quot; data-aistatus=&quot;1&quot; data-original-style=&quot;null&quot; data-index=&quot;1&quot; src=&quot;https://www.videolan.com.cn/zb_users/upload/2026/10/20261021092425_83731.png&quot; _width=&quot;677px&quot; __sec_open_place_holder__=&quot;true&quot; style=&quot;height: auto !important; visibility: visible !important; width: 656.984px !important;&quot; alt=&quot;图片&quot; data-before-load-time=&quot;1792545847685&quot; data-report-img-idx=&quot;1&quot; data-fail=&quot;0&quot;/&gt;&lt;/p&gt;&lt;/section&gt;&lt;figcaption style=&quot;color: rgb(136, 136, 136); line-height: 1.5em; letter-spacing: 0em; text-align: center; margin: 5px 0px 0px; padding: 0px;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;VLC 播放数据流转图（数据流 + 控制流 + 时钟同步）&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;/p&gt;&lt;h3 data-tool=&quot;mdnice编辑器&quot; style=&quot;margin: 30px 0px 15px; padding: 0px; text-align: left;&quot;&gt;&lt;span style=&quot;line-height: 1.5em; letter-spacing: 0em; display: block;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;4.1 数据流&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;ol style=&quot;margin-top: 8px; margin-bottom: 8px; padding: 0px 0px 0px 25px;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;section style=&quot;margin-top: 5px; margin-bottom: 5px; color: rgb(1, 1, 1); line-height: 1.8em; letter-spacing: 0em;&quot;&gt;&lt;strong style=&quot;color: rgb(0, 0, 0); font-weight: bold; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: left top; background-repeat: no-repeat; background-size: auto; width: auto; height: auto; margin: 0px; padding: 0px; border-style: none; border-width: 3px; border-color: rgba(0, 0, 0, 0.4); border-radius: 0px;&quot;&gt;access&lt;/strong&gt;&lt;span leaf=&quot;&quot;&gt;：按 MRL（&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;file://&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;、&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;http://&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt; 等）打开来源，产出字节流 &lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;stream_t&lt;/span&gt;&lt;/code&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section style=&quot;margin-top: 5px; margin-bottom: 5px; color: rgb(1, 1, 1); line-height: 1.8em; letter-spacing: 0em;&quot;&gt;&lt;strong style=&quot;color: rgb(0, 0, 0); font-weight: bold; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: left top; background-repeat: no-repeat; background-size: auto; width: auto; height: auto; margin: 0px; padding: 0px; border-style: none; border-width: 3px; border-color: rgba(0, 0, 0, 0.4); border-radius: 0px;&quot;&gt;stream_filter&lt;/strong&gt;&lt;span leaf=&quot;&quot;&gt;：可选，解压、解密之类&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section style=&quot;margin-top: 5px; margin-bottom: 5px; color: rgb(1, 1, 1); line-height: 1.8em; letter-spacing: 0em;&quot;&gt;&lt;strong style=&quot;color: rgb(0, 0, 0); font-weight: bold; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: left top; background-repeat: no-repeat; background-size: auto; width: auto; height: auto; margin: 0px; padding: 0px; border-style: none; border-width: 3px; border-color: rgba(0, 0, 0, 0.4); border-radius: 0px;&quot;&gt;demux&lt;/strong&gt;&lt;span leaf=&quot;&quot;&gt;：解析容器，产出带时间戳的 ES 数据块，通过 &lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;es_out_Add&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt; 登记轨道&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section style=&quot;margin-top: 5px; margin-bottom: 5px; color: rgb(1, 1, 1); line-height: 1.8em; letter-spacing: 0em;&quot;&gt;&lt;strong style=&quot;color: rgb(0, 0, 0); font-weight: bold; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: left top; background-repeat: no-repeat; background-size: auto; width: auto; height: auto; margin: 0px; padding: 0px; border-style: none; border-width: 3px; border-color: rgba(0, 0, 0, 0.4); border-radius: 0px;&quot;&gt;es_out&lt;/strong&gt;&lt;span leaf=&quot;&quot;&gt;：按类别路由，内部建解码器，数据块经 &lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;es_out_Send&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt; 进解码线程的 FIFO&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section style=&quot;margin-top: 5px; margin-bottom: 5px; color: rgb(1, 1, 1); line-height: 1.8em; letter-spacing: 0em;&quot;&gt;&lt;strong style=&quot;color: rgb(0, 0, 0); font-weight: bold; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: left top; background-repeat: no-repeat; background-size: auto; width: auto; height: auto; margin: 0px; padding: 0px; border-style: none; border-width: 3px; border-color: rgba(0, 0, 0, 0.4); border-radius: 0px;&quot;&gt;decoder 线程&lt;/strong&gt;&lt;span leaf=&quot;&quot;&gt;：解码模块消费 FIFO，视频出 &lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;picture_t&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;，音频出采样块&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section style=&quot;margin-top: 5px; margin-bottom: 5px; color: rgb(1, 1, 1); line-height: 1.8em; letter-spacing: 0em;&quot;&gt;&lt;strong style=&quot;color: rgb(0, 0, 0); font-weight: bold; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: left top; background-repeat: no-repeat; background-size: auto; width: auto; height: auto; margin: 0px; padding: 0px; border-style: none; border-width: 3px; border-color: rgba(0, 0, 0, 0.4); border-radius: 0px;&quot;&gt;vout / aout&lt;/strong&gt;&lt;span leaf=&quot;&quot;&gt;：分别做渲染调度和混音输出，最终到显示器和声卡&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h3 data-tool=&quot;mdnice编辑器&quot; style=&quot;margin: 30px 0px 15px; padding: 0px; text-align: left;&quot;&gt;&lt;span style=&quot;line-height: 1.5em; letter-spacing: 0em; display: block;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;4.2 控制流走另一条路&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p data-tool=&quot;mdnice编辑器&quot; style=&quot;line-height: 1.8em; letter-spacing: 0em; text-indent: 0em; margin-top: 0px; margin-bottom: 0px; padding: 8px 0px; text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;播放、暂停、拖拽这些操作&lt;/span&gt;&lt;strong style=&quot;font-weight: bold; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: left top; background-repeat: no-repeat; background-size: auto; width: auto; height: auto; margin: 0px; padding: 0px; border-style: none; border-width: 3px; border-color: rgba(0, 0, 0, 0.4); border-radius: 0px;&quot;&gt;不走数据管道&lt;/strong&gt;&lt;span leaf=&quot;&quot;&gt;。它们走的是：GUI → &lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;libvlc_*&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt; → &lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;vlc_player&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt; 状态机 → 输入线程的控制队列（&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;ControlPop&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;）→ 影响 demux（seek、暂停）和解码线程（flush、暂停）。&lt;/span&gt;&lt;/p&gt;&lt;p data-tool=&quot;mdnice编辑器&quot; style=&quot;line-height: 1.8em; letter-spacing: 0em; text-indent: 0em; margin-top: 0px; margin-bottom: 0px; padding: 8px 0px; text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;为什么要分开？因为数据管道里随时有几十个包在传，命令如果混进去排队，seek 要等前面的数据都走完才能生效。分开走就能立刻响应。&lt;/span&gt;&lt;/p&gt;&lt;h3 data-tool=&quot;mdnice编辑器&quot; style=&quot;margin: 30px 0px 15px; padding: 0px; text-align: left;&quot;&gt;&lt;span style=&quot;line-height: 1.5em; letter-spacing: 0em; display: block;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;4.3 时钟流&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p data-tool=&quot;mdnice编辑器&quot; style=&quot;line-height: 1.8em; letter-spacing: 0em; text-indent: 0em; margin-top: 0px; margin-bottom: 0px; padding: 8px 0px; text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;视频和音频的解码速度天然不一致，靠什么对齐？&lt;/span&gt;&lt;/p&gt;&lt;p data-tool=&quot;mdnice编辑器&quot; style=&quot;line-height: 1.8em; letter-spacing: 0em; text-indent: 0em; margin-top: 0px; margin-bottom: 0px; padding: 8px 0px; text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;VLC 用 &lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;src/clock/&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt; 的 &lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;vlc_clock&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt; 统一管时间基准。demux 通过 &lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;ES_OUT_SET_PCR&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;（&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; height: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;vlc_es_out.h:66&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;）上报系统时钟参考 PCR，各输出按自己的 PTS 到点呈现。谁早谁晚由时钟裁定，音频输出端还会反过来控制解码节奏，从机制上保证声画同步。&lt;/span&gt;&lt;/p&gt;&lt;p data-tool=&quot;mdnice编辑器&quot; style=&quot;line-height: 1.8em; letter-spacing: 0em; text-indent: 0em; margin-top: 0px; margin-bottom: 0px; padding: 8px 0px; text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;这块其实是整个播放器最麻烦的部分。不响应瞬时偏差、只响应平滑后的长期漂移，还要处理 seek 之后的时间线分叉。展开讲能写一整篇。&lt;/span&gt;&lt;/p&gt;&lt;h2 data-tool=&quot;mdnice编辑器&quot; style=&quot;margin: 30px 0px 15px; padding: 0px; text-align: left;&quot;&gt;&lt;span style=&quot;line-height: 1.5em; letter-spacing: 0em; display: block;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;五、从 VLC 学到的三件事&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;ul style=&quot;margin-top: 8px; margin-bottom: 8px; padding: 0px 0px 0px 25px;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;section style=&quot;margin-top: 5px; margin-bottom: 5px; color: rgb(1, 1, 1); line-height: 1.8em; letter-spacing: 0em;&quot;&gt;&lt;strong style=&quot;color: rgb(0, 0, 0); font-weight: bold; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: left top; background-repeat: no-repeat; background-size: auto; width: auto; height: auto; margin: 0px; padding: 0px; border-style: none; border-width: 3px; border-color: rgba(0, 0, 0, 0.4); border-radius: 0px;&quot;&gt;接口稳定，实现外挂&lt;/strong&gt;&lt;span leaf=&quot;&quot;&gt;。&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;es_format_t&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt;、&lt;/span&gt;&lt;code style=&quot;color: rgb(30, 107, 184); line-height: 1.8em; letter-spacing: 0em; background: none left top / auto no-repeat scroll padding-box border-box rgba(27, 31, 35, 0.05); width: auto; margin: 0px 2px; padding: 2px 4px; border-style: none; border-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 4px; overflow-wrap: break-word; word-break: break-all;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;es_out_callbacks&lt;/span&gt;&lt;/code&gt;&lt;span leaf=&quot;&quot;&gt; 这些是契约，格式、协议、编码全做成模块，加新能力就是加一个插件&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section style=&quot;margin-top: 5px; margin-bottom: 5px; color: rgb(1, 1, 1); line-height: 1.8em; letter-spacing: 0em;&quot;&gt;&lt;strong style=&quot;color: rgb(0, 0, 0); font-weight: bold; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: left top; background-repeat: no-repeat; background-size: auto; width: auto; height: auto; margin: 0px; padding: 0px; border-style: none; border-width: 3px; border-color: rgba(0, 0, 0, 0.4); border-radius: 0px;&quot;&gt;关注点分离&lt;/strong&gt;&lt;span leaf=&quot;&quot;&gt;。数据流、控制流、时钟流互不干扰，输入、解码、输出各跑各的线程&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;li&gt;&lt;section style=&quot;margin-top: 5px; margin-bottom: 5px; color: rgb(1, 1, 1); line-height: 1.8em; letter-spacing: 0em;&quot;&gt;&lt;strong style=&quot;color: rgb(0, 0, 0); font-weight: bold; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: left top; background-repeat: no-repeat; background-size: auto; width: auto; height: auto; margin: 0px; padding: 0px; border-style: none; border-width: 3px; border-color: rgba(0, 0, 0, 0.4); border-radius: 0px;&quot;&gt;让时间说话&lt;/strong&gt;&lt;span leaf=&quot;&quot;&gt;。播放问题九成是时序问题，用一个权威时钟统一裁定，别让各模块各自为政&lt;/span&gt;&lt;/section&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-tool=&quot;mdnice编辑器&quot; style=&quot;line-height: 1.8em; letter-spacing: 0em; text-indent: 0em; margin-top: 0px; margin-bottom: 0px; padding: 8px 0px; text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;这套设计是二十多年前定的，今天看依然站得住。如果你在做一个要长期演进、还要支持海量扩展的系统，VLC 的代码值得翻一翻。&lt;/span&gt;&lt;/p&gt;&lt;hr style=&quot;margin: 10px 0px; padding: 0px; border-style: solid none none; border-bottom-width: 3px; border-left-width: 3px; border-right-width: 3px; border-color: rgb(0, 0, 0) rgba(0, 0, 0, 0.4) rgba(0, 0, 0, 0.4); border-radius: 0px; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: left top; background-repeat: no-repeat; background-size: auto; width: auto; height: 1px;&quot;/&gt;&lt;p data-tool=&quot;mdnice编辑器&quot; style=&quot;line-height: 1.8em; letter-spacing: 0em; text-indent: 0em; margin-top: 0px; margin-bottom: 0px; padding: 8px 0px; text-align: left;&quot;&gt;&lt;span leaf=&quot;&quot;&gt;本文代码引用均来自 videolan/vlc 官方仓库 master 分支，可以按文中标注的文件和行号在 GitHub 上核对。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Thu, 10 Sep 2026 09:23:59 +0800</pubDate></item><item><title>VLC播放器跨平台下载量突破70亿次</title><link>https://www.videolan.com.cn/post/62.html</link><description>&lt;p style=&quot;box-sizing: border-box; transition: 0.2s; margin: 8px auto 0px; padding: 0px; border: 0px; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-variant-alternates: inherit; font-variant-position: inherit; font-variant-emoji: inherit; font-stretch: inherit; line-height: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-language-override: inherit; vertical-align: baseline; overflow-wrap: break-word; word-break: break-all; text-indent: 2em; color: rgb(21, 22, 49); white-space: normal; background-color: rgba(255, 255, 255, 0.65); text-align: left;&quot;&gt;就在2025年1月，VLC的下载量刚刚突破60亿次，距今约18个月后又增加了10亿次下载。&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; transition: 0.2s; margin: 8px auto 0px; padding: 0px; border: 0px; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-variant-alternates: inherit; font-variant-position: inherit; font-variant-emoji: inherit; font-stretch: inherit; line-height: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-language-override: inherit; vertical-align: baseline; overflow-wrap: break-word; word-break: break-all; text-indent: 2em; color: rgb(21, 22, 49); white-space: normal; background-color: rgba(255, 255, 255, 0.65); text-align: left;&quot;&gt;肯普夫表示，VideoLAN近期已将VLC移植到亚马逊面向电视设备推出的新操作系统Vega OS。该组织还称，团队正在努力支持其他平台和编解码器，同时为VLC 4版本进行开发。不过，这一版本的研发进度较为缓慢，仍需要一定时间。&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; transition: 0.2s; margin: 8px auto 0px; padding: 0px; border: 0px; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-variant-alternates: inherit; font-variant-position: inherit; font-variant-emoji: inherit; font-stretch: inherit; line-height: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-language-override: inherit; vertical-align: baseline; overflow-wrap: break-word; word-break: break-all; text-indent: 2em; color: rgb(21, 22, 49); white-space: normal; background-color: rgba(255, 255, 255, 0.65); text-align: left;&quot;&gt;去年，VideoLAN曾预告将利用本地模型推出人工智能翻译和字幕功能，但目前尚不清楚这些功能是否已经正式发布。&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; transition: 0.2s; margin: 8px auto 0px; padding: 0px; border: 0px; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-variant-alternates: inherit; font-variant-position: inherit; font-variant-emoji: inherit; font-stretch: inherit; line-height: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-language-override: inherit; vertical-align: baseline; overflow-wrap: break-word; word-break: break-all; text-indent: 2em; color: rgb(21, 22, 49); white-space: normal; background-color: rgba(255, 255, 255, 0.65); text-align: left;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://www.videolan.com.cn/zb_users/upload/2026/09/20260901112740178823326072978.jpeg&quot; target=&quot;_blank&quot; data-index=&quot;0&quot; data-lightbox-gallery=&quot;cbc-gallery&quot; style=&quot;box-sizing: border-box; transition: 0.2s; margin: 0px; padding: 0px; border-width: 0px 0px 1px; border-style: none none solid; border-color: currentcolor currentcolor rgb(0, 51, 102); border-image: none; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-language-override: inherit; vertical-align: baseline; color: rgb(0, 51, 102); background-color: transparent;&quot;&gt;&lt;img src=&quot;https://www.videolan.com.cn/zb_users/upload/2026/09/20260901112740178823326072978.jpeg&quot; data-original=&quot;https://www.videolan.com.cn/zb_users/upload/2026/09/20260901112740178823326072978.jpeg&quot; style=&quot;box-sizing: border-box; transition: 0.2s; margin: 0px auto; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-language-override: inherit; vertical-align: middle; display: block; max-width: 100%; float: none;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Tue, 01 Sep 2026 11:27:20 +0800</pubDate></item></channel></rss>