java.lang.NoClassDefFoundError:org.bytedeco.javacpp.avutil javacv出现此错误

我正在将javacv用于android中的视频采集器。

当我运行我的应用程序时,会发生错误。

我的代码:

package com.example.usb.grabbers;

import android.graphics.ImageFormat;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.Size;
import android.media.AudioRecord;
import android.os.Build;
import android.util.Log;


import androidx.annotation.RequiresApi;

import com.example.usb.Streameractivity;


import org.bytedeco.javacpp.avcodec;
import org.bytedeco.javacv.FFmpegFrameRecorder;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.FrameRecorder;

import java.nio.ByteBuffer;
import java.util.Objects;


public class VideoFrameGrabber {
// Member variables
private final String LOG_TAG = VideoFrameGrabber.class.getName();
private boolean recording;
private Camera camera;
private FFmpegFrameRecorder recorder;
private int frameRate = 30;
private int imagesIndex;
private Frame yuvImage = null;
private long[] timestamps;
private long startTime = 0;
private long videoTimestamp;

public VideoFrameGrabber() {
    yuvImage = new Frame(Streameractivity.CAMERA_WIDTH,Streameractivity.CAMERA_HEIGHT,Frame.DEpth_UBYTE,2);
    yuvImage.imageChannels = 2;
    recording = false;
}

public FFmpegFrameRecorder getRecorder() {
    return recorder;
}



@RequiresApi(api = Build.VERSION_CODES.KITKAT)
public Size start(Camera camera,String url) {
    this.camera = camera;
    this.startTime = System.currentTimeMillis();
    recording = true;

    Camera.Parameters params = camera.getParameters();
    params.setPreviewSize(Streameractivity.CAMERA_WIDTH,Streameractivity.CAMERA_HEIGHT);
    camera.setParameters(params);
    Size previewSize = params.getPreviewSize();
    int bufferSize = previewSize.width * previewSize.height * 
 ImageFormat.getBitsPerPixel(params.getPreviewFormat());
    camera.addCallbackBuffer(new byte[bufferSize]);
    camera.setPreviewCallback(new Camera.PreviewCallback() {
        @RequiresApi(api = Build.VERSION_CODES.KITKAT)
        @Override
        public void onPreviewFrame(byte[] data,Camera camera) {
            if (yuvImage != null && recording) {
                videoTimestamp = 1000 * (System.currentTimeMillis() - startTime);
                ((ByteBuffer)yuvImage.image[0].position(0)).put(data);

                try {
                    recorder.setTimestamp(videoTimestamp);
                    recorder.record(yuvImage);

                } catch (FFmpegFrameRecorder.Exception e) {
                    Log.v(LOG_TAG,Objects.requireNonNull(e.getMessage()));
                    e.printStackTrace();
                }
            }
        }
    });

    recorder = new FFmpegFrameRecorder(url,previewSize.width,previewSize.height,1);
    recorder.setformat("flv");
    recorder.setSampleRate(44100);

    recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);
    recorder.setVideoCodecName("libx264");
    Log.v(LOG_TAG,String.format("Codec after is %s",recorder.getVideoCodecName()));
    recorder.setVideoOption("preset","ultrafast");
    recorder.setframeRate(frameRate);
    recorder.setaudioCodec(avcodec.AV_CODEC_ID_AAC);
    Log.v(LOG_TAG,String.format("Audi codec is %s",recorder.getaudioCodecName()));
    recorder.setaudioCodecName("libfdk_aac");
    Log.v(LOG_TAG,String.format("Audi codec after is %s",recorder.getaudioCodecName()));
    recorder.setaudioBitrate(128000);
    recorder.setVideoBitrate(1500000);
    recorder.setVideoQuality(0.5);
    recorder.setGopSize(12);
    recorder.setVideoOption("partitions","i8x8,i4x4,p8x8,b8x8");
    recorder.setVideoOption("direct-pred","1");
    recorder.setVideoOption("weightb","0");

    try {
        recorder.start();
        Log.v(LOG_TAG,String.format("Codec is %d %s",recorder.getVideoCodec(),recorder.getVideoCodecName()));
        Log.v(LOG_TAG,String.format("Audio is %d %s",recorder.getaudioCodec(),recorder.getaudioCodecName()));
    } catch (FrameRecorder.Exception e) {
        Log.v(VideoFrameGrabber.class.getName(),Objects.requireNonNull(e.getMessage()));
    }

    return previewSize;
}

public void stop() {
    camera.setPreviewCallbackWithBuffer(null);
    camera = null;

    try {
        recorder.stop();
        recorder.release();
    } catch (FFmpegFrameRecorder.Exception e) {
        e.printStackTrace();
    }
    recorder = null;
   }
   }

我的libs文件夹

java.lang.NoClassDefFoundError:org.bytedeco.javacpp.avutil javacv出现此错误

运行时出错:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.usb,PID: 22647
java.lang.NoClassDefFoundError: org.bytedeco.javacpp.avutil
    at java.lang.Class.classForName(Native Method)
    at java.lang.Class.forName(Class.java:454)
    at org.bytedeco.javacpp.Loader.load(Loader.java:585)
    at org.bytedeco.javacpp.Loader.load(Loader.java:530)
    at org.bytedeco.javacpp.avcodec$AVPacket.<clinit>(avcodec.java:1694)
    at org.bytedeco.javacv.FFmpegFrameRecorder.<init>(FFmpegFrameRecorder.java:152)
    at com.example.usb.grabbers.VideoFrameGrabber.start(VideoFrameGrabber.java:106)
    at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:2067)
    at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:2099)
    at android.os.Handler.handleCallback(Handler.java:883)
    at android.os.Handler.dispatchMessage(Handler.java:100)
    at android.os.Looper.loop(Looper.java:237)
    at android.app.activityThread.main(activityThread.java:7814)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1068)
 Caused by: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.example.usb-V_C2VyCe0226B4jxtx52Iw==/base.apk"],nativelibraryDirectories=[/data/app/com.example.usb-V_C2VyCe0226B4jxtx52Iw==/lib/arm64,/data/app/com.example.usb-V_C2VyCe0226B4jxtx52Iw==/base.apk!/lib/arm64-v8a,/system/lib64]]] couldn't find "libjniavutil.so"
    at java.lang.Runtime.loadlibrary0(Runtime.java:1067)
    at java.lang.Runtime.loadlibrary0(Runtime.java:1007)
    at java.lang.System.loadlibrary(System.java:1667)
    at org.bytedeco.javacpp.Loader.loadlibrary(Loader.java:804)
    at org.bytedeco.javacpp.Loader.load(Loader.java:613)
    at org.bytedeco.javacpp.Loader.load(Loader.java:530)
    at org.bytedeco.javacpp.avutil.<clinit>(avutil.java:10)
    at java.lang.Class.classForName(Native Method)
    at java.lang.Class.forName(Class.java:454)
    at org.bytedeco.javacpp.Loader.load(Loader.java:585)
    at org.bytedeco.javacpp.Loader.load(Loader.java:546)
    at org.bytedeco.javacv.FFmpegFrameRecorder.tryLoad(FFmpegFrameRecorder.java:94)
    at org.bytedeco.javacv.FFmpegFrameRecorder.<clinit>(FFmpegFrameRecorder.java:115)
    at com.example.usb.grabbers.VideoFrameGrabber.start(VideoFrameGrabber.java:106) 
    at com.example.usb.VideoStreamingConnection.open(VideoStreamingConnection.java:46) 
    at com.example.usb.StreamerService.startStreaming(StreamerService.java:78) 
    at com.example.usb.Streameractivity.startStreaming(Streameractivity.java:211) 
    at com.example.usb.Streameractivity.access$200(Streameractivity.java:51) 
    at com.example.usb.Streameractivity$1.onServiceConnected(Streameractivity.java:73) 
    at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:2067) 
    at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:2099) 
    at android.os.Handler.handleCallback(Handler.java:883) 
    at android.os.Handler.dispatchMessage(Handler.java:100) 
    at android.os.Looper.loop(Looper.java:237) 
    at android.app.activityThread.main(activityThread.java:7814) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1068) 
 Caused by: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.example.usb-V_C2VyCe0226B4jxtx52Iw==/base.apk"],/system/lib64]]] couldn't find "libavutil.so"
    at java.lang.Runtime.loadlibrary0(Runtime.java:1067)
    at java.lang.Runtime.loadlibrary0(Runtime.java:1007)
    at java.lang.System.loadlibrary(System.java:1667)
    at org.bytedeco.javacpp.Loader.loadlibrary(Loader.java:804)
    at org.bytedeco.javacpp.Loader.load(Loader.java:604)
    at org.bytedeco.javacpp.Loader.load(Loader.java:530) 
    at org.bytedeco.javacpp.avutil.<clinit>(avutil.java:10) 
    at java.lang.Class.classForName(Native Method) 
    at java.lang.Class.forName(Class.java:454) 
    at org.bytedeco.javacpp.Loader.load(Loader.java:585) 
    at org.bytedeco.javacpp.Loader.load(Loader.java:546) 
    at org.bytedeco.javacv.FFmpegFrameRecorder.tryLoad(FFmpegFrameRecorder.java:94) 
    at org.bytedeco.javacv.FFmpegFrameRecorder.<clinit>(FFmpegFrameRecorder.java:115) 
    at com.example.usb.grabbers.VideoFrameGrabber.start(VideoFrameGrabber.java:106) 
    at com.example.usb.VideoStreamingConnection.open(VideoStreamingConnection.java:46) 
    at com.example.usb.StreamerService.startStreaming(StreamerService.java:78) 
    at com.example.usb.Streameractivity.startStreaming(Streameractivity.java:211) 
    at com.example.usb.Streameractivity.access$200(Streameractivity.java:51) 
    at com.example.usb.Streameractivity$1.onServiceConnected(Streameractivity.java:73) 
    at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:2067) 
    at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:2099) 
    at android.os.Handler.handleCallback(Handler.java:883) 
    at android.os.Handler.dispatchMessage(Handler.java:100) 
    at android.os.Looper.loop(Looper.java:237) 
    at android.app.activityThread.main(activityThread.java:7814) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1068) 
    I/Process: Sending signal. PID: 22647 SIG: 9

我该如何解决?

在我的libs文件夹中添加了所有libs软件,但是会发生此错误。

为什么会出现此错误?

我看到了很多答案,我尝试了。但是,它没有完成。

我的另一个question.

为此提供解决方案。

wwwqq20010 回答:java.lang.NoClassDefFoundError:org.bytedeco.javacpp.avutil javacv出现此错误

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2459654.html

大家都在问