WebRTC for Cordova apps!
Note: PhoneRTC is still at very early stages. Right now, it's more like a proof-of-concept than a production-ready library.
- Completely open source
- Android and iOS support
- Simple JavaScript API
- Video & Voice chat
- Use your own servers without relying on any third-parties
- Perfect for hybrid mobile apps using Angular
- TURN server - rfc5766-turn-server on Amazon EC2 is a good option here
- Signaling server - SignalR if you are using ASP.NET or socket.io if you are using Node.js are recommended
- Group chat
- API documentation
- Volume control
WebRTC is a peer-to-peer protocol, but it still needs some servers: a signaling server for initializing the call and a proxy server if the peer-to-peer connection fails.
Other solutions, such as OpenTok and Weemo, require you to use their own third-party servers. That means they are much easier to use, but that also means that they are less open, have a subscription model, and you are generally less in control.
PhoneRTC allows you to use your own servers, without relying on any third-parties.
To set up a TURN server, create an Amazon EC2 instance with the latest Ubuntu. Open the following ports in the instance security group:
TCP 443
TCP 3478-3479
TCP 32355-65535
UDP 3478-3479
UDP 32355-65535
Open SSH and run:
sudo apt-get install rfc5766-turn-server
Next, edit /etc/turnserver.conf
and change the following options:
listening-ip=<private EC2 ip address>
relay-ip=<private EC2 ip address>
external-ip=<public EC2 ip address>
min-port=32355
max-port=65535
realm=<your domain>
Also uncomment the following options:
lt-cred-mech
fingerprint
Next, open /etc/turnuserdb.conf
and add a new user at the end of the file. The format is:
username:password
To start the TURN server, run the following command:
sudo /etc/init.d/rfc5766-turn-server start
Install Cordova:
npm install -g cordova ios-deploy
Create a new Cordova project:
cordova create <name>
cordova platform add ios android
Add the plugin:
cordova plugin add https://github.com/alongubkin/phonertc.git
var phonertc = cordova.require('com.dooble.phonertc.PhoneRTC');
phonertc.call({
isInitator: true, // Caller or callee?
turn: {
host: 'turn:turn.example.com:3478',
username: 'user',
password: 'pass'
},
sendMessageCallback: function (data) {
// PhoneRTC wants to send a message to your target, use
// your signaling server here to send the message.
signaling.sendMessage(target, {
type: 'webrtc_handshake',
data: data
});
},
answerCallback: function () {
alert('Callee answered!');
},
disconnectCallback: function () {
alert('Call disconnected!');
},
video: { // Remove this property if you don't want video chat
localVideo: document.getElementById('localVideo'),
remoteVideo: document.getElementById('remoteVideo')
}
});
signaling.onMessage = function (message) {
if (message.type === 'webrtc_handshake') {
// when a message is received from the signaling server,
// notify the PhoneRTC plugin.
phonertc.receiveMessage(message.data);
}
};
Building for Android is easy. You can just:
cordova build android
cordova run android
In iOS, it's slightly more complicated. Run the following code. It will prepare all of the web code to be deployed to your device. It must be re-run every time you change any web code:
cordova prepare ios
Open the project in Xcode and change the following options in the project settings (these must be changed for both your project and the CordovaLib project):
Valid Architectures => armv7
Build Active Architecture Only => No
In the target choose a real iOS device, not the simulator, otherwise it won't build. You should now be able to run this on your device.
To create an IPA, go to Product > Archive.
The libs
directory contains compiled libraries from the official WebRTC project. If you want to build them yourself, use the following tutorials:
Android: https://code.google.com/p/webrtc/source/browse/trunk/talk/examples/android/README
iOS: https://code.google.com/p/webrtc/source/browse/trunk/talk/app/webrtc/objc/README
iOS Video Support: @egreenmachine (BitCoin Donations: 12pDZFVov6rDPjhGTz9Xj4qqegdoCJF3Ea
)