Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

library "/system/lib/libdl.so" ("/system/lib/libdl.so") needed or dlopened by "/system/lib/libnativeloader.so" is not accessible for the namespace #617

Closed
JeanBeaurepaire opened this issue Feb 7, 2017 · 13 comments
Labels

Comments

@JeanBeaurepaire
Copy link

JeanBeaurepaire commented Feb 7, 2017

Hi there,

I'm trying to create a RTMP streaming into a server.
I created first my project with old and deprecated Camera API, and it works perfectly fine.

Then, I tried with the new API, CameraApi2, and I have an issue :
When I start my FFMpegFrameRecorder, I have :

W/System.err: Error: [rtmp @ 0xd2474480] Cannot open connection tcp://10.1.10.243:1935
I/System.out: [aac @ 0xddcb0c00] Qavg: nan
I/System.out: [aac @ 0xddcb0c00] Qavg: nan
D/Camera2VideoFragment: avio_open2 error() error -13: Could not open 'null'
W/System.err: org.bytedeco.javacv.FrameRecorder$Exception: avio_open2 error() error -13: Could not open 'null'
W/System.err:     at org.bytedeco.javacv.FFmpegFrameRecorder.startUnsafe(FFmpegFrameRecorder.java:784)
W/System.err:     at org.bytedeco.javacv.FFmpegFrameRecorder.start(FFmpegFrameRecorder.java:351)
W/System.err:     at com.example.android.camera2video.Camera2VideoFragment$4$1.run(Camera2VideoFragment.java:717)
W/System.err:     at android.os.Handler.handleCallback(Handler.java:743)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:95)
W/System.err:     at android.os.Looper.loop(Looper.java:150)
W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5639)
W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:805)
W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:695)

You can see there is a TCP fail connection with FFmpegLogCallback, but I don't understand because on the same network with the same server it works..

I created my project and started it with the sample andrid-Camera2Video of Google.

I init my recorder in this function :

private void setUpMediaRecorder() throws IOException {
        final Activity activity = getActivity();
        if (null == activity) {
            return;
        }
        FFmpegLogCallback.set();
        if (yuvImage == null) {
            yuvImage = new Frame(mVideoSize.getWidth(), mVideoSize.getHeight(), Frame.DEPTH_UBYTE, 2);
            Log.i(TAG, "create yuvImage");
        }


        Log.i(TAG, "ffmpeg_url: " + ffmpeg_link);

        recorder = new FFmpegFrameRecorder(ffmpeg_link, mVideoSize.getWidth(), mVideoSize.getHeight(), 1);
        recorder.setFormat("flv");
        recorder.setSampleRate(sampleAudioRateInHz);
        // Set in the surface changed method
        recorder.setFrameRate(frameRate);

        Log.i(TAG, "recorder initialize success");

        audioRecordRunnable = new AudioRecordRunnable();
        audioThread = new Thread(audioRecordRunnable);
        runAudioThread = true;
}

Then my ImageReader is created like this :

mImageReader = ImageReader.newInstance(mVideoSize.getWidth(), mVideoSize.getHeight(),
                                                   ImageFormat.YUV_420_888,
                                                   1);
            mImageReader.setOnImageAvailableListener(mOnImageAvailableListener, mBackgroundHandler);
            surfaces.add(previewSurface);
            surfaces.add(mImageReader.getSurface());

Finally, my Listener is called like this :

private final ImageReader.OnImageAvailableListener mOnImageAvailableListener
            = new ImageReader.OnImageAvailableListener() {

        @Override
        public void onImageAvailable(final ImageReader reader) {
            mBackgroundHandler.post(new Runnable() {
                @Override
                public void run() {
                    if (audioRecord == null || audioRecord.getRecordingState() != AudioRecord.RECORDSTATE_RECORDING) {
                        startTime = System.currentTimeMillis();
                        return;
                    }
                    Image img = reader.acquireNextImage();
                    final ByteBuffer buffer = img.getPlanes()[0].getBuffer();
                    byte[] bytes = new byte[buffer.remaining()];
                    buffer.get(bytes, 0, bytes.length);
                    img.close();

                    ((ByteBuffer) yuvImage.image[0].position(0)).put(bytes);

                    Log.v(TAG, "Writing Frame");
                    long t = 1000 * (System.currentTimeMillis() - startTime);
                    if (t > recorder.getTimestamp()) {
                        recorder.setTimestamp(t);
                    }
                    try {
                        recorder.record(yuvImage);
                    } catch (FFmpegFrameRecorder.Exception e) {
                        Log.v(TAG, e.getMessage());
                        e.printStackTrace();
                    }

                }
            });
        }

My FFMpegFrameRecorder is called here :

mCameraDevice.createCaptureSession(surfaces, new CameraCaptureSession.StateCallback() {

                @Override
                public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {
                    mPreviewSession = cameraCaptureSession;
                    updatePreview();
                    getActivity().runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            // UI
                            mButtonVideo.setText(R.string.stop);
                            mIsRecordingVideo = true;

                            try {
                                recorder.start();
                            } catch (FFmpegFrameRecorder.Exception e) {
                                Log.d(TAG, e.getMessage());
                                e.printStackTrace();
                            }
                            startTime = System.currentTimeMillis();
                            recording = true;
                            audioThread.start();
                            // Start recording
                            //mMediaRecorder.start();
                        }
                    });
                }

I really don't understand, any help would be appreciate,

Thanks a lot,

@JeanBeaurepaire JeanBeaurepaire changed the title avio_open2 error() error -13: Could not open 'null' avio_open2 error() error -13: Could not open 'null' with Camera2 Feb 7, 2017
@saudet
Copy link
Member

saudet commented Feb 8, 2017

BTW, this sounds like a question for Stack Overflow, so you might want to try to ask there instead.

@JeanBeaurepaire
Copy link
Author

Ok, but the stacktrace appears in the code of your library. Could it be because I'm using Android 6.0 and TCP connection is different than devices below Android 5.0 ? Is it someone who achieved to create a RTMP stream with API>23 ?

@saudet
Copy link
Member

saudet commented Feb 8, 2017

No it doesn't appear in my code, it appears in the code of FFmpeg:

W/System.err: Error: [rtmp @ 0xd2474480] Cannot open connection tcp://10.1.10.243:1935

If you think this is a bug in FFmpeg, then please post a ticket upstream over there.

@JeanBeaurepaire
Copy link
Author

Yes maybe it is, but how can I have a better stacktrace than this line ? It doesn't explain why, or which part of their code is wrong

@saudet
Copy link
Member

saudet commented Feb 9, 2017

You could try to call av_log_set_level(AV_LOG_TRACE) during init and see what that gives.

@JeanBeaurepaire
Copy link
Author

Ok I think I get it : I have an issue on Android 6+ when I'm loading your library.

I/System.out: Loading class org.bytedeco.javacpp.avutil
I/System.out: Loading library dl
E/linker: library "/system/lib/libdl.so" ("/system/lib/libdl.so") needed or dlopened by "/system/lib/libnativeloader.so" is not accessible for the namespace: [name="classloader-namespace", ld_library_paths="", default_library_paths="/data/app/com.example.android.camera2video-2/lib/arm:/data/app/com.example.android.camera2video-2/base.apk!/lib/armeabi", permitted_paths="/data:/mnt/expand"]
I/System.out: Failed to load for dl#: java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libdl.so" needed or dlopened by "/system/lib/libnativeloader.so" is not accessible for the namespace "classloader-namespace"
I/System.out: Loading library gcc
I/System.out: Failed to load for gcc#: java.lang.UnsatisfiedLinkError: com.android.tools.fd.runtime.IncrementalClassLoader$DelegateClassLoader[DexPathList[[dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-videoinput-0.200-1.3_5f9043adaa08d382e65b290f8b20baf737a5511a-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-support-annotations-25.0.1_2ec6a9f7c9111afc83a3ea0e6b728ad25cbb5aa0-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-slice_9-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-slice_8-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-slice_7-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-slice_6-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-slice_5-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-slice_4-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-slice_3-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-slice_2-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-slice_1-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-slice_0-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-opencv-3.1.0-1.3_52887fdeb27f946372c0983d85aae4bcecdb013b-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-librealsense-1.9.6-1.3_3daedd62e1769f3c559824c4d7ff22ac3d850ce4-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-libfreenect-0.5.3-1.3_ca10df640f14637ef95adfe985413ac6767c0c73-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-libdc1394-2.2.4-1.3_f3f6f88ce6c2f46ef2ce42aab67f73ba249b1836-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-javacv-1.3_70bedee27d0dc44452ca8b47c1795d096f1f51b0-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-javacpp-1.3_ecf2fe27685b2119e27964f69073b9853ba1af47-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-internal_impl-25.0.1_f4ceab4ba2ec4811dd21aabd6f8d6db119bfc513-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-internal_impl-25.0.1_e1daeffe7a336928ad41246fdb899136aeb3ac8a-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-internal_impl-25.0.1_de221e28a31dc5a240cde63a86760eb720a743c8-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-internal_impl-25.0.1_94770d08d24f473124435bde88fc33c1f0dce693-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-internal_impl-25.0.1_5123f0030b840f8eb07ce6ba9390ab72f202933d-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-internal_impl-25.0.1_415f69a1bf70182cfba9aac86299728fe18aae00-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-flycapture-2.9.3.43-1.3_b6704d66106fb5f7409b5359f65e7fb7c0f3c1cd-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-flandmark-1.07-1.3_a128250aef4ad10933847ed880f2a66395b64522-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-ffmpeg-3.2.1-1.3_322f8c46ab03c7e0db7dae3dd112efe6f3906682-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-com.getkeepsafe.relinker-relinker-1.2.2_6bd15d2a2f0d7d3e5afcc5475093fc7e0e4accd5-classes.dex", dex file "/data/data/com.exa
I/System.out: Loading library gnustl_static
I/System.out: Failed to load for gnustl_static#: java.lang.UnsatisfiedLinkError: com.android.tools.fd.runtime.IncrementalClassLoader$DelegateClassLoader[DexPathList[[dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-videoinput-0.200-1.3_5f9043adaa08d382e65b290f8b20baf737a5511a-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-support-annotations-25.0.1_2ec6a9f7c9111afc83a3ea0e6b728ad25cbb5aa0-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-slice_9-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-slice_8-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-slice_7-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-slice_6-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-slice_5-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-slice_4-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-slice_3-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-slice_2-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-slice_1-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-slice_0-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-opencv-3.1.0-1.3_52887fdeb27f946372c0983d85aae4bcecdb013b-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-librealsense-1.9.6-1.3_3daedd62e1769f3c559824c4d7ff22ac3d850ce4-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-libfreenect-0.5.3-1.3_ca10df640f14637ef95adfe985413ac6767c0c73-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-libdc1394-2.2.4-1.3_f3f6f88ce6c2f46ef2ce42aab67f73ba249b1836-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-javacv-1.3_70bedee27d0dc44452ca8b47c1795d096f1f51b0-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-javacpp-1.3_ecf2fe27685b2119e27964f69073b9853ba1af47-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-internal_impl-25.0.1_f4ceab4ba2ec4811dd21aabd6f8d6db119bfc513-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-internal_impl-25.0.1_e1daeffe7a336928ad41246fdb899136aeb3ac8a-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-internal_impl-25.0.1_de221e28a31dc5a240cde63a86760eb720a743c8-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-internal_impl-25.0.1_94770d08d24f473124435bde88fc33c1f0dce693-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-internal_impl-25.0.1_5123f0030b840f8eb07ce6ba9390ab72f202933d-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-internal_impl-25.0.1_415f69a1bf70182cfba9aac86299728fe18aae00-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-flycapture-2.9.3.43-1.3_b6704d66106fb5f7409b5359f65e7fb7c0f3c1cd-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-flandmark-1.07-1.3_a128250aef4ad10933847ed880f2a66395b64522-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-ffmpeg-3.2.1-1.3_322f8c46ab03c7e0db7dae3dd112efe6f3906682-classes.dex", dex file "/data/data/com.example.android.camera2video/files/instant-run/dex/slice-com.getkeepsafe.relinker-relinker-1.2.2_6bd15d2a2f0d7d3e5afcc5475093fc7e0e4accd5-classes.dex", dex file "/data/da

My dependencies are loaded like this :

 compile 'org.bytedeco:javacv:1.3'
        compile group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '3.1.0-1.3', classifier: 'android-arm'
        compile group: 'org.bytedeco.javacpp-presets', name: 'ffmpeg', version: '3.2.1-1.3', classifier: 'android-arm'

I tried to fix with your thread on java.lang.UnsatisfiedLinkError, but it seems different..

Someone has the same issue in StackOverflow .

Thank you for your huge help,

@saudet
Copy link
Member

saudet commented Feb 9, 2017 via email

@saudet
Copy link
Member

saudet commented Feb 12, 2017

Actually, it seems like Android 7.0 changed a few things:
https://developer.android.com/about/versions/nougat/android-7.0-changes.html

@JeanBeaurepaire
Copy link
Author

JeanBeaurepaire commented Feb 13, 2017

Oh yes interesting !
https://developer.android.com/about/versions/nougat/android-7.0-changes.html#ndk.
Can I resolve it in my app or do you must update your library ?

@JeanBeaurepaire JeanBeaurepaire changed the title avio_open2 error() error -13: Could not open 'null' with Camera2 library "/system/lib/libdl.so" ("/system/lib/libdl.so") needed or dlopened by "/system/lib/libnativeloader.so" is not accessible for the namespace Feb 13, 2017
@saudet
Copy link
Member

saudet commented Feb 13, 2017

Removing the android-arm.properties and android-x86.properties files from your APK might work.

@JeanBeaurepaire
Copy link
Author

OK i removed those 2 files in javacpp.jar, and no more library error. But I have still the same issue

I/System.out: [rtmp @ 0xd7277c60] No default whitelist set
I/System.out: [tcp @ 0xd13b7f80] No default whitelist set
W/System.err: Error: [rtmp @ 0xd7277c60] Cannot open connection tcp://10.1.10.243:1935
I/System.out: [aac @ 0xd13fec00] Qavg: nan
I/System.out: [aac @ 0xd13fec00] Qavg: nan
D/Camera2VideoFragment: avio_open2 error() error -13: Could not open 'null'
W/System.err: org.bytedeco.javacv.FrameRecorder$Exception: avio_open2 error() error -13: Could not open 'null'
W/System.err:     at org.bytedeco.javacv.FFmpegFrameRecorder.startUnsafe(FFmpegFrameRecorder.java:784)
W/System.err:     at org.bytedeco.javacv.FFmpegFrameRecorder.start(FFmpegFrameRecorder.java:351)
W/System.err:     at com.example.android.camera2video.Camera2VideoFragment$4$1.run(Camera2VideoFragment.java:719)
W/System.err:     at android.os.Handler.handleCallback(Handler.java:751)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:95)
W/System.err:     at android.os.Looper.loop(Looper.java:154)
W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:6209)
W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)

@saudet
Copy link
Member

saudet commented Feb 14, 2017

@Abbo44 So file a ticket upstream: https://ffmpeg.org/bugreports.html

@saudet
Copy link
Member

saudet commented Mar 12, 2017

Fix included in JavaCPP 1.3.2. Thanks for reporting!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants