java获取flv视频直播流地址的起始图片

本文介绍了如何通过Java代码利用FFmpeg库从FLV视频流中抓取第一帧作为图片,包括Maven依赖的管理以及创建Java工具类进行操作,同时提醒读者注意jar版本选择和项目打包后的文件大小问题。
摘要由CSDN通过智能技术生成

1. 获取图片前,首先我们需要引入相关maven依赖

<dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>ffmpeg</artifactId>
            <version>6.0-1.5.9</version>
        </dependency>
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacv-platform</artifactId>
            <version>1.5.9</version>
        </dependency>

如依赖无法正常引入时,可通过百度寻找该jar并加入本地仓库中(jar引入方式见:本地Maven仓库导入外部jar

2. 创建java工具类ExtractFlvFirstFrame.java获取图片

import lombok.extern.slf4j.Slf4j;
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.FrameGrabber;
import org.bytedeco.javacv.Java2DFrameConverter;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

@Slf4j
public class ExtractFlvFirstFrame {

    /**
     * 获取指定帧数的封面图片
     *
     * @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;
    }

    /**
     * @param flvPath
     * @param imgPath 文件存储全路径
     * @throws Exception
     */
    public static File getFlvImg(String flvPath, String imgPath) {
        try {
            bufferedImageToByteArray(getBufferedImageByFrame(flvPath), imgPath);
            return new File(imgPath);
        } catch (IOException e) {
            e.printStackTrace();
            log.error("通过视频流地址“" + flvPath + "”生成图片“" + imgPath + "”失败");
        }
        return null;
    }

    /**
     * 将BufferedImage转换为byte[]
     *
     * @param image
     * @param imgPath 文件存储全路径
     * @return
     */
    private static void bufferedImageToByteArray(BufferedImage image, String imgPath) throws IOException {
        ImageIO.write(image, "jpg", new File(imgPath));
    }

}

调用方法getFlvImg即可获得直播视频流的其实帧图,其实入参flvPath为直播的flv地址全路径,imgPath为要保存的图片的全路径(含拓展名,eg: C:/aaa/123.jpg)

注意:
jar版本请勿随意使用,另外需要注意的是该方式虽然能获取首帧的图片,但是项目打包后会非常的大。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值