Hello All,

Got a question about a Flex/FMS tutorial I am trying to use as a learning
guide in RED5.

The example viewed is at :

http://renaun.com/flex2/fms/VideoConferenceWDDJ/FlexVideoMain.html



The code for this example is at:
http://renaun.com/flex2/fms/VideoConferenceWDDJ/srcview/


Im not using the asc code as this is being called in my application.java for
just connection.
I used this one because it appears to be pretty simple as far as a straight
forward Shared Object example.

Can someone take a look at this and give me some guidance? I am not making
it to me Application.class file and am not connecting
to the client.

Any responses are appreciated.

Regards,

Lenny

I set up a new webapp for this example in red5 as videoconf

I setup my application.java as follows:

******************************************************************************************************************************

package org.red5.server.webapp.videoconf;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.red5.server.adapter.ApplicationAdapter;
import org.red5.server.api.IBandwidthConfigure;
import org.red5.server.api.IConnection ;
import org.red5.server.api.IScope;
//import org.red5.server.api.stream.IServerStream;
import org.red5.server.api.stream.IStreamCapableConnection;
import org.red5.server.api.stream.support.SimpleConnectionBWConfig ;
import org.red5.server.api.service.IPendingServiceCallback;
import org.red5.server.api.service.ServiceUtils;
import org.red5.server.api.so.ISharedObject;

public class Application extends ApplicationAdapter {

protected static Log log = LogFactory.getLog(Application.class.getName());

private IScope appScope;
   // private IServerStream serverStream;

/** [EMAIL PROTECTED] <[EMAIL PROTECTED]>} */
   @Override
public boolean appStart(IScope app) {
 appScope = app;
 //add users

 createSharedObject(appScope, "users_so", false);
 log.info("@Application.java: appStart is called.");

 return true;
}

/** [EMAIL PROTECTED] <[EMAIL PROTECTED]>} */
   @Override
public boolean appConnect(IConnection conn, Object[] params) {
 // Trigger calling of "onBWDone", required for some FLV players
 measureBandwidth(conn);



 //IScope myScope = Red5.getConnectionLocal().getScope();

 ISharedObject users_so = getSharedObject(appScope, "users_so", false);
 log.debug("appConnect is called:  "+getSharedObject(appScope, "users_so",
false));


 return super.appConnect(conn, params);
}

/** [EMAIL PROTECTED] <[EMAIL PROTECTED]>} */
   @Override
public void appDisconnect(IConnection conn) {

 super.appDisconnect (conn);
}
}

/*The Flex Client Side*/

<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2006 Renaun Erickson (http://renaun.com )

@ignore

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml";
xmlns="*"
initialize="haveCamera = ( Camera.getCamera() != null )"
layout="vertical" viewSourceURL="srcview/index.html">
<mx:Script>
 <![CDATA[
  import mx.collections.ArrayCollection;
  import mx.controls.Alert ;

  [Bindable]
  private var haveCamera:Boolean;

  [Bindable]
  public var nc:NetConnection;

  public var users_so:SharedObject;
  [Bindable]
  public var dpUsers:ArrayCollection;

  /**
   *  This function creates the FMS connection and sets the Status event
handler
   */
  public function createConnection():void
  {
   //Logger.debug( "MAIN:createConnection" );
   // Check the user name length
   if( txtName.text.length > 0 ) {
    // Create Connection and setup Events
    nc = new NetConnection();
    nc.client = this;
    nc.objectEncoding = ObjectEncoding.AMF0 ;
    nc.addEventListener( NetStatusEvent.NET_STATUS, netStatusHandler );
    // A simple Identifier for the asc side
    var identifier:String = txtName.text;
    while( identifier.search( " " ) > 0 )
     identifier = identifier.replace( " ", "_" );
    nc.connect( "rtmp://10.2.0.10/videoconf", txtName.text, identifier );
   } else {
    Alert.show( "Please provide a name for the video chat connection!" );
   }
  }

  /**
   * Waits for any status from the connection to FMS
   */
  public function netStatusHandler( event:NetStatusEvent ):void
  {
   //Logger.debug( "MAIN:connectionSuccess:Success" );
   switch( event.info.code ) {
    case "NetConnection.Connect.Success ":
     clientID = nc.clientID;
     // Connection succeeded now create components
     connectComponents();
     // Change to Video view
     vsMain.selectedChild = pnlVideo;
    break;
    case "NetConnection.Connect.Rejected":
     Alert.show( "The number of users has been limited for this demo,
please try again in a few minutes.", "Restricted Usage" );
    break;
   }

  }

  /**
   * Method called to create the components
   */
  public function connectComponents():void
  {
   //Logger.debug( "MAIN:connectComponents" );
   // Simple User shared object and event handling
   SharedObject.defaultObjectEncoding  = flash.net.ObjectEncoding.AMF0;
   users_so = SharedObject.getRemote("users_so", nc.uri, false);
   users_so.addEventListener( SyncEvent.SYNC, usersSyncHandler );
   users_so.connect( nc );
  }

  /**
   * Listens for any change to the users shared object
   */
  public function usersSyncHandler( event:SyncEvent ):void
  {
   //Logger.debug( "MAIN:usersSyncHandler" + event.target.data );
   var results:Object = event.target.data;
   var usersArray:Array = new Array();
   for( var a:String in results ) {
    var obj:Object = new Object();
     obj.name = results[ a ];
    obj.identifier = a;
    usersArray.push( obj );
   }
   dpUsers = new ArrayCollection( usersArray );
  }

  /**
   * Closes connections and handles the logout
   */
  public function logout():void
  {
  //Logger.debug( "MAIN:connectComponents" );
   users_so.close();
   nc.close();
   dpUsers = null;
   users_so = null;
   nc = null;
   vsMain.selectedChild = pnlLogin;
  }

 ]]>
</mx:Script>

<mx:ViewStack
 id="vsMain"
 width="100%" height="100%">
 <!-- Login Panel -->
 <mx:Panel
  id="pnlLogin"
  title="Red5, Flex and FMS Video Conference Demo">
  <mx:Form>
   <mx:FormItem label="Name:">
    <mx:TextInput
     id="txtName"
     enabled="{ haveCamera }" />
   </mx:FormItem>
   <mx:Button
    label="Submit"
    click="createConnection()"
    enabled="{ haveCamera }" />
   <mx:Label text="{ ( haveCamera ) ? '':'Now camera is found!' }" />
  </mx:Form>
 </mx:Panel>
 <!-- Video Panel -->
 <mx:Panel
  id="pnlVideo"
  width="100%" height="100%"
  title="Welcome { txtName.text }!"
  layout="vertical">

  <mx:Tile
   height="100%" width="100%">
   <mx:Repeater
    id="rpUsers"
    dataProvider="{ dpUsers }">
    <VideoPod
     nc="{ nc }"
     isSender="{ rpUsers.currentItem.name<http://rpusers.currentitem.name/>==
txtName.text }"
     userItem="{ rpUsers.currentItem }" />
   </mx:Repeater>
  </mx:Tile>
  <mx:Label
   width="100%"
   text="Video Quality is set really low to not use up all my bandwidth!"
   color="0xFF0000" />
  <mx:ControlBar>
   <mx:Button
    label="Logout"
    click="logout()"/>
  </mx:ControlBar>
 </mx:Panel>

</mx:ViewStack>

</mx:Application>

/*End Flex client side */
_______________________________________________
Red5 mailing list
[email protected]
http://osflash.org/mailman/listinfo/red5_osflash.org

Reply via email to