webrtc / apprtc Goto Github PK
View Code? Open in Web Editor NEWappr.tc has been shutdown. Please use the Dockerfile to run your own test/dev instance.
License: BSD 3-Clause "New" or "Revised" License
appr.tc has been shutdown. Please use the Dockerfile to run your own test/dev instance.
License: BSD 3-Clause "New" or "Revised" License
samdutton commented on Nov 18, 2014
Page Speed Insights suggests a few fairly simple changes for apprtc.appspot.com.
We should implement these fixes.
From juberti's last comment in webrtc/samples#315 (comment):
#362 moves params.html to the /html subdir, which is already publicly served. But perhaps we should just update app.yaml to route requests for help.html and params.html to the /html subdir (and move all the html files there)
We need a way to get Collider logs without ssh-ing into the VM instance.
The stylesheet uri in params.html is 404, presumably due to the recent moves. I'm not sure what the right value is:
https://googlechrome.github.io/webrtc/samples/web/css/main.css
Hello,
I know this is the wrong place to put this but I'm not sure where to put this.
I was using apprtc.appspot.com/r/### for a project of mine, but now that the Join button has been added it no longer functions for me. I have created my own local google dev server and have it running with the modified parameter, but https is the issue. I was wondering if it was possible to clone the apprtc project in the google cloud platform and run it on my own ???.appspot.com. I know that it is possible, but I have no idea how to go about doing it.
Using the project ID in analytics.py results in 'project not found' on cloud server.
I tried using hard coded project number and it fixed the problem. But we need a way to get the project number programmatically.
When you enter a room and no one else has joined, or if the remote side hangs up, there is no way to get back to the landing page. (You can hit back in a browser, but not in the Chrome App)
jiayliu commented 5 days ago
There is a shortcut key 'q' to hangup while waiting, but we probably should make it a visible UI element.
I don't think this is needed for AppRTC.
marwahvikas commented on May 29, 2014
Moving issue 1380 (https://code.google.com/p/webrtc/issues/detail?id=1380) to github.
mainly the functions makePostRequest
and makeGetRequest
are the same among all unittests.
I don't want to take this too far though. IMO having each test class define its own setUp
and tearDown
functions is the right approach even if it repeats code.
Our implementation of Promise in testpolyfills doesn't chain promises. I ran into this error a while back and had to restructure the app code so unit tests would pass. I didn't realize what the cause was until now.
Example code that won't work:
var p = new MyPromise(function(resolve, reject) {
console.log('starting timer');
setTimeout(function() { resolve('a'); }, 2000);
});
p.then(function(v) {
console.log(v);
return 'b';
}).then(function(s) {
console.log(s);
})
Only the last .then will be used because .then always returns the same promise, it should return a new promise or keep a list of deferred promises.
It might be simpler to see if we can use one of the existing promise polyfills.
juberti commented on Sep 16, 2014
I would like to be able to automatically push master to AppRTC prod, instead of having to use appcfg.
See https://developers.google.com/cloud/devtools/repo/push-to-deploy.
Vikas Marwahamarwahvikas was assigned by juberti on Sep 16, 2014
Vikas Marwaha
Owner
marwahvikas commented on Sep 16, 2014
Okay will start looking into it.
Justin Ubertijuberti added the apprtc label on Oct 16, 2014
Vikas Marwahamarwahvikas removed their assignment on Oct 28, 2014
Sam Duttonsamdutton was assigned by marwahvikas on Oct 28, 2014
Vikas Marwaha
Owner
marwahvikas commented on Oct 28, 2014
Hi Justin/Sam
So in apprtc i have setup a release pipeline. I have connected the apprtc project in google developer console to the github webrtc project. See here :-
https://console.developers.google.com/project/apprtc/clouddev/pipelines?authuser=0
Now if i understand correctly it should trigger the release pipeline if we push anything to master.
As per the doc(https://cloud.google.com/tools/repo/push-to-deploy) :
If you are pushing to the repository via a repository on GitHub, use the following:
git push 'remote' master
where 'remote' is the remote name for the repository on GitHub.
I have not tested if the release pipeline is actually working. Do you guys want to give it a try?
/Vikas
Sam Dutton
Owner
samdutton commented on Oct 29, 2014
Excellent! This seems like a very sensible way to deploy apprtc.
…
André Susano Pinto
Owner
andresusanopinto commented on Oct 29, 2014
This seems to use a different mechanism than the app-engine push to deploy. Would it be possible to set up a release pipeline for test-rtc as well?
Vikas Marwaha
Owner
marwahvikas commented on Oct 29, 2014
hi andre, thats right. Do we have test-rtc as a project in google developer's console? https://console.developers.google.com/project?authuser=0
The background window in the chrome app should have it's own closure compiled file, as it doesn't need all of the sources that app window does.
Ported from webrtc/samples#457
If you leave and then rejoin a room via the 'rejoin' button, the toolbar buttons never show up.
chuckhays commented 6 hours ago
This was the result merging two features working in the same area. PR #432 refactored code in a way that no longer worked in the way assumed by #424.
The old version of apprtc (prior the big UI re-design including the join button) joined directly and some depend on this.
Would it be possible to add an URL parameter "?autojoin=true" that mimic's the old behavior?
Not sure if this has been requested before but I think it makes sense to add device selection via JS saving the user from reloading the tab in order to change device.
samdutton commented 15 days ago
There was some discussion of this apropos of #311: the decision was to handle this in a separate PR.
Maybe should wait until RtpSender.replaceTrack() is implemented, though could do a short term hack (to handle the change of device at the 'other end' of the call)?
@juberti
Justin Uberti
Owner
juberti commented 14 days ago
The short-term way to do this is to do SDP munging to change the MSID on the local description. But it might just be easiest to wait for replaceTrack; we're trying to get to that this quarter.
Sam Dutton
Owner
samdutton commented 14 days ago
I agree: let's wait.
…
Christoffer Jansson
Owner
KaptenJansson commented 9 days ago
Also, it would be nice if this could be added to the new landing page as well, maybe as a first step as then you would not need to handle renegotiation etc.
Dear All,
I am able to deploy and run apprtc on a local server. However i cannot get the video conference working as page displays saying "No Turn servers" . I have tried installing and running rfc5766-turn-server on the local server, but i am not very sure as how to go about integrating TURN server running on the local machine with apprtc. I do notice that there is constants.py file in the SRC folder which needs to be modified to point to the new TURN URL ( running on the localmachine ). I have tried changing the URL but still end up with the "No TURN server" message.
When i run a check on all the running processes on the local server i do notice that the TURN server is running, but when i run the turn-prober.sh in the tools directory, the result is empty( no output). Does the script need any change.
KIndly help.
the client_type in the analytics module is not converted to a string. this causes the bigquery request to fail.
Quoth https://github.com/GoogleChrome/webrtc/blob/master/samples/web/content/apprtc/apprtc.py#L395
debug = self.request.get('debug')
if debug == 'loopback':
dtls = 'false'
Indeed, failing to disable DTLS causes errors like:
Error(transport.cc:101): Answerer must use either active or passive value for setup attribute.
Since SDES is eventually going to disappear in favor of DTLS we should make sure loopback calls work with DTLS as well. The answer is probably to set up a second PeerConnection on the same page.
Once the JS version is updated the same should be done for the Android & iOS sample apps.
KaptenJansson commented on Nov 17, 2014
The URL param Stereo=true does not enable stereo all the way (just sets the stereo=1 in the SDP) in chrome unless echoCancellation=false is sent in as an optional gUM constraint.
This is due to the APM does not handle stereo hence it's down-mixed to mono.
The URL params &stereo=true, audio=echoCancellation=false will result in stereo.
If the intention of stereo=true is to enable proper stereo (not just setting the SDP attribute) it should also pass the audio=echoCancellation=false gum constraint.
juberti commented 15 days ago
Is AEC the only thing that doesn't tolerate stereo? Or does all APM processing have to be disabled? @KaptenJansson can you check with Tina?
Christoffer Jansson
Owner
KaptenJansson commented 14 days ago
I believe the APM converts to mono before processing the audio hence it
affects all processing. But I will double check with Tina.
…
See the original issue for full comment thread.
This is waiting for designer's input for now.
We now have a second Collider instance running: apprtc-ws-2.webrtc.org
GAE should track which Collider instances are up and return the url a working instance to the client.
E.g. the prober writes to memcache key "colliderStatus" which has a boolean status for each instance. Join request handler picks a running Collider instance for the room on room creation, and save the instance with the room data in memcache, so that clients in the same room get the same Collider.
Since index.html is under app_engine, the other app files should move there too.
jiayliu commented on Nov 21, 2014
There is no heartbeat or ping in the go.net WebSocket impl, so the WebSocket server cannot detect connection drop in some situations, e.g. user network down.
We can switch to a different WebSocket library that supports ping like https://github.com/gorilla/websocket, or implement our own application level ping.
Ported from webrtc/samples#461
It would be nice if hitting enter after entering the room name on the apprtc landing page would join the room.
Something like this
samdutton commented on Dec 4, 2014
For example, to record numbers for those who, having navigated to apprtc.appspot.com:
• call gUM
• request a connection
• get a connection
• get errors
...
Could also add events for icon/button clicks on AppRTC and other demos.
Justin Ubertijuberti added the apprtc label on Dec 4, 2014
Philipp Hancke
fippo commented on Dec 5, 2014
FWIW, here is the list of events we use for talky with a short description.
videoConnected (calls) in remotestreamadded; type (video/screen)
videoDisconnected in remotestreamremoved I think. Called only about 50% of the time since browser is closed
iceConnected (calls, really connected) candidatePair, whether ipv6 is used, whether a local/remote IPv6 candidate is available, setup time (measured from checking->connected)
iceFailed cause (called with a 30s timeout sometimes), local/remote turn/ipv6 candidate availability
localMedia (GUM success)
localMediaError (GUM failure) name (error code)
shareScreen
mute / unmute with media type (audio/video)
Philipp Hanckefippo referenced this issue on Dec 6, 2014
Open
figure out the local type preference of the active candidate #281
Sam Dutton
Owner
samdutton commented on Dec 8, 2014
Thanks Philipp – that's really useful.
…
Varun Singh
vr000m commented 25 days ago
In addition to those listed above we have:
iceDisconnected: if the interface disappears. If iceConnected again on the same or a different candidate pair, then we can pair disconnections and connections to calculate connectivity disruptions.
There are 2 issues.
If you close the app window, no bye message is sent, because onbeforeunload is not available in Chrome Apps
Sync xhr is not available in Chrome apps, so even when you hit hangup, the messages don't get sent.
I started working on these but it isn't as simple as changing the xhr to async, because there is a specific ordering we need, and we need to finish the work before the window closes. I'll continue to work on a fix.
Jiayang Liu
Owner
jiayliu commented 6 days ago
Is there a solution for the first issue?
…
Chuck Hays
Owner
chuckhays commented 6 days ago
The background.js file can detect when the window closes, and can do the cleanup. This is how it can be hooked up:
chuckhays/apprtc@e1a48f5
The next step is to re-arrange things so the needed context is still available. Chrome starts disposing objects that we still need in order to make the ending calls.
The data types of the data sent from the client should be validated before getting to the analytics module.
jiayliu commented on Nov 21, 2014
When the connection is temporarily interrupted, the client should initiate ICE restart and reconnect to the signalling server.
We need to invoke grunt build on Windows to run the AppRTC test. Unfortunately grunt build ends up calling bash scripts, which fail badly on Windows:
Running "shell:buildVersion" (shell) task
'.' is not recognized as an internal or external command,
operable program or batch file.
Warning: Command failed: '.' is not recognized as an internal or external command,
operable program or batch file.
Please rewrite as python scripts.
phoglund commented 6 hours ago
I reverted the analytics change for now.
When bringing up the server on the bots after the analytics change:
INFO 2015-02-04 09:56:16,612 devappserver2.py:557] Skipping SDK update check.
WARNING 2015-02-04 09:56:16,622 simple_search_stub.py:1002] Could not read search indexes from /tmp/appengine.apprtc.chrome-bot/search_indexes
INFO 2015-02-04 09:56:16,623 api_server.py:138] Starting API server at: http://localhost:58086
INFO 2015-02-04 09:56:16,634 dispatcher.py:164] Starting module "default" running at: http://localhost:9999
ERROR 2015-02-04 09:56:17,886 wsgi.py:219]
Traceback (most recent call last):
File "/b/build/slave/Linux_Tester/build/google_appengine/google/appengine/runtime/wsgi.py", line 196, in Handle
handler = config_handle.add_wsgi_middleware(self.LoadHandler())
File "/b/build/slave/Linux_Tester/build/google_appengine/google/appengine/runtime/wsgi.py", line 255, in _LoadHandler
handler = __import(path[0])
File "/b/build/slave/Linux_Tester/build/src/out/webrtc-samples/samples/web/content/apprtc/apprtc.py", line 26, in
import analytics
File "/b/build/slave/Linux_Tester/build/src/out/webrtc-samples/samples/web/content/apprtc/analytics.py", line 14, in
from oauth2client.client import SignedJwtAssertionCredentials
ImportError: cannot import name SignedJwtAssertionCredentials
INFO 2015-02-04 09:56:17,891 module.py:593] default: "GET /r/some_room?wshpp=localhost:8089&wstls=false&firefox_fake_device=1 HTTP/1.1" 500 -
ERROR 2015-02-04 09:56:17,919 wsgi.py:219]
Traceback (most recent call last):
File "/b/build/slave/Linux_Tester/build/google_appengine/google/appengine/runtime/wsgi.py", line 196, in Handle
handler = config_handle.add_wsgi_middleware(self.LoadHandler())
File "/b/build/slave/Linux_Tester/build/google_appengine/google/appengine/runtime/wsgi.py", line 255, in _LoadHandler
handler = __import(path[0])
File "/b/build/slave/Linux_Tester/build/src/out/webrtc-samples/samples/web/content/apprtc/apprtc.py", line 26, in
import analytics
File "/b/build/slave/Linux_Tester/build/src/out/webrtc-samples/samples/web/content/apprtc/analytics.py", line 14, in
from oauth2client.client import SignedJwtAssertionCredentials
ImportError: cannot import name SignedJwtAssertionCredentials
INFO 2015-02-04 09:56:17,923 module.py:593] default: "GET /favicon.ico HTTP/1.1" 500 -
BrowserTestBase signal handler received SIGTERM. Backtrace:
#0 0x000001645df9 base::debug::StackTrace::StackTrace()
Log from http://chromegw.corp.google.com/i/chromium.webrtc/builders/Linux%20Tester/builds/33276/steps/browser_tests/logs/stdio.
phoglund
Owner
phoglund commented 6 hours ago
Where are the oauth2client imports supposed to come from? I can't see it being added or depended upon in the analytics CLs. Are they a part of appengine? We need to figure out why the bots fail to import those when they bring up the server with dev_appserver.py.
(Also, next time you do a merge like this, try to get it right in the branch before merging to master, so I don't have to revert 5 commits with fixes piled on top of each other).
phoglund
Owner
phoglund commented 2 hours ago
Strangely enough, the test works when I run on my workstation. I tried deleting my google_appengine copy and webrtc-samples; it still succeeds. Now that is weird. My first thought was that this is due to differences against the bot's PYTHONPATH, but it succeeds.
After digging around a bit, I reckon the code is supposed to come from src/out/webrtc-samples/samples/web/content/apprtc/third_party/oauth2client/client.py. Looking at that code:
if HAS_CRYPTO:
class SignedJwtAssertionCredentials(AssertionCredentials):
So the problem is that we don't have PyOpenSSL and PyCrypto? It wouldn't surprise me if the bots' system python do not have those things. Donald, what needs to happen to make that work? Can you pull the crypto stuff into third_party as some kind of build step for AppRTC? As a general thing, we can't install stuff into the bots' system python, so the app needs to pull all its dependencies by itself.
To avoid having a stale copy in apprtc, we should pull adapter.js as a dep using bower or some such.
hi, I have follow the readme to install apprtc in Ubunut14.04 which was new installtion.
Although I read the readme again and again , not found the mistake was I do.
'''
sn0rt@ubuntu-lab:~/workspace/apprtc$ ../google_appengine/dev_appserver.py --skip_sdk_update_check out/app_engine/
Traceback (most recent call last):
File "../google_appengine/dev_appserver.py", line 83, in
_run_file(file, globals())
File "../google_appengine/dev_appserver.py", line 79, in _run_file
execfile(PATHS.script_file(script_name), globals)
File "/home/sn0rt/workspace/google_appengine/google/appengine/tools/devappserver2/devappserver2.py", line 985, in
main()
File "/home/sn0rt/workspace/google_appengine/google/appengine/tools/devappserver2/devappserver2.py", line 975, in main
options = PARSER.parse_args()
File "/usr/lib/python2.7/argparse.py", line 1690, in parse_args
args, argv = self.parse_known_args(args, namespace)
File "/usr/lib/python2.7/argparse.py", line 1722, in parse_known_args
namespace, args = self._parse_known_args(args, namespace)
File "/usr/lib/python2.7/argparse.py", line 1928, in _parse_known_args
start_index = consume_optional(start_index)
File "/usr/lib/python2.7/argparse.py", line 1868, in consume_optional
take_action(action, args, option_string)
File "/usr/lib/python2.7/argparse.py", line 1796, in take_action
action(self, namespace, argument_values, option_string)
File "/home/sn0rt/workspace/google_appengine/google/appengine/tools/boolean_action.py", line 63, in call
setattr(namespace, self.dest, BooleanParse(values))
File "/home/sn0rt/workspace/google_appengine/google/appengine/tools/boolean_action.py", line 78, in BooleanParse
(values, ', '.join(repr_values)))
ValueError: 'out/app_engine/' unrecognized boolean; known booleans are 'true', 'yes', '1', 'false', 'no', '0'.
'''
For example, in the footer:
<a href="http://github.com/webrtc/apprtc">View AppRTC code on GitHub</a>
Running "shell:runPythonTests" (shell) task
apprtc_test (unittest.loader.ModuleImportFailure) ... ERROR
ERROR: apprtc_test (unittest.loader.ModuleImportFailure)
ImportError: Failed to import test module: apprtc_test
Traceback (most recent call last):
File "/usr/lib/python2.7/unittest/loader.py", line 254, in find_tests
module = self.get_module_from_name(name)
File "/usr/lib/python2.7/unittest/loader.py", line 232, in _get_module_from_name
__import(name)
File "/usr/local/google/home/jiayl/code/apprtc-fork/jiayl-webrtc/samples/web/content/apprtc/apprtc_test.py", line 4, in
import webtest
File "webtest-master/webtest/init.py", line 9, in
from webtest.app import TestApp
File "webtest-master/webtest/app.py", line 32, in
from webtest.response import TestResponse
File "webtest-master/webtest/response.py", line 5, in
from webtest import forms
File "webtest-master/webtest/forms.py", line 7, in
from bs4 import BeautifulSoup
ImportError: No module named bs4
phoglundphoglund was assigned by jiayliu on Dec 19, 2014
Jiayang Liu
Owner
jiayliu commented on Dec 22, 2014
I figured out how to fix it locally:
http://stackoverflow.com/questions/25697184/importerror-no-module-named-bs4
Can you modify the script to check/install the prerequisites since other people may run into this problem as well?
phoglund
phoglund commented on Dec 25, 2014
Yeah, I thought it was already doing that as a part of the make script, and
it appeared to work on the Travis boxes, but I'll make sure it always does
it.
The AppRTC interop test found that we can no longer bring up calls with a Firefox participant. When I run the test, the Firefox participant gets
'toJSON' called on an object that does not implement interface mozRTCSessionDescription.
on the last line of
function stringifyObject(object) {
function deepCopy(src) {
if (typeof src !== "object") {
return src;
}
var dst = Array.isArray(src) ? [] : {};
for (var property in src) {
dst[property] = deepCopy(src[property]);
}
return dst;
}
return JSON.stringify(deepCopy(object));
}
I tried reproing with just connecting two Firefox tabs to apprtc.appspot.com; I couldn't see the error there but the call still didn't get up.
Ported from webrtc/samples#447
Spawned from bug: https://code.google.com/p/chromium/issues/detail?id=467471
TL;DR JSON.stringify in Chrome (blink) is more strict as of https://chromium.googlesource.com/chromium/blink/+/d90fa7c5f4b83a3325b72fed61e8a1af4b0f8c41.
I got a report of two users in two countries cannot connect to each other, each sitting in a room waiting as the first user.
It's possible because the memcache is not guaranteed to be consistent across data centers.
I've not found any documentation around this.
Needs investigation.
(See the original issue for full comment thread)
samdutton commented 7 days ago
If no objections, I think we should run the Webmaster Tools robots.txt
tester https://support.google.com/webmasters/answer/6062598.
This requires adding an HTML verification file first:
apprtc.appspot.com/google1b7eb21c5b594ba0.html.
…
Start a call with tab to tab.
Close one tab, observe that the other tab shows frozen remote video, instead of hiding remote video and making local video center.
Would you please support bypassJoinConfirmation as a GET parameter, rather than a server option?
I'd love to be able to send someone a room invitation that requires a single click to join a conference. So desired user journey:
One possible solution is to make the GET request a POST request, then it does send the origin header.
braveyao commented on Dec 10, 2014
Steps to reproduce:
On a PC(any latest chrome), open an apprtc.appspot.com room.
On the phone(N5 in test, any latest chrome) in portrait position, navigate to the same room.
Observed behavior:
The image from the phone will appear overly large on the PC, cutting off much of the picture, making it difficult to show all of a person's face when holding the device, and it's stretched with obvious aliasing.
On the phone side, same situation, no aliasing observed though.
Expected behavior:
Apprtc should display as much of the image coming from the device as possible.
And as discussed, it should be better to "when the aspect of the incoming video is substantially different than the display, we should not try to stretch - instead we should crop to square and letterbox".
braveyaobraveyao added the apprtc label on Dec 10, 2014
Justin Uberti
Owner
juberti commented on Dec 10, 2014
This means we want to remove the object-fit:cover CSS from remoteVideo when we detect that remoteVideo.width/height is substantially different than remoteVideo.videoWidth/Height.
Proposed metric for "substantially different": width/videoWidth > 16/9 or < 9/16
KaptenJansson commented on Dec 4, 2014
Pull request #255 introduces the following warning:
WARNING: Unknown property 'object-fit'. Properties should be known (listed in CSS3 specification) or be a vendor-prefixed property. (known-properties) Browsers: All
See the original bug for full discussion.
Similar to if you do ? in Gmail or Docs etc:
https://cloud.githubusercontent.com/assets/1821693/5508594/94111cea-8763-11e4-9c14-bd256135b43e.png
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.