1. 程式人生 > >rtmp ios 編譯指令碼

rtmp ios 編譯指令碼

github上有好幾個,但是都需要做部分改動,

librtmp依賴OpenSSL,需要先編譯OpenSSL,指令碼如下

  • build_ssl.sh
#!/bin/sh

#  Automatic build script for libssl and libcrypto 
#  for iPhoneOS and iPhoneSimulator
#
#  Created by Felix Schulze on 16.12.10.
#  Copyright 2010 Felix Schulze. All rights reserved.
#
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at
#
#  http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.
#
###########################################################################
#  Change values here                                                     #
#               
VERSION="1_0_2"                                                          #  
SDKVERSION="9.2"                                                          #  
#                                                                         #
###########################################################################
#                                                                         #
# Don't change anything under this line!                                  #
#                                                                         #
###########################################################################


CURRENTPATH=`pwd`  
ARCHS="i386 x86_64 armv7 armv7s arm64"  
DEVELOPER=`xcode-select -print-path`

if [ ! -d "$DEVELOPER" ]; then  
  echo "xcode path is not set correctly $DEVELOPER does not exist (most likely because of xcode > 4.3)"
  echo "run"
  echo "sudo xcode-select -switch <xcode path>"
  echo "for default installation:"
  echo "sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer"
  exit 1
fi

case $DEVELOPER in  
     *\ * )
           echo "Your Xcode path contains whitespaces, which is not supported."
           exit 1
          ;;
esac

case $CURRENTPATH in  
     *\ * )
           echo "Your path contains whitespaces, which is not supported by 'make install'."
           exit 1
          ;;
esac

set -e  
if [ ! -e openssl-${VERSION}.zip ]; then  
    echo "Downloading openssl-${VERSION}.zip"
    curl https://codeload.github.com/openssl/openssl/zip/OpenSSL_${VERSION} -o OpenSSL_${VERSION}.zip
else  
    echo "Using openssl-${VERSION}.zip"
    # Remove the source directory if already exist
    rm -rf "${SRCPATH}/openssl-${VERSION}"
fi


mkdir -p "${CURRENTPATH}/src"  
mkdir -p "${CURRENTPATH}/build"  
mkdir -p "${CURRENTPATH}/lib"

# tar zxf openssl-${VERSION}.tar.gz -C "${CURRENTPATH}/src"
unzip OpenSSL_${VERSION}.zip -d "${CURRENTPATH}/src"  
cd ${CURRENTPATH}/src/openssl*${VERSION}


for ARCH in ${ARCHS}  
do  
    if [[ "${ARCH}" == "i386" || "${ARCH}" == "x86_64" ]];
    then
        PLATFORM="iPhoneSimulator"
    else
        sed -ie "s!static volatile sig_atomic_t intr_signal;!static volatile intr_signal;!" "crypto/ui/ui_openssl.c"
        PLATFORM="iPhoneOS"
    fi

    export CROSS_TOP="${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer"
    export CROSS_SDK="${PLATFORM}${SDKVERSION}.sdk"
    export BUILD_TOOLS="${DEVELOPER}"

    echo "Building openssl-${VERSION} for ${PLATFORM} ${SDKVERSION} ${ARCH}"
    echo "Please stand by..."

    export CC="${BUILD_TOOLS}/usr/bin/gcc -arch ${ARCH}"
    mkdir -p "${CURRENTPATH}/bin/${PLATFORM}${SDKVERSION}-${ARCH}.sdk"
    LOG="${CURRENTPATH}/bin/${PLATFORM}${SDKVERSION}-${ARCH}.sdk/build-openssl-${VERSION}.log"

    set +e
    if [[ "$VERSION" =~ 1_0_0 ]]; then
        ./Configure BSD-generic32 --openssldir="${CURRENTPATH}/bin/${PLATFORM}${SDKVERSION}-${ARCH}.sdk" > "${LOG}" 2>&1
    elif [ "${ARCH}" == "x86_64" ]; then
        ./Configure darwin64-x86_64-cc --openssldir="${CURRENTPATH}/bin/${PLATFORM}${SDKVERSION}-${ARCH}.sdk" > "${LOG}" 2>&1
    else
        ./Configure iphoneos-cross --openssldir="${CURRENTPATH}/bin/${PLATFORM}${SDKVERSION}-${ARCH}.sdk" > "${LOG}" 2>&1
    fi

    if [ $? != 0 ];
    then 
        echo "Problem while configure - Please check ${LOG}"
        exit 1
    fi

    # add -isysroot to CC=
    sed -ie "s!^CFLAG=!CFLAG=-isysroot ${CROSS_TOP}/SDKs/${CROSS_SDK} -miphoneos-version-min=7.0 !" "Makefile"

    if [ "$1" == "verbose" ];
    then
        make
    else
        make >> "${LOG}" 2>&1
    fi

    if [ $? != 0 ];
    then 
        echo "Problem while make - Please check ${LOG}"
        exit 1
    fi

    set -e
    make install >> "${LOG}" 2>&1
    make clean >> "${LOG}" 2>&1
done

echo "Build library..."  
lipo -create ${CURRENTPATH}/bin/iPhoneSimulator${SDKVERSION}-i386.sdk/lib/libssl.a ${CURRENTPATH}/bin/iPhoneSimulator${SDKVERSION}-x86_64.sdk/lib/libssl.a  ${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-armv7.sdk/lib/libssl.a ${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-armv7s.sdk/lib/libssl.a ${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-arm64.sdk/lib/libssl.a -output ${CURRENTPATH}/lib/libssl.a

lipo -create ${CURRENTPATH}/bin/iPhoneSimulator${SDKVERSION}-i386.sdk/lib/libcrypto.a ${CURRENTPATH}/bin/iPhoneSimulator${SDKVERSION}-x86_64.sdk/lib/libcrypto.a ${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-armv7.sdk/lib/libcrypto.a ${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-armv7s.sdk/lib/libcrypto.a ${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-arm64.sdk/lib/libcrypto.a -output ${CURRENTPATH}/lib/libcrypto.a

mkdir -p ${CURRENTPATH}/include  
cp -R ${CURRENTPATH}/bin/iPhoneSimulator${SDKVERSION}-i386.sdk/include/openssl ${CURRENTPATH}/include/  
echo "Building done."  
echo "Cleaning up..."  
rm -rf ${CURRENTPATH}/src/openssl*${VERSION}  
rm -r ${CURRENTPATH}/src  
echo "Done."  
  • build_rtmp.h
#!/bin/sh

#  build-librtmp.sh
#  Automated librtmp build script for iPhoneOS and iPhoneSimulator
#
#  Created by Min Kim on 10/1/13.
#  Copyright (c) 2013 iFactory Lab Limited. All rights reserved.
#
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at
#
#  http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.
#
###########################################################################
#  Change values here                                                                                #
#                                                                                                              #
SDKVERSION="9.2"                                                                                      #  
#                                                                                                              #
###########################################################################
#                                                                                                              #
# Don't change anything under this line!                                                  #
#                                                                                                              #
###########################################################################

CURRENTPATH=`pwd`  
ARCHS="i386 x86_64 armv7 armv7s arm64"  
LIBRTMPREPO="git://git.ffmpeg.org/rtmpdump"  
BUILDPATH="${CURRENTPATH}/build"  
LIBPATH="${CURRENTPATH}/lib"  
INCLUDEPATH="${CURRENTPATH}/include"  
SRCPATH="${CURRENTPATH}/src"  
LIBRTMP="librtmp.a"  
DEVELOPER=`xcode-select -print-path`

if [ ! -d "$DEVELOPER" ]; then  
  echo "xcode path is not set correctly $DEVELOPER does not exist (most likely because of xcode > 4.3)"
  echo "run"
  echo "sudo xcode-select -switch <xcode path>"
  echo "for default installation:"
  echo "sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer"
  exit 1
fi

# Check whether openssl has already installed on the machine or not.
# libcrypt.a / libssl.a

set -e  
echo 'Check openssl installation'  
if [ -f "${LIBPATH}/libcrypto.a" ] && [ -f "${LIBPATH}/libssl.a" ] && [ -d "${INCLUDEPATH}/openssl" ]; then  
  echo 'Openssl for iOS has already installed, no need to install openssl'
else  
  echo 'Openssl for iOS not found, will install openssl for iOS'
  ./build-libssl.sh
  echo 'Succeeded to install openssl'
fi

# Download librtmp source code from git repository
# We assuem the user already installed git client.
echo 'Clone librtmp git repository'

# Remove the directory if already exist
rm -rf "${SRCPATH}/rtmpdump"

git clone ${LIBRTMPREPO} src/rtmpdump  
cd "${SRCPATH}/rtmpdump/librtmp"

LIBRTMP_REPO=""

for ARCH in ${ARCHS}  
do  
  if [ "${ARCH}" == "i386" ] || [ "${ARCH}" == "x86_64" ];
  then
      PLATFORM="iPhoneSimulator"
  else  
      PLATFORM="iPhoneOS"
  fi

  export CROSS_TOP="${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer"
  export CROSS_SDK="${PLATFORM}${SDKVERSION}.sdk"
  export BUILD_TOOLS="${DEVELOPER}"

  echo "Building librtmp for ${PLATFORM} ${SDKVERSION} ${ARCH}"
  echo "Please wait..."

  # add arch to CC=
  sed -ie "s!AR=\$(CROSS_COMPILE)ar!AR=/usr/bin/ar!" "Makefile"
  sed -ie "/CC=\$(CROSS_COMPILE)gcc/d" "Makefile"
  echo "CC=\$(CROSS_COMPILE)gcc -arch ${ARCH}" >> "Makefile"

  export CROSS_COMPILE="${DEVELOPER}/usr/bin/"  
  export XCFLAGS="-isysroot ${CROSS_TOP}/SDKs/${CROSS_SDK} -miphoneos-version-min=7.0 -I${INCLUDEPATH} -arch ${ARCH}"

  if [ "${ARCH}" == "i386" ] || [ "${ARCH}" == "x86_64" ];
  then
      export XLDFLAGS="-isysroot ${CROSS_TOP}/SDKs/${CROSS_SDK} -miphoneos-version-min=7.0 -L${LIBPATH} -arch ${ARCH}"
  else
      export XLDFLAGS="-isysroot ${CROSS_TOP}/SDKs/${CROSS_SDK} -miphoneos-version-min=7.0 -L${LIBPATH} -arch ${ARCH}"
  fi

  OUTPATH="${BUILDPATH}/librtmp-${PLATFORM}${SDKVERSION}-${ARCH}.sdk"
  mkdir -p "${OUTPATH}"
  LOG="${OUTPATH}/build-librtmp.log"

  make SYS=darwin >> "${LOG}" 2>&1  
  make SYS=darwin prefix="${OUTPATH}" install  >> "${LOG}" 2>&1
  make clean >> "${LOG}" 2>&1

  LIBRTMP_REPO+="${OUTPATH}/lib/${LIBRTMP} "
done

echo "Build universal library..."  
lipo -create ${LIBRTMP_REPO}-output ${LIBPATH}/${LIBRTMP}

mkdir -p ${INCLUDEPATH}  
cp -R ${BUILDPATH}/librtmp-iPhoneSimulator${SDKVERSION}-i386.sdk/include/ ${INCLUDEPATH}/

echo "Building done."  
echo "Cleaning up..."

rm -rf ${SRCPATH}/rtmpdump  
echo "Done."  

參考: