WebRTC中的AppRTCDemo.apk简单分析

以前一直在QQ空间记录一些简单的关于webrtc的笔记。博说不如发布CSDN,想想也可以,解决了一些小问题,也可以帮助一下其它碰到该同样问题的人。


上周试着将WebRTC中的PeerConnection_client进行改写,拿 掉了PeerConnection_Server端,改用openfire服务器,信令采用xmpp,主要代码来源于call。主要还是将http请求用xmpp重写了,原理上很简单,合并后,效果还可以。


现在开始看android版本的peerconnection,也就是标题的AppRTCDemo(另外还有一个WebRTCDemo例子,但我在内网试了不行?怪)。

AppRTCDemo.apk效果没见过(手机无法翻,你懂的),但PC版本确可以访问,因为有vpn)


AppRTCDemoActivity.java
该类实现了IceServersObserver::onIceServers接口,


OnCreate说明
1.设置未处理异常回调Thread.setDefaultUncaughtExceptionHandler
2.创建AppRTCGLView用来显示视频,创建两个YuvImageRenderer渲染类remoteRender和localRender,
同时这两个render绑定了上面创建的AppRTCGLView。通过VideoRenderer类类来包装YuvImageRenderer类。
3.初始化设置音频,视频的presence,在PeerConnection对象的CreateAnswer和CreateOffer时使用(PC版本的例子未设置??怪)。
4.调用AppRTCClient类弹出输入roomID的窗口showGetRoomUI,首先拿到


样例如下;
访问https://apprtc.appspot.com/?r=1256845&t=json 的样例json
{"asbr": "", "vrbr": "", "room_link": "https://apprtc.appspot.com/?r=1256845&t=json", "audio_receive_codec": "opus/48000", "pc_constraints": "{\"optional\": [{\"googImprovedWifiBwe\": true}]}", "include_vr_js": "", "media_constraints": "{\"audio\": true, \"video\": {\"optional\": [{\"minWidth\": \"1280\"}, {\"minHeight\": \"720\"}], \"mandatory\": {}}}", "pc_config": "{\"iceServers\": [{\"urls\": \"stun:stun.l.google.com:19302\"}]}", "vsbr": "", "turn_url": "https://computeengineondemand.appspot.com/turn?username=69898189&key=4080218913", "audio_send_codec": "", "meta_viewport": "", "arbr": "", "offer_constraints": "{\"optional\": [], \"mandatory\": {}}", "stereo": "false", "opusfec": "false", "error_messages": [], "room_key": "1256845", "ssr": "", "me": "69898189", "initiator": 0, "token": "AHRlWrrNg9ueNt3j5-attLhS-bW4YOSUxdqSRyWPvtzQkkn56kmk1uY1N92cmH_inoydHmv4KGdL5EKRmBf80Fmz9hh-0v_wDDEnQCDBUwVt4fKee_sNfkM", "vsibr": ""}
主要是得到以下结构
private class AppRTCSignalingParameters 
{
    
public final List<PeerConnection.IceServer> iceServers;
  //stun服务器地址信息,由pc_config得到  
public final String gaeBaseHref;
    //就是主机地址  https://apprtc.appspot.com
public final String channelToken;
    //就是用来于GAE服务器交互的唯一ID,由token得到
public final String postMessageUrl;
  //该url由房间号(room_key)和用户编号(me)组成,通过该url发送post消息,以方便服务器来区分
public final boolean initiator;
      //是否发起人,由initiator得到,1表示是发起人
public final MediaConstraints pcConstraints;
      //由pc_constraints得到
public final MediaConstraints videoConstraints;
    //由media_constraints得到
public final MediaConstraints audioConstraints;    //由media_constraints得到
}




AppRTCClient.java
该类主要是管理服务器交互的东西,主要有三种信令:
disconnectAndExit                            挂断     "type":"bye"
sendLocalDescription                     SDP协商  "sdp":"***"

PCObserver::onIceCandidate        ICE协商  "type":"candidate" ***

 
在成功连上GAE服务器后,回调AppRTCDemoActivity的IceServersObserver::onIceServers接口。

 


AppRTCGLView.java
继承自GLSurfaceView,主要用来在同一个界面上显示多个视频



以下是PC版本拿到的日志。


445.543: C->S: {"type":"bye"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
This appears to be Chrome adapter.js.pagespeed.jm.51oBwXpKMi.js:1
1.468: Initializing; room=1234321. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
1.469: Opening channel. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
1.476: Requested access to local media with mediaConstraints:
  ‘{"audio":true,"video":{"optional":[{"minWidth":"1280"},{"minHeight":"720"}],"mandatory":{}}}‘ adapter.js.pagespeed.jm.51oBwXpKMi.js:1
1.528: User has granted access to local media. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
XHR finished loading: GET "https://computeengineondemand.appspot.com/turn?username=45559678&key=4080218913". main.js.pagespeed.jm.ljX_hOQ0zo.js:1
2.449: Channel opened. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
XHR finished loading: GET "https://486.talkgadget.google.com/talkgadget/dch/test?VER=8&clid=15B470D002…ce0koKKaWAq7Nj8AP77Cw&ec=%5B%22ci%3Aec%22%5D&MODE=init&zx=ssmm313ceaeg&t=1". d?token=AHRlWrpW2UyXasBPnZjeKSXplWnKfW5MLHvfVdEkMc7nyJR0fZBOpS3FSTwdPFL78TeOFwLZizj7fW2YT2PReS_kT0f…:148
XHR finished loading: POST "https://486.talkgadget.google.com/talkgadget/dch/bind?VER=8&clid=15B470D002…aWAq7Nj8AP77Cw&ec=%5B%22ci%3Aec%22%5D&RID=65245&CVER=1&zx=8et9qjpakig1&t=1". d?token=AHRlWrpW2UyXasBPnZjeKSXplWnKfW5MLHvfVdEkMc7nyJR0fZBOpS3FSTwdPFL78TeOFwLZizj7fW2YT2PReS_kT0f…:148
XHR finished loading: POST "https://486.talkgadget.google.com/talkgadget/dch/bind?VER=8&clid=15B470D002…B%22ci%3Aec%22%5D&SID=A1F60159508FC620&RID=65246&AID=2&zx=7gnm4ix7x2rf&t=1". d?token=AHRlWrpW2UyXasBPnZjeKSXplWnKfW5MLHvfVdEkMc7nyJR0fZBOpS3FSTwdPFL78TeOFwLZizj7fW2YT2PReS_kT0f…:148
10.952: S->C: {"sdp":"v=0\r\no=- 6225872748460365561 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE audio video\r\na=msid-semantic: WMS T6uJMevmISutlA2C0Fb0V4tfp5RquHQGACCP\r\nm=audio 1 RTP/SAVPF 111 103 104 0 8 126\r\nc=IN IP4 0.0.0.0\r\na=rtcp:1 IN IP4 0.0.0.0\r\na=ice-ufrag:Bu5Iuydy4gjHGOa3\r\na=ice-pwd:BP7iyeFSfYb+XYZpbpGFk1Bd\r\na=ice-options:google-ice\r\na=fingerprint:sha-256 ED:41:3B:D4:E1:14:37:2A:85:79:BB:42:A1:12:F9:AF:5D:05:C1:AC:44:DE:40:08:21:28:E8:50:45:59:BC:BC\r\na=setup:actpass\r\na=mid:audio\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=sendrecv\r\na=rtcp-mux\r\na=rtpmap:111 opus/48000/2\r\na=fmtp:111 minptime=10\r\na=rtpmap:103 ISAC/16000\r\na=rtpmap:104 ISAC/32000\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:126 telephone-event/8000\r\na=maxptime:60\r\na=ssrc:1721918381 cname:Tv5zO4ZErW6x35nt\r\na=ssrc:1721918381 msid:T6uJMevmISutlA2C0Fb0V4tfp5RquHQGACCP 3fb4ba30-36c4-4b94-a19b-9feef4621f40\r\na=ssrc:1721918381 mslabel:T6uJMevmISutlA2C0Fb0V4tfp5RquHQGACCP\r\na=ssrc:1721918381 label:3fb4ba30-36c4-4b94-a19b-9feef4621f40\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:Bu5Iuydy4gjHGOa3\r\na=ice-pwd:BP7iyeFSfYb+XYZpbpGFk1Bd\r\na=ice-options:google-ice\r\na=fingerprint:sha-256 ED:41:3B:D4:E1:14:37:2A:85:79:BB:42:A1:12:F9:AF:5D:05:C1:AC:44:DE:40:08:21:28:E8:50:45:59:BC:BC\r\na=setup:actpass\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=rtpmap:100 VP8/90000\r\na=rtcp-fb:100 ccm fir\r\na=rtcp-fb:100 nack\r\na=rtcp-fb:100 nack pli\r\na=rtcp-fb:100 goog-remb\r\na=rtpmap:116 red/90000\r\na=rtpmap:117 ulpfec/90000\r\na=ssrc:731319580 cname:Tv5zO4ZErW6x35nt\r\na=ssrc:731319580 msid:T6uJMevmISutlA2C0Fb0V4tfp5RquHQGACCP a74a9a4f-4902-44c3-a7f3-13c3c7606cd2\r\na=ssrc:731319580 mslabel:T6uJMevmISutlA2C0Fb0V4tfp5RquHQGACCP\r\na=ssrc:731319580 label:a74a9a4f-4902-44c3-a7f3-13c3c7606cd2\r\n","type":"offer"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
10.953: Creating PeerConnection. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
10.954: Created RTCPeerConnnection with:
  config: ‘{"iceServers":[{"urls":"stun:stun.l.google.com:19302"},{"urls":["turn:107.167.183.18:3478?transport=udp","turn:107.167.183.18:3478?transport=tcp","turn:107.167.183.18:3479?transport=udp","turn:107.167.183.18:3479?transport=tcp"],"credential":"v4ZZgHbCJT8I9DzjBmgEoL+Pxfg=","username":"1407822659:45559678"}]}‘;
  constraints: ‘{"optional":[{"googImprovedWifiBwe":true}]}‘. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
10.954: Adding local stream. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
10.955: No preference on audio send codec. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
10.979: Sending answer to peer. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
10.980: Set remote session description success. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
10.983: Waiting for remote video. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
10.984: Signaling state changed to: have-remote-offer adapter.js.pagespeed.jm.51oBwXpKMi.js:1
10.984: Remote stream added. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
10.985: Prefer audio receive codec: opus/48000 adapter.js.pagespeed.jm.51oBwXpKMi.js:1
11.000: C->S: {"sdp":"v=0\r\no=- 3609511101353099925 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE audio video\r\na=msid-semantic: WMS 4uEZw999Xg9XZ3PqIc9gmun9dFNRQxbuydcE\r\nm=audio 1 RTP/SAVPF 111 103 104 0 8 126\r\nc=IN IP4 0.0.0.0\r\na=rtcp:1 IN IP4 0.0.0.0\r\na=ice-ufrag:BNnKCBKRixr2Tv3D\r\na=ice-pwd:GGbAIDbBEs8TJ+imBMRENSLO\r\na=fingerprint:sha-256 AD:5C:3E:7B:03:E2:DA:60:3D:FD:90:2C:37:1F:36:4C:F9:83:C5:C9:B1:79:13:A3:EC:FA:41:92:37:8D:6E:2D\r\na=setup:active\r\na=mid:audio\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=sendrecv\r\na=rtcp-mux\r\na=rtpmap:111 opus/48000/2\r\na=fmtp:111 minptime=10\r\na=rtpmap:103 ISAC/16000\r\na=rtpmap:104 ISAC/32000\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:126 telephone-event/8000\r\na=maxptime:60\r\na=ssrc:1106596671 cname:q32c4onppZ4mYofi\r\na=ssrc:1106596671 msid:4uEZw999Xg9XZ3PqIc9gmun9dFNRQxbuydcE 85c96fe2-a8e8-43c7-93fa-27684c83395e\r\na=ssrc:1106596671 mslabel:4uEZw999Xg9XZ3PqIc9gmun9dFNRQxbuydcE\r\na=ssrc:1106596671 label:85c96fe2-a8e8-43c7-93fa-27684c83395e\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:BNnKCBKRixr2Tv3D\r\na=ice-pwd:GGbAIDbBEs8TJ+imBMRENSLO\r\na=fingerprint:sha-256 AD:5C:3E:7B:03:E2:DA:60:3D:FD:90:2C:37:1F:36:4C:F9:83:C5:C9:B1:79:13:A3:EC:FA:41:92:37:8D:6E:2D\r\na=setup:active\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=rtpmap:100 VP8/90000\r\na=rtcp-fb:100 ccm fir\r\na=rtcp-fb:100 nack\r\na=rtcp-fb:100 nack pli\r\na=rtcp-fb:100 goog-remb\r\na=rtpmap:116 red/90000\r\na=rtpmap:117 ulpfec/90000\r\na=ssrc:3672662301 cname:q32c4onppZ4mYofi\r\na=ssrc:3672662301 msid:4uEZw999Xg9XZ3PqIc9gmun9dFNRQxbuydcE 7d3fcd7b-cd71-4b8d-b36e-3e40dbe12c31\r\na=ssrc:3672662301 mslabel:4uEZw999Xg9XZ3PqIc9gmun9dFNRQxbuydcE\r\na=ssrc:3672662301 label:7d3fcd7b-cd71-4b8d-b36e-3e40dbe12c31\r\n","type":"answer"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
11.001: Signaling state changed to: stable adapter.js.pagespeed.jm.51oBwXpKMi.js:1
11.002: Set session description success. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
11.003: C->S: {"type":"candidate","label":0,"id":"audio","candidate":"a=candidate:2399860533 1 udp 2122260223 192.168.0.27 54685 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
11.004: C->S: {"type":"candidate","label":0,"id":"audio","candidate":"a=candidate:368349724 1 udp 2122194687 10.211.1.2 54686 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
11.004: C->S: {"type":"candidate","label":0,"id":"audio","candidate":"a=candidate:2565108233 1 udp 2122129151 192.168.129.1 54687 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
11.005: C->S: {"type":"candidate","label":0,"id":"audio","candidate":"a=candidate:2382575964 1 udp 2122063615 192.168.110.1 54688 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
11.005: C->S: {"type":"candidate","label":1,"id":"video","candidate":"a=candidate:2399860533 1 udp 2122260223 192.168.0.27 54685 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
11.005: C->S: {"type":"candidate","label":1,"id":"video","candidate":"a=candidate:368349724 1 udp 2122194687 10.211.1.2 54686 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
11.006: C->S: {"type":"candidate","label":1,"id":"video","candidate":"a=candidate:2565108233 1 udp 2122129151 192.168.129.1 54687 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
11.006: C->S: {"type":"candidate","label":1,"id":"video","candidate":"a=candidate:2382575964 1 udp 2122063615 192.168.110.1 54688 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
11.101: C->S: {"type":"candidate","label":0,"id":"audio","candidate":"a=candidate:3246984133 1 tcp 1518280447 192.168.0.27 0 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
11.102: C->S: {"type":"candidate","label":1,"id":"video","candidate":"a=candidate:3246984133 1 tcp 1518280447 192.168.0.27 0 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
11.102: C->S: {"type":"candidate","label":0,"id":"audio","candidate":"a=candidate:1534553836 1 tcp 1518214911 10.211.1.2 0 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
11.102: C->S: {"type":"candidate","label":0,"id":"audio","candidate":"a=candidate:3597111033 1 tcp 1518149375 192.168.129.1 0 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
11.103: C->S: {"type":"candidate","label":0,"id":"audio","candidate":"a=candidate:3229664684 1 tcp 1518083839 192.168.110.1 0 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
11.103: C->S: {"type":"candidate","label":1,"id":"video","candidate":"a=candidate:1534553836 1 tcp 1518214911 10.211.1.2 0 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
11.103: C->S: {"type":"candidate","label":1,"id":"video","candidate":"a=candidate:3597111033 1 tcp 1518149375 192.168.129.1 0 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
11.104: C->S: {"type":"candidate","label":1,"id":"video","candidate":"a=candidate:3229664684 1 tcp 1518083839 192.168.110.1 0 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
11.413: C->S: {"type":"candidate","label":0,"id":"audio","candidate":"a=candidate:4141159664 1 udp 1685987071 222.97.89.198 9446 typ srflx raddr 10.211.1.2 rport 54686 generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
11.415: C->S: {"type":"candidate","label":1,"id":"video","candidate":"a=candidate:4141159664 1 udp 1685987071 222.97.89.198 9446 typ srflx raddr 10.211.1.2 rport 54686 generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
11.416: C->S: {"type":"candidate","label":0,"id":"audio","candidate":"a=candidate:4235602068 1 udp 41819903 107.167.183.18 58799 typ relay raddr 222.97.89.198 rport 9446 generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
11.417: C->S: {"type":"candidate","label":1,"id":"video","candidate":"a=candidate:4235602068 1 udp 41819903 107.167.183.18 58799 typ relay raddr 222.97.89.198 rport 9446 generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
XHR finished loading: POST "https://apprtc.appspot.com/message?r=1234321&u=45559678". main.js.pagespeed.jm.ljX_hOQ0zo.js:1
XHR finished loading: POST "https://apprtc.appspot.com/message?r=1234321&u=45559678". main.js.pagespeed.jm.ljX_hOQ0zo.js:1
11.578: C->S: {"type":"candidate","label":0,"id":"audio","candidate":"a=candidate:4235602068 1 udp 25042687 107.167.183.18 61750 typ relay raddr 222.97.89.198 rport 19682 generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
11.579: C->S: {"type":"candidate","label":1,"id":"video","candidate":"a=candidate:4235602068 1 udp 25042687 107.167.183.18 61750 typ relay raddr 222.97.89.198 rport 19682 generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
XHR finished loading: POST "https://apprtc.appspot.com/message?r=1234321&u=45559678". main.js.pagespeed.jm.ljX_hOQ0zo.js:1
XHR finished loading: POST "https://apprtc.appspot.com/message?r=1234321&u=45559678". main.js.pagespeed.jm.ljX_hOQ0zo.js:1
11.632: S->C: {"type":"candidate","label":0,"id":"audio","candidate":"a=candidate:1878615036 1 udp 2122260223 10.0.30.31 57387 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
11.634: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
11.634: ICE connection state changed to: checking adapter.js.pagespeed.jm.51oBwXpKMi.js:1
XHR finished loading: POST "https://apprtc.appspot.com/message?r=1234321&u=45559678". main.js.pagespeed.jm.ljX_hOQ0zo.js:1
XHR finished loading: POST "https://apprtc.appspot.com/message?r=1234321&u=45559678". main.js.pagespeed.jm.ljX_hOQ0zo.js:1
XHR finished loading: POST "https://apprtc.appspot.com/message?r=1234321&u=45559678". main.js.pagespeed.jm.ljX_hOQ0zo.js:1
XHR finished loading: POST "https://apprtc.appspot.com/message?r=1234321&u=45559678". main.js.pagespeed.jm.ljX_hOQ0zo.js:1
XHR finished loading: POST "https://apprtc.appspot.com/message?r=1234321&u=45559678". main.js.pagespeed.jm.ljX_hOQ0zo.js:1
XHR finished loading: POST "https://apprtc.appspot.com/message?r=1234321&u=45559678". main.js.pagespeed.jm.ljX_hOQ0zo.js:1
XHR finished loading: POST "https://apprtc.appspot.com/message?r=1234321&u=45559678". main.js.pagespeed.jm.ljX_hOQ0zo.js:1
XHR finished loading: POST "https://apprtc.appspot.com/message?r=1234321&u=45559678". main.js.pagespeed.jm.ljX_hOQ0zo.js:1
XHR finished loading: POST "https://apprtc.appspot.com/message?r=1234321&u=45559678". main.js.pagespeed.jm.ljX_hOQ0zo.js:1
XHR finished loading: POST "https://apprtc.appspot.com/message?r=1234321&u=45559678". main.js.pagespeed.jm.ljX_hOQ0zo.js:1
XHR finished loading: POST "https://apprtc.appspot.com/message?r=1234321&u=45559678". main.js.pagespeed.jm.ljX_hOQ0zo.js:1
XHR finished loading: POST "https://apprtc.appspot.com/message?r=1234321&u=45559678". main.js.pagespeed.jm.ljX_hOQ0zo.js:1
XHR finished loading: POST "https://apprtc.appspot.com/message?r=1234321&u=45559678". main.js.pagespeed.jm.ljX_hOQ0zo.js:1
12.192: S->C: {"type":"candidate","label":0,"id":"audio","candidate":"a=candidate:202810205 1 udp 2122194687 192.168.1.21 57388 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
12.193: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
12.196: S->C: {"type":"candidate","label":0,"id":"audio","candidate":"a=candidate:1878615036 2 udp 2122260223 10.0.30.31 57387 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
12.196: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
12.234: S->C: {"type":"candidate","label":0,"id":"audio","candidate":"a=candidate:202810205 2 udp 2122194687 192.168.1.21 57388 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
12.234: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
12.247: S->C: {"type":"candidate","label":0,"id":"audio","candidate":"a=candidate:209874304 2 udp 2122129151 192.168.234.1 57389 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
12.247: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
12.289: S->C: {"type":"candidate","label":0,"id":"audio","candidate":"a=candidate:209874304 1 udp 2122129151 192.168.234.1 57389 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
12.290: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
XHR finished loading: POST "https://apprtc.appspot.com/message?r=1234321&u=45559678". main.js.pagespeed.jm.ljX_hOQ0zo.js:1
XHR finished loading: POST "https://apprtc.appspot.com/message?r=1234321&u=45559678". main.js.pagespeed.jm.ljX_hOQ0zo.js:1
XHR finished loading: POST "https://apprtc.appspot.com/message?r=1234321&u=45559678". main.js.pagespeed.jm.ljX_hOQ0zo.js:1
XHR finished loading: POST "https://apprtc.appspot.com/message?r=1234321&u=45559678". main.js.pagespeed.jm.ljX_hOQ0zo.js:1
12.501: S->C: {"type":"candidate","label":0,"id":"audio","candidate":"a=candidate:95425800 1 udp 2122063615 192.168.65.1 57390 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
12.503: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
XHR finished loading: POST "https://apprtc.appspot.com/message?r=1234321&u=45559678". main.js.pagespeed.jm.ljX_hOQ0zo.js:1
XHR finished loading: POST "https://apprtc.appspot.com/message?r=1234321&u=45559678". main.js.pagespeed.jm.ljX_hOQ0zo.js:1
12.595: S->C: {"type":"candidate","label":0,"id":"audio","candidate":"a=candidate:95425800 2 udp 2122063615 192.168.65.1 57390 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
12.595: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
12.639: S->C: {"type":"candidate","label":1,"id":"video","candidate":"a=candidate:1878615036 1 udp 2122260223 10.0.30.31 57387 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
12.640: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
12.688: S->C: {"type":"candidate","label":1,"id":"video","candidate":"a=candidate:1878615036 2 udp 2122260223 10.0.30.31 57387 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
12.690: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
12.729: S->C: {"type":"candidate","label":1,"id":"video","candidate":"a=candidate:202810205 1 udp 2122194687 192.168.1.21 57388 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
12.732: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
12.769: S->C: {"type":"candidate","label":1,"id":"video","candidate":"a=candidate:202810205 2 udp 2122194687 192.168.1.21 57388 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
12.770: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
12.897: S->C: {"type":"candidate","label":1,"id":"video","candidate":"a=candidate:209874304 1 udp 2122129151 192.168.234.1 57389 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
12.898: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
12.995: S->C: {"type":"candidate","label":1,"id":"video","candidate":"a=candidate:209874304 2 udp 2122129151 192.168.234.1 57389 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
12.995: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
13.039: S->C: {"type":"candidate","label":1,"id":"video","candidate":"a=candidate:95425800 1 udp 2122063615 192.168.65.1 57390 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
13.040: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
15.036: S->C: {"type":"candidate","label":1,"id":"video","candidate":"a=candidate:95425800 2 udp 2122063615 192.168.65.1 57390 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
15.036: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
15.078: S->C: {"type":"candidate","label":0,"id":"audio","candidate":"a=candidate:561684236 1 tcp 1518280447 10.0.30.31 0 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
15.078: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
15.122: S->C: {"type":"candidate","label":0,"id":"audio","candidate":"a=candidate:561684236 2 tcp 1518280447 10.0.30.31 0 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
15.122: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
15.172: S->C: {"type":"candidate","label":0,"id":"audio","candidate":"a=candidate:1117085613 1 tcp 1518214911 192.168.1.21 0 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
15.172: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
15.213: S->C: {"type":"candidate","label":0,"id":"audio","candidate":"a=candidate:1117085613 2 tcp 1518214911 192.168.1.21 0 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
15.213: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
15.255: S->C: {"type":"candidate","label":1,"id":"video","candidate":"a=candidate:561684236 1 tcp 1518280447 10.0.30.31 0 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
15.256: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
15.447: S->C: {"type":"candidate","label":1,"id":"video","candidate":"a=candidate:561684236 2 tcp 1518280447 10.0.30.31 0 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
15.448: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
15.677: S->C: {"type":"candidate","label":1,"id":"video","candidate":"a=candidate:1117085613 1 tcp 1518214911 192.168.1.21 0 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
15.678: S->C: {"type":"candidate","label":1,"id":"video","candidate":"a=candidate:1117085613 2 tcp 1518214911 192.168.1.21 0 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
15.678: S->C: {"type":"candidate","label":0,"id":"audio","candidate":"a=candidate:1107399024 1 tcp 1518149375 192.168.234.1 0 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
15.679: S->C: {"type":"candidate","label":0,"id":"audio","candidate":"a=candidate:1107399024 2 tcp 1518149375 192.168.234.1 0 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
15.679: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
3
15.680: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
15.694: S->C: {"type":"candidate","label":0,"id":"audio","candidate":"a=candidate:1261693432 1 tcp 1518083839 192.168.65.1 0 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
15.695: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
15.865: S->C: {"type":"candidate","label":0,"id":"audio","candidate":"a=candidate:1261693432 2 tcp 1518083839 192.168.65.1 0 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
15.865: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
15.918: S->C: {"type":"candidate","label":1,"id":"video","candidate":"a=candidate:1107399024 1 tcp 1518149375 192.168.234.1 0 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
15.919: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
15.960: S->C: {"type":"candidate","label":1,"id":"video","candidate":"a=candidate:1107399024 2 tcp 1518149375 192.168.234.1 0 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
15.960: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
16.124: S->C: {"type":"candidate","label":1,"id":"video","candidate":"a=candidate:1261693432 2 tcp 1518083839 192.168.65.1 0 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
16.125: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
16.203: S->C: {"type":"candidate","label":1,"id":"video","candidate":"a=candidate:1261693432 1 tcp 1518083839 192.168.65.1 0 typ host generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
16.203: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
16.242: S->C: {"type":"candidate","label":0,"id":"audio","candidate":"a=candidate:2363024656 1 udp 1686052607 198.13.105.187 57387 typ srflx raddr 10.0.30.31 rport 57387 generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
16.246: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
16.385: S->C: {"type":"candidate","label":0,"id":"audio","candidate":"a=candidate:2363024656 2 udp 1686052607 198.13.105.187 57387 typ srflx raddr 10.0.30.31 rport 57387 generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
16.386: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
16.429: S->C: {"type":"candidate","label":0,"id":"audio","candidate":"a=candidate:2854805290 2 udp 41885439 192.158.30.23 52612 typ relay raddr 198.13.105.187 rport 57387 generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
16.429: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
16.473: S->C: {"type":"candidate","label":0,"id":"audio","candidate":"a=candidate:2854805290 1 udp 41885439 192.158.30.23 52612 typ relay raddr 198.13.105.187 rport 57387 generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
16.475: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
16.520: S->C: {"type":"candidate","label":1,"id":"video","candidate":"a=candidate:2363024656 1 udp 1686052607 198.13.105.187 57387 typ srflx raddr 10.0.30.31 rport 57387 generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
16.522: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
16.634: S->C: {"type":"candidate","label":1,"id":"video","candidate":"a=candidate:2363024656 2 udp 1686052607 198.13.105.187 57387 typ srflx raddr 10.0.30.31 rport 57387 generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
16.635: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
16.675: S->C: {"type":"candidate","label":1,"id":"video","candidate":"a=candidate:2854805290 1 udp 41885439 192.158.30.23 52612 typ relay raddr 198.13.105.187 rport 57387 generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
16.677: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
16.808: S->C: {"type":"candidate","label":1,"id":"video","candidate":"a=candidate:2854805290 2 udp 41885439 192.158.30.23 52612 typ relay raddr 198.13.105.187 rport 57387 generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
16.809: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
16.854: S->C: {"type":"candidate","label":0,"id":"audio","candidate":"a=candidate:2854805290 1 udp 25108223 192.158.30.23 50476 typ relay raddr 198.13.105.187 rport 18806 generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
16.857: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
16.923: S->C: {"type":"candidate","label":0,"id":"audio","candidate":"a=candidate:2854805290 2 udp 25108223 192.158.30.23 50476 typ relay raddr 198.13.105.187 rport 18806 generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
16.924: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
16.971: S->C: {"type":"candidate","label":1,"id":"video","candidate":"a=candidate:2854805290 1 udp 25108223 192.158.30.23 50476 typ relay raddr 198.13.105.187 rport 18806 generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
16.973: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
17.104: S->C: {"type":"candidate","label":1,"id":"video","candidate":"a=candidate:2854805290 2 udp 25108223 192.158.30.23 50476 typ relay raddr 198.13.105.187 rport 18806 generation 0\r\n"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
17.104: Remote candidate added successfully. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
17.367: End of candidates. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
18.727: ICE connection state changed to: connected adapter.js.pagespeed.jm.51oBwXpKMi.js:1
18.823: Call setup time: 7870ms. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
XHR finished loading: POST "https://486.talkgadget.google.com/talkgadget/dch/bind?VER=8&clid=15B470D002…%22ci%3Aec%22%5D&SID=A1F60159508FC620&RID=65247&AID=62&zx=z98m5mqzh891&t=1". d?token=AHRlWrpW2UyXasBPnZjeKSXplWnKfW5MLHvfVdEkMc7nyJR0fZBOpS3FSTwdPFL78TeOFwLZizj7fW2YT2PReS_kT0f…:148
XHR finished loading: POST "https://486.talkgadget.google.com/talkgadget/dch/bind?VER=8&clid=15B470D002…%22ci%3Aec%22%5D&SID=A1F60159508FC620&RID=65248&AID=65&zx=jhc8fvyea0ku&t=1". d?token=AHRlWrpW2UyXasBPnZjeKSXplWnKfW5MLHvfVdEkMc7nyJR0fZBOpS3FSTwdPFL78TeOFwLZizj7fW2YT2PReS_kT0f…:148
XHR finished loading: POST "https://486.talkgadget.google.com/talkgadget/dch/bind?VER=8&clid=15B470D002…%22ci%3Aec%22%5D&SID=A1F60159508FC620&RID=65249&AID=68&zx=f3ekck6huctq&t=1". d?token=AHRlWrpW2UyXasBPnZjeKSXplWnKfW5MLHvfVdEkMc7nyJR0fZBOpS3FSTwdPFL78TeOFwLZizj7fW2YT2PReS_kT0f…:148
XHR finished loading: GET "https://486.talkgadget.google.com/talkgadget/dch/bind?VER=8&clid=15B470D002…D&RID=rpc&SID=A1F60159508FC620&CI=0&AID=2&TYPE=xmlhttp&zx=3tv4s93wt7m0&t=1". d?token=AHRlWrpW2UyXasBPnZjeKSXplWnKfW5MLHvfVdEkMc7nyJR0fZBOpS3FSTwdPFL78TeOFwLZizj7fW2YT2PReS_kT0f…:148
XHR finished loading: POST "https://486.talkgadget.google.com/talkgadget/dch/bind?VER=8&clid=15B470D002…%22ci%3Aec%22%5D&SID=A1F60159508FC620&RID=65250&AID=72&zx=780bnpcsbeax&t=1". d?token=AHRlWrpW2UyXasBPnZjeKSXplWnKfW5MLHvfVdEkMc7nyJR0fZBOpS3FSTwdPFL78TeOFwLZizj7fW2YT2PReS_kT0f…:148
XHR finished loading: POST "https://486.talkgadget.google.com/talkgadget/dch/bind?VER=8&clid=15B470D002…%22ci%3Aec%22%5D&SID=A1F60159508FC620&RID=65251&AID=75&zx=ryialqo7ppeh&t=1". d?token=AHRlWrpW2UyXasBPnZjeKSXplWnKfW5MLHvfVdEkMc7nyJR0fZBOpS3FSTwdPFL78TeOFwLZizj7fW2YT2PReS_kT0f…:148
313.432: S->C: {"type":"bye"} adapter.js.pagespeed.jm.51oBwXpKMi.js:1
313.432: Session terminated. adapter.js.pagespeed.jm.51oBwXpKMi.js:1
XHR finished loading: POST "https://486.talkgadget.google.com/talkgadget/dch/bind?VER=8&clid=15B470D002…%22ci%3Aec%22%5D&SID=A1F60159508FC620&RID=65252&AID=78&zx=ix1p1q68blt9&t=1". d?token=AHRlWrpW2UyXasBPnZjeKSXplWnKfW5MLHvfVdEkMc7nyJR0fZBOpS3FSTwdPFL78TeOFwLZizj7fW2YT2PReS_kT0f…:148
XHR finished loading: POST "https://486.talkgadget.google.com/talkgadget/dch/bind?VER=8&clid=15B470D002…%22ci%3Aec%22%5D&SID=A1F60159508FC620&RID=65253&AID=81&zx=e828hmxmftzs&t=1". d?token=AHRlWrpW2UyXasBPnZjeKSXplWnKfW5MLHvfVdEkMc7nyJR0fZBOpS3FSTwdPFL78TeOFwLZizj7fW2YT2PReS_kT0f…:148
GET https://486.talkgadget.google.com/talkgadget/dch/bind?VER=8&clid=15B470D002…&RID=rpc&SID=A1F60159508FC620&CI=0&AID=70&TYPE=xmlhttp&zx=n81ba4xf4qdm&t=1 net::ERR_CONNECTION_RESET d?token=AHRlWrpW2UyXasBPnZjeKSXplWnKfW5MLHvfVdEkMc7nyJR0fZBOpS3FSTwdPFL78TeOFwLZizj7fW2YT2PReS_kT0f…:148
XHR finished loading: POST "https://486.talkgadget.google.com/talkgadget/dch/bind?VER=8&clid=15B470D002…%22ci%3Aec%22%5D&SID=A1F60159508FC620&RID=65254&AID=84&zx=u2m7wdsvqbs5&t=1". d?token=AHRlWrpW2UyXasBPnZjeKSXplWnKfW5MLHvfVdEkMc7nyJR0fZBOpS3FSTwdPFL78TeOFwLZizj7fW2YT2PReS_kT0f…:148
XHR finished loading: POST "https://486.talkgadget.google.com/talkgadget/dch/bind?VER=8&clid=15B470D002…%22ci%3Aec%22%5D&SID=A1F60159508FC620&RID=65255&AID=87&zx=o43d37r5uto2&t=1". d?token=AHRlWrpW2UyXasBPnZjeKSXplWnKfW5MLHvfVdEkMc7nyJR0fZBOpS3FSTwdPFL78TeOFwLZizj7fW2YT2PReS_kT0f…:148
XHR finished loading: POST "https://486.talkgadget.google.com/talkgadget/dch/bind?VER=8&clid=15B470D002…%22ci%3Aec%22%5D&SID=A1F60159508FC620&RID=65256&AID=90&zx=2a5z3e8cptqh&t=1". d?token=AHRlWrpW2UyXasBPnZjeKSXplWnKfW5MLHvfVdEkMc7nyJR0fZBOpS3FSTwdPFL78TeOFwLZizj7fW2YT2PReS_kT0f…:148
XHR finished loading: GET "https://486.talkgadget.google.com/talkgadget/dch/bind?VER=8&clid=15B470D002…&RID=rpc&SID=A1F60159508FC620&CI=0&AID=81&TYPE=xmlhttp&zx=k5brakb1fjmo&t=2". d?token=AHRlWrpW2UyXasBPnZjeKSXplWnKfW5MLHvfVdEkMc7nyJR0fZBOpS3FSTwdPFL78TeOFwLZizj7fW2YT2PReS_kT0f…:148
XHR finished loading: POST "https://486.talkgadget.google.com/talkgadget/dch/bind?VER=8&clid=15B470D002…B%22ci%3Aec%22%5D&SID=A1F60159508FC620&RID=65257&AID=94&zx=i3l3lqn1a3r&t=1". d?token=AHRlWrpW2UyXasBPnZjeKSXplWnKfW5MLHvfVdEkMc7nyJR0fZBOpS3FSTwdPFL78TeOFwLZizj7fW2YT2PReS_kT0f…:148
XHR finished loading: POST "https://486.talkgadget.google.com/talkgadget/dch/bind?VER=8&clid=15B470D002…%22ci%3Aec%22%5D&SID=A1F60159508FC620&RID=65258&AID=97&zx=5t98uanp3xkx&t=1". d?token=AHRlWrpW2UyXasBPnZjeKSXplWnKfW5MLHvfVdEkMc7nyJR0fZBOpS3FSTwdPFL78TeOFwLZizj7fW2YT2PReS_kT0f…:148
XHR finished loading: POST "https://486.talkgadget.google.com/talkgadget/dch/bind?VER=8&clid=15B470D002…%22ci%3Aec%22%5D&SID=A1F60159508FC620&RID=65259&AID=100&zx=t0btzoxqypc&t=1". d?token=AHRlWrpW2UyXasBPnZjeKSXplWnKfW5MLHvfVdEkMc7nyJR0fZBOpS3FSTwdPFL78TeOFwLZizj7fW2YT2PReS_kT0f…:148
XHR finished loading: POST "https://486.talkgadget.google.com/talkgadget/dch/bind?VER=8&clid=15B470D002…22ci%3Aec%22%5D&SID=A1F60159508FC620&RID=65260&AID=103&zx=1eet7z30fgyr&t=1". d?token=AHRlWrpW2UyXasBPnZjeKSXplWnKfW5MLHvfVdEkMc7nyJR0fZBOpS3FSTwdPFL78TeOFwLZizj7fW2YT2PReS_kT0f…:148
XHR finished loading: GET "https://486.talkgadget.google.com/talkgadget/dch/bind?VER=8&clid=15B470D002…&RID=rpc&SID=A1F60159508FC620&CI=0&AID=92&TYPE=xmlhttp&zx=56ln4mrimdu0&t=1". d?token=AHRlWrpW2UyXasBPnZjeKSXplWnKfW5MLHvfVdEkMc7nyJR0fZBOpS3FSTwdPFL78TeOFwLZizj7fW2YT2PReS_kT0f…:148
XHR finished loading: POST "https://486.talkgadget.google.com/talkgadget/dch/bind?VER=8&clid=15B470D002…22ci%3Aec%22%5D&SID=A1F60159508FC620&RID=65261&AID=106&zx=l9v3a2xmwpgw&t=1". d?token=AHRlWrpW2UyXasBPnZjeKSXplWnKfW5MLHvfVdEkMc7nyJR0fZBOpS3FSTwdPFL78TeOFwLZizj7fW2YT2PReS_kT0f…:148







从以上日志以及AppRTCDemo.apk的代码分析,可以得出结构:android端与pc端的peerconnection行为完全一样,所以移植android端的做法也与移植PC端的完全一样,分以下几步走:

1.移植xmpp,打通android端的login,sendmessage,IQ

2.拿掉GAE交互部分代码

3.合并xmpp与APPRTCDemo.apk中的PeerConnection接口


第1步比较郁闷,最开始选择了gloox,但发现这货使用起来又是另外一套,折腾了几次,算了,还是用回熟悉的libjingle吧。于是去webrtc的linux虚拟机中找了找,看到了build.ninja以及libjingle.ninja,可惜,这libjingle生成是的一个libjingle.a的静态库,无法一直接用。要么就直接在peerconnection_jni.cc中加xmpp的相关接口(因为libjingle_peerconnection_so.so中实际上已经链接了libjingle.a,可以看libjingle_peerconnection_so.ninja结构),要么就是另外找个libjingle的代码,打通xmpp。在经过多次尝试后,发现前者太麻烦了,主要是修改libjingle_peerconnection_jni.cc不方便,随便改改还得跑去虚拟机编一下就太麻烦了。为了节省工作量,决定先使用后者,在完全打通后,再尝试前者。






WebRTC中的AppRTCDemo.apk简单分析,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。