2017-05-29 115 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()錯誤:沒有可用的視頻設備。 –