方案
前端:
- jsmpeg.js (连接wbesocket,绘制视频图像)
服务端(node):
- express(静态服务,接口处理)
- body-parser(处理接口接收数据)
- node-rtsp-stream-jsmpeg (下发FFmpeg指令,创建websocke服务端)
- child_process(启动shell脚本指令)
其他:
- FFmpeg(视频流转码)
- pm2(node进程守护)
- 云台控制程序(通过视频厂家提供的sdk二次开发,通过ajax调用)
zlmediakit搭建和配合ffmpeg使用
zlmediakit 是一个基于C++11的高性能运营级流媒体服务框架,可以推送各种视频,音频流。
ffmpeg 推流视频,zlmediakit 流媒体服务器经行转发,转发后的地址有多种视频格式
- zlmediakit linux 环境搭建:
这篇文章写得已经非常详细了,就不再拾人牙慧了 - ffmpeg安装:
虽然上面的搭建文档说不用安装ffmpeg,但是如果使用命令的话,肯定还是要安装的(不安装指的是在项目中调用api),这种方式只能安装低版本,高版本参考上面
1).sudo apt-get update
2).sudo apt-get install ffmpeg - 测试(;推流路径格式是:rtsp://ip/…(后面可随意命名)):
例:把test文件推到某个rtsp地址上去
ffmpeg -re -i test.mp4 -vcodec h264 -acodec aac -f rtsp -rtsp_transport tcp rtsp://ip/live/test
注意事项:
1)要推的视频路径写绝对路径;
2)推流地址格式为: rtsp://ip/…(后面可随意定义)
3)zlmediakit的默认路径是554,如果改了端口号,ip后要加上。
4)如果使用docker安装zlmediakit,那么要注意映射的端口不是554的话,端口号也得写上 - 附带推流测试地址(附带右边列表很多相关资料):
ffmpeg 推送到 zlmediakit 服务上,需要先启动 zlmediakit
进入安装目录指定文件夹,找到 MediaServer 执行文件
1 | cd /home/xxx/ZLMediaKit/release/linux/Debug/ |
ffmpeg 推流操作
1 | // rtsp推流(文件推流) |
ZIMediaKit 转发地址播放规则
1 | # ZIMediaKit支持多种流媒体协议的转换,协议转换后的播放地址 |
ffmpeg 基础
Fmpeg 是领先的多媒体框架,能够解码、编码、转码、混合、解密、流媒体、过滤和播放人类和机器创造的几乎所有东西。它支持最晦涩的古老格式,直到最尖端的格式。
简单来说可以将浏览器不支持的流转换为支持的流供页面展示.
除了视频文件,还能处理 摄像头,声卡,网络直播,电脑桌面进行数据采集
1 | -i 表示输入 a.mov |
ffplay
继承了 ffmpeg 的编解码能力,支持格式最全的播放器
1 | 播放文件,左右方向键控制快进快退,q退出 |
在安装 ffmpeg 时 本来时默认会 安装好 ffplay,ffprobe。 但是如果缺少依赖会导致安装不成功
ffplay 依赖 SDL2
1 | // 设置 ffmpeg --enable-libx264,此设置依赖x264。不然报错 libx264 not found |
5. 安装x264
1 | http://www.videolan.org/developers/x264.html,下载 |
libx264 not found
- 将使用到的库路径添加至环境变量中
export PATH=/usr/local/x264/bin:$PATH
export PATH=/usr/local/x264/include:$PATH
export PATH=/usr/local/x264/lib:$PATH
手动编译安装ffmpeg会出现的问题
在跑视频流程序或命令时出现这个问题。
跟这个报错:ffmpeg: error while loading shared libraries: libx264.so.164: cannot open shared object file: No such file or directoryffmpeg 时使用到了 libx264,而在实际的编译式安装过程中没有指定编译 libx264 参数,从而产生报错。
缺失依赖
ffmpeg 命令报错 xxxx => not found
1 | ffmpeg bin名录下 |
查找目录
1 | find /usr -name 'libavdevice.so.58' |
将 目录export 出来
1 | export LD_LIBRARY_PATH=/usr/local/lib/ |
AKStream
AKStream是一套全功能的软NVR接口平台,软NVR指的是软件定义的NVR(Network Video Recoder)。
AKStream集成了ZLMediaKit作为其流媒体服务器,AKStream支持对ZLMediaKit的集群管理(通过AKStreamKeeper-流媒体治理组件),可以将分布在不同服务器的多个ZLMediaKit集群起来,统一管理,统一调度。
AKStream生态圈开源Web管理平台
基于React的纯前端AKStream Web UI
非常简单的部署方式,非常简单的运行方式
基于.net 5和vue2
Nginx 流媒体服务器
安装 Nginx,nginx-http-flv-module插件
配置文件
1 | ... |
使用 ffmpeg 推流
1 | ffmpeg -f v4l2 -framerate 10 -i /dev/video0 -g 10 -f flv rtmp://127.0.0.1/live/wei |
播放:
RTMP协议拉流:
1 | rtmp:192.168.94.128/live/wei |
HTTL FLV 协议拉流
1 | http://192.168.94.128/test?app=live&stream=wei |

rtsp 拉流方案2
rtsp2web 是 node服务 依赖 ffmpeg
需要在服务器运行 rtsp2web ,有🕳
这个服务在 conteos 运行不了,需要找作者付费。在Ubuntu Linux就可以
版本建议 v3.1.1,新版本Ubuntu也不行
视频有水印,可以去掉https://raw.githubusercontent.com/wyf195075595/images/main/blog/image-20231102103414179.png
1
2
3
4
5// setInterval((function(){
// r.checkFree(),
// cs&&(ls.includes(decodeURIComponent(ut.exports.decode("eCUzRHctdHctNSUzQXklM0Q4MCUzQWZvbnRjb2xvciUzRHdoaXRlJTNBZm9udHNpemUlM0QzMiUzQXRleHQlM0RjbGVhciUyMHdpdGglMjBxcSUyMDQyMTM1NDUzMiUzQWJveCUzRDElM0Fib3hjb2xvciUzRGJsYWNr")))
// ||(r.destroyAllChannel(),global.process.stderr.write("***wm代码异常***,请联系作者!")))})
// ,1e3*fs);
代码
nodejs
1
2
3
4
5
6
7
8
9
10
11// index.js
let RTSP2web = require('rtsp2web');
let port=28999;
let videoSzie = '1920*1080'
new RTSP2web({
port
})前端
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no,viewport-fit=cover">
<script src="https://jsmpeg.com/jsmpeg.min.js" charset="utf-8"></script>
<title>播放rtsp</title>
</head>
<body>
<canvas id="canvas" style="width: 600px; height: 600px;"></canvas>
</body>
<script>
// var rtsp = 'rtsp://ip:554/live/test'
window.onload = () => {
new JSMpeg.Player("ws://ip:28999/rtsp?url="+btoa(rtsp), {
canvas: document.getElementById("canvas"),
autoplay: true
})}
</script>
</html>
nginx + nginx-rtmp-module
详情见 音视频 笔记
- 本文作者: 王不留行
- 本文链接: https://wyf195075595.github.io/2023/03/27/frontend/plugins/rtsp/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!

LiYongci
衔蝉
哈希米