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)

Install ffmpeg mplayer flvtool2 yamdi x264 theora mp3lame vorbis ogg faac

 

 

This is a tutorial to enable video sharing support on Centos servers.

This should install ffmpeg, mplayer, mencoder, flvtool2, yamdi, x264, theora, mp3lame, vorbis, ogg, faac, faad2, xvid, mediainfo, mp4box, neroaacenc . These tools will enable on your server:

  • video and audio conversion
  • thumbnail generation
  • FLV meta injection (flvtool2, yamdi)
  • extra codecs (x264, theora, mp3lame, vorbis, ogg, faac, faad2, xvid)

This is functional and we update it each time we configure a new server.
Installation is done using the “root” account.

 

Attention: If you copy and paste commands below, make sure “-” are not converted to “.”.  If these get converted, edit “.” back to “-“. Some options use 2 * “-“.

Some prerequisites:

 

rpm -ivh  http://rpm.livna.org/livna-release.rpm

yum install libogg libogg-devel libvorbis libvorbis-devel
yum install x264 lame vorbis faac faad2 yamdi

The quick way to setup ffmpeg, mplayer, mencoder:

rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.5.2-2.el5.rf.i386.rpm

or if you have 64bit server

rpm -Uhv http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm

yum install gcc gcc-c++ automake autoconf libtool yasm git subversion
yum install libogg zlib-devel libtool


yum install libogg-devel libvorbis libvorbis-devel
yum -y install ffmpeg ffmpeg-devel mplayer mencoder ffmpeg-libpostproc

 

 

Edit the /etc/ld.so.conf file and add the following lines:

/usr/local/lib
/usr/lib

GIT
(required to get X264)

yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel

cd /usr/local/src
wget http://www.kernel.org/pub/software/scm/git/git-1.8.4.2.tar.gz
tar -zxvf git-1.8.4.2.tar.gz
cd git-1.8.4.2
make prefix=/usr/local all
make prefix=/usr/local/ install
git –version
Or :
yum –disableexcludes=main install git
And git manpages:
cd /usr/local/src
wget http://www.kernel.org/pub/software/scm/git/git-manpages-1.6.0.4.tar.gz
cd /usr/local/share/man
tar -zxvf /usr/local/src/git-manpages-1.6.0.4.tar.gz

YASM

YASM is a modular assembler, it is required by the x264 package.

 

cd /usr/local/src/
wget http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz
tar zfvx yasm-1.2.0.tar.gz
cd yasm-1.2.0
./configure
make && make install
cd ..

X264

cd /usr/local/src/
git clone git://git.videolan.org/x264.git
cd /usr/local/src/x264
./configure – -enable-shared – -prefix=/usr
make &&  make install
ls -s /usr/local/lib/libx264.so /usr/lib/libx264.so
Essential Codecs
cd /usr/local/src/
wget http://www.mplayerhq.hu/MPlayer/releases/codecs/essential-20071007.tar.bz2
tar xjvf essential-20071007.tar.bz2
mkdir /usr/local/lib/codecs/
mv essential-20071007/ /usr/local/lib/codecs/
chmod -R 755 /usr/local/lib/codecs/

Or all codecs:

cd /usr/local/src/

wget http://www.mplayerhq.hu/MPlayer/releases/codecs/all-20110131.tar.bz2
tar xjvf all-20110131.tar.bz2

mkdir /usr/local/lib/codecs/

mv  all-20110131 /usr/local/lib/codecs/

LAME

cd /usr/local/src/

wget http://downloads.sourceforge.net/project/lame/lame/3.98.4/lame-3.98.4.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Flame%2Ffiles%2F&ts=1285175656&use_mirror=switch
tar zxvf lame-3.98.4.tar.gz
cd /usr/local/src/lame-3.98.4
./configure
make && make install

OGG

cd /usr/local/src/
wget downloads.xiph.org/releases/ogg/libogg-1.1.3.tar.gz
tar zxvf libogg-1.1.3.tar.gz
cd /usr/local/src/libogg-1.1.3
./configure –enable-shared && make && make install
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

VORBIS

cd /usr/local/src/
wget downloads.xiph.org/releases/vorbis/libvorbis-1.1.2.tar.gz
tar zxvf libvorbis-1.1.2.tar.gz
cd /usr/local/src/libvorbis-1.1.2
./configure && make && make install

Theora
cd /usr/local/src/
wget http://downloads.xiph.org/releases/theora/libtheora-1.1.1.tar.bz2
tar jxvf libtheora-1.1.1.tar.bz2
cd /usr/local/src/libtheora-1.1.1
./configure –prefix=/usr --enable-shared
make && make installls -s /usr/local/lib/libtheora.so /usr/lib/libtheora.so
FAAC
cd /usr/local/src/
wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz
tar zxvf faac-1.28.tar.gz
cd /usr/local/src/faac-1.28
./configure –prefix=/usr
make && make install

FAAD2

cd /usr/local/src/
wget http://downloads.sourceforge.net/faac/faad2-2.6.1.tar.gz
tar zxf faad2-2.6.1.tar.gz
cd faad2
autoreconf -vif
./configure –disable-drm –disable-mpeg4ip
make && make install

OpenJPEG
cd /usr/local/src/
wget http://openjpeg.googlecode.com/files/openjpeg_v1_3.tar.gz
tar zxvf openjpeg_v1_3.tar.gz
cd OpenJPEG_v1_3

make && make install
ldconfig
VPX

cd /usr/local/src/
wget http://webm.googlecode.com/files/libvpx-v1.1.0.tar.bz2
tar -xjf libvpx-v1.1.0.tar.bz2
cd libvpx-v1.1.0
./configure –prefix=/usr –enable-shared –disable-static
make && make install
Speex
wget http://downloads.xiph.org/releases/speex/speex-1.2rc1.tar.gz
tar -xvzf speex-1.2rc1.tar.gz
cd speex-1.2rc1
./configure –prefix=/usr –enable-shared –disable-static
make && make install
Xvid
cd /usr/local/src/
wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz
tar zxfv xvidcore-1.3.2.tar.gz
cd /usr/local/src/xvidcore/build/generic
./configure --enable-shared
make && make install
ls -s /usr/local/lib/libxvidcore.so.4.3 /usr/lib/libxvidcore.so.4.3

Before installing ffmpeg, setup some linking for scripts that look in certain locations for codecs:

ln -s /usr/local/lib/libavformat.so.50 /usr/lib/libavformat.so.50
ln -s /usr/local/lib/libavcodec.so.51 /usr/lib/libavcodec.so.51
ln -s /usr/local/lib/libavutil.so.49 /usr/lib/libavutil.so.49
ln -s /usr/local/lib/libmp3lame.so.0 /usr/lib/libmp3lame.so.0
ln -s /usr/local/lib/libavformat.so.51 /usr/lib/libavformat.so.51
ln -s /usr/local/lib/libavdevice.so.52 /usr/lib/libavdevice.so.52

ln -s /usr/lib/libtheora.so.0.3.10 /usr/local/lib/libtheora.so.0.3.10
ln -s /usr/lib/libx264.so.80 /usr/local/lib/libx264.so.80
ln -s /usr/lib/libtheora.so.0.3.10 /usr/local/lib/libtheora.so
ln -s /usr/lib/libx264.so.80 /usr/local/lib/libx264.so

FFMPEG (download latest from SVN)

export TMPDIR=$HOME/tmp
export LD_LIBRARY_PATH=/usr/local/lib/
cd /usr/local/src/
git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg

cd /usr/local/src/ffmpeg
./configure –enable-gpl –enable-version3 –enable-shared –enable-nonfree –enable-postproc –enable-libfaac –enable-libmp3lame –enable-libspeex –enable-libopencore-amrnb –enable-libopencore-amrwb –enable-libtheora –enable-libvorbis –enable-libvpx –enable-libx264 –enable-libxvid –enable-x11grab –extra-cflags=”-I/usr/local/include” –extra-ldflags=”-L/usr/local/lib”

make && make install
ln -s /usr/local/bin/ffmpeg /usr/bin/ffmpeg

FFMPEG configure options use 2 x “-“. Older version can be downloaded with git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg

ERROR: Xfixes not found #
fix: yum install libX*

 

MPLAYER

 

cd /usr/local/src/
svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer
cd /usr/local/src/mplayer
svn update
cd /usr/local/src/mplayer
./configure && make && make install

ln -s /usr/local/bin/mencoder /usr/bin/mencoder
ln -s /usr/local/bin/mplayer /usr/bin/mplayer

FLVTOOL2
First install Ruby from WHM.

cd /usr/local/src/
wget rubyforge.org/frs/download.php/9225/flvtool2_1.0.5_rc6.tgz
tar zxvf flvtool2_1.0.5_rc6.tgz
cd /usr/local/src/flvtool2_1.0.5_rc6/
ruby setup.rb config
ruby setup.rb setup
ruby setup.rb install

YAMDI

 

cd /usr/local/src/
wget http://downloads.sourceforge.net/project/yamdi/yamdi/1.4/yamdi-1.4.tar.gz?use_mirror=ufpr
tar zxf yamdi-1.4.tar.gz
cd yamdi-1.4
gcc yamdi.c -o yamdi -O2 -Wall
mv yamdi /usr/bin/
yamdi -h

INSTALLATION RESULTS

mencoder: /usr/local/bin/mencoder
mplayer: /usr/local/bin/mplayer
yamdi: /usr/bin/yamdi

Add these shortcuts to /usr/bin if you need these there by default:
mencoder to /usr/local/bin/mencoder
mplayer to /usr/local/bin/mplayer

SuPHP fix

With suphp  “env -i” is required when executing php scripts.

exec(“env -i /usr/bin/php ” . $cmd.  ‘>/dev/null &’);

MediaInfo
http://mediainfo.sourceforge.net/en/Download/CentOS

wget http://downloads.sourceforge.net/zenlib/libzen0-0.4.14-1.i386.CentOS_5.rpm
wget http://downloads.sourceforge.net/zenlib/libzen0-devel-0.4.14-1.i386.CentOS_5.rpm
wget http://downloads.sourceforge.net/mediainfo/libmediainfo0-0.7.32-1.i386.CentOS_5.rpm
wget http://downloads.sourceforge.net/mediainfo/libmediainfo0-devel-0.7.32-1.i386.CentOS_5.rpm
wget http://downloads.sourceforge.net/mediainfo/mediainfo-0.7.32-1.i386.CentOS_5.rpm
rpm -vi libzen0-0.4.14-1.i386.CentOS_5.rpm
rpm -vi libzen0-devel-0.4.14-1.i386.CentOS_5.rpm
rpm -vi libmediainfo0-0.7.32-1.i386.CentOS_5.rpm
rpm -vi libmediainfo0-devel-0.7.32-1.i386.CentOS_5.rpm
rpm -vi mediainfo-0.7.32-1.i386.CentOS_5.rpm

ln -s /usr/bin/mediainfo /usr/local/bin/mediainfo

MP4Box

yum -y install freetype-devel SDL-devel freeglut-devel

wget -c http://mirror.ffmpeginstaller.com/source/gpac/gpac-full-0.4.5.tar.gz

tar -xzf gpac-full-0.4.5.tar.gz
cd gpac

./configure –prefix=/usr/local/cpffmpeg/ –extra-cflags=-I/usr/local/cpffmpeg/include/ –extra-ldflags=-L/usr/local/cpffmpeg/lib –disable-wx –strip

make && make lib &&  make apps && make install lib && make install

cp bin/gcc/libgpac.so /usr/lib

ln -s /usr/local/cpffmpeg/bin/MP4Box /usr/local/bin/MP4Box
ln -s /usr/local/cpffmpeg/bin/MP4Box /usr/bin/MP4Box

install -m644 bin/gcc/libgpac.so /usr/local/lib/libgpac.so
chmod +x /usr/local/lib/libgpac.so
ldconfig

neroAacEnc

wget ftp://ftp6.nero.com/tools/NeroDigitalAudio.zip
unzip NeroDigitalAudio.zip -d nero
cd nero/linux
sudo install -D -m755 neroAacEnc /usr/local/bin

ln -s /usr/local/bin/neroAacEnc /usr/bin/neroAacEnc

uploadprogress

cd /usr/local/src
wget http://pecl.php.net/get/uploadprogress-1.0.3.1.tgz

 

t

ar -zxvf uploadprogress-1.0.3.1.tgz
cd uploadprogress-1.0.3.1
phpize
./configure && make && make install

Edit /usr/lib/php.ini and add:

extension = “uploadprogress.so”

 

 

FFMPEG2Theora

 

wget http://v2v.cc/~j/ffmpeg2theora/ffmpeg2theora-0.29.linux32.bin
chmod +x ffmpeg2theora-0.29.linux32.bin
install -m 755 ffmpeg2theora-0.29.linux32.bin  /usr/local/bin/ffmpeg2theora

 

wget http://v2v.cc/~j/ffmpeg2theora/ffmpeg2theora-0.29.linux64.bin
chmod +x ffmpeg2theora-0.29.linux64.bin
install -m 755 ffmpeg2theora-0.29.linux64.bin /usr/local/bin/ffmpeg2theora

 

Also see:

http://www.vimp.com/en/documentation-faq-article/items/howto-install-the-transcoding-tools-on-redhat-centos-etc.html

ASM is a modular assembler, it is required by the x264 package.

codec:$ wget \
http://www.tortall.net/projects/yasm/releases/yasm-0.7.0.tar.gz
codec:$ tar zfvx yasm-0.7.0.tar.gz
codec:$ cd yasm-0.7.0
codec:$ ./configure
codec:$ make && make install
codec:$ cd ..