javacv处理rtsp流,抽帧,转hls流,播放视频

这篇具有很好参考价值的文章主要介绍了javacv处理rtsp流,抽帧,转hls流,播放视频。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

整体项目结构:

opencvframeconverter,音视频

pom文件引入依赖:

<dependencies>
    <dependency>
        <groupId>org.bytedeco</groupId>
        <artifactId>javacv-platform</artifactId>
        <version>1.5.7</version>
    </dependency>
</dependencies>

1.播放视频 video类:

import org.bytedeco.javacv.CanvasFrame;
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.OpenCVFrameConverter;

import javax.swing.*;

public class Video {
    public static void main(String[] args) {
        FFmpegFrameGrabber grabber = null;
        try {
            String file = "rtsp://admin:Zjlab@2022@10.0.108.100:554/Streaming/Channels/101";
            grabber = FFmpegFrameGrabber.createDefault(file);
            grabber.setOption("rtsp_transport", "tcp"); // 使用tcp的方式,不然会丢包很严重
            grabber.setImageWidth(1280);
            grabber.setImageHeight(720);
            System.out.println("grabber start");
            grabber.start();

//1.播放视频

            CanvasFrame canvasFrame = new CanvasFrame("摄像机");
            canvasFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            canvasFrame.setAlwaysOnTop(true);
            OpenCVFrameConverter.ToMat converter = new OpenCVFrameConverter.ToMat();
            while (true) {
                Frame frame = grabber.grabImage();
                canvasFrame.showImage(frame);
            }

        } catch (Exception e) {
            System.out.println(e);
        } finally {

        }
    }
}

效果展示:

opencvframeconverter,音视频

 

2.转换hls流

import org.bytedeco.ffmpeg.global.avcodec;
import org.bytedeco.ffmpeg.global.avutil;
import org.bytedeco.javacv.*;

import java.io.IOException;

public class RtspTransform {

    public static void main(String[] args) throws IOException {
        String rtspUrl="rtsp://admin:Zjlab@2022@10.0.108.100:554/Streaming/Channels/101";
        String hlsUrl="D:\\code\\temp\\hls\\baibing.m3u8";
        RtspTransform.convertMediaToM3u8ByHttp(rtspUrl,
               hlsUrl ,"5",20);
    }


    public static void convertMediaToM3u8ByHttp(String inputStream, String m3u8Url, String hls_time,int maxSize) throws IOException {

        avutil.av_log_set_level(avutil.AV_LOG_INFO);
        FFmpegLogCallback.set();

        FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(inputStream);
        grabber.start();

        FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(m3u8Url, grabber.getImageWidth(), grabber.getImageHeight(), grabber.getAudioChannels());

        recorder.setFormat("hls");
        recorder.setOption("hls_time", hls_time);
        recorder.setOption("hls_list_size", maxSize-1+"");
        recorder.setOption("hls_flags", "delete_segments");
        recorder.setOption("hls_delete_threshold", "1");
        recorder.setOption("hls_segment_type", "mpegts");


        // http属性
        recorder.setOption("method", "POST");

        recorder.setFrameRate(25);
        recorder.setGopSize(2 * 25);
        recorder.setVideoQuality(1.0);
        recorder.setVideoBitrate(10 * 1024);
        recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);
        recorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC);
        recorder.start();

        Frame frame;
        while ((frame = grabber.grabImage()) != null) {
            try {
                recorder.record(frame);
            } catch (FrameRecorder.Exception e) {
                e.printStackTrace();
            }
        }
        recorder.setTimestamp(grabber.getTimestamp());
        recorder.close();
        grabber.close();
    }

}

效果展示

opencvframeconverter,音视频

 

3.抽帧

import org.bytedeco.javacv.FFmpegFrameGrabber;

import javax.imageio.ImageIO;
import java.io.File;

public class FrameExtract {
    public static void main(String[] args) {
        FFmpegFrameGrabber grabber = null;
        try {
           String file = "rtsp://admin:Zjlab@2022@10.0.108.100:554/Streaming/Channels/101";
            grabber = FFmpegFrameGrabber.createDefault(file);
            grabber.setOption("rtsp_transport", "tcp"); // 使用tcp的方式,不然会丢包很严重
            grabber.setImageWidth(1280);
            grabber.setImageHeight(720);
            System.out.println("grabber start");
            grabber.start();

//2.帧截图
            int i = 0;
            while (i < 1000) {
                File outPut = new File("images/" + i + ".jpeg");
                org.bytedeco.javacv.Frame frame = grabber.grabImage();
                if (frame != null) {
                    ImageIO.write(OpencvUtil.FrameToBufferedImage(frame), "jpeg", outPut);
                    System.out.println("图片已保存");
                    Thread.sleep(1000);
                    i++;
                }

            }
            grabber.stop();
            grabber.release();
        } catch (Exception e) {
            System.out.println(e);
        } finally {

        }
    }
}

效果:opencvframeconverter,音视频

工具类代码:

import org.bytedeco.javacv.Java2DFrameConverter;

import java.awt.image.BufferedImage;

public class OpencvUtil {

    public static BufferedImage FrameToBufferedImage(org.bytedeco.javacv.Frame frame) {
        Java2DFrameConverter converter = new Java2DFrameConverter();
        BufferedImage bufferedImage = converter.getBufferedImage(frame);
//      bufferedImage=rotateClockwise90(bufferedImage);
        return bufferedImage;
    }

    /**
     * 处理图片,将图片旋转90度。
     */
    public static BufferedImage rotateClockwise90(BufferedImage bi) {
        int width = bi.getWidth();
        int height = bi.getHeight();
        BufferedImage bufferedImage = new BufferedImage(height, width, bi.getType());
        for (int i = 0; i < width; i++)
            for (int j = 0; j < height; j++)
                bufferedImage.setRGB(j, i, bi.getRGB(i, j));
        return bufferedImage;
    }
}

 文章来源地址https://www.toymoban.com/news/detail-535660.html

到了这里,关于javacv处理rtsp流,抽帧,转hls流,播放视频的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JAVA实现H264视频流推送到RTSP、RTMP服务----JavaCV

    前提: 1.准备好rtsp、rtmp服务 2.准备好视频流接收程序 基本思路是:启动两个线程,线程1接收视频流,线程2使用JavaCV将视频流推送到RTSP、RTMP服务,两者之间使用管道流进行通信。线程2接收到视频流后的具体操作:启动grabber接收视频流并捕获视频帧,然后启动recoder将捕获的

    2024年02月11日
    浏览(45)
  • 使用JavaCV和Spring Boot搭建HTTP-FLV直播服务:实时播放RTSP、RTMP和桌面投屏画面

    使用JavaCV和Spring Boot搭建HTTP-FLV直播服务:实时播放RTSP、RTMP和桌面投屏画面 摘要: 在本文中,我们将探讨如何使用JavaCV和Spring Boot构建一个简单的HTTP-FLV直播服务,该服务可以在浏览器中通过flv.js进行实时播放RTSP、RTMP和桌面投屏的画面。我们将介绍所需的开发环境和依赖库

    2024年01月20日
    浏览(33)
  • JAVACV 读取摄像头流将rtsp转flv 通过http-flv和flv.js播放 无插件 纯代码

    1、pom  2、摄像头类 3、服务实现  4、拉流转码 5、前端(vue) 安装flv.js   npm install --save flv.js

    2024年02月12日
    浏览(40)
  • Vue 3 + ffmpeg + wasm 实现前端视频剪辑、音频剪辑、音波展示、视频抽帧、gif抽帧、帧播放器、字幕、贴图、时间轴、素材轨道

    预览 www.bilibili.com/video/BV1YT411Y7YJ 技术栈: 💪 Vue 3、Vue-Router 4、Vite、pnpm、esbuild、TypeScript ☀️ Pinia 状态管理 🌪 Tailwind 原子css集成 💥 ffmpeg、wasm 底层音视频处理集成 功能 多轨道时间轴,支持帧缩放,时间缩放 支持多种类型轨道的添加删除 多功能轨道调节,支持音视频轨

    2024年02月11日
    浏览(36)
  • vue+hls.js播放hls视频,踩坑记录

    需要在管理后台查看直播历史视频,历史视频为hls流视频,格式为 http://xxxxxxxx.m3u8 2.界面展示原型 1.查询调取改变接口列表数据,导致播放的视频未变化? 检查发现不同页面还是重复的hls组件实例,使每个页面的hls组件实例唯一性,不复用,给组件绑定key解决

    2024年02月04日
    浏览(31)
  • VideoJS+HLS视频加密播放

            前段时间遇到一个播放视频的项目,为了防止登录的用户下载项目的视频,所以需要对视频加密,即使用户下载也不能播放;因为前端采用videojs,最后确认方案是将mp4转m3u8文件格式,来实现视频文件加密播放。下面做一下总结。         HLS(HTTP Live Streaming的缩

    2024年02月02日
    浏览(28)
  • 【视频中间件】国标(GB28181)协议接入并输出标准FLV/RTSP/HLS流

    在安防行业发展的今天,现目前很多企业单位均建设有视频管理平台,跨部门、跨系统的视频资源联网共享需求也越来越多,随着网络高速提升与发展,视频数据的互联互通共享也变得更加的便捷。目前视频平台互联最为常见的互通协议就是GB/T 28181,随着协议的不断完善及成

    2024年04月12日
    浏览(24)
  • 视频处理之视频抽帧的python脚本

    在计算机视觉研究中,处理视频的时候,往往需要将视频抽帧成图片。如果 多个视频都存放在一个文件夹里 ,并且希望抽帧出来的图片,以一个视频对应一个文件夹的形式存放,可以用以下代码,抽帧频率可自己手动修改,下面是抽所有帧的代码: 主要用到的是cv2里的 cv

    2024年02月10日
    浏览(32)
  • 视频中间件:大华IPC/NVR 主动注册协议接入并输出标准FLV/RTSP/HLS流

    大华主动注册协议是类似海康E-home、ISUP协议,也是前端设备向中心平台和服务注册的一种主动注册协议,对于前端网络无固定IP情况下对视频的联网、视频上云等场景应用尤为适用。行业主动注册标准协议还有GB28181、JTT1078等,如何实现多协议的兼容适配,并输出标准化通用

    2024年02月12日
    浏览(45)
  • 【vue Dplayer】播放hls视频流

    安装Dplayer和hls.js 准备测试流 hls测试地址:(截止2023.08.08有效) http://playertest.longtailvideo.com/adaptive/bipbop/gear4/prog_index.m3u8

    2024年02月13日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包