javacv 封装了javacpp-presets库很多native API,简化了开发,对java程序员来说比较友好。

之前使用JavaCV库都是使用ffmpeg native API开发,这种方式使用起来太多坑了,还是使用JavaCV封装好的库开发方便。

引入依赖

前几天刚刚发布了1.5.5,这里使用最新的javacv依赖:

<properties>
<javacpp.version>1.5.5</javacpp.version>
</properties>
<dependencies>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv</artifactId>
<version>${javacpp.version}</version>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv-platform</artifactId>
<version>${javacpp.version}</version>
</dependency>
</dependencies>

OpenCVFrameGrabber采集摄像头数据

javacv的demo中有摄像头及麦克风采集音视频数据的例子(WebcamAndMicrophoneCapture),例子采集摄像头数据使用的就是OpenCVFrameGrabber,视频画面回显采用的是CanvasFrame

public class Sample01_Camera {

  @SuppressWarnings("resource")
public static void main(String[] args) throws Exception {
OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
grabber.setImageWidth(1280);
grabber.setImageHeight(720);
grabber.start();
CanvasFrame canvas = new CanvasFrame("摄像头");
canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
canvas.setAlwaysOnTop(true); while (canvas.isDisplayable()) {
canvas.showImage(grabber.grab());
TimeUnit.MILLISECONDS.sleep(40);
} grabber.stop();
}
}

画面预览效果图:

FFmpegFrameGrabber采集摄像头数据

FFmpegFrameGrabber采集摄像头数据需要指定输入,如:video=Integrated Camera,这里Integrated Camera是摄像头的设备名。

可以通过以下方式获取摄像头设备名:

  1. 打开“计算机管理”->“设备管理器”->“照相机”
  2. 使用ffmpeg命令,具体查看之前我的文章 JavaCV FFmpeg采集摄像头YUV视频数据

采用FFmpeg查看本机设备的命令:

ffmpeg.exe -list_devices true -f dshow -i dummy

FFmpegFrameGrabber的使用方式跟OpenCVFrameGrabber的方式是一样的,只不过OpenCVFrameGrabber指定的是设备索引,而FFmpegFrameGrabber指定设备输入。

public class Sample02_Camera {
@SuppressWarnings("resource")
public static void main(String[] args) throws Exception {
FFmpegFrameGrabber grabber = new FFmpegFrameGrabber("video=Integrated Camera");
grabber.setImageWidth(1280);
grabber.setImageHeight(720);
grabber.setFormat("dshow");
grabber.start();
CanvasFrame canvas = new CanvasFrame("摄像头");
canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
canvas.setAlwaysOnTop(true); while (canvas.isDisplayable()) {
canvas.showImage(grabber.grab());
TimeUnit.MILLISECONDS.sleep(40);
} grabber.stop();
}
}

FFmpegFrameGrabber采集桌面数据

FFmpegFrameGrabber采集桌面采用gdigrab,参考雷神的博客 FFmpeg源代码简单分析:libavdevice的gdigrab

public class Sample03_Desktop {

  // https://blog.csdn.net/leixiaohua1020/article/details/44597955
@SuppressWarnings("resource")
public static void main(String[] args) throws Exception {
FFmpegFrameGrabber grabber = new FFmpegFrameGrabber("desktop");
grabber.setFormat("gdigrab");
grabber.setOption("offset_x", "0");
grabber.setOption("offset_y", "0");
grabber.setOption("framerate", "25");
grabber.setOption("draw_mouse", "0");
grabber.setOption("video_size", "1920x1080");
// 这种形式,双屏有问题
// grabber.setImageWidth(1920);
// grabber.setImageWidth(1080);
grabber.start();
CanvasFrame canvas = new CanvasFrame("摄像头");
canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
canvas.setAlwaysOnTop(true); while (canvas.isDisplayable()) {
canvas.showImage(grabber.grab());
TimeUnit.MILLISECONDS.sleep(40);
} grabber.stop();
}
}

画面预览效果图:

这里由于我的电脑是2K屏,这里1920x1080只是截图了屏幕的一部分。

=========================================================



关注公众号,阅读更多关于javacv的文章。

JavaCV 采集摄像头及桌面视频数据的更多相关文章

  1. JavaCV 采集摄像头和麦克风数据推送到流媒体服务器

    越来越觉得放弃JavaCV FFmpeg native API,直接使用JavaCV二次封装的API开发是很明智的选择,使用JavaCV二次封装的API开发避免了各种内存操作不当引起的crash. 上 ...

  2. 使用Chrome采集摄像头并生成视频下载

    主要使用2个技术点:WebRtc 的 getUserMedia 和 MediaRecorder 注意点 开始录制调用 start 方法要传入一个采样间隔,这样录制的媒体会按照你设置的值进行分割成一个个 ...

  3. JavaCV FFmpeg采集摄像头YUV数据

    前阵子使用利用树莓派搭建了一个视频监控平台(传送门),不过使用的是JavaCV封装好的OpenCVFrameGrabber和FFmpegFrameRecorder. 其实在javacpp项目集中有提供 ...

  4. Android中直播视频技术探究之---采集摄像头Camera视频源数据进行推流(采用金山云SDK)

    一.前言 在之前已经详细介绍了Android中的一种视频数据源:Camera,不了解的同学可以点击进入:Android中Camera使用详解 ,在这篇文章中我们介绍了如何采集摄像头的每一帧数据,然后进 ...

  5. Android 音视频开发(四):使用 Camera API 采集视频数据

    本文主要将的是:使用 Camera API 采集视频数据并保存到文件,分别使用 SurfaceView.TextureView 来预览 Camera 数据,取到 NV21 的数据回调. 注: 需要权限 ...

  6. 如何用FFmpeg API采集摄像头视频和麦克风音频,并实现录制文件的功能

    之前一直用Directshow技术采集摄像头数据,但是觉得涉及的细节比较多,要开发者比较了解Directshow的框架知识,学习起来有一点点难度.最近发现很多人问怎么用FFmpeg采集摄像头图像,事实 ...

  7. 摄像头脸部识别 (1)opencv 抓取视频数据并保存

    摄像头脸部识别 (1)opencv 抓取视频数据并保存 基于python 和 opencv 3.4.0 (兼容 opencv 2.X 参考注释),详细如代码 import numpy as np im ...

  8. FFMPEG采集摄像头数据并切片为iPhone的HTTP Stream流

    一.Windows下面编译ffmpeg 首先需要解决的问题是:在windows下面编译 ffmpeg, 并让其支持dshow, 本人把ffmpeg编译成功了, 但是编译出来的ffmpeg不支持dsho ...

  9. FFmpeg采集音视频数据命令

    文章转自:https://www.jianshu.com/p/4709ccbda3f9 1.ffmpeg 把文件当做直播推送至服务器 (RTMP + FLV) ffmpeg - re -i demo. ...

随机推荐

  1. Zabbix 监控 SNMP & JMX

    Zabbix 配置清华源 # 安装清华源 yum 仓库 [root@db01 ~]# rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabb ...

  2. Tensorflow2的基本用法

    张量表示数据,用计算图搭建神经网络,用会话执行计算图,优化线上的权重(参数)->得到模型. 张量(tensor):多维数组(列表)                 阶:张量的维数. 数据类型: ...

  3. 操作系统 part5

    1.线程安全 线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用.不会出现数据不一致或者数据污染. 线程不安全就 ...

  4. ysoserial-URLDNS学习

    简述 ysoserial很强大,花时间好好研究研究其中的利用链对于了解java语言的一些特性很有帮助,也方便打好学习java安全的基础,刚学反序列化时就分析过commoncollections,但是是 ...

  5. JQuery和js实现简单的霓虹灯

    注意jquery文件的路径要正确. <!DOCTYPE html> <html> <head> <title></title> <me ...

  6. Windows 10 & git & bash

    Windows 10 & git & bash If you are on Windows, we recommend downloading Git for Windows and ...

  7. how to create a style element in js (many ways)

    how to create a style element in js (many ways) create style in js Constructed StyleSheets CSSStyleS ...

  8. bob and brad physical therapy knee exercise

    bob and brad physical therapy knee exercise 鲍勃和布拉德物理治疗膝关节运动 https://bobandbrad.com/ youtube https:// ...

  9. react & redux data flow diagram

    react & redux data flow diagram Redux 数据流程图

  10. how to open a terminal in finder folder of macOS

    how to open a terminal in finder folder of macOS shit service demo refs https://lifehacker.com/launc ...