欢迎来到淼淼之森的个人小站。  交流请加我微信好友: studyjava。  也欢迎关注同名公众号:Java学习之道

JavaCV开发详解之1:调用本机摄像头视频(建议使用javaCV最新版本)

  |   评论   |   浏览

引入依赖

<!-- https://mvnrepository.com/artifact/org.bytedeco/javacv --> <dependency> <groupId>org.bytedeco</groupId> <artifactId>javacv</artifactId> <version>1.5.3</version> </dependency> <!-- https://mvnrepository.com/artifact/org.bytedeco/javacv-platform --> <dependency> <groupId>org.bytedeco</groupId> <artifactId>javacv-platform</artifactId> <version>1.5.3</version> </dependency>

代码实现

package com.java.mmzsblog; import org.bytedeco.ffmpeg.global.avcodec; import org.bytedeco.javacv.*; import org.bytedeco.opencv.opencv_core.IplImage; import javax.swing.*; /** * @author :created by mmzsblog.cn * @description: javaCV开发详解之1:调用本机摄像头视频(建议使用javaCV最新版本) * @date :created at 2020/07/07 10:54 */ public class RecordCamera { public static void main(String[] args) { } /** * 按帧录制本机摄像头视频(边预览边录制,停止预览即停止录制) * * @param outputFile -录制的文件路径,也可以是rtsp或者rtmp等流媒体服务器发布地址 * @param frameRate - 视频帧率 * @throws Exception * @throws InterruptedException * @throws org.bytedeco.javacv.FrameRecorder.Exception */ public static void recordCamera(String outputFile, double frameRate) throws Exception, InterruptedException, org.bytedeco.javacv.FrameRecorder.Exception { //另一种方式获取摄像头,opencv抓取器方式获取摄像头请参考上一讲,FrameGrabber会自己去找可以打开的摄像头的抓取器。 //本机摄像头默认0 FrameGrabber grabber = FrameGrabber.createDefault(0); //开启抓取器 grabber.start(); //转换器 OpenCVFrameConverter.ToIplImage converter = new OpenCVFrameConverter.ToIplImage(); //抓取一帧视频并将其转换为图像,至于用这个图像用来做什么?加水印,人脸识别等等自行添加 IplImage grabbedImage = converter.convert(grabber.grab()); int width = grabbedImage.width(); int height = grabbedImage.height(); FrameRecorder recorder = FrameRecorder.createDefault(outputFile, width, height); // avcodec.AV_CODEC_ID_H264,编码 recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264); //封装格式,如果是推送到rtmp就必须是flv封装格式 recorder.setFormat("flv"); recorder.setFrameRate(frameRate); recorder.start();//开启录制器 long startTime=0; long videoTS=0; CanvasFrame frame = new CanvasFrame("camera", CanvasFrame.getDefaultGamma() / grabber.getGamma()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setAlwaysOnTop(true); //不知道为什么这里不做转换就不能推到rtmp Frame rotatedFrame=converter.convert(grabbedImage); while (frame.isVisible() && (grabbedImage = converter.convert(grabber.grab())) != null) { rotatedFrame = converter.convert(grabbedImage); frame.showImage(rotatedFrame); if (startTime == 0) { startTime = System.currentTimeMillis(); } videoTS = 1000 * (System.currentTimeMillis() - startTime); recorder.setTimestamp(videoTS); recorder.record(rotatedFrame); Thread.sleep(40); } //关闭窗口 frame.dispose(); //关闭推流录制器,close包含release和stop操作 recorder.close(); //关闭抓取器 grabber.close(); } }

标题:JavaCV开发详解之1:调用本机摄像头视频(建议使用javaCV最新版本)
作者:mmzsblog
地址:https://www.mmzsblog.cn/articles/2020/09/07/1599489215275.html

如未加特殊说明,文章均为原创,转载必须注明出处。均采用CC BY-SA 4.0 协议

本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。若本站转载文章遗漏了原文链接,请及时告知,我们将做删除处理!文章观点不代表本网站立场,如需处理请联系首页客服。
• 网站转载须在文章起始位置标注作者及原文连接,否则保留追究法律责任的权利。
• 公众号转载请联系网站首页的微信号申请白名单!

个人微信公众号 ↓↓↓                 

微信搜一搜 Java 学习之道

Gitalking ...