android javacv 录像,使用JavaCV(ffmpeg)录制视频
使用JavaCV(ffmpeg)录制视频
JavaCV是对各种常用计算机视觉库的封装后的一组jar包,其中封装了ffmpeg、OpenCV、libdc1394、OpenKinect、videoInput和ARToolKitPlus等计算机视觉编程人员常用库的接口,可以通过其中的utility类方便的在包括Android在内的Java平台上调用这些接口。其中使用最多的应该就是ffmpeg了。
起初Javacv是googlecode下面的一个项目,后续迁移到了github,并且包名也由com.googlecode.javacv改为org.bytedeco.javacv,网上的demo主要有两个:
https://github.com/peirenlei/FFmpegRecorder
https://github.com/CrazyOrr/FFmpegRecorder
我是参考的上面那个,但是使用的是最新的版本1.3.1 。
集成过程中遇到很多问题,弄了一个多星期,在此就记录一下。
其中,javacpp.jar 和 javacv.jar是必须的两个包,然后需要什么功能就添加额外的包。例如我需要用到ffmpeg进行视频录制,则需要添加ffmpeg.jar和ffmpeg-android-arm.jar(打包的arm平台so库)。这里很方便的地方是,so库文件都放在了jar文件里面,所以在集成的时候很简洁明了。
把需要的jar包拷贝到项目的libs目录下就可以直接使用了,
下面就说一下遇到的坑:
在Android M平台,会有异常java.lang.UnsatisfiedLinkError: org.bytedeco.javacpp.avutil
这个问题对应的issue:
https://github.com/bytedeco/javacv/issues/245
https://github.com/bytedeco/javacv/issues/579
我的解决方案是在这个帖子里找到的,但是遇到这个问题的人太多,导致这个问题的原因也比较多,例如版本、平台等。而我遇到的这个情况是,在Android M以下版本都是正常的,所以不会是javacv的版本和打包的问题。
最终是通过ReLinker解决的,这是作者的说明:https://github.com/bytedeco/javacpp-presets/wiki/The-UnsatisfiedLinkError-X-File-%28a-real-experience%29
这是意料之外的,之前从未想过说System.loadLibrary("")会不可靠,但是仅仅替换为ReLinker.recursively().loadLibrary(),问题就迎刃而解。
录制时的参数设置
初始化Frame的参数:
private int frameDepth = Frame.DEPTH_UBYTE; //DEPTH_UBYTE=8
private int frameChannels = 2;
FFmpegFrameRecorder支持很多格式的录制,所以在进行录制时需要指定数据的格式,这些格式定义在org.bytedeco.javacpp.avutil.AV_PIX_FMT_XXX,如果是相机预览回调的YUV格式,则只需要用默认的。如果是RGBA的则需要指定为mVideoRecorder.record(mFrameData, AV_PIX_FMT_RGBA);
录制时需要注意视频预览尺寸与视频录制尺寸混淆,特别是相机预览的宽高的颠倒问题。
javacv库比较大,所以尽量不用gradle的方式集成
录制比较耗时
录制540*960的视频需要60ms左右,这个性能已经不太能接受,所以尽量使用独立的线程进行录制。如果后续发现优化方法再更新,也欢迎留言补充!
CodeBlog是我做的一个编程技术学习客户端,集成了很多技术网站上的博客,应用宝详情页
android javacv 录像,使用JavaCV(ffmpeg)录制视频相关推荐
- I.MX6 FFmpeg 录制视频
/************************************************************************** I.MX6 FFmpeg 录制视频* 说明:* ...
- JavaCV/FFmpeg录制视频并添加多重滤镜
JavaCV录制视频时常遇到添加FFmpeg音视频滤镜的需求,FFmpeg内置很多常用的滤镜,如果添加多个滤镜的时候代码处理相对单个要复杂一点,使用滤镜的时候需要注意像素格式的转换,FFmpeg处理的 ...
- ffmpeg录制视频时添加时间水印
IPcamera录制视频,经常用到时间戳水印.ffmpeg avfilter模块,可以实现水印的添加 设置filter const char *filters_descr = "drawte ...
- FFMPEG录制视频
安装 ➜ sudo apt-get install yasm libx264-dev libfaac-dev libmp3lame-dev libtheora-dev libvorbis-dev li ...
- Android自定义view之仿微信录制视频按钮
本文章只写了个类似微信的录制视频的按钮,效果图如下: 一.主要的功能: 1.长按显示进度条,单击事件,录制完成回调 2.最大时间和最小时间控制 3.进度条宽度,颜色设置 二.实现 ...
- Android 调用系统相机拍照和录制视频,保存照片和视频
1.申请权限 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ...
- android 拍照 录视频教程,手机如何录制视频,详细录制教程分享给大家
很多人不知道手机上自带的屏幕录制功能怎么用,其实很简单,今天小编就来分享一下,到底手机上自带的屏幕录制功能怎么用,以iPhone和安卓这两种类型的手机为例,有需要的可以试试. 1.iphone录屏 很 ...
- android yuv加水印_Android Camera录制视频添加水印
通常用Camera 采集视频 得到预览数据,使用mediaCodec获取视频数据,用mediaMuxer进行音视频的混流, 如果想要添加水印很简单: 1.拿到相机预览的帧数据 2.将帧数据转为Bitm ...
- android 美颜录像,Android 关于美颜/滤镜 利用PBO从OpenGL录制视频
前言 上次我写了一遍文章<Android 关于美颜/滤镜 从OpenGl录制视频的一种方案>,里面利用ImageReader来从获取Surface上获取数据,但是经过@熊皮皮的提醒,我发现 ...
最新文章
- 《数学之美》第12章 有限状态机—地图与本地搜索的核心技术
- httpurlconnect设置中文参数_CNC数控机床三菱系统参数的设置及报警解除
- 用户输入与while循环
- 网络名称空间 实例研究 veth处于不同网络的路由问题
- Equinix公司在巴西圣保罗开通了一个数据中心
- boost::coroutine模块实现不对称链的测试程序
- Smarty foreach
- JavaSE各阶段练习题----Map
- Linux crontab定时执行任务
- css 如何让背景图片拉伸填充避免重复显示
- suse 10 下mysql安装
- OAuth2.0_授权服务配置_资源服务测试_Spring Security OAuth2.0认证授权---springcloud工作笔记146
- 汇编学习--7.12--总结
- linux内核安全模块,对Linux内核的修改 - Linux 安全模块(LSM)简介_Linux安全_Linux公社-Linux系统门户网站...
- 生活娱乐 WIFI机器人(某机器发烧友自己动手做一台)
- Java中IO演练之银行账号校验
- 2019面试题:谈谈你的IT职业发展路径规划
- CH582 BLE 5.0 使用 LE Coded 广播和连接
- 侍魂微信新服务器2019,侍魂胧月传说手游2019年5月14日微信问答试炼答案
- 连续型随机变量及概率密度