悄摸直播 —— JavaCV实现本机摄像头画面远程直播

推流器

一、功能说明

获取pc端的摄像头流数据 + 展示直播效果 + 推流到rtmp服务器

二、代码实现

  1. /**
  2. * 推流器
  3. * @param devicePath 摄像头的地址。可以是摄像头rtsp地址,也可以是设备号码,本机摄像头是0
  4. * @param outputPath 接收路径
  5. * @param v_rs 帧率
  6. * @throws Exception
  7. * @throws org.bytedeco.javacv.FrameRecorder.Exception
  8. * @throws InterruptedException
  9. */
  10. public static void recordPush(String outputPath,int v_rs) throws Exception, org.bytedeco.javacv.FrameRecorder.Exception, InterruptedException {
  11. Loader.load(opencv_objdetect.class);
  12. //创建采集器
  13. OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0); //本地摄像头默认为0
  14. //开启采集器
  15. try {
  16. grabber.start();
  17. } catch (Exception e) {
  18. try {
  19. grabber.restart(); //一次重启尝试
  20. } catch (Exception e2) {
  21. throw e;
  22. }
  23. }
  24. OpenCVFrameConverter.ToIplImage converter = new OpenCVFrameConverter.ToIplImage(); //转换器
  25. Frame grabframe = grabber.grab(); //获取一帧
  26. IplImage grabbedImage = null;
  27. if (grabframe!=null) {
  28. grabbedImage = converter.convert(grabframe); //将这一帧转换为IplImage
  29. }
  30. //创建录制器
  31. FrameRecorder recorder;
  32. recorder = FrameRecorder.createDefault(outputPath, 1280, 720); //输出路径,画面高,画面宽
  33. recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264); //设置编码格式
  34. recorder.setFormat("flv");
  35. recorder.setFrameRate(v_rs);
  36. recorder.setGopSize(v_rs);
  37. //开启录制器
  38. try {
  39. recorder.start();
  40. } catch (java.lang.Exception e) {
  41. System.out.println("recorder开启失败");
  42. System.out.println(recorder);
  43. try {
  44. if (recorder != null) { //尝试重启录制器
  45. recorder.stop();
  46. recorder.start();
  47. }
  48. } catch (java.lang.Exception e1) {
  49. // TODO Auto-generated catch block
  50. e.printStackTrace();
  51. }
  52. }
  53. //直播效果展示窗口
  54. CanvasFrame frame = new CanvasFrame("直播效果",CanvasFrame.getDefaultGamma() / grabber.getGamma());
  55. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  56. frame.setAlwaysOnTop(true);
  57. //推流
  58. while(frame.isVisible() && (grabframe=grabber.grab()) != null) {
  59. frame.showImage(grabframe); //展示直播效果
  60. grabbedImage = converter.convert(grabframe);
  61. Frame rotatedFrame = converter.convert(grabbedImage);
  62. if (rotatedFrame != null) {
  63. recorder.record(rotatedFrame);
  64. }
  65. Thread.sleep(50); //50毫秒/帧
  66. }
  67. }

三、测试推流器

  1. public static void main(String[] args) throws Exception, org.bytedeco.javacv.FrameRecorder.Exception, InterruptedException {
  2. //设置rtmp服务器地址
  3. String outputPath = "rtmp://192.168.1.48:1935/live/stream";
  4. recordPush(outputPath, 25);
  5. }

如果出现“直播效果”的swing窗口,并能够播放摄像头画面,则说明推流器成功。

悄摸直播(一)—— 推流器的实现(获取笔记本摄像头画面,转流推流到rtmp服务器)的更多相关文章

  1. 悄摸直播(二)—— 播流器实现(拉取rtmp服务器中的数据流,播放直播画面)

    悄摸直播 -- JavaCV实现本机摄像头画面远程直播 播流器 一.功能说明 从rtmp服务器中获取视频流数据 + 展示直播画面 二.代码实现 /** * 播流器 * @param inputPath ...

  2. 悄摸直播(三)—— 搭建rtmp服务器(smart_rtmpd - rtmp服务器搭建)

    悄摸直播 -- javaCV实现本机摄像头画面远程直播 搭建rtmp服务器 一.素材 rtmp服务器:smart_rtmpd ffmpeg工具:ffmpeg.exe 二.搭建 1.下载smart_rt ...

  3. javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG、javaCV-openCV)

    javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG.j ...

  4. 悄摸直播 —— JavaCV实现本机摄像头画面远程直播

    目录 前言 需要的jar包和依赖 需要实现的模块(附带源码教程) 项目效果展示 前言 最近想用Java实现一个类似于远程直播的功能 像这样:(功能示意图) 需要的jar包和依赖 Maven依赖: &l ...

  5. javaCV开发详解之4:转流器实现(也可作为本地收流器、推流器,新增添加图片及文字水印,视频图像帧保存),实现rtsp/rtmp/本地文件转发到rtmp流媒体服务器(基于javaCV-FFMPEG)

    javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG.j ...

  6. 最简单的基于libVLC的例子:最简单的基于libVLC的推流器

    ===================================================== 最简单的基于libVLC的例子文章列表: 最简单的基于libVLC的例子:最简单的基于lib ...

  7. 不用任何第三方,写一个RTMP直播推流器

    2016年是移动直播爆发年,不到半年的时间内无数移动直播App掀起了全民直播的热潮.然而个人觉得直播的门槛相对较高,从推流端到服务端器到播放端,无不需要专业的技术来支撑,仅仅推流端就有不少需要学习的知 ...

  8. 最简单的基于FFmpeg的推流器(以推送RTMP为例)

    ===================================================== 最简单的基于FFmpeg的推流器系列文章列表: <最简单的基于FFmpeg的推流器(以 ...

  9. Android实现录屏直播(三)MediaProjection + VirtualDisplay + librtmp + MediaCodec实现视频编码并推流到rtmp服务器

    请尊重分享成果,转载请注明出处,本文来自Coder包子哥,原文链接:http://blog.csdn.net/zxccxzzxz/article/details/55230272 Android实现录 ...

随机推荐

  1. js 页面分享

    首先说分享到QQ空间的通用代码:<a href="javascript:void(0);" onclick="window.open('http://sns.qzo ...

  2. H3C OSPF协议区域LSA发布

  3. requires php ~7.1 -> your PHP version (7.0.18) does not satisfy that requirement

    一个大兄弟本地用了 PHP 7.1 进行开发,而我本地是 PHP 7.0, 于是悲剧发生了. composer install 之后报错 Loading composer repositories w ...

  4. element 树形控件使用

    <el-tree :data="morkDataList" show-checkbox ref="tree" node-key="id" ...

  5. P1072 城市轰炸

    题目描述 一个大小为N*M的城市遭到了X次轰炸,每次都炸了一个每条边都与边界平行的矩形. 在轰炸后,有Y个关键点,指挥官想知道,它们有没有受到过轰炸,如果有,被炸了几次,最后一次是第几轮. 输入格式 ...

  6. win10 uwp 好看的时间选择控件

    本文告诉大家我找到的好看的时间选择控件 先给大家看一下图,然后就知道我说的是什么 首先需要安装 Nuget ,搜索 DeanChalk.UWP.TimePicker 或输入Install-Packag ...

  7. ASP.NET MVC4.0+EF+LINQ+bui+bootstrap+网站+角色权限管理系统(4)

    接下来就是菜单管理了,菜单分为两部分,一部分是菜单管理,另一部分是左边的树形菜单 数据库添加菜单表Menus USE [MVCSystem] GO /****** Object: Table [dbo ...

  8. 2018-8-13-WPF-使用-Edge-浏览器

    title author date CreateTime categories WPF 使用 Edge 浏览器 lindexi 2018-8-13 15:33:5 +0800 2018-06-01 1 ...

  9. Docker应用容器引擎

    1.Docker概述 1.1.Docker简介 Docker 是一个开源的应用容器引擎,基于 Go 语言开发.Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到 ...

  10. codeforces 1167B Lost Numbers

    传送门:https://codeforces.com/contest/1167/problem/B 题意: 交互题:现在你有6个数4, 8, 15, 16, 23, 42组成的某种组合,你可以询问系统 ...