java 推流_JavaCV开发详解之2:截取推流服务器视频的某帧或本地视频的某帧
引入依赖
org.bytedeco
javacv
1.5.3
org.bytedeco
javacv-platform
1.5.3
代码实现
package com.java.mmzsblog;
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.Java2DFrameConverter;
import org.bytedeco.javacv.OpenCVFrameConverter;
import org.bytedeco.opencv.global.opencv_core;
import org.bytedeco.opencv.opencv_core.IplImage;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
/**
* @author :created by mmzsblog.cn
* @description: javaCV开发详解之2:截取推流服务器视频的某帧或本地视频的某帧
* @date :created at 2020/07/07 10:57
*/
public class VideoTool {
public static void main(String[] args) throws Exception {
// randomGrabberFFmpegImage("http://192.168.0.11/image/00/05/test.mp4", "D:\\test", "test2");
// randomGrabberFFmpegImage("D:\\1.mp4", "D:\\test", "test");
randomGrabberFFmpegImage("rtmp://192.168.0.11:1935/live/123456", "D:\\test", "test");
//randomGrabberFFmpegImage("C:/Users\\Administrator\\Desktop\\VID_20171229_162251.mp4", "G:\\test", "111");
}
public static void randomGrabberFFmpegImage(String filePath, String targerFilePath, String targetFileName)
throws Exception {
//创建视频帧抓取工具
FFmpegFrameGrabber ff = FFmpegFrameGrabber.createDefault(filePath);
ff.start();
//获取旋转角度信息(90度)
String rotate = ff.getVideoMetadata("rotate");
//帧
Frame f;
//i可以控制获取第几帧
int i = 0;
while (i < 100) {
//一帧一帧去抓取视频图片,ff.grabImage();每次抓取下一帧
f = ff.grabImage();
IplImage src = null;
//旋转图像并输出第 i 帧(i是4的倍数)
if (i % 4 == 0) {
//手机录的视频有旋转角度,需要旋转处理
if (null != rotate && rotate.length() > 1) {
OpenCVFrameConverter.ToIplImage converter = new OpenCVFrameConverter.ToIplImage();
src = converter.convert(f);
f = converter.convert(rotate(src, Integer.valueOf(rotate)));
}
//输出第几帧图片
doExecuteFrame(f, targerFilePath, targetFileName + i);
}
i++;
}
ff.stop();
}
/*
* 旋转角度的
*/
public static IplImage rotate(IplImage src, int angle) {
IplImage img = IplImage.create(src.height(), src.width(), src.depth(), src.nChannels());
opencv_core.cvTranspose(src, img);
opencv_core.cvFlip(img, img, angle);
return img;
}
public static void doExecuteFrame(Frame f, String targerFilePath, String targetFileName) {
if (null == f || null == f.image) {
return;
}
Java2DFrameConverter converter = new Java2DFrameConverter();
String imageMat = "jpg";
String FileName = targerFilePath + File.separator + targetFileName + "." + imageMat;
BufferedImage bi = converter.getBufferedImage(f);
System.out.println("width:" + bi.getWidth());
System.out.println("height:" + bi.getHeight());
File output = new File(FileName);
try {
ImageIO.write(bi, imageMat, output);
} catch (IOException e) {
e.printStackTrace();
}
}
}
标题:JavaCV开发详解之2:截取推流服务器视频的某帧或本地视频的某帧
作者:mmzsblog
地址:https://www.mmzsblog.cn/articles/2020/09/07/1599489221392.html
-----------------------------
如未加特殊说明,此网站文章均为原创。
网站转载须在文章起始位置标注作者及原文连接,否则保留追究法律责任的权利。
公众号转载请联系网站首页的微信号申请白名单!
个人微信公众号 ↓↓↓
java 推流_JavaCV开发详解之2:截取推流服务器视频的某帧或本地视频的某帧相关推荐
- 基于Java的音频转发服务器_javaCV开发详解之5:录制音频(录制麦克风)到本地文件/流媒体服务器(基于javax.sound、javaCV-FFMPEG)...
javaCV系列文章: 补充篇: 前言:本篇文章基于javaCV-FFMPEG,关于javaCV官方是没有文档或者api文档可以参考的,所以还有很多地方需要研究: 本章对于ffmpeg的需要有一定了解 ...
- java录制视频_javacv开发详解之1:调用本机摄像头视频(建议使用javaCV最新版本)...
javaCV系列文章: ' i# f% S' a# J9 X! w- g) wjavacv开发详解之1:调用本机摄像头视频 4 r' C, [4 ?' M7 Y; }javaCV开发详解之2:推流器实 ...
- JAVA使用摄像头录制_JavaCV开发详解之1:调用本机摄像头视频(建议使用javaCV最新版本)...
引入依赖 org.bytedeco javacv 1.5.3 org.bytedeco javacv-platform 1.5.3 代码实现 package com.java.mmzsblog; im ...
- java 音频转码_javaCV开发详解之7:让音频转换更加简单,实现通用音频编码格式转换、重采样等音频参数的转换功能(以pcm16le编码的wav转mp3为例)...
javaCV系列文章: 补充篇: 前言: 之前几章把javaCV-FFmpeg中的能够实现的基本功能大致梳理了一遍,本章在之前几章基础上实现一个通用的音频编码和参数转换器 实现功能: ①音频编码转换② ...
- java和php混合_PHP和Java强强联合 集成开发详解
首先,你必须要知道PHP/Java桥为在PHP脚本中集成Java类创建了哪些特殊的函数(PHP类),这些函数包括: ◆java:它允许你访问给定名称的Java类型,如: ◆java("jav ...
- 孙鑫 java web_javaweb(code) 孙鑫老师的java web 开发详解的源代码 - 下载 - 搜珍网
javaweb开发详解(code)/AppendixA/FirstPage.html javaweb开发详解(code)/AppendixA/form.html javaweb开发详解(code)/A ...
- JavaCV开发详解专栏文章目录(JavaCV速查手册)
本章作为**JavaCV开发详解**专栏的目录. 为了方便大家分类查找,我们把分为两个目录: 第一个分类目录,根据文章技术类型进行分类. 第二个目录,按照博主更新顺序排列. 有些文章既是设备采集又实现 ...
- JavaCV开发详解之3:通用拉流器实现,从流媒体服务器拉流rtsp/rtmp录制成视频文件
JavaCV免费教程目录: JavaCV入门教程(免费JavaCV教程) javacv实战专栏目录(2016年更新至今): JavaCV实战专栏文章目录(2016年更新至今) 2022年最新JavaC ...
- Apache Thrift - java开发详解
2019独角兽企业重金招聘Python工程师标准>>> Apache Thrift - java开发详解 博客分类: java 架构 中间件 1.添加依赖 jar <depen ...
最新文章
- 统计简单学_常用统计量
- 计算机基础资料管理办法,计算机基础知识试题(答案_)资料.doc
- ai人工智能服务器操作系统,全球首款100%纯国产的AI操作系统来了,但说媲美Windows有意义吗...
- bestcoder Delete
- Flex 学习随笔 ---- 玩 Chart
- 约瑟夫环 java_约瑟夫环Java实现
- 人脸识别dlib库 记录
- [Maven] Project build error: 'packaging' with value 'jar' is invalid. Aggregator projects require
- 关于CodeSmith生成CSLA代码的联想
- OPNET网络仿真分析-1.6、OPNET软件使用
- android 瀑布流StaggeredGridLayoutManager重新排序后,顶部留白处理
- MATLAB数学建模方法与实践(第3版)——读书笔记
- unity天空盒渐变_在Unity3D中使用天空盒
- 飞行管理计算机组成,飞行模拟中飞行管理计算机系统CDU组件设计与仿真
- 360抢票王验证码自动识别真的那么牛吗?
- VIS2020 长论文摘要机翻
- 【EasyExcel】 模板填充批量导出,多文件以zip压缩包格式导出
- 金融信贷存量客户运营管理
- 《多媒体在初中数学中的运用研究》课题研究活动记录
- Socket英文解释