X264:如何使用swscale支持编译x264?

时间:2014-04-21 04:49:06

标签: c video-streaming h.264 x264

目标

我正在努力建立:

  • 具有swscale支持的x264静态库(.lib)。我想在Visual Studio项目中使用此库,其中24位RGB位图图像是:

    1. 从RGB转换为YUV2
    2. 转换后的图像将发送到x264编码器
    3. 并且编码器的输出通过UDP流式传输到远程IP端点。
  • 具有swscale支持的x264可执行文件(.exe)。我想将可执行文件用于与上述相同的目的。在另一个Visual Studio项目中,我将作为一个单独的进程启动x264.exe,并通过其stdin将位图数据传输到x264进程,并从进程的stdout读出编码数据。

问题

我在弄清楚如何使用swscale支持进行编译时遇到了一些麻烦。我需要对可执行文件和库提供swscale支持。

状态

到目前为止,我已经从x264网站下载了最新的x264源代码。

我在我的机器上安装了MINGW,当我运行'配置'和'制作'我得到了x264静态库 - 但没有 swscale支持。

我还没有找到关于如何在x264库中包含swscale的详细分步指南。我最接近描述的是这个讨论:

http://forum.doom9.org/showthread.php?t=165350

所以我从:

下载了libpack

http://komisar.gin.by/mingw/index.html

并将其提取到我的硬盘:

然后我执行了#make; make'和'配置' (再次)在我的x264目录中:

./configure --extra-cflags="-I/m/somePath/libpack/libpack/libpack/include" --extra-ldflags="-L/m/somePath/libpack/libpack/libpack/lib"

我在lib和include目录中有以下内容:

lib directory

incl directory

当我执行上述'配置'我明白了:

platform:      X86
system:        WINDOWS
cli:           yes
libx264:       internal
shared:        no
static:        no
asm:           yes
interlaced:    yes
avs:           avisynth
lavf:          no
ffms:          no
mp4:           lsmash
gpl:           yes
thread:        win32
opencl:        yes
filters:       crop select_every
debug:         no
gprof:         no
strip:         no
PIC:           no
bit depth:     8
chroma format: all

You can run 'make' or 'make fprofiled' now.
bash.exe"-3.1$

当我执行' make'我最终得到了这个错误:

gcc.exe: error: unrecognized command line option '-fomit-frame-poin'
gcc.exe: fatal error: no input files
compilation terminated.
make: *** [.depend] Error 1
bash.exe"-3.1$

问题 我做错了什么?

2 个答案:

答案 0 :(得分:1)

我想指出的一些事情:

  • MinGW有时会导致编译问题(因为基于Windows的兼容性要求 - 我不是说MinGW不好)。我尝试尽可能在本机UNIX系统上编译。
  • ffmpeg内置了对swscale的支持。如果找不到解决问题的方法,可以考虑使用ffmpeg和x264支持。 How to compile here或使用静态build
  • ffmpeg可以获取libswscale源here。您可以下载它并使用指向它的配置编译x264。
  • 您可以随时查看./configure --help以获取更多信息

答案 1 :(得分:1)

1)您无法构建具有swscale支持的x264静态库(.lib)"因为它们是独立的库,应该在项目中一起使用,而不是在另一个中构建。除非您使用ICL构建,否则您无法构建可由MSVS使用的libx264静态库,因为在将MinGW构建库(.a)混合到MSVS项目中时会遇到很多问题。如果您想在MSVS项目中使用libx264,我建议使用共享库(.dll)。您可以使用Google找到如何为libx264.dll构建.lib。

2)要使用swscale支持构建x264可执行文件,您需要为x264配置提供swscale库和头文件的路径,这些文件是ffmpeg / libav项目的一部分并使用它们构建。

关于使用komisar的libpack构建时的问题。您的配置命令行看起来正确,但它仍然没有使用swscale配置它(配置输出中缺少调整大小过滤器)。要找出原因,你需要查看由configure创建的config.log文件,但很可能swscale在你使用的libpack中已经过时(并且没有x264使用的某些API值)。

至于gcc.exe: error: unrecognized command line option '-fomit-frame-poin'我不知道你从哪里得到这个错误的选项,因为它应该是-fomit-frame-pointer但是你没有发布导致错误的gcc命令行。可能是你自己以某种方式指定它(环境CFLAGS),或者它是命令行的一些截断(命令行太长)。