通过flv.js在网页中拉流进行视频播放

起因是我想在网页中展示流媒体服务器中的视频流。后来了解到flv.js,故作如下知识记录:

FLV (Flash Video) 格式最初是为 Adobe Flash Player 设计的视频容器格式,但随着 HTML5 技术的发展,直接在网页中播放 FLV 文件变得越来越困难。HTTP-FLV 技术通过将 FLV 文件通过 HTTP 协议传输,并在前端使用 JavaScript 解码播放,实现了在不依赖 Flash 的情况下播放 FLV 视频流。

技术优势

  • 兼容性强:支持主流浏览器 (Chrome、Firefox、Safari 等)
  • 低延迟:适合直播场景,延迟通常在 1-3 秒
  • 广泛应用:很多现有的视频平台和直播系统仍在使用 FLV 格式

实现代码

html 复制代码
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>HTTP-FLV播放器</title>
    <script src="https://cdn.jsdelivr.net/npm/flv.js@1.6.2/dist/flv.min.js"></script>
</head>
<body>
    <h1>HTTP-FLV播放器</h1>
    <video id="videoElement" controls width="800"></video>
    <div>
        <button id="playButton">点击播放</button>
    </div>
    <p>状态: <span id="status">初始化...</span></p>

    <script>
        const video = document.getElementById('videoElement');
        const statusElement = document.getElementById('status');
        const playButton = document.getElementById('playButton');
        let flvPlayer = null;

        if (flvjs.isSupported()) {
            statusElement.textContent = '准备就绪,请点击播放按钮';
            
            playButton.addEventListener('click', () => {
                if (!flvPlayer) {
                    flvPlayer = flvjs.createPlayer({
                        type: 'flv',
                        url: 'http://127.0.0.1:8080/live/stream.flv',
                        isLive: true
                    });
                    
                    flvPlayer.attachMediaElement(video);
                    flvPlayer.load();
                    
                    flvPlayer.on(flvjs.Events.LOADING_COMPLETE, () => {
                        statusElement.textContent = '加载完成';
                    });
                    
                    flvPlayer.on(flvjs.Events.ERROR, (errType, errDetail) => {
                        statusElement.textContent = `错误: ${errType} - ${errDetail}`;
                    });
                }
                
                video.play().catch(e => {
                    statusElement.textContent = `播放错误: ${e.message}`;
                });
                
                playButton.style.display = 'none';
            });
        } else {
            statusElement.textContent = '浏览器不支持FLV播放';
            playButton.style.display = 'none';
        }
    </script>
</body>
</html>
相关推荐
w2sfot5 小时前
【JS加密在线】jsjiami.online(让JavaScript 更安全!)
开发语言·javascript·安全
Wang's Blog5 小时前
Java 项目部署之 Docker工具快速入门: Docker 是什么以及它如何解决部署环境问题
java·开发语言·docker
老木避暑研究所5 小时前
从原始数据到洞察:一次完整的避暑房环境数据采集、清洗与可视化分析
java·开发语言
怪奇云呼军5 小时前
教育试听预约后没到课,闪电智能 Voice Agent 如何做分层回访?
人工智能·python·算法·云计算·音视频
程序喵大人5 小时前
【C++入门】编译链接模型 - 05 ODR 为什么会让重复定义变成工程炸点
开发语言·c++·编译链接·odr
weixin199701080166 小时前
《淘宝TOP API:落地方案、接口边界与业务踩坑 —— 聚石塔内外价差 10 倍的真相》(附 Python 源码)
开发语言·python
前端 贾公子6 小时前
LangGraph == 图的状态(State)管理 (上)
java·开发语言·数据库
xuxigifxfh6 小时前
牛客:HJ170 01序列
java·开发语言·算法·华为机考
朝朝辞暮i6 小时前
C++ 第 33 课:事件循环——spin() 到底在干什么
开发语言·c++·算法
做萤石二次开发的哈哈6 小时前
带摄像头的号角怎么对接?从音视频对讲链路到音频参数配置的实施要点
物联网·音视频·语音对讲·萤石开放平台·蓝海aiot一站式工作台·语音喊话·园区广播