Android client: gstreamer h264 crash
spice-server: 0.15 spice-gtk: 0.39
I modified the spice-server to use h264 as default:
--- a/server/reds.cpp
+++ b/server/reds.cpp
@@ -3428,11 +3428,12 @@ err:
static const char default_renderer[] = "sw";
#if defined(HAVE_GSTREAMER_1_0) || defined(HAVE_GSTREAMER_0_10)
-#define GSTREAMER_CODECS "gstreamer:mjpeg;gstreamer:h264;gstreamer:vp8;gstreamer:vp9;"
+#define GSTREAMER_CODECS "gstreamer:h264;gstreamer:mjpeg;gstreamer:vp8;gstreamer:vp9;"
#else
#define GSTREAMER_CODECS ""
#endif
-static const char default_video_codecs[] = "spice:mjpeg;" GSTREAMER_CODECS;
+//static const char default_video_codecs[] = "spice:mjpeg;" GSTREAMER_CODECS;
+static const char default_video_codecs[] = GSTREAMER_CODECS "spice:mjpeg;";
Then I test the linux client and windows client,they are all normal.But the Android client(aSPICE) crashed:
the server paly video with encode h264, the android client crashed.
2022-03-01 10:05:08.721 13727-13984/com.iiordanov.freeaSPICE D/GLib+GSpice: ../src/decode-glz.c:338 decode_header: 32x19, id 343, ref 0
2022-03-01 10:05:08.733 13727-13975/com.iiordanov.freeaSPICE E/GLib+GLib-GObject: g_type_set_qdata: assertion 'node != NULL' failed
2022-03-01 10:05:08.733 13727-13975/com.iiordanov.freeaSPICE E/GLib+GLib: g_once_init_leave: assertion 'result != 0' failed
2022-03-01 10:05:08.722 13727-13984/com.iiordanov.freeaSPICE D/GLib+GSpice: ../src/decode-glz.c:338 decode_header: 32x11, id 344, ref 0
2022-03-01 10:05:08.734 13727-13975/com.iiordanov.freeaSPICE E/GLib+GLib: g_once_init_leave: assertion 'result != 0' failed
2022-03-01 10:05:08.734 13727-13975/com.iiordanov.freeaSPICE E/signal_handler: Signal handler called with signal: 11,
2022-03-01 10:05:08.724 13727-13727/com.iiordanov.freeaSPICE W/RenderThread: type=1400 audit(0.0:95945): avc: denied { write } for name="sched_assist_boost_freq" dev="proc" ino=4026533817 scontext=u:r:untrusted_app:s0:c40,c257,c512,c768 tcontext=u:object_r:proc_slide_enable:s0 tclass=file permissive=0 app=com.iiordanov.freeaSPICE
2022-03-01 10:05:08.734 13727-13975/com.iiordanov.freeaSPICE I/disconnect: Disconnecting the session.
2022-03-01 10:05:08.733 13727-13975/com.iiordanov.freeaSPICE E/GLib+GLib-GObject: g_pointer_type_register_static: assertion 'g_type_from_name (name) == 0' failed
2022-03-01 10:05:08.734 13727-13975/com.iiordanov.freeaSPICE D/GLib+GSpice: ../src/spice-session.c:2025 session: disconnecting 0
2022-03-01 10:05:08.733 13727-13975/com.iiordanov.freeaSPICE E/GLib+GLib: g_once_init_leave: assertion 'result != 0' failed
2022-03-01 10:05:08.734 13727-13975/com.iiordanov.freeaSPICE E/GLib+GLib: g_once_init_leave: assertion 'result != 0' failed
2022-03-01 10:05:08.734 13727-13975/com.iiordanov.freeaSPICE E/signal_handler: Signal handler called with signal: 11,
2022-03-01 10:05:08.734 13727-13975/com.iiordanov.freeaSPICE I/disconnect: Disconnecting the session.
2022-03-01 10:05:08.734 13727-13975/com.iiordanov.freeaSPICE D/GLib+GSpice: ../src/spice-session.c:2025 session: disconnecting 0
I comment the signal_handle in JNI_OnLoad, and got the tombstone.The crash stack trace:
********** Crash dump: **********
Build fingerprint: 'OPPO/PFCM00/OP5259:11/RP1A.200720.011/1644216948985:user/release-keys'
#00 0x000000000012855c /data/app/~~m5pDxFas9RwkXmggY0GflA==/com.iiordanov.freeaSPICE-rFls7MPuO6-P5JXiYu7gtA==/lib/arm64/libspice.so (gst_buffer_get_video_meta+72) (BuildId: a6355ef17e9ba13882afe292d29245263d4e3c8b)
gst_buffer_get_video_meta
/home/toor/project/spice/android/remote-desktop-clients/remoteClientLib/jni/libs/cerbero/build/sources/android_universal/arm64/gst-plugins-base-1.0-1.18.4/_builddir/../gst-libs/gst/video/gstvideometa.c:175:34
#01 0x00000000000692f8 /data/app/~~m5pDxFas9RwkXmggY0GflA==/com.iiordanov.freeaSPICE-rFls7MPuO6-P5JXiYu7gtA==/lib/arm64/libspice.so (BuildId: a6355ef17e9ba13882afe292d29245263d4e3c8b)
spice_gst_buffer_get_stride
/home/toor/project/spice/android/remote-desktop-clients/remoteClientLib/jni/libs/cerbero/build/sources/android_universal/arm64/spice-gtk-0.39.3/_builddir/../src/channel-display-gst.c:131:27
display_frame
/home/toor/project/spice/android/remote-desktop-clients/remoteClientLib/jni/libs/cerbero/build/sources/android_universal/arm64/spice-gtk-0.39.3/_builddir/../src/channel-display-gst.c:179:0
#02 0x0000000001edd478 /data/app/~~m5pDxFas9RwkXmggY0GflA==/com.iiordanov.freeaSPICE-rFls7MPuO6-P5JXiYu7gtA==/lib/arm64/libgstreamer_android.so
g_timeout_dispatch
/home/toor/project/spice/android/remote-desktop-clients/remoteClientLib/jni/libs/cerbero/build/sources/android_universal/arm64/glib-2.62.6/_builddir/../glib/gmain.c:4835:11
#03 0x0000000001ee06d4 /data/app/~~m5pDxFas9RwkXmggY0GflA==/com.iiordanov.freeaSPICE-rFls7MPuO6-P5JXiYu7gtA==/lib/arm64/libgstreamer_android.so (g_main_context_dispatch+252)
g_main_dispatch
/home/toor/project/spice/android/remote-desktop-clients/remoteClientLib/jni/libs/cerbero/build/sources/android_universal/arm64/glib-2.62.6/_builddir/../glib/gmain.c:3299:27
g_main_context_dispatch
/home/toor/project/spice/android/remote-desktop-clients/remoteClientLib/jni/libs/cerbero/build/sources/android_universal/arm64/glib-2.62.6/_builddir/../glib/gmain.c:4011:0
#04 0x0000000001ee0a18 /data/app/~~m5pDxFas9RwkXmggY0GflA==/com.iiordanov.freeaSPICE-rFls7MPuO6-P5JXiYu7gtA==/lib/arm64/libgstreamer_android.so
g_main_context_iterate
/home/toor/project/spice/android/remote-desktop-clients/remoteClientLib/jni/libs/cerbero/build/sources/android_universal/arm64/glib-2.62.6/_builddir/../glib/gmain.c:4084:5
#05 0x0000000001ee0d28 /data/app/~~m5pDxFas9RwkXmggY0GflA==/com.iiordanov.freeaSPICE-rFls7MPuO6-P5JXiYu7gtA==/lib/arm64/libgstreamer_android.so (g_main_loop_run+248)
g_main_loop_run
/home/toor/project/spice/android/remote-desktop-clients/remoteClientLib/jni/libs/cerbero/build/sources/android_universal/arm64/glib-2.62.6/_builddir/../glib/gmain.c:4278:5
#06 0x00000000000477e0 /data/app/~~m5pDxFas9RwkXmggY0GflA==/com.iiordanov.freeaSPICE-rFls7MPuO6-P5JXiYu7gtA==/lib/arm64/libspice.so (connectSession+108) (BuildId: a6355ef17e9ba13882afe292d29245263d4e3c8b)
connectSession
/home/toor/project/spice/android/remote-desktop-clients/remoteClientLib/jni/android/android-service.c:344:9
#07 0x0000000000047658 /data/app/~~m5pDxFas9RwkXmggY0GflA==/com.iiordanov.freeaSPICE-rFls7MPuO6-P5JXiYu7gtA==/lib/arm64/libspice.so (Java_com_undatech_opaque_SpiceCommunicator_SpiceClientConnect+392) (BuildId: a6355ef17e9ba13882afe292d29245263d4e3c8b)
spiceClientConnect
/home/toor/project/spice/android/remote-desktop-clients/remoteClientLib/jni/android/android-service.c:319:9
Java_com_undatech_opaque_SpiceCommunicator_SpiceClientConnect
/home/toor/project/spice/android/remote-desktop-clients/remoteClientLib/jni/android/android-service.c:297:0
#08 0x000000000013ced4 /apex/com.android.art/lib64/libart.so (art_quick_generic_jni_trampoline+148) (BuildId: 35130ee764a37d8340be345bbfd36501)
#09 0x0000000000133564 /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+548) (BuildId: 35130ee764a37d8340be345bbfd36501)
#10 0x00000000001a8a6c /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200) (BuildId: 35130ee764a37d8340be345bbfd36501)
#11 0x0000000000316afc /apex/com.android.art/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+376) (BuildId: 35130ee764a37d8340be345bbfd36501)
#12 0x000000000030dc1c /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall<true, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+696) (BuildId: 35130ee764a37d8340be345bbfd36501)
#13 0x0000000000674794 /apex/com.android.art/lib64/libart.so (MterpInvokeVirtualRange+704) (BuildId: 35130ee764a37d8340be345bbfd36501)
#14 0x000000000012db14 /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual_range+20) (BuildId: 35130ee764a37d8340be345bbfd36501)
#15 0x00000000000057f8 [anon:dalvik-classes5.dex extracted in memory from /data/app/~~m5pDxFas9RwkXmggY0GflA==/com.iiordanov.freeaSPICE-rFls7MPuO6-P5JXiYu7gtA==/base.apk!classes5.dex] (com.undatech.opaque.SpiceCommunicator$SpiceThread.run+36)
#16 0x00000000003042f0 /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.16518117543533139501)+268) (BuildId: 35130ee764a37d8340be345bbfd36501)
#17 0x000000000065fba4 /apex/com.android.art/lib64/libart.so (artQuickToInterpreterBridge+760) (BuildId: 35130ee764a37d8340be345bbfd36501)
#18 0x000000000013cff8 /apex/com.android.art/lib64/libart.so (art_quick_to_interpreter_bridge+88) (BuildId: 35130ee764a37d8340be345bbfd36501)
#19 0x0000000000133564 /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+548) (BuildId: 35130ee764a37d8340be345bbfd36501)
#20 0x00000000001a8a6c /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200) (BuildId: 35130ee764a37d8340be345bbfd36501)
#21 0x000000000054c048 /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeVirtualOrInterfaceWithJValues<art::ArtMethod*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, art::ArtMethod*, jvalue const*)+460) (BuildId: 35130ee764a37d8340be345bbfd36501)
#22 0x0000000000599c58 /apex/com.android.art/lib64/libart.so (art::Thread::CreateCallback(void*)+1292) (BuildId: 35130ee764a37d8340be345bbfd36501)
#23 0x00000000000d991c /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+64) (BuildId: 12976b407d82bfa84d157ca5cabe7dbc)
#24 0x000000000007a010 /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64) (BuildId: 12976b407d82bfa84d157ca5cabe7dbc)
Crash dump is completed
gst_buffer_get_video_meta (GstBuffer * buffer)
{
gpointer state = NULL;
GstVideoMeta *out = NULL;
GstMeta *meta;
const GstMetaInfo *info = GST_VIDEO_META_INFO;
while ((meta = gst_buffer_iterate_meta (buffer, &state))) {
if (meta->info->api == info->api) {
GstVideoMeta *vmeta = (GstVideoMeta *) meta;
if (vmeta->id == 0)
return vmeta; /* Early out for id 0 */
if (out == NULL || vmeta->id < out->id)
out = vmeta;
}
}
return out;
}
info->api, info is NULL。