使用Yocto在嵌入式Linux上支持PJSIP视频

时间:2017-05-29 08:59:40

标签: embedded-linux yocto pjsip

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

此外,因为我无法获得自动检测所有依赖关系的工具,所以我开始冒险"冒险"自己在config_site.h中设置以下define语句:

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
}

注意:我启用/禁用了彼此独立的define语句。

我发现的是:

  • 定义PJMEDIA_VIDEO_DEV_HAS_QT:仅适用于iOS,启用此功能无法编译
  • 定义PJMEDIA_VIDEO_DEV_HAS_OPENGL(_ES):仅适用于Android,启用此功能无法编译
  • 定义PJMEDIA_VIDEO_DEV_HAS_SDL:给出编译错误,可能是因为没有运行sdl-config?
  • 定义PJMEDIA_VIDEO_DEV_HAS_FFMPEG:由于缺少FFmpeg头文件而导致编译错误

所以我的问题是:

为什么没有找到sdl2-config的想法?需要它吗? 我们可以为libav切换FFmpeg吗?为什么?为什么不? 关于OpenGL,即使我们基于i.mx6的平台支持OpenGLES2,为什么我们不能使用它呢?为什么它适用于Android而不是嵌入式Linux?

1 个答案:

答案 0 :(得分:2)

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

为什么“--with-sdl”对你不起作用很难说(因为你没有显示你尝试过的东西)但假设他们想要一个带前缀的路径,我希望这可以工作:

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

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

某些Yocto版本有libav而不是ffmpeg,你应该能够依赖你的Yocto所拥有的版本并使用“--with-ffmpeg”,如上所述。

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