Hi, all,<div><br></div><div>With the help of gstreamer wiki, I have successfully ported gstreamer to android gingerbread. (by fixing some gst-plugin-base version checks both in gst-editing-services and gst-plugins-good, and change SO_MAX to 512 in bionic/linker/linker.c) However, I failed to run a gst-launch script and got SIGSEGV.</div>
<div><br></div><div>Firstly, I tried gst-inspect to see if gstreamer works. It seems ok (but with some warnings):</div><div><br></div><div><div>
=====================START=======================</div><div>xzpeter@xzpeter-HP-Compaq-8100-Elite-SFF-PC:~$ adb shell gst-inspect</div><div><br></div><div>
(gst-inspect-0.10:437): GStreamer-WARNING **: External plugin loader failed. This most likely means that the plugin loader helper binary was not found or could not be run. </div><div><br></div><div>** (gst-inspect-0.10:437): WARNING **: could not find config file '/system/gst-openmax.conf'.. using defaults!</div>
<div>cdxaparse: cdxaparse: (S)VCD parser</div><div>cdxaparse: vcdparse: (S)VCD stream parser</div><div>replaygain: rganalysis: ReplayGain analysis</div><div>replaygain: rglimiter: ReplayGain limiter</div><div>replaygain: rgvolume: ReplayGain volume</div>
<div>...... (skip many modules here)</div><div>adder: adder: Adder</div><div>staticelements: bin: Generic bin</div><div>staticelements: pipeline: Pipeline object</div><div><br></div><div>Total count: 131 plugins, 494 features</div>
</div><div>=======================END=====================</div><div><br></div><div>Then, I tried to run a demo script on it. The script is retrieved from gstreamer examples (with some small modifications by me) and works well on PC, whose main work is to generate a test video stream->encode->send via udp packages. The server script is shown below(named server.sh):</div>
<div><br></div><div>====================START========================</div><div><div># change this to send the RTP data and RTCP to another host</div>
<div># this is the host addr in android emulator</div><div>DEST=10.0.2.2</div><div><br></div><div># tuning parameters to make the sender send the streams out of sync. Can be used</div><div># ot test the client RTCP synchronisation.</div>
<div>#VOFFSET=900000000</div><div>VOFFSET=0</div><div>AOFFSET=0</div><div><br></div><div># H264 encode from the source</div><div>VELEM="videotestsrc"</div><div>#VELEM="peterfilter"</div><div>#VCAPS="video/x-raw-yuv,width=352,height=288,framerate=15/1"</div>
<div>VCAPS="video/x-raw-yuv,framerate=5/1"</div><div>#VSOURCE="$VELEM ! queue ! videorate ! ffmpegcolorspace ! $VCAPS"</div><div>VSOURCE="$VELEM ! ffmpegcolorspace ! $VCAPS"</div><div>VENC="x264enc tune=zerolatency byte-stream=true bitrate=300 ! rtph264pay"</div>
<div><br></div><div>VRTPSINK="udpsink port=5000 host=$DEST ts-offset=$VOFFSET name=vrtpsink"</div><div>VRTCPSINK="udpsink port=5001 host=$DEST sync=false async=false name=vrtcpsink"</div><div>VRTCPSRC="udpsrc port=5005 name=vrtpsrc"</div>
<div><br></div><div># PCMA encode from the source</div><div>#AELEM="autoaudiosrc"</div><div>AELEM="audiotestsrc is-live=1"</div><div>ASOURCE="$AELEM ! queue ! audioresample ! audioconvert"</div>
<div>AENC="alawenc ! rtppcmapay"</div><div><br></div><div>ARTPSINK="udpsink port=5002 host=$DEST ts-offset=$AOFFSET name=artpsink"</div><div>ARTCPSINK="udpsink port=5003 host=$DEST sync=false async=false name=artcpsink"</div>
<div>ARTCPSRC="udpsrc port=5007 name=artpsrc"</div><div><br></div><div>PLUGIN_PATH="/home/xzpeter/intel/gstreamer/gst-template/gst-plugin"</div><div><br></div><div>gst-launch -v --gst-plugin-path=$PLUGIN_PATH gstrtpbin name=rtpbin \</div>
<div> $VSOURCE ! $VENC ! rtpbin.send_rtp_sink_0 \</div><div> rtpbin.send_rtp_src_0 ! $VRTPSINK \</div><div> rtpbin.send_rtcp_src_0 ! $VRTCPSINK \</div>
<div> $VRTCPSRC ! rtpbin.recv_rtcp_sink_0 \</div><div> $ASOURCE ! $AENC ! rtpbin.send_rtp_sink_1 \</div><div> rtpbin.send_rtp_src_1 ! $ARTPSINK \</div>
<div> rtpbin.send_rtcp_src_1 ! $ARTCPSINK \</div><div> $ARTCPSRC ! rtpbin.recv_rtcp_sink_1</div></div><div>======================END======================</div>
<div><br></div><div>I stored the server.sh to /data/server.sh on android emulator by adb push and ran it. However, this time gstreamer got SIGSEGV:</div>
<div><br></div><div>====================START========================</div><div><div>xzpeter@xzpeter-HP-Compaq-8100-Elite-SFF-PC:~$ adb shell sh /data/server.sh</div>
<div><br></div><div>(gst-launch-0.10:430): GStreamer-WARNING **: External plugin loader failed. This most likely means that the plugin loader helper binary was not found or could not be run. </div><div><br></div><div>** (gst-launch-0.10:430): WARNING **: could not find config file '/system/gst-openmax.conf'.. using defaults!</div>
<div>Caught SIGSEGV accessing address 0xdc</div><div>Spinning. Please run 'gdb gst-launch 430' to continue debugging, Ctrl-C to quit, or Ctrl-\ to dump core.</div></div><div>========================END====================</div>
<div><br></div><div>I want to figure out what is the problem here. but how should I do the debugging? (I know android SDK provide some way on debugging, and ndk-gdb too. Nevertheless, these two ways seems not suitable for gstreamer debugging?)</div>
<div><br></div><div>Or, can anyone give me any suggestion on resolving this?</div><div><br></div><div>Peter</div>