FFMPEG+mediamtx 实现海康相机视频播放

FFMPEG+mediamtx 实现海康相机视频播放

    • 概述
    • 下载并安装FFMPEG
    • 下载并安装mediamtx
    • 开启mediamtx
    • 使用FFMPEG进行视频推流
    • 使用http方式播放视频
    • mediamtx部分
    • 使用FFMPEG进行视频推流(重点)
    • 文末
    • 关于Java执行FFMPEG推送命令

概述

使用FFMPEG对海康相机视频进行读取,重新编码后再进行推流,推到mediamtx,再通过网页播放器或其他客户端拉取视频并播放

下载并安装FFMPEG

随便找的一个安装教程:https://blog.csdn.net/weixin_44704985/article/details/109532224
在这里插入图片描述
安装后需配置到环境变量
在这里插入图片描述

下载并安装mediamtx

https://github.com/bluenviron/mediamtx/releases
要是打不开自己想办法
FFMPEG+mediamtx 实现海康相机视频播放_第1张图片

开启mediamtx

如果不进行配置文件修改,使用默认配置,双击mediamtx.exe打开执行文件,将有以下效果
FFMPEG+mediamtx 实现海康相机视频播放_第2张图片

使用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:[email protected]: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)格式

将会是以下效果
FFMPEG+mediamtx 实现海康相机视频播放_第3张图片
而此时查看mediamtx执行窗口会有以下效果
FFMPEG+mediamtx 实现海康相机视频播放_第4张图片

使用http方式播放视频

在网页中运行以下url
http://127.0.0.1:8889/stream/h1
FFMPEG+mediamtx 实现海康相机视频播放_第5张图片
如果不出意外现在能够进行视频播放,下面进行一些补充讲解。

mediamtx部分

FFMPEG+mediamtx 实现海康相机视频播放_第6张图片
我们可以看见,开启软件后会对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

FFMPEG+mediamtx 实现海康相机视频播放_第7张图片
这里我把输入视频转换为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的命令行说明

文末

如果上面都成功了,那么现在你需要做以下几件事:

  1. 学习mediamtx的配置文件中各项内容的含义
  2. 学习FFMPEG的各命令以及含义
  3. 多进行尝试

请一定要耐心,最好的方式是浏览各平台官网

关于Java执行FFMPEG推送命令

看了一些文章,最终在作者那找到了答案 https://github.com/kokorin/Jaffree

  1. 打开仓库,在仓库中搜索 com.github.kokorin.jaffree,并引入依赖

https://developer.aliyun.com/mvn/guide

FFMPEG+mediamtx 实现海康相机视频播放_第8张图片
2. 示例代码

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,数码相机,音视频)