Recherche avancée

Médias (91)

Autres articles (109)

  • Personnaliser en ajoutant son logo, sa bannière ou son image de fond

    5 septembre 2013, par

    Certains thèmes prennent en compte trois éléments de personnalisation : l’ajout d’un logo ; l’ajout d’une bannière l’ajout d’une image de fond ;

  • Ecrire une actualité

    21 juin 2013, par

    Présentez les changements dans votre MédiaSPIP ou les actualités de vos projets sur votre MédiaSPIP grâce à la rubrique actualités.
    Dans le thème par défaut spipeo de MédiaSPIP, les actualités sont affichées en bas de la page principale sous les éditoriaux.
    Vous pouvez personnaliser le formulaire de création d’une actualité.
    Formulaire de création d’une actualité Dans le cas d’un document de type actualité, les champs proposés par défaut sont : Date de publication ( personnaliser la date de publication ) (...)

  • Le profil des utilisateurs

    12 avril 2011, par

    Chaque utilisateur dispose d’une page de profil lui permettant de modifier ses informations personnelle. Dans le menu de haut de page par défaut, un élément de menu est automatiquement créé à l’initialisation de MediaSPIP, visible uniquement si le visiteur est identifié sur le site.
    L’utilisateur a accès à la modification de profil depuis sa page auteur, un lien dans la navigation "Modifier votre profil" est (...)

Sur d’autres sites (17351)

  • Convert HEVC video to a more widely supported format using fluent-ffmpeg in Node.js

    21 juin 2021, par Daniel Loiterton

    My app allows users to upload videos from their phones. However, the latest iPhone default format (HEVC / H.265) does not seem to be supported by Chrome and other browsers, so some users cannot stream the videos.

    


    I'm already using fluent-ffmpeg on my Node.js backend to read metadata and extract thumbnails from the uploaded videos. How would I go about converting HEVC videos to something else ? What format/options would be appropriate for streaming to browsers ? Ideally I'd like to keep files fairly small, and I'm willing to sacrifice some quality to that end.

    


  • iOS Build PJSIP with FFmpeg+libx264

    22 février 2021, par Meonardo

    I have built the FFmpeg with libx264 into static libs, here is my directory tree.

    


    ./ffmpeg
├── include
│   ├── libavcodec
│   │   ├── ac3_parser.h
│   │   ├── adts_parser.h
│   │   ├── avcodec.h
│   │   ├── avdct.h
│   │   ├── avfft.h
│   │   ├── bsf.h
│   │   ├── codec.h
│   │   ├── codec_desc.h
│   │   ├── codec_id.h
│   │   ├── codec_par.h
│   │   ├── d3d11va.h
│   │   ├── dirac.h
│   │   ├── dv_profile.h
│   │   ├── dxva2.h
│   │   ├── jni.h
│   │   ├── mediacodec.h
│   │   ├── packet.h
│   │   ├── qsv.h
│   │   ├── vaapi.h
│   │   ├── vdpau.h
│   │   ├── version.h
│   │   ├── videotoolbox.h
│   │   ├── vorbis_parser.h
│   │   └── xvmc.h
│   ├── libavdevice
│   │   ├── avdevice.h
│   │   └── version.h
│   ├── libavfilter
│   │   ├── avfilter.h
│   │   ├── buffersink.h
│   │   ├── buffersrc.h
│   │   └── version.h
│   ├── libavformat
│   │   ├── avformat.h
│   │   ├── avio.h
│   │   └── version.h
│   ├── libavutil
│   │   ├── adler32.h
│   │   ├── aes.h
│   │   ├── aes_ctr.h
│   │   ├── attributes.h
│   │   ├── audio_fifo.h
│   │   ├── avassert.h
│   │   ├── avconfig.h
│   │   ├── avstring.h
│   │   ├── avutil.h
│   │   ├── base64.h
│   │   ├── blowfish.h
│   │   ├── bprint.h
│   │   ├── bswap.h
│   │   ├── buffer.h
│   │   ├── camellia.h
│   │   ├── cast5.h
│   │   ├── channel_layout.h
│   │   ├── common.h
│   │   ├── cpu.h
│   │   ├── crc.h
│   │   ├── des.h
│   │   ├── dict.h
│   │   ├── display.h
│   │   ├── dovi_meta.h
│   │   ├── downmix_info.h
│   │   ├── encryption_info.h
│   │   ├── error.h
│   │   ├── eval.h
│   │   ├── ffversion.h
│   │   ├── fifo.h
│   │   ├── file.h
│   │   ├── frame.h
│   │   ├── hash.h
│   │   ├── hdr_dynamic_metadata.h
│   │   ├── hmac.h
│   │   ├── hwcontext.h
│   │   ├── hwcontext_cuda.h
│   │   ├── hwcontext_d3d11va.h
│   │   ├── hwcontext_drm.h
│   │   ├── hwcontext_dxva2.h
│   │   ├── hwcontext_mediacodec.h
│   │   ├── hwcontext_opencl.h
│   │   ├── hwcontext_qsv.h
│   │   ├── hwcontext_vaapi.h
│   │   ├── hwcontext_vdpau.h
│   │   ├── hwcontext_videotoolbox.h
│   │   ├── hwcontext_vulkan.h
│   │   ├── imgutils.h
│   │   ├── intfloat.h
│   │   ├── intreadwrite.h
│   │   ├── lfg.h
│   │   ├── log.h
│   │   ├── lzo.h
│   │   ├── macros.h
│   │   ├── mastering_display_metadata.h
│   │   ├── mathematics.h
│   │   ├── md5.h
│   │   ├── mem.h
│   │   ├── motion_vector.h
│   │   ├── murmur3.h
│   │   ├── opt.h
│   │   ├── parseutils.h
│   │   ├── pixdesc.h
│   │   ├── pixelutils.h
│   │   ├── pixfmt.h
│   │   ├── random_seed.h
│   │   ├── rational.h
│   │   ├── rc4.h
│   │   ├── replaygain.h
│   │   ├── ripemd.h
│   │   ├── samplefmt.h
│   │   ├── sha.h
│   │   ├── sha512.h
│   │   ├── spherical.h
│   │   ├── stereo3d.h
│   │   ├── tea.h
│   │   ├── threadmessage.h
│   │   ├── time.h
│   │   ├── timecode.h
│   │   ├── timestamp.h
│   │   ├── tree.h
│   │   ├── twofish.h
│   │   ├── tx.h
│   │   ├── version.h
│   │   ├── video_enc_params.h
│   │   └── xtea.h
│   ├── libpostproc
│   │   ├── postprocess.h
│   │   └── version.h
│   ├── libswresample
│   │   ├── swresample.h
│   │   └── version.h
│   ├── libswscale
│   │   ├── swscale.h
│   │   └── version.h
│   └── libx264
│       ├── x264.h
│       └── x264_config.h
└── lib
    ├── libavcodec.a
    ├── libavdevice.a
    ├── libavfilter.a
    ├── libavformat.a
    ├── libavutil.a
    ├── libpostproc.a
    ├── libswresample.a
    ├── libswscale.a
    └── libx264.a


    


    The final lib was created successfully, no error message in log file,
but when I import the lib to my Xcode Project,
the linker give me tons of errors(missing symbols like : Undefined symbol: _pjsua_vid_codec_set_priority).
I found the pjsua_vid.o is very small(200Bytes) compare to my pjsip+openh264 build file(was 47KB), perhaps this is the reason cause the link error.

    


    Here is my build log :
log_file

    


    the build script I am using :

    


    #!/bin/sh&#xA;&#xA;# see http://stackoverflow.com/a/3915420/318790&#xA;function realpath { echo $(cd $(dirname "$1"); pwd)/$(basename "$1"); }&#xA;__FILE__=`realpath "$0"`&#xA;__DIR__=`dirname "${__FILE__}"`&#xA;&#xA;# download&#xA;function download() {&#xA;    "${__DIR__}/download.sh" "$1" "$2" #--no-cache&#xA;}&#xA;&#xA;BASE_DIR="$1"&#xA;PJSIP_URL="https://github.com/pjsip/pjproject/archive/2.10.zip"&#xA;#http://www.pjsip.org/release/2.8.0/pjproject-2.8.0.tar.bz2&#xA;PJSIP_DIR="$1/src"&#xA;LIB_PATHS=("pjlib/lib" \&#xA;           "pjlib-util/lib" \&#xA;           "pjmedia/lib" \&#xA;           "pjnath/lib" \&#xA;           "pjsip/lib" \&#xA;           "third_party/lib")&#xA;&#xA;OPENSSL_PREFIX=&#xA;FFMPEG_PREFIX=&#xA;OPENH264_PREFIX=&#xA;OPUS_PREFIX=&#xA;while [ "$#" -gt 0 ]; do&#xA;    case $1 in&#xA;        --with-openssl)&#xA;            if [ "$#" -gt 1 ]; then&#xA;                OPENSSL_PREFIX=$(python -c "import os,sys; print os.path.realpath(sys.argv[1])" "$2")&#xA;                shift 2&#xA;                continue&#xA;            else&#xA;                echo &#x27;ERROR: Must specify a non-empty "--with-openssl PREFIX" argument.&#x27; >&amp;2&#xA;                exit 1&#xA;            fi&#xA;            ;;&#xA;        --with-openh264)&#xA;            if [ "$#" -gt 1 ]; then&#xA;                OPENH264_PREFIX=$(python -c "import os,sys; print os.path.realpath(sys.argv[1])" "$2")&#xA;                shift 2&#xA;                continue&#xA;            else&#xA;                echo &#x27;ERROR: Must specify a non-empty "--with-openh264 PREFIX" argument.&#x27; >&amp;2&#xA;                exit 1&#xA;            fi&#xA;            ;;&#xA;        --with-ffmpeg)&#xA;            if [ "$#" -gt 1 ]; then&#xA;                FFMPEG_PREFIX=$(python -c "import os,sys; print os.path.realpath(sys.argv[1])" "$2")&#xA;                shift 2&#xA;                continue&#xA;            else&#xA;                echo &#x27;ERROR: Must specify a non-empty "--with-ffmpeg PREFIX" argument.&#x27; >&amp;2&#xA;                exit 1&#xA;            fi&#xA;            ;;&#xA;        --with-opus)&#xA;            if [ "$#" -gt 1 ]; then&#xA;                OPUS_PREFIX=$(python -c "import os,sys; print os.path.realpath(sys.argv[1])" "$2")&#xA;                shift 2&#xA;                continue&#xA;            else&#xA;                echo &#x27;ERROR: Must specify a non-empty "--with-opus PREFIX" argument.&#x27; >&amp;2&#xA;                exit 1&#xA;            fi&#xA;            ;;&#xA;    esac&#xA;&#xA;    shift&#xA;done&#xA;&#xA;function config_site() {&#xA;    SOURCE_DIR=$1&#xA;    PJSIP_CONFIG_PATH="${SOURCE_DIR}/pjlib/include/pj/config_site.h"&#xA;    HAS_VIDEO=&#xA;&#xA;    echo "Creating config_site.h ..."&#xA;&#xA;    if [ -f "${PJSIP_CONFIG_PATH}" ]; then&#xA;        rm "${PJSIP_CONFIG_PATH}"&#xA;    fi&#xA;&#xA;    echo "#define PJ_CONFIG_IPHONE 1" >> "${PJSIP_CONFIG_PATH}"&#xA;    echo "#define PJ_HAS_IPV6 1" >> "${PJSIP_CONFIG_PATH}" # Enable IPV6&#xA;    if [[ ${OPENH264_PREFIX} ]]; then&#xA;        # echo "#define PJMEDIA_HAS_VID_TOOLBOX_CODEC 1" >> "${PJSIP_CONFIG_PATH}"&#xA;        # echo "#define PJMEDIA_HAS_OPENH264_CODEC 1" >> "${PJSIP_CONFIG_PATH}"&#xA;        echo "#define PJMEDIA_HAS_FFMPEG_VID_CODEC 1" >> "${PJSIP_CONFIG_PATH}"&#xA;        HAS_VIDEO=1&#xA;    fi&#xA;    if [[ ${HAS_VIDEO} ]]; then&#xA;        echo "#define PJMEDIA_HAS_VIDEO 1" >> "${PJSIP_CONFIG_PATH}"&#xA;        echo "#define PJMEDIA_VIDEO_DEV_HAS_OPENGL 1" >> "${PJSIP_CONFIG_PATH}"&#xA;        echo "#define PJMEDIA_VIDEO_DEV_HAS_OPENGL_ES 1" >> "${PJSIP_CONFIG_PATH}"&#xA;        echo "#define PJMEDIA_VIDEO_DEV_HAS_IOS_OPENGL 1" >> "${PJSIP_CONFIG_PATH}"&#xA;        echo "#include <opengles></opengles>ES3/glext.h>" >> "${PJSIP_CONFIG_PATH}"&#xA;    fi&#xA;    echo "#include <pj></pj>config_site_sample.h>" >> "${PJSIP_CONFIG_PATH}"&#xA;}&#xA;&#xA;function clean_libs () {&#xA;    ARCH=${1}&#xA;    for SRC_DIR in ${LIB_PATHS[*]}; do&#xA;        DIR="${PJSIP_DIR}/${SRC_DIR}"&#xA;        if [ -d "${DIR}" ]; then&#xA;            rm -rf "${DIR}"/*&#xA;        fi&#xA;&#xA;        DIR="${PJSIP_DIR}/${SRC_DIR}-${ARCH}"&#xA;        if [ -d "${DIR}" ]; then&#xA;            rm -rf "${DIR}"&#xA;        fi&#xA;    done&#xA;}&#xA;&#xA;function copy_libs () {&#xA;    ARCH=${1}&#xA;&#xA;    for SRC_DIR in ${LIB_PATHS[*]}; do&#xA;        SRC_DIR="${PJSIP_DIR}/${SRC_DIR}"&#xA;        DST_DIR="${SRC_DIR}-${ARCH}"&#xA;        if [ -d "${DST_DIR}" ]; then&#xA;            rm -rf "${DST_DIR}"&#xA;        fi&#xA;        cp -R "${SRC_DIR}" "${DST_DIR}"&#xA;        rm -rf "${SRC_DIR}"/* # delete files because this directory will be used for the final lipo output&#xA;    done&#xA;}&#xA;&#xA;function _build() {&#xA;    pushd . > /dev/null&#xA;    cd ${PJSIP_DIR}&#xA;&#xA;    ARCH=$1&#xA;    LOG=${BASE_DIR}/${ARCH}.log&#xA;&#xA;    # configure&#xA;    CONFIGURE="./configure-iphone"&#xA;    if [[ ${OPENSSL_PREFIX} ]]; then&#xA;        CONFIGURE="${CONFIGURE} --with-ssl=${OPENSSL_PREFIX}"&#xA;    fi&#xA;    # if [[ ${OPENH264_PREFIX} ]]; then&#xA;    #     CONFIGURE="${CONFIGURE} --with-openh264=${OPENH264_PREFIX}"&#xA;    # fi&#xA;    if [[ ${FFMPEG_PREFIX} ]]; then&#xA;        CONFIGURE="${CONFIGURE} --with-ffmpeg=${FFMPEG_PREFIX}"&#xA;    fi&#xA;    if [[ ${OPUS_PREFIX} ]]; then&#xA;        CONFIGURE="${CONFIGURE} --with-opus=${OPUS_PREFIX}"&#xA;    fi&#xA;&#xA;    # flags&#xA;    if [[ ! ${CFLAGS} ]]; then&#xA;        export CFLAGS=&#xA;    fi&#xA;    if [[ ! ${LDFLAGS} ]]; then&#xA;        export LDFLAGS=&#xA;    fi&#xA;    if [[ ${OPENSSL_PREFIX} ]]; then&#xA;        export CFLAGS="${CFLAGS} -I${OPENSSL_PREFIX}/include"&#xA;        export LDFLAGS="${LDFLAGS} -L${OPENSSL_PREFIX}/lib"&#xA;    fi&#xA;    # if [[ ${OPENH264_PREFIX} ]]; then&#xA;    #     export CFLAGS="${CFLAGS} -I${OPENH264_PREFIX}/include"&#xA;    #     export LDFLAGS="${LDFLAGS} -L${OPENH264_PREFIX}/lib"&#xA;    # fi&#xA;    if [[ ${FFMPEG_PREFIX} ]]; then&#xA;        export CFLAGS="${CFLAGS} -I${FFMPEG_PREFIX}/include"&#xA;        export LDFLAGS="${LDFLAGS} -L${FFMPEG_PREFIX}/lib"&#xA;    fi&#xA;    export LDFLAGS="${LDFLAGS} -lstdc&#x2B;&#x2B;"&#xA;&#xA;    echo "Building for ${ARCH}..."&#xA;&#xA;    clean_libs ${ARCH}&#xA;&#xA;    make distclean > ${LOG} 2>&amp;1&#xA;    ARCH="-arch ${ARCH}" ${CONFIGURE} >> ${LOG} 2>&amp;1&#xA;    make dep >> ${LOG} 2>&amp;1&#xA;    make clean >> ${LOG}&#xA;    make lib >> ${LOG} 2>&amp;1&#xA;&#xA;    copy_libs ${ARCH}&#xA;}&#xA;&#xA;# function armv7() {&#xA;#     export DEVPATH="`xcrun -sdk iphoneos --show-sdk-platform-path`/Developer"&#xA;#     export CFLAGS="-miphoneos-version-min=8.0"&#xA;#     export LDFLAGS=&#xA;#     _build "armv7"&#xA;# }&#xA;# function armv7s() {&#xA;#     export DEVPATH="`xcrun -sdk iphoneos --show-sdk-platform-path`/Developer"&#xA;#     export CFLAGS="-miphoneos-version-min=8.0"&#xA;#     export LDFLAGS=&#xA;#     _build "armv7s"&#xA;# }&#xA;function arm64() {&#xA;    export DEVPATH="`xcrun -sdk iphoneos --show-sdk-platform-path`/Developer"&#xA;    export CFLAGS="-miphoneos-version-min=8.0"&#xA;    export LDFLAGS=&#xA;    _build "arm64"&#xA;}&#xA;function i386() {&#xA;    export DEVPATH="`xcrun -sdk iphonesimulator --show-sdk-platform-path`/Developer"&#xA;    export CFLAGS="-O2 -m32 -mios-simulator-version-min=8.0"&#xA;    export LDFLAGS="-O2 -m32 -mios-simulator-version-min=8.0"&#xA;    _build "i386"&#xA;}&#xA;function x86_64() {&#xA;    export DEVPATH="`xcrun -sdk iphonesimulator --show-sdk-platform-path`/Developer"&#xA;    export CFLAGS="-O2 -m32 -mios-simulator-version-min=8.0"&#xA;    export LDFLAGS="-O2 -m32 -mios-simulator-version-min=8.0"&#xA;    _build "x86_64"&#xA;}&#xA;&#xA;function lipo() {&#xA;    TMP=`mktemp -t lipo`&#xA;    echo "Lipo libs... (${TMP})"&#xA;&#xA;    for LIB_DIR in ${LIB_PATHS[*]}; do # loop over libs&#xA;        DST_DIR="${PJSIP_DIR}/${LIB_DIR}"&#xA;&#xA;        # use the first architecture to find all libraries&#xA;        PATTERN_DIR="${DST_DIR}-$1"&#xA;        for PATTERN_FILE in `ls -l1 "${PATTERN_DIR}"`; do&#xA;            OPTIONS=""&#xA;&#xA;            # loop over all architectures and collect the current library&#xA;            for ARCH in "$@"; do&#xA;                FILE="${DST_DIR}-${ARCH}/${PATTERN_FILE/-$1-/-${ARCH}-}"&#xA;                if [ -e "${FILE}" ]; then&#xA;                    OPTIONS="$OPTIONS -arch ${ARCH} ${FILE}"&#xA;                fi&#xA;            done&#xA;&#xA;            if [ "$OPTIONS" != "" ]; then&#xA;                OUTPUT_PREFIX=$(dirname "${DST_DIR}")&#xA;                OUTPUT="${OUTPUT_PREFIX}/lib/${PATTERN_FILE/-$1-/-}"&#xA;&#xA;                OPTIONS="${OPTIONS} -create -output ${OUTPUT}"&#xA;                echo "$OPTIONS" >> "${TMP}"&#xA;            fi&#xA;        done&#xA;    done&#xA;&#xA;    while read LINE; do&#xA;        xcrun -sdk iphoneos lipo ${LINE}&#xA;    done &lt; "${TMP}"&#xA;}&#xA;&#xA;# download "${PJSIP_URL}" "${PJSIP_DIR}"&#xA;config_site "${PJSIP_DIR}"&#xA;arm64 &amp;&amp; i386 &amp;&amp; x86_64&#xA;lipo arm64 i386 x86_64&#xA;

    &#xA;

    Thanks for any advice.

    &#xA;

  • iOS Build PJSIP with FFmpeg+libx264

    22 février 2021, par Meonardo

    I have built the FFmpeg with libx264 into static libs, here is my directory tree.

    &#xA;

    ./ffmpeg&#xA;├── include&#xA;│&#xA0;&#xA0; ├── libavcodec&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── ac3_parser.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── adts_parser.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── avcodec.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── avdct.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── avfft.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── bsf.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── codec.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── codec_desc.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── codec_id.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── codec_par.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── d3d11va.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── dirac.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── dv_profile.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── dxva2.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── jni.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── mediacodec.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── packet.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── qsv.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── vaapi.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── vdpau.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── version.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── videotoolbox.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── vorbis_parser.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; └── xvmc.h&#xA;│&#xA0;&#xA0; ├── libavdevice&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── avdevice.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; └── version.h&#xA;│&#xA0;&#xA0; ├── libavfilter&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── avfilter.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── buffersink.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── buffersrc.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; └── version.h&#xA;│&#xA0;&#xA0; ├── libavformat&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── avformat.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── avio.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; └── version.h&#xA;│&#xA0;&#xA0; ├── libavutil&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── adler32.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── aes.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── aes_ctr.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── attributes.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── audio_fifo.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── avassert.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── avconfig.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── avstring.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── avutil.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── base64.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── blowfish.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── bprint.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── bswap.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── buffer.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── camellia.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── cast5.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── channel_layout.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── common.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── cpu.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── crc.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── des.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── dict.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── display.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── dovi_meta.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── downmix_info.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── encryption_info.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── error.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── eval.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── ffversion.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── fifo.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── file.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── frame.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── hash.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── hdr_dynamic_metadata.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── hmac.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── hwcontext.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── hwcontext_cuda.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── hwcontext_d3d11va.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── hwcontext_drm.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── hwcontext_dxva2.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── hwcontext_mediacodec.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── hwcontext_opencl.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── hwcontext_qsv.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── hwcontext_vaapi.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── hwcontext_vdpau.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── hwcontext_videotoolbox.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── hwcontext_vulkan.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── imgutils.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── intfloat.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── intreadwrite.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── lfg.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── log.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── lzo.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── macros.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── mastering_display_metadata.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── mathematics.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── md5.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── mem.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── motion_vector.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── murmur3.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── opt.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── parseutils.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── pixdesc.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── pixelutils.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── pixfmt.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── random_seed.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── rational.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── rc4.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── replaygain.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── ripemd.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── samplefmt.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── sha.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── sha512.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── spherical.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── stereo3d.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── tea.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── threadmessage.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── time.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── timecode.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── timestamp.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── tree.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── twofish.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── tx.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── version.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── video_enc_params.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; └── xtea.h&#xA;│&#xA0;&#xA0; ├── libpostproc&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── postprocess.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; └── version.h&#xA;│&#xA0;&#xA0; ├── libswresample&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── swresample.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; └── version.h&#xA;│&#xA0;&#xA0; ├── libswscale&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; ├── swscale.h&#xA;│&#xA0;&#xA0; │&#xA0;&#xA0; └── version.h&#xA;│&#xA0;&#xA0; └── libx264&#xA;│&#xA0;&#xA0;     ├── x264.h&#xA;│&#xA0;&#xA0;     └── x264_config.h&#xA;└── lib&#xA;    ├── libavcodec.a&#xA;    ├── libavdevice.a&#xA;    ├── libavfilter.a&#xA;    ├── libavformat.a&#xA;    ├── libavutil.a&#xA;    ├── libpostproc.a&#xA;    ├── libswresample.a&#xA;    ├── libswscale.a&#xA;    └── libx264.a&#xA;

    &#xA;

    The final lib was created successfully, no error message in log file,&#xA;but when I import the lib to my Xcode Project,&#xA;the linker give me tons of errors(missing symbols like : Undefined symbol: _pjsua_vid_codec_set_priority).&#xA;I found the pjsua_vid.o is very small(200Bytes) compare to my pjsip+openh264 build file(was 47KB), perhaps this is the reason cause the link error.

    &#xA;

    Here is my build log :&#xA;log_file

    &#xA;

    the build script I am using :

    &#xA;

    #!/bin/sh&#xA;&#xA;# see http://stackoverflow.com/a/3915420/318790&#xA;function realpath { echo $(cd $(dirname "$1"); pwd)/$(basename "$1"); }&#xA;__FILE__=`realpath "$0"`&#xA;__DIR__=`dirname "${__FILE__}"`&#xA;&#xA;# download&#xA;function download() {&#xA;    "${__DIR__}/download.sh" "$1" "$2" #--no-cache&#xA;}&#xA;&#xA;BASE_DIR="$1"&#xA;PJSIP_URL="https://github.com/pjsip/pjproject/archive/2.10.zip"&#xA;#http://www.pjsip.org/release/2.8.0/pjproject-2.8.0.tar.bz2&#xA;PJSIP_DIR="$1/src"&#xA;LIB_PATHS=("pjlib/lib" \&#xA;           "pjlib-util/lib" \&#xA;           "pjmedia/lib" \&#xA;           "pjnath/lib" \&#xA;           "pjsip/lib" \&#xA;           "third_party/lib")&#xA;&#xA;OPENSSL_PREFIX=&#xA;FFMPEG_PREFIX=&#xA;OPENH264_PREFIX=&#xA;OPUS_PREFIX=&#xA;while [ "$#" -gt 0 ]; do&#xA;    case $1 in&#xA;        --with-openssl)&#xA;            if [ "$#" -gt 1 ]; then&#xA;                OPENSSL_PREFIX=$(python -c "import os,sys; print os.path.realpath(sys.argv[1])" "$2")&#xA;                shift 2&#xA;                continue&#xA;            else&#xA;                echo &#x27;ERROR: Must specify a non-empty "--with-openssl PREFIX" argument.&#x27; >&amp;2&#xA;                exit 1&#xA;            fi&#xA;            ;;&#xA;        --with-openh264)&#xA;            if [ "$#" -gt 1 ]; then&#xA;                OPENH264_PREFIX=$(python -c "import os,sys; print os.path.realpath(sys.argv[1])" "$2")&#xA;                shift 2&#xA;                continue&#xA;            else&#xA;                echo &#x27;ERROR: Must specify a non-empty "--with-openh264 PREFIX" argument.&#x27; >&amp;2&#xA;                exit 1&#xA;            fi&#xA;            ;;&#xA;        --with-ffmpeg)&#xA;            if [ "$#" -gt 1 ]; then&#xA;                FFMPEG_PREFIX=$(python -c "import os,sys; print os.path.realpath(sys.argv[1])" "$2")&#xA;                shift 2&#xA;                continue&#xA;            else&#xA;                echo &#x27;ERROR: Must specify a non-empty "--with-ffmpeg PREFIX" argument.&#x27; >&amp;2&#xA;                exit 1&#xA;            fi&#xA;            ;;&#xA;        --with-opus)&#xA;            if [ "$#" -gt 1 ]; then&#xA;                OPUS_PREFIX=$(python -c "import os,sys; print os.path.realpath(sys.argv[1])" "$2")&#xA;                shift 2&#xA;                continue&#xA;            else&#xA;                echo &#x27;ERROR: Must specify a non-empty "--with-opus PREFIX" argument.&#x27; >&amp;2&#xA;                exit 1&#xA;            fi&#xA;            ;;&#xA;    esac&#xA;&#xA;    shift&#xA;done&#xA;&#xA;function config_site() {&#xA;    SOURCE_DIR=$1&#xA;    PJSIP_CONFIG_PATH="${SOURCE_DIR}/pjlib/include/pj/config_site.h"&#xA;    HAS_VIDEO=&#xA;&#xA;    echo "Creating config_site.h ..."&#xA;&#xA;    if [ -f "${PJSIP_CONFIG_PATH}" ]; then&#xA;        rm "${PJSIP_CONFIG_PATH}"&#xA;    fi&#xA;&#xA;    echo "#define PJ_CONFIG_IPHONE 1" >> "${PJSIP_CONFIG_PATH}"&#xA;    echo "#define PJ_HAS_IPV6 1" >> "${PJSIP_CONFIG_PATH}" # Enable IPV6&#xA;    if [[ ${OPENH264_PREFIX} ]]; then&#xA;        # echo "#define PJMEDIA_HAS_VID_TOOLBOX_CODEC 1" >> "${PJSIP_CONFIG_PATH}"&#xA;        # echo "#define PJMEDIA_HAS_OPENH264_CODEC 1" >> "${PJSIP_CONFIG_PATH}"&#xA;        echo "#define PJMEDIA_HAS_FFMPEG_VID_CODEC 1" >> "${PJSIP_CONFIG_PATH}"&#xA;        HAS_VIDEO=1&#xA;    fi&#xA;    if [[ ${HAS_VIDEO} ]]; then&#xA;        echo "#define PJMEDIA_HAS_VIDEO 1" >> "${PJSIP_CONFIG_PATH}"&#xA;        echo "#define PJMEDIA_VIDEO_DEV_HAS_OPENGL 1" >> "${PJSIP_CONFIG_PATH}"&#xA;        echo "#define PJMEDIA_VIDEO_DEV_HAS_OPENGL_ES 1" >> "${PJSIP_CONFIG_PATH}"&#xA;        echo "#define PJMEDIA_VIDEO_DEV_HAS_IOS_OPENGL 1" >> "${PJSIP_CONFIG_PATH}"&#xA;        echo "#include <opengles></opengles>ES3/glext.h>" >> "${PJSIP_CONFIG_PATH}"&#xA;    fi&#xA;    echo "#include <pj></pj>config_site_sample.h>" >> "${PJSIP_CONFIG_PATH}"&#xA;}&#xA;&#xA;function clean_libs () {&#xA;    ARCH=${1}&#xA;    for SRC_DIR in ${LIB_PATHS[*]}; do&#xA;        DIR="${PJSIP_DIR}/${SRC_DIR}"&#xA;        if [ -d "${DIR}" ]; then&#xA;            rm -rf "${DIR}"/*&#xA;        fi&#xA;&#xA;        DIR="${PJSIP_DIR}/${SRC_DIR}-${ARCH}"&#xA;        if [ -d "${DIR}" ]; then&#xA;            rm -rf "${DIR}"&#xA;        fi&#xA;    done&#xA;}&#xA;&#xA;function copy_libs () {&#xA;    ARCH=${1}&#xA;&#xA;    for SRC_DIR in ${LIB_PATHS[*]}; do&#xA;        SRC_DIR="${PJSIP_DIR}/${SRC_DIR}"&#xA;        DST_DIR="${SRC_DIR}-${ARCH}"&#xA;        if [ -d "${DST_DIR}" ]; then&#xA;            rm -rf "${DST_DIR}"&#xA;        fi&#xA;        cp -R "${SRC_DIR}" "${DST_DIR}"&#xA;        rm -rf "${SRC_DIR}"/* # delete files because this directory will be used for the final lipo output&#xA;    done&#xA;}&#xA;&#xA;function _build() {&#xA;    pushd . > /dev/null&#xA;    cd ${PJSIP_DIR}&#xA;&#xA;    ARCH=$1&#xA;    LOG=${BASE_DIR}/${ARCH}.log&#xA;&#xA;    # configure&#xA;    CONFIGURE="./configure-iphone"&#xA;    if [[ ${OPENSSL_PREFIX} ]]; then&#xA;        CONFIGURE="${CONFIGURE} --with-ssl=${OPENSSL_PREFIX}"&#xA;    fi&#xA;    # if [[ ${OPENH264_PREFIX} ]]; then&#xA;    #     CONFIGURE="${CONFIGURE} --with-openh264=${OPENH264_PREFIX}"&#xA;    # fi&#xA;    if [[ ${FFMPEG_PREFIX} ]]; then&#xA;        CONFIGURE="${CONFIGURE} --with-ffmpeg=${FFMPEG_PREFIX}"&#xA;    fi&#xA;    if [[ ${OPUS_PREFIX} ]]; then&#xA;        CONFIGURE="${CONFIGURE} --with-opus=${OPUS_PREFIX}"&#xA;    fi&#xA;&#xA;    # flags&#xA;    if [[ ! ${CFLAGS} ]]; then&#xA;        export CFLAGS=&#xA;    fi&#xA;    if [[ ! ${LDFLAGS} ]]; then&#xA;        export LDFLAGS=&#xA;    fi&#xA;    if [[ ${OPENSSL_PREFIX} ]]; then&#xA;        export CFLAGS="${CFLAGS} -I${OPENSSL_PREFIX}/include"&#xA;        export LDFLAGS="${LDFLAGS} -L${OPENSSL_PREFIX}/lib"&#xA;    fi&#xA;    # if [[ ${OPENH264_PREFIX} ]]; then&#xA;    #     export CFLAGS="${CFLAGS} -I${OPENH264_PREFIX}/include"&#xA;    #     export LDFLAGS="${LDFLAGS} -L${OPENH264_PREFIX}/lib"&#xA;    # fi&#xA;    if [[ ${FFMPEG_PREFIX} ]]; then&#xA;        export CFLAGS="${CFLAGS} -I${FFMPEG_PREFIX}/include"&#xA;        export LDFLAGS="${LDFLAGS} -L${FFMPEG_PREFIX}/lib"&#xA;    fi&#xA;    export LDFLAGS="${LDFLAGS} -lstdc&#x2B;&#x2B;"&#xA;&#xA;    echo "Building for ${ARCH}..."&#xA;&#xA;    clean_libs ${ARCH}&#xA;&#xA;    make distclean > ${LOG} 2>&amp;1&#xA;    ARCH="-arch ${ARCH}" ${CONFIGURE} >> ${LOG} 2>&amp;1&#xA;    make dep >> ${LOG} 2>&amp;1&#xA;    make clean >> ${LOG}&#xA;    make lib >> ${LOG} 2>&amp;1&#xA;&#xA;    copy_libs ${ARCH}&#xA;}&#xA;&#xA;# function armv7() {&#xA;#     export DEVPATH="`xcrun -sdk iphoneos --show-sdk-platform-path`/Developer"&#xA;#     export CFLAGS="-miphoneos-version-min=8.0"&#xA;#     export LDFLAGS=&#xA;#     _build "armv7"&#xA;# }&#xA;# function armv7s() {&#xA;#     export DEVPATH="`xcrun -sdk iphoneos --show-sdk-platform-path`/Developer"&#xA;#     export CFLAGS="-miphoneos-version-min=8.0"&#xA;#     export LDFLAGS=&#xA;#     _build "armv7s"&#xA;# }&#xA;function arm64() {&#xA;    export DEVPATH="`xcrun -sdk iphoneos --show-sdk-platform-path`/Developer"&#xA;    export CFLAGS="-miphoneos-version-min=8.0"&#xA;    export LDFLAGS=&#xA;    _build "arm64"&#xA;}&#xA;function i386() {&#xA;    export DEVPATH="`xcrun -sdk iphonesimulator --show-sdk-platform-path`/Developer"&#xA;    export CFLAGS="-O2 -m32 -mios-simulator-version-min=8.0"&#xA;    export LDFLAGS="-O2 -m32 -mios-simulator-version-min=8.0"&#xA;    _build "i386"&#xA;}&#xA;function x86_64() {&#xA;    export DEVPATH="`xcrun -sdk iphonesimulator --show-sdk-platform-path`/Developer"&#xA;    export CFLAGS="-O2 -m32 -mios-simulator-version-min=8.0"&#xA;    export LDFLAGS="-O2 -m32 -mios-simulator-version-min=8.0"&#xA;    _build "x86_64"&#xA;}&#xA;&#xA;function lipo() {&#xA;    TMP=`mktemp -t lipo`&#xA;    echo "Lipo libs... (${TMP})"&#xA;&#xA;    for LIB_DIR in ${LIB_PATHS[*]}; do # loop over libs&#xA;        DST_DIR="${PJSIP_DIR}/${LIB_DIR}"&#xA;&#xA;        # use the first architecture to find all libraries&#xA;        PATTERN_DIR="${DST_DIR}-$1"&#xA;        for PATTERN_FILE in `ls -l1 "${PATTERN_DIR}"`; do&#xA;            OPTIONS=""&#xA;&#xA;            # loop over all architectures and collect the current library&#xA;            for ARCH in "$@"; do&#xA;                FILE="${DST_DIR}-${ARCH}/${PATTERN_FILE/-$1-/-${ARCH}-}"&#xA;                if [ -e "${FILE}" ]; then&#xA;                    OPTIONS="$OPTIONS -arch ${ARCH} ${FILE}"&#xA;                fi&#xA;            done&#xA;&#xA;            if [ "$OPTIONS" != "" ]; then&#xA;                OUTPUT_PREFIX=$(dirname "${DST_DIR}")&#xA;                OUTPUT="${OUTPUT_PREFIX}/lib/${PATTERN_FILE/-$1-/-}"&#xA;&#xA;                OPTIONS="${OPTIONS} -create -output ${OUTPUT}"&#xA;                echo "$OPTIONS" >> "${TMP}"&#xA;            fi&#xA;        done&#xA;    done&#xA;&#xA;    while read LINE; do&#xA;        xcrun -sdk iphoneos lipo ${LINE}&#xA;    done &lt; "${TMP}"&#xA;}&#xA;&#xA;# download "${PJSIP_URL}" "${PJSIP_DIR}"&#xA;config_site "${PJSIP_DIR}"&#xA;arm64 &amp;&amp; i386 &amp;&amp; x86_64&#xA;lipo arm64 i386 x86_64&#xA;

    &#xA;

    Thanks for any advice.

    &#xA;