人工智能Java SDK:按帧录制本机摄像头视频(边预览边录制)

人工智能Java SDK:按帧录制本机摄像头视频(边预览边录制),第1张

人工智能Java SDK:按帧录制本机摄像头视频(边预览边录制)

按帧录制本机摄像头视频(边预览边录制)

运行例子
  1. 首先下载例子代码
git clone https://github.com/mymagicpower/AIAS.git
  1. 导入examples项目到IDE中:
cd live_stream_sdks/camera2mp4_sdk
  1. 运行例子代码:Camera2MP4
package me.aias.example;

import org.bytedeco.javacv.*;
import org.bytedeco.javacv.frameRecorder.Exception;
import org.bytedeco.opencv.opencv_core.IplImage;

import javax.swing.*;
import java.util.EnumSet;


public class Camera2MP4 {

    public static void main(String[] args)
            throws Exception,
            frameGrabber.Exception {
        // audioChannel用于控制是否录制音频(0:不录制/1:录制)
        // 录制1分钟视频
        recordCamera("build/output/camera.mp4", 1, 1);
    }

    
    public static void recordCamera(String outputFile, int audioChannel, float mins)
            throws frameGrabber.Exception, Exception {
        // 本机摄像头默认0
        try (frameGrabber grabber = frameGrabber.createDefault(0)) {
            // 开启抓取器
            grabber.start();

            // 转换器
            OpenCVframeConverter.ToIplImage converter = new OpenCVframeConverter.ToIplImage();
            // 抓取一帧视频,用于获取高度/宽度
            frame grabframe = null;
            while ((grabframe = grabber.grab()) != null) {
                EnumSet videoOrAudio = grabframe.getTypes();
                if (videoOrAudio.contains(frame.Type.VIDEO)) {
                    break;
                }
            }

            IplImage grabbedImage = converter.convert(grabframe);
            int width = grabbedImage.width();
            int height = grabbedImage.height();

            // 流媒体输出地址,分辨率(长,高),是否录制音频(0:不录制/1:录制)
            try (FFmpegframeRecorder recorder =
                         new FFmpegframeRecorder(outputFile, width, height, audioChannel)) {
                recorder.start(); // 开启录制器
                Canvasframe canvasframe =
                        new Canvasframe("Camera", Canvasframe.getDefaultGamma() / grabber.getGamma());
                canvasframe.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
                canvasframe.setAlwaysonTop(true);

                //获取当前系统时间
                long startTime = System.currentTimeMillis();

                while (canvasframe.isVisible() && (grabframe = grabber.grab()) != null) {
                    EnumSet videoOrAudio = grabframe.getTypes();
                    if (videoOrAudio.contains(frame.Type.VIDEO)) {
                        canvasframe.showImage(grabframe);
                    }
                    recorder.record(grabframe);

                    //获取当前的系统时间,与初始时间相减就是程序运行的毫秒数,除以1000就是秒数
                    long endTime = System.currentTimeMillis();
                    long usedTime = (endTime - startTime) / 1000;
                    if (usedTime > mins * 60) break;
                }
                // 关闭窗口
                canvasframe.dispose();
            }
        }
    }
}

效果如下:

录制视频保存于

build/output/camera.mp4
目录:

http://www.aias.top/

Git地址:

https://github.com/mymagicpower/AIAS
https://gitee.com/mymagicpower/AIAS

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5076960.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-16
下一篇 2022-11-16

发表评论

登录后才能评论

评论列表(0条)

保存