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

PJSIP video support on embedded Linux using Yocto

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

此外,因为我无法获得自动检测所有依赖项的工具,所以我开始 "adventurous" 自己在 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
}

注:我enabled/disabled定义语句相互独立

我发现的是:

所以我的问题是:

知道为什么找不到 sdl2-config 吗?需要吗? 我们可以将 FFmpeg 换成 libav 吗?为什么?为什么不? 关于OpenGL,虽然我们基于i.mx6的平台支持OpenGLES2,但为什么不能用呢?为什么它适用于 Android 而不是嵌入式 Linux?

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

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

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

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

一些 Yocto 版本使用 libav 而不是 ffmpeg,您应该能够依赖于您的 Yocto 拥有的版本并像上面那样使用“--with-ffmpeg”。

linux 上有关 PJSIP 支持的问题可能值得另一个问题——或者如果存在的话,可以在他们的支持论坛上尝试。