elmarti / meteor-video-chat Goto Github PK
View Code? Open in Web Editor NEWSimple id based video calling in meteor
Home Page: https://atmospherejs.com/elmarti/video-chat
License: MIT License
Simple id based video calling in meteor
Home Page: https://atmospherejs.com/elmarti/video-chat
License: MIT License
At present, the system relies on basic polyfills to support a wider array of browsers, however it has been decided that a dedicated package should be used to ensure functionality across all compatible browsers.
When using Edge, the set up process stalls at point at which the ICE candidates and SDP are to be passed over the stream. No error is logged at the code in Rocket Chat Streamer seems to execute as expected. I couldn't see a WebSocket stream for Edge, leading me to believe that it's using its HTTP fallback.
Hi elmarti,
i'm currently testing meteor-video-chat 1.2.0
I downloaded meteor-video-chat-example to test it in my local meteor installation. I'm surprised because i just have a blank page. I also notice that there is only a header page in the directory.
In the version 0.4.13, there was a easy useful example.
Can you direct me on how to use this lastest version, in order to produce an app similar to the one you hosted on https://meteorvideochat.herokuapp.com/ ?
Thanks
Using browser stack and selenium create automated tests which follow the critical path of the extension. This should identify common cross-browser issues such as RTC typing issues and missing polyfills.
Add useful and attractive logs to the console to allow users to know the state of the application throughout the steps.
Use this article as a guideline http://www.hugodaniel.pt/posts/2017-08-11-mastering-console-log.html
Logs should be enabled by default, but hide-able.
Travis CI, waffle.io
The DDP stream is triggering callbacks in the incorrect order.
Image of trace is available here RTCFly/RTCFly#6
ICE candidates are exchanged by using DDP to replicate a websocket based system. This was functional at first, however it was based on populating an array of ICE candidates with 'seen' flags. This worked however it was inefficient due to DDP emitting the entire array every time an ICE candidate was added for exchange. This has been altered to simply set the appropriate field as the value of the ICE candidate when the onicecandidate event is fired, which initially worked well, but errors have arised from the emergent system. This needs to be reviewed and tested.
I have written a library to extract out the WebRTC stuff and make it more testable.
The next step is to integrate that into this project https://github.com/RTCFly/RTCFly
As discovered in #46, the example app never seems to connect first time, but often does after a few tries. The previous Blaze specific version of the application used to reconnect when the ICEConnectionState was failed, which seemed to work most of the time and this should be repeated for this version.
Acceptance criteria
At present the travis.yml file is generic and does not run the specific tests required for this package. The file should allow for integration/acceptance testing using headless browsers and BrowserStack Automate.
The function this.onReceivePhoneCall (msg.id); Do not return the userId but the msg.id
https://github.com/elmarti/meteor-video-chat/blob/master/services/client.js#L48
Identical blocks of code found in 2 locations. Consider refactoring.
This could be solving by creating a dedicated log mutator method.
When a particular browser receives a call, it should be the only one that subscribes to the data stream and triggers the onTerminateCall
callback.
There should be a set of uniform errors for handling particular kinds of rejection, such as there being no media devices or the media devices being busy etc.
A complete rebuild of the video chat system is underway, I will not be developing the current design further. I aim to have a beta up this month, but until then use 0.4.7
Ice candidates are not being transferred in the correct format, making connections outside of LAN impossible. I will debug in 14 hours time.
https://www.w3.org/TR/webrtc/#dom-rtcconfiguration-peeridentity
Add an extra layer of authentication to ensure that session data cannot be easily hijacked or man-in-the-middle'd
Currently there is a link to the example application, but not the repo, making it hard for devs to clone it and play around.
Write unit tests for 100% code coverage
The error logging isn't great, there will need to be some breaking changes in the near future to make it more uniform. The key issues are that for some reason, it was decided that the onError
callback would take 1 (2 on server) extra parameters - data
and user
. These are unnecessary as data can be passed in the Error
object and the user can always be obtained from Meteor.user()
. I believe that there was going to be some reactive code that wouldn't have this object set, but it has now emerged that this will always be available.
I will create an extensive wiki to guide the integration of this project.
As part of #48 it has been discovered that there are cross browser issues calling .pause()
in relation to the async play()
which causes the reconnection process to break.
A polyfill should be written to encapsulate the video objects and ensure that there is a consistent way to play, pause and change the stream seamlessly.
I got this error when Im about to make a call:
ReferenceError: Session is not defined at _class.callRemote
I've looked at your code and can't find the Session variable declaration
if( stream_data.candidate ){
if( typeof stream_data.candidate == "string")
stream_data.candidate = JSON.parse(stream_data.candidate);
const candidate = new RTCIceCandidate(stream_data.candidate);
if(this.peerConnection)
this.peerConnection.addIceCandidate(candidate).catch(err => {
this.onError(err, stream_data);
});
}
At present, reactive events are registered in body.onRendered, however this seems to cause lots of issues with scope and unpredictable functionality. Need to devise a way to define where the functionality is called.
Hi elmarti,
Thanks for the good work done packaging webrtc for meteor, the basic are very useful.
I'm testing a basic video chat app and I'm having an ICE Failed error.
Attached you will find my code : a basic html template - and the js that i'm using.
If you had any idea of what the issue might be it would be of great help.
Many Thanks,
Gaël
Unit/Tests must be written, along with a establishing a project protocol for testing across browser and front-end frameworks.
Situations like this (Where the user has jiggled into an odd state) should trigger some sort of callback.
TypeError: Cannot read property 'addIceCandidate' of undefined
at n.<anonymous> (/69302e3cbf2e0da797ecf091567b0ab0cec68b05.js:135:3811)
at None (/69302e3cbf2e0da797ecf091567b0ab0cec68b05.js:123:927)
at Array.forEach (<anonymous>)
at n.e [as emit] (/69302e3cbf2e0da797ecf091567b0ab0cec68b05.js:123:898)
at t.<anonymous> (/69302e3cbf2e0da797ecf091567b0ab0cec68b05.js:123:3517)
...
(12 additional frame(s) were not displayed)
Ok, everything works now, I wasn't loading my template the right way.. lol
I'm getting this Exception console.log on server restart:
I20160710-12:01:31.405(-5)? Exception in queued task: Error: Meteor.userId can only be invoked in method calls. Use this.userId in publish functions.
I20160710-12:01:31.406(-5)? at AccountsServer.userId (packages/accounts-base/accounts_server.js:82:13)
I20160710-12:01:31.406(-5)? at Object.Meteor.userId (packages/accounts-base/accounts_common.js:237:19)
I20160710-12:01:31.406(-5)? at Object.removed (packages/elmarti:video-chat-custom/services/server.js:51:39)
I20160710-12:01:31.406(-5)? at [object Object].observeChangesCallbacks.removed (packages/minimongo/observe.js:169:1)
I20160710-12:01:31.407(-5)? at self.applyChange.removed (packages/minimongo/observe.js:71:1)
I20160710-12:01:31.407(-5)? at packages/mongo/observe_multiplex.js:183:30
I20160710-12:01:31.409(-5)? at Function..each..forEach (packages/underscore/underscore.js:108:1)
I20160710-12:01:31.410(-5)? at Object.task (packages/mongo/observe_multiplex.js:177:9)
I20160710-12:01:31.410(-5)? at [object Object]._.extend._run (packages/meteor/fiber_helpers.js:147:1)
I20160710-12:01:31.412(-5)? at packages/meteor/fiber_helpers.js:125:1
Still works, but im not sure if I should be worried about that..
Also I get onaddstream is deprecated! Use peerConnection.ontrack instead.
on firefox console
Discovered whilst fixing #39
Due to the way in which method calls are bound by Meteor.methods
, it has made it hard to assign the onError
method, the way in which was assumed would work.
I believe this is owed to the MVP being built in a waterfall fashion and the current lack of a testing system.
At present, the README says that a user should set the following
Meteor.VideoCallServices.onError = (err, data, user) => {
}```
however Meteor.VideoCallServices is currently undefined on the server side.
The solution is to create this as an object literal with the onError method inside it. The Meteor methods can reference this directly because `this.onError` appears to no be possible as the method calls are bound to the `Meteor` object and not the `services` object.
meteor-video-chat/lib/client.js
Line 82 in 4ea04bf
Hey, so my stream is showing in chrome, but it doesn't work in the latest version of Firefox..
all i'm doing is:
Meteor.VideoCallServices.setLocalWebcam( 'myCamera' ); Meteor.VideoCallServices.loadLocalWebcam( true );
Other than that, I love this package! ;)
Hi elmarti,
great job!
I'm building a video chat app using meteor-video-chat. All is ok with Modal (i'm still using version 0.4.13 ).
My aim is to display the video call in a new window browser ( with window.open() function ) like on facebook web video call system (it uses webrtc).
I'm able to display the new window video call on the caller side; but not on the callee side.
Do you have any advise on how to do this?
Thanks.
Hi,
is there going to be support for device video access via Cordova?
I am not sure that the streams are being consistently destroyed upon connection, please ensure that they are.
this.peerConnection.addIceCandidate( stream_data.candidate ).catch( err => {
this.onError(err, stream_data);
});
should probably have something like
const candidates = new RTCIceCandidate(stream_data.candidate);
before it.
3 reasons: This package was removed from the core in 1.3, I opted for it due to my lack of understanding of meteor at the time and it is unnecessary to store the data in the global scope.
Elmarti : Is brodcasting anywhere in your future plans ? Even though you are doing person to person video in this package , I need to broadcast audio only. Any suggestion ? ie an admin broadcast his microphone to all connected clients .
Thanks
Tom
The project should be made entirely portable to ensure that it can be isolated and tested in a variety of environments.
Add callbacks on server and client to capture all errors. Client callback should be triggered by server errors invoked by the user and the server side one should take the userId as a parameter.
Some of the current code is proving hard to unit test and it would benefit from being stripped out into smaller units.
Certain devices never seem to receive ICE candidates and it unclear as to why. The WebRTC spec needs to be reviewed and the exchange process needs to be checked to ensure that ICE candidate exchanges are not being blocked by synchronous user interaction.
At present it does not work properly on Firefox, use BrowserStack to test across browsers and platforms.
DOMException: Error processing ICE candidate
is inconsistently thrown on a number of platforms, causing the ICE exchange process to break. I need to check the format of ICE candidates across browsers as some use different object types, for example the sdp value is set instead of candidate.
Template.body.onRendered(renderCallTemplate);
OR
renderCallTemplate(targettemplate);
Are currently the only ways of attaching the system into your project. I will design a more encapsulated, dynamic way of doing this
Or would this work with something like blaze-in-react?
In the next Alpha of CoreRTC, getUserMedia needs to be injected into the client initialisation with the other WebRTC methods.
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.