java抓取rtmp流的图像

Linux下JavaCv使用GPU加速(Nvidia显卡) 1.环境配置,安装显卡驱动、cudnn ​​​​​​linux上安装NVIDIA显卡驱动以及深度学习需要的cudn、cudnn、pytorch_宜城有少年的博客-优快云博客_linux安装nvidia显卡驱动 2.安装FFmpeg视频转码所需要的包 (1)安装依赖 yum install autoconf automake bzip2 cmake freetype-devel gcc gcc-c++ git libtool make mercurial pkgconfig zlib-d.. 阅读详情

最近项目都在跟摄像头打交道,对录制视频流以及抓取图片这一块做了详细的研究,由于目前的摄像头支持可见光以及红外光,之前录制可见光直播流可以见博客使用ffmpeg录制直播流,这两天由于需要对红外光通道进行图像抓取,后面用人像识别算法来识别,所以本文介绍一下如何抓取视频流图像。

方法一:使用javacv进行图像抓取
  1. 项目依赖
<dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacv</artifactId>
            <version>1.5.1</version>
        </dependency>
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>ffmpeg-platform</artifactId>
            <version>4.1.3-1.5.1</version>
        </dependency>
  1. 上代码,复制即可使用(方法参数自己稍作修改)
    /**
     * 按帧录制视频
     *
     * @param inputFile-该地址可以是网络直播/录播地址,也可以是远程/本地文件路径
     * @param outputFile                              -该地址只能是文件地址,如果使用该方法推送流媒体服务器会报错,原因是没有设置编码格式
     * @throws FrameGrabber.Exception
     * @throws FrameRecorder.Exception
     * @throws org.bytedeco.javacv.FrameRecorder.Exception
     */
    public void frameRecordImage(String inputFile, String outputFile, String imgMat, String frameRate,String imageName) throws Exception {
        avutil.av_log_set_level(avutil.AV_LOG_FATAL);
        // 获取视频源
//        FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(inputFile);
        MyFFmpegFrameGrabber grabber = new MyFFmpegFrameGrabber(inputFile);
        grabber.setOption("rtsp_transport", "tcp");
        grabber.setImageWidth(640);
        grabber.setImageHeight(360);
        grabber.setTimeout(3000);
        grabber.setFrameRate(frameRate);
        grabber.setVideoBitrate(3000000);

        Java2DFrameConverter converter = new Java2DFrameConverter();
        recordByFrame(grabber, converter, outputFile, imgMat, imageName);
    }

    private void recordByFrame(MyFFmpegFrameGrabber grabber, Java2DFrameConverter converter, String
            outputFile, String imgMat,String imageName) throws Exception {
        try {//建议在线程中使用该方法
            log.info("the code {} grab start");
            grabber.start();
            imageByframe(grabber, converter, outputFile, imgMat, imageName);
            grabber.stop();
            log.info("the code {} grab stop");
        } finally {
            if (grabber != null) {
                grabber.stop();
                log.info("the code {} grab stop");
            }
        }
    }

    private void imageByframe(MyFFmpegFrameGrabber grabber, Java2DFrameConverter converter, String outputFile, String
            imgMat,String imageName) throws IOException {
        Frame frame = grabber.grabImage();
        BufferedImage bi = converter.convert(frame);
        // 每个frameRate帧进行一次抓取
        outputFile = outputFile + SLASH + imageName + Field.DOT + imgMat;
        ImageIO.write(bi, imgMat, new File(outputFile));
    }
    
    public static void main(String[] args) {
        RecordUtil recordUtil = new RecordUtil();
        recordUtil.frameRecordImage("rtmp流地址", "图片输出路径", "图片后缀", "帧率", "图片名");
    }
方法二:使用ffmpeg进行图像抓取
  1. 首先在服务器安装ffmpeg工具,见文章Linux安装ffmpeg详细教程(超细)
  2. 上代码,复制即可用
    /**
     * @param videoFilename 红外视频流地址
     * @param imageName     图片名
     * @param outFile       图片存储路径
     * @param width:图片长
     * @param height:图片宽
     * @param hour:指定时
     * @param min:指定分
     * @param sec:指定秒
     * @param device        设备
     * @param eventTime     报警时间
     * @throws IOException
     * @throws InterruptedException
     */
    public void grabImage(String videoFilename, String imageName, String outFile, int width,
                          int height, int hour, int min, float sec, Device device, long eventTime) throws IOException, InterruptedException {
        createFile(outFile);
        ProcessBuilder processBuilder = getProcessBuilder(videoFilename, imageName, outFile, width, height, hour, min, sec);
        log.info("抓取红外图片... start");
        Process process = processBuilder.start();

        InputStream stderr = process.getErrorStream();
        InputStreamReader isr = new InputStreamReader(stderr);
        BufferedReader br = new BufferedReader(isr);

        while (br.readLine() != null) ;
        process.waitFor();
        log.info("抓取红外图片... end");

        outFile = outFile + SLASH + imageName;
        addEventHWImage(device, eventTime, outFile);

        if (br != null)
            br.close();
        if (isr != null)
            isr.close();
        if (stderr != null)
            stderr.close();
    }

    /**
     * 抓取图片ffmpeg命令
     *
     * @param videoFilename
     * @param imageName
     * @param outFile
     * @param width
     * @param height
     * @param hour
     * @param min
     * @param sec
     * @return
     */
    @NotNull
    private ProcessBuilder getProcessBuilder(String videoFilename, String imageName, String outFile, int width, int height, int hour, int min, float sec) {
        String rtmpTool = "ffmpeg";
        return new ProcessBuilder(rtmpTool, "-y",
                "-i", videoFilename, "-vframes", "1", "-ss", hour + ":" + min
                + ":" + sec, "-f", "mjpeg", "-s", width + "*" + height,
                "-an", outFile.concat(File.separator).concat(imageName));
    }
    
	public static void main(String[] args) {
        recordUtil.grabImage(liveInfraRed, eventTime + PNG_LAST, VIDEO_URL + device.getDeviceId(), 1920, 1080, 0, 0, 0, device, eventTime);
    }

两种方法自行选择
网上找到一个开放的rtmp流地址供大家测试:rtmp://58.200.131.2:1935/livetv/hunantv

java 对rtmp视频流进行截图 ffmpeg windows 下载安装ffmpeg插件,配置环境变量 ffmpeg -i rtmp://live.hkstv.hk.lxdns.com/live/hks -vframes 1 -y -f image2 -t 1 -s 600x480 /usr/a.jpg -i “rtmp..........    ”    :后接自己的地址 -y                  阅读详情

相关推荐

JavaCV之rtmp推流(FLV和M3U8)

JavaCV与FFmpegFFmpeg是一款开源的多媒体处理工具集,它包含了一系列用于处理音频、视频、字幕等多媒体数据的库和工具。JavaCV集成了FFmpeg库,使得Java开发者可以使用FFmpeg的功能,比如视频解码、编码、格式转换等。

qq_52703909的博客 2797

java 操作rtsp/rtmp视频流生成

1.部署rtsp视频流服务器 下载EasyDarwin软件EasyDarwin · GitHub解压后编辑imitate文件,然后点击EXE文件启动 2.使用代码生成rtsp视频流,并且推送到服务器中 /** * @Author bjiang * @Description //TODO 获取源 视频流 * @Date 10:29 2022/1/28 * @Version 1.0 * @Param [url] 可以为MP4视频路径,也可以为rts.

qq_30374237的博客 9292

JavaCV实战:如何用FFmpegFrameRecorder实现RTMP推流(含FLV和M3U8对比)

本文详细介绍了如何使用JavaCV的FFmpegFrameRecorder实现RTMP推流,包括环境搭建、核心代码实现及优化技巧。同时深入对比了FLV和M3U8(HLS)两种流媒体格式的技术特性与适用场景,为开发者提供全面的实战指南。

weixin_29266679的博客 431

java中使用opencv获取rtmp视频流代码编写

可以参考以下示例:import org.opencv.core.Core;import org.opencv.core.Mat;import org.opencv.videoio.VideoCapture;public class RtmpVideoStream {public static void main(String[] args) {System.loadLibrary(Core.NAT...

weixin_42596214的博客 482

javaCV推rtsp到rtmp资料整理

版权声明:eguid新博客地址:https://blog.eguid.cc;温馨提示:本博客所有原创文章均采用知识共享署名-相同方式共享 3.0 中国大陆许可协议进行许可。如有转载请注明出处和作者名! https://blog.youkuaiyun.com/eguid_1/article/details/51725970   欢迎大家积极开心的加入讨论群 群号:371249677 (点击这里进群) 一、...

do what you like && brave 8253

Unity一站式直播模块:RTMP/RTSP推流与播放全链路解析

实时音视频传输是现代应用开发中的核心技术,其核心原理在于将采集的音视频数据通过编码压缩,再经由网络协议传输,以实现低延迟、高质量的实时通信。这项技术的核心价值在于解决了跨地域实时交互的难题,广泛应用于虚拟直播、在线教育、远程协作等场景。在Unity引擎中实现这一功能,需要处理从采集、编码到网络传输的完整链路,其中RTMP和RTSP是两种关键的流媒体协议。RTMP凭借其广泛的CDN支持成为直播推流的事实标准,而RTSP则在安防监控等特定领域有重要应用。本文聚焦于Unity环境下的一站式直播模块,深入剖析其如何

weixin_34005042的博客 618

java使用ffmpeg截图rtmp直播流

1.首先安装ffmpeg工具,进入ffmpeg官网下载对应自己版本的工具并安装。 2.安装之后配置环境变量,我的是linux版本的,配置路径:/usr/local/bin/ffmpeg,安装教程可参考:https://blog.youkuaiyun.com/u014470361/article/details/90705336 3.运行命令(湖南卫视rtmp流): ffmpeg -i "rtmp://58.200.131.2:1935/livetv/hunantv" -f image2 -ss 0 -vframes 1

woshiheweigui的博客 1620

Java实现实时视频流传输(RTMP)

RTMP(Real-Time Messaging Protocol)是一种用于音频、视频和数据传输的协议,它可以提供低延迟和高可靠性的传输。在实际应用中,我们可以从摄像头或者其他视频源获取视频帧数据,并调用该方法发送到RTMP服务器。通过以上步骤,我们就完成了基于Java的实时视频流传输(RTMP)的实现。接下来,我们创建一个Java类,命名为RTMPVideoStreamer,用于实现视频流的发送功能。上述代码中的getFrameData方法用于获取视频帧数据的实现,你可以根据实际情况进行修改。

CodeNexus的博客 3978

ffmpeg对rtmp 视频流 获取截图

首选需要在本机安装ffmpeg package com.isstech.tools; import java.io.InputStreamReader; import java.io.LineNumberReader; import java.util.UUID; public class GetFrameFormVideo { public static void ...

wcuu的博客 3188

读取rtmp视频流然后推流送出去

读取rtmp视频流然后推流送出去(一),下一步结合识别。读取rtmp视频流然后推流送出去(一),下一步结合识别。读取rtmp视频流然后推流送出去(一),下一步结合识别。读取rtmp视频流然后推流送出去(一),下一步结合识别。读取rtmp视频流然后推流送出去(一),下一步结合识别。读取rtmp视频流然后推流送出去(一),下一步结合识别。读取rtmp视频流然后推流送出去(一),下一步结合识别。读取rtmp视频流然后推流送出去(一),下一步结合识别。读取rtmp视频流然后推流送出去(一),下一步结合识别。

AIOT魔法师 771

opencv可通过rtmp/rtsp获取视频流人脸识别与并截图

opencv可通过rtmp/rtsp获取视频流人脸识别与并截图,JAVA版本

javacv rtmp流读取

如何使用 JavaCV 读取 RTMP 流 在开发实时视频应用时,JavaCV 是一个非常强大的工具,它能够帮助你轻松地处理流媒体。本文将指导你如何在 Java 中使用 JavaCV 来读取 RTMP 流。首先,我们将简要概述整个流程,然后逐步讲解每个步骤,以及所需的代码示例。 流程概述 以下是将 RTMP 流读取到 Ja...

weixin_34378148的博客 303

通过rtmp/rtsp,openCV进行人脸识别并截图,Java版本

通过rtmp/rtsp,openCV进行人脸识别并截图,Java版本,简单demo,提供给需要的开发工程师。

使用javacv获取海康威视rtsp流,然后推流到nginx的rtmp

下面是一个完整的示例代码,展示了如何从海康威视设备读取RTSP流,并将其推送到Nginx的RTMP服务器。如果你还没有设置项目,请参考之前的教程。

yoguo的博客 899

智能体在车联网中的应用:第9天 核心工具链与仿真世界:SUMO交通仿真入门——从安装到构建你的第一个虚拟十字路口

摘要 SUMO是一款开源微观交通仿真工具,为车联网和自动驾驶算法开发提供高效安全的测试环境。文章详细介绍了SUMO的核心概念、安装方法及实战应用。在Ubuntu或Windows系统安装SUMO后,可通过netedit工具构建十字路口路网,包括创建节点、连接边、设置交通信号灯等步骤。随后通过编写.rou.xml文件定义车辆类型、路线和车流,实现动态交通场景模拟。SUMO支持与外部程序交互,能复现真实场景、进行极端测试和算法验证,是车联网研究的理想数字沙盘。

IT深耕十余载,大道之简 1450

基因的富集分析

通过RNA_seq差异表达分析等获得一组基因,想要进一步了解这些基因可能参与哪些生物学过程,具有哪些功能,一般就会用到基因的富集分析了。现在小麦基因注释信息已经可以获得,目前来看包括两套。一个是TGACv1,另一个就是IWGSC1.0。需要用到一个叫“clusterProfiler”的R包。下面用到的数据集来自TGACv1。1、安装source("https://bioconductor.org/b

xxxxx 1万+

java rtmp 抓包_如何通过抓包RTMP协议保存视频流为H264文件?

TSINGSEE青犀视频云-边-端三体协同的设备端RTMP推流摄像头,可以结合EasyDSS视频直播点播平台来使用,能够将摄像头推送上来的RTMP协议,进行互联网级的分发。 在此过程我们可以通过wireshark包来抓取RTMP协议包,保存传输的h264,通过分析工具确认传输的h264是否存在问题。本文我们将和大家分享一下如何通过wireshark抓包RTMP协议,保存视频流为h264文件。首先就...

weixin_42361933的博客 1108

避开期货指标常见坑:文华财经赢顺DK多空指标优化配置指南(附参数调试技巧)

本文详细解析了文华财经赢顺DK多空指标的优化配置方法,帮助交易者避开常见使用误区。通过参数个性化适配、动态调整趋势阈值和过滤假信号的三重验证,提升指标在期货交易中的准确性。附有参数调试技巧和不同市况下的配置建议,适合中高级交易者参考。

weixin_29063979的博客 433

java搭建rtmp服务器,利用docker搭建RTMP直播流服务器实现直播

一、rtmp服务器搭建环境:centos 7.*1.先安装docker(省略)2.下载docker容器docker pull alfg/nginx-rtmp3.运行容器(记得打开防火墙端口 1935和8080)docker run -it -p 1935:1935 -p 8080:80 --rm nginx-rtmp二、推流方式ok rtmp服务器 搭建成功,接下来就是推流了(这里列举三种方式)第...

weixin_35744067的博客 1512

Java:使用Java调用打印机进行打印(JPG、PDF和Word三种文件格式)

目录 一、Java的打印简介 二、Java打印实现 2.1 JPG图片文件格式打印实现 2.2 PDF文件格式打印实现 2.3 Word文件格式打印实现 2.3.1 Word文件采用jacob插件进行打印实现。 2.3.2 先将word转化为pdf文件,然后打印pdf(lz使用) 三、总结 一、Java的打印简介 在我们的实际工作中,经常需要实现打印功能。但由于历史原因,Jav...

vatxiongxiaohui的专栏 8万+

【PyTorch版本兼容性指南】如何在不同版本中正确使用torch.nn.attention

本文详细解析了PyTorch版本兼容性问题,特别是torch.nn.attention模块在不同版本中的使用差异。针对常见的ModuleNotFoundError错误,提供了三种实用解决方案:升级PyTorch版本、使用自定义实现和源码移植方案,并分享了最佳实践建议,帮助开发者有效避免兼容性问题。

weixin_29084231的博客 471

Android平台如何采集屏幕数据并推送RTMP服务器实现无纸化同屏?

我们理解的Android平台RTMP同屏,采集到数据后,无非就是实现软、硬编码,然后打包发送到RTMP服务器,播放端拉流播放即可,实际上,几乎每一步操作,都可以考虑精细化的设计和处理,实现期望的高稳定、低延迟和资源占用体验。启动APP后,先选择需要采集的分辨率(如果选原始分辨率,系统不做缩放),然后选择“启动媒体投影”,并分别启动音频播放采集、采集麦克风。需要注意的是,Android采集音频播放的audio,音频播放采集是依赖屏幕投影的,屏幕投影关闭后,音频播放也就采不到了。

大牛直播SDK 2631

RK3568平台开发系列讲解(DMA篇)DMA engine使用

DMA传输属于异步传输,在启动传输之前,slave driver需要将此次传输的一些信息(例如src/dst的buffer、传输的方向等)提交给dma engine(本质上是dma controller driver),dma engine确认okay后,返回一个描述符(由struct dma_async_tx_descriptor抽象)。DMA_PREP_PQ_DISABLE_P、DMA_PREP_PQ_DISABLE_Q、DMA_PREP_CONTINUE,PQ有关的操作,TODO。

内核笔记 1721
上一篇: docker安装mysql
下一篇: HashMap原理深入理解
_Romeo
_Romeo 优质创作者: 后端开发技术领域 优质创作者: 后端开发技术领域
博客等级 码龄8年 2万+粉丝 104原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Romeo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值