好的,我给你整理一份 flv.js 的完整使用指南与示例,从基础到进阶,适合网页播放 FLV 视频流(主要用于 HTTP-FLV / HLS 的前端播放)。
1. flv.js 简介
flv.js是一个纯前端 JavaScript FLV 播放库,基于 Media Source Extensions (MSE) 实现播放。- 特点:
- 支持 HTTP-FLV 流式播放
- 纯前端,不依赖 Flash
- 可在 Chrome/Firefox/Edge 等现代浏览器播放 FLV
- 支持直播和点播
官网/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();
}
解释:
type: 'flv':指定 FLV 类型url:HTTP-FLV 视频地址attachMediaElement(videoElement):绑定 HTML5<video>标签load():加载视频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();
参数说明:
isLive: true→ 开启直播模式,禁用缓存和预加载url→ FLV 直播流 HTTP 地址
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);
});
常用事件:
LOADING_COMPLETE→ 数据加载完成ERROR→ 播放错误MEDIA_INFO→ 视频音频信息STALLED→ 播放被阻塞BUFFER_FLUSH→ 缓冲清空
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. 注意事项
- 浏览器支持:
- 仅支持 MSE 的浏览器(Chrome、Firefox、Edge 等)
- Safari 对 MSE 的支持不完善,需要 HLS 或其他方式
- 跨域问题:
- FLV 源必须支持 CORS,否则浏览器会报错
Access-Control-Allow-Origin: *或你的域名
- HTTPS 与 HTTP-FLV 混用:
- 页面 HTTPS → FLV URL 也必须 HTTPS,否则会被浏览器阻止
- 性能优化:
- 直播流可开启
isLive和enableStashBuffer - 小窗口播放可降低分辨率或帧率
- 直播流可开启