2017-05-29 118 views
0

目前,我正在使用Yocto/OE在i.mx6嵌入式Linux上获得使用视频支持编译PJSIP。到目前为止,我已经成功地获得了带有音频工作的PJSIP。 据我所知,在Linux上你有依赖SDL2和FFMPEG和Autotools配置脚本​​应该设法自动检测所有这些。 一个问题是配置脚本无法获取SDL2的安装位置。即使我使用with-sdl = ...输入路径,我注意到例如没有找到sdl-config,所以在编译过程中稍后编译SDL视频设备代码时没有编译代码。 关于FFMPEG,PJSIP是否也适用于libav?我问这个问题,因为在Yocto中我们已经包含了libav,而对于FFmpeg我们必须创建一个自定义配方。使用Yocto嵌入式Linux上的PJSIP视频支持

而且,因为我无法得到的工具来自动检测所有的依赖,我开始“冒险”来设置以下的config_site.h定义陈述自己:

do_configure_prepend() { 
    export LD="${CC}" 
    echo "export CFLAGS += -D_REENTRANT -I${STAGING_INCDIR}/SDL2" > user.mak 
    echo "export LDFLAGS += -lSDL2" >> user.mak 
    echo "export LDFLAGS += -lGLESv2" >> user.mak 

    bbnote "enabling video support" 
    echo "#define PJMEDIA_HAS_VIDEO     1" > ${S}/pjlib/include/pj/config_site.h 
    echo "#define PJMEDIA_VIDEO_DEV_HAS_OPENGL   1" >> ${S}/pjlib/include/pj/config_site.h 
    echo "#define PJMEDIA_VIDEO_DEV_HAS_OPENGL_ES  1" >> ${S}/pjlib/include/pj/config_site.h 
    echo "#define PJMEDIA_VIDEO_DEV_HAS_SDL   1" >> ${S}/pjlib/include/pj/config_site.h 
    echo "#define PJMEDIA_VIDEO_DEV_HAS_QT   1" >> ${S}/pjlib/include/pj/config_site.h 
    echo "#define PJMEDIA_VIDEO_DEV_HAS_FFMPEG   1" >> ${S}/pjlib/include/pj/config_site.h 
} 

注:我启用/禁用相互独立的定义语句。

我发现那是什么:

  • 定义PJMEDIA_VIDEO_DEV_HAS_QT:仅适用于iOS,使这并不编译
  • 定义PJMEDIA_VIDEO_DEV_HAS_OPENGL(_ES):仅适用于Android,使这并不编译
  • define PJMEDIA_VIDEO_DEV_HAS_SDL:给出编译错误,也许是因为sdl-config没有运行?
  • 定义PJMEDIA_VIDEO_DEV_HAS_FFMPEG:让编译,因为缺少FFmpeg的头文件

的错误所以我的问题是:

任何想法,为什么没有被发现SDL2-配置?需要吗? 我们可以为libav切换FFmpeg吗?为什么?为什么不? 关于OpenGL,即使我们基于i.mx6的平台支持OpenGLES2,为什么我们不能使用它?为什么它在Android上工作,而不是在嵌入式Linux上工作?

回答

2

我可以猜测为什么没有找到sdl-config:这些项目特定的脚本实际上从未在交叉编译的情况下工作,并且通常不在Yocto中使用。你应该使用“--with-sdl”(或者修改configure.ac来使用PKG_CHECK_MODULES()来代替sdl)。

为什么“--with-SDL”没有工作对你来说很难说(因为你不告诉你试了一下),但假设他们想与前缀的路径,我希望这个工作:

--with-sdl=${STAGING_DIR_HOST}${prefix} 

STAGING_DIR_HOST是您正在构建的系统的系统根:如果您的配方中有libsdl DEPENDS,它应该在配置运行时位于sysroot中。

一些Yocto版本有libav而不是ffmpeg,你应该可以在你的Yocto的版本上使用,并使用上面的“--with-ffmpeg”。

关于Linux上PJSIP支持的问题可能值得另一个问题 - 或尝试在他们的支持论坛(如果有的话)。

+0

嗨,以及我做了一些试验和错误,例如我试过以下内容: '--with-sdl','--with-sdl = $ {includedir}/SDL2',' - 与 - sdl = $ {STAGING_DIR_HOST} $ {includedir}/SDL2',但没有得到它的工作。我再次尝试了你的建议,仍然配置脚本不会提取sdl2-config。我想我确实需要编辑congigure.ac。然而,当我尝试相同的ffmpeg时,我确实看到Yocto中的pkg_config能够在生成的build.mak文件中找到它,我也看到了libavcodec的额外CFLAGS等。 –

+0

看看配置:我同意修改它以使用PKG_CHECK_MODULES(SDL,sdl),然后将SDL_CFLAGS和SDL_LIBS添加到CFLAGS和LIBS似乎是一个合理的选择:sdl-config在yocto上不起作用。 – jku

+0

那么我刚刚完成建设PJSIP,但通过另一种方式(可能不那么干净)。在我的dev-pc上,我编辑了aconfigure.ac文件以使用'AC_PATH_PROGS(SDL_CONFIG,sdl2-config sdl-config ,, $ with_sdl/bin/crossscripts)''。接下来我生成了一个附件:'autoconf -o aconfigure aconfigure'。然后我在Yocto中获取pjproject源代码,并将我的dev-pc中的aconfigure和aconfigure.ac文件复制到Yocto $ {S}文件夹中。接下来,bitbake完美无缺地工作。在目标机器上,pjsua现在列出了H263和H264编解码器。视频仍然无法正常工作:'!SDL_Init()错误:没有可用的视频设备。 –