1. 前言
由于项目需要实现 视频识别图像分类,网上能用的视频流又很少,所以需要自己搭建视频源进行本地测试。
本文记录在 Windows 以及 Linux 系统分别创建 RTSP、RTMP 视频源 进行测试。
2. 准备
2.1 视频
我们要准备好一份 mp4 格式的视频,循环播放形成一个持续进行的视频流。
项目需求原因,而且我对于视频处理软件之类的八窍已通七窍,所以这里我是用了一个 图片在线生成视频 的网站 https://clideo.com/video-maker
可以选取多张图片(最好不要过百)、每张图片的时间间隔、是否渐入渐出、设置背景音乐,生成视频的过程还是比较慢的,需要耐心等待。
2.2 软件/包
2.2.1 VLC 播放器
VLC是有 Windows、Linux、MacOS、Android等版本的。
但是我的Linux服务器系统是纯命令行的,所以只使用了 Windows 版本的进行测试,操作很简单,下载安装即可。
它的使用也是比较简单的,点击媒体 -> 打开网络串流 -> 输入url -> 点击播放 即可。
2.2.2 FFMPEG
- Windows 版本的可以去 https://www.gyan.dev/ffmpeg/builds/ 下载,使用 7-Zip 解压,将bin目录添加到环境变量 Path 中。
- Linux 根据系统不同,可以直接使用 apt-get 或者 yum 安装。
可以命令行输入 ffmpeg -version 确认是否安装成功。
ffmpeg 的部分参数:
- -i: 设定输入流
- -f 设定输出格式(format)
- -stream_loop 循环几次,-1为无限循环
- -re 以本机帧速率读取输入,相当于设置 -readrate 1
- -c 编解码器, copy表示使用跟原视频一样的视频编解码器
具体的参数意义可以参考FFMPEG 官方文档。
3. 实现
3.1 RTSP
这个在网上找了很多的解决方案,这里只介绍最后使用的方案。
也就是Github上的 rtsp-simple-server, 我们可以直接阅读它的 README.md 文件。
这里也会把部分内容粘贴出来.
3.1.1 Windows
我们直接下载最新的Windows release包。
下载之后解压,有一个可执行文件,我们直接运行即可,这样本地的rtsp服务器就已经启动了。
可以看到,这个工具是支持 RTSP、RTMP、HLS的,只是端口不同,需要注意。
之后,再使用 FFMPEG 推送视频流到服务器,使用 stream_loop 让视频循环播放。
ffmpeg -re -stream_loop -1 -i test.mp4 -c copy -f rtsp rtsp://localhost:8554/mystream
执行上面的命令后,可以在终端窗口看到,视频流稳定推送,以及推送的帧、帧率、时间、速度等信息:
而在另一边,RTSP服务器也收到了FFMPEG的推送,从打印的日志可以看到 类别为 RTSP,路径为 mystream。
这样视频流就创建好了,url为 rtsp://localhost:8554/mystream (注意这里 rtsp://localhost:8554/ 是固定的,端口为rtsp服务器的端口号,可以在 yml 文件中修改,后面的 mystream 由自己设置)。
我们可以下载 VLC播放器 测试我们的视频流。
3.1.2 Linux
和Windows端相同,只不过下的包不一样,需要下载对应架构的Linux版本的release包,我的服务器为 x86_64 的,所以选择 amd64 版本。
3.2 RTMP
RTMP 视频流的创建与 RTSP 基本相同,只有 ffmpeg 命令需要修改,改为以下形式:
ffmpeg -re -stream_loop -1 -i test.mp4 -c copy -f flv rtmp://localhost:1935/mystream
修改 格式为 hlv,修改url为 rtmp协议,端口为 1935