前言:

该篇文章旨在帮助刚接触javaCV的盆友系统的认识音视频、javaCV、图像处理相关的体系知识和一些实用的知识。

序:

javaCV早期因为内置了openCV库,所以常用来做图像识别应用,现在网上一搜一大把的就是这种应用场景下的javaCV教程,在这里就不多讲这一块知识了。

这里我们将围绕Frame类系统的讨论javaCV能帮我们做什么?能实现什么功能?ffmpeg和openCV能实现的功能,使用javaCV如何做到更快、更简单的实现相应的功能。

补充:javaCV之所以叫javaCV就是因为openCV而得名,所以javaCV在图像处理上的能力等同于openCV,但在视频处理上要比openCV好,因为javaCV内置了7个视觉库,ffmpeg和opencv只是其中两个,而我们常用的也就是这两个库,另外5个库暂时用不到。

1、javaCV操作流程汇总:

javaCV一般的操作流程只有两步:抓取->(Frame)->录制

抓取包含一些初始化操作,文件或者网络流数据源获取,查找解码器等等操作

录制包含解复用、编码、输出、释放资源等等操作

大家可能有些疑惑了,封装成这样,抓取后我要对音视频源数据进行调整怎么办?而且这个经常会用到

所以我们应该调整一下补充一下我们的流程,我们的流程应该在录制之前进行处理这个Frame对象

2、关于对Frame对象的联想

Frame类在javaCV里面很重要。Frame对象作为数据容器,可以存放一帧视频数据、一堆视频参数和多个通道的音频数据、音频参数(补充:这里的多通道也就是支持多路音频组装的意思,多路音频算是复杂场景了吧;下面也会讲到复杂视频场景,画中画,多画面组装,文字、图像、动态水印等等)

2.1、抓取后的Frame对象使用

既然是一个容器,那么当我们使用grabber(抓取器)抓取音/视频的时候自然也就可以从这里面获取想要的的数据。

补充:抓取,通过grabber从本地视频文件,摄像头视频,rtp/rtsp/rtmp等等获取视频源的这个动作统称为:抓取,我们完成这个操作的类叫做抓取器,这是个很形象的翻译,也很好理解。

比如我们需要给抓取到的视频加个水印,或者抓取两个视频,进行合并(至于怎么合并咱先不管这个),而这些操作都不需要直接从frame中获取数据源,而是直接通过javacv-opencv来帮助我们调整每一帧视频,这时候还没有开始解复用编码的操作,详细的内容不在这里赘述,javaCV开发详解的系列文章中有提到该块内容。

补充:java本身是支持图像相关操作的,可以添加水印之类的还是可以实现的

3、关于字节流的处理

一般移动端设备在进行推流的时候不会直接推送到流媒体服务器,而是推送一个字节流,我们需要将这个字节流在服务器做一个中转然后由中转服务器推送到流媒体服务器

之前我们讲了Frame是一个容器,那么自然可以放音视频数据。在Frame中设置好你的音视频参数,就可以通过recorder(录制器)到流媒体服务器了

补充:录制,我们把音视频数据解复用,编码和推送到流媒体服务器的动作称为录制,为方便理解这里的recorder就叫录制器

javaCV开发详解之技术杂烩:javaCV能帮我们做什么?能实现什么功能?ffmpeg和openCV能实现功能,javaCV如何做到更快、更简单的实现相应的功能?等等一堆实用话题的更多相关文章

  1. javaCV开发详解之12:视频转apng动态图片实现,支持透明通道,也支持摄像机、桌面屏幕、流媒体等视频源转apng动态图

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

  2. javaCV开发详解之7:让音频转换更加简单,实现通用音频编码格式转换、重采样等音频参数的转换功能(以pcm16le编码的wav转mp3为例)

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

  3. javaCV开发详解之6:本地音频(话筒设备)和视频(摄像头)抓取、混合并推送(录制)到服务器(本地)

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

  4. javaCV开发详解之5:录制音频(录制麦克风)到本地文件/流媒体服务器(基于javax.sound、javaCV-FFMPEG)

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

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

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

  6. javaCV开发详解之3:收流器实现,录制流媒体服务器的rtsp/rtmp视频文件(基于javaCV-FFMPEG)

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

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

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

  8. javacv开发详解之1:调用本机摄像头视频(建议使用javaCV1.3版本)

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

  9. javaCV开发详解之8:转封装在rtsp转rtmp流中的应用(无须转码,更低的资源消耗)

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

随机推荐

  1. Java设计模式之(建造者模式)

    建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 建造者模式通常包括下面几个角色: 1. builder:抽象建造者,给出一个抽象接口,以规范产品对象的各个组 ...

  2. python基础教程第二版 第一章

    1.模块导入python以增强其功能的扩展:三种方式实现 (1). >>> Import math >>> math.floor(32.9) 32.0 #按照 模块 ...

  3. bootstrap快速入门笔记(九)-响应式工具

    一,可用的类   超小屏幕手机 (<768px) 小屏幕平板 (≥768px) 中等屏幕桌面 (≥992px) 大屏幕桌面 (≥1200px) .visible-xs-* 可见 隐藏 隐藏 隐藏 ...

  4. 使用HTML5地理位置定位到城市的方法及注意事项

    介绍 本文将简述一下如何通过HTML5和百度地图开放平台提供的API来实现对浏览器的定位.实现效果为显示出用户所在的省市,即: XXX省 XXX市. 实现思路 利用HTML5 提供的API获取到用户的 ...

  5. SSH框架搭建 详细图文教程

    转载请标明原文地址 一.什么是SSH? SSH是JavaEE中三种框架(Struts+Spring+Hibernate)的集成框架,是目前比较流行的一种Java Web开源框架. SSH主要用于Jav ...

  6. Java实现压缩文件与解压缩文件

    由于工作需要,需要将zip的压缩文件进行解压,经过调查发现,存在两个开源的工具包,一个是Apache的ant工具包,另一个就是Java api自带的工具包:但是Java自带的工具包存在问题:如果压缩或 ...

  7. jQuery修炼心得-DOM节点的插入

    1. 内部插入append()与appendTo() append:这个操作与对指定的元素执行原生的appendChild方法,将它们添加到文档中的情况类似. appendTo:实际上,使用这个方法是 ...

  8. myeclipse离线安装PyDev

    MyEclipse装好了,用来开发java web的,一直可以用,前几天用python写爬虫,也是在myeclipse下,离线安装的包.打开后配置了一下就可以了. 这里用的是PyDev2.8.2    ...

  9. SVM流行库LIBSvm的使用和调参

    简介:Libsvm is a simple, easy-to-use, and efficient software for SVM classification and regression. It ...

  10. Oracle 12C 新特性之表分区带 异步全局索引异步维护(一次add、truncate、drop、spilt、merge多个分区)

    实验准备:-- 创建实验表CREATE TABLE p_andy(ID number(10), NAME varchar2(40))PARTITION BY RANGE (id)(PARTITION ...