目前,我正在努力使用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语句。
我发现的是:
所以我的问题是:
为什么没有找到sdl2-config的想法?需要它吗? 我们可以为libav切换FFmpeg吗?为什么?为什么不? 关于OpenGL,即使我们基于i.mx6的平台支持OpenGLES2,为什么我们不能使用它呢?为什么它适用于Android而不是嵌入式Linux?
答案 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支持的问题可能值得另一个问题 - 或者如果有的话,试试他们的支持论坛。