From 07e723a904809c025376b36682d41ab0da4a11f1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Francisco=20Siebel?= <jfsiebel@gmail.com>
Date: Mon, 11 Jun 2018 11:49:52 -0300
Subject: [PATCH] Add BBBRtmpPlayer ANE

---
 clients/flash/air-client/src/Main-app.xml     | 779 +++++++++---------
 .../air/common/views/IOSVideoView.as          | 162 ++++
 .../air/main/models/IUISession.as             |   4 +-
 .../air/main/views/LoadingScreenMediator.as   |   4 +-
 .../air/video/views/WebcamDock.as             |  35 +-
 .../air/video/views/WebcamDockMediator.as     |   8 +-
 6 files changed, 590 insertions(+), 402 deletions(-)
 create mode 100755 clients/flash/air-client/src/org/bigbluebutton/air/common/views/IOSVideoView.as

diff --git a/clients/flash/air-client/src/Main-app.xml b/clients/flash/air-client/src/Main-app.xml
index 754c74d444..99a83233fc 100755
--- a/clients/flash/air-client/src/Main-app.xml
+++ b/clients/flash/air-client/src/Main-app.xml
@@ -1,389 +1,390 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<application xmlns="http://ns.adobe.com/air/application/29.0">
-
-<!-- Adobe AIR Application Descriptor File Template.
-
-	Specifies parameters for identifying, installing, and launching AIR applications.
-
-	xmlns - The Adobe AIR namespace: http://ns.adobe.com/air/application/3.5
-			The last segment of the namespace specifies the version 
-			of the AIR runtime required for this application to run.
-			
-	minimumPatchLevel - The minimum patch level of the AIR runtime required to run 
-			the application. Optional.
--->
-
-	<!-- A universally unique application identifier. Must be unique across all AIR applications.
-	Using a reverse DNS-style name as the id is recommended. (Eg. com.example.ExampleApplication.) Required. -->
-	<id>com.bigbluebutton.AIRClient</id>
-
-	<!-- Used as the filename for the application. Required. -->
-	<filename>BigBlueButton</filename>
-
-	<!-- The name that is displayed in the AIR application installer. 
-	May have multiple values for each language. See samples or xsd schema file. Optional. -->
-	<name>BigBlueButton</name>
-	
-	<!-- A string value of the format <0-999>.<0-999>.<0-999> that represents application version which can be used to check for application upgrade. 
-	Values can also be 1-part or 2-part. It is not necessary to have a 3-part value.
-	An updated version of application must have a versionNumber value higher than the previous version. Required for namespace >= 2.5 .
-    For iOS Apps, this represents build number. -->
-	<versionNumber>0.1.0</versionNumber>
-		         
-	<!-- A string value (such as "v1", "2.5", or "Alpha 1") that represents the version of the application, as it should be shown to users. 
-     For iOS Apps, this represents application version number and format should be (<0-999>.<0-999>.<0-999>).
-     If this tag is not specified or the value is not according to the format, then this tag will be ignored 
-     and <versionNumber> will be used for application version number. Optional. -->
-	<!-- <versionLabel></versionLabel> -->
-
-	<!-- Description, displayed in the AIR application installer.
-	May have multiple values for each language. See samples or xsd schema file. Optional. -->
-	<!-- <description></description> -->
-
-	<!-- Copyright information. Optional -->
-	<!-- <copyright></copyright> -->
-
-	<!-- Publisher ID. Used if you're updating an application created prior to 1.5.3 -->
-	<!-- <publisherID></publisherID> -->
-
-	<!-- Settings for the application's initial window. Required. -->
-	<initialWindow>
-		<!-- The main SWF or HTML file of the application. Required. -->
-		<!-- Note: In Flash Builder, the SWF reference is set automatically. -->
-		<content>Main.swf</content>
-		
-		<!-- The title of the main window. Optional. -->
-		<!-- <title></title> -->
-
-		<!-- The type of system chrome to use (either "standard" or "none"). Optional. Default standard. -->
-		<!-- <systemChrome></systemChrome> -->
-
-		<!-- Whether the window is transparent. Only applicable when systemChrome is none. Optional. Default false. -->
-		<!-- <transparent></transparent> -->
-
-		<!-- Whether the window is initially visible. Optional. Default false. -->
-		<!-- <visible></visible> -->
-
-		<!-- Whether the user can minimize the window. Optional. Default true. -->
-		<!-- <minimizable></minimizable> -->
-
-		<!-- Whether the user can maximize the window. Optional. Default true. -->
-		<!-- <maximizable></maximizable> -->
-
-		<!-- Whether the user can resize the window. Optional. Default true. -->
-		<!-- <resizable></resizable> -->
-
-		<!-- The window's initial width in pixels. Optional. -->
-		<!-- <width></width> -->
-
-		<!-- The window's initial height in pixels. Optional. -->
-		<!-- <height></height> -->
-
-		<!-- The window's initial x position. Optional. -->
-		<!-- <x></x> -->
-
-		<!-- The window's initial y position. Optional. -->
-		<!-- <y></y> -->
-
-		<!-- The window's minimum size, specified as a width/height pair in pixels, such as "400 200". Optional. -->
-		<!-- <minSize></minSize> -->
-
-		<!-- The window's initial maximum size, specified as a width/height pair in pixels, such as "1600 1200". Optional. -->
-		<!-- <maxSize></maxSize> -->
-
-        <!-- The aspect ratio of the app ("portrait" or "landscape" or "any"). Optional. Mobile only. Default is the natural orientation of the device -->
-
-        <!-- <aspectRatio></aspectRatio> -->
-
-        <!-- Whether the app will begin auto-orienting on launch. Optional. Mobile only. Default false -->
-
-        <!-- <autoOrients></autoOrients> -->
-
-        <!-- Whether the app launches in full screen. Optional. Mobile only. Default false -->
-
-        <!-- <fullScreen></fullScreen> -->
-
-        <!-- The render mode for the app (either auto, cpu, gpu, or direct). Optional. Default auto -->
-
-         <renderMode>direct</renderMode>
-
-        <!-- Whether the default direct mode rendering context allocates storage for depth and stencil buffers.  Optional.  Default false. -->
-        <!-- <depthAndStencil></depthAndStencil> -->
-
-		<!-- Whether or not to pan when a soft keyboard is raised or lowered (either "pan" or "none").  Optional.  Defaults "pan." -->
-		<!-- <softKeyboardBehavior></softKeyboardBehavior> -->
-
-		<!-- Display Resolution for the app (either "standard" or "high"). Optional, OSX-only. Default "standard" -->
-		<!-- <requestedDisplayResolution></requestedDisplayResolution> -->
-	<autoOrients>true</autoOrients>
-        <fullScreen>false</fullScreen>
-        <visible>true</visible>
-        <softKeyboardBehavior>none</softKeyboardBehavior>
-    </initialWindow>
-
-	<!-- We recommend omitting the supportedProfiles element, -->
-	<!-- which in turn permits your application to be deployed to all -->
-	<!-- devices supported by AIR. If you wish to restrict deployment -->
-	<!-- (i.e., to only mobile devices) then add this element and list -->
-	<!-- only the profiles which your application does support. -->
-	<!-- <supportedProfiles>desktop extendedDesktop mobileDevice extendedMobileDevice</supportedProfiles> -->
-
-	<!-- Languages supported by application -->
-	<!-- Only these languages can be specified -->
-	<!-- <supportedLanguages>en de cs es fr it ja ko nl pl pt ru sv tr zh</supportedLanguages> -->
-
-	<!-- The subpath of the standard default installation location to use. Optional. -->
-	<!-- <installFolder></installFolder> -->
-
-	<!-- The subpath of the Programs menu to use. (Ignored on operating systems without a Programs menu.) Optional. -->
-	<!-- <programMenuFolder></programMenuFolder> -->
-
-	<!-- The icon the system uses for the application. For at least one resolution,
-	specify the path to a PNG file included in the AIR package. Optional. -->
-	<icon>
-		<!-- http://help.adobe.com/en_US/air/build/WSfffb011ac560372f2fea1812938a6e463-8000.html#WSfffb011ac560372f-6fd06f0f1293d3b33ea-7ffc -->
-		<image29x29>assets/icons/icon-29.png</image29x29>
-		<image36x36>assets/icons/icon-36.png</image36x36>
-		<image40x40>assets/icons/icon-40.png</image40x40>
-		<image44x44>assets/icons/icon-44.png</image44x44>
-		<image48x48>assets/icons/icon-48.png</image48x48>
-		<image50x50>assets/icons/icon-50.png</image50x50>
-		<image57x57>assets/icons/icon-57.png</image57x57>
-		<image58x58>assets/icons/icon-58.png</image58x58>
-		<image60x60>assets/icons/icon-60.png</image60x60>
-		<image66x66>assets/icons/icon-66.png</image66x66>
-		<image72x72>assets/icons/icon-72.png</image72x72>
-		<image75x75>assets/icons/icon-75.png</image75x75>
-		<image76x76>assets/icons/icon-76.png</image76x76>
-		<image80x80>assets/icons/icon-80.png</image80x80>
-		<image87x87>assets/icons/icon-87.png</image87x87>
-		<image96x96>assets/icons/icon-96.png</image96x96>
-		<image100x100>assets/icons/icon-100.png</image100x100>
-		<image114x114>assets/icons/icon-114.png</image114x114>
-		<image120x120>assets/icons/icon-120.png</image120x120>
-		<image128x128>assets/icons/icon-128.png</image128x128>
-		<image144x144>assets/icons/icon-144.png</image144x144>
-		<image152x152>assets/icons/icon-152.png</image152x152>
-		<image167x167>assets/icons/icon-167.png</image167x167>
-		<image180x180>assets/icons/icon-180.png</image180x180>
-		<image192x192>assets/icons/icon-192.png</image192x192>
-		<image512x512>assets/icons/icon-512.png</image512x512>
-		<image732x412>assets/icons/icon-732.png</image732x412>
-		<image1024x1024>assets/icons/icon-1024.png</image1024x1024>
-	</icon>
-
-	<!-- Whether the application handles the update when a user double-clicks an update version
-	of the AIR file (true), or the default AIR application installer handles the update (false).
-	Optional. Default false. -->
-	<!-- <customUpdateUI></customUpdateUI> -->
-	
-	<!-- Whether the application can be launched when the user clicks a link in a web browser.
-	Optional. Default false. -->
-	<allowBrowserInvocation>true</allowBrowserInvocation>
-
-	<!-- Listing of file types for which the application can register. Optional. -->
-	<!-- <fileTypes> -->
-
-		<!-- Defines one file type. Optional. -->
-		<!-- <fileType> -->
-
-			<!-- The name that the system displays for the registered file type. Required. -->
-			<!-- <name></name> -->
-
-			<!-- The extension to register. Required. -->
-			<!-- <extension></extension> -->
-			
-			<!-- The description of the file type. Optional. -->
-			<!-- <description></description> -->
-			
-			<!-- The MIME content type. -->
-			<!-- <contentType></contentType> -->
-			
-			<!-- The icon to display for the file type. Optional. -->
-			<!-- <icon>
-				<image16x16></image16x16>
-				<image32x32></image32x32>
-				<image48x48></image48x48>
-				<image128x128></image128x128>
-			</icon> -->
-			
-		<!-- </fileType> -->
-	<!-- </fileTypes> -->
-
-    <!-- iOS specific capabilities -->
-	<!-- <iPhone> -->
-		<!-- A list of plist key/value pairs to be added to the application Info.plist -->
-		<!-- <InfoAdditions>
-            <![CDATA[
-                <key>UIDeviceFamily</key>
-                <array>
-                    <string>1</string>
-                    <string>2</string>
-                </array>
-                <key>UIStatusBarStyle</key>
-                <string>UIStatusBarStyleBlackOpaque</string>
-                <key>UIRequiresPersistentWiFi</key>
-                <string>YES</string>
-            ]]>
-        </InfoAdditions> -->
-        <!-- A list of plist key/value pairs to be added to the application Entitlements.plist -->
-		<!-- <Entitlements>
-            <![CDATA[
-                <key>keychain-access-groups</key>
-                <array>
-                    <string></string>
-                    <string></string>
-                </array>
-            ]]>
-        </Entitlements> -->
-	<!-- Display Resolution for the app (either "standard" or "high"). Optional. Default "standard" -->
-	<!-- <requestedDisplayResolution></requestedDisplayResolution> -->
-	<!-- Forcing Render Mode CPU for the devices mentioned. Optional  -->
-	<!-- <forceCPURenderModeForDevices></forceCPURenderModeForDevices> -->
-	<!-- File containing line separated list of external swf paths. These swfs won't be 
-	packaged inside the application and corresponding stripped swfs will be output in 
-	externalStrippedSwfs folder. -->
-	<!-- <externalSwfs></externalSwfs> -->
-	<!-- </iPhone> -->
-
-	<!-- Specify Android specific tags that get passed to AndroidManifest.xml file. -->
-    <!--<android> -->
-    <!--	<manifestAdditions>
-		<![CDATA[
-			<manifest android:installLocation="auto">
-				<uses-permission android:name="android.permission.INTERNET"/>
-				<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
-				<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
-				<uses-feature android:required="true" android:name="android.hardware.touchscreen.multitouch"/>
-				<application android:enabled="true">
-					<activity android:excludeFromRecents="false">
-						<intent-filter>
-							<action android:name="android.intent.action.MAIN"/>
-							<category android:name="android.intent.category.LAUNCHER"/>
-						</intent-filter>
-					</activity>
-				</application>
-            </manifest>
-		]]>
-        </manifestAdditions> -->
-	    <!-- Color depth for the app (either "32bit" or "16bit"). Optional. Default 16bit before namespace 3.0, 32bit after -->
-        <!-- <colorDepth></colorDepth> -->
-        <!-- Indicates if the app contains video or not. Necessary for ordering of video planes with graphics plane, especially in Jellybean - if you app does video this must be set to true - valid values are true or false -->
-        <!-- <containsVideo></containsVideo> -->
-        <!-- Indicates if webContents (HTML/CSS/JavaScript) can be inspected in browser. Optional . Default value is 'false' -->
-        <!-- <webContentsDebuggingEnabled></webContentsDebuggingEnabled> -->
-    <!-- </android> -->
-	<!-- End of the schema for adding the android specific tags in AndroidManifest.xml file -->
-
-
-	<android>
-		<colorDepth>32bit</colorDepth>
-	    <containsVideo>true</containsVideo>
-		<manifestAdditions>
-			<![CDATA[
-			<manifest android:installLocation="auto">
-			    <!--See the Adobe AIR documentation for more information about setting Google Android permissions-->
-			    <!--Removing the permission android.permission.INTERNET will have the side effect
-		of preventing you from debugging your application on your device-->
-			    <uses-permission android:name="android.permission.INTERNET"/>
-			    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
-			    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
-			    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
-			    <!--The DISABLE_KEYGUARD and WAKE_LOCK permissions should be toggled together
-		in order to access AIR's SystemIdleMode APIs-->
-			    <uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
-			    <uses-permission android:name="android.permission.WAKE_LOCK"/>
-			    <uses-permission android:name="android.permission.CAMERA"/>
-			    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
-			    <!--The ACCESS_NETWORK_STATE and ACCESS_WIFI_STATE permissions should be toggled
-		together in order to use AIR's NetworkInfo APIs-->
-			    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
-			    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
-			    
-			    <uses-feature android:name="android.hardware.camera" android:required="false"/>
-			    <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>			    
-			    
-			    <application android:enabled="true">
-					<activity android:exported="true">
-					    <intent-filter>
-					        <action android:name="android.intent.action.MAIN" />
-					        <category android:name="android.intent.category.LAUNCHER" />
-					    </intent-filter>
-					
-					    <!-- Test for URL scheme -->
-					    <intent-filter>
-					        <action android:name="android.intent.action.VIEW" />
-					        <category android:name="android.intent.category.DEFAULT" />
-					        <category android:name="android.intent.category.BROWSABLE" />
-					        <!-- <data android:scheme="http" android:host="bbb.mobi" android:pathPattern=".*" />-->
-					        <data android:scheme="bigbluebutton" />
-					        <data android:scheme="bigbluebuttons" />
-					    </intent-filter>
-					    <!-- End Test for URL scheme -->
-					    
-					    <intent-filter>
-					        <action android:name="android.intent.action.VIEW" />
-					        <category android:name="android.intent.category.DEFAULT" />
-					        <category android:name="android.intent.category.BROWSABLE" />
-					        <data android:scheme="bigbluebuttons" />
-					    </intent-filter>
-					</activity>
-					<service android:name="com.juankpro.ane.localnotif.LocalNotificationIntentService"/>
-                    <receiver android:name="com.juankpro.ane.localnotif.AlarmIntentService" />
-                    <receiver android:name="com.juankpro.ane.localnotif.AlarmRestoreOnBoot" >
-                        <intent-filter>
-                            <action android:name="android.intent.action.BOOT_COMPLETED" />
-                        </intent-filter>
-                    </receiver>
-				</application>
-			</manifest>
-			
-		]]>
-		</manifestAdditions>
-	</android>
-	<iPhone>
-
-		<assetsCar>Assets.car</assetsCar>
-
-		<InfoAdditions>
-			<![CDATA[
-			<key>UIDeviceFamily</key>
-			<array>
-				<string>1</string>
-				<string>2</string>
-			</array>
-			
-			<key>NSCameraUsageDescription</key>
-            <string>Share your webcam to join video conference</string>
-			
-            <key>NSMicrophoneUsageDescription</key>
-            <string>Share your microphone to join audio conference</string>
-			
-			<key>CFBundleIconName</key>
-			<string>AppIcon</string>
-
-			<key>CFBundleURLTypes</key>
-			<array>
-				<dict>
-					<key>CFBundleURLSchemes</key>
-					<array>
-						<string>bigbluebutton</string>
-						<string>bigbluebuttons</string>
-					</array>
-					<key>CFBundleURLName</key>
-					<string>org.bigbluebutton</string>
-				</dict>
-			</array>
-			
-			<key>UIPrerenderedIcon</key> 
-            <true/>
-		]]>
-		</InfoAdditions>
-		<requestedDisplayResolution>high</requestedDisplayResolution>
-	</iPhone>
-	
-	<extensions>
-        <extensionID>com.freshplanet.AirCapabilities</extensionID>
-        <extensionID>com.juankpro.ane.LocalNotification</extensionID>
-    </extensions>
-</application>
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<application xmlns="http://ns.adobe.com/air/application/29.0">
+
+<!-- Adobe AIR Application Descriptor File Template.
+
+	Specifies parameters for identifying, installing, and launching AIR applications.
+
+	xmlns - The Adobe AIR namespace: http://ns.adobe.com/air/application/3.5
+			The last segment of the namespace specifies the version 
+			of the AIR runtime required for this application to run.
+			
+	minimumPatchLevel - The minimum patch level of the AIR runtime required to run 
+			the application. Optional.
+-->
+
+	<!-- A universally unique application identifier. Must be unique across all AIR applications.
+	Using a reverse DNS-style name as the id is recommended. (Eg. com.example.ExampleApplication.) Required. -->
+	<id>com.bigbluebutton.Main</id>
+
+	<!-- Used as the filename for the application. Required. -->
+	<filename>BigBlueButton</filename>
+
+	<!-- The name that is displayed in the AIR application installer. 
+	May have multiple values for each language. See samples or xsd schema file. Optional. -->
+	<name>BigBlueButton</name>
+	
+	<!-- A string value of the format <0-999>.<0-999>.<0-999> that represents application version which can be used to check for application upgrade. 
+	Values can also be 1-part or 2-part. It is not necessary to have a 3-part value.
+	An updated version of application must have a versionNumber value higher than the previous version. Required for namespace >= 2.5 .
+    For iOS Apps, this represents build number. -->
+	<versionNumber>0.1.0</versionNumber>
+		         
+	<!-- A string value (such as "v1", "2.5", or "Alpha 1") that represents the version of the application, as it should be shown to users. 
+     For iOS Apps, this represents application version number and format should be (<0-999>.<0-999>.<0-999>).
+     If this tag is not specified or the value is not according to the format, then this tag will be ignored 
+     and <versionNumber> will be used for application version number. Optional. -->
+	<!-- <versionLabel></versionLabel> -->
+
+	<!-- Description, displayed in the AIR application installer.
+	May have multiple values for each language. See samples or xsd schema file. Optional. -->
+	<!-- <description></description> -->
+
+	<!-- Copyright information. Optional -->
+	<!-- <copyright></copyright> -->
+
+	<!-- Publisher ID. Used if you're updating an application created prior to 1.5.3 -->
+	<!-- <publisherID></publisherID> -->
+
+	<!-- Settings for the application's initial window. Required. -->
+	<initialWindow>
+		<!-- The main SWF or HTML file of the application. Required. -->
+		<!-- Note: In Flash Builder, the SWF reference is set automatically. -->
+		<content>Main.swf</content>
+		
+		<!-- The title of the main window. Optional. -->
+		<!-- <title></title> -->
+
+		<!-- The type of system chrome to use (either "standard" or "none"). Optional. Default standard. -->
+		<!-- <systemChrome></systemChrome> -->
+
+		<!-- Whether the window is transparent. Only applicable when systemChrome is none. Optional. Default false. -->
+		<!-- <transparent></transparent> -->
+
+		<!-- Whether the window is initially visible. Optional. Default false. -->
+		<!-- <visible></visible> -->
+
+		<!-- Whether the user can minimize the window. Optional. Default true. -->
+		<!-- <minimizable></minimizable> -->
+
+		<!-- Whether the user can maximize the window. Optional. Default true. -->
+		<!-- <maximizable></maximizable> -->
+
+		<!-- Whether the user can resize the window. Optional. Default true. -->
+		<!-- <resizable></resizable> -->
+ 
+		<!-- The window's initial width in pixels. Optional. -->
+		<!-- <width></width> -->
+
+		<!-- The window's initial height in pixels. Optional. -->
+		<!-- <height></height> -->
+
+		<!-- The window's initial x position. Optional. -->
+		<!-- <x></x> -->
+
+		<!-- The window's initial y position. Optional. -->
+		<!-- <y></y> -->
+
+		<!-- The window's minimum size, specified as a width/height pair in pixels, such as "400 200". Optional. -->
+		<!-- <minSize></minSize> -->
+
+		<!-- The window's initial maximum size, specified as a width/height pair in pixels, such as "1600 1200". Optional. -->
+		<!-- <maxSize></maxSize> -->
+
+        <!-- The aspect ratio of the app ("portrait" or "landscape" or "any"). Optional. Mobile only. Default is the natural orientation of the device -->
+
+        <!-- <aspectRatio></aspectRatio> -->
+
+        <!-- Whether the app will begin auto-orienting on launch. Optional. Mobile only. Default false -->
+
+        <!-- <autoOrients></autoOrients> -->
+
+        <!-- Whether the app launches in full screen. Optional. Mobile only. Default false -->
+
+        <!-- <fullScreen></fullScreen> -->
+
+        <!-- The render mode for the app (either auto, cpu, gpu, or direct). Optional. Default auto -->
+
+         <renderMode>direct</renderMode>
+
+        <!-- Whether the default direct mode rendering context allocates storage for depth and stencil buffers.  Optional.  Default false. -->
+        <!-- <depthAndStencil></depthAndStencil> -->
+
+		<!-- Whether or not to pan when a soft keyboard is raised or lowered (either "pan" or "none").  Optional.  Defaults "pan." -->
+		<!-- <softKeyboardBehavior></softKeyboardBehavior> -->
+
+		<!-- Display Resolution for the app (either "standard" or "high"). Optional, OSX-only. Default "standard" -->
+		<!-- <requestedDisplayResolution></requestedDisplayResolution> -->
+	<autoOrients>true</autoOrients>
+        <fullScreen>false</fullScreen>
+        <visible>true</visible>
+        <softKeyboardBehavior>none</softKeyboardBehavior>
+    </initialWindow>
+
+	<!-- We recommend omitting the supportedProfiles element, -->
+	<!-- which in turn permits your application to be deployed to all -->
+	<!-- devices supported by AIR. If you wish to restrict deployment -->
+	<!-- (i.e., to only mobile devices) then add this element and list -->
+	<!-- only the profiles which your application does support. -->
+	<!-- <supportedProfiles>desktop extendedDesktop mobileDevice extendedMobileDevice</supportedProfiles> -->
+
+	<!-- Languages supported by application -->
+	<!-- Only these languages can be specified -->
+	<!-- <supportedLanguages>en de cs es fr it ja ko nl pl pt ru sv tr zh</supportedLanguages> -->
+
+	<!-- The subpath of the standard default installation location to use. Optional. -->
+	<!-- <installFolder></installFolder> -->
+
+	<!-- The subpath of the Programs menu to use. (Ignored on operating systems without a Programs menu.) Optional. -->
+	<!-- <programMenuFolder></programMenuFolder> -->
+
+	<!-- The icon the system uses for the application. For at least one resolution,
+	specify the path to a PNG file included in the AIR package. Optional. -->
+	<icon>
+		<!-- http://help.adobe.com/en_US/air/build/WSfffb011ac560372f2fea1812938a6e463-8000.html#WSfffb011ac560372f-6fd06f0f1293d3b33ea-7ffc -->
+		<image29x29>assets/icons/icon-29.png</image29x29>
+		<image36x36>assets/icons/icon-36.png</image36x36>
+		<image40x40>assets/icons/icon-40.png</image40x40>
+		<image44x44>assets/icons/icon-44.png</image44x44>
+		<image48x48>assets/icons/icon-48.png</image48x48>
+		<image50x50>assets/icons/icon-50.png</image50x50>
+		<image57x57>assets/icons/icon-57.png</image57x57>
+		<image58x58>assets/icons/icon-58.png</image58x58>
+		<image60x60>assets/icons/icon-60.png</image60x60>
+		<image66x66>assets/icons/icon-66.png</image66x66>
+		<image72x72>assets/icons/icon-72.png</image72x72>
+		<image75x75>assets/icons/icon-75.png</image75x75>
+		<image76x76>assets/icons/icon-76.png</image76x76>
+		<image80x80>assets/icons/icon-80.png</image80x80>
+		<image87x87>assets/icons/icon-87.png</image87x87>
+		<image96x96>assets/icons/icon-96.png</image96x96>
+		<image100x100>assets/icons/icon-100.png</image100x100>
+		<image114x114>assets/icons/icon-114.png</image114x114>
+		<image120x120>assets/icons/icon-120.png</image120x120>
+		<image128x128>assets/icons/icon-128.png</image128x128>
+		<image144x144>assets/icons/icon-144.png</image144x144>
+		<image152x152>assets/icons/icon-152.png</image152x152>
+		<image167x167>assets/icons/icon-167.png</image167x167>
+		<image180x180>assets/icons/icon-180.png</image180x180>
+		<image192x192>assets/icons/icon-192.png</image192x192>
+		<image512x512>assets/icons/icon-512.png</image512x512>
+		<image732x412>assets/icons/icon-732.png</image732x412>
+		<image1024x1024>assets/icons/icon-1024.png</image1024x1024>
+	</icon>
+
+	<!-- Whether the application handles the update when a user double-clicks an update version
+	of the AIR file (true), or the default AIR application installer handles the update (false).
+	Optional. Default false. -->
+	<!-- <customUpdateUI></customUpdateUI> -->
+	
+	<!-- Whether the application can be launched when the user clicks a link in a web browser.
+	Optional. Default false. -->
+	<allowBrowserInvocation>true</allowBrowserInvocation>
+
+	<!-- Listing of file types for which the application can register. Optional. -->
+	<!-- <fileTypes> -->
+
+		<!-- Defines one file type. Optional. -->
+		<!-- <fileType> -->
+
+			<!-- The name that the system displays for the registered file type. Required. -->
+			<!-- <name></name> -->
+
+			<!-- The extension to register. Required. -->
+			<!-- <extension></extension> -->
+			
+			<!-- The description of the file type. Optional. -->
+			<!-- <description></description> -->
+			
+			<!-- The MIME content type. -->
+			<!-- <contentType></contentType> -->
+			
+			<!-- The icon to display for the file type. Optional. -->
+			<!-- <icon>
+				<image16x16></image16x16>
+				<image32x32></image32x32>
+				<image48x48></image48x48>
+				<image128x128></image128x128>
+			</icon> -->
+			
+		<!-- </fileType> -->
+	<!-- </fileTypes> -->
+
+    <!-- iOS specific capabilities -->
+	<!-- <iPhone> -->
+		<!-- A list of plist key/value pairs to be added to the application Info.plist -->
+		<!-- <InfoAdditions>
+            <![CDATA[
+                <key>UIDeviceFamily</key>
+                <array>
+                    <string>1</string>
+                    <string>2</string>
+                </array>
+                <key>UIStatusBarStyle</key>
+                <string>UIStatusBarStyleBlackOpaque</string>
+                <key>UIRequiresPersistentWiFi</key>
+                <string>YES</string>
+            ]]>
+        </InfoAdditions> -->
+        <!-- A list of plist key/value pairs to be added to the application Entitlements.plist -->
+		<!-- <Entitlements>
+            <![CDATA[
+                <key>keychain-access-groups</key>
+                <array>
+                    <string></string>
+                    <string></string>
+                </array>
+            ]]>
+        </Entitlements> -->
+	<!-- Display Resolution for the app (either "standard" or "high"). Optional. Default "standard" -->
+	<!-- <requestedDisplayResolution></requestedDisplayResolution> -->
+	<!-- Forcing Render Mode CPU for the devices mentioned. Optional  -->
+	<!-- <forceCPURenderModeForDevices></forceCPURenderModeForDevices> -->
+	<!-- File containing line separated list of external swf paths. These swfs won't be 
+	packaged inside the application and corresponding stripped swfs will be output in 
+	externalStrippedSwfs folder. -->
+	<!-- <externalSwfs></externalSwfs> -->
+	<!-- </iPhone> -->
+
+	<!-- Specify Android specific tags that get passed to AndroidManifest.xml file. -->
+    <!--<android> -->
+    <!--	<manifestAdditions>
+		<![CDATA[
+			<manifest android:installLocation="auto">
+				<uses-permission android:name="android.permission.INTERNET"/>
+				<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+				<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
+				<uses-feature android:required="true" android:name="android.hardware.touchscreen.multitouch"/>
+				<application android:enabled="true">
+					<activity android:excludeFromRecents="false">
+						<intent-filter>
+							<action android:name="android.intent.action.MAIN"/>
+							<category android:name="android.intent.category.LAUNCHER"/>
+						</intent-filter>
+					</activity>
+				</application>
+            </manifest>
+		]]>
+        </manifestAdditions> -->
+	    <!-- Color depth for the app (either "32bit" or "16bit"). Optional. Default 16bit before namespace 3.0, 32bit after -->
+        <!-- <colorDepth></colorDepth> -->
+        <!-- Indicates if the app contains video or not. Necessary for ordering of video planes with graphics plane, especially in Jellybean - if you app does video this must be set to true - valid values are true or false -->
+        <!-- <containsVideo></containsVideo> -->
+        <!-- Indicates if webContents (HTML/CSS/JavaScript) can be inspected in browser. Optional . Default value is 'false' -->
+        <!-- <webContentsDebuggingEnabled></webContentsDebuggingEnabled> -->
+    <!-- </android> -->
+	<!-- End of the schema for adding the android specific tags in AndroidManifest.xml file -->
+
+
+	<android>
+		<colorDepth>32bit</colorDepth>
+	    <containsVideo>true</containsVideo>
+		<manifestAdditions>
+			<![CDATA[
+			<manifest android:installLocation="auto">
+			    <!--See the Adobe AIR documentation for more information about setting Google Android permissions-->
+			    <!--Removing the permission android.permission.INTERNET will have the side effect
+		of preventing you from debugging your application on your device-->
+			    <uses-permission android:name="android.permission.INTERNET"/>
+			    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+			    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
+			    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
+			    <!--The DISABLE_KEYGUARD and WAKE_LOCK permissions should be toggled together
+		in order to access AIR's SystemIdleMode APIs-->
+			    <uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
+			    <uses-permission android:name="android.permission.WAKE_LOCK"/>
+			    <uses-permission android:name="android.permission.CAMERA"/>
+			    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
+			    <!--The ACCESS_NETWORK_STATE and ACCESS_WIFI_STATE permissions should be toggled
+		together in order to use AIR's NetworkInfo APIs-->
+			    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+			    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
+			    
+			    <uses-feature android:name="android.hardware.camera" android:required="false"/>
+			    <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>			    
+			    
+			    <application android:enabled="true">
+					<activity android:exported="true">
+					    <intent-filter>
+					        <action android:name="android.intent.action.MAIN" />
+					        <category android:name="android.intent.category.LAUNCHER" />
+					    </intent-filter>
+					
+					    <!-- Test for URL scheme -->
+					    <intent-filter>
+					        <action android:name="android.intent.action.VIEW" />
+					        <category android:name="android.intent.category.DEFAULT" />
+					        <category android:name="android.intent.category.BROWSABLE" />
+					        <!-- <data android:scheme="http" android:host="bbb.mobi" android:pathPattern=".*" />-->
+					        <data android:scheme="bigbluebutton" />
+					        <data android:scheme="bigbluebuttons" />
+					    </intent-filter>
+					    <!-- End Test for URL scheme -->
+					    
+					    <intent-filter>
+					        <action android:name="android.intent.action.VIEW" />
+					        <category android:name="android.intent.category.DEFAULT" />
+					        <category android:name="android.intent.category.BROWSABLE" />
+					        <data android:scheme="bigbluebuttons" />
+					    </intent-filter>
+					</activity>
+					<service android:name="com.juankpro.ane.localnotif.LocalNotificationIntentService"/>
+                    <receiver android:name="com.juankpro.ane.localnotif.AlarmIntentService" />
+                    <receiver android:name="com.juankpro.ane.localnotif.AlarmRestoreOnBoot" >
+                        <intent-filter>
+                            <action android:name="android.intent.action.BOOT_COMPLETED" />
+                        </intent-filter>
+                    </receiver>
+				</application>
+			</manifest>
+			
+		]]>
+		</manifestAdditions>
+	</android>
+	<iPhone>
+
+		<assetsCar>Assets.car</assetsCar>
+
+		<InfoAdditions>
+			<![CDATA[
+			<key>UIDeviceFamily</key>
+			<array>
+				<string>1</string>
+				<string>2</string>
+			</array>
+			
+			<key>NSCameraUsageDescription</key>
+            <string>Share your webcam to join video conference</string>
+			
+            <key>NSMicrophoneUsageDescription</key>
+            <string>Share your microphone to join audio conference</string>
+			
+			<key>CFBundleIconName</key>
+			<string>AppIcon</string>
+
+			<key>CFBundleURLTypes</key>
+			<array>
+				<dict>
+					<key>CFBundleURLSchemes</key>
+					<array>
+						<string>bigbluebutton</string>
+						<string>bigbluebuttons</string>
+					</array>
+					<key>CFBundleURLName</key>
+					<string>org.bigbluebutton</string>
+				</dict>
+			</array>
+			
+			<key>UIPrerenderedIcon</key> 
+            <true/>
+		]]>
+		</InfoAdditions>
+		<requestedDisplayResolution>high</requestedDisplayResolution>
+	</iPhone>
+	
+	<extensions>
+        <extensionID>com.freshplanet.AirCapabilities</extensionID>
+        <extensionID>com.juankpro.ane.LocalNotification</extensionID>
+    <extensionID>org.bigbluebutton.BBBRtmpPlayer</extensionID>
+    </extensions>
+</application>
diff --git a/clients/flash/air-client/src/org/bigbluebutton/air/common/views/IOSVideoView.as b/clients/flash/air-client/src/org/bigbluebutton/air/common/views/IOSVideoView.as
new file mode 100755
index 0000000000..afde87f67e
--- /dev/null
+++ b/clients/flash/air-client/src/org/bigbluebutton/air/common/views/IOSVideoView.as
@@ -0,0 +1,162 @@
+package org.bigbluebutton.air.common.views
+{
+	import mx.core.UIComponent;
+	
+	import spark.components.Image;
+	
+	import org.bigbluebutton.BBBRtmpPlayer;
+	import org.bigbluebutton.BBBRtmpPlayerEvent;
+
+	public class IOSVideoView extends UIComponent {
+		
+		protected var _image:Image;
+		
+		protected var player:BBBRtmpPlayer;
+		
+		protected var originalVideoWidth:Number;
+		
+		protected var originalVideoHeight:Number;
+		
+		public function IOSVideoView():void {
+			_image = new Image();
+			addChild(_image);
+		}
+		
+		public function startStream(uri:String, streamName:String, imgWidth:Number, imgHeight:Number, meetingId:String, authToken:String, externalUserId:String):void {
+			
+			if(player) {
+				close();
+			}
+			
+			this.originalVideoWidth = imgWidth;
+			this.originalVideoHeight = imgHeight;
+			
+			var url:String = uri + "/" + streamName + " live=1 conn=S:" + meetingId + " conn=S:" + externalUserId + " conn=S:" + authToken;
+			
+			player = new BBBRtmpPlayer(url);
+			
+			player.addEventListener(BBBRtmpPlayerEvent.NEW_IMAGE, onNewImage);
+			player.addEventListener(BBBRtmpPlayerEvent.CONNECTING, onConnecting);
+			player.addEventListener(BBBRtmpPlayerEvent.CONNECTION_FAILED, onConnectionFailed);
+			player.addEventListener(BBBRtmpPlayerEvent.DISCONNECTED, onDisconnected);
+			
+			player.play();
+			
+		}
+		
+		private function onConnecting(e:BBBRtmpPlayerEvent):void {
+			trace("EVENT: " + e.type + " MESSAGE: " + e.getMessage());
+		}
+		
+		private function onNewImage(e:BBBRtmpPlayerEvent):void {
+			_image.source = player.getLastImage();
+		}
+		
+		private function onConnectionFailed(e:BBBRtmpPlayerEvent):void {
+			close();
+		}
+		
+		private function onDisconnected(e:BBBRtmpPlayerEvent):void {
+			close();	
+		}
+		
+		public function close():void {
+			player.removeEventListener(BBBRtmpPlayerEvent.NEW_IMAGE, onNewImage);
+			player.removeEventListener(BBBRtmpPlayerEvent.CONNECTION_FAILED, onConnectionFailed);
+			player.removeEventListener(BBBRtmpPlayerEvent.DISCONNECTED, onDisconnected);
+			_image = new Image();
+		}
+		
+		override protected function updateDisplayList(w:Number, h:Number):void {
+			super.updateDisplayList(w, h);
+			
+			if (player) {
+				resizeForPortrait();
+			}
+		}
+		
+		public function resizeForPortrait():void {
+			// if we have device where screen width less than screen height e.g. phone
+			if (width < height) {
+				// make the video width full width of the screen 
+				_image.width = width;
+				// calculate height based on a video width, it order to keep the same aspect ratio
+				_image.height = (_image.width / originalVideoWidth) * originalVideoHeight;
+				// if calculated height appeared to be bigger than screen height, recalculuate the video size based on width
+				if (height < _image.height) {
+					// make the video height full height of the screen
+					_image.height = height;
+					// calculate width based on a video height, it order to keep the same aspect ratio
+					_image.width = ((originalVideoWidth * _image.height) / originalVideoHeight);
+				}
+			} // if we have device where screen height less than screen width e.g. tablet
+			else {
+				// make the video height full height of the screen
+				_image.height = height;
+				// calculate width based on a video height, it order to keep the same aspect ratio
+				_image.width = ((originalVideoWidth * _image.height) / originalVideoHeight);
+				// if calculated width appeared to be bigger than screen width, recalculuate the video size based on height
+				if (width < _image.width) {
+					// make the video width full width of the screen 
+					_image.width = width;
+					// calculate height based on a video width, it order to keep the same aspect ratio
+					_image.height = (_image.width / originalVideoWidth) * originalVideoHeight;
+				}
+			}
+			
+			_image.x = width - _image.width;
+			_image.y = height - _image.height;
+		}
+		
+		public function resizeForLandscape():void {
+			if (height < width) {
+				_image.height = width;
+				_image.width = ((originalVideoWidth * _image.height) / originalVideoHeight);
+				if (width < _image.width) {
+					_image.width = height;
+					_image.height = (_image.width / originalVideoWidth) * originalVideoHeight;
+				}
+			} else {
+				_image.width = height;
+				_image.height = (_image.width / originalVideoWidth) * originalVideoHeight;
+				if (height < _image.height) {
+					_image.height = width;
+					_image.width = ((originalVideoWidth * _image.height) / originalVideoHeight);
+				}
+			}
+		}
+		
+		public function rotateVideo(rotation:Number):void {
+			if (_image && stage.contains(_image)) {
+				removeChild(_image);
+			}
+			_image = new Image();
+			switch (rotation) {
+				case 0:
+					resizeForPortrait();
+					_image.x = width / 2 - _image.width / 2;
+					_image.y = height / 2 - _image.height / 2; // + topMenuBarHeight;
+					break;
+				case -90:
+					resizeForLandscape();
+					_image.x = (width / 2) - (_image.height / 2);
+					_image.y = (height / 2) + (_image.width / 2); // + topMenuBarHeight;
+					break;
+				case 90:
+					resizeForLandscape();
+					_image.x = (width / 2) + (_image.height / 2);
+					_image.y = (height / 2) - (_image.width / 2); // + topMenuBarHeight;
+					break;
+				case 180:
+					resizeForPortrait();
+					_image.x = width / 2 + _image.width / 2;
+					_image.y = (height / 2) + (_image.height / 2); // + topMenuBarHeight
+					break;
+				default:
+					break;
+			}
+			_image.rotation = rotation;
+			addChild(_image);
+		}	
+	}
+}
\ No newline at end of file
diff --git a/clients/flash/air-client/src/org/bigbluebutton/air/main/models/IUISession.as b/clients/flash/air-client/src/org/bigbluebutton/air/main/models/IUISession.as
index 7e28f65aca..e811a152b2 100755
--- a/clients/flash/air-client/src/org/bigbluebutton/air/main/models/IUISession.as
+++ b/clients/flash/air-client/src/org/bigbluebutton/air/main/models/IUISession.as
@@ -12,8 +12,8 @@ package org.bigbluebutton.air.main.models {
 		function get pageTransitionStartSignal():ISignal;
 		function get currentPage():String;
 		function get lastPage():String;
-		function popPage(animation:int = TransitionAnimationEnum.APPEAR):void;
-		function pushPage(value:String, details:Object = null, animation:int = TransitionAnimationEnum.APPEAR):void;
+		function popPage(animation:int = 0):void;
+		function pushPage(value:String, details:Object = null, animation:int = 0):void;
 		function get currentPageDetails():Object;
 	}
 }
diff --git a/clients/flash/air-client/src/org/bigbluebutton/air/main/views/LoadingScreenMediator.as b/clients/flash/air-client/src/org/bigbluebutton/air/main/views/LoadingScreenMediator.as
index cf2de0bb5b..23e01333e9 100755
--- a/clients/flash/air-client/src/org/bigbluebutton/air/main/views/LoadingScreenMediator.as
+++ b/clients/flash/air-client/src/org/bigbluebutton/air/main/views/LoadingScreenMediator.as
@@ -40,7 +40,9 @@ package org.bigbluebutton.air.main.views {
 			// If we are in the Flash Builder debugger the InvokeEvent will never be fired
 			if (Capabilities.isDebugger) {
 				//var url:String = "bigbluebutton://test-install.blindsidenetworks.com/bigbluebutton/api/join?fullName=AIR&meetingID=Demo+Meeting&password=mp&redirect=false&checksum=3fdf56e9915c1031c3ea012b4ec8823cedd7c272";
-				var url:String = "bigbluebutton://test-install.blindsidenetworks.com/bigbluebutton/api/join?fullName=User+2021828&meetingID=Demo+Meeting&password=ap&redirect=true&checksum=8751963df96437c7d435eac8124e4fb3ec147115";
+				//var url:String = "bigbluebutton://test-install.blindsidenetworks.com/bigbluebutton/api/join?fullName=User+2021828&meetingID=Demo+Meeting&password=ap&redirect=true&checksum=8751963df96437c7d435eac8124e4fb3ec147115";
+				//var url:String = "bigbluebuttons://dev21.bigbluebutton.org/bigbluebutton/api/join?meetingID=Demo+Meeting&fullName=AAA&password=mp&checksum=5516fb6f7d7330d0c02fd94c8e1fb683957e2da4a1c7013f66004b68148d4478";
+				var url:String = "bigbluebutton://206.47.241.19/bigbluebutton/api/join?meetingID=Demo+Meeting&fullName=AAA&password=mp&checksum=94cc8981bf215b13101fa4d3307d3aca8512578b23b91b7be8042f65abd4a007";
 				joinRoom(url);
 			}
 		}
diff --git a/clients/flash/air-client/src/org/bigbluebutton/air/video/views/WebcamDock.as b/clients/flash/air-client/src/org/bigbluebutton/air/video/views/WebcamDock.as
index ad7a0c3352..9d34d9f507 100755
--- a/clients/flash/air-client/src/org/bigbluebutton/air/video/views/WebcamDock.as
+++ b/clients/flash/air-client/src/org/bigbluebutton/air/video/views/WebcamDock.as
@@ -1,29 +1,48 @@
 package org.bigbluebutton.air.video.views {
 	import flash.net.NetConnection;
+	import flash.system.Capabilities;
 	
 	import spark.components.Group;
 	
-	import org.bigbluebutton.air.common.views.VideoView;
+	import org.bigbluebutton.air.common.views.IOSVideoView;
+	import org.bigbluebutton.air.common.views.VideoView;
 	
 	public class WebcamDock extends Group {
 		
 		private var _video:VideoView;
+		private var _iosVideoView:IOSVideoView;
 		
 		public function WebcamDock() {
 			super();
 			
-			_video = new VideoView();
-			_video.percentHeight = 100;
-			_video.percentWidth = 100;
-			addElement(_video);
+			if (Capabilities.version.indexOf("IOS") >= 0) {
+				_iosVideoView = new IOSVideoView();
+				_iosVideoView.percentWidth = 100;
+				_iosVideoView.percentHeight = 100;
+				addElement(_iosVideoView);
+			} else {
+				_video = new VideoView();
+				_video.percentHeight = 100;
+				_video.percentWidth = 100;
+				addElement(_video);	
+			}			
 		}
 		
-		public function startStream(connection:NetConnection, name:String, streamName:String, userId:String, oWidth:Number, oHeight:Number):void {
-			_video.startStream(connection, name, streamName, userId, oWidth, oHeight);
+		public function startStream(connection:NetConnection, name:String, streamName:String, userId:String, oWidth:Number, oHeight:Number, meetingId:String, authToken:String, externalUserId:String):void {
+			
+			if (Capabilities.version.indexOf("IOS") >= 0) {
+				_iosVideoView.startStream(connection.uri, streamName, oWidth, oHeight, meetingId, authToken, externalUserId);
+			} else {
+				_video.startStream(connection, name, streamName, userId, oWidth, oHeight);	
+			}
 		}
 		
 		public function closeStream():void {
-			_video.close();
+			if (Capabilities.version.indexOf("IOS") >= 0) {
+				_iosVideoView.close();
+			} else {
+				_video.close();
+			}	
 		}
 	}
 }
diff --git a/clients/flash/air-client/src/org/bigbluebutton/air/video/views/WebcamDockMediator.as b/clients/flash/air-client/src/org/bigbluebutton/air/video/views/WebcamDockMediator.as
index f1cc8bcee3..b8a956b99e 100755
--- a/clients/flash/air-client/src/org/bigbluebutton/air/video/views/WebcamDockMediator.as
+++ b/clients/flash/air-client/src/org/bigbluebutton/air/video/views/WebcamDockMediator.as
@@ -1,11 +1,12 @@
 package org.bigbluebutton.air.video.views {
+	import org.bigbluebutton.air.main.models.IConferenceParameters;
 	import org.bigbluebutton.air.main.models.IMeetingData;
 	import org.bigbluebutton.air.main.models.IUserSession;
 	import org.bigbluebutton.air.video.models.VideoProfile;
 	import org.bigbluebutton.air.video.models.WebcamChangeEnum;
 	import org.bigbluebutton.air.video.models.WebcamStreamInfo;
 	
-	import robotlegs.bender.bundles.mvcs.Mediator;
+	import robotlegs.bender.bundles.mvcs.Mediator;
 	
 	public class WebcamDockMediator extends Mediator {
 		
@@ -18,6 +19,9 @@ package org.bigbluebutton.air.video.views {
 		[Inject]
 		public var userSession:IUserSession;
 		
+		[Inject]
+		public var conferenceParameters:IConferenceParameters;
+		
 		override public function initialize():void {
 			meetingData.webcams.webcamChangeSignal.add(onWebcamChangeSignal);
 			
@@ -65,7 +69,7 @@ package org.bigbluebutton.air.video.views {
 		private function startWebcam(webcam:WebcamStreamInfo):void {
 			var videoProfile:VideoProfile = userSession.videoProfileManager.getVideoProfileByStreamName(webcam.streamId);
 			if (videoProfile) {
-				view.startStream(userSession.videoConnection.connection, webcam.name, webcam.streamId, webcam.userId, videoProfile.width, videoProfile.height);
+				view.startStream(userSession.videoConnection.connection, webcam.name, webcam.streamId, webcam.userId, videoProfile.width, videoProfile.height, conferenceParameters.meetingID, conferenceParameters.authToken, conferenceParameters.externUserID);
 				meetingData.webcams.viewedWebcamStream = webcam.streamId;
 			}
 		}
-- 
GitLab