跳转到内容

HTTP-FLV 协议

HTTP-FLV 是将 FLV 音视频数据通过 HTTP 长连接传输的协议。相比 HLS,HTTP-FLV 拥有更低的延迟;相比 RTMP,它使用标准 HTTP 端口,对防火墙和 CDN 更加友好。

属性
传输层HTTP(共享引擎 HTTP 端口)
推流❌ 不支持
拉流✅ 支持
延迟1-3 秒
Feature Flagflv
Cargo.toml
[features]
flv = ["dep:plugin-flv"]
flv:
enable: true
配置项类型默认值说明
enablebooltrue是否启用 FLV 插件
http://host:port/flv/{streamPath}.flv
  • {streamPath}:流路径,例如 live/test
  • .flv 后缀可选

示例:

http://localhost:8080/flv/live/test.flv
http://localhost:8080/flv/live/test

FLV 插件同时支持 WebSocket 方式传输 FLV 数据,适用于浏览器端播放:

ws://host:port/flv/{streamPath}.flv
Terminal window
ffplay http://localhost:8080/flv/live/test.flv
Terminal window
# 拉取 HTTP-FLV 流并保存为文件
ffmpeg -i http://localhost:8080/flv/live/test.flv -c copy output.flv
# 拉取并转封装为 MP4
ffmpeg -i http://localhost:8080/flv/live/test.flv -c copy output.mp4

在浏览器中可以使用 flv.jsmpegts.js 播放 HTTP-FLV 流:

<script src="https://cdn.jsdelivr.net/npm/mpegts.js/dist/mpegts.js"></script>
<video id="player" controls></video>
<script>
if (mpegts.isSupported()) {
const player = mpegts.createPlayer({
type: 'flv',
url: 'http://localhost:8080/flv/live/test.flv',
isLive: true,
});
player.attachMediaElement(document.getElementById('player'));
player.load();
player.play();
}
</script>

WebSocket-FLV 方式:

const player = mpegts.createPlayer({
type: 'flv',
url: 'ws://localhost:8080/flv/live/test.flv',
isLive: true,
});

FLV 插件支持将流录制为 FLV 文件:

Terminal window
# 开始录制
curl -X POST http://localhost:8080/flv/record/start/live/test
# 停止录制
curl -X POST http://localhost:8080/flv/record/stop/live/test
# 查看录制列表
curl http://localhost:8080/flv/record/list
# 查看录制状态
curl http://localhost:8080/flv/record/status/live/test

HTTP-FLV 支持以下音频编码格式:

编码说明
AAC标准支持
G.711A支持(安防监控常用)
G.711U支持(安防监控常用)
Terminal window
# 1. 通过 RTMP 推流
ffmpeg -re -i input.mp4 -c copy -f flv rtmp://localhost:1935/live/test
# 2. 通过 HTTP-FLV 拉流播放
ffplay http://localhost:8080/flv/live/test.flv

联系我们

微信公众号:不卡科技 微信公众号二维码
腾讯频道:流媒体技术 腾讯频道二维码
QQ 频道:p0qq0crz08 QQ 频道二维码
QQ 群:751639168 QQ 群二维码