JavaCV 是一款开源的视觉处理库,基于GPLv2协议,对各种常用计算机视觉库封装后的一组jar包,封装了OpenCV、libdc1394、OpenKinect、videoInput和ARToolKitPlus等计算机视觉编程人员常用库的接口。JavaCV通过其中的utility类方便的在包括Android在内的Java平台上调用这些接口。

终端视频播放推流方案

方案一:

优点:支持流媒体播放,缺点:服务器端编解码性能差(编解码)

Java实现音频自动合并 java 音视频_像素点

方案二:

优点:服务器压力小(不做编解码),缺点:客户端播放支持方案固定

Java实现音频自动合并 java 音视频_像素点

相关知识说明

JavaCV的一些知识

Mat类表示一个图片矩阵,要处理的图片都要读进这个矩阵中。

VideoCapture类表示一个视频对象,它的open()方法传视频地址就是打开视频,传设备号就是打开摄像头。

图片的一些必备知识

(一)图像的认识

图片分矢量图和像素图图,矢量图是由数学表示,比较抽象,不太好理解,比如你脑海里想象一个四边形,这个四边形就是矢量的。CDR、CAD处理的图像就是矢量图,因为是数学表示的,可以无限放大和缩小,不会产生锯齿。像素图是由矩阵的像素点组成,每个像素点就是个小方块,每个方块只能显示一种颜色,单位面积内像素点越密集,图像越清晰。但是放大以后因为像素点是方形的,所以能看见锯齿。PS软件就是处理像素图的。JavaCV也是典型的像素图处理软件,通过相机、摄像头获取到的图片都是像素图。

(二)像素点的认识

像素点每次只能显示一个颜色,颜色由3基本色(RGB)或者4基本色(CMYK)组成,在任何设备彩色屏幕上显示的都是RGB像素,彩色打印机打印的是CMYK色。这就是为什么在电脑上显示的颜色和打印出来的颜色有小许不同。JavaCV主要算法就是计算像素点的颜色,通过各种数学变换得到相似度一类的。笔者个人认为这种方式太牵强,还是要在矢量图上下功夫才行,因为大脑内的所有图像都是矢量的。(个人意见,勿喷,要脸)

(二)视频的认识

视频由图片组成,一帧代表一张图片,帧率就是指每秒切换多少张图片。

https://github.com/SunFlowerOfProtocol/javacv-cvnavi-demo

更多实际编码示例参考:Java音视频开发详解

开发Maven依赖配置

pom.xml,有些包根据自己的环境做选择。

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.cvnavi.javacv

javacv-cvnavi-demo

1.0-SNAPSHOT

org.bytedeco

javacv

1.3.3

org.bytedeco

javacpp

1.3.3

org.bytedeco

javacv-platform

1.3.3

org.bytedeco.javacpp-presets

opencv

3.2.0-1.3

org.bytedeco.javacpp-presets

opencv-platform

3.2.0-1.3

org.bytedeco.javacpp-presets

ffmpeg

3.2.1-1.3

org.bytedeco.javacpp-presets

ffmpeg-platform

3.2.1-1.3

com.github.hoary.ffmpeg

FFmpeg-windows-x86_64

2.0.1.1

注:JavaCV实际上是封装过OpenCV的,如果想了解更多 建议还是从OpenCV开始学习基础类的操作。