Webrtcbin holds frames forever on Android

When using webrtcbin to stream rendered frames on Android, buffers sent to the sink by gst_app_src_push_buffer is never freed. And the client side never receive a sample. In my guess, those frames are all blocked somewhere in the webrtcbin process. It is odd that the same pipeline works fine on Linux. Could anyone give some help? The repo is GitHub - floppyhammer/monado-ems.

No obvious error is reported in the logger. But I got some suspicious ones like

../libs/gst/base/gstbasesink.c, gst_base_sink_chain_unlocked: got times start: 99:99:99.999999999, end: 99:99:99.999999999
../libs/gst/base/gstbasesink.c, gst_base_sink_get_sync_times: got times start: 99:99:99.999999999, stop: 99:99:99.999999999, do_sync 0
../gst/gstsegment.c, gst_segment_to_running_time_full: invalid position (-1)
../gst/gstsegment.c, gst_segment_to_running_time_full: invalid position (-1)

and

../gst/gstpad.c,do_probe_callbacks: do probes
../gst/gstpad.c,probe_hook_marshal: hook 1 with flags 0x00003200 does not match 00001012
../gst/gstpad.c,do_probe_callbacks: do probes
../gst/gstpad.c,probe_hook_marshal: hook 1 with flags 0x00003200 does not match 00001010