目前最主流、性能最好、功能最全的解决方案是 flv.js,它是由Bilibili团队开源的一个纯JavaScript库,使用HTML5的Media Source Extensions (MSE) API来动态加载和播放FLV视频,性能和体验都非常好。

(图片来源网络,侵删)
下面我将为你提供一个完整、详细的教程,从零开始创建一个使用flv.js的HTML5 FLV播放器。
使用 flv.js (推荐)
这是目前最流行和推荐的方案。
第一步:准备环境
- 一个FLV视频文件:你需要一个FLV格式的视频文件,为了演示,你可以使用任何FLV视频,或者从网上下载一个示例视频。
- 一个简单的Web服务器:非常重要! 由于浏览器的安全策略(CORS),flv.js通常不能直接通过
file:///协议打开本地文件来播放,你需要一个简单的Web服务器来托管你的HTML和视频文件。- 如果你使用VS Code,可以安装
Live Server插件,右键点击HTML文件选择 "Open with Live Server" 即可。 - 如果你使用其他编辑器,也可以使用Python的简单HTTP服务器:在视频文件所在的目录下打开终端,运行
python -m http.server 8000,然后在浏览器中访问http://localhost:8000。
- 如果你使用VS Code,可以安装
第二步:编写HTML代码
创建一个名为 index.html 的文件,并粘贴以下代码,代码中包含了详细的注释,解释了每一部分的作用。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">HTML5 FLV 播放器 (flv.js)</title>
<!-- 1. 引入 flv.js 库 -->
<!-- 从 CDN 引入是最简单的方式 -->
<script src="https://cdn.jsdelivr.net/npm/flv.js@1.6.2/dist/flv.min.js"></script>
<style>
body {
font-family: Arial, sans-serif;
display: flex;
flex-direction: column;
align-items: center;
padding-top: 20px;
}
video {
width: 80%;
max-width: 800px;
background-color: #000;
}
.controls {
margin-top: 20px;
display: flex;
gap: 10px;
}
button {
padding: 10px 20px;
font-size: 16px;
cursor: pointer;
}
</style>
</head>
<body>
<h1>HTML5 FLV 播放器</h1>
<!-- 2. 创建一个 video 元素 -->
<!-- 注意:flv.js 会将 FLV 封装成 MP4 的流注入到这个 video 标签中,source 标签里的 src 是无效的,可以留空或指向一个备用视频 -->
<video id="videoElement" controls>
<!-- 可以提供一个备用视频源,flv.js 加载失败,浏览器会尝试播放这个 -->
<source src="your_fallback_video.mp4" type="video/mp4">
您的浏览器不支持 HTML5 视频。
</video>
<!-- 3. 创建一些控制按钮 -->
<div class="controls">
<button id="loadBtn">加载视频</button>
<button id="playBtn">播放</button>
<button id="pauseBtn">暂停</button>
</div>
<script>
// 4. 编写 JavaScript 逻辑
document.addEventListener('DOMContentLoaded', function () {
// 获取 video 元素
const videoElement = document.getElementById('videoElement');
const loadBtn = document.getElementById('loadBtn');
const playBtn = document.getElementById('playBtn');
const pauseBtn = document.getElementById('pauseBtn');
// --- 配置 ---
// 将这里替换成你的 FLV 视频地址
// 可以是本地路径 (需要在Web服务器下) 或网络URL
const flvVideoUrl = 'your_video.flv';
let flvPlayer = null;
// 加载视频函数
function loadVideo() {
// 检查浏览器是否支持 flv.js
if (flvjs.isSupported()) {
console.log('浏览器支持 flv.js');
// 如果之前已经创建了播放器,先销毁它
if (flvPlayer) {
flvPlayer.destroy();
flvPlayer = null;
}
// 创建 flv.js 播放器实例
flvPlayer = flvjs.createPlayer({
type: 'flv', // 指定媒体类型为 flv
url: flvVideoUrl, // 视频地址
// 可以在这里添加更多配置,如是否启用 worker 等
isLive: false, // 是否为直播流
hasAudio: true, // 是否有音频
hasVideo: true, // 是否有视频
});
// 将 flv.js 播放器绑定到 video 元素
flvPlayer.attachMediaElement(videoElement);
// 开始加载元数据
flvPlayer.load();
// 监听事件
flvPlayer.on(flvjs.Events.ERROR, function (errorType, errorDetail) {
console.error('播放器发生错误:', errorType, errorDetail);
alert('播放器发生错误,请检查视频URL或网络连接。');
});
flvPlayer.on(flvjs.Events.LOADED_METADATA, function () {
console.log('元数据加载完成,可以播放了。');
});
} else {
alert('您的浏览器不支持 flv.js,无法播放FLV视频。');
}
}
// 绑定按钮事件
loadBtn.addEventListener('click', loadVideo);
playBtn.addEventListener('click', () => videoElement.play());
pauseBtn.addEventListener('click', () => videoElement.pause());
// 页面加载完成后,可以自动加载视频,或者等待用户点击“加载视频”按钮
// loadVideo(); // 取消注释以自动加载
});
</script>
</body>
</html>
第三步:配置和运行
- 替换视频URL:在
index.html文件中找到const flvVideoUrl = 'your_video.flv';这一行,将'your_video.flv'替换成你自己的FLV视频文件名(如果视频和HTML在同一个目录下)或完整的URL。 - 放置文件:将你的
index.html文件和你的FLV视频文件(my_video.flv)放在同一个文件夹下。 - 启动Web服务器:使用 Live Server 或 Python HTTP Server 启动一个本地Web服务器。
- 访问页面:在浏览器中打开服务器提供的地址(
http://localhost:5500或http://localhost:8000)。 - 点击播放:页面加载后,点击 "加载视频" 按钮,然后就可以使用视频下方的控制按钮或视频自带的控制器来播放、暂停视频了。
使用 Video.js + videojs-flvjs 插件
如果你已经在使用 Video.js 这个功能强大的播放器框架,并且想保持其风格一致,可以使用它的官方插件 videojs-flvjs。
第一步:引入依赖
你需要引入 Video.js 的核心库和 videojs-flvjs 插件。
<!-- 引入 Video.js 核心样式 --> <link href="https://vjs.zencdn.net/8.6.1/video-js.css" rel="stylesheet"> <!-- 引入 Video.js 核心库 --> <script src="https://vjs.zencdn.net/8.6.1/video.min.js"></script> <!-- 引入 videojs-flvjs 插件 --> <script src="https://cdn.jsdelivr.net/npm/videojs-flvjs@1.0.2/dist/videojs-flvjs.min.js"></script>
第二步:编写HTML和JS
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">Video.js FLV 播放器</title>
<link href="https://vjs.zencdn.net/8.6.1/video-js.css" rel="stylesheet">
<style>
body { text-align: center; padding-top: 20px; }
.video-js { width: 80%; max-width: 800px; }
</style>
</head>
<body>
<h1>Video.js FLV 播放器</h1>
<!-- 使用 Video.js 的标准 video 标签 -->
<video
id="myVideo"
class="video-js vjs-default-skin"
controls
preload="auto"
data-setup="{}">
<!-- 注意:这里的 source 标签会被插件忽略,但可以提供备用 -->
<source src="your_fallback_video.mp4" type="video/mp4">
<p class="vjs-no-js">
To view this video please enable JavaScript, and consider upgrading to a web browser that supports HTML5 video.
</p>
</video>
<script src="https://vjs.zencdn.net/8.6.1/video.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/videojs-flvjs@1.0.2/dist/videojs-flvjs.min.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
// 初始化播放器
const player = videojs('myVideo');
// 设置 FLV 视频源
// 将 'your_video.flv' 替换成你的视频URL
const flvSource = {
src: 'your_video.flv',
type: 'video/x-flv'
};
// 使用插件加载 FLV 源
player.src(flvSource);
// 也可以使用 techOrder 来指定优先使用 flvjs
// player.techOrder(['flvjs']);
// player.src(flvSource);
});
</script>
</body>
</html>
这个方案的使用方法和第一个方案类似,都需要Web环境和替换视频URL,它的优点是可以利用Video.js丰富的主题、插件和功能。
总结与对比
| 特性 | flv.js (原生) | Video.js + 插件 |
|---|---|---|
| 易用性 | 简单直接,API清晰 | 需要先了解Video.js的API,但文档齐全 |
| 功能 | 核心播放功能强大,可定制性高 | 功能极其丰富,UI/UX,广告,分析等一应俱全 |
| 灵活性 | 完全控制播放器的每一个细节 | 基于插件,灵活性相对较低,但扩展性强 |
| 体积 | 只需引入一个库 | 需要引入Video.js主库和插件,体积较大 |
| 适用场景 | 对播放器有高度定制需求,或项目追求轻量级 | 快速搭建功能完善、外观专业的视频播放页面,特别是已有Video.js项目 |
对于大多数新项目,如果你只需要一个纯粹的FLV播放器,推荐使用方案一(flv.js)。 如果你已经在使用Video.js,或者需要一个功能更全面的播放器,方案二(Video.js + 插件)是更好的选择。
