java视频录制

java视频录制

  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
    我的解决方案是在这个帖子里找到的,但是遇到这个问题的人太多,导致这个问题的原因也比较多,例如版本、平台等。而我遇到的这个情况是,在Android M以下版本都是正常的,所以不会是javacv的版本和打包的问题。
    最终是通过ReLinker解决的
    这是意料之外的,之前从未想过说System.loadLibrary("")会不可靠,但是仅仅替换为ReLinker.recursively().loadLibrary(),问题就迎刃而解。

  2. 录制时的参数设置
    初始化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);
录制时需要注意视频预览尺寸与视频录制尺寸混淆,特别是相机预览的宽高的颠倒问题。

  1. javacv库比较大,所以尽量不用gradle的方式集成
  2. 录制比较耗时
    录制540*960的视频需要60ms左右,这个性能已经不太能接受,所以尽量使用独立的线程进行录制。

猜你喜欢

转载自www.cnblogs.com/itpy/p/11825835.html