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

html5网页flv播放器
(图片来源网络,侵删)

下面我将为你提供一个完整、详细的教程,从零开始创建一个使用flv.js的HTML5 FLV播放器。


使用 flv.js (推荐)

这是目前最流行和推荐的方案。

第一步:准备环境

  1. 一个FLV视频文件:你需要一个FLV格式的视频文件,为了演示,你可以使用任何FLV视频,或者从网上下载一个示例视频。
  2. 一个简单的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

第二步:编写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>

第三步:配置和运行

  1. 替换视频URL:在 index.html 文件中找到 const flvVideoUrl = 'your_video.flv'; 这一行,将 'your_video.flv' 替换成你自己的FLV视频文件名(如果视频和HTML在同一个目录下)或完整的URL。
  2. 放置文件:将你的 index.html 文件和你的FLV视频文件(my_video.flv)放在同一个文件夹下。
  3. 启动Web服务器:使用 Live Server 或 Python HTTP Server 启动一个本地Web服务器。
  4. 访问页面:在浏览器中打开服务器提供的地址(http://localhost:5500http://localhost:8000)。
  5. 点击播放:页面加载后,点击 "加载视频" 按钮,然后就可以使用视频下方的控制按钮或视频自带的控制器来播放、暂停视频了。

使用 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 + 插件)是更好的选择。