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简单分析

时间: 2024-11-16 01:29:16

WebRTC中的AppRTCDemo.apk简单分析的相关文章

Android IOS WebRTC 音视频开发总结(八十六)-- WebRTC中RTP/RTCP协议实现分析

本文主要介绍WebRTC中的RTP/RTCP协议,作者:weizhenwei ,文章最早发表在编风网,微信ID:befoio 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:blackerteam 或 webrtcorgcn). 一 前言 RTP/RTCP协议是流媒体通信的基石.RTP协议定义流媒体数据在互联网上传输的数据包格式,而RTCP协议则负责可靠传输.流量控制和拥塞控制等服务质量保证.在WebRTC项目中,RTP/RTCP模块作为传输模块的一部分,负责对发送端

Java动态替换InetAddress中DNS的做法简单分析1

在java.net包描述中, 简要说明了一些关键的接口. 其中负责networking identifiers的是Addresses. 这个类的具体实现类是InetAddress, 底层封装了Inet4Address与Inet6Address的异同, 可以看成一个Facade工具类. A Low Level API, which deals with the following abstractions: Addresses, which are networking identifiers,

java.util.ComparableTimSort中的sort()方法简单分析

TimSort算法是一种起源于归并排序和插入排序的混合排序算法,设计初衷是为了在真实世界中的各种数据中能够有较好的性能. 该算法最初是由Tim Peters于2002年在Python语言中提出的. TimSort 是一个归并排序做了大量优化的版本号. 对归并排序排在已经反向排好序的输入时表现O(n2)的特点做了特别优化.对已经正向排好序的输入降低回溯.对两种情况混合(一会升序.一会降序)的输入处理比較好. 在jdk1.7之后.Arrays类中的sort方法有一个分支推断,当LegacyMerge

【Flume】flume中通道channel的简单分析梳理

Channels are the repositories where the events are staged on a agent. Source adds the events and Sink removes it. 通道就是事件暂存的地方,source负责往通道中添加event,sink负责从通道中移出event flume1.5.2内置的通道有:内存,文件,jdbc 1.内存通道memory-channel 时间存储在内存队列中,对于性能要求高且能接受agent失败时数据丢失的情况

Java动态替换InetAddress中DNS的做法简单分析2

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.net.HttpURLConnection; import java.net.InetAddress;

Android中的软件安全和逆向分析[二]—apk反破解技术与安全保护机制

在Android应用开发中,当我们开发完软件之后,我们不希望别人能够反编译破解我们的应用程序,不能修改我们的代码逻辑.实际上,在应用程序的安全机制考虑中,我们希望自己的应用程序安全性高,通过各种加密操作等来增大竞争对手的反编译破解成本.设想,竞争对手开发一个同样的应用程序需要10天,而破解我们的软件程序需要100天,那么势必会打消黑客程序员破解我们应用程序的念头.如何增加对手的破解成本,就需要考验我们应用程序的安全性有多高,加密技术有多强.一个优秀的应用程序,不仅能为用户带来利益,同时也能保护自

Collections中sort()方法源代码的简单分析

Collections的sort方法代码: public static <T> void sort(List<T> list, Comparator<? super T> c) { Object[] a = list.toArray(); Arrays.sort(a, (Comparator)c); ListIterator i = list.listIterator(); for (int j=0; j<a.length; j++) { i.next(); i.

Android IOS WebRTC 音视频开发总结(八十七)-- WebRTC中丢包重传NACK实现分析

本文主要介绍WebRTC中丢包重传NACK的实现,作者:weizhenwei ,文章最早发表在编风网,微信ID:befoio 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:blackerteam 或 webrtcorgcn). 在WebRTC中,前向纠错(FEC)和丢包重传(NACK)是抵抗网络错误的重要手段.FEC在发送端将数据包添加冗余纠错码,纠错码连同数据包一起发送到接收端:接收端根据纠错码对数据进行检查和纠正.RFC5109[1]定义FEC数据包的格式.NA

C#中异常:“The type initializer to throw an exception(类型初始值设定项引发异常)”的简单分析与解决方法

对于C#中异常:“The type initializer to throw an exception(类型初始值设定项引发异常)”的简单分析,目前本人分析两种情况,如下: 情况一: 借鉴麒麟.NET的类型初始值设定项引发异常文章!!!写的很详细,大家可以看一看! 其实麒麟.NET的这篇文章主要讲解分析了静态成员的方面,总的说就是:类型初始化或访问类型的静态成员时,都会对类中的其他静态成员进行初始化,如果有静态构造函数的话,一并执行静态构造函数.在这过程中所引发的异常我就直接借鉴麒麟.NET的例