菜鸟-创作你的创作

flv.js的具体使用

好的,我给你整理一份 flv.js 的完整使用指南与示例,从基础到进阶,适合网页播放 FLV 视频流(主要用于 HTTP-FLV / HLS 的前端播放)。


1. flv.js 简介

官网/GitHub:https://github.com/bilibili/flv.js


2. 安装

① CDN 引入

<script src="https://cdn.jsdelivr.net/npm/flv.js/dist/flv.min.js"></script>

② NPM 安装

npm install flv.js

import flvjs from 'flv.js';


3. 基本使用

HTML:

<video id="videoElement" controls width="640" height="360"></video>

JavaScript:

if (flvjs.isSupported()) {
    var videoElement = document.getElementById('videoElement');
    var flvPlayer = flvjs.createPlayer({
        type: 'flv',
        url: 'https://example.com/live/stream.flv'  // HTTP-FLV URL
    });
    flvPlayer.attachMediaElement(videoElement);
    flvPlayer.load();
    flvPlayer.play();
}

解释:


4. 直播 FLV 示例

var flvPlayer = flvjs.createPlayer({
    type: 'flv',
    isLive: true,                // 表示这是直播流
    url: 'https://example.com/live/stream.flv'
});

flvPlayer.attachMediaElement(document.getElementById('videoElement'));
flvPlayer.load();
flvPlayer.play();

参数说明:


5. 事件监听

flv.js 提供丰富事件接口:

flvPlayer.on(flvjs.Events.LOADING_COMPLETE, function() {
    console.log('视频加载完成');
});

flvPlayer.on(flvjs.Events.ERROR, function(type, detail, info) {
    console.error('播放错误', type, detail, info);
});

flvPlayer.on(flvjs.Events.MEDIA_INFO, function(mediaInfo) {
    console.log('媒体信息', mediaInfo);
});

常用事件:


6. 进阶使用

① 自定义缓冲和缓存策略

var flvPlayer = flvjs.createPlayer({
    type: 'flv',
    url: 'https://example.com/live/stream.flv',
    isLive: true,
    cors: true,
    withCredentials: false,
    // 缓冲大小和策略
    // lazyLoad: false,
    // lazyLoadMaxDuration: 3*60,
    // enableStashBuffer: true
});

② 销毁播放器

flvPlayer.unload();
flvPlayer.detachMediaElement();
flvPlayer.destroy();


7. Vue / React 中使用示例

React

import React, { useEffect, useRef } from 'react';
import flvjs from 'flv.js';

export default function FlvPlayer({ url }) {
    const videoRef = useRef(null);

    useEffect(() => {
        if (flvjs.isSupported()) {
            const player = flvjs.createPlayer({
                type: 'flv',
                url: url
            });
            player.attachMediaElement(videoRef.current);
            player.load();
            player.play();

            return () => {
                player.destroy();
            };
        }
    }, [url]);

    return <video ref={videoRef} controls width="640" height="360"></video>;
}


8. 注意事项

  1. 浏览器支持:
    • 仅支持 MSE 的浏览器(Chrome、Firefox、Edge 等)
    • Safari 对 MSE 的支持不完善,需要 HLS 或其他方式
  2. 跨域问题:
    • FLV 源必须支持 CORS,否则浏览器会报错
    • Access-Control-Allow-Origin: * 或你的域名
  3. HTTPS 与 HTTP-FLV 混用:
    • 页面 HTTPS → FLV URL 也必须 HTTPS,否则会被浏览器阻止
  4. 性能优化:
    • 直播流可开启 isLiveenableStashBuffer
    • 小窗口播放可降低分辨率或帧率
退出移动版