Configuring Flash Live Video Streaming Applications

Measure connection capabilities

To configure flash applications streaming you will first need to determine the connections that most users will have. So test first with your connection and also request other users to test.

So let’s consider this situation determined by http://www.speedtest.net (measure speed to a server close to the location of your streaming server):
Download: 9.43Mbp/s
Upload: 0.49Mbps

This looks like ADSL (in this situation upload bandwidth is 20 times lower than total connection bandwidth).

0.49 Mbps = 502 Kbps (kilobits per second)
8 bits = 1 byte,  so that means you can upload with 62 kb/s  (kilobytes per second)

As you can see, usually, connection is the cause of quality and latency limitations. A server with 1000Mbps connection will theoretically be able to handle up to 2000 x 0.49Mbps streams, so the server is not the problem with your tests, unless you’re on a shared plan and other clients are maxing out the resources.

How to configure flash videochat applications?

Considering you also have to upload audio and other data on that connection, you could setup camBandwidth to 49152 bytes/s (allocate for the compressed video stream).
On chat systems buffering should be reduced to 0.1 so delays are minimized. On 1 way streaming systems, you can use higher buffering to increase fluency in case of connection turbulence.

Flash streaming applications vs Skype

Skype desktop application uses different technology than these web based applications limited by browser based flash technology limitations . Skype uses:
–  p2p connections between all users and also uses fast 3rd users as proxies (not using server – so if you are in the same local network with the other tester or with a 3rd skype client with better connection, it uses the local bandwidth)
–  better codecs to get better quality for same bandwidth (flash player currently encodes only h263 and external encoders must be used to encode h264)

Red5 Linux Server Optimizations and Tools

Some java optimizations to add in red5.sh :

export JAVA_OPTS=”-Xrs -Xms128M -Xmx256M -Dsun.rmi.dgc.client.gcInterval=300000 -Dsun.rmi.dgc.server.gcInterval=360000 -Djava.net.preferIPv4Stack=true -XX:+ExplicitGCInvokesConcurrent -XX:+UseConcMarkSweepGC -Xverify:none”

Assuming red5 was installed in /opt/red5/dist admin will often need to restart it or check if it’s running.

Make sure Red5 restarts: restart.sh

#!/bin/bash
#Restart the process
#First see if running
PID=`ps -eo ‘tty pid args’ | grep ‘red5’ | grep -v grep | grep -v restart | tr -s ‘ ‘ | cut -f2 -d ‘ ‘`
cd /opt/red5/dist
if [ -z “$PID” ]
then
#not running
echo “Red5 was not running at `date`” >> /opt/red5/dist/run-restart.log
else
echo “Red5: $PID”
#shutdown
/opt/red5/dist/red5-shutdown.sh
sleep 6
#make sure
kill $PID >> null
sleep 2
fi
#start
/opt/red5/dist/red5.sh >> /opt/red5/dist/red5.log &
echo “On request restarted Red5 at `date`” >> /opt/red5/dist/run-restart.log

Mare sure Red5 process is running, if not start it: running.sh

#!/bin/bash
#set environment
PID=`ps -eo ‘tty pid args’ | grep ‘red5’ | grep -v grep | grep -v running | tr -s ‘ ‘ | cut -f2 -d ‘ ‘`
if [ -z “$PID” ]
then
#Restart the process
cd /opt/red5/dist
/opt/red5/dist/red5.sh >> /opt/red5/dist/red5.log &
echo “Restarted Red5 at `date`” >> /opt/red5/dist/run-restart.log
else
#do nothing
echo “Red5 is already running with PID=$PID at `date`” >> /opt/red5/dist/run-checked.log
fi

Red5 Services
Red5 Hosting
Red5 installation on VPS & Dedicated Servers (Linux / Windows)