rtcmulticonnection
Version:
RTCMultiConnection is a WebRTC JavaScript wrapper library runs top over RTCPeerConnection API to support all possible peer-to-peer features.
266 lines (196 loc) • 10.1 kB
Markdown
# iOS and Android
> Note: RTCMultiConnection supports Safari-11 browser both on iOS and MacOSX.
>
> So you do not need to build a cordova or ionic application.
Please check these docs as well:
* [Write iOS apps using RTCMultiConnection](http://www.rtcmulticonnection.org/docs/Write-iOS-Apps/)
* [Write Android apps using RTCMultiConnection](http://www.rtcmulticonnection.org/docs/Write-Android-Apps/)
----
## iPhone, iPad, Nexus, Samsung, many other devices
> This page explains how to write iOS+Android phonegap/cordova applications for RTCMultiConnection.
# Cordova Demos
Please check all iOS+Android demos here:
* https://webrtcweb.com/cordova-apps/
| DemoTitle | DownloadZip | AndroidAPK | AllFiles |
| ------------- |-------------|-------------|-------------|
| Scalable Broadcast | [Source](https://webrtcweb.com/cordova-apps/scalable-broadcast/Download-Source.zip) | [Android APK](https://webrtcweb.com/cordova-apps/scalable-broadcast/Install-Android-App.apk) | [All files](https://webrtcweb.com/cordova-apps/scalable-broadcast) |
| Audio Conferencing | [Source](https://webrtcweb.com/cordova-apps/audio-conferencing/Download-Source.zip) | [Android APK](https://webrtcweb.com/cordova-apps/audio-conferencing/Install-Android-App.apk) | [All files](https://webrtcweb.com/cordova-apps/audio-conferencing) |
| Video Conferencing | [Source](https://webrtcweb.com/cordova-apps/video-conferencing/Download-Source.zip) | [Android APK](https://webrtcweb.com/cordova-apps/video-conferencing/Install-Android-App.apk) | [All files](https://webrtcweb.com/cordova-apps/video-conferencing) |
| File Sharing | [Source](https://webrtcweb.com/cordova-apps/filesharing/Download-Source.zip) | [Android APK](https://webrtcweb.com/cordova-apps/filesharing/Install-Android-App.apk) | [All files](https://webrtcweb.com/cordova-apps/filesharing) |
# Prerequisites
1. xcode `latest`
2. cordova android plugin `latest`
3. cordova ios plugin `latest`
Check xcode-build-version: `xcodebuild -version`
* https://cordova.apache.org/docs/en/latest/guide/platforms/ios/
Make sure that terminal is using latest xcode:
```
xcode-select --print-path
# maybe [sudo]
xcode-select -switch /Applications/Xcode5.1.1/Xcode.app
```
# Install Prerequisites
```sh
# if a command fails, try with [sudo]
npm install cordova -g
npm install xcode -g
```
# Create Your First App
```sh
cordova create ./yourAppName org.yourAppName yourAppName
cd yourAppName
```
## Add WebRTC plugin for iOS apps
```sh
cordova plugin add cordova-plugin-iosrtc
```
Now compile SWIFT parameters:
```sh
cd hooks
wget https://raw.githubusercontent.com/eface2face/cordova-plugin-iosrtc/master/extra/hooks/iosrtc-swift-support.js
# maybe [sudo]
chmod +x iosrtc-swift-support.js
cd ..
```
Now modify `config.xml` for this section:
```xml
<platform name="ios">
<hook type="after_platform_add" src="hooks/iosrtc-swift-support.js" />
</platform>
```
# Add Platforms
Now add platforms. If you already added, please remove all existing platforms, and add them again. Otherwise, you'll see errors during `cordova build ios` or `cordova build android`:
> Note: Do same if you change your app's name in the "config.xml" file. Make sure to remove and re-add all platforms.
```sh
# remove any existing platform
cordova platform remove ios
cordova platform remove android
# add latest platform versions
cordova platform add ios
cordova platform add android
```
# Build your Apps
```sh
cordova build ios
cordova build android
```
Now open `platforms/ios/ProjectName.xcodeproj". It may ask this:
> "Convert to Latest Swift Syntax?"
Simply click `Cancel` button. We're OK with old syntax.
# `config.xml` hints
Modify `platform/android/AndroidManifest.xml` for `<uses-permission android:name="android.permission.CAMERA"/>` and a few others. Now getUserMedia API will work in Android.
An example `AndroidManifest.xml` file:
```xml
<?xml version='1.0' encoding='utf-8'?>
<manifest android:hardwareAccelerated="true" android:versionCode="30001" android:versionName="3.0.1" package="rmc3.videoconference" xmlns:android="http://schemas.android.com/apk/res/android">
<supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
<uses-permission android:name="android.permission.INTERNET" />
<application android:hardwareAccelerated="true" android:icon="@mipmap/icon" android:label="@string/app_name" android:supportsRtl="true">
<activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:theme="@android:style/Theme.DeviceDefault.NoActionBar" android:windowSoftInputMode="adjustResize">
<intent-filter android:label="@string/launcher_name">
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="16" android:targetSdkVersion="24" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.MICROPHONE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
</manifest>
```
An example `config.xml` file (make sure that `icon.png` has valid path):
```xml
<?xml version='1.0' encoding='utf-8'?>
<widget id="rmc3.videoconference" version="3.0.2" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>Video Conferencing</name>
<icon src="www/img/icon.png" />
<description>
Peer-to-Peer Application
</description>
<author email="muazkh@gmail.com" href="https://www.webrtc-experiment.com/">
Muaz khan
</author>
<content src="index.html" />
<allow-navigation href="*" />
<allow-intent href="*" />
<access origin="*" />
<platform name="android">
<preference name="Orientation" value="default" />
<preference name="KeepRunning" value="true" />
<preference name="AndroidLaunchMode" value="singleTop" />
</platform>
<platform name="ios">
<preference name="Orientation" value="all" />
<hook src="hooks/iosrtc-swift-support.js" type="after_platform_add" />
<config-file parent="CFBundleURLTypes" target="*-Info.plist">
<array>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true />
</dict>
</array>
</config-file>
<config-file parent="NSCameraUsageDescription" target="*-Info.plist" platform="ios">
<string>WebRTC uses your camera to make video calls.</string>
</config-file>
<config-file parent="NSMicrophoneUsageDescription" target="*-Info.plist" platform="ios">
<string>WebRTC uses your microphone to make voice calls.</string>
</config-file>
</platform>
<plugin name="cordova-plugin-whitelist" spec="latest" />
<plugin name="cordova-plugin-iosrtc" spec="latest" />
<plugin name="cordova-plugin-device" spec="latest" />
<plugin name="cordova-plugin-crosswalk-webview" spec="latest" />
</widget>
```
# Use RTCMultiConnection
> This section explains how to integrate RTCMultiConnection for both iOS and Android apps.
Download and link [`RTCMultiConnection.js`](https://github.com/muaz-khan/RTCMultiConnection/tree/master/dist/RTCMultiConnection.js):
```html
<!DOCTYPE html>
<html lang="en">
<head>
<title>CordovaApp using RTCMultiConnection</title>
<link rel="stylesheet" href="css/index.css">
</head>
<body>
<!-- your UI code -->
<script src="cordova.js"></script>
<script src="js/socket.io.js"></script>
<script src="js/RTCMultiConnection.js"></script>
<script src="js/index.js"></script>
</body>
</html>
```
`www/js/index.js`:
```javascript
// please read below comments:
document.addEventListener('deviceready', function() {
// you can put your custom-ui-codes here
// e.g.
// var connection = new RTCMultiConnection();
}, false);
```
# Select Speakers as default audio output device on iOS
```javascript
window.iOSDefaultAudioOutputDevice = 'speaker'; // earpiece or speaker
// set above line, before below one
var connection = new RTCMultiConnection();
```
# Other Documents
1. [Getting Started guide for RTCMultiConnection](https://github.com/muaz-khan/RTCMultiConnection/tree/master/docs/getting-started.md)
2. [Installation Guide](https://github.com/muaz-khan/RTCMultiConnection/tree/master/docs/installation-guide.md)
3. [How to Use?](https://github.com/muaz-khan/RTCMultiConnection/tree/master/docs/how-to-use.md)
4. [API Reference](https://github.com/muaz-khan/RTCMultiConnection/tree/master/docs/api.md)
5. [Upgrade from v2 to v3](https://github.com/muaz-khan/RTCMultiConnection/tree/master/docs/upgrade.md)
6. [How to write iOS/Android applications?](https://github.com/muaz-khan/RTCMultiConnection/tree/master/docs/ios-android.md)
7. [Tips & Tricks](https://github.com/muaz-khan/RTCMultiConnection/blob/master/docs/tips-tricks.md)
## Twitter
* https://twitter.com/WebRTCWeb i.e. @WebRTCWeb
## License
[RTCMultiConnection](https://github.com/muaz-khan/RTCMultiConnection) is released under [MIT licence](https://github.com/muaz-khan/RTCMultiConnection/blob/master/LICENSE.md) . Copyright (c) [Muaz Khan](http://www.MuazKhan.com/).