推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于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 推流相关推荐

  1. LiveQing直播点播RTMP推流流媒体服务如何获取推流的rtmp地址

    创建鉴权直播 鉴权直播->创建直播 ,2步即可 编辑 直播名称 点击 确定 编辑查看创建的直播 编辑直播->推流播放 ->推流地址 如: rtmp://cloud.liveqing. ...

  2. java摄像头推流_悄摸直播(一)—— 推流器的实现(获取笔记本摄像头画面,转流推流到rtmp服务器)...

    推流器 一.功能说明 获取pc端的摄像头流数据 + 展示直播效果 + 推流到rtmp服务器 二.代码实现 /** * 推流器 * @param devicePath 摄像头的地址.可以是摄像头rtsp ...

  3. 基于javacv(推流),nginx(流媒体服务器),VCL(播放器)搭建直播视频

    目录 1.获取RTSP地址 2.搭建流媒体服务器 2.1下载资源 下载nginx 下载rtmp组件 启动nginx 测试工具(由于java代码调试问题,所以这里先下载一个转码推流的工具,其中javac ...

  4. 【Android RTMP】RTMPDump 推流过程 ( 独立线程推流 | 创建推流器 | 初始化操作 | 设置推流地址 | 启用写出 | 连接 RTMP 服务器 | 发送 RTMP 数据包 )

    文章目录 安卓直播推流专栏博客总结 一. Java 层传入的 RTMP 推流地址处理 二. RTMPDump 推流线程 三. 创建 RTMP 对象 四. 初始化 RTMP 对象 五. 设置 RTMP ...

  5. Android开发-在Android里接入阿里云推流SDK实现直播推流的功能

    前 言 如今,在国内移动互联网发展了几年的时间,移动开发技术也相对的成熟,在咱们日常使用的手机App中也少不了直播的功能,不管是娱乐类.游戏类.体育类还是教育类等的App都会有直播的功能,可以说直播的 ...

  6. Android开发-在Android里接入腾讯云推流SDK实现直播推流的功能

    前 言 如今,在国内移动互联网发展了几年的时间,移动开发技术也相对的成熟,在咱们日常使用的手机App中也少不了直播的功能,不管是娱乐类.游戏类.体育类还是教育类等的App都会有直播的功能,可以说直播的 ...

  7. android接推流sdk,Android——直播推流SDK

    概述: 好像有三个月没有更新博客了,年前实在是忙的累成狗啊...本想直播功能稳定了就没那么多事了,没想到又要搞魔法短视频功能,马丹,短视频玩成了花啊,撸起袖子干. 现在把我们项目中的直播SDK开源出来 ...

  8. 【Android RTMP】RTMP 直播推流 ( 阿里云服务器购买 | 远程服务器控制 | 搭建 RTMP 服务器 | 服务器配置 | 推流软件配置 | 直播软件配置 | 推流直播效果展示 )

    文章目录 安卓直播推流专栏博客总结 一. 阿里云服务器购买 二. 远程服务器控制软件 三. 配置 Ubuntu 服务器 1 . 更新 apt 源 2 . 安装 pcre.OpenSSL.zlib 库 ...

  9. java 摄像头 win7_JAVA摄像头调用方法_实例源码介绍—Win7

    JAVA摄像头调用_实例源码介绍-Win7. 本人菜鸟级人物,由于要搞个人脸识别登录(JAVACV),百度谷歌了一下午,找了网上简单的样例代码来试,可是老是调试不过,出现CaptureDeviceMa ...

  10. java 摄像头 win7_Win7系统下JAVA摄像头调用_实例代码介绍

    Win7系统下JAVA摄像头调用_实例代码介绍.由于要搞个人脸识别登录(JAVACV),百度谷歌了一下午,找了网上简单的样例代码来试,可是老是调试不过,出现CaptureDeviceManager.g ...

最新文章

  1. 操作系统性能优化分析及工具
  2. 华北理工大学轻工学院计算机在哪个校区,如何坐公交去路北区的华北理工大学轻工学院(北校区)-行政综合楼| Moovit...
  3. c++矩阵类_Python线性代数学习笔记——矩阵的基本运算和基本性质,实现矩阵的基本运算...
  4. .NET 6新特性试用 | Nuget包验证
  5. elementui的upload组件怎么获取上传的文本流、_抖音feed流直播间引流你还不会玩?实操讲解...
  6. JAVA 面试高频提问知识点之:SET、LIST 和 MAP 的区别
  7. 织梦缩略图自动补齐绝对路径_织梦生成文章内容缩略图时自动加上绝对路径教程...
  8. offsetX、clientX、screenX、pageX、layerX
  9. bio linux 创建_Linux 五种IO模型
  10. 156种PS特效动作中文大合集【附高清视频教程】
  11. Ardence公司PHAR-LAP ETS 简介
  12. 63套js ,html .css效果页面(点个小星星免费下载)
  13. 2003服务器怎么安装系统,工控机安装WindowsServer2003系统步骤
  14. linux虚拟机防火墙关不了怎么办,虚拟机centOS7 关闭防火墙后ping通 telnet不通 解决办法:disable seLinux...
  15. Python中range()函数用法
  16. 用投资思维做好招商工作:湘商回归,长沙急企业之所急
  17. 见缝插针php源码,见缝插针 小游戏源码
  18. Spring Boot应用退出
  19. 计算机专业考研有必要二战吗,我,到底要不要选择二战考研?​
  20. 投骰子游戏(C++)

热门文章

  1. SPOOLing技术的再思考
  2. 平衡树插入调整的记忆策略
  3. [2019牛客]第一场
  4. 笔记:css中的position定位
  5. LeetCode344反转字符串
  6. C# 根据空格数截取
  7. Excel对话框大全
  8. POJ 2240 Arbitrage Bellman_ford 判读是否存在正环
  9. asp:get请求写法
  10. Hadoop Hive与Hbase关系 整合