当前位置:   article > 正文

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

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

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

  1. <dependency>
  2. <groupId>org.bytedeco</groupId>
  3. <artifactId>ffmpeg</artifactId>
  4. <version>6.0-1.5.9</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.bytedeco</groupId>
  8. <artifactId>javacv-platform</artifactId>
  9. <version>1.5.9</version>
  10. </dependency>

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

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

  1. import lombok.extern.slf4j.Slf4j;
  2. import org.bytedeco.javacv.FFmpegFrameGrabber;
  3. import org.bytedeco.javacv.Frame;
  4. import org.bytedeco.javacv.FrameGrabber;
  5. import org.bytedeco.javacv.Java2DFrameConverter;
  6. import javax.imageio.ImageIO;
  7. import java.awt.image.BufferedImage;
  8. import java.io.File;
  9. import java.io.IOException;
  10. @Slf4j
  11. public class ExtractFlvFirstFrame {
  12. /**
  13. * 获取指定帧数的封面图片
  14. *
  15. * @param filePath flv地址(eg:http://ip:port/xxx.flv)
  16. */
  17. private static BufferedImage getBufferedImageByFrame(String filePath) throws IOException {
  18. FFmpegFrameGrabber grabber = FFmpegFrameGrabber.createDefault(filePath);
  19. return getBufferedImageByFrame(grabber);
  20. }
  21. private static BufferedImage getBufferedImageByFrame(FFmpegFrameGrabber grabber) throws FrameGrabber.Exception {
  22. grabber.start();
  23. Frame frame;
  24. frame = grabber.grabImage();
  25. Java2DFrameConverter converter = new Java2DFrameConverter();
  26. BufferedImage buffer = converter.getBufferedImage(frame);
  27. grabber.stop();
  28. return buffer;
  29. }
  30. /**
  31. * @param flvPath
  32. * @param imgPath 文件存储全路径
  33. * @throws Exception
  34. */
  35. public static File getFlvImg(String flvPath, String imgPath) {
  36. try {
  37. bufferedImageToByteArray(getBufferedImageByFrame(flvPath), imgPath);
  38. return new File(imgPath);
  39. } catch (IOException e) {
  40. e.printStackTrace();
  41. log.error("通过视频流地址“" + flvPath + "”生成图片“" + imgPath + "”失败");
  42. }
  43. return null;
  44. }
  45. /**
  46. * 将BufferedImage转换为byte[]
  47. *
  48. * @param image
  49. * @param imgPath 文件存储全路径
  50. * @return
  51. */
  52. private static void bufferedImageToByteArray(BufferedImage image, String imgPath) throws IOException {
  53. ImageIO.write(image, "jpg", new File(imgPath));
  54. }
  55. }

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/216367
推荐阅读
相关标签
  

闽ICP备14008679号