I’ve worked with both Chris Allen and John Grden on some projects for my employer. During that time, I can’t count the number of times I heard about Red5, but I never got a chance to try it out.
This past week I caught Chris’ “Building Red5 Applications” session at FlashForward. I finally got up the motivation to download and try it out.
Here’s my experience. It’s my first time playing with Red5 (but I have plenty of java & eclipse experience) so it’s almost guaranteed I’m not doing everything the “right way”. But this way worked for me, maybe it’ll help someone else. If it does help you, please leave a comment. Writing this up takes a while and I’m not going to bother in the future for other things if nobody gets value out of it.
Attempt #1
I wanted to try out the .tar.gz package so I would know how to deal with it on Linux as well as Windows. That way I’d be able to deploy anything I built on my webhost fairly easily.
I unpacked it, ran ant, and let it all build. So far so good.
Then I ran the red5.bat file. Lots of exceptions. Like millions, maybe billions, I lost track. Seems my sample applications weren’t found. I poked around a bit, but no good. Screw this.
Attempt #2
I went for the windows installation package. That unpacked everything and the server ran fine. I could open up a web browser to http://localhost:5080/ and view the demos, admin panel, etc.
Note: The default admin username/password is admin/admin. You can change that in conf/tomcat-users.xml I’d suggest changing it.
Eclipse
So now I want to get it rocking with eclipse. I launch eclipse (I’m lazy and like things easy so I use easy eclipse.)
I select File->Import->Existing project, then pick my Red5 project. Bamn, I got an eclipse project set up.
But there’s compile errors.
Severity and Description Path Resource Location Creation Time Id
Project red5_server is missing required source folder: ‘test’ red5_server Build path 1190574481375 173990
The project cannot be built until build path errors are resolved red5_server Unknown 1190574530687 173992
So I closed the red5 eclipse project, fired up a text editor, and looked in my .classpath file inside the red5 folder. It had the offending entry.
<classpathentry kind=”src” path=”test”/>
Note… I delete this line later on:
<classpathentry kind=”con” path=”org.jayasoft.ivyde.eclipse.cpcontainer.IVYDE_CONTAINER/ivy.xml/test,”/>
You might as well do it now since you’re in there.
So I removed it, and repopened eclipse.
A quick Project->Clean and…
3656 Errors
Ok, seems it doesn’t see some libraries. Right click on my project, select properties. Go into “Java Build Path”, select the “Libraries” tab, click the “Add Jars…” button, and add all of the .jar files in the lib directory.
A quick Project->Clean and…
0 Errors
WOOT
Running it from Eclipse
Now I go into src/org/red5/server, find the StandAlone.java, right click it, and select “Run as…”->”Java Application”.
I check my eclipse console panel and get a bunch of lines the last one being:
[INFO] 2007-09-23 15:14:20,875 main:( org.red5.server.Standalone.main ) Startup done in: 5875 ms
Nice.
I point a web browser at: http://localhost:5080/ and see that the red5 server is indeed running. I launch the ball demo and push the connect button. Then I make a new browser window and launch the demo again. When I move the red5 logo in one window, it moves in the other. That means it’s all working.
Eclipse also helpfully added an entry to my run button (the green circle with the play button) in my toolbar so I don’t have to find the StandAlone.java file again.
I want a quick launch button for debugging too, so I kill the server (click the red square on the console panel) and right click the StandAlone.java and select “Debug as java application”. The server starts in debug mode, and eclipse adds it to my debug button on the toolbar. (the green beetle button)
Making something
Now, I want to make something. But first, I want to get rid of the samples. So I kill the server, close the eclipse project, and edit the .classpath file again. I know there’s a way to do this through eclipse, but I find editing the file quicker.
I get rid of these entries:
<classpathentry excluding=”.svn/*” kind=”src” path=”webapps/echo/WEB-INF/src”/>
<classpathentry excluding=”.svn/*” kind=”src” path=”webapps/tutorial/WEB-INF/src”/>
<classpathentry excluding=”.svn/*” kind=”src” path=”webapps/fitcDemo/WEB-INF/src”/>
<classpathentry excluding=”.svn/*” kind=”src” path=”webapps/oflaDemo/WEB-INF/src”/>
<classpathentry excluding=”.svn/*” kind=”src” path=”conf”/>
<classpathentry excluding=”.svn/*” kind=”src” path=”webapps/test/WEB-INF/src”/>
<classpathentry excluding=”.svn/*” kind=”src” path=”webapps/midiDemo/WEB-INF/src”/>
<classpathentry excluding=”.svn/*” kind=”src” path=”webapps/agile/WEB-INF/src”/>
And I add one for my project, I’m going to work on something for AgileAgenda, so I’ll call it agile.
<classpathentry excluding=”.svn/*” kind=”src” path=”webapps/agile/WEB-INF/src”/>
Then I go rename the “echo” example to “agile”, and delete all the other samples (I deleted admin too, not sure if that was a good idea or not)
Open up the project in Eclipse again.
And I don’t see my agile webapp. WTF? Oh yeah… Eclipse is retarded. Right Click->Refresh and it shows up.
I want to rename the Application class in my webapps folder (see the picture).
Luckily, Eclipse rocks Java more than it rocks Flex, so I can just right click, select refactor, and pick move. Then I click “Create Package” enter in com.agileagenda.services and click ok a bunch of times.
I delete the rest of the webapp echo source tree.
A project->Clean and…
I think I broke something. Oh well.
Project->Properties->Builders and remove the invalid entry.
Project->Clean and build successful.
I hit the debug button, and search the console output. No errors reported and:
[INFO] 2007-09-23 15:44:45,375 main:( /agile.invoke0 ) Initializing Spring root WebApplicationContext
So I guess it found my new app. Yay!
Kill the server.
So I go back to my Application class and make a new method.
public function login(username:String, password:String) : Boolean
{
return true;
}
Then I remember that this is Java and not Actionscript so I rewrite it…
public boolean login(String username, String password)
{
return true;
}
I go to my project menu and turn on “Build Automatically” and get…
Severity and Description Path Resource Location Creation Time Id
Unbound classpath container: ‘org.jayasoft.ivyde.eclipse.cpcontainer.IVYDE_CONTAINER/ivy.xml/test,’ in project red5_server red5_server Build path 1190576857156 182811
WTF?
Close the project, open my .classpath file, remove the offending line:
<classpathentry kind=”con” path=”org.jayasoft.ivyde.eclipse.cpcontainer.IVYDE_CONTAINER/ivy.xml/test,”/>
Open the project, Project->Clean, build success.
I have no idea why that didn’t bite me earlier.
I press the debug button. The red5 server launches.
[INFO] 2007-09-23 15:51:26,062 main:( org.red5.server.Standalone.main ) Startup done in: 4937 ms
Yay.
Writing some actionscript
Now that I have a (dumb) login method, I want to try it out in Flex.
I have a “Sandbox” AIR application set up in Eclipse that I use when I want to quickly play with something. I highly suggest everyone do that. So I open my sandbox, open the MXML and create a quick login form.
<mx:Label x="26" y="43" text="Username:"/>
<mx:TextInput x="101" y="41" id="txtUsername"/>
<mx:TextInput x=”101″ y=”71″ id=”txtPassword” displayAsPassword=”true”/>
<mx:Label x=”26″ y=”73″ text=”Password”/>
<mx:Button x=”196″ y=”101″ label=”Login” click=”onLoginClick()”/>
<mx:Label x=”58″ y=”148″ text=”Label” id=”lblResult” width=”281″/>
And then add in some code (remembering that this is Actionscript!)…
private var netConn:NetConnection;
protected function onLoginClick() : void
{
NetConnection.defaultObjectEncoding = flash.net.ObjectEncoding.AMF0;
SharedObject.defaultObjectEncoding = flash.net.ObjectEncoding.AMF0;
netConn = new NetConnection();
netConn.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus );
netConn.addEventListener( SecurityErrorEvent.SECURITY_ERROR, errorHandler );
netConn.addEventListener( AsyncErrorEvent.ASYNC_ERROR, errorHandler );
netConn.addEventListener( IOErrorEvent.IO_ERROR, errorHandler );
netConn.connect(“rtmp://localhost/agile”);
}
protected function sendLogin() : void
{
var responder:Responder = new Responder( onLoginResult );
netConn.call(“login”,responder,txtUsername.text, txtPassword.text);
}
protected function onLoginResult( result:Boolean ) : void
{
lblResult.text = result ? “Login Success!” : “Login Fail!?!”;
}
protected function onNetStatus(event:NetStatusEvent) : void
{
switch( event.info.code )
{
case “NetConnection.Connect.Success”:
lblResult.text = “Connected, sending login”;
sendLogin();
break;
default:
lblResult.text = “ERROR!! ” + event.toString();
break;
}
}
protected function errorHandler(event:Event) : void
{
lblResult.text = “ERROR! ” + event.toString();
}
I start the server, run my sandbox app, click the login button, and get a connection error. Something went wrong somewhere.
I bet it’s a configuration problem. I open webapps/agile/WEB-INF and notice 3 config files.
in web.xml I make this change:
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>/agile</param-value>
</context-param>
In red5-web.xml I make this change:
<bean id=”web.handler”
class=”com.agileagenda.services.Application”
singleton=”true” />
In red5-web.properties, I make this change:
webapp.contextPath=/agile
Kill the server, restart it (debug mode), try my app again. “Login Sucess” YES!
Now I head into the java class and put a breakpoint on the “return true;” line. I hit the button on my AIR app and Eclipse correctly breaks on the line. Yay!
I inspect the username and password parameters, and the values I had filled into the AIR app are present. Yay!
I’m now to the point where I can start actually writing my application.






Hey Marc,
Great post man! In the future we are planning on releasing Eclipse projects with Red5 already set up in them, so you don’t have to go through the hassle of setting all of that up. But it is very important to understand what is going on there, so this little rundown you wrote is very useful to people.
Thanks again for posting this! You da man! \m/
yeah very useful, I’ll soon give it a whirl – and I am new to Java…
Thanks for the tutorial.
I followed all steps till the “Writing some actionscript” section, I didn’t understand the sandbox thing.
Can someone explain the same thing with Flash as client side.
thanks.
Hi Marc,
I was struggling for days to setup my Eclipse environment to work with Red5 but to no avail .. (I don’t have any Java experience and only basic Eclipse knowledge).
But thanks to your tutorial it’s working like a charm now.
Thanks a bunch!
Hello Marc, a great post..
Would you know of anyone that I could pay to do a server (linux CentOS) of Red5 and all needed files ??
Hello Marc, a great post..
Would you know of anyone that I could pay to do a server (linux CentOS) of Red5 and all needed files ??
Nice tutorial,
I’ve used Red5 in Eclipse by checking out the trunk/the branch I want from their SVN. With the IvyDE plugin the whole thing works straight away from Eclipse.
Very Impressive
thanks for this post, made me smile a couple of times and also contains some handy code snippets.
Hi friend, thanks for the post. I want to install red5 on a linux server, but I don’t understand how to create a streamimg point on server, and I only will use it for broadcasting live video/audio. Where can I start? I hope your kindly answer? I’m a dummy with this tech. send me any info could help me to bergmp at gmail dot com
thanks in advance!
Thanks a lot for this great tutorial. I unfortunately did it without eclipse
and boy was it a pain!
hi,
Great code.thanks for post it.
Hey, nice post
I did everything but i could never run the demos
. I got an “Unable to connect to red5.googlecode.com/svn/snapshots/” I don’t know why, so I cant intsall demos.
In current version is impossible to debug like this.
You must create a debug configuration, add the red5.jar to the libraries and then select the main class.
After this when you run it will complaint that red5Config(=”red5.xml”) is not found, you modify this to “conf/red5.xml”, it works, BUT then it drops dead showing an exception class path resource [red5.properties] cannot be opened because it does not exist … blah
man…..I’ve done some “things”….with FMS and…..it is really easy……..all this red5 is such a nightmare……..I gave it a try….cuz……I’ve heard some many things about it..(it is “open source” most of all)……so Im about to give up……..back to FMS……
The difficulty with Red5 is that it is not a simple ‘black box’ approach to recording and playing A/V streams to/from Flash/Flex .SWF applications. Not knowing any JAVA whatsoever is quite an obstacle for the uninitiated naive Flash developer.
Personally, I’m neither a Flash/Flex developer nor a Java developer. Prior to working with Red5, I had concentrated on FlexBuilder and learning some ActionScript. Now I realize that I must also delve into Java. Quite a learning curve.
Would have been a lot simpler to have a ‘black box’ server. I see many people using the oflaDemo/streams directory for everything since it is already there and it works – that is what I am currently doing until I learn enough other stuff to do something different.
Also would be nice to know the bare minimum required to simply do a connect to “rtmp:/myserver/mydirectory/myfile.flv’ I have no need for anything else. I don’t need any server side processing except for it to save and read specific video stream files from a specific location. My guess is that is all most people want and what we have is way more than that.
This is woefully dated but I can’t believe Red5 doesn’t have a forum (or at least an obvious one).
Do you know of Red5 supports custom classes via SharedObject?
For example, FMS3 seems to handle things like strings just fine but if I made a custom type in AS3 and send it through an SO, it has… issues.