欢迎访问我的GitHub
FFmpeg、JavaCPP、JavaCV的关系
- 先简单的梳理一下FFmpeg、JavaCPP、JavaCV的关系:
- FFmpeg、OpenCV可以理解成C语言版的本地库(Native library),Java应用无法直接使用
- JavaCPP将FFmpeg、OpenCV这些常用库做了包装(wrapper),使得Java应用也能使用这些Native API(JavaCPP的底层实现是JNI)
- 这些JavaCPP包装后的API,被JavaCV封装成了工具类(utility classes),这些工具类比原生API更简单易用
- 接下来开始编码,先写一个最简单的内部类,将AVFrame和它对应的数据指针BytePointer都放在这个类中,在调用方法的时候便于传递:
- 接下来是整个程序最重要的方法openMediaAndSaveImage,该方法是整个程序的主体,负责将打开流媒体、解码、转格式、保存、释放等五个步骤串起来,外部只要调用这个方法就能完成整个功能:
- 现在整体逻辑已经清楚了,再来看里面openMediaAndSaveImage里面调用的那些方法的源码,先看打开流媒体的getFormatContext:
/*** 生成解封装上下文* @param url* @return*/ private AVFormatContext getFormatContext(String url) {// 解封装上下文AVFormatContext pFormatCtx = new avformat.AVFormatContext(null);// 打开流媒体if (avformat_open_input(pFormatCtx, url, null, null) != 0) { log.error("打开媒体失败"); return 声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!