IO(13) : 网络视频流截图

参考 : 

        使用xuggler获取视频的截图/快照的正确方法是什么? - VoidCC

        xuggle工具获取jar包_xuggle-xuggler-5.2.jar下载_阳逗逗的博客-CSDN博客

 

maven仓库地址 : https://mvnrepository.com/artifact/xuggle/xuggle-xuggler/5.4

 maven坐标

<!-- https://mvnrepository.com/artifact/xuggle/xuggle-xuggler -->
<dependency>
    <groupId>xuggle</groupId>
    <artifactId>xuggle-xuggler</artifactId>
    <version>5.4</version>
</dependency>

 jar下载 https://www.dcm4che.org/maven2/xuggle/xuggle-xuggler/5.4/xuggle-xuggler-5.4.jar

maven导入本地

        <dependency>
            <groupId>xuggle</groupId>
            <artifactId>xuggle-xuggler</artifactId>
            <version>5.4</version>
            <scope>system</scope>
            <systemPath>${basedir}/lib/xuggle-xuggler-5.4.jar</systemPath>
        </dependency>

处理逻辑 


import com.xuggle.mediatool.IMediaReader;
import com.xuggle.mediatool.MediaListenerAdapter;
import com.xuggle.mediatool.ToolFactory;
import com.xuggle.mediatool.event.IVideoPictureEvent;
import com.xuggle.xuggler.Global;
import lombok.Data;
import lombok.NoArgsConstructor;

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

@Data
@NoArgsConstructor
public class ScreenshotUtil extends MediaListenerAdapter {
    public static final double SECONDS_BETWEEN_FRAMES = 1;
    public static final long MICRO_SECONDS_BETWEEN_FRAMES = (long) (Global.DEFAULT_PTS_PER_SECOND * SECONDS_BETWEEN_FRAMES);

    private int mVideoStreamIndex = -1;
    private Boolean takeImage = true;

    // 截图文件存放地址 .png
    private String filePath;
    // 视频流地址
    private String videoUrl;

    public ScreenshotUtil(String filePath, String videoUrl) {
        this.filePath = filePath;
        this.videoUrl = videoUrl;
    }

    public static void main(String[] args) {
        new ScreenshotUtil("F:\\work\\test\\t2\\222.png", "http://xxxxx.flv").handle();
    }

    public void handle() {
        IMediaReader reader = ToolFactory.makeReader(this.videoUrl);
        reader.setBufferedImageTypeToGenerate(BufferedImage.TYPE_3BYTE_BGR);
        reader.addListener(this);
        while (reader.readPacket() == null) {
            do {
                if (!this.takeImage) {
                    return;
                }
            } while (false);
        }
        reader.close();
    }


    public void onVideoPicture(IVideoPictureEvent event) {
        try {
            if (event.getStreamIndex() != mVideoStreamIndex) {
                if (-1 == mVideoStreamIndex) {
                    mVideoStreamIndex = event.getStreamIndex();
                } else {
                    return;
                }
            }
            //if (event.getTimeStamp() > MICRO_SECONDS_BETWEEN_FRAMES && takeImage) {
            File file = new File(this.getFilePath());
            ImageIO.write(event.getImage(), "png", file);
            takeImage = false;
            //}
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
} 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值