簡體   English   中英

使用Yocto的嵌入式Linux上的PJSIP視頻支持

[英]PJSIP video support on embedded Linux using Yocto

目前,我正在使用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的任何想法? 需要嗎? 我們可以將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:如果配方DEPENDS中包含libsdl,則在運行configure時,它應該位於sysroot中。

某些Yocto版本具有libav而不是ffmpeg,您應該能夠依賴於Yocto所擁有的版本,並使用上述“ --with-ffmpeg”。

關於Linux上的PJSIP支持的問題可能值得另一個問題-或者在存在的支持論壇上嘗試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM