[Speex-dev] compiling ffmpeg with --enable-libspeex (was Re: from Adobe Flex / Flash Player 10 .flv Speex via Red5 to .wav PCM?)

James Salsman jsalsman at gmail.com
Wed Mar 11 23:09:55 PDT 2009


This is resolved:

apt-get remove libspeex-dev
cd ~/src/speex-1.2rc1/
./configure --prefix=/usr
make; make install
cd ../ffmpeg
./configure --enable-libspeex
make; make install

worked; then I was able to decode a Speex .flv file:

~/flvs$ ffmpeg -i SpeexQ6R16Efalse.flv foo.wav
FFmpeg version SVN-r17174, Copyright (c) 2000-2009 Fabrice Bellard, et al.
  configuration: --enable-libspeex --enable-libamr-nb --enable-nonfree
  libavutil     49.14. 0 / 49.14. 0
  libavcodec    52.15. 0 / 52.15. 0
  libavformat   52.27. 0 / 52.27. 0
  libavdevice   52. 1. 0 / 52. 1. 0
  built on Mar 11 2009 22:09:20, gcc: 4.2.4 (Ubuntu 4.2.4-1ubuntu3)
[flv @ 0xa02e330]Could not find codec parameters (Video: 0x0000)
Input #0, flv, from 'SpeexQ6R16Efalse.flv':
  Duration: 00:00:07.24, start: 0.000000, bitrate: N/A
    Stream #0.0: Video: 0x0000, 1000.00 tb(r)
    Stream #0.1: Audio: libspeex, 16000 Hz, mono, s16
Output #0, wav, to 'foo.wav':
    Stream #0.0: Audio: pcm_s16le, 16000 Hz, mono, s16, 256 kb/s
Stream mapping:
  Stream #0.1 -> #0.0
[libspeex @ 0xa037ae0]Missing Speex header, assuming defaults.
Press [q] to stop encoding
size=     228kB time=7.28 bitrate= 256.0kbits/s
video:0kB audio:228kB global headers:0kB muxing overhead 0.018887%

~/flvs$ file foo.wav
foo.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit,
mono 16000 Hz

and I am able to play that .wav file as audio correctly.


On Wed, Mar 11, 2009 at 10:52 PM, James Salsman <jsalsman at gmail.com> wrote:
> I am having trouble compiling ffmpeg to support speex, which didn't
> work with the ubuntu libspeex-dev package, but looks like it might
> with the Speex version 1.2rc1 tarball from http://speex.org/downloads/
>
> How do I tell ffmpeg's configure and/or make to use the 1.2rc1 version
> of libspeex in /usr/local/include instead of the older debian/ubuntu
> libspeex-dev package in /usr/include/speex?
>
> At present, here is where I am stuck:
>
> ~/src/ffmpeg$ make
> gcc -L"/home/jsalsman/src/ffmpeg"/libavdevice
> -L"/home/jsalsman/src/ffmpeg"/libavformat
> -L"/home/jsalsman/src/ffmpeg"/libavcodec
> -L"/home/jsalsman/src/ffmpeg"/libavutil -rdynamic -export-dynamic
> -Wl,--warn-common -Wl,--as-needed
> -Wl,-rpath-link,"/home/jsalsman/src/ffmpeg"/libpostproc
> -Wl,-rpath-link,"/home/jsalsman/src/ffmpeg"/libswscale
> -Wl,-rpath-link,"/home/jsalsman/src/ffmpeg"/libavfilter
> -Wl,-rpath-link,"/home/jsalsman/src/ffmpeg"/libavdevice
> -Wl,-rpath-link,"/home/jsalsman/src/ffmpeg"/libavformat
> -Wl,-rpath-link,"/home/jsalsman/src/ffmpeg"/libavcodec
> -Wl,-rpath-link,"/home/jsalsman/src/ffmpeg"/libavutil -Wl,-Bsymbolic
> -o ffmpeg_g ffmpeg.o cmdutils.o -lavdevice -lavformat -lavcodec
> -lavutil -lm -lamrnb -lm -lspeex -ldl -ldl
> /home/jsalsman/src/ffmpeg/libavcodec/libavcodec.a(libspeexdec.o): In
> function `libspeex_decode_close':
> /home/jsalsman/src/ffmpeg/libavcodec/libspeexdec.c:127: undefined
> reference to `speex_header_free'
> collect2: ld returned 1 exit status
> make: *** [ffmpeg_g] Error 1
>
> ~/src/ffmpeg$ grep speex_header_free /usr/include/speex/*
> [no matches]
>
> ~/src/ffmpeg$ ls -l /usr/include/speex/
> total 76
> ...
> -rw-r--r-- 1 root root 13179 2008-05-07 14:14 speex.h
> -rw-r--r-- 1 root root  3720 2008-05-07 14:14 speex_header.h
> -rw-r--r-- 1 root root  4456 2008-05-07 14:14 speex_jitter.h
> -rw-r--r-- 1 root root  6147 2008-05-07 14:14 speex_preprocess.h
> -rw-r--r-- 1 root root  3190 2008-05-07 14:14 speex_stereo.h
> -rw-r--r-- 1 root root  4355 2008-05-07 14:14 speex_types.h
>
> I got the speex-1.2rc1 tarball from http://speex.org/downloads/ and
> ./configure, make, and sudo make install worked fine, placing a
> different (and slightly larger) version of the headers in
> /usr/local/include/speex/:
>
> ~/src/ffmpeg$ grep speex_header_free /usr/local/include/speex/*
> /usr/local/include/speex/speex_header.h:void speex_header_free(void *ptr);
>
> Now again, how do I tell ffmpeg's configure and/or make to use the
> 1.2rc1 version of libspeex in /usr/local/include instead of the older
> debian/ubuntu libspeex-dev package in /usr/include/speex?
>
>
> Background:  It turned out that in order to build ffmpeg with
> ./configure --enable-libspeex, I apparently needed the debian/ubuntu
> package called libspeex-dev. There doesn't seem to be any
> documentation hinting at this, and configuring without that package
> fails without a really useful or explicit error message to help solve
> the problem; please see the transcript excerpts below.
>
> This thread was particularly useful:
>  http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/2008-October/thread.html#55124
>
> ~/src/ffmpeg$ ./configure --enable-libspeex
> ERROR: libspeex not found
> If you think configure made a mistake, make sure you are using the latest
> version from SVN.  If the latest version fails, report the problem to the
> ffmpeg-user at mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
> Include the log file "config.err" produced by configure as this will help
> solving the problem.
>
> ~/src/ffmpeg$ sudo apt-get install libspeex
> Reading package lists... Done
> Building dependency tree
> Reading state information... Done
> Package libspeex is not available, but is referred to by another package.
> This may mean that the package is missing, has been obsoleted, or
> is only available from another source
> However the following packages replace it:
>  libspeex1
> E: Package libspeex has no installation candidate
>
> ~/src/ffmpeg$ sudo apt-get install libspeex1
> Reading package lists... Done
> Building dependency tree
> Reading state information... Done
> Suggested packages:
>  speex
> The following NEW packages will be installed:
>  libspeex1
> 0 upgraded, 1 newly installed, 0 to remove and 10 not upgraded.
> Need to get 0B/75.3kB of archives.
> After this operation, 184kB of additional disk space will be used.
> Selecting previously deselected package libspeex1.
> (Reading database ... 22077 files and directories currently installed.)
> Unpacking libspeex1 (from .../libspeex1_1.1.12-3ubuntu0.8.04.1_i386.deb) ...
> Setting up libspeex1 (1.1.12-3ubuntu0.8.04.1) ...
>
> Processing triggers for libc6 ...
> ldconfig deferred processing now taking place
>
> ~/src/ffmpeg$ ./configure --enable-libspeex
> ERROR: libspeex not found
> If you think configure made a mistake, make sure you are using the latest
> version from SVN.  If the latest version fails, report the problem to the
> ffmpeg-user at mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
> Include the log file "config.err" produced by configure as this will help
> solving the problem.
>
> ~/src/ffmpeg$ grep -i speex !!$
> grep -i speex config.err
> # ./configure --enable-libspeex
>    libspeex
>    libspeex
> libspeex_decoder'
> FFMPEG_CONFIGURATION='--enable-libspeex'
> libspeex='yes'
> libspeex_decoder='yes'
> libspeex_decoder_deps='libspeex'
> opt='--enable-libspeex'
> option='libspeex'
> optval='--enable-libspeex'
> var='libspeex'
> check_lib speex/speex.h speex_decoder_init -lspeex
> check_header speex/speex.h
>    1   #include <speex/speex.h>
> /tmp/ffmpeg-conf--17548-.c:1:25: error: speex/speex.h: No such file or directory
> ERROR: libspeex not found
>
> ~/src/ffmpeg$ sudo apt-get install libspeex-dev
> Reading package lists... Done
> Building dependency tree
> Reading state information... Done
> The following NEW packages will be installed:
>  libspeex-dev
> 0 upgraded, 1 newly installed, 0 to remove and 10 not upgraded.
> Need to get 92.8kB of archives.
> After this operation, 324kB of additional disk space will be used.
> Get:1 http://us.archive.ubuntu.com hardy-updates/main libspeex-dev
> 1.1.12-3ubuntu0.8.04.1 [92.8kB]
> Fetched 92.8kB in 1s (76.0kB/s)
> Selecting previously deselected package libspeex-dev.
> (Reading database ... 22083 files and directories currently installed.)
> Unpacking libspeex-dev (from
> .../libspeex-dev_1.1.12-3ubuntu0.8.04.1_i386.deb) ...
> Setting up libspeex-dev (1.1.12-3ubuntu0.8.04.1) ...
>
> ~/src/ffmpeg$ ./configure --enable-libspeex
> install prefix            /usr/local
> ....
>
> ~/src/ffmpeg$ make
> gcc -DHAVE_AV_CONFIG_H -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -I.
> -I"/home/jsalsman/src/ffmpeg" -D_ISOC99_SOURCE
> -D_POSIX_C_SOURCE=200112 -std=c99 -fomit-frame-pointer -g
> -Wdeclaration-after-statement -Wall -Wno-switch
> -Wdisabled-optimization -Wpointer-arith -Wredundant-decls
> -Wno-pointer-sign -Wcast-qual -Wwrite-strings -Wundef -O3
> -fno-math-errno      -MM -MG libavcodec/libspeexdec.c | sed -e
> "/^#.*/d" -e "s,^[[:space:]]*libspeexdec\.o,libavcodec/libspeexdec.o,"
> -e "s,\([[:space:]]\)\(version\.h\),\1\$(BUILD_ROOT_REL)/\2," >
> libavcodec/libspeexdec.d
> ....
> (see eventual error above:
> "...src/ffmpeg/libavcodec/libavcodec.a(libspeexdec.o): In function
> `libspeex_decode_close':
> /home/jsalsman/src/ffmpeg/libavcodec/libspeexdec.c:127: undefined
> reference to `speex_header_free')
>
>
> On Wed, Mar 11, 2009 at 7:14 PM, Keith Kyzivat <kkyzivat at sipez.com> wrote:
>>
>> I'm quite sure you won't find an answer to the first question here, you'll
>> have to ask in some Adobe-Flash centric forums.
>> As for the second question, once you have a file with speex audio, you can
>> use speexdec (included in speex distribution) to convert it to a PCM Wave
>> file (*.wav), or a raw PCM file.
>>
>> On Wed, Mar 11, 2009 at 4:51 PM, James Salsman <jsalsman at gmail.com> wrote:
>>>
>>> I am having trouble converting a .flv file uploaded from Adobe Flex /
>>> Flash Player 10 to a Red5 server using the speex coder:
>>>
>>> http://livedocs.adobe.com/flex/3/langref/flash/media/Microphone.html
>>>
>>> http://jira.red5.org/confluence/display/codecs/Speex+Codec
>>>
>>> Questions:
>>>
>>> 1. How do I extract the audio track out of such a .flv file?
>>>
>>> 2. How do I convert it from Speex to .wav PCM?
>>>
>>> Thanks.
>>> _______________________________________________
>>> Speex-dev mailing list
>>> Speex-dev at xiph.org
>>> http://lists.xiph.org/mailman/listinfo/speex-dev
>
> (cross-posted to ffmpeg-user)
>


More information about the Speex-dev mailing list