Build video enc env

From M1Research

(Difference between revisions)
Jump to: navigation, search
(VLC)
Line 1: Line 1:
-
== System prerequisites ==
+
**** Article mingated to [streaming411.com http://streaming411.com/wiki/index.php?title=Building_encoding_tools_from_scratch]
-
Building packages required preinstalled system packages:
+
-
*base development packages: nasm, gcc, gcc-c++, libtool, automake*, autoconf*, make, libstdc++-devel, glibc-devel, subversion
+
-
*development packages: alsa-lib-devel, SDL-devel, gtk+-devel, gtk2-devel, ncurses-devel
+
-
*wxWidgets support required additional packages: wxGTK-2.6.x, wxGTK-devel-2.6.x, wxGTK-gl-2.6.x ( you can find sources at [http://www.wxwidgets.org/ http://www.wxwidgets.org/], rpm could be found at [http://fedoraproject.org/wiki/Extras http://fedoraproject.org/wiki/Extras] or [http://freshrpms.net/ http://freshrpms.net/])
+
-
 
+
-
I choose path <code>/usr/local/enctools</code> for storing all builded files to avoid confilcts with other libs.
+
-
 
+
-
Make sure your <code>PATH</code> contains <code>/usr/local/enctools/bin</code>, to update path :
+
-
<pre>
+
-
PATH=$PATH:/usr/local/enctools/bin; export PATH
+
-
</pre>
+
-
 
+
-
Include libraries path to <code>/etc/ld.so.conf</code>:<pre>
+
-
--skipped--
+
-
/usr/local/enctools/lib
+
-
--skipped--
+
-
</pre>
+
-
After adding path rebuild <code>ld.so.cache</code>:
+
-
<pre>
+
-
ldconfig
+
-
</pre>
+
-
 
+
-
== Software building ==
+
-
 
+
-
=== lame ===
+
-
An MP3 encoder and graphical frame analyzer. [http://freshmeat.net/projects/lame/ http://freshmeat.net/projects/lame/]
+
-
<pre>
+
-
gzip -cd lame-3.97b2.tar.gz | tar xvf -
+
-
cd lame-3.97
+
-
./configure --prefix=/usr/local/enctools
+
-
make; make install
+
-
cd ..
+
-
</pre>
+
-
 
+
-
=== ogg ===
+
-
Ogg is a multimedia container format, and the native file and stream format for the Xiph.org multimedia codecs. As with all Xiph.org technology is it an open format free for anyone to use. [http://www.xiph.org/ogg/ http://www.xiph.org/ogg/]
+
-
<pre>
+
-
gzip -cd libogg-1.1.3.tar.gz | tar xvf -
+
-
cd libogg-1.1.3
+
-
./configure --prefix=/usr/local/enctools
+
-
make ; make install
+
-
cd ..
+
-
</pre>
+
-
 
+
-
=== vorbis ===
+
-
Ogg Vorbis is a fully open, non-proprietary, patent-and-royalty-free, general-purpose compressed audio format [http://www.xiph.org/vorbis/ http://www.xiph.org/vorbis/]
+
-
<pre>
+
-
gzip -cd libvorbis-1.1.2.tar.gz | tar xvf -
+
-
cd libvorbis-1.1.2
+
-
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/enctools/lib ./configure --prefix=/usr/local/enctools
+
-
make ; make install
+
-
cd ..
+
-
</pre>
+
-
 
+
-
=== theora ===
+
-
Video codec [http://theora.org/ http://theora.org/]
+
-
<pre>
+
-
gzip -cd libtheora-1.0alpha6.tar.gz | tar xvf -
+
-
cd libtheora-1.0alpha6
+
-
./configure --prefix=/usr/local/enctools --with-ogg=/usr/local/enctools --with-vorbis=/usr/local/enctools
+
-
make ; make install
+
-
cd ..
+
-
</pre>
+
-
 
+
-
=== flac ===
+
-
Free Lossless Audio Codec [http://flac.sourceforge.net/ http://flac.sourceforge.net/]
+
-
<pre>
+
-
gzip -cd flac-1.1.2.tar.gz | tar xvf -
+
-
cd flac-1.1.2
+
-
./configure --prefix=/usr/local/enctools --with-ogg=/usr/local/enctools
+
-
make ; make install
+
-
cd ..
+
-
</pre>
+
-
 
+
-
=== speex ===
+
-
Speex is an Open Source/Free Software  patent-free audio compression format designed for speech. The Speex Project aims to lower the barrier of entry for voice applications by providing a free alternative to expensive proprietary speech codecs. Moreover, Speex is well-adapted to Internet applications and provides useful features that are not present in most other codecs. Finally, Speex is part of the GNU  Project and is available under the Xiph.org variant of the BSD license. [http://speex.org/ http://speex.org/]
+
-
<pre>
+
-
gzip -cd speex-1.0.5.tar.gz | tar xvf -
+
-
cd speex-1.0.5
+
-
./configure --prefix=/usr/local/enctools --with-ogg-dir=/usr/local/enctools
+
-
make ; make install
+
-
cd ..
+
-
</pre>
+
-
 
+
-
=== faad2 ===
+
-
AAC decoder library [http://www.audiocoding.com/modules/mydownloads/ http://www.audiocoding.com/modules/mydownloads/]
+
-
 
+
-
FC4,FC5 required patch for compiling package faad2.mp4ff_track_add.patch
+
-
<pre>
+
-
diff -uNr faad2.origin/common/mp4ff/mp4ffint.h faad2/common/mp4ff/mp4ffint.h
+
-
--- faad2.origin/common/mp4ff/mp4ffint.h        2004-04-12 21:17:42.000000000 +0300
+
-
+++ faad2/common/mp4ff/mp4ffint.h      2006-06-22 21:11:14.000000000 +0300
+
-
@@ -345,7 +345,7 @@
+
-
mp4ff_t *mp4ff_open_edit(mp4ff_callback_t *f);
+
-
#endif
+
-
void mp4ff_close(mp4ff_t *ff);
+
-
-void mp4ff_track_add(mp4ff_t *f);
+
-
+/*void mp4ff_track_add(mp4ff_t *f); */
+
-
int32_t parse_sub_atoms(mp4ff_t *f, const uint64_t total_size,int meta_only);
+
-
int32_t parse_atoms(mp4ff_t *f,int meta_only);
+
-
</pre>
+
-
Compilation process:
+
-
<pre>
+
-
mkdir faad2
+
-
cd faad2
+
-
gzip -cd ../faad2-15092004.tar.gz | tar xvf -
+
-
patch -p1 < ../faad2.mp4ff_track_add.patch
+
-
autoreconf -vif
+
-
./configure --prefix=/usr/local/enctools --with-mp4v2
+
-
make ; make install
+
-
cd ..
+
-
</pre>
+
-
 
+
-
=== faac ===
+
-
AAC endecoder library [http://www.audiocoding.com/modules/mydownloads/ http://www.audiocoding.com/modules/mydownloads/]
+
-
<pre>
+
-
gzip -cd faac-18102004.tar.gz | tar xvf -
+
-
cd faac
+
-
autoreconf -vif
+
-
./configure --prefix=/usr/local/enctools --with-mp4v2
+
-
make ; make install
+
-
cd ..
+
-
</pre>
+
-
 
+
-
=== xvidcore ===
+
-
XviD is an ISO MPEG-4 compliant video codec, so designed to compress/decompress digital video. It's a open source project, which is developed and maintained by a handful of skilled and interested engineers from all over the world. [http://www.xvid.org/ http://www.xvid.org/]
+
-
<pre>
+
-
gzip -cd xvidcore-1.1.0.tar.gz | tar xvf -
+
-
cd xvidcore-1.1.0
+
-
cd build/generic
+
-
./configure --prefix=/usr/local/enctools
+
-
make ; make install
+
-
cd ..
+
-
</pre>
+
-
 
+
-
=== x264 ===
+
-
x264 - a free h264/avc encoder [http://developers.videolan.org/x264.html http://developers.videolan.org/x264.html]
+
-
<pre>
+
-
bzip2 -cd x264-snapshot-20060619-2245.tar.bz2 | tar xvf -
+
-
cd x264-snapshot-20060619-2245
+
-
./configure --prefix=/usr/local/enctools --enable-shared
+
-
make ; make install
+
-
cd ..
+
-
</pre>
+
-
 
+
-
=== a52dec ===
+
-
liba52 - a free ATSC A/52 stream decoder [http://liba52.sourceforge.net/ http://liba52.sourceforge.net/]
+
-
<pre>
+
-
gzip -cd a52dec-0.7.4.tar.gz | tar xvf -
+
-
cd a52dec-0.7.4
+
-
./configure --prefix=/usr/local/enctools
+
-
make ; make install
+
-
</pre>
+
-
 
+
-
=== libdv ===
+
-
Quasar DV Codec: libdv [http://libdv.sourceforge.net/ http://libdv.sourceforge.net/]
+
-
 
+
-
NB: FC5 require CVS version. See [http://sourceforge.net/cvs/?group_id=4393 http://sourceforge.net/cvs/?group_id=4393]
+
-
 
+
-
<pre>
+
-
gzip -cd libdv-0.104.tar.gz | tar xvf -
+
-
cd libdv-0.104
+
-
./configure --disable-gtk --disable-xv --prefix=/usr/local/enctools
+
-
make ; make install
+
-
cd ..
+
-
</pre>
+
-
 
+
-
=== libraw1394 ===
+
-
The Linux kernel's IEEE 1394 subsystem provides access to the raw 1394 bus through the raw1394 module. [http://www.linux1394.org/  http://www.linux1394.org/]
+
-
<pre>
+
-
gzip -cd libraw1394-1.2.1.tar.gz | tar xvf -
+
-
cd libraw1394-1.2.1
+
-
./configure --prefix=/usr/local/enctools
+
-
make ; make install
+
-
cd ..
+
-
</pre>
+
-
 
+
-
=== libdc1394 ===
+
-
libdc1394 is a library that is intended to provide a high level programming interface for application developers who wish to control IEEE 1394 based cameras that conform to the 1394-based Digital Camera Specification [http://sourceforge.net/projects/libdc1394 http://sourceforge.net/projects/libdc1394]
+
-
 
+
-
On FC5 to avoid <code>'CLK_TCK' undeclared</code> error message during compiling we should apply patch <code>libdc1394-1.2.1.CLOCKS_PER_SEC.patch</code>: (FC4 do not require patch)<pre>
+
-
diff -uNr libdc1394-1.2.1.origin/examples/grab_partial_image.c libdc1394-1.2.1/examples/grab_partial_image.c
+
-
--- libdc1394-1.2.1.origin/examples/grab_partial_image.c        2005-08-18 03:03:06.000000000 -0400
+
-
+++ libdc1394-1.2.1/examples/grab_partial_image.c      2006-06-29 12:09:12.000000000 -0400
+
-
@@ -218,7 +218,7 @@
+
-
    /*---------------------------------------------------------------------
+
-
      *  output elapsed time
+
-
      *---------------------------------------------------------------------*/
+
-
-    elapsed_time = (float)(times(&tms_buf) - start_time) / CLK_TCK;
+
-
+    elapsed_time = (float)(times(&tms_buf) - start_time) / CLOCKS_PER_SEC;
+
-
    printf( "got frame %d. elapsed time: %g sec ==> %g frames/second\n",
+
-
            i, elapsed_time, (float)i / elapsed_time);
+
-
  }
+
-
</pre>
+
-
 
+
-
Building process:
+
-
 
+
-
<pre>
+
-
gzip -cd libdc1394-1.2.1.tar.gz | tar xvf -
+
-
cd libdc1394-1.2.1
+
-
 
+
-
patch -p1 < ../libdc1394-1.2.1.CLOCKS_PER_SEC.patch
+
-
 
+
-
CPPFLAGS="-I/usr/local/enctools/include/"; export CPPFLAGS
+
-
CFLAGS="-I/usr/local/enctools/include/"; export CFLAGS
+
-
LDFLAGS="-L/usr/local/enctools/lib/"; export LDFLAGS
+
-
./configure --prefix=/usr/local/enctools
+
-
 
+
-
make ; make install
+
-
cd ..
+
-
</pre>
+
-
 
+
-
=== libavc1394 ===
+
-
libavc1394 is a programming interface for the 1394 Trade Association AV/C (Audio/Video Control) Digital Interface Command Set. [http://sourceforge.net/projects/libavc1394/ http://sourceforge.net/projects/libavc1394/]
+
-
<pre>
+
-
gzip -cd libavc1394-0.5.3.tar.gz | tar xvf -
+
-
cd libavc1394-0.5.3
+
-
LIBRAW1394_CFLAGS="-I/usr/local/enctools/include/" \
+
-
LIBRAW1394_LIBS="-L/usr/local/enctools/lib/ -lraw1394" \
+
-
./configure --prefix=/usr/local/enctools
+
-
make ; make install
+
-
cd ..
+
-
</pre>
+
-
 
+
-
=== ffmpeg ===
+
-
FFmpeg is a complete solution to record, convert and stream audio and video. It includes libavcodec, the leading audio/video codec library. [http://ffmpeg.mplayerhq.hu/ http://ffmpeg.mplayerhq.hu/]
+
-
 
+
-
Compiling required patch <code>ffmpeg.faad2.faacDecOpen-NeAACDecOpen.patch</code> due to faac namespace change (faacDecOpen -> NeAACDecOpen):
+
-
<pre>
+
-
diff -uNr ffmpeg.origin/configure ffmpeg/configure
+
-
--- ffmpeg.origin/configure    2006-06-20 15:51:34.000000000 +0300
+
-
+++ ffmpeg/configure    2006-06-23 00:40:54.000000000 +0300
+
-
@@ -1178,7 +1178,7 @@
+
-
enabled libogg  && require libogg ogg/ogg.h ogg_sync_init -logg
+
-
enabled vorbis  && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbis -lvorbisenc
+
-
enabled theora  && require libtheora theora/theora.h theora_info_init -ltheora
+
-
-enabled faad    && require libfaad faad.h faacDecOpen -lfaad
+
-
+enabled faad    && require libfaad faad.h NeAACDecOpen -lfaad
+
-
enabled xvid    && require XviD xvid.h xvid_global -lxvidcore
+
-
enabled x264    && require x264 x264.h x264_encoder_open -lx264
+
-
enabled dc1394  && require libdc1394 libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394
+
-
</pre>
+
-
 
+
-
Configuring procedure:
+
-
<pre>
+
-
bzip2 -cd ffmpeg-r5504.tar.bz2 | tar xvf -
+
-
cd ffmpeg
+
-
 
+
-
patch -p1 < ../ffmpeg.faad2.faacDecOpen-NeAACDecOpen.patch
+
-
 
+
-
PATH=$PATH:/usr/local/enctools/bin ./configure --prefix=/usr/local/enctools \
+
-
--enable-mp3lame --enable-libogg --enable-vorbis --enable-theora \
+
-
--enable-faad --enable-faadbin --enable-faac --enable-xvid --enable-x264 \
+
-
--enable-a52 --enable-a52bin --enable-amr_nb --enable-amr_wb --enable-dc1394 \
+
-
--enable-gpl --enable-pp --enable-shared \
+
-
--extra-cflags="-I/usr/local/enctools/include" --extra-ldflags="-L/usr/local/enctools/lib"
+
-
</pre>
+
-
AMR support required additional sources - ffmpeg writes some notes about this:
+
-
<pre>
+
-
AMR WB FLOAT NOTICE ! Make sure you have downloaded TS26.204
+
-
V5.1.0 from
+
-
http://www.3gpp.org/ftp/Specs/archive/26_series/26.204/26204-510.zip
+
-
and extracted the source to libavcodec/amrwb_float
+
-
 
+
-
AMR NB FLOAT NOTICE ! Make sure you have downloaded TS26.104
+
-
REL-5 V5.1.0 from
+
-
http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-510.zip
+
-
and extracted the source to libavcodec/amr_float
+
-
If you try this on alpha, you may need to change Word32 to int in amr/typedef.h
+
-
</pre>
+
-
 
+
-
Download theese files and put into source contribution directory, put the source into mentioned place:
+
-
<pre>
+
-
mkdir -p libavcodec/amrwb_float
+
-
unzip ../26204-510.zip -d libavcodec/amrwb_float
+
-
unzip libavcodec/amrwb_float/26204-510_ANSI-C_source_code.zip -d libavcodec/amrwb_float
+
-
 
+
-
mkdir -p libavcodec/amr_float
+
-
unzip ../26104-510.zip -d libavcodec/amr_float
+
-
unzip libavcodec/amr_float/26104-510_ANSI_C_source_code.zip -d libavcodec/amr_float
+
-
</pre>
+
-
 
+
-
After you put amr sources start ffmpeg building:
+
-
<pre>
+
-
make ; make install
+
-
cd ..
+
-
</pre>
+
-
 
+
-
=== live555 ===
+
-
LIVE555 Streaming Media (rtsp, rtp support) [http://live555.com/liveMedia/ http://live555.com/liveMedia/]
+
-
<pre>
+
-
gzip -cd live.2006.05.17.tar.gz | tar xvf -
+
-
cd live
+
-
./genMakefiles linux
+
-
make
+
-
cd ..
+
-
</pre>
+
-
 
+
-
=== libmad ===
+
-
A high-quality MPEG audio decoder. [http://freshmeat.net/projects/libmad/ http://freshmeat.net/projects/libmad/]
+
-
<pre>
+
-
gzip -cd libmad-0.15.1b.tar.gz | tar xvf -
+
-
cd libmad-0.15.1b
+
-
./configure --prefix=/usr/local/enctools
+
-
make ; make install
+
-
cd ..
+
-
</pre>
+
-
 
+
-
=== libmpeg2 ===
+
-
libmpeg2 - a free MPEG-2 video stream decoder. [http://libmpeg2.sourceforge.net/ http://libmpeg2.sourceforge.net/]
+
-
<pre>
+
-
gzip -cd mpeg2dec-0.4.0b.tar.gz | tar xvf -
+
-
cd mpeg2dec-0.4.0
+
-
./configure --prefix=/usr/local/enctools
+
-
make
+
-
make install
+
-
cd ..
+
-
</pre>
+
-
 
+
-
=== fribidi ===
+
-
GNU FriBidi is an implementation of the [WWW]Unicode Bidirectional Algorithm (bidi). [http://fribidi.org/wiki/ http://fribidi.org/wiki/]
+
-
<pre>
+
-
gzip -cd fribidi-0.10.7.tar.gz | tar xvf -
+
-
cd fribidi-0.10.7
+
-
./configure --prefix=/usr/local/enctools
+
-
make ; make install
+
-
cd ..
+
-
</pre>
+
-
 
+
-
=== VLC ===
+
-
VLC - the cross-platform media player and streaming server. [http://www.videolan.org/vlc/ http://www.videolan.org/vlc/ ]
+
-
 
+
-
to avoid "<code>error: redefinition of typedef ‘byte_t’</code>", fix file <code>/usr/local/enctools/include/libraw1394/raw1394.h</code>, comment out line 43:
+
-
<pre>--skipped--
+
-
/* typedef u_int8_t  byte_t; */
+
-
--skipped--</pre>
+
-
 
+
-
Building procedure:
+
-
<pre>
+
-
bzip2 -cd vlc-0.8.5.tar.bz2 | tar xvf -
+
-
cd vlc-0.8.5
+
-
 
+
-
CPPFLAGS="-I/usr/local/enctools/include/"; export CPPFLAGS
+
-
CFLAGS="-I/usr/local/enctools/include/"; export CFLAGS
+
-
LDFLAGS="-L/usr/local/enctools/lib/"; export LDFLAGS
+
-
 
+
-
ldconfig
+
-
 
+
-
./configure  --prefix=/usr/local/enctools \
+
-
--enable-dv \
+
-
--enable-livedotcom --with-livedotcom-tree=../live \
+
-
--enable-v4l \
+
-
--enable-ogg --enable-mad --enable-faad --enable-a52 --enable-flac \
+
-
--enable-libmpeg2 --enable-vorbis --enable-speex --enable-theora \
+
-
--enable-png --enable-x264 \
+
-
--enable-freetype --enable-fribidi --enable-libxml2 \
+
-
--enable-ffmpeg --with-ffmpeg-mp3lame --with-ffmpeg-faac \
+
-
--with-ffmpeg-vorbis --with-ffmpeg-theora --with-ffmpeg-ogg \
+
-
--disable-wxwidgets --disable-skins2
+
-
 
+
-
make ; make install
+
-
 
+
-
cd ..
+
-
</pre>
+
-
 
+
-
=== MPEG4IP ===
+
-
MPEG4IP: Open Source, Open Standards, Open Streaming. [http://www.mpeg4ip.net/ http://www.mpeg4ip.net/]
+
-
 
+
-
Alsa support propre linking require patch mpeg4ip.alsa_linking_fix.patch:
+
-
<pre>
+
-
diff -uNr mpeg4ip-1.5.0.1.origin/server/mp4live/Makefile.am mpeg4ip-1.5.0.1/server/mp4live/Makefile.am
+
-
--- mpeg4ip-1.5.0.1.origin/server/mp4live/Makefile.am  2006-03-10 20:49:44.000000000 +0200
+
-
+++ mpeg4ip-1.5.0.1/server/mp4live/Makefile.am  2006-06-24 17:10:22.000000000 +0300
+
-
@@ -169,6 +169,7 @@
+
-
        @SRTPLIB@ \
+
-
        -lpthread \
+
-
        @SDL_LIBS@ $(GUILIBS) @FFMPEG_LIB@ @LIBVORBIS_LIB@ $(XVID_LIB) \
+
-
+      @ALSA_LIBS@ \
+
-
        @X264_LIB@
+
-
 
+
-
EXTRA_DIST = $(ed2) video_v4l_source.cpp
+
-
diff -uNr mpeg4ip-1.5.0.1.origin/server/mp4live/Makefile.in mpeg4ip-1.5.0.1/server/mp4live/Makefile.in
+
-
--- mpeg4ip-1.5.0.1.origin/server/mp4live/Makefile.in  2006-06-08 22:17:46.000000000 +0300
+
-
+++ mpeg4ip-1.5.0.1/server/mp4live/Makefile.in  2006-06-24 17:10:12.000000000 +0300
+
-
@@ -482,6 +482,7 @@
+
-
        @SRTPLIB@ \
+
-
        -lpthread \
+
-
        @SDL_LIBS@ $(GUILIBS) @FFMPEG_LIB@ @LIBVORBIS_LIB@ $(XVID_LIB) \
+
-
+      @ALSA_LIBS@ \
+
-
        @X264_LIB@
+
-
 
+
-
EXTRA_DIST = $(ed2) video_v4l_source.cpp
+
-
</pre>
+
-
Configuring procedure:
+
-
<pre>
+
-
CPPFLAGS="-I/usr/local/enctools/include/"; export CPPFLAGS
+
-
CFLAGS="-I/usr/local/enctools/include/"; export CFLAGS
+
-
LDFLAGS="-L/usr/local/enctools/lib/"; export LDFLAGS
+
-
 
+
-
gzip -cd mpeg4ip-1.5.0.1.tar.gz | tar xvf -
+
-
cd mpeg4ip-1.5.0.1
+
-
 
+
-
patch -p1 < ../mpeg4ip.alsa_linking_fix.patch
+
-
 
+
-
./bootstrap  --prefix=/usr/local/enctools \
+
-
--enable-server \
+
-
--enable-player \
+
-
--enable-mp4live \
+
-
--enable-mp4live-alsa \
+
-
--enable-ffmpeg
+
-
</pre>
+
-
After configuring mpeg4ip reports:<pre>
+
-
Mp4live encoder report:
+
-
    ffmpeg encoder is installed
+
-
    xvid encoder is installed
+
-
    x264 encoder is installed
+
-
    lame encoder is installed
+
-
    faac encoder is installed </pre>
+
-
Build mpeg4ip:
+
-
<pre>make ; make install; cd .. </pre>
+

Revision as of 13:18, 28 July 2006

Personal tools