rtc-io / rtc-quickconnect Goto Github PK
View Code? Open in Web Editor NEWAn opinionated approach to creating WebRTC apps (both media and datachannels supported)
License: Apache License 2.0
An opinionated approach to creating WebRTC apps (both media and datachannels supported)
License: Apache License 2.0
I have a single-page-app that utilizes rtc-quickconnect
. The hash location is part of the soul of the single page app, and it dies an icky death when it is mettled with. Now that you can manually set a hash/key, the option setHashLocation: false
allows me to manually manage the hash/key.
Sorry, this is a really dumb n00b question. I have been struggling to get the basic example usage to work:
var quickconnect = require('rtc-quickconnect');
var opts = {
room: 'qc-simple-demo',
debug: true
};
console.log('establishing connection');
quickconnect('http://rtc.io/switchboard/', opts)
.on('call:started', function(id, pc, data) {
console.log('we have a new connection to: ' + id);
});
I get the following output:
establishing connection
rtc-signaller: signaller 71041785-91dd-46ec-bd6b-b3094bf018eb received data: /roominfo|{"memberCount":1}
But I was expecting:
establishing connection
rtc-signaller: signaller 71041785-91dd-46ec-bd6b-b3094bf018eb received data: /roominfo|{"memberCount":1}
we have a new connection to: //some id
The callback from requestChannel
is never called when the following code is run at either end of a call. The channel:opened
callback is never run on the slave side either.
qc.on('call:started', function(peerId) {
if (qc.isMaster(peerId)) {
qc.createDataChannel(newChannel);
} else {
qc.requestChannel(peerId, newChannel, function() {
console.log('requestChannel callback fired');
});
}
}
qc.on('channel:opened', function(id, dc) {
console.log('channel opened');
});
To recreate the problem:
Expected Result:
Peer A and Peer B discover each other and reconnect.
Actual Result:
No discovery and thus no connection.
Possible Causes:
Reconnection logic seems to be only invoked if a signaller.announce call occurs when the signaller has already connected (see https://github.com/rtc-io/rtc-signaller/blob/master/index.js#L204)
I've been grappling with different ways to communicate events that are happening within a peer connections lifetime that effectively allow an external module to track it's behaviour. While JS offers all kinds of different approaches some feel dirtier than others.
My current thinking is to associate a "pc.internals" property with a newly created peer connection (right after this line: https://github.com/rtc-io/rtc-quickconnect/blob/master/index.js#L301) which is an EventEmitter (probably EventEmitter2 for wildcard event goodness).
This would probably mean a move from EventEmitter3 back to EventEmitter2 across the rtc.io suite, which wouldn't cause a problem so could be rolled out over time...
/cc @nathanoehlman @rtc-io/plugins
Currently creating a datachannel using quickconnect is quite simplistic in it's approach (you can only specify { data: true }
to get a single data channel).
This should be modified to support specifying additional data channels in the data configuration option. For example, if an array is passed for the value of the attribute this is flagging that multiple data channels are wanted.
A simple case of:
{
data: ['a', 'b']
}
Would tell quick connect that two data channels were wanted with the default configuration options that are used when calling createDataChannel
on the peer connection.
A more complicated case would allow for setting configuration options for the data channels by using an object for each of the channels:
{
data: {
a: {},
b: {
reliable: false
}
}
}
Prior to implementing this I need to review the various options available with SCTP data channels and look at what functionality can be shared between rtc-quickconnect and rtc-mesh (thus a separate utility module may be created).
When implementing the apprtc demo I was using the call:ended
to check when we had hit a point of 0 calls. Once 0 calls were active I would remove a callactive
class from the top level container which influenced the application ui.
Presently, however, the calls object of quickconnect still contains the call that has just ended which makes the logic more complicated than it should be. I think changing this would be a good idea.
Consider the following call setup, between peers A and B:
In the case that B is assigned the "master" role from an rtc-signaller
perspective, then it will be responsible for creating the initial offer. At the point that A receives this offer, because B has streams in the SDP it will not provide any of its streams in the answer. This is a limitation in the current firefox implementation and as such not supported at this current stage in the rtc.io modules.
A potential fix to this (if Firefox do not support this behaviour soon) is that we can ensure that the peer with the video stream (A) in this case is assigned the master role.
Hi,
to avoid a range of connection difficulties introduced by IPv6 candidates from Chrome 42 onwards, we want to add the constraint which disables IPv6 candidates in WebRTC in the peerconnection constraints. At a low level with a peerconnection configuration object, we would just include
googIPv6: "false"
It is not obvious from the examples or our usage to-date, if any valid constraint other than iceServers can be handed into quickconnect or exactly how.
.
Hi.
I'm looking for a way to add some information about the video stream. Name, user role etc. We're prototyping a simple teacher/student/observer web app.
With current highly automated way of doing so all streams are "anonymous" and i only get a generated ID but not much more.
I've tried adding info to the stream before calling rtcConnection.addStream but i wasn't so lucky.
I can't find the documentation. Do you have a way of identifying which stream is which so i can apply some of our internal logic in there ?
Thank you.
ps: sorry to make this an issue. i could not find another way to communicate. Do you have a slack or irc channel ?
When initiating a peer connection on Chrome, when no "real" streams or data channels have been added to the peer connection before creating an offer a "default" stream is added by Chrome. This stream currently triggers the stream:added
event which will generally result on a video element being added to the DOM which is rendered as a black area because the stream itself contains no data.
While I have implemented code to deal with this behaviour within an experimental ui package (rtc-ui
) I think that quickconnect should not trigger a stream:added
event for this default
stream (it is labelled as such and can be detected) as it is not useful for rendering purposes. My understanding is that it exists only so the process of gathering ice candidates and establishing connectivity for audio and video streams can be done as quickly as possible.
Current thinking - don't implement anything at the signaller level, but if we detect a peer connection that involves firefox (either the local end or remote), then regularly send /ping
messages over the wire and if not detected for 3 * interval
end the call.
The documentation shows that the stream:added
event includes peer profile data when a stream is reported (in the 3rd argument). This is not currently the case and should be fixed.
At this stage data channels are still a little unreliable so creating one for the sake a heartbeat it probably isn't ideal...
Hi Damon,
I recently ran into an issue where my connection to a turn server appears to be failing, and I suppose it is my configuration. Could you check if it is supposed to work like this?
conference = RTC({
constraints: {
audio: true,
video: true
},
signaller: signaller,
room: room,
ice: [
{url: "stun:server.foo:3478"},
{
url: "turn:server.foo:3478",
username: "turnuser",
credential: "turnpassword",
},
],
localContainer: '#localVideo',
remoteContainer: '#remoteVideo',
options: {}
});
ice configuration is based on http://www.html5rocks.com/en/tutorials/webrtc/infrastructure/
{
'iceServers': [
{
'url': 'stun:stun.l.google.com:19302'
},
{
'url': 'turn:192.158.29.39:3478?transport=udp',
'credential': 'JZEOEt2V3Qb0y27GRntt2u2PAYA=',
'username': '28224511:1379330808'
},
{
'url': 'turn:192.158.29.39:3478?transport=tcp',
'credential': 'JZEOEt2V3Qb0y27GRntt2u2PAYA=',
'username': '28224511:1379330808'
}
]
}
Repro below with the example code from the README. This is tested in both Chrome and Firefox Developer Edition. There are no error messages and nothing that appears useful in the debug output.
var freeice = require('freeice');
var quickconnect = require('rtc-quickconnect');
var opts = {
room: 'qcexample-dctest',
// debug: true,
iceServers: freeice()
};
quickconnect('http://rtc.io/switchboard/', opts)
// tell quickconnect we want a datachannel called test
.createDataChannel('test')
// when the test channel is open, let us know
.on('channel:opened:test', function(id, dc) {
dc.onmessage = function(evt) {
console.log('peer ' + id + ' says: ' + evt.data);
};
console.log('test dc open for peer: ' + id); // This never fires.
dc.send('hi');
});
WebRTC in firefox is implemented a little differently to chrome. Specifically:
RTCPeerConnection
objects cannot create an offer unless they have either a media stream or a data channel created in the connection.onnegotiationneeded
event is not generally supported (at least not in stable or beta), which means the way that quickconnect works will fail in firefox.As such, I'm considering some API changes to quickconnect. The changes would make quickconnect simpler to use and bring some of the power that glue has along - the trade off being that the module tree would become a little heavier (i.e. comparable with glue).
I don't think this would be a problem overall, as someone interested in a lighter module tree could easily use rtc
to implement their specific requirements, especially considering that #5 will likely be implemented at the rtc
module layer anyway.
In looking at making the rtc
module as friendly as possible, I'd like to update quickconnect to support a single ice
configuration options which behaves in the following way:
iceServers
option when creating a connection using the rtc-tools
module.fn(opts?, callback)
and the callback is an error first callback providing iceServers
when no error is encountered. This would enable easy integration with the xirsys for provision of iceServers.At present, a call to quickconnect(signallingUrl)
fails as part of the quickconnect logic is expecting opts to always be present.
The current implementation of quickconnect doesn't acknowledge a connection attempt with a previously known peer (or so it seems).
Steps to reproduce:
The expected behaviour of the above is that a new peer connection is created between the two peers...
Hi,
I have this issue when simulate reconnection device (by refresh the html page):
rtc/couple error (createAnswer): SetLocalDescription failed: Failed to push down answer transport description.
For information, one of my device, no have webcam (but audio), Do you have some idea ?
Run the following code on two browser windows to create a call. Reload the page on one end. On the other end you will see multiple data channel creation events for the new connection, one for the new connection and one for the connection that now does not exist. Problem is more evident if instead of reloading you page back, wait for the connection close event to register on the other end and then page forward to start a new connection.
'use strict'
var quickconnect = require('rtc-quickconnect');
var crel = require('crel');
var qc = quickconnect('https://rtc.io/switchboard/', {
room: 'phantom-postchannel',
reactive: true
});
var logger = document.body.appendChild(crel('div'));
function append(msg) {
crel(logger, crel('p', msg));
}
qc.on('call:started', function(peerId) {
append('call started with peer ' + peerId);
append('call master: ' + qc.isMaster(peerId));
var newChannelId = (peerId < qc.id ? peerId : qc.id) + '-' + (peerId < qc.id ? qc.id : peerId);
append('creating new datachannel ' + newChannelId);
qc.createDataChannel(newChannelId);
append('waiting for channel open');
});
qc.on('call:ended', function(peerId) {
append('call ended with peer: ' + peerId);
});
qc.on('channel:opened', function(id, dc) {
append('channel opened, label: ' + dc.label);
});
qc.on('channel:closed', function(id, dc) {
append('channel closed, label: ' + dc.label);
});
append('waiting for call');
just cant get it to work..
this:
var quickconnect = require('rtc-quickconnect');
give me (do I need to include require.js? there is no info about it but I assume that I should)
Uncaught Error: Module name "rtc-quickconnect" has not been loaded yet for context: _. Use require([])
than I tried to look at the example which didnt work
<script>
quickconnect('https://switchboard.rtc.io/', { room: 'bundle-test' })
// tell quickconnect we want a datachannel called test
.createDataChannel('test')
// when the test channel is open, let us know
.on('test:open', function(id, dc) {
dc.onmessage = function(evt) {
console.log('peer ' + id + ' says: ' + evt.data);
};
console.log('test dc open for peer: ' + id);
dc.send('hi');
});
</script>
it just return quickconnect is undefind.
what I am missing?
Options documentation does not properly outline how to provide iceServers
I've been looking for several days for this, but no luck, so I am just going to ask... Should it be possible to send the messages over socket.io, and are there any hints on how to do so?
I am asking because I have an existing infrastructure that handles authentication and rooms over socket.io. I'd like to preserve this while adding webrtc to the system, which I could not by using the default Primus implementation.
If I understood the code correct I can override the default messenger by calling rtc-quickconnect() and providing a function as the first parameter. This function replaces the rtc-switchboard-messenger and should eventually return a function to create a pull_stream as defined in https://github.com/DamonOehlman/messenger-archetype.
Are you aware of any kind of pull_stream wrapper that works on socket.io connections rather than plain websockets? Is such a thing possible?
I just had a good discussion with @pedalpete regarding the event names of call:started
and call:ended
. He expressed some confusion when writing a multiparty application with regards to the call:started
event and how it possibly relates to the way we are thinking about the app.
For instance in his app, he considers the first connection made to a peer being the time at which a "call" is started, and subsequent peers are then joining that existing call. Thus he was surprised when he got additional call:started
events. I think this is completely reasonable and logical thinking.
One possibility is to move the names to something like the following (which I think is in line with a suggestion made by @balupton some time ago):
call:started
=> peer:connected
call:ended
=> peer:disconnected
One thing to be aware of is that there is an existing event peer:connect
which does cause us a bit of an issue, but it might be worth making the change if it makes more sense in the long run. Additionally, the existing peer:connect
and peer:couple
events are more informational events though could be used by people so we are definitely talking a major version bump for quickconnect (and a well documented one at that).
These existing events could be changed to the following:
peer:connect
=> peer:connection:create
peer:couple
=> peer:connection:couple
With all of these potential changes, it would move a lifecycle of (major) peer events within a quickconnect driven application to something that looked like the following:
peer:announce
- a remote peer has announced themselves on the signalling serverpeer:connected
- a peerconnection has been established from us to a remote peerpeer:disconnected
- a peer connection has been terminated with a remote peerpeer:leave
- a remote peer has disconnected from the signalling serverNOTE: The order of the final two events does not have to occur in that order, for instance it is possible for a peer to disconnect from the signalling server and for us to hold a peer connection open to the peer.
Hey Guys,
Just wondering the best way to handle ICE issues in my application. Every so often I get
addIceCandidate task failed: Error processing ICE candidateindex.js:126 (anonymous function)index.js:90 handleFail
This leaves the user with either no sound at all (in the case of a 2 person call) or in some cases a call where you can hear some members but not others.
What's the best way to handle this? I tried adding my own list of stun servers in the iceServers configuration with no avail. I even spun up my own TURN server to try and handle this, however it seems to happen even locally when I have no issues with firewalls connecting from my local machine to my local machine.
Thanks,
Matt
I'm getting the following:
Firefox can't establish a connection to the server at wss://switchboard.rtc.io/.
Everything seems fine in Chrome. I went to the trouble of setting up my own switchboard server on elastic beanstalk and ended up with the exact same results. Fine on Chrome, this error on firefox. Any tips?
Hi, rtc.io is great but, there's a problem:
If someone who doesn't have a webcam (or probably doesnt share it) joins a room with people sharing video in it, he doesn't receive VideoTracks from them.
When quickconnect is used in reactive mode, and no data or media is added prior to creating a connection it is common to see a stream:added
event for a fake stream that is added by Chrome to assist with correctly negotiating ice connectivity for the peer connection.
At this stage this new default
stream is triggering a stream:added
event when first created, but is no stream:removed
event when the fake stream is replaced by a real media stream. This needs to be investigated and resolved so that either the stream:added
event is never triggered for the connection (see previous investigation in #31) or a stream:removed
event is triggered once real media starts to flow (the second approach being more realistic).
While I haven't come across the issue there's been a couple of reports of an issue. Investigating now.
With the changes to the signaller events, quickconnect's peer:connect
event is too close in name to the signallers peer:connected
event.
As such this event needs another name...
It's still currently emitting %channelname%:close
events.
amirite.
is there any reason not to do this?
MS is starting on the ORTC implementation in Edge as of preview release today. Are there any plans to use a plugin/shim to get RTC.io compatible API access for Edge.
I'm testing the datachannel
demo in 4 tabs (chrome 31.0.1650.63). Reloading one of the tabs results in the peer
event being emitted 100% reliably for each peer. However, the dc:open
event is seemingly randomly emitted or not emitted for each peer.
Here are the results of some trials of refreshing 1 of 4 tabs, and waiting ~30s to complete:
[ trial number: N/3 peers established a dataconnection and sent 'hi' ]
0: 1/3 peers
1: 0/3 peers
2: 2/3 peers
3: 1/3 peers
4: 3/3 peers
5: 2/3 peers
6: 2/3 peers
7: 2/3 peers
8: 0/3 peers
What would explain this behavior?
On OS X when I run the rtcio-demo-quickconnect app between a FF26 and a Chrome32 or 34 instance, and I start it on Chrome, then add FF room, it crashes Chrome.
I have not been able to replicate this with apprtc, so must be something funny that we do. I'd like to narrow it down so I can register a Chrome bug.
Crash report:
Process: Google Chrome Canary [7238]
Path: /Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary
Identifier: com.google.Chrome.canary
Version: 34.0.1814.0 (1814.0)
Code Type: X86 (Native)
Parent Process: launchd [158]
Responsible: Google Chrome Canary [7238]
User ID: 501
Date/Time: 2014-01-31 13:02:43.136 +1100
OS Version: Mac OS X 10.9.1 (13B42)
Report Version: 11
Anonymous UUID: 23837A6A-75DB-5B20-DFC9-F59C4C24BF6A
Sleep/Wake UUID: 925E7617-8CD5-4004-9EC1-87AF586432F8
Crashed Thread: 38 QTKit: QTBackgroundQueueRun
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000000107fa000
VM Regions Near 0x107fa000:
IOKit 0000000010763000-00000000107fa000 [ 604K] rw-/rw- SM=ALI
-->
mapped file 000000001082e000-0000000010980000 [ 1352K] rw-/rwx SM=ALI /private/var/folders//.druG2N
Thread 0:: CrBrowserMain Dispatch queue: com.apple.main-thread
0 libsystem_kernel.dylib 0x97366f7a mach_msg_trap + 10
1 libsystem_kernel.dylib 0x9736616c mach_msg + 68
2 com.apple.CoreFoundation 0x952f4f69 __CFRunLoopServiceMachPort + 169
3 com.apple.CoreFoundation 0x952f4541 __CFRunLoopRun + 1393
4 com.apple.CoreFoundation 0x952f3d5a CFRunLoopRunSpecific + 394
5 com.apple.CoreFoundation 0x952f3bbb CFRunLoopRunInMode + 123
6 com.apple.HIToolbox 0x930eee2d RunCurrentEventLoopInMode + 259
7 com.apple.HIToolbox 0x930eebb2 ReceiveNextEventCommon + 526
8 com.apple.HIToolbox 0x930ee98d _BlockUntilNextEventMatchingListInModeWithFilter + 92
9 com.apple.AppKit 0x903da5a9 _DPSNextEvent + 1602
10 com.apple.AppKit 0x903d9ad0 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 119
11 com.apple.AppKit 0x903cc35c -[NSApplication run] + 727
12 com.google.Chrome.framework 0x00818ffb 0x67000 + 8069115
13 com.google.Chrome.framework 0x0081890c 0x67000 + 8067340
14 com.google.Chrome.framework 0x0085b231 0x67000 + 8340017
15 com.google.Chrome.framework 0x00871a11 0x67000 + 8432145
16 com.google.Chrome.framework 0x001c85ee 0x67000 + 1447406
17 com.google.Chrome.framework 0x031a5cd0 0x67000 + 51637456
18 com.google.Chrome.framework 0x031a7dd3 0x67000 + 51645907
19 com.google.Chrome.framework 0x031a1f9e 0x67000 + 51621790
20 com.google.Chrome.framework 0x007eb023 0x67000 + 7880739
21 com.google.Chrome.framework 0x007ebb8f 0x67000 + 7883663
22 com.google.Chrome.framework 0x007eae90 0x67000 + 7880336
23 com.google.Chrome.framework 0x00069ad9 ChromeMain + 41
24 com.google.Chrome.canary 0x00062f78 main + 24
25 com.google.Chrome.canary 0x00062f55 0x62000 + 3925
Thread 1:
0 libsystem_kernel.dylib 0x9736c046 __workq_kernreturn + 10
1 libsystem_pthread.dylib 0x918f5dcf _pthread_wqthread + 372
2 libsystem_pthread.dylib 0x918f9cce start_wqthread + 30
Thread 2:: Dispatch queue: com.apple.libdispatch-manager
0 libsystem_kernel.dylib 0x9736c992 kevent64 + 10
1 libdispatch.dylib 0x952688bd _dispatch_mgr_invoke + 238
2 libdispatch.dylib 0x95268556 _dispatch_mgr_thread + 52
Thread 3:
0 libsystem_kernel.dylib 0x9736c046 __workq_kernreturn + 10
1 libsystem_pthread.dylib 0x918f5dcf _pthread_wqthread + 372
2 libsystem_pthread.dylib 0x918f9cce start_wqthread + 30
Thread 4:
0 libsystem_kernel.dylib 0x97366f7a mach_msg_trap + 10
1 libsystem_kernel.dylib 0x9736616c mach_msg + 68
2 com.google.Chrome.framework 0x008116d1 0x67000 + 8038097
3 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
4 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
5 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 5:: NetworkConfigWatcher
0 libsystem_kernel.dylib 0x97366f7a mach_msg_trap + 10
1 libsystem_kernel.dylib 0x9736616c mach_msg + 68
2 com.apple.CoreFoundation 0x952f4f69 __CFRunLoopServiceMachPort + 169
3 com.apple.CoreFoundation 0x952f4541 __CFRunLoopRun + 1393
4 com.apple.CoreFoundation 0x952f3d5a CFRunLoopRunSpecific + 394
5 com.apple.CoreFoundation 0x952f3bbb CFRunLoopRunInMode + 123
6 com.apple.Foundation 0x94e97319 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 277
7 com.google.Chrome.framework 0x00818e2f 0x67000 + 8068655
8 com.google.Chrome.framework 0x0081890c 0x67000 + 8067340
9 com.google.Chrome.framework 0x0085b231 0x67000 + 8340017
10 com.google.Chrome.framework 0x00871a11 0x67000 + 8432145
11 com.google.Chrome.framework 0x0085afba 0x67000 + 8339386
12 com.google.Chrome.framework 0x00886cf1 0x67000 + 8518897
13 com.google.Chrome.framework 0x00886dd0 0x67000 + 8519120
14 com.google.Chrome.framework 0x00882d85 0x67000 + 8502661
15 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
16 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
17 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 6:: DnsConfigService
0 libsystem_kernel.dylib 0x9736c976 kevent + 10
1 com.google.Chrome.framework 0x00899c4b 0x67000 + 8596555
2 com.google.Chrome.framework 0x008978f9 0x67000 + 8587513
3 com.google.Chrome.framework 0x00817b04 0x67000 + 8063748
4 com.google.Chrome.framework 0x0085b231 0x67000 + 8340017
5 com.google.Chrome.framework 0x00871a11 0x67000 + 8432145
6 com.google.Chrome.framework 0x0085afba 0x67000 + 8339386
7 com.google.Chrome.framework 0x00886cf1 0x67000 + 8518897
8 com.google.Chrome.framework 0x00886dd0 0x67000 + 8519120
9 com.google.Chrome.framework 0x00882d85 0x67000 + 8502661
10 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
11 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
12 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 7:: WorkerPool/22555
0 libsystem_kernel.dylib 0x9736b7ca __psynch_cvwait + 10
1 libsystem_pthread.dylib 0x918f6d8a _pthread_cond_wait + 837
2 libsystem_pthread.dylib 0x918f7042 pthread_cond_timedwait_relative_np + 47
3 com.google.Chrome.framework 0x0087ebf5 0x67000 + 8485877
4 com.google.Chrome.framework 0x00889851 0x67000 + 8530001
5 com.google.Chrome.framework 0x00889d8a 0x67000 + 8531338
6 com.google.Chrome.framework 0x00882d85 0x67000 + 8502661
7 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
8 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
9 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 8:: WorkerPool/23563
0 libsystem_kernel.dylib 0x9736b7ca __psynch_cvwait + 10
1 libsystem_pthread.dylib 0x918f6d8a _pthread_cond_wait + 837
2 libsystem_pthread.dylib 0x918f7042 pthread_cond_timedwait_relative_np + 47
3 com.google.Chrome.framework 0x0087ebf5 0x67000 + 8485877
4 com.google.Chrome.framework 0x00889851 0x67000 + 8530001
5 com.google.Chrome.framework 0x00889d8a 0x67000 + 8531338
6 com.google.Chrome.framework 0x00882d85 0x67000 + 8502661
7 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
8 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
9 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 9:: CrShutdownDetector
0 libsystem_kernel.dylib 0x9736cdba __read + 10
1 com.google.Chrome.framework 0x001c9b43 0x67000 + 1452867
2 com.google.Chrome.framework 0x00882d85 0x67000 + 8502661
3 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
4 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
5 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 10:: Chrome_DBThread
0 libsystem_kernel.dylib 0x9736b7ca __psynch_cvwait + 10
1 libsystem_pthread.dylib 0x918f6d1d _pthread_cond_wait + 728
2 libsystem_pthread.dylib 0x918f8bd9 pthread_cond_wait$UNIX2003 + 71
3 com.google.Chrome.framework 0x0087eb78 0x67000 + 8485752
4 com.google.Chrome.framework 0x0087f07b 0x67000 + 8487035
5 com.google.Chrome.framework 0x0087ef06 0x67000 + 8486662
6 com.google.Chrome.framework 0x0085e347 0x67000 + 8352583
7 com.google.Chrome.framework 0x0085b231 0x67000 + 8340017
8 com.google.Chrome.framework 0x00871a11 0x67000 + 8432145
9 com.google.Chrome.framework 0x0085afba 0x67000 + 8339386
10 com.google.Chrome.framework 0x00886cf1 0x67000 + 8518897
11 com.google.Chrome.framework 0x031b56af 0x67000 + 51701423
12 com.google.Chrome.framework 0x00886dd0 0x67000 + 8519120
13 com.google.Chrome.framework 0x00882d85 0x67000 + 8502661
14 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
15 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
16 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 11:: Chrome_FileThread
0 libsystem_kernel.dylib 0x9736c976 kevent + 10
1 com.google.Chrome.framework 0x00899c4b 0x67000 + 8596555
2 com.google.Chrome.framework 0x008978f9 0x67000 + 8587513
3 com.google.Chrome.framework 0x00817be3 0x67000 + 8063971
4 com.google.Chrome.framework 0x0085b231 0x67000 + 8340017
5 com.google.Chrome.framework 0x00871a11 0x67000 + 8432145
6 com.google.Chrome.framework 0x0085afba 0x67000 + 8339386
7 com.google.Chrome.framework 0x00886cf1 0x67000 + 8518897
8 com.google.Chrome.framework 0x031b56ef 0x67000 + 51701487
9 com.google.Chrome.framework 0x00886dd0 0x67000 + 8519120
10 com.google.Chrome.framework 0x00882d85 0x67000 + 8502661
11 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
12 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
13 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 12:: Chrome_FileUserBlockingThread
0 libsystem_kernel.dylib 0x9736b7ca __psynch_cvwait + 10
1 libsystem_pthread.dylib 0x918f6d1d _pthread_cond_wait + 728
2 libsystem_pthread.dylib 0x918f8bd9 pthread_cond_wait$UNIX2003 + 71
3 com.google.Chrome.framework 0x0087eb78 0x67000 + 8485752
4 com.google.Chrome.framework 0x0087f07b 0x67000 + 8487035
5 com.google.Chrome.framework 0x0087ef06 0x67000 + 8486662
6 com.google.Chrome.framework 0x0085e347 0x67000 + 8352583
7 com.google.Chrome.framework 0x0085b231 0x67000 + 8340017
8 com.google.Chrome.framework 0x00871a11 0x67000 + 8432145
9 com.google.Chrome.framework 0x0085afba 0x67000 + 8339386
10 com.google.Chrome.framework 0x00886cf1 0x67000 + 8518897
11 com.google.Chrome.framework 0x031b572f 0x67000 + 51701551
12 com.google.Chrome.framework 0x00886dd0 0x67000 + 8519120
13 com.google.Chrome.framework 0x00882d85 0x67000 + 8502661
14 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
15 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
16 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 13:: Chrome_ProcessLauncherThread
0 libsystem_kernel.dylib 0x9736b7ca __psynch_cvwait + 10
1 libsystem_pthread.dylib 0x918f6d1d _pthread_cond_wait + 728
2 libsystem_pthread.dylib 0x918f8bd9 pthread_cond_wait$UNIX2003 + 71
3 com.google.Chrome.framework 0x0087eb78 0x67000 + 8485752
4 com.google.Chrome.framework 0x0087f07b 0x67000 + 8487035
5 com.google.Chrome.framework 0x0087ef06 0x67000 + 8486662
6 com.google.Chrome.framework 0x0085e347 0x67000 + 8352583
7 com.google.Chrome.framework 0x0085b231 0x67000 + 8340017
8 com.google.Chrome.framework 0x00871a11 0x67000 + 8432145
9 com.google.Chrome.framework 0x0085afba 0x67000 + 8339386
10 com.google.Chrome.framework 0x00886cf1 0x67000 + 8518897
11 com.google.Chrome.framework 0x031b576f 0x67000 + 51701615
12 com.google.Chrome.framework 0x00886dd0 0x67000 + 8519120
13 com.google.Chrome.framework 0x00882d85 0x67000 + 8502661
14 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
15 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
16 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 14:: Chrome_CacheThread
0 libsystem_kernel.dylib 0x9736c976 kevent + 10
1 com.google.Chrome.framework 0x00899c4b 0x67000 + 8596555
2 com.google.Chrome.framework 0x008978f9 0x67000 + 8587513
3 com.google.Chrome.framework 0x00817be3 0x67000 + 8063971
4 com.google.Chrome.framework 0x0085b231 0x67000 + 8340017
5 com.google.Chrome.framework 0x00871a11 0x67000 + 8432145
6 com.google.Chrome.framework 0x0085afba 0x67000 + 8339386
7 com.google.Chrome.framework 0x00886cf1 0x67000 + 8518897
8 com.google.Chrome.framework 0x031b57af 0x67000 + 51701679
9 com.google.Chrome.framework 0x00886dd0 0x67000 + 8519120
10 com.google.Chrome.framework 0x00882d85 0x67000 + 8502661
11 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
12 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
13 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 15:: Chrome_IOThread
0 com.google.Chrome.framework 0x033e3f80 0x67000 + 53989248
1 com.google.Chrome.framework 0x0318c8ba 0x67000 + 51534010
2 com.google.Chrome.framework 0x00e9c54f 0x67000 + 14898511
3 com.google.Chrome.framework 0x00e9e651 0x67000 + 14906961
4 com.google.Chrome.framework 0x00e9e2f0 0x67000 + 14906096
5 com.google.Chrome.framework 0x00e9afd4 0x67000 + 14893012
6 com.google.Chrome.framework 0x00e9b19d 0x67000 + 14893469
7 com.google.Chrome.framework 0x008179dd 0x67000 + 8063453
8 com.google.Chrome.framework 0x00897b21 0x67000 + 8588065
9 com.google.Chrome.framework 0x00817be3 0x67000 + 8063971
10 com.google.Chrome.framework 0x0085b231 0x67000 + 8340017
11 com.google.Chrome.framework 0x00871a11 0x67000 + 8432145
12 com.google.Chrome.framework 0x0085afba 0x67000 + 8339386
13 com.google.Chrome.framework 0x00886cf1 0x67000 + 8518897
14 com.google.Chrome.framework 0x031b57ef 0x67000 + 51701743
15 com.google.Chrome.framework 0x00886dd0 0x67000 + 8519120
16 com.google.Chrome.framework 0x00882d85 0x67000 + 8502661
17 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
18 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
19 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 16:: IndexedDB
0 libsystem_kernel.dylib 0x9736b7ca __psynch_cvwait + 10
1 libsystem_pthread.dylib 0x918f6d8a _pthread_cond_wait + 837
2 libsystem_pthread.dylib 0x918f7042 pthread_cond_timedwait_relative_np + 47
3 com.google.Chrome.framework 0x0087ebf5 0x67000 + 8485877
4 com.google.Chrome.framework 0x0087f058 0x67000 + 8487000
5 com.google.Chrome.framework 0x0085e383 0x67000 + 8352643
6 com.google.Chrome.framework 0x0085b231 0x67000 + 8340017
7 com.google.Chrome.framework 0x00871a11 0x67000 + 8432145
8 com.google.Chrome.framework 0x0085afba 0x67000 + 8339386
9 com.google.Chrome.framework 0x00886cf1 0x67000 + 8518897
10 com.google.Chrome.framework 0x00886dd0 0x67000 + 8519120
11 com.google.Chrome.framework 0x00882d85 0x67000 + 8502661
12 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
13 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
14 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 17:: NetworkConfigWatcher
0 libsystem_kernel.dylib 0x97366f7a mach_msg_trap + 10
1 libsystem_kernel.dylib 0x9736616c mach_msg + 68
2 com.apple.CoreFoundation 0x952f4f69 __CFRunLoopServiceMachPort + 169
3 com.apple.CoreFoundation 0x952f4541 __CFRunLoopRun + 1393
4 com.apple.CoreFoundation 0x952f3d5a CFRunLoopRunSpecific + 394
5 com.apple.CoreFoundation 0x952f3bbb CFRunLoopRunInMode + 123
6 com.apple.Foundation 0x94e97319 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 277
7 com.google.Chrome.framework 0x00818e2f 0x67000 + 8068655
8 com.google.Chrome.framework 0x0081890c 0x67000 + 8067340
9 com.google.Chrome.framework 0x0085b231 0x67000 + 8340017
10 com.google.Chrome.framework 0x00871a11 0x67000 + 8432145
11 com.google.Chrome.framework 0x0085afba 0x67000 + 8339386
12 com.google.Chrome.framework 0x00886cf1 0x67000 + 8518897
13 com.google.Chrome.framework 0x00886dd0 0x67000 + 8519120
14 com.google.Chrome.framework 0x00882d85 0x67000 + 8502661
15 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
16 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
17 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 18:: BrowserBlockingWorker1/36867
0 libsystem_kernel.dylib 0x9736b7ca __psynch_cvwait + 10
1 libsystem_pthread.dylib 0x918f6d1d _pthread_cond_wait + 728
2 libsystem_pthread.dylib 0x918f8bd9 pthread_cond_wait$UNIX2003 + 71
3 com.google.Chrome.framework 0x0087eb78 0x67000 + 8485752
4 com.google.Chrome.framework 0x00883ebb 0x67000 + 8507067
5 com.google.Chrome.framework 0x0088338d 0x67000 + 8504205
6 com.google.Chrome.framework 0x00886463 0x67000 + 8516707
7 com.google.Chrome.framework 0x00882d85 0x67000 + 8502661
8 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
9 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
10 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 19:: BrowserWatchdog
0 libsystem_kernel.dylib 0x9736b7ca __psynch_cvwait + 10
1 libsystem_pthread.dylib 0x918f6d8a _pthread_cond_wait + 837
2 libsystem_pthread.dylib 0x918f7042 pthread_cond_timedwait_relative_np + 47
3 com.google.Chrome.framework 0x0087ebf5 0x67000 + 8485877
4 com.google.Chrome.framework 0x0087f058 0x67000 + 8487000
5 com.google.Chrome.framework 0x0085e383 0x67000 + 8352643
6 com.google.Chrome.framework 0x0085b231 0x67000 + 8340017
7 com.google.Chrome.framework 0x00871a11 0x67000 + 8432145
8 com.google.Chrome.framework 0x0085afba 0x67000 + 8339386
9 com.google.Chrome.framework 0x00886cf1 0x67000 + 8518897
10 com.google.Chrome.framework 0x00886dd0 0x67000 + 8519120
11 com.google.Chrome.framework 0x00882d85 0x67000 + 8502661
12 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
13 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
14 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 20:: Proxy resolver
0 libsystem_kernel.dylib 0x9736b7ca __psynch_cvwait + 10
1 libsystem_pthread.dylib 0x918f6d1d _pthread_cond_wait + 728
2 libsystem_pthread.dylib 0x918f8bd9 pthread_cond_wait$UNIX2003 + 71
3 com.google.Chrome.framework 0x0087eb78 0x67000 + 8485752
4 com.google.Chrome.framework 0x0087f07b 0x67000 + 8487035
5 com.google.Chrome.framework 0x0087ef06 0x67000 + 8486662
6 com.google.Chrome.framework 0x0085e347 0x67000 + 8352583
7 com.google.Chrome.framework 0x0085b231 0x67000 + 8340017
8 com.google.Chrome.framework 0x00871a11 0x67000 + 8432145
9 com.google.Chrome.framework 0x0085afba 0x67000 + 8339386
10 com.google.Chrome.framework 0x00886cf1 0x67000 + 8518897
11 com.google.Chrome.framework 0x00886dd0 0x67000 + 8519120
12 com.google.Chrome.framework 0x00882d85 0x67000 + 8502661
13 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
14 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
15 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 21:: MediaStreamDeviceThread
0 libsystem_kernel.dylib 0x9736b7ca __psynch_cvwait + 10
1 libsystem_pthread.dylib 0x918f6d1d _pthread_cond_wait + 728
2 libsystem_pthread.dylib 0x918f8bd9 pthread_cond_wait$UNIX2003 + 71
3 com.google.Chrome.framework 0x0087eb78 0x67000 + 8485752
4 com.google.Chrome.framework 0x0087f07b 0x67000 + 8487035
5 com.google.Chrome.framework 0x0087ef06 0x67000 + 8486662
6 com.google.Chrome.framework 0x0085e347 0x67000 + 8352583
7 com.google.Chrome.framework 0x0085b231 0x67000 + 8340017
8 com.google.Chrome.framework 0x00871a11 0x67000 + 8432145
9 com.google.Chrome.framework 0x0085afba 0x67000 + 8339386
10 com.google.Chrome.framework 0x00886cf1 0x67000 + 8518897
11 com.google.Chrome.framework 0x00886dd0 0x67000 + 8519120
12 com.google.Chrome.framework 0x00882d85 0x67000 + 8502661
13 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
14 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
15 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 22:
0 libsystem_kernel.dylib 0x97366f7a mach_msg_trap + 10
1 libsystem_kernel.dylib 0x9736616c mach_msg + 68
2 com.google.Chrome.framework 0x032c2f30 0x67000 + 52805424
3 com.google.Chrome.framework 0x00882d85 0x67000 + 8502661
4 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
5 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
6 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 23:: NetworkConfigWatcher
0 libsystem_kernel.dylib 0x97366f7a mach_msg_trap + 10
1 libsystem_kernel.dylib 0x9736616c mach_msg + 68
2 com.apple.CoreFoundation 0x952f4f69 __CFRunLoopServiceMachPort + 169
3 com.apple.CoreFoundation 0x952f4541 __CFRunLoopRun + 1393
4 com.apple.CoreFoundation 0x952f3d5a CFRunLoopRunSpecific + 394
5 com.apple.CoreFoundation 0x952f3bbb CFRunLoopRunInMode + 123
6 com.apple.Foundation 0x94e97319 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 277
7 com.google.Chrome.framework 0x00818e2f 0x67000 + 8068655
8 com.google.Chrome.framework 0x0081890c 0x67000 + 8067340
9 com.google.Chrome.framework 0x0085b231 0x67000 + 8340017
10 com.google.Chrome.framework 0x00871a11 0x67000 + 8432145
11 com.google.Chrome.framework 0x0085afba 0x67000 + 8339386
12 com.google.Chrome.framework 0x00886cf1 0x67000 + 8518897
13 com.google.Chrome.framework 0x00886dd0 0x67000 + 8519120
14 com.google.Chrome.framework 0x00882d85 0x67000 + 8502661
15 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
16 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
17 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 24:: WorkerPool/41731
0 libsystem_kernel.dylib 0x9736b7ca __psynch_cvwait + 10
1 libsystem_pthread.dylib 0x918f6d8a _pthread_cond_wait + 837
2 libsystem_pthread.dylib 0x918f7042 pthread_cond_timedwait_relative_np + 47
3 com.google.Chrome.framework 0x0087ebf5 0x67000 + 8485877
4 com.google.Chrome.framework 0x00889851 0x67000 + 8530001
5 com.google.Chrome.framework 0x00889d8a 0x67000 + 8531338
6 com.google.Chrome.framework 0x00882d85 0x67000 + 8502661
7 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
8 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
9 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 25:: Proxy resolver
0 libsystem_kernel.dylib 0x9736b7ca __psynch_cvwait + 10
1 libsystem_pthread.dylib 0x918f6d1d _pthread_cond_wait + 728
2 libsystem_pthread.dylib 0x918f8bd9 pthread_cond_wait$UNIX2003 + 71
3 com.google.Chrome.framework 0x0087eb78 0x67000 + 8485752
4 com.google.Chrome.framework 0x0087f07b 0x67000 + 8487035
5 com.google.Chrome.framework 0x0087ef06 0x67000 + 8486662
6 com.google.Chrome.framework 0x0085e347 0x67000 + 8352583
7 com.google.Chrome.framework 0x0085b231 0x67000 + 8340017
8 com.google.Chrome.framework 0x00871a11 0x67000 + 8432145
9 com.google.Chrome.framework 0x0085afba 0x67000 + 8339386
10 com.google.Chrome.framework 0x00886cf1 0x67000 + 8518897
11 com.google.Chrome.framework 0x00886dd0 0x67000 + 8519120
12 com.google.Chrome.framework 0x00882d85 0x67000 + 8502661
13 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
14 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
15 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 26:: Chrome_SafeBrowsingThread
0 libsystem_kernel.dylib 0x9736b7ca __psynch_cvwait + 10
1 libsystem_pthread.dylib 0x918f6d1d _pthread_cond_wait + 728
2 libsystem_pthread.dylib 0x918f8bd9 pthread_cond_wait$UNIX2003 + 71
3 com.google.Chrome.framework 0x0087eb78 0x67000 + 8485752
4 com.google.Chrome.framework 0x0087f07b 0x67000 + 8487035
5 com.google.Chrome.framework 0x0087ef06 0x67000 + 8486662
6 com.google.Chrome.framework 0x0085e347 0x67000 + 8352583
7 com.google.Chrome.framework 0x0085b231 0x67000 + 8340017
8 com.google.Chrome.framework 0x00871a11 0x67000 + 8432145
9 com.google.Chrome.framework 0x0085afba 0x67000 + 8339386
10 com.google.Chrome.framework 0x00886cf1 0x67000 + 8518897
11 com.google.Chrome.framework 0x00886dd0 0x67000 + 8519120
12 com.google.Chrome.framework 0x00882d85 0x67000 + 8502661
13 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
14 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
15 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 27:: Startup watchdog thread Watchdog
0 libsystem_kernel.dylib 0x9736b7ca __psynch_cvwait + 10
1 libsystem_pthread.dylib 0x918f6d8a _pthread_cond_wait + 837
2 libsystem_pthread.dylib 0x918f7042 pthread_cond_timedwait_relative_np + 47
3 com.google.Chrome.framework 0x0087ebf5 0x67000 + 8485877
4 com.google.Chrome.framework 0x00888ec4 0x67000 + 8527556
5 com.google.Chrome.framework 0x00882d85 0x67000 + 8502661
6 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
7 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
8 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 28:: BrowserBlockingWorker2/44547
0 libsystem_kernel.dylib 0x9736b7ca __psynch_cvwait + 10
1 libsystem_pthread.dylib 0x918f6d1d _pthread_cond_wait + 728
2 libsystem_pthread.dylib 0x918f8bd9 pthread_cond_wait$UNIX2003 + 71
3 com.google.Chrome.framework 0x0087eb78 0x67000 + 8485752
4 com.google.Chrome.framework 0x00883ebb 0x67000 + 8507067
5 com.google.Chrome.framework 0x0088338d 0x67000 + 8504205
6 com.google.Chrome.framework 0x00886463 0x67000 + 8516707
7 com.google.Chrome.framework 0x00882d85 0x67000 + 8502661
8 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
9 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
10 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 29:: BrowserBlockingWorker3/44803
0 libsystem_kernel.dylib 0x9736b7ca __psynch_cvwait + 10
1 libsystem_pthread.dylib 0x918f6d1d _pthread_cond_wait + 728
2 libsystem_pthread.dylib 0x918f8bd9 pthread_cond_wait$UNIX2003 + 71
3 com.google.Chrome.framework 0x0087eb78 0x67000 + 8485752
4 com.google.Chrome.framework 0x00883ebb 0x67000 + 8507067
5 com.google.Chrome.framework 0x0088338d 0x67000 + 8504205
6 com.google.Chrome.framework 0x00886463 0x67000 + 8516707
7 com.google.Chrome.framework 0x00882d85 0x67000 + 8502661
8 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
9 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
10 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 30:
0 libsystem_kernel.dylib 0x97366f7a mach_msg_trap + 10
1 libsystem_kernel.dylib 0x9736616c mach_msg + 68
2 com.apple.CoreFoundation 0x952f4f69 __CFRunLoopServiceMachPort + 169
3 com.apple.CoreFoundation 0x952f4541 __CFRunLoopRun + 1393
4 com.apple.CoreFoundation 0x952f3d5a CFRunLoopRunSpecific + 394
5 com.apple.CoreFoundation 0x952f3bbb CFRunLoopRunInMode + 123
6 com.apple.AppKit 0x90583f18 _NSEventThread + 283
7 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
8 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
9 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 31:: Chrome_HistoryThread
0 libsystem_kernel.dylib 0x9736b7ca __psynch_cvwait + 10
1 libsystem_pthread.dylib 0x918f6d8a _pthread_cond_wait + 837
2 libsystem_pthread.dylib 0x918f7042 pthread_cond_timedwait_relative_np + 47
3 com.google.Chrome.framework 0x0087ebf5 0x67000 + 8485877
4 com.google.Chrome.framework 0x0087f058 0x67000 + 8487000
5 com.google.Chrome.framework 0x0085e383 0x67000 + 8352643
6 com.google.Chrome.framework 0x0085b231 0x67000 + 8340017
7 com.google.Chrome.framework 0x00871a11 0x67000 + 8432145
8 com.google.Chrome.framework 0x0085afba 0x67000 + 8339386
9 com.google.Chrome.framework 0x00886cf1 0x67000 + 8518897
10 com.google.Chrome.framework 0x00886dd0 0x67000 + 8519120
11 com.google.Chrome.framework 0x00882d85 0x67000 + 8502661
12 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
13 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
14 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 32:: WorkerPool/83971
0 libsystem_kernel.dylib 0x9736b7ca __psynch_cvwait + 10
1 libsystem_pthread.dylib 0x918f6d8a _pthread_cond_wait + 837
2 libsystem_pthread.dylib 0x918f7042 pthread_cond_timedwait_relative_np + 47
3 com.google.Chrome.framework 0x0087ebf5 0x67000 + 8485877
4 com.google.Chrome.framework 0x00889851 0x67000 + 8530001
5 com.google.Chrome.framework 0x00889d8a 0x67000 + 8531338
6 com.google.Chrome.framework 0x00882d85 0x67000 + 8502661
7 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
8 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
9 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 33:: CachePoolWorker1/93211
0 libsystem_kernel.dylib 0x9736b7ca __psynch_cvwait + 10
1 libsystem_pthread.dylib 0x918f6d1d _pthread_cond_wait + 728
2 libsystem_pthread.dylib 0x918f8bd9 pthread_cond_wait$UNIX2003 + 71
3 com.google.Chrome.framework 0x0087eb78 0x67000 + 8485752
4 com.google.Chrome.framework 0x00883ebb 0x67000 + 8507067
5 com.google.Chrome.framework 0x0088338d 0x67000 + 8504205
6 com.google.Chrome.framework 0x00886463 0x67000 + 8516707
7 com.google.Chrome.framework 0x00882d85 0x67000 + 8502661
8 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
9 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
10 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 34:: CachePoolWorker2/98819
0 libsystem_kernel.dylib 0x9736b7ca __psynch_cvwait + 10
1 libsystem_pthread.dylib 0x918f6d1d _pthread_cond_wait + 728
2 libsystem_pthread.dylib 0x918f8bd9 pthread_cond_wait$UNIX2003 + 71
3 com.google.Chrome.framework 0x0087eb78 0x67000 + 8485752
4 com.google.Chrome.framework 0x00883ebb 0x67000 + 8507067
5 com.google.Chrome.framework 0x0088338d 0x67000 + 8504205
6 com.google.Chrome.framework 0x00886463 0x67000 + 8516707
7 com.google.Chrome.framework 0x00882d85 0x67000 + 8502661
8 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
9 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
10 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 35:: CachePoolWorker3/84491
0 libsystem_kernel.dylib 0x9736b7ca __psynch_cvwait + 10
1 libsystem_pthread.dylib 0x918f6d1d _pthread_cond_wait + 728
2 libsystem_pthread.dylib 0x918f8bd9 pthread_cond_wait$UNIX2003 + 71
3 com.google.Chrome.framework 0x0087eb78 0x67000 + 8485752
4 com.google.Chrome.framework 0x00883ebb 0x67000 + 8507067
5 com.google.Chrome.framework 0x0088338d 0x67000 + 8504205
6 com.google.Chrome.framework 0x00886463 0x67000 + 8516707
7 com.google.Chrome.framework 0x00882d85 0x67000 + 8502661
8 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
9 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
10 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 36:
0 libsystem_kernel.dylib 0x9736bb76 __semwait_signal + 10
1 libsystem_c.dylib 0x95e6305b nanosleep$UNIX2003 + 219
2 libsystem_c.dylib 0x95e62f06 usleep$UNIX2003 + 60
3 com.apple.CoreMediaIO 0x94cabe19 CMIOGraph::OneOrMoreInputUnitsAreReadyToBePulled(bool&) + 701
4 com.apple.CoreMediaIO 0x94cac7da CMIOGraph::DoWork(unsigned long) + 206
5 com.apple.CoreMediaIO 0x94caf5d7 CMIO::Thread::QueuedTWorkThread::DoWork() + 119
6 com.apple.CoreMediaIO 0x94cb9e10 CMIO::Thread::SignaledThread::ThreadLoop() + 150
7 com.apple.CoreMediaIO 0x94cb9d5d CMIO::Thread::SignaledThread::WorkQueuedThreadCallback(void*) + 175
8 com.apple.CoreMedia 0x921b845f figThreadMain + 483
9 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
10 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
11 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 37:
0 libsystem_kernel.dylib 0x97366f7a mach_msg_trap + 10
1 libsystem_kernel.dylib 0x9736616c mach_msg + 68
2 com.apple.CoreFoundation 0x952f4f69 __CFRunLoopServiceMachPort + 169
3 com.apple.CoreFoundation 0x952f4541 __CFRunLoopRun + 1393
4 com.apple.CoreFoundation 0x952f3d5a CFRunLoopRunSpecific + 394
5 com.apple.CoreFoundation 0x953b6461 CFRunLoopRun + 129
6 com.apple.cmio.DAL.VDC-4 0x12ce14e3 0x12cda000 + 29923
7 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
8 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
9 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 38 Crashed:: QTKit: QTBackgroundQueueRun
0 com.google.Chrome.framework 0x02e75d19 0x67000 + 48295193
1 com.google.Chrome.framework 0x02e68306 0x67000 + 48239366
2 com.google.Chrome.framework 0x02e6c3a4 0x67000 + 48255908
3 com.google.Chrome.framework 0x0331a90f 0x67000 + 53164303
4 com.google.Chrome.framework 0x0156fd71 0x67000 + 22056305
5 com.google.Chrome.framework 0x01570d73 0x67000 + 22060403
6 com.apple.QTKit 0x9aa29431 -[QTCaptureDecompressedVideoOutput outputVideoFrame:withSampleBuffer:fromConnection:] + 113
7 com.apple.QTKit 0x9aa2939a -[QTCaptureDecompressedVideoOutput outputVideoFrame:withSampleBuffer:fromConnection:] + 57
8 com.apple.CoreFoundation 0x952b9f5d invoking + 29
9 com.apple.CoreFoundation 0x952b9e2b -[NSInvocation invoke] + 315
10 com.apple.QTKit 0x9aa2916f QTBackgroundQueueRun + 454
11 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
12 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
13 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 39:: CVDisplayLink
0 libsystem_kernel.dylib 0x9736b7ca __psynch_cvwait + 10
1 libsystem_pthread.dylib 0x918f6d8a _pthread_cond_wait + 837
2 libsystem_pthread.dylib 0x918f7042 pthread_cond_timedwait_relative_np + 47
3 com.apple.CoreVideo 0x9750933d CVDisplayLink::waitUntil(unsigned long long) + 287
4 com.apple.CoreVideo 0x9750842e CVDisplayLink::runIOThread() + 662
5 com.apple.CoreVideo 0x97508180 startIOThread(void*) + 159
6 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
7 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
8 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 40:: PowerSaveBlocker
0 libsystem_kernel.dylib 0x9736b7ca __psynch_cvwait + 10
1 libsystem_pthread.dylib 0x918f6d1d _pthread_cond_wait + 728
2 libsystem_pthread.dylib 0x918f8bd9 pthread_cond_wait$UNIX2003 + 71
3 com.google.Chrome.framework 0x0087eb78 0x67000 + 8485752
4 com.google.Chrome.framework 0x0087f07b 0x67000 + 8487035
5 com.google.Chrome.framework 0x0087ef06 0x67000 + 8486662
6 com.google.Chrome.framework 0x0085e347 0x67000 + 8352583
7 com.google.Chrome.framework 0x0085b231 0x67000 + 8340017
8 com.google.Chrome.framework 0x00871a11 0x67000 + 8432145
9 com.google.Chrome.framework 0x0085afba 0x67000 + 8339386
10 com.google.Chrome.framework 0x00886cf1 0x67000 + 8518897
11 com.google.Chrome.framework 0x00886dd0 0x67000 + 8519120
12 com.google.Chrome.framework 0x00882d85 0x67000 + 8502661
13 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
14 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
15 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 41:: com.apple.audio.IOThread.client
0 libsystem_kernel.dylib 0x97366f7a mach_msg_trap + 10
1 libsystem_kernel.dylib 0x9736616c mach_msg + 68
2 com.apple.audio.CoreAudio 0x9afd2e9a HALB_MachPort::SendMessageWithReply(unsigned int, unsigned int, unsigned long, unsigned long, mach_msg_header_t_, bool, unsigned int) + 138
3 com.apple.audio.CoreAudio 0x9afcd34e HALB_MachPort::SendSimpleMessageWithSimpleReply(unsigned int, unsigned int, int, int&, bool, unsigned int) + 68
4 com.apple.audio.CoreAudio 0x9afcbb27 HALC_ProxyIOContext::IOWorkLoop() + 1111
5 com.apple.audio.CoreAudio 0x9afcb5ff HALC_ProxyIOContext::IOThreadEntry(void_) + 167
6 com.apple.audio.CoreAudio 0x9afd5f52 ___ZN19HALC_ProxyIOContextC2Emj_block_invoke + 20
7 com.apple.audio.CoreAudio 0x9afcb4fb HALB_IOThread::Entry(void*) + 69
8 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
9 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
10 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 42:: com.apple.audio.IOThread.client
0 libsystem_kernel.dylib 0x97366f7a mach_msg_trap + 10
1 libsystem_kernel.dylib 0x9736616c mach_msg + 68
2 com.apple.audio.CoreAudio 0x9afd2e9a HALB_MachPort::SendMessageWithReply(unsigned int, unsigned int, unsigned long, unsigned long, mach_msg_header_t_, bool, unsigned int) + 138
3 com.apple.audio.CoreAudio 0x9afcd34e HALB_MachPort::SendSimpleMessageWithSimpleReply(unsigned int, unsigned int, int, int&, bool, unsigned int) + 68
4 com.apple.audio.CoreAudio 0x9afcbb27 HALC_ProxyIOContext::IOWorkLoop() + 1111
5 com.apple.audio.CoreAudio 0x9afcb5ff HALC_ProxyIOContext::IOThreadEntry(void_) + 167
6 com.apple.audio.CoreAudio 0x9afd5f52 ___ZN19HALC_ProxyIOContextC2Emj_block_invoke + 20
7 com.apple.audio.CoreAudio 0x9afcb4fb HALB_IOThread::Entry(void*) + 69
8 libsystem_pthread.dylib 0x918f45fb _pthread_body + 144
9 libsystem_pthread.dylib 0x918f4485 _pthread_start + 130
10 libsystem_pthread.dylib 0x918f9cf2 thread_start + 34
Thread 38 crashed with X86 Thread State (32-bit):
eax: 0x00000a00 ebx: 0x107f9000 ecx: 0x107f9600 edx: 0x10921d80
edi: 0x00000200 esi: 0x00038400 ebp: 0xbbf7cb88 esp: 0xbbf7cb80
ss: 0x00000023 efl: 0x00010206 eip: 0x02e75d19 cs: 0x0000001b
ds: 0x00000023 es: 0x00000023 fs: 0x00000023 gs: 0x0000000f
cr2: 0x107fa000
Logical CPU: 1
Error Code: 0x00000004
Trap Number: 14
Struggling to identify the root cause at this stage, but tests are failing on firefox atm. Need to grab a block of time (probably a couple of days) to dig in and look into what is going on.
Might also be a good time to investigate whether smokestack is a better choice that testling.
Can createDataChannel() have an optional parameter, targetId, to request a new data channel to just one other participant in the call and not to all as is the current default? It would seem you can do this now by simply calling requestChannel on just one other participant but this would leave extra state on the master end as it attempts to finish connections with other end points that do not want (or know about) the connection.
Configuration for zuul has been done so we can start to perform CI on quickconnect.
At the present moment, quickconnect does not wait for plugin initialization before announcing to the signalling server. This in turn can create issues where a peer connection might be created prior to the peer connection being ready.
We should update the checkReadyToAnnounce
function to also check if we have a plugin applied, and if so, wait for initialization prior to announcing.
Hi @DamonOehlman ! Got your ping from webrtcftw/goals#8 (comment), this looks very interesting indeed, thank you!
If I understand correctly, I could replace the testling
for piri-piri
* but I would still need to spawn several browsers in one travis-ci run. If also I understand correctly, what the 'matrix' property in travis-ci.yml does is running through the tests for each browser you selected (not all at the same time), right?
Do you have any idea of how to spawn several browsers in one run? Even tabs would be fine :)
piri-piri
is just a testing hack I did in order to aggregate the state of all the peers and do my inferences (tests) on the server sideTo prevent potential race conditions when multiple calls are connecting/disconnecting, change this https://github.com/rtc-io/rtc-quickconnect/blob/master/lib/calls.js#L116 from being a shared heartbeat checker to a heartbeat checker per connection.
It really isn't that helpful, and could be added to another simple lightweight module:
https://github.com/rtc-io/rtc-quickconnect/blob/master/index.js#L508-L516
Hi Damon,
Is there a way to update new iceServers details to a quickconnect call in progress?
We are trying a time based TURN server authentication mechanism. If a call goes longer than certain period, I need to update iceServers
so that any new caller joining the call connects without TURN issues.
Would it be possible to provide a simple method to update iceServers
?
Thanks,
Raj
The local:announce
event is currently emitted by quickconnect, but this should in fact be emitted at the rtc-signaller level for maximum usefulness.
The options in quickconnect can contain an sdpfilter like so:
{
room: channelId,
iceServers: config.connection.iceServers,
sdpfilter: function(sdp) {
console.log('filtering sdp');
return limitBandwidthSDP(sdp);
}
}
Should be documented (maybe even add to the book)
There is a race condition when you try to create a peer connection that does video and data channel. You might end up with one side having a data channel, but the return side doesn't.
I have a feeling that
quickconnect('http://rtc.io/switchboard/', { ns: 'conftest' })
.createDataChannel('chat')
.broadcast(stream)
works better than
quickconnect('http://rtc.io/switchboard/', { ns: 'conftest' })
.broadcast(stream)
.createDataChannel('chat')
but I still think that sometimes broadcast(stream) is faster than the data channel creation and thus you end up with a peer connection that doesn't have a data channel.
Hi Damon,
As you might be aware of next chrome version bring major changes to webrtc api -
https://groups.google.com/forum/#!msg/discuss-webrtc/mrLyXc6Y464/sxuFb-qb4u0J
So far, we have made couple of test calls between chrome 43 (stable) and chrome 44 (beta) . It looks good so far.
Are you aware of any impact of this chrome release on rtc.io ?
Are there any tests you can think of that we can run in order to be better prepared for Chrome 44?
Thanks,
Raj
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.