Android:FFmpegFrameRecorder(JavaCV)UnsatisfiedLinkError

时间:2015-10-07 09:37:57

标签: android opencv ffmpeg javacv

我正在尝试使用OpenCV和一些重叠数据录制视频。我已将OpenCV添加到我的项目中并成功进行了相机预览。在搜索我如何录制视频时,我遇到了JavaCVJavaCV有一个称为RecordActivity的sapmle活动来演示视频录制。它会动态添加CameraView代码并获取相机帧,并将其记录在onPreviewFrame的{​​{1}}方法中。你可以在这里看到完整的代码:

RecordAvtivity.java

我想要做的是在CameraView界面的onCameraFrame metod中录制视频,而不是CvCameraViewListener2的{​​{1}}元素。

onPreviewFrame

来自RecordAvtivity.java的JavaCV记录代码块

PreviewCallback

public Mat onCameraFrame(CvCameraViewFrame inputFrame) { final Mat rgba = inputFrame.rgba(); Core.flip(rgba, rgba, 1); // Overlay some text and record video here. return rgba; } 需要数据为public void onPreviewFrame(byte[] data, Camera camera) { if (audioRecord == null || audioRecord.getRecordingState() != AudioRecord.RECORDSTATE_RECORDING) { startTime = System.currentTimeMillis(); return; } int i = imagesIndex++ % images.length; Frame yuvImage = images[i]; timestamps[i] = 1000 * (System.currentTimeMillis() - startTime); /* get video data */ if (yuvImage != null && recording) { ((ByteBuffer) yuvImage.image[0].position(0)).put(data); try { Log.v(TAG, "Writing Frame"); long t = 1000 * (System.currentTimeMillis() - startTime); if (t > recorder.getTimestamp()) { recorder.setTimestamp(t); } recorder.record(yuvImage); } catch (FFmpegFrameRecorder.Exception e) { Log.v(TAG, e.getMessage()); e.printStackTrace(); } } } ,但我有JavaCV个对象。我需要有效地介于它们之间。

我该怎么做?

更新

我使用以下解决方案来解决我的初始问题

byte[]

但现在我收到了以下错误:

Mat

我已经尝试过以下问题的解决方案,但它不起作用:

JavaCV configuration in Android Studio

我也尝试过JavaCV的手动和gradle安装,但没有一个工作。

我正在使用:

  • Android Studio 1.4
  • OpenCV 3.0
  • JavaCV 1.0

1 个答案:

答案 0 :(得分:0)

将这些行添加到依赖项

(2) - B

并在android {}

中添加packagingOptions
compile 'org.bytedeco.javacpp-presets:opencv:3.0.0-1.1:android-arm'
compile 'org.bytedeco.javacpp-presets:ffmpeg:2.8.1-1.1:android-arm'

并将这些行添加到packagingOptions

packagingOptions{}

它为我工作。希望它对你有所帮助。