JAVA音视频解决方案--JavaCV

JavaCV

JavaCV是多种开源计算机视觉库组成的包装库一组jar包。
JavaCV是一款基于JavaCPP 调用方式(JNI的一层封装),由多种开源计算机视觉库组成的包装库,封装了包含FFmpeg、OpenCV、tensorflow、caffe、tesseract、libdc1394、OpenKinect、videoInput和ARToolKitPlus等在内的计算机视觉领域的常用库和实用程序类。JavaCV基于Apache License Version 2.0协议和GPLv2两种协议,JavaCV支持Windows、Linux、MacOS,Android、IOS在内的Java平台上调用这些接口。

JavaCPP

FFmpeg是C语言中著名的音视频库(不是c++,使用c++调用ffmpeg库的性能损失与Java方式调用损耗相差并不大)。
JavaCV基于JavaCPP在FFmpeg和Java之间构建了桥梁;当然这是有性能损失的,性能损失暂且不提;由于调用ffmpeg之于jvm是native方法,所以通过ffmpeg创建的结构体实例与常量、方法等等都是使用堆外内存(存放在元空间【本地内存】)都需要像C那样手动的释放这些资源(jvm并不会帮你回收这部分), 以此来保证不会发生内存溢出/泄露等风险。

JAVACV 与 JavaCPP关系

JavaCPP提供了在Java中高效访问本地C++的方法。采用JNI技术实现,支持所有Java实现包括Android系统,Avian 和 RoboVM。
JavaCPP提供了一系列的Annotation将Java代码映射到C++代码,并使用一个可执行的jar包将C代码转化为可以从JVM内调用的动态链接库文件。可以简单的理解为JavaCV利用了JavaCPP和JavaCPP Presets做支持

JAVACV封装的一些关键对象与流程

JavaCV通过JavaCPP调用了FFmpeg,并且对FFmpeg复杂的操作进行了封装;
关键对象:

  • FrameGrabber:用于获取视频流(FFmpegFrameGrabber是具体的FrameGrabber实现)。
  • FrameRecorder:用于记录视频流(FFmpegFrameRecorder是具体的FrameRecorder实现)。
  • Frame:用于处理图像或视频帧。
    处理流程:
  • 实例化FrameGrabber(例如FFmpegFrameGrabber)。
  • 设置必要的参数(例如输入视频文件路径或网络流地址)。
  • 调用start()方法开始获取视频流。
  • 循环获取视频帧(Frame对象)。
  • 对获取到的帧进行处理(例如转换格式、编码、裁剪等)。
  • 实例化FrameRecorder(例如FFmpegFrameRecorder)。
  • 设置输出文件路径、视频分辨率、格式等参数。
  • 调用start()方法开始记录帧。
  • 将处理过的帧传递给FrameRecorder进行记录。
  • 处理完毕后,调用stop()方法停止记录。
  • 释放资源。
FFmpegFrameGrabber grabber = new FFmpegFrameGrabber("input.mp4");
grabber.start();
 
FFmpegFrameRecorder recorder = new FFmpegFrameRecorder("output.mp4", 640, 480);
recorder.setFormat("mp4");
recorder.start();
 
Frame frame;
while ((frame = grabber.grabFrame()) != null) {
    // 对帧进行处理
    // ...
    recorder.record(frame);
}

grabber.stop();
recorder.stop();
grabber.release();
recorder.release();

帧抓取器(FrameGrabber)

封装了FFmpeg的检索流信息,自动猜测视频解码格式,音视频解码等具体API,并把解码完的像素数据(可配置像素格式)或音频数据保存到Frame中返回。

帧录制器/推流器(FrameRecorder)

封装了FFmpeg的音视频编码操作和封装操作,把传参过来的Frame中的数据取出并进行编码、封装、发送等操作流程。

帧(Frame)

用于存放音视频帧(图像像素和音频采样数据,如果没有配置FrameGrabber的像素格式和音频格式,那么默认解码后的视频格式yuv420j,音频则是pcm采样数据)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值