概述
使用FFMPEG对海康相机视频进行读取,重新编码后再进行推流,推到mediamtx,再通过网页播放器或其他客户端拉取视频并播放
下载并安装FFMPEG
随便找的一个安装教程:https://blog.csdn.net/weixin_44704985/article/details/109532224
安装后需配置到环境变量
下载并安装mediamtx
https://github.com/bluenviron/mediamtx/releases
要是打不开自己想办法
开启mediamtx
如果不进行配置文件修改,使用默认配置,双击mediamtx.exe打开执行文件,将有以下效果
使用FFMPEG进行视频推流
打开cmd 运行以下命令
ffmpeg -re -i 你的视频.mp4 -vcodec libvpx -rtsp_transport tcp -f rtsp rtsp://127.0.0.1:8554/stream/h1
这句的含义是:输入流为你指定的视频,可以是本地的文件,也可以是海康的rtsp视频流,如
ffmpeg -re -i rtsp://admin:hik12345@10.16.4.25:554/Streaming/Channels/101 -vcodec libvpx -rtsp_transport tcp -f rtsp rtsp://127.0.0.1:8554/stream/h1
输出流是 rtsp://127.0.0.1:8554/stream
将原视频格式重新编码为libvpx(p8)格式
将会是以下效果
而此时查看mediamtx执行窗口会有以下效果
使用http方式播放视频
在网页中运行以下url
http://127.0.0.1:8889/stream/h1
如果不出意外现在能够进行视频播放,下面进行一些补充讲解。
mediamtx部分
我们可以看见,开启软件后会对RTSP、RTMP、HLS、WebRTC、SRT这几种协议类型输入流进行监听
可以通过ffmpeg将视频推送到对应协议的端口
使用FFMPEG进行视频推流(重点)
ffmpeg -re -i 你的视频.mp4 -vcodec libvpx -rtsp_transport tcp -f rtsp rtsp://127.0.0.1:8554/stream/h1
编码时可以设置参数,vcodec:视频编码格式,acodec:音频编码格式
格式有很多,可以使用以下方式查看具体编码格式
ffmpeg -encoders
这里我把输入视频转换为libvpx格式是因为我想直接使用http方式播放视频,而WebRTC只能支持几种格式视频播放
如果你想同时推送多个相机或视频源,可以修改输出路径,如:
rtsp://127.0.0.1:8554/stream/h1
rtsp://127.0.0.1:8554/stream/h2
rtsp://127.0.0.1:8554/stream/h3
。。。
如果是需要推送其他协议视频,请参考ffmpeg的命令行说明
文末
如果上面都成功了,那么现在你需要做以下几件事:
- 学习mediamtx的配置文件中各项内容的含义
- 学习FFMPEG的各命令以及含义
- 多进行尝试
请一定要耐心,最好的方式是浏览各平台官网
关于Java执行FFMPEG推送命令
看了一些文章,最终在作者那找到了答案 https://github.com/kokorin/Jaffree
- 打开仓库,在仓库中搜索 com.github.kokorin.jaffree,并引入依赖
https://developer.aliyun.com/mvn/guide文章来源:https://www.toymoban.com/news/detail-723560.html
2. 示例代码文章来源地址https://www.toymoban.com/news/detail-723560.html
public class Test {
public static void main(String[] args) {
final AtomicLong durationMillis = new AtomicLong();
//异步方式执行,别忘了把ffmpeg加入到环境变量
FFmpegResultFuture fFmpegResultFuture = FFmpeg.atPath()
.addInput(
UrlInput.fromUrl("G:\\迅雷下载\\电影\\黑社会.2005.BD1080p.国粤双语中字.mp4")
)
.addArguments("-vcodec", "libvpx")
.addArguments("-rtsp_transport", "tcp")
.addArguments("-f", "rtsp")
.addOutput(UrlOutput.toUrl("rtsp://127.0.0.1:8554/stream/h1"))
.executeAsync();
try {
Thread.sleep(1000 * 60);
} catch (InterruptedException e) {
e.printStackTrace();
}
//释放资源
fFmpegResultFuture.graceStop();
System.out.println("Exact duration: " + durationMillis.get() + " milliseconds");
}
}
到了这里,关于FFMPEG+mediamtx 实现海康相机视频播放的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!