java视频录制
-
在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解决的
这是意料之外的,之前从未想过说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左右,这个性能已经不太能接受,所以尽量使用独立的线程进行录制。