Redfire 0.0.0.4 Release

After some feedback and a bit more development, I am happy to release version 0.0.0.4 for community beta testing. The changes were mostly to support the Redfire plugin for Spark which is planned to be included in the official Spark 2.6.1 release. You WILL NEED the latest Flash Player 10.3

Image3.png

So what is new for Redfire plugin for Spark?

  1. Native integration for Window OS users only. The audio/video and screenshare now appear in native Spark windows instead of the browser.
  2. Other suggestions discussed here and here
  3. New audio/video applications redfire_video.html and redfire_2way.html developed in Flex to replace the old Openlaszlo apps. A big thank you to @Mike Grimwade who started work on this.
  4. Support for Flash Player echo cancellation. You do not need a headset anymore.
  5. Support for RTMFP (peer-to-peer). Audio/Video is sent between clients directly without using the Red5 server provided there is a route between clients otherwise an RTMP connection to Redfire is used.

To ensure there is a route, you need a way for the clients to discover each other. There are 3 methods:

  1. Make sure each client can access the public Adobe RTMFP server on the Internet at p2p.rtmfp.net
  2. Use an internal private RTMFP server like Adobe FMS 4.x or the OpenRTMFP server Cumulus
  3. If IP Multicast is supported on your network and all your clients are on the same subnet (192.168.1.x for example)

The default is to use the public p2p.rtmfp.net service. To change this, edit redfire_2way.html and redfire_video.html. Replace this line

var rtmfpUrl = getPageParameter(‘rtmfpUrl’, ‘rtmfp://p2p.rtmfp.net/xxxxxxxxxxxxxxx-zzzzzzzzzzzzz/’);

If you have your own RTMFP server like FMS 4.x, use “rtmfp://my_rtmfp_server/”

If you want to use pure IP multicast on your own private subnet, use “rtmfp:”

If you want to force RTMP always with no peer-to-peer, use “localhost”

Finally, to upgrade your existing Redfire plugin for Spark,

  1. Quit Spark,
  2. Delete the redfire-plugin folder and redfire-plugin.jar file in your USER_HOME\Spark\plugins
  3. Copy new redfire-plugin.jar to SPARK_HOME\plugins
  4. Restart Spark

Where can I download the plugin

For Openfire 3.6.4 and below http://redfire.googlecode.com/files/redfire-364-0.0.04.zip

For Openfire 3.7.0 and above http://redfire.googlecode.com/files/redfire-370-0.0.04.zip

Great work!

I’ve been testing this today and even though it doesn’t work for me at all I’d like to report a small bug I’ve noticed:

  • Issue A

  • ClientA 2.6.0 Windows. Plugin 0.0.6

  • ClientB 2.6.0 Linux. Plugin 0.0.6

If the Linux client starts a redfire session pushing the UI button, the Windows client gets the old URL instead of the notification in the window…

If the Windows client starts a redfire session pushing the UI button, then the Linux client gets the notification asking to accept or decline and it opens the firefox window in the Linux side and the popup in the Windows side.

  • Issue B

The links on the index.html are wrong as most of the filenames changed on this release.

I’m still trying to figure out what’s wrong with video, but that might be because of my weird setup. Tomorrow I’ll test it up with several physical windows machines.

Hi Dele

We got that working after upgrading to 10.3, good work! we will try to implement a RTMFP proxy to see if we can improve the latency between our sites.

Here’s some feedback for you on the whole experience, not sure how much of this you can control.

  • On the recieving clients chat window, we are seeing the plugin offer the accept / reject buttons, and also seeing the link to the server chat URL - perhaps the Plugin should hide the server chat URL from the chat window? Also, the accept / Decline buttons remain in the chat window after you have pressed one of them.

  • I would like to see some better separation between Video & Audio calls - i.e. when i click the Red 5 button, an option to call with Audio, or with Audio / Video. You could get really clever and detect whether either party actually has a webcam, by including whether video is available in the message you are sending. Therefore only audio calls would be available if neither party had a video device.

  • If an audio only call is created (either because it is selected, or no video is present in the call) perhaps the resulting flash browser window can be made smaller. We will mostly use this as a voice calling solution so opening a large window is not usually desireable. Some clients display a thumbnail picture of the sender in place of the video feed, when none is recieved.

  • With the webcam chats, the controls for Video / audio on,off are sometimes hard to see when they are overlaid on the webcam video. The toggle control that goes through video on, audio on / video off, audio on / video off, audio off are hard to use - maybe just making each item a toggle on it’s own would be better?

  • There is no obvious way to terminate the call, other than closing the Window. The party recieving the termination does not recieve any feedback that the call has been terminated

  • in our organisation only certain people are equipped for Video / Audio calls. We would need some way to make clients unavailable for Red5 calls. Uninstalling the client plugin client does not prevent the client from recieving red5 calls. So some sort of exchange or discovery between clients would be desireable to only show the red5 button with contacts who have red5 installed. Another way would be toinstall support this in the plugin, having a ‘disabled’ mode so the client can automatically reject red5 calls when it is not capable of recieving them. The sender could then recieve a response that the call is not possible.

  • The silence detection on the transmission end can be distracting, causing recieving parties to wonder whether the call has been dropped. Many viop implementations now replace silence with a quiet hiss on the reciever end so that the listener can tell the call has not been dropped.

Thanks for the feedback. Unfortunately, I don’t have a Linux PC to test with, so I can’t reproduce Issue A.

I have attcahed an updated index.html file to fix Issue B
index.html.zip (1447 Bytes)

Thanks for the kind words, very detailed and useful feedback. Much appreciated

we will try to implement a RTMFP proxy
In case you are considering the OpenRTMFP server Cumulus, I have attached the Windows binary to save you building it from source.

perhaps the Plugin should hide the server chat URL from the chat window?
Spend hours trying to figure how to do that without hacking the Spark client. The problem is that I have to support none Spark XMPP clients without inventing a new XMPP protocol extension.

the accept / Decline buttons remain in the chat window after you have pressed one of them.
That is a fault, but I ran out of patience trying to fix it

I would like to see some better separation between Video & Audio calls
The Redfire audio/video feature for Spark was not designed to be a replacement for a softphone. There is a choice of SIP or Jingle for audio and video calls. This feature just adds video (with audio) to an already established conversation. I appreciate that the UI needs more work, but I am not planning to add call control. I have another project that is providing a softphone for both Spark and SparkWeb.

The user is required to do the signalling manually with IM messages as part of the overall conversation. This approach works in both two-way IM or MUC chat room conversations. However, this is an open source project and if you have an in-house Java/Flex developer, they can implement most of the changes to make this work properly within your organisation as required.

The silence detection on the transmission end can be distracting,
I have fixed this. I have already solved this problem with Red5phone, I have copied the code across. I have attached version 0.0.7 of the redfire-plugin for Spark as well as updated video folder.
CumulusService.zip (1149216 Bytes)
video.zip (600626 Bytes)
redfire-plugin.jar (3640140 Bytes)

Today at work I managed to get it working.

For now, since I’m back home and no logs to show or provide real input, I’m just wondering…

Should the video be so lagged as I saw it today? We are talking 2-3 seconds in a LAN environment where flash should take advantage of multicast and establish a p2p connection (and indeed I think it was).

On the other hand… what’s the CPU penalty when encoding video for streaming? I just could test in two atom systems and I’m wondering if that might be the issue, because besides the aforementioned lag, video quality in a 2 way communication was really low.

I suppose video is scaled up from ¿QCIF? to the provided window size.

Another question… ¿Is there any chance the IE window can be resized and that dynamically the swf window adjusts its size?

There is more work to get the optimal settings for Flash Video. See below on how the settings for bandwidth, quality and frames per sec affect the user experience.

To indicate that bandwidth use takes precedence, pass the desired value for bandwidth and 0 for frameQuality. Flash will transmit video at the highest quality possible within the specified bandwidth. If necessary, Flash will reduce picture quality to avoid exceeding the specified bandwidth. In general, as motion increases, quality decreases.

To indicate that quality takes precedence, pass 0 for bandwidth and a numeric value for quality. Flash will use as much bandwidth as required to maintain the specified quality. If necessary, Flash will reduce the frame rate to maintain picture quality. In general, as motion increases, bandwidth use also increases.

To specify that both bandwidth and quality are equally important, pass numeric values for both parameters. Flash will transmit video that achieves the specified quality and that doesn’t exceed the specified bandwidth. If necessary, Flash will reduce the frame rate to maintain picture quality without exceeding the specified bandwidth.

Sorry for the stupid question: Is red5 plugin needed for redfire?

Thanks in advance

Redfire plugin for Openfire is the replacement for the old Red5 plugin for Openfire. It has an embedded Red5 server, some red5 web applications and a plugin for Spark

OK, so I can safely remove red5, can’t I?

That would be a good idea :wink:

Redfire plugin will not work alongside the old red5 plugin or with a red5 server running on the same server as Openfire.

Publisher link is not working https://myserver:7443/redfire/video/publisher.swf -> HTTP ERROR 404

I’ve downloaded attachments…

I think publisher.swf is missing from the .0.04 package. I noticed also, after logging into redspark, none of the buttons work as yet.

Version 0.0.0.3 recognized my usb webcam but 0.0.0.4 does not. Was this something I needed to configure on the client?

I forgot to provide the error log. Apologies.

Jun 1, 2011 9:04:49 AM org.jivesoftware.spark.util.log.Log error

SEVERE:

java.net.MalformedURLException: unknown protocol: about

at java.net.URL.(Unknown Source)

at java.net.URL.(Unknown Source)

at java.net.URL.(Unknown Source)

at org.jivesoftware.spark.plugin.red5.NativeBrowserViewer.loadURL(NativeBrowserVie wer.java:56)

at org.jivesoftware.spark.plugin.red5.BareBonesBrowserLaunch$1.windowClosing(BareB onesBrowserLaunch.java:84)

at java.awt.AWTEventMulticaster.windowClosing(Unknown Source)

at java.awt.AWTEventMulticaster.windowClosing(Unknown Source)

at java.awt.Window.processWindowEvent(Unknown Source)

at javax.swing.JFrame.processWindowEvent(Unknown Source)

at java.awt.Window.processEvent(Unknown Source)

at java.awt.Component.dispatchEventImpl(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Window.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at com.jtattoo.plaf.BaseTitlePane.close(Unknown Source)

at com.jtattoo.plaf.BaseTitlePane$CloseAction.actionPerformed(Unknown Source)

at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.setPressed(Unknown Source)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)

at com.jtattoo.plaf.BaseButtonListener.mouseReleased(Unknown Source)

at java.awt.Component.processMouseEvent(Unknown Source)

at javax.swing.JComponent.processMouseEvent(Unknown Source)

at java.awt.Component.processEvent(Unknown Source)

at java.awt.Container.processEvent(Unknown Source)

at java.awt.Component.dispatchEventImpl(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Window.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.EventQueue.dispatchEvent(Unknown Source)

at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.run(Unknown Source)

Hi Dele.

I Just download your new Redfire 0.0.4.

I have 1 Ubuntu test station and 1 windows test station.

I download redfire-plugin.jar from this test page for both station

The spark version on both is --> 2.6.0

Result :

  1. The test page is showed at both

  2. The Spark on linux test station didn’t show any screen-share button.

  3. The Spark on windows test station show screen-share button … and it works fine.

Question : What I have to do with the linux test station to fix the problem ?

Sincerely

-bino-

When trying to use red5 audio/video , or red5 screen share it disconnects the user I am trying to connect to. A window pops up where the video should be and at the bottom it says:

nc netconnection.connect.closed

Any ideas ??

Hello,

Following upgrade to 0.0.0.4 clients are only able to see themself in the video chat window when rtmfp is configured in the video file. I believe nat is causing this issue, but I should be able to configure it as “localhost” to force classic connection through the server, right? When localhost is specified, the plugin no longer activates the webcam at all (not even session initiator side). I get several Java errors in the Spark error logs, indicating class–> unknown source I posted client logs on the other thread discussing this… http://community.igniterealtime.org/thread/44711. (Small log clip below)

SEVERE:

java.net.MalformedURLException: unknown protocol: about

at java.net.URL.(Unknown Source)

at java.net.URL.(Unknown Source)

at java.net.URL.(Unknown Source)

at org.jivesoftware.spark.plugin.red5.NativeBrowserViewer.loadURL(NativeBrowserVie wer.java:56)

at org.jivesoftware.spark.plugin.red5.BareBonesBrowserLaunch$1.windowClosing(BareB onesBrowserLaunch.java:84)

at java.awt.AWTEventMulticaster.windowClosing(Unknown Source)

at java.awt.AWTEventMulticaster.windowClosing(Unknown Source)

at java.awt.Window.processWindowEvent(Unknown Source)

at javax.swing.JFrame.processWindowEvent(Unknown Source)

at java.awt.Window.processEvent(Unknown Source)

at java.awt.Component.dispatchEventImpl(Unknown Source)

Thanks in advance for any direction you can provide… I am racking my brain trying to figure this out… I had the old version working in a testing phase, and could revert, but the client side features in the new plugin are very appealing for my company’s needs.

For this …

Unfortunately I have to put my self on “me too” list.

Sincerely

-bino-

Dele… Any advice you could offer here? I’m stuck. I have tried setting up Cumulus as well, and not being a developer, I’m stuck there too. I’m not very clear on the inclusion of the Poco and OpenSSL libraries for it to run, and the documentation is very lacking. I can get a net connect success, but no video. Can Cumulus be run on the same server as Openfire/Redfire, or will this cause port conflicts? I’m struggling here, and would greatly appreciate your advice.

Thanks in advance!!

Matt

Just got back from a short holiday break

The CumulusService I attached here is a complete compiled binary for Windows. Just run the install.bat file to create the service. Read documentation at https://github.com/OpenRTMFP/Cumulus. Cumulus also uses port 1935, so there will be port conflict with Openfire/Redfire server.

I shall be releasing 0.0.0.5 soon with auto-fallback from RTMFP to RTMP when all the participants are not connected to each other via P2P.

Otherwise, do this

var rtmfpUrl = getPageParameter(‘rtmfpUrl’, ‘rtmfp://this_does_not_exist.com/’);