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

RTMP - Fatal signal 11 (SIGSEGV) when switching into airplane mode #52

Closed
keremkusmezer opened this issue Dec 18, 2017 · 32 comments
Closed

Comments

@keremkusmezer
Copy link

Issue description

During RTMP stream playback with Exoplayer, when i switch the phone to airplane mode, exoplayer throws the following exception , the error handler block of exoplayer doesn't get called and the process dies.

E ExoPlayerImplInternal: Source error.
E ExoPlayerImplInternal: net.butterflytv.rtmp_client.RtmpClient$RtmpIOException
E ExoPlayerImplInternal: at net.butterflytv.rtmp_client.RtmpClient.open(RtmpClient.java:55)
E ExoPlayerImplInternal: at com.google.android.exoplayer2.ext.rtmp.RtmpDataSource.open(RtmpDataSource.java:57)
E ExoPlayerImplInternal: at com.google.android.exoplayer2.upstream.DefaultDataSource.open(DefaultDataSource.java:141)
E ExoPlayerImplInternal: at com.google.android.exoplayer2.source.ExtractorMediaPeriod$ExtractingLoadable.load(ExtractorMediaPeriod.java:702)
E ExoPlayerImplInternal: at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:315)
E ExoPlayerImplInternal: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
E ExoPlayerImplInternal: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
E ExoPlayerImplInternal: at java.lang.Thread.run(Thread.java:764)
F libc : Fatal signal 11 (SIGSEGV), code 1, fault addr 0xc22e83b4 in tid 22827 (Loader:Extracto), pid 21732 ()
Reproduction steps

Just start playing any stream with exoplayer and then switch to airplane mode or close the network connection.

    final BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
    final TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveTrackSelection.Factory(bandwidthMeter);
    TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
    player = ExoPlayerFactory.newSimpleInstance(getContext(), trackSelector);
    Surface videoSurface = new Surface(getSurfaceTexture());
    player.setVideoSurface(videoSurface);
    DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(getContext(), "testapplication");
    ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
    MediaSource videoSource =
            new ExtractorMediaSource(Uri.parse(getCurrentVideoUrl()),
                    dataSourceFactory,
                    extractorsFactory,
                    null,
                    null);
    player.addListener(new PlayerEventHandler(this));
    player.setRepeatMode(Player.REPEAT_MODE_ALL);
    player.prepare(videoSource);

Link to test content

Version of ExoPlayer being used

Exoplayer 2.6.0 is used
//Exoplayer Support Added Here
implementation 'com.google.android.exoplayer:exoplayer:2.6.0'
//Support For Rtmp Streaming Added Here
implementation 'com.google.android.exoplayer:extension-rtmp:2.6.0'

Device(s) and version(s) of Android being used

NEXUS 5 7.0
GM5 Plus 7.0
Android Emulator Android 8.1.0
Android Emulator Android 8.0

A full bug report captured from the device

bugreport-sdk_gphone_x86-OPM1.171004.001-2017-12-16-00-05-18.zip

Relevant part of the bug report:

12-16 00:04:59.321 10080 23330 29613 E ExoPlayerImplInternal: Source error.
12-16 00:04:59.321 10080 23330 29613 E ExoPlayerImplInternal: net.butterflytv.rtmp_client.RtmpClient$RtmpIOException
12-16 00:04:59.321 10080 23330 29613 E ExoPlayerImplInternal: at net.butterflytv.rtmp_client.RtmpClient.open(RtmpClient.java:55)
12-16 00:04:59.321 10080 23330 29613 E ExoPlayerImplInternal: at com.google.android.exoplayer2.ext.rtmp.RtmpDataSource.open(RtmpDataSource.java:57)
12-16 00:04:59.321 10080 23330 29613 E ExoPlayerImplInternal: at com.google.android.exoplayer2.upstream.DefaultDataSource.open(DefaultDataSource.java:141)
12-16 00:04:59.321 10080 23330 29613 E ExoPlayerImplInternal: at com.google.android.exoplayer2.source.ExtractorMediaPeriod$ExtractingLoadable.load(ExtractorMediaPeriod.java:702)
12-16 00:04:59.321 10080 23330 29613 E ExoPlayerImplInternal: at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:315)
12-16 00:04:59.321 10080 23330 29613 E ExoPlayerImplInternal: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
12-16 00:04:59.321 10080 23330 29613 E ExoPlayerImplInternal: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
12-16 00:04:59.321 10080 23330 29613 E ExoPlayerImplInternal: at java.lang.Thread.run(Thread.java:764)
12-16 00:04:59.322 10080 23330 29614 F libc : Fatal signal 11 (SIGSEGV), code 1, fault addr 0xc1feefb4 in tid 29614 (Loader:Extracto), pid 23330 (co.wormapp.worm)
12-16 00:04:59.342 10080 23330 23330 D wormlog : Player exception occurred:com.google.android.exoplayer2.ExoPlaybackException
12-16 00:04:59.342 10080 23330 23330 D wormlog : Player rtmp exception occurred:-3
12-16 00:04:59.342 10080 23330 23330 I ExoPlayerImpl: Release 1d5c0fe [ExoPlayerLib/2.6.0] [generic_x86, Android SDK built for x86, Google, 27] [goog.exo.core, goog.exo.rtmp]
12-16 00:04:59.338 10080 29670 29670 W crash_dump32: type=1400 audit(0.0:17): avc: denied { search } for name="uk.co.wormapp.worm" dev="dm-0" ino=115523 scontext=u:r:crash_dump:s0:c512,c768 tcontext=u:object_r:app_data_file:s0:c512,c768 tclass=dir permissive=0
12-16 00:04:59.382 10080 29670 29670 I crash_dump32: obtaining output fd from tombstoned, type: kDebuggerdTombstone
12-16 00:04:59.382 1058 1511 1511 I /system/bin/tombstoned: received crash request for pid 23330
12-16 00:04:59.385 10080 29670 29670 I crash_dump32: performing dump of process 23330 (target tid = 29614)
12-16 00:04:59.385 10080 29670 29670 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
12-16 00:04:59.385 10080 29670 29670 F DEBUG : Build fingerprint: 'google/sdk_gphone_x86/generic_x86:8.1.0/OPM1.171004.001/4376136:user/release-keys'
12-16 00:04:59.385 10080 29670 29670 F DEBUG : Revision: '0'
12-16 00:04:59.385 10080 29670 29670 F DEBUG : ABI: 'x86'
12-16 00:04:59.385 10080 29670 29670 F DEBUG : pid: 23330, tid: 29614, name: Loader:Extracto >>> uk.co.wormapp.worm <<<
12-16 00:04:59.385 10080 29670 29670 F DEBUG : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xc1feefb4
12-16 00:04:59.385 10080 29670 29670 F DEBUG : eax 13805f60 ebx fff80000 ecx 8a180000 edx 00000063
12-16 00:04:59.385 10080 29670 29670 F DEBUG : esi ae7df79c edi 8a182444
12-16 00:04:59.385 10080 29670 29670 F DEBUG : xcs 00000073 xds 0000007b xes 0000007b xfs 0000003b xss 0000007b
12-16 00:04:59.385 10080 29670 29670 F DEBUG : eip ae793921 ebp 8207f6c8 esp 8207f660 flags 00010a07
12-16 00:04:59.387 10080 29670 29670 F DEBUG :
12-16 00:04:59.387 10080 29670 29670 F DEBUG : backtrace:
12-16 00:04:59.387 10080 29670 29670 F DEBUG : #00 pc 00093921 /system/lib/libc.so (arena_run_dalloc+113)
12-16 00:04:59.387 10080 29670 29670 F DEBUG : #1 pc 0008e500 /system/lib/libc.so (arena_dalloc_large_locked_impl+224)
12-16 00:04:59.387 10080 29670 29670 F DEBUG : #2 pc 0008e40b /system/lib/libc.so (je_arena_dalloc_large_junked_locked+43)
12-16 00:04:59.387 10080 29670 29670 F DEBUG : #3 pc 000b2cea /system/lib/libc.so (je_tcache_bin_flush_large+378)
12-16 00:04:59.387 10080 29670 29670 F DEBUG : #4 pc 000b3c0f /system/lib/libc.so (tcache_destroy+607)
12-16 00:04:59.387 10080 29670 29670 F DEBUG : #5 pc 000b3994 /system/lib/libc.so (je_tcache_cleanup+36)
12-16 00:04:59.387 10080 29670 29670 F DEBUG : #6 pc 000b4436 /system/lib/libc.so (je_tsd_cleanup+70)
12-16 00:04:59.387 10080 29670 29670 F DEBUG : #7 pc 000b54bc /system/lib/libc.so (je_tsd_cleanup_wrapper+44)
12-16 00:04:59.387 10080 29670 29670 F DEBUG : #8 pc 00071b84 /system/lib/libc.so (pthread_key_clean_all()+164)
12-16 00:04:59.387 10080 29670 29670 F DEBUG : #9 pc 000715d9 /system/lib/libc.so (pthread_exit+89)
12-16 00:04:59.387 10080 29670 29670 F DEBUG : #10 pc 0007144d /system/lib/libc.so (__pthread_start(void*)+61)
12-16 00:04:59.387 10080 29670 29670 F DEBUG : #11 pc 000205db /system/lib/libc.so (_start_thread+75)
12-16 00:04:59.387 10080 29670 29670 F DEBUG : #12 pc 0001ec16 /system/lib/libc.so (

@keremkusmezer
Copy link
Author

@mekya Looks like totally lib rtmp related can you have a look. The issue is always reproducible

@mkiisoft
Copy link

mkiisoft commented Dec 19, 2017

I've having the exact same issue. If my streaming is offline I get:

A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x44580084 in tid 22396 (Loader:Extracto)
                                                   
[ 12-18 22:38:00.712   490:  490 W/         ]
debuggerd: handling request: pid=21897 uid=10346 gid=10346 tid=22396

@mekya
Copy link
Contributor

mekya commented Dec 19, 2017

thank you for this feedback and it is great to know the exact scenario, I am gonna try to look at today.

@keremkusmezer
Copy link
Author

#52 is my current issue.

@mekya
Copy link
Contributor

mekya commented Dec 19, 2017

you are using latest exoplayer?

@keremkusmezer
Copy link
Author

//Exoplayer Support Added Here
implementation 'com.google.android.exoplayer:exoplayer:2.6.0'
//Support For Rtmp Streaming Added Here
implementation 'com.google.android.exoplayer:extension-rtmp:2.6.0'

@keremkusmezer
Copy link
Author

2.6.0 is used

@keremkusmezer
Copy link
Author

were you able to reproduce the bug in your own setup? It always occurs once i switch to wifi or lose connectivity , it never occurs when the stream is unavailable.

@mekya
Copy link
Contributor

mekya commented Dec 19, 2017

You already mentioned the version earlier. Sorry for that.

I am just trying. Let you know about the progress soon

@keremkusmezer
Copy link
Author

For example it happens during playback after the buffer is consumed and if it tries to buffer new content the crash happens.

@keremkusmezer
Copy link
Author

During play i don't put the live parameter.

@keremkusmezer
Copy link
Author

@mekya were you able to reproduce the exception?

@mekya
Copy link
Contributor

mekya commented Dec 19, 2017

Unfourtunately

At first, I have tried the case you reported on this repo. It works, there will be no problem.

After that I've merged the Exoplayer latest release with the repo above and tested again. It works again. However my tests are on android 6.0.1

Right now, I am downloading oreo image and will try on that. Anyway, I have something to do right now. I need to switch to some other task and return back this issue later today.

@keremkusmezer
Copy link
Author

my android version is 25, and it also occurs on android 7.0 devices in never tried the code with Android 6.0.1 interesting.

@keremkusmezer
Copy link
Author

Any chance there to reproduce?

@mekya
Copy link
Contributor

mekya commented Dec 19, 2017

I switched back to this issue again.

Unfourtunately, I could not reproduce this bug.

Here is the last thing I have done
I have download an oreo image and started the emulator on mac.

Started the rtmp stream after a while I enabled the airplane mode on the emulator and it stops normally without creating an exception or fatal signal.

Is it possible for you to try the your case with Exoplayer demo app on this repo or the original the repo?

@keremkusmezer
Copy link
Author

hmmm interesting sure i can try to reproduce it using your repo no worries.

@keremkusmezer
Copy link
Author

Did you ever tried that on a physical device or only on emulators?

@keremkusmezer
Copy link
Author

@mkiisoft What is the Android Version you are testing on? And which phone are you using it?

@mekya
Copy link
Contributor

mekya commented Dec 20, 2017

yeah I both tried on Android 8.0 Emulator and physical device (Samsung S5, Android 6.0.1) @keremkusmezer

@keremkusmezer
Copy link
Author

Let me test with a fork of the repo.

@mkiisoft
Copy link

@keremkusmezer Android 7.1.1 over a Moto Z Play. Fatal signal 11 only happen if the streaming is not running.

@mkiisoft
Copy link

Got a similar crash when switching from WiFi to let the 4G take the stream:

12-21 13:55:11.533 8526-9012/com.qna.app A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x54 in tid 9012 (Loader:Extracto)
                                                 
                                                 [ 12-21 13:55:11.534   490:  490 W/         ]
                                                 debuggerd: handling request: pid=8526 uid=10346 gid=10346 tid=9012
12-21 13:55:11.537 9519-9519/? W/debuggerd: type=1400 audit(0.0:240): avc: denied { search } for uid=0 name="com.google.android.gms" dev="dm-1" ino=28211 scontext=u:r:debuggerd:s0 tcontext=u:object_r:app_data_file:s0:c512,c768 tclass=dir permissive=0
12-21 13:55:11.540 9519-9519/? W/debuggerd: type=1400 audit(0.0:241): avc: denied { search } for uid=0 name="com.google.android.gms" dev="dm-1" ino=28211 scontext=u:r:debuggerd:s0 tcontext=u:object_r:app_data_file:s0:c512,c768 tclass=dir permissive=0
12-21 13:55:11.606 9519-9519/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
12-21 13:55:11.607 9519-9519/? A/DEBUG: Build fingerprint: 'motorola/addison/addison:7.1.1/NPNS26.118-22-2-8/10:user/release-keys'
12-21 13:55:11.607 9519-9519/? A/DEBUG: Revision: 'p700'
12-21 13:55:11.607 9519-9519/? A/DEBUG: ABI: 'arm'
12-21 13:55:11.607 9519-9519/? A/DEBUG: pid: 8526, tid: 9012, name: Loader:Extracto  >>> com.qna.app <<<
12-21 13:55:11.607 9519-9519/? A/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x54
12-21 13:55:11.607 9519-9519/? A/DEBUG:     r0 00000000  r1 2708a06e  r2 00000000  r3 8f52c400
12-21 13:55:11.607 9519-9519/? A/DEBUG:     r4 00000000  r5 930b4ae4  r6 00000015  r7 930b4a48
12-21 13:55:11.607 9519-9519/? A/DEBUG:     r8 8f527400  r9 00000008  sl 930b4ac8  fp 00000001
12-21 13:55:11.607 9519-9519/? A/DEBUG:     ip 8db98f40  sp 930b4a18  lr 8db8faef  pc 8db8fb00  cpsr 600f0030
12-21 13:55:11.610 9519-9519/? A/DEBUG: backtrace:
12-21 13:55:11.610 9519-9519/? A/DEBUG:     #00 pc 00007b00  /data/app/com.qna.app-1/lib/arm/librtmp-jni.so (RTMP_ReadPacket+759)
12-21 13:55:11.610 9519-9519/? A/DEBUG:     #01 pc 000083ab  /data/app/com.qna.app-1/lib/arm/librtmp-jni.so (RTMP_GetNextMediaPacket+26)
12-21 13:55:11.610 9519-9519/? A/DEBUG:     #02 pc 0000a30b  /data/app/com.qna.app-1/lib/arm/librtmp-jni.so
12-21 13:55:11.610 9519-9519/? A/DEBUG:     #03 pc 0000a295  /data/app/com.qna.app-1/lib/arm/librtmp-jni.so (RTMP_Read+376)
12-21 13:55:11.610 9519-9519/? A/DEBUG:     #04 pc 00004065  /data/app/com.qna.app-1/lib/arm/librtmp-jni.so (Java_net_butterflytv_rtmp_1client_RtmpClient_nativeRead+100)
12-21 13:55:11.610 9519-9519/? A/DEBUG:     #05 pc 000ae519  /system/lib/libart.so (art_quick_generic_jni_trampoline+40)
12-21 13:55:11.610 9519-9519/? A/DEBUG:     #06 pc 000148c5  /dev/ashmem/dalvik-jit-code-cache (deleted)

@mekya
Copy link
Contributor

mekya commented Dec 21, 2017 via email

@mkiisoft
Copy link

mkiisoft commented Dec 21, 2017

@mekya This is my code:

val rtmpMediaSource = ExtractorMediaSource(Uri.parse("the url of the stream"), RtmpDataSource.RtmpDataSourceFactory(), DefaultExtractorsFactory(), Handler(), null)

It's my own app but, as you see, I didn't make any modification. Is the most default values that can be.

This happens to me with r.2.5.6 and 2.6.0 library of ExoPlayer and RTMP. I'm using a Moto Z Play Android 7.1.1

@mekya
Copy link
Contributor

mekya commented Dec 22, 2017 via email

@ojw28
Copy link

ojw28 commented Dec 22, 2017

Is it possible the issue only reproduces on a particular architecture (i.e. x86)?

@mkiisoft
Copy link

mkiisoft commented Dec 22, 2017

@ojw28 I'm not using x86. I'm using a normal Moto Z with Nougat 7.1.1... should be like any other Android device from 2015 till now and @keremkusmezer mention this issue over devices and emulators.

@mekya It's the same implementation as the demo... that's were I took the code from.

This is not a new bug. The FATAL signal 11 when the RTMP is offline happen to me since the first version for ExoPlayer and now I see it switching from WiFi to 4G and when RTMP is offline.

@nagendraK6
Copy link

@mekya I can repro similar issue if RTMP url is unreachable. On further analysis I found that native library is trying to free the unallocated memory. A/libc: Invalid address 0x94274100 passed to free: value not allocated.

@mekya
Copy link
Contributor

mekya commented Jan 25, 2018

Hi,
I have tested the scenario on 3.0.0 which enabling airplane mode while live stream is playing. Unfourtunately, it does not throw exception. On the other side, while phone in airplane mode, I have tried to play the stream again, it throws the exception as @nagendraK6 mentions.

This bug has been fixed with 3.0.1

@mekya
Copy link
Contributor

mekya commented Mar 24, 2018

There is no other comment about this issue. Closing. Please reopen if you are still having the same problem.

@mekya mekya closed this as completed Mar 24, 2018
@lecong
Copy link

lecong commented Apr 9, 2018

Me too. Cannot play rtmp link. Please help me!

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

No branches or pull requests

6 participants