0

所以我创建了 ffmpeg 配置文件,使它成为纯 C (平台独立,但只是理论上)

所以我的配置很简单(0.6.1,0.6.3 测试):

./configure  --disable-doc  --disable-ffplay --disable-ffprobe  --disable-ffserver    --disable-avdevice   --disable-avfilter   --disable-pthreads  --disable-everything --enable-muxer=flv --enable-encoder=flv --enable-encoder=h263  --disable-mmx  --disable-shared   --prefix=bin/  --disable-protocols --disable-network --disable-optimizations --disable-debug  --disable-asm --disable-stripping

在 Linux 上编译它会解析 4 个库,总大小为 1 mb。

但我需要使用自定义编译器编译 ffmpeg(开源 gcc 模拟称为Adob​​e Alchemy,让我们将 C/c++ 编译成 Flash)

在标准 Make 期间,它几乎在每个文件上都给了我错误:

Array @ARGV missing the @ in argument 1 of shift() at /home/rupert/Downloads/alchemy-ubuntu-v0.5a/achacks/gcc line 218.
cc1: error: unrecognized command line option "-Wtype-limits"
cc1: error: unrecognized command line option "-fno-signed-zeros"

那么我该怎么办 - 如何通过炼金术编译 ffmpeg(至少是它的最小部分)?

更新 如果我们手动修复这些错误(configure.mak 中有 2 个,alchemy gcc 中有 1 个),我们会得到一个非常混乱且冗长的输出,例如:

> $ make -w install

make: Entering directory `/home/rupert/Downloads/ffmpeg-0.6.1'
AR  libavformat/libavformat.a
llvm-ld: error opening 'avformat/libavformat.l.bc' for writing!
llvm-ranlib: Archive file does not exist
INSTALL libavformat/libavformat.a
install: cannot stat `libavformat/libavformat.a': No such file or directory
llvm-ranlib: Archive file does not exist
AR  libavcodec/libavcodec.a
llvm-ld: error opening 'avcodec/libavcodec.l.bc' for writing!
llvm-ranlib: Archive file does not exist
INSTALL libavcodec/libavcodec.a
install: cannot stat `libavcodec/libavcodec.a': No such file or directory
llvm-ranlib: Archive file does not exist
AR  libswscale/libswscale.a
llvm-ld: error opening 'swscale/libswscale.l.bc' for writing!
llvm-ranlib: Archive file does not exist
INSTALL libswscale/libswscale.a
install: cannot stat `libswscale/libswscale.a': No such file or directory
llvm-ranlib: Archive file does not exist
AR  libavutil/libavutil.a
llvm-ld: error opening 'avutil/libavutil.l.bc' for writing!
llvm-ranlib: Archive file does not exist
INSTALL libavutil/libavutil.a
install: cannot stat `libavutil/libavutil.a': No such file or directory
llvm-ranlib: Archive file does not exist
INSTALL libavformat/avformat.h
INSTALL libavformat/avio.h
INSTALL libavformat/libavformat.pc
INSTALL libavcodec/avcodec.h
INSTALL libavcodec/avfft.h
INSTALL libavcodec/dxva2.h
INSTALL libavcodec/opt.h
INSTALL libavcodec/vaapi.h
INSTALL libavcodec/vdpau.h
INSTALL libavcodec/xvmc.h
INSTALL libavcodec/libavcodec.pc
INSTALL libswscale/swscale.h
INSTALL libswscale/libswscale.pc
INSTALL libavutil/adler32.h
INSTALL libavutil/attributes.h
INSTALL libavutil/avstring.h
INSTALL libavutil/avutil.h
INSTALL libavutil/base64.h
INSTALL libavutil/common.h
INSTALL libavutil/crc.h
INSTALL libavutil/error.h
INSTALL libavutil/fifo.h
INSTALL libavutil/intfloat_readwrite.h
INSTALL libavutil/log.h
INSTALL libavutil/lzo.h
INSTALL libavutil/mathematics.h
INSTALL libavutil/md5.h
INSTALL libavutil/mem.h
INSTALL libavutil/pixdesc.h
INSTALL libavutil/pixfmt.h
INSTALL libavutil/rational.h
INSTALL libavutil/sha1.h
INSTALL libavutil/avconfig.h
INSTALL libavutil/libavutil.pc
LD  ffmpeg_g
WARNING: While resolving call to function 'main' arguments were dropped!
Cannot yet select: 0x8e707e8: i32 = ConstantPool < i64 6881500230622117888> 0
llc[0x86c7dec]
make: *** [ffmpeg_g] Error 6
make: Leaving directory `/home/rupert/Downloads/ffmpeg-0.6.1'
4

3 回答 3

1

FlasCC(Alchemy 2) 可以很好地编译 ffmpeg - 对于任何尝试的人,基本上你需要下载 ffmpeg 源代码。转到ffmpeg目录,执行

PATH=/cygdrive/c/PATH_TO_FLASCC/sdk/usr/bin:$PATH ./configure --prefix=/cygdrive/c/PATH_TO_FLASCC/sdk/usr

现在,如果您运行配置有一些限制,这样它就不会包含所有编解码器或过滤器(需要很长时间),这很好。我的用例中的其他配置参数:

--disable-ffserver --disable-everything --enable-filter=scale --enable-demuxer=flv --enable-muxer=ogg --enable-protocol=file --disable-network --disable-debug --disable-yasm --disable-asm --disable-stripping --enable-memalign-hack --disable-shared --enable-decoder=flashsv --enable-encoder=mpeg1video --enable-encoder=libtheora --enable-encoder=libvorbis --enable-libtheora --enable-libvorbis

重要的是--disable-everything只启用你需要的东西。

然后运行./make./make安装(在这些命令前面使用 PATH),它应该生成并安装 ffmpeg 库。

当我构建一个测试 swf 时,似乎一切正常。我使用了他们的(修改后的)样本,他们对 25 个虚拟 mpeg 帧进行了编码。我至少正在跟踪编码进度并看到正在编码的帧。

SWC 是一个问题,如果你想使用它的话。我遇到了奇怪的错误 - 首先它找不到编解码器(使用 find codec 函数时得到 NULL),当我按名称指定它时,它无法分配编解码器上下文(也得到 NULL)。然后我用纯 Flex 编译它,它克服了这个,但无法打开编解码器(基本上所有这些都是 av_ something 库函数)。我真的不明白为什么 SWC 不能与这些一起工作,因为与 emit-swf 一起工作得很好。

也许有人可以启发 SWC / SWF 的差异。

于 2013-03-19T13:33:13.653 回答
0

尝试使用新的 flash c 编译器Adob​​e Flash cc。我希望它可以帮助你在 flash 中编译 ffmpeg。

于 2012-11-08T03:06:15.140 回答
0

Adobe 论坛上对此进行了一些讨论。尽管有些人似乎取得了一些进展,但它似乎相当复杂。

于 2011-06-11T20:43:38.250 回答