Rss Directory > Computer > Software > Technology Makes Life Easier
 
Open Dialect is the name of the software we are going to talk about in this post. To explain more about this software, I would like to answer few questions that everyone would be curious to know when we talk about Open Dialect the Open Source Flash IDE. The answers to these questions help you understand this software.

  • What is Open Dialect?

  • Why we are calling it the future of open source flash IDEs?

  • How is it going to serve your flash application development needs?

  • What are some of the main features of Open Dialect?

  • Is it operating system independent?

  • Does it also support the creation of Adobe AIR applications?

  • What does it need from the Flash and open source communities?

Answer 1: Open Dialect is an open source Flash IDE based on Flex. Open Dialect is written in C# using the .NET 2.0 framework (or Mono 1.9.1). The goal of the project is to create a tool that allows you to create Interactive Learning Environments that interact with System Dynamics Models over the internet. In simpler terms it allows you to easily and quickly design rich internet applications based on Flash.

Answer 2: Flash is a powerful tool used by many and having an open source and Linux compatible alternative implementation of this tool is something you can not ignore. I believe that Open Dialect is the best open source Flash IDE, and will continue to be in the future.

Answer 3: Open Dialect lets you create open source flash applications. You are able to generate Flash 9 SWFs with Open Dialect. It will allow anyone from a flash expert to a flash noob to create rich internet applications very easily and quickly. Open Dialect supports 17 different components, which respond to a wide range of user input and interaction With Open Dialect; you will be provided everything that is required to develop flash applications in an open source environment.

Answer 4: Open Dialect is packed with cool features. Some of the features are-

  • Its free and Open Source (GPL)

  • It allows quick and easy application development no matter what your level of expertise is.

  • It has an action script code wizard for beginners.

  • It also allows experts to enter code without the wizard.

  • It has a timeline to facilitate animations (and tweening is done automatically)

  • It supports something we call "Pages" which are essentially different screens in an application or slides like in PowerPoint so you can now design your applications like you design your PowerPoint’s, and transitioning between pages is simple and easy.

  • It supports the creation of Adobe AIR content.
Answer 5: Yes, Open Dialect is operating system independent. It works on Windows, Linux and can be run in OSX (with a little extra effort at this time).

Answer 6: Open Dialect as I already said is the future of open source Flash IDEs. Not only you can generate Flash 9 SWF, you can also create Adobe AIR applications for you and your client’s desktops.

Answer 7: Open Dialect can become a whole lot more exciting if it gets support from Flash, community. The software is very powerful and has a great future ahead. All it needs is the support to make it a big success. If you like Open Dialect and you think that it can make your life easier with open source flash applications, you can always take part in its development. Open Dialect especially needs support from communities for its deployment on Linux and OSX.

Very recently Open Dialect released Open Dialect 0.6.0 which has more new features as well as enhancements over existing features. Open Dialect is committed to deliver its best to the open source communities. I would request open source communities to be a part of the success of Open Dialect by providing more and more support and motivation to its development team.

More details about Open Dialect are available here. You will also be interested to read the need for a System Dynamics based Open Source, Online Interactive Learning Environment Creation Tool. You can find it here.
You can see the power of Open Dialect with the very basic demo here and http://www.t21northamerica.com/ShowerILE.html

Related Articles:-
Open Dialect -An Open Source Flash IDE Now Supports Linux
Open Dialect - Open source Flash IDE
The only big thing in the internet which was hidden from search engines (Google, Yahoo) was the flash (.swf) files. But according to an announcement made by Adobe Systems today, flash files are no more hidden from these search engines. Adobe is providing optimized flash player technology to Google and Yahoo to enhance indexing of .swf files by search engines.

There are millions of flash users with millions of website using flash technology to develop websites and from Search Engine Optimization point of view, it was not advisable to use flash, but now with this news, there is a clear sign of tremendous growth of flash player technology in near future.

Let see what adobe is saying.
“Until now it has been extremely challenging to search the millions of RIAs and dynamic content on the Web, so we are leading the charge in improving search of content that runs in Adobe Flash Player,” said David Wadhwani, general manager and vice president of the Platform Business Unit at Adobe. “We are initially working with Google and Yahoo! to significantly improve search of this rich content on the Web, and we intend to broaden the availability of this capability to benefit all content publishers, developers and end users.”
Google and Yahoo! both are working with Adobe in order to bring this as soon as possible in the future updates of their search engines.

Read more in the press release from Adobe.
In this post I will explain how to make a simple Two-Way A/V Chat Application with FMS3.

As we know that FMS3 application is the reference name we use in RTMP URL while connecting to FMS3 server. It's the folder name we create on server side. The chat application say "simplechat" will have two modules. An application can have several modules. Let's say we have two modules name Test1 and Test2. Both Test1 and Test2 will share the same FMS3 application and will connect to server. Both modules will receive the streams of each other when connect to server.

Below are the steps to start with chat application-

1: Create a new Flash File and name it to Test1.fla

2: In the Document Class text box in the Property inspector of flash document, write Test1

The simple interface of this application could be-

FMS3 Chat

3: Create an ActionScript 3.0 file and name it to Test1.as and write the following lines in it.

package
{
import flash.media.Camera;
import flash.media.Microphone;
import flash.media.Video;
import flash.events.NetStatusEvent;
import flash.display.Sprite;
import flash.net.NetConnection;
import flash.net.NetStream;

public class Test1 extends Sprite{

private var netConnection:NetConnection;
private var rtmpStr:String;
private var nsSubscribe:NetStream;
private var nsPublish:NetStream;
private var camera:Camera;
private var microphone:Microphone;
private var user1Video:Video;
private var user2Video:Video;

public function Test1 (){

rtmpStr="rtmp://localhost/simplechat"; //localhost can be replaced with your LAN IP or remote server IP points to FMS server.

attachCamera();
attachMicrophone();
attachVideoObjects();

netConnection=new NetConnection();
netConnection.addEventListener (NetStatusEvent.NET_STATUS,checkForConnection);
netConnection.connect(rtmpStr);

}

private function checkForConnection(event:NetStatusEvent):void{

event.info.code == "NetConnection.Connect.Success";

if (event.info.code){
nsPublish=new NetStream(netConnection);
nsPublish.attachAudio (microphone);
nsPublish.attachCamera (camera);
nsPublish.publish("user1","live");
nsSubscribe=new NetStream(netConnection);
nsSubscribe.play("user2");
user2Video.attachNetStream(nsSubscribe);
}
}

private function attachCamera(){

camera=Camera.getCamera();
camera.setKeyFrameInterval (9);
camera.setMode (240,180,15);
camera.setQuality (0,80);
}

private function attachMicrophone(){

microphone=Microphone.getMicrophone();
microphone.gain=80;
microphone.rate=12;
microphone.setSilenceLevel(15,2000);
}

private function attachVideoObjects(){

user1Video=new Video(camera.width,camera.height);
addChild(user1Video);
user1Video.x=25;
user1Video.y=35;
user1Video.attachCamera(camera);
user2Video=new Video(camera.width,camera.height);
addChild(user2Video);
user2Video.x=(user1Video.x+ camera.width +15);
user2Video.y=user1Video.y;
}
}
}

4: Save the Test1.as file and then publish Test1.fla to generate swf, html and JavaScript file.

5: Repeat the step 2, 3 and 4 with little change. In the Document Class text box in the Property inspector of flash document, write Test2
Now the .fla file will be named as Test2.fla and .as file will be named as Test2.as.

The changes in the Test2.as file will be-

public function Test2() in place of public function Test1()

nsPublisher.publish("user2","live"); in place of nsPublisher.publish("user1","live");

nsSubscriber.play("user1"); in place of nsSubscriber.play("user2");

6: Save the Test2.as file after these changes and publish the Test2.fla file to generate swf, html and JavaScript file.

Test the application with two users on two different computers with Mic and Camera. One user will open Test1.html file and other user will open Test2.html file and both will see each other's video as given in below picture.

Two Way Chat
This was the simplest two-way A/V chat application with FMS3. The following classes were used in this tutorial.

Camera
Microphone
Video
NetStatusEvent
Sprite
NetConnection
NetStream

You can read more about these API from the LiveDocs.

You can also extend this example to work with server side script as well.
I remember when many users were looking for a solution to secure the RTMP stream, then i worked with Stunnel(Secure Your Red5 Applications With Stunnel) to implement the RTMPS functionality which FMS provides. That time i was able to achieve this, but this was kind of hack.
Today morning, i read the post of Paul Gregorie that Red5 has come up with a real RTMPS solution.
Below in this post, i am following him.


RTMPS is RTMPT over SSL. Here are the steps to setup Red5 to support RTMPS-

Create a self-signed certificate

This process is pretty much known to everyone who worked with signed applet kind of stuffs. Here it is-

keytool -genkey -alias red5 -keyalg RSA -keysize 512 -validity 3650 \
-keystore keystore -keypass password -storepass password \
-dname "CN=localhost,OU=Red5,O=Red5,L=Henderson,ST=NV,C=US"


The above command is having the options that can be modified according to your requirement like DName fields: Location (L), State (ST), and Country (C).

The above command generate a file called "keystore". We will use it later.

Get Red5

RTMPS implementation is not the part of Red5 0.7.0, so in order to use RTMPS, you need to take the code from Red5 SVN repository from revision 2819 onwards.

Configuration

Now you have Red5 setup in your machine, copy the "keystore" file we created earlier step into conf directory (overwrite the current keystore file in the directory if prompted). The configuration file containing the parameter for RTMPS is conf/red5-core.xml and you will need to update the RTMPS section if you changed the keystore password. The other configuration file is red5.properties, it contains the port assignments for the supported protocols. Make sure that you have your ports configured correctly.

According to Adobe, the default port for RTMPS is 443, normally reserved for HTTPS. If you change this port to something other than 443 you will need to update your NetConnection urls with the correct port.

For advance options on SSL configuration, this page will help.

Test

Start the server and test your applications. Go to http://localhost:5080/demos/oflaDemo.swf and change the rtmp url to rtmps://localhost/oflaDemo.

You can also enable debugging option, here it is how-

Debugging

To see what is going on with SSL at a really low level you can enable this option in your startup:

-Djavax.net.debug=ssl It will cause additional information to be displayed on the console.

Red5 is getting hot and hot everyday with new features. Waiting to hear support of many new features in near future. Great work Red5 Team.

See Also:
Secure Your Red5 Applications With Stunnel

Reference:-
RTMPS in Red5
In a prerelease of Adobe Flash Player 10 code name "Astro", the noticable features are audio and video features which will be available with proposed future release of Adobe Flash Media Server.

Dynamic Streaming

As streaming is dependent on newtwork condition, Dynamic Streaming will provide best quality video and will be auto adjustable based on bandwidth availability. Video streams over RTMP from proposed future releases of Flash Media Server can dynamically change bitrate as network conditions change.

RTMFP (Real Time Media Flow Protocol)

According to Adobe- RTMFP provides a UDP-based secure network transport alternative to RTMP-over-TCP. To take advantage of the feature you will need to establish a net connection via future releases of Flash Media Server or other Adobe server products. UDP (User Datagram Protocol) is an efficient and standardized Internet protocol for delivering media assets because of its support for lossy delivery, improving performance of real time communication. RTMFP is always encrypted which helps protect media delivery. This technology is a result of Adobe's acquisition of Amicima, Inc. in 2006. To know more about this new protocol, read RTMFP FAQ.

UDP Streaming. What would be the reaction of Red5 team?

Speex Audio Codec

The new, higher fidelity Speex voice codec that delivers the lowest-latency audio experience.

The complete feature list is here.


Reference:-
Adobe Flash® Player 10 beta
Today, I read two interesting blog posts "360 Degree Interactive Video" and "Multibitrate Support Coming to Flash Player and FMS (?)" written by Stefan Richter from Flashcomguru.com talking about 360 degree interactive video served by flash and possible upcoming features in flash player and FMS.
360 degree videos from Immersive Media are looking very impressive. Just drag your mouse on any direction you want to view within the video once it starts playing.



More videos are here at - http://demos.immersivemedia.com/onlinecities/

Here is the video where kevin Towers shows how Flash Media Interactive Server, Flash Media Streaming Server and Flash Media Rights Managment Server are leading the way in the protection and streaming of digital video today.



Reference:-
360 Degree Interactive Video
Multibitrate Support Coming to Flash Player and FMS (?)
Adobe at NAB 2008- Flash Media Server
Few days back, I wrote about an interesting application called Open Dialect, a free open source flash IDE written in C# using .Net 2.0 framework.

In my previous post, I mentioned that OpenDialect team is porting this application on Linux too. Today they have announced the release of Open Dialect 0.2.0 (Linux/Windows Flash IDE).

Open Dialect 0.2.0 supports .SWF creation and testing on Linux and Windows, with partial support for OS X 10.5.

You can check Open Dialect in action here at- http://www.t21northamerica.com/T21NorthAmerica.html

To know more about this release or Open Dialect, follow the links in reference.

Reference:-
Open Dialect, Open source alternate of flash IDE
About Open Dialect
Open Dialect on Osflash
Screenshots
Open Dialect is an open source Flash IDE based on Flex. It's written in C# using .Net 2.0 framework. They call it Dynamic Inter-Active Learning Environment Creation Tool. The software is meant for creating interactive learning Environments.

To know in detail about the this open source flash IDE, Follow the Open Dialect wiki here.

Below is the screenshot of open Dialect IDE.



More screenshots are available here.

Open Dialect 0.1.1 is available for Windows but they are porting it on Linux and OSX using MONO and GTK+.

The available demo for showing the capabilities of Open Dialect is here.

References:-

Open Dialect
Open Dialect HomePage
Open Dialect Main Website
With the development of Adobe flash media server and Red5 flash server new protocols are also coming in picture.
Here are some protocols for streaming of Audio/Video using Flash media server and Red5.

RTMP Real Time Messaging Protocol

RTMP is a TCP based propriety protocol developed by Adobe System for the purpose of streaming Audio/Video data between Flash Player and media server.

RTMPT Real Time Messaging Protocol with Tunnel

RTMPT is a variation of RTMP which works behind the firewall as well. It works on Port 80 and encapsulate the RTMP data in HTTP request.

RTMPS Real Time Messaging Protocol Secure

RTMPS is again a variation of RTMP which works over secure HTTPS connection.

RTMPE Real Time Messaging Protocol with Encryption

RTMPE is a new 128 bit encrypted protocol developed by Adobe systems for securing the stream data between flash client and server. It's lightweight than SSL.
It's a DRM solution from Adobe for flash.

RTMPTE Real Time Messaging Protocol with Encryption and Tunnel

RTMPTE is a RTMPE tunneling over HTTP on port 80.

MRTMP Multiplex Real Time Messaging protocol

Multiplex RTMP is a protocol between edge and origin, developed by Red5 for clustering of stream data using Terracotta.

Related Post
H.264 On RTMP
Adobe has relased Adobe Flash Media Rights Managment server. It's a platform to protect the media contents delivered to Adobe Media Player and Adobe AIR™ applications.
It's a DRM( Digital Rights Managment ) solution for Flash Video.

Some of the features of Adobe Flash Media Rights Managment server are listed below-

Cross-platform content delivery
Protect media content delivered to Adobe® Media Player and Adobe AIR™ applications.

Content protection with Adobe Media Player
ensure the integrity of your content when you deliver it to Adobe Media Player users.

Offline access auditing
Track usage of your content when viewed through Adobe Media Player, even when consumers are offline.

For detail list of features, visit Adobe website here.
To know in detail about this new server follow the article of Tim Siglin here.


References:-

Adobe Flash Media Rights Management Server
Adobe Offers DRM for Flash Video with Flash Media Rights Management Server
Flash Media Rights Management Server Announced (and Released)
Red5 Changelog
----------------------------------------------------------

Red5 v0.7.0 final 02.23.2008

New Features:

- Initial Edge/Origin clustering support for multiple Edges with a single
Origin (Jira APPSERVER-66)
- Added stream listeners that can get notified about received packets
- Support for server-side Javascript (Jira APPSERVER-169)
- Added new base class org.red5.server.adapter.MultiThreadedApplicationAdapter
that allows multiple clients to connect simultaneously to the same
application
- Added new Flash Player 9 statuses NetStream.Play.FileStructureInvalid and
NetStream.Play.NoSupportedTrackFound
- New Flex admin tool (Jira APPSERVER-242)

Bugfixes:

- Pause near end of buffered streams works as expected (Jira APPSERVER-199)
- Fixed potential memory leak with RTMPT connections that are not properly
closed (Jira APPSERVER-193)
- "onMetaData" is only written to newly recorded FLV files and contains
valid properties now
- Don't try to decode objects for closed RTMPT connections
(Jira APPSERVER-208)
- New multi-threaded connection code fixes various timeout issues
(Jira APPSERVER-122, Jira APPSERVER-166 and Jira APPSERVER-167)
- Always use correct classloader inside applications (Jira APPSERVER-200)
- Tomcat cannot undeploy red5 application (Jira APPSERVER-204)
- "ByteArray" objects used old data after calling "compress" or "uncompress"
(Jira APPSERVER-211)
- "@DontSerialize" checks for properties also in inherited classes
(Jira APPSERVER-225)
- Enabled bidirectional class serialization (Jira APPSERVER-219)
- Array typed parameters in remoting service methods converted properly
(Jira APPSERVER-161)

References:-

http://jira.red5.org/secure/Dashboard.jspa
http://osflash.org/red5/070final

Another great software from open source.

Few days back I wrote here about Red5 load balancing using Terracotta .
In this post I will write little bit about Terracotta technology.

Terracotta is an open source JVM clustering software for Java.It means the applications running on multiple JVMs are capable to interact with each other as they are running on a same JVM.

They call it-
Network Attached Memory: Purpose Built To Store "Scratch Data".

Terracotta is useful in following scenarios:-

1:- HTTP Session Clustering
2:- Distributed Caching
3:- POJO Clustering/Spring integration
4:- Hibernate Caching
5:- Inter-JVM Coordination
6:- Collaboration, Coordination and Events
7:- Distributed workload distribution
8:- Virtual heap for large dataset

To know more about Terracotta follow the link here or watch very impressive demo here.

References:-

1:- Terracotta official website
2:- Terracotta Wiki
3:- Introduction to Terracotta with Example
4:- Terracotta Tech- Cluster your JVM- The Video
5:- Using Terracotta To Cluster a Single JVM Master/Worker Application
Today morning i got a news here on red5 mailing list about the implementation of H.264 on RTMP by a Japanese guy.
The blog is in Japanese. Below are the links for detail information on this.

Feed Demo Page (English compatible click once to enable audio)
http://vixy.tv/izumi-h264/

Programmer's blog (written in Japanese)
http://d.hatena.ne.jp/takuma104/20080317/1205783390

Demo Video on Server Start
http://vixy.tv/images/izumi_h264_demo.mp4

Now its time for Red5 team to comeup with H.264 solution.

Hope to hear it soon :)
Below is the offline version of many great Red5 tutorials so that you do not need to be online more to read them again.


1:- Create new Java Red5 application

2:- Setting up Eclipse for Red5 development

3:- Create sample Red5 application

4:- Shared whiteboard application in red5

5:- Secure your red5 application using stunnel

6:- Red5-How to create New application

7:- How to stream from custom directories

8:- Getting started with Red5

9:- MySql and Red5

10:- Red5 and Flex on windows

11:- Streaming and database connection- Red5

12:- Streaming from custom directories

13:- Tomcat guide of creating new Red5 application

14:- Red5+openlaszlo+Red5

15:- Red5 Project Roadmap

16:- Red5 Documentation

17:- Deploying Red5 to Tomcat

Red5 flash media server released their version 0.7.0 final on 02.23.2008.
The one of the major enhancement was the support of Initial Edge/Origin clustering for multiple Edges with a single Origin.
Everyone who was interested to use Red5 on a large scale was looking for this solution.
I can find many questions in Red5 mailing list and other forums on this topic.
For this red5 has developed a new protocol called MRTMP( Multiplexing RTMP)-protocol between edge and origin.
They are using Terracotta for acheiving this solution.
The detail architecture document can be found here and the implementation with Red5 and terracotta can be found here.
The POC of Red5 and terracotta is here.
After releasing this feature, Red5 team can target huge production environments and Chris Allen has already indicated about this on a post at flashcomguru.

Looking forward for many new great features and enhancements in near future from Red5 team.
What is H.264 and why everyone now is talking about this only.
Last year the online media giant YouTube also started showing H.264 contents.Flash media server 3 is supporting H.264 content both live and on demand.
When we talk about FMS, one name also comes in mind and it's Red5, for those who can not go for FMS because of its price.
Red5, for the people who live the open source way.
When Red5 released the v0.7.0, I was discussing in my blog post about the possibility of supporting H.264 in near future by Red5 and few days back i read an article on Flashcomguru about Wowza media server supporting H.264.
The link is here.
I was sure that Red5 team is also working on it. Red5 team always keep doing great things right on time.
So here is a statement from Chris Allen about Red5 supporting H.264 content in response to my comment on wowza supporting H.264 at flashcomguru.

Correct, Red5, or more specifically, our team member Paul Gregoire is working on the h.264 support. This should be done pretty soon. We are releasing Red5 0.7 today or tomorrow, and the h.264 stuff will follow soon thereafter in 0.7.1 .

So cheers for Red5, Everyone is waiting for Red5 v0.7.1. Great efforts from Red5 team.

The Red5 team yesterday acheived one more milestone and they have now comeup with Red5 version 0.7.0 final.Here is the official announcement from Red5 website.
Following are the major changes and known issues.

Major changes since 0.6.3:

1. Initial Edge/Origin clustering support for multiple Edges with a single Origin
New Flex admin tool.
2. Added a multi-threaded ApplicationAdapter that allows multiple clients to
connect simultaneously to the same application.
3. Added stream listeners that can get notified about received packets.
4. Fixed a critical memory leak bug in networking due to MINA ExecutorFilter.
5. Added new Flash Player 9 statuses NetStream.Play.FileStructureInvalid and
NetStream.Play.NoSupportedTrackFound.

The detail of changes will be available with the installation of Red5.

Known issues:

The admin application may not work as expected.

I am very eager to use this new version of Red5. It's another great acheivement from Red5 Team. Let’s hope Red5 community will come up with more critical improvements such as H.264 support soon

References:-

Red5 v0.7.0 final release
Red5 official webpage
Create new application with Red5 and Flash

From so many days, I am listening about this MicroHoo word. Everybody is talking about this MicroHoo and many rumors started flowing in the air. Big surprise when i checked my favourite java forum . There also everyone is talking about who buying whom.
I am also thinking of buying Microsoft :) Let see they accept my offer or not. By the way it's saturday night and i am going to sleep after thinking of this deal.
Very recently i got a chance to work with AsUnit. We were looking for a testing framework for flash and after googling, we found this tool called AsUnit. It's an open source unit test framework for flash. Because of no documentation it was very hard to make it working for my first testing application. Most of the links given in this page point to does not exist pages on the web. After some more googling on this gave me some idea of how this works. Please find the reference of these websites from where i got some help to move forward with AsUnit at the end of this post.In this post i will explain a very simple application using AsUnit.
AsUnit provides three ways to use their testing application in your application.

1. Framework
2. XUL UI
3. MXP

In the below example we will use the first one i.e. Framework. To start with below example, you have to first download the Framework from here. It's a zip file. You can unzip this file in to your hard disk location. This will generate some folders named as2, as3, as3docs and as25. As clear from name, these folders are for different Actionscript versions. Since the below example is in Actionscript 3.0, we will use as3 folder.
To start with the example, First create a folder say TestExample in any location of your hard disk. Copy this as3 folder to TestExample folder. Now it's time to create the sample application which we will test with AsUnit.

Create a file named Example.as in the TestExample folder like this.

package {

public class Example {
public function add(num1:Number,num2:Number):Number{
return num1 + num2;
}
}
}

Now its time to create test case for this class. Create a file named ExampleTest in the same folder like this.

package {
//The below line import the AsUnit library of TestCase
import asunit.framework.TestCase;

public class ExampleTest extends TestCase {

//reference of Example class created above
private var example:Example;

public function ExampleTest(testMethod:String) {
super(testMethod);
}

//Default method for object instantiation
protected override function setUp():void {
example = new Example();
}

//Default method for Object deletion
protected override function tearDown():void {
example = null;
}

public function testInstantiated():void {
assertTrue("Example instantiated", example is Example);
}

public function testFail():void {
assertFalse("failing test", true);
}

/**
* Test the add method of Example class created above
*/
public function testAdd():void {
var result:Number = example.add(3,3);
assertEquals("Expected:6 Received:"+result, result, 6);
}
}
}

Now our test case is ready, Another thing we have to do is to create the TestSuite for executing many test cases together. Create a file named ExecuteAllTests.as in the same folder like this.

package {
import asunit.framework.TestSuite;
import ExampleTest;

public class ExecuteAllTests extends TestSuite {

public function ExecuteAllTests () {
super();
//Adding first test
addTest(new ExampleTest("testInstantiated"));
//Adding second test
addTest(new ExampleTest("testAdd"));
}
}
}

Till here we are ready with our main application, test case, test suite, Now we will create a runner class to run this test suite to produce some results.
Create a file named ExampleTestRunner.as in the same folder like this.

package {
import asunit.textui.TestRunner;

public class ExampleTestRunner extends TestRunner {

public function ExampleTestRunner() {
start(ExecuteAllTests, null, TestRunner.SHOW_TRACE);
}
}
}

As from the above structure you can see this runner class is taking our TestSuite class as a parameter and the last parameter is a boolean to show and hide the trace.

Now it's time to run the application. For this create a flash file named ExampleTestRunner.fla in the same folder. This file will be empty file. Just you need to put ExampleTestRunner in Document class under properties tab. This step is to avoid the below error while compiling the fla file.

TypeError: Error #1009: Cannot access a property or method of a null object reference.
at asunit.textui::TestRunner/asunit.textui:TestRunner::addedHandler()
at flash.display::DisplayObjectContainer/addChild()
at asunit.textui::TestRunner/setPrinter()
at asunit.textui::TestRunner/doRun()
at asunit.textui::TestRunner/start()
at ExampleTestRunner$iinit()
at ExampleTestRunner_fla::MainTimeline/ExampleTestRunner_fla::frame1()

The more detail on this can be found from the references given below. The below image will show how to use Document class in Flash CS3.



Its time to run the flash file and see the result. Test the flash movie by hitting Ctrl+Enter. YOu will see a screen like this if everything goes fine.



The above screen shows that both the tests are passed, Now go to ExampleTest.as file again and change this line assertEquals("Expected:6 Received:"+result, result, 6);
to assertEquals("Expected:6 Received:"+result, result, 7); and again run the application, you will see a screen like this saying one test fail in two tests.



References:-

1. AsUnit testing with Actionscript 3.0 and flash CS 3.0
2. AsUnit Step by Step
3. Migrating from flash 8 to flash CS3
4. AsUnit Step by Step part 1 pdf
5. AsUnit Step by Step part 2 pdf
It was May 30, 2006 when i started writing here. The very first post i wrote about was the Flex( Introduction to flex data services). It's more than one and half year now and i am back again to flex.
Last time i got very little chance to work with flex but i enjoyed alot. This time it's going to be more exciting and challenging. The work is great and interesting and i am ready to fight with flex again.
Very recently When i was working for a project based on Red5 flash server and Flash 8 with Action Script 2.0. My requirement was to fetch the number of images from the web server and render them on flash client repeatedly after n milliseconds. To avoid the flickering i used double buffering. But the problem was the time it was taking to load the images from server and then render them. I was using the MovieClipLoader loadClip function to dynamically load the jpeg files, Though the size of each jpeg was not more than 15 KB, but it was taking around 3-4 seconds to load 16 jpeg images of size less than 15 KB. This was very frustating as i was getting the updated images after 3-4 seconds. How good if flash provide some kind of sockets in Action script 2.0, by using that i can transfer the image object as binary data and then draw it on flash client.I am really missing this functionality in flash to send image data either using Flash remoting. They have kept it for their own product called Flash communication server.. I am still looking for a solution that can minimize the time required to load these images from web server. If i can reduce it to 1 sec on higher bandwidth, It would be great.
In Red5 forum, I have seen so many times, developers are asking for custom client id to identify a client. Below I will try to explain how can one add additional client information with every client connected to your application.

First we will create a client object--

public class Client{
String clientId = null;
String clienName = null;
String clientRole = null;

public String getRole(){
return clientRole;
}
public String getName(){
return clientName;
}
public String getId(){
return clientId;
}
public void setRole(String role){
clientRole = role;
}
public void setName(String name){
clientName = name;
}
public void setId(String id){
clientId = id;
}
}

Now we are ready with our client object, We will add this client object with the IClient in Red5 like below

public boolean roomConnect(IConnection iconnection, Object params[]){
if(!super.roomConnect(iconnection, params)){
log.info((new StringBuilder()).append("Application failed to connect room: ").append(iconnection.getScope().getName()).toString());
return false;
}
else{
log.info((new StringBuilder()).append("Application room connect initiated for room ").append(iconnection.getScope().getName()).append(": ").toString());

//We will add our client information right here
Client client = new Client();
client.setId(params[0].toString());
client.setName(params[1].toString());
client.setRole(params[2].toString());
iconnection.getClient().setAttribute("client", client);

return true
}
}

public boolean roomJoin(IClient iclient, IScope iscope){

/*Here you can see how to access your client information throughout the application*/

Client client = ((Client)iclient.getAttribute("client"));
String clientName = client.getName();
String clientId = client.getId();
String clientRole = client.getRole();

return true;
}

This way you can have your own client id's names and roles for different clients.

To create new Red5 application follow my previous post here.
In order to view the log generated by Red5 in some other location( on a different log server on network), You can use the log4j feature to forward your logs to a centralized log sever, where all your applications( multiple red5 servers) are throwing their logs.This way you can later view your organize log through some log interface.

Here i will explain, How you can configure your log settings in your red5 application in order to acheive that.Let say you have an application with name Test.Open the log4j.properties file under your application WEB-INF folder, Initially the contents will be -

# logging config, this should be auto reloaded by spring.

Now you can change it to -

#-----------------------------------------------------------------

#log4j.rootCategory=, A1
#log4j.appender.A1=org.apache.log4j.net.SocketAppender
#log4j.appender.A1.RemoteHost=XX.XX.XX.XX
#log4j.appender.A1.Port=8888
#log4j.appender.A1.Threshold=DEBUG
#log4j.appender.A1.locationInfo=true

#----------------------------------------------------------------------

The above lines describes that upon running the application, it will connect to this remote address on port 8888.

Now you can also put the server name in your log messages, so that at receiving end, you can differentiate the log messages coming from different red5 servers. To acheive that, we will add some line in our application source.

//------------------------------------------------------------------

public boolean appStart(IScope app){

String servername = null;
try{
servername = java.net.InetAddress.getLocalHost().getHostName();
}
catch(UnknownHostException un){
log.error("Unknown host exception found while getting host name of sever " + un);
}
catch(Exception e){
log.error("Exception while getting host name of sever " + e);
}
if(servername != null){
MDC.put("red5server",servername);
}

log.info("AppStart called for : " + app.getName());

if (!super.appStart(app)){
log.error("Unable to start the application");
return false;
}

return true;
}

//-------------------------------------------------------------


You can see from the above piece of code, that we have created a variable called "red5server" and we are putting the server name in that.This variable will be accessed by log4j server later.

Now, the sending part is complete, We have to implement the receiving end i.e. The log4j server, which will receive all these log messages.

In order to run log4j server, you need to create a properties file. I am showing here, a sample file called "socketserver.properties". The contents of the file will be-

#--------------------------------------------------------------------

log4j.rootLogger=, A1

#log4j.appender.A1=org.apache.log4j.ConsoleAppender
#log4j.appender.A1.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
#log4j.appender.A1.layout.ConversionPattern= %X{red5server} %5p [%t] (%F:%L) - %m%n


log4j.appender.A1=org.apache.log4j.RollingFileAppender
log4j.appender.A1.File= remote-log.log

log4j.appender.A1.MaxFileSize=1024KB

log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern= %1.25X{red5server}- %p %t %c - %m%n

#------------------------------------------------------------------

Now you can see from above lines, I have referred to the same variable, i have created in source file.

"log4j.appender.A1.layout.ConversionPattern= %X{red5server} %5p [%t] (%F:%L) - %m%n"

This piece of code will add the red5 server name in the begining of every log message.

You can now start the log4j server in order to receive the logs from applications in this way-

java -cp log4j-1.2.14.jar org.apache.log4j.net.SimpleSocketServer 8888 socketserver.properties

Now your log4j server is up and running, Every application, which is referring to this log server will throw their log messages to this server, which you can later on view.

Happy logging!!

To create new Red5 application, follow my post here
From Last 15 days, I was trying hard to get it done. My previous research on this and some concept from open source and commercial project, I am finally able to do a complete desktop sharing in my conference application.And the best part is that, I am not using any native driver or so to acheive this, A pure java solution with flash just works fine, I got some idea from here. But i tried a little different approach for this. And the best thing is that, Only the user, who wants to share his desktop need java plugin in his browser,all other users in the conference can just see and control his desktop with their flash client, Screen rendering part is little bit slow at this time, but the mouse and keyboard controls are more faster than i expected.The only frustating part having flash as a desktop sharing client is that, there is no way to remove the flash context menu, So i have done a workaround(got it from some forum) and put right click event on context menu itself.

Now i am trying to make it more faster in terms of performence.
Openmeetings, A new multilanguage, and customizable video conference and group collaboration application very similer to Adobe Connect. They have used Open Laszlo and Red5 as a technology to build this application. The project has various features like screen sharing, Document importing. There are various file format(.tga, .xcf, .wpg, .txt, .ico, .ttf, .pcd, .pcds, .ps, .psd, .tiff, .bmp, .svg, .dpx, .exr, .jpg, .jpeg, .gif, .png, .ppt, .odp, .odt, .sxw, .wpd, .doc, .rtf, .txt, .ods, .sxc, .xls, .sxi, .pdf) that you can import and share with others in the conference.The whiteboard items are draggable, You can edit the items, also some of them are resizable as well, Whiteboard can be stored or recorded.

Take a basic installation demo here



Below are some screenshots of the application-

Screen 1- Conference Mode

Screen 2- Audience Mode

Screen 3- Multi color Interface

For more information visit the home page of Openmeetings here

Related Post
New Version Of Dimdim's Open Source Community Edition Releasing Soon