I have been able to make some progress and feel that I am pretty close to getting this working but I am currently facing a blocking issue.
I am experiencing a signaling issue with the Google App Engine backend that is throwing a 500 internal server error when I run the mono version but this works in the Java version.
Now I was going to replace the Google App Engine backend with a node.js driven one anyhow, but I wanted to offer a plugable backend so you could switch between what signaling implementation you wanted to use.
So before I completely discard the Google App Engine backend I wanted to ask if anyone here had a clue what is going wrong.
I have attached the adb logcat output files that have been filtered to only show relevant entries.
if you load the files side by side in WinMerge you will get something like the attached screenshot "logcat_compare.png"
If you compare these 2 lines char by char they are almost identical and I have not been able to identify what might be the culprit or why this is different.
?: I/MonoDroid(): UNHANDLED EXCEPTION: System.Exception: Error ---> Java.IO.IOException: Exception of type 'Java.IO.IOException' was thrown.
?: I/MonoDroid(): at Appspotdemo.Mono.Droid.AppRTCClient.maybeDrainQueue () [0x] in <filename unknown>:0
?: I/MonoDroid(): --- End of managed exception stack trace ---
?: I/MonoDroid(): java.io.IOException: Non-200 response to POST: HTTP/1.1 500 Internal Server Error for msg: {"type":"offer","sdp":"v=0\r\no=- 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE audio video\r\na=msid-semantic: WMS ARDAMS\r\nm=audio 1 RTP\/SAVPF 103 111 9 102 0 8 106 105 13 127 126\r \nc=IN IP4 0.0.0.0\r\na=rtcp:1 IN IP4 0.0.0.0\r\na=ice-ufrag:PQDfbt7jFAxaEzS\/\r\na=ice-pwd:ypEZE0Mae2DiO1+nkBpBgo8i\r\na=ice-options:google-ice\r\na=mid:audio\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=sendrecv\r\na=rtcp-mux\r\na=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:hWIRXLRWTS5+gVysSEguxNf9c3LTEOpfEoiwZD8W\r\na=rtpmap:111 opus\/\/2\r\na=fmtp:111 minptime=10\r\na=rtpmap:103 ISAC\/\r\na=rtpmap:9 G722\/\r\na=rtpmap:102 ILBC\/\r\na=rtpmap:0 PCMU\/\r\na=rtpmap:8 PCMA\/\r\na=rtpmap:106 CN\/\r\na=rtpmap:105 CN\/\r\na=rtpmap:13 CN\/\r\na=rtpmap:127 red\/\r\na=rtpmap:126 telephone-event\/\r\na=maxptime:60\r\na=ssrc: cname:JRRgYWnxI9eCvZY1\r\na=ssrc: msid:ARDAMS ARDAMSa0\r\na=ssrc: mslabel:ARDAMS\r\na=ssrc: label:ARDAMSa0\r\nm=video 1 RTP\/SAVPF 100 116 117\r\nc=IN IP4 0.0.0.0\r\na=rtcp:1 IN IP4 0.0.0.0\r\na=ice-ufrag:PQDfbt7jFAxaEzS\/\r\na=ice-pwd:ypEZE0Mae2DiO1+nkBpBgo8i\r\na=ice-options:google-ice\r\na=mid:video\r\na=extmap:2 urn:ietf:params:rtp-hdrext:toffset\r\na=extmap:3 http:\/\/www.webrtc.org\/experiments\/rtp-hdrext\/abs-send-time\r\na=sendrecv\r\na=rtcp-mux\r\na=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:hWIRXLRWTS5+gVysSEguxNf9c3LTEOpfEoiwZD8W\r\na=rtpmap:100 VP8\/\r\na=rtcp-fb:100 ccm fir\r\na=rtcp-fb:100 nack\r\na=rtcp-fb:100 goog-remb\r\na=rtpmap:116 red\/\r\na=rtpmap:117 ulpfec\/\r\na=ssrc: cname:JRRgYWnxI9eCvZY1\r\na=ssrc: msid:ARDAMS ARDAMSv0\r\na=ssrc: mslabel:ARDAMS\r\na=ssrc: label:ARDAMSv0\r\n"} ?: I/MonoDroid(): at appspotdemo.mono.droid.AppRTCClient_AsyncTaskAnonymousInnerClassHelper.n_doInBackground(Native Method)
?: I/MonoDroid(): at appspotdemo.mono.droid.AppRTCClient_AsyncTaskAnonymousInnerClassHelper.doInBackground(AppRTCClient_AsyncTaskAnonymousInnerClassHelper.java:28)
?: I/MonoDroid(): at android.os.AsyncTask$2.call(AsyncTask.java:264)
?: I/MonoDroid(): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
?: I/MonoDroid(): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
?: I/MonoDroid(): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
?: I/MonoDroid(): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:)
?: I/MonoDroid(): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
?: I/MonoDroid(): at java.lang.Thread.run(Thread.java:856)
: W/UNKNOWN_FORMAT(): I/MonoDroid():
?: I/MonoDroid(): --- End of inner exception stack trace ---
?: I/MonoDroid(): at Appspotdemo.Mono.Droid.AppRTCClient.maybeDrainQueue () <0x002b4>
?: I/MonoDroid(): at Appspotdemo.Mono.Droid.AppRTCClient/AsyncTaskAnonymousInnerClassHelper.RunInBackground (string[]) <0x>
?: I/MonoDroid(): at Android.OS.AsyncTask`3<string, int, string>.DoInBackground (Java.Lang.Object[]) <0x>
?: I/MonoDroid(): at Android.OS.AsyncTask.n_DoInBackground_arrayLjava_lang_Object_ (intptr,intptr,intptr) <0x000a3>
?: I/MonoDroid(): at (wrapper dynamic-method) object.986ae4d8-afd7-46ac-a5b0-b7fc82e (intptr,intptr,intptr) <0x>
?: W/libjingle(): Warning(webrtcvideoengine.cc:): webrtc: Too long processing time of Incoming frame: 20ms
: W/UNKNOWN_FORMAT(): E/mono ():
?: E/mono(): Unhandled Exception:
?: E/mono(): System.Exception: Error ---> Java.IO.IOException: Exception of type 'Java.IO.IOException' was thrown.
?: E/mono(): at Appspotdemo.Mono.Droid.AppRTCClient.maybeDrainQueue () [0x] in <filename unknown>:0
?: E/mono(): --- End of managed exception stack trace ---
?: E/mono(): java.io.IOException: Non-200 response to POST: HTTP/1.1 500 Internal Server Error for msg: {"type":"offer","sdp":"v=0\r\no=- 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE audio video\r\na=msid-semantic: WMS ARDAMS\r\nm=audio 1 RTP\/SAVPF 103 111 9 102 0 8 106 105 13 127 126\r \nc=IN IP4 0.0.0.0\r\na=rtcp:1 IN IP4 0.0.0.0\r\na=ice-ufrag:PQDfbt7jFAxaEzS\/\r\na=ice-pwd:ypEZE0Mae2DiO1+nkBpBgo8i\r\na=ice-options:google-ice\r\na=mid:audio\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=sendrecv\r\na=rtcp-mux\r\na=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:hWIRXLRWTS5+gVysSEguxNf9c3LTEOpfEoiwZD8W\r\na=rtpmap:111 opus\/\/2\r\na=fmtp:111 minptime=10\r\na=rtpmap:103 ISAC\/\r\na=rtpmap:9 G722\/\r\na=rtpma
?: E/mono-rt(): [ERROR] FATAL UNHANDLED EXCEPTION: System.Exception: Error ---> Java.IO.IOException: Exception of type 'Java.IO.IOException' was thrown.
?: E/mono-rt(): at Appspotdemo.Mono.Droid.AppRTCClient.maybeDrainQueue () [0x] in <filename unknown>:0
?: E/mono-rt(): --- End of managed exception stack trace ---
?: E/mono-rt(): java.io.IOException: Non-200 response to POST: HTTP/1.1 500 Internal Server Error for msg: {"type":"offer","sdp":"v=0\r\no=- 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE audio video\r\na=msid-semantic: WMS ARDAMS\r\nm=audio 1 RTP\/SAVPF 103 111 9 102 0 8 106 105 13 127 126\r \nc=IN IP4 0.0.0.0\r\na=rtcp:1 IN IP4 0.0.0.0\r\na=ice-ufrag:PQDfbt7jFAxaEzS\/\r\na=ice-pwd:ypEZE0Mae2DiO1+nkBpBgo8i\r\na=ice-options:google-ice\r\na=mid:audio\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=sendrecv\r\na=rtcp-mux\r\na=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:hWIRXLRWTS5+gVysSEguxNf9c3LTEOpfEoiwZD8W\r\na=rtpmap:111 opus\/\/2\r\na=fmtp:111 minptime=10\r\na=rtpmap:103 ISAC\/\r\na=rtpmap:9 G722\/160
?: A/GAbi++(): Pure virtual function called!
: W/UNKNOWN_FORMAT(): E/mono-rt ():
?: E/mono-rt(): =================================================================
?: E/mono-rt(): Got a SIGSEGV while executing native code. This usually indicates
?: E/mono-rt(): a fatal error in the mono runtime or one of the native libraries
?: E/mono-rt(): used by your application.
?: E/mono-rt(): =================================================================
: W/UNKNOWN_FORMAT(): E/mono-rt ():
: W/UNKNOWN_FORMAT(): E/mono ():
?: E/mono(): Unhandled Exception:
?: E/mono(): System.NullReferenceException: Object reference not set to an instance of an object
?: E/mono-rt(): [ERROR] FATAL UNHANDLED EXCEPTION: System.NullReferenceException: Object reference not set to an instance of an object
Any help on why the Google App Engine backend is throwing this 500 internal server error would be greatly appreciated.