java摄像头推流,流媒体服务 javaCV-2 推流
推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG、javaCV-openCV)
功能:实现边播放边录制/推流,停止预览即停止录制/推流
代码实现
本功能采用按帧录制/推流,通过关闭播放窗口停止视频录制/推流
/**
* 按帧录制本机摄像头视频(边预览边录制,停止预览即停止录制)
*
* @author
* @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 {
Loader.load(opencv_objdetect.class);
FrameGrabber grabber = FrameGrabber.createDefault(0);//本机摄像头默认0,这里使用javacv的抓取器,至于使用的是ffmpeg还是opencv,请自行查看源码
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);
recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264); // avcodec.AV_CODEC_ID_H264,编码
recorder.setFormat("flv");//封装格式,如果是推送到rtmp就必须是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);
Frame rotatedFrame=converter.convert(grabbedImage);//不知道为什么这里不做转换就不能推到rtmp
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();
recorder.stop();
recorder.release();
grabber.stop();
}
已经实现了基本的推流器功能,那么需要注意的就是转换那里,不转换就不能推送到rtmp流媒体服务器
测试录制功能和推流功能
public static void main(String[] args) throws Exception, InterruptedException, org.bytedeco.javacv.FrameRecorder.Exception {
recordCamera("output.mp4",25);
}
public static void main(String[] args) throws Exception, InterruptedException, org.bytedeco.javacv.FrameRecorder.Exception {
recordCamera("rtmp://摄像头ip地址:端口号/live/record1",25);
}
看到了摄像头窗口就说明已经开始录制,点击右上角关闭按钮即停止录制视频,在录制的时候刷新项目目录发现新生成了一个output.mp4文件,可以正常播放这个视频文件
java摄像头推流,流媒体服务 javaCV-2 推流相关推荐
- LiveQing直播点播RTMP推流流媒体服务如何获取推流的rtmp地址
创建鉴权直播 鉴权直播->创建直播 ,2步即可 编辑 直播名称 点击 确定 编辑查看创建的直播 编辑直播->推流播放 ->推流地址 如: rtmp://cloud.liveqing. ...
- java摄像头推流_悄摸直播(一)—— 推流器的实现(获取笔记本摄像头画面,转流推流到rtmp服务器)...
推流器 一.功能说明 获取pc端的摄像头流数据 + 展示直播效果 + 推流到rtmp服务器 二.代码实现 /** * 推流器 * @param devicePath 摄像头的地址.可以是摄像头rtsp ...
- 基于javacv(推流),nginx(流媒体服务器),VCL(播放器)搭建直播视频
目录 1.获取RTSP地址 2.搭建流媒体服务器 2.1下载资源 下载nginx 下载rtmp组件 启动nginx 测试工具(由于java代码调试问题,所以这里先下载一个转码推流的工具,其中javac ...
- 【Android RTMP】RTMPDump 推流过程 ( 独立线程推流 | 创建推流器 | 初始化操作 | 设置推流地址 | 启用写出 | 连接 RTMP 服务器 | 发送 RTMP 数据包 )
文章目录 安卓直播推流专栏博客总结 一. Java 层传入的 RTMP 推流地址处理 二. RTMPDump 推流线程 三. 创建 RTMP 对象 四. 初始化 RTMP 对象 五. 设置 RTMP ...
- Android开发-在Android里接入阿里云推流SDK实现直播推流的功能
前 言 如今,在国内移动互联网发展了几年的时间,移动开发技术也相对的成熟,在咱们日常使用的手机App中也少不了直播的功能,不管是娱乐类.游戏类.体育类还是教育类等的App都会有直播的功能,可以说直播的 ...
- Android开发-在Android里接入腾讯云推流SDK实现直播推流的功能
前 言 如今,在国内移动互联网发展了几年的时间,移动开发技术也相对的成熟,在咱们日常使用的手机App中也少不了直播的功能,不管是娱乐类.游戏类.体育类还是教育类等的App都会有直播的功能,可以说直播的 ...
- android接推流sdk,Android——直播推流SDK
概述: 好像有三个月没有更新博客了,年前实在是忙的累成狗啊...本想直播功能稳定了就没那么多事了,没想到又要搞魔法短视频功能,马丹,短视频玩成了花啊,撸起袖子干. 现在把我们项目中的直播SDK开源出来 ...
- 【Android RTMP】RTMP 直播推流 ( 阿里云服务器购买 | 远程服务器控制 | 搭建 RTMP 服务器 | 服务器配置 | 推流软件配置 | 直播软件配置 | 推流直播效果展示 )
文章目录 安卓直播推流专栏博客总结 一. 阿里云服务器购买 二. 远程服务器控制软件 三. 配置 Ubuntu 服务器 1 . 更新 apt 源 2 . 安装 pcre.OpenSSL.zlib 库 ...
- java 摄像头 win7_JAVA摄像头调用方法_实例源码介绍—Win7
JAVA摄像头调用_实例源码介绍-Win7. 本人菜鸟级人物,由于要搞个人脸识别登录(JAVACV),百度谷歌了一下午,找了网上简单的样例代码来试,可是老是调试不过,出现CaptureDeviceMa ...
- java 摄像头 win7_Win7系统下JAVA摄像头调用_实例代码介绍
Win7系统下JAVA摄像头调用_实例代码介绍.由于要搞个人脸识别登录(JAVACV),百度谷歌了一下午,找了网上简单的样例代码来试,可是老是调试不过,出现CaptureDeviceManager.g ...
最新文章
- 操作系统性能优化分析及工具
- 华北理工大学轻工学院计算机在哪个校区,如何坐公交去路北区的华北理工大学轻工学院(北校区)-行政综合楼| Moovit...
- c++矩阵类_Python线性代数学习笔记——矩阵的基本运算和基本性质,实现矩阵的基本运算...
- .NET 6新特性试用 | Nuget包验证
- elementui的upload组件怎么获取上传的文本流、_抖音feed流直播间引流你还不会玩?实操讲解...
- JAVA 面试高频提问知识点之:SET、LIST 和 MAP 的区别
- 织梦缩略图自动补齐绝对路径_织梦生成文章内容缩略图时自动加上绝对路径教程...
- offsetX、clientX、screenX、pageX、layerX
- bio linux 创建_Linux 五种IO模型
- 156种PS特效动作中文大合集【附高清视频教程】
- Ardence公司PHAR-LAP ETS 简介
- 63套js ,html .css效果页面(点个小星星免费下载)
- 2003服务器怎么安装系统,工控机安装WindowsServer2003系统步骤
- linux虚拟机防火墙关不了怎么办,虚拟机centOS7 关闭防火墙后ping通 telnet不通 解决办法:disable seLinux...
- Python中range()函数用法
- 用投资思维做好招商工作:湘商回归,长沙急企业之所急
- 见缝插针php源码,见缝插针 小游戏源码
- Spring Boot应用退出
- 计算机专业考研有必要二战吗,我,到底要不要选择二战考研?​
- 投骰子游戏(C++)