最近工作中因为项目的原因边学边用,接触并使用JavaCV做了一些相关的产品,目前觉得,JavaCV在图形图像(人家本身就是一个视觉库)的功能真的挺强大,而且使用起来避免了复杂的平台处理。下面整理一下对JavaCV库的初步理解。

1. JavaCV 简介

JavaCV是对各种常用计算机视觉库的封装后的一组jar包,其中封装了FFmpeg、OpenCV等计算机视觉编程人员常用库的接口,可以通过其中的Utility类方便的在包括Android在内的Java平台上调用这些接口。其中使用最多的应该就是FFmpeg了。 

最开始Javacv是googlecode下面的一个项目,后来迁移到了github,因此JavaCV相关的包名也由​​com.googlecode.javacv​​改为​​org.bytedeco.javacv。​​目前最新版本是 1.3.3。项目地址:​​https://github.com/bytedeco/javacv​

2. JavaCV 基本使用指南

从github项目中下载打包好的jar包,其中javacpp.jar 和 javacv.jar是必须的两个包,然后需要什么功能就添加额外的包。例如我需要用到ffmpeg进行视频录制,则需要添加ffmpeg.jar和ffmpeg-android-arm.jar(打包的arm平台so库)。这里很方便的地方是,so库文件都放在了jar文件里面,在集成的时候很简洁明了。 

3. JavaCV 相关例子

短视频录制:

​https://github.com/peirenlei/FFmpegRecorder​​ 

​https://github.com/CrazyOrr/FFmpegRecorder​

短视频录制 + 拉流存储 + 视频转播:

​https://github.com/lmylr/LyMedia​

4. JavaCV常见问题

4.1. 在Android M平台,会有异常​​java.lang.UnsatisfiedLinkError: org.bytedeco.javacpp.avutil​​ 

这个问题,在作者的Issue里面也有人反映过:

​https://github.com/bytedeco/javacv/issues/245​​、​​https://github.com/bytedeco/javacv/issues/579​​ 

最终是通过​​ReLinker​​解决的:​​The UnsatisfiedLinkError X File (a real experience)​

解决这个问题之前从未想过​​System.loadLibrary("")​​会不可靠,在这里替换为​​ReLinker.recursively().loadLibrary()之后,问题就解决了。​


最近工作中因为项目的原因边学边用,接触并使用JavaCV做了一些相关的产品,目前觉得,JavaCV在图形图像(人家本身就是一个视觉库)的功能真的挺强大,而且使用起来避免了复杂的平台处理。下面整理一下对JavaCV库的初步理解。