利用JavaCV截取FLV图片

最近公司有个AI需求,需要从摄像头的flv流中截取几张图片(前端很简单,调用API就可以了。由于是后台任务,只能通过JavaCV来调用了)。

  • 1.pom依赖(这个依赖打包生成有点大)
  <dependency>
    <groupId>org.bytedeco</groupId>
    <artifactId>javacv-platform</artifactId>
    <version>1.5.3</version>
 </dependency>
  • 2.java代码
 /**
     * 获取指定帧数的封面图片
     *
     * @param filePath flv地址(eg:http://ip:port/xxx.flv)
     */
    private static BufferedImage getBufferedImageByFrame(String filePath) throws IOException {
        FFmpegFrameGrabber grabber = FFmpegFrameGrabber.createDefault(filePath);
        return getBufferedImageByFrame(grabber);
    }

    private static BufferedImage getBufferedImageByFrame(FFmpegFrameGrabber grabber)
            throws FrameGrabber.Exception {
        grabber.start();
        Frame frame;
        frame = grabber.grabImage();
        Java2DFrameConverter converter = new Java2DFrameConverter();
        BufferedImage buffer = converter.getBufferedImage(frame);
        grabber.stop();
        return buffer;
    }

    public static byte[] getFlvImg(String path) throws Exception {
        return bufferedImageToByteArray(getBufferedImageByFrame(path));
    }


    /**
     * 将BufferedImage转换为byte[]
     *
     * @param image
     * @return
     */
    public static byte[] bufferedImageToByteArray(BufferedImage image) throws IOException {
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        ImageIO.write(image, "jpg", os);
        return os.toByteArray();
    }

    /**
     * 上传文件
     *
     * @param data     文件数据
     * @param url      上传地址
     * @param fileName 文件名称
     * @return
     */
    public static JSONObject postFile(byte[] data, String url, String fileName) {
        RestTemplate restTemplate = new RestTemplate();
        MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<>();
        ByteArrayResource contentsAsResource = new ByteArrayResource(data) {
            @Override
            public String getFilename() {
                return fileName;
            }
        };
        paramMap.add("file", contentsAsResource);
        return restTemplate.postForObject(url, paramMap, JSONObject.class);
    }

posted @   安逸-)生活  阅读(292)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示