Lazy loaded image
字数 1133阅读时长 3 分钟
2026-2-26
type
Post
status
Published
date
Jan 16, 2026
slug
summary
tags
category
技术分享
password
😀
这段代码的主要作用是在一个 Vue.js 应用中,使用 mpegts.js 库来创建一个 低延迟的 HTTP-FLV 直播视频播放器
通常这种代码常见于监控(CCTV)、安防或实时直播场景。
以下是代码逻辑的详细拆解:

1. 核心功能概述

  • 播放协议:HTTP-FLV(一种基于 HTTP 的流媒体传输协议,常用于低延迟直播)。
  • 播放内核mpegts.js(这是 flv.js 的优化版/主要维护分支,利用浏览器的 MSE 技术播放 FLV)。
  • 应用场景:实时监控画面预览,要求极低的延时。

2. 代码逻辑分步解析

A. 环境检查与 URL 处理

 
  • 它首先确认浏览器环境是否支持 MSE(Media Source Extensions),这是 mpegts.js 运行的基础。
  • 根据业务逻辑(datas.type)对原始流地址进行处理。

B. Vue 的 DOM 渲染控制

  • 作用:这是一个典型的“异步渲染”处理。video 标签被 v-if 控制,初始可能是不存在的。
  • 流程:先把 flag 设为 true 让 Vue 去创建 DOM 节点,然后通过 setTimeout 等待 100ms,确保能在页面上通过 getElementById 找到这个节点。
    • 注:这种写法虽然有效,但在 Vue 中更推荐使用 this.$nextTick() 来代替 setTimeout 以获得更精准的 DOM 更新时机。

C. 播放器配置与初始化 (关键部分)

  • 低延迟配置:这是这段代码的灵魂
    • 普通直播可能有 3-5 秒延迟,但这里开启了 liveBufferLatencyChasing(追帧)。
    • 如果网络卡顿导致客户端缓存堆积超过 0.9秒,播放器会自动加速播放或跳帧,强行将延迟压缩在 1 秒以内,以保证看到的画面是实时的。

D. 绑定与播放

3. HTML 标签属性

 
  • w-full h-full object-cover: Tailwind CSS 样式,让视频填满容器并裁剪以保持比例。
  • autoplay muted: 自动播放且静音。现代浏览器策略规定,自动播放的视频必须默认静音,否则会被浏览器拦截。
 

完整代码案例

notion image

总结

这段代码实现了一个极速启动、极低延迟的监控视频播放功能。它通过嵌套的 setTimeout 解决了 Vue 动态渲染 DOM 的时序问题,并通过激进的 mpegts.js 配置(追帧策略)确保用户看到的画面尽可能接近实时发生的场景。

上一篇
无法获取Notion数据,请检查Notion_ID: 当前 24ecccc0378280039b90d9d81dbd41f7,en:7c1d570661754c8fbc568e00a01fd70e
下一篇
无法获取Notion数据,请检查Notion_ID: 当前 24ecccc0378280039b90d9d81dbd41f7,en:7c1d570661754c8fbc568e00a01fd70e