From f4dff714056fa7b7b8a8c245bfdc17ba1bf66c1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=97=B6=E6=9D=83?= Date: Tue, 28 Dec 2021 17:31:28 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E9=9C=80=E6=B1=82=E3=80=91=E6=8F=90?= =?UTF-8?q?=E4=BA=A4ffmpeg=E6=9E=84=E5=BB=BA=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ffmpeg/ios/build.sh | 222 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 222 insertions(+) create mode 100755 ffmpeg/ios/build.sh diff --git a/ffmpeg/ios/build.sh b/ffmpeg/ios/build.sh new file mode 100755 index 0000000..e6396b4 --- /dev/null +++ b/ffmpeg/ios/build.sh @@ -0,0 +1,222 @@ +#!/bin/sh + +# directories +FF_VERSION="4.3.1" +#FF_VERSION="snapshot-git" +if [[ $FFMPEG_VERSION != "" ]]; then + FF_VERSION=$FFMPEG_VERSION +fi +SOURCE="ffmpeg-$FF_VERSION" +FAT="FFmpeg-iOS" + +SCRATCH="scratch" +# must be an absolute path +THIN=`pwd`/"thin" + +# absolute path to x264 library +#X264=`pwd`/fat-x264 + +#FDK_AAC=`pwd`/../fdk-aac-build-script-for-iOS/fdk-aac-ios + +CONFIGURE_FLAGS="--enable-cross-compile \ + --disable-shared \ + --enable-static \ + --disable-ffmpeg \ + --disable-ffplay \ + --disable-ffprobe \ + --disable-avdevice \ + --disable-devices \ + --disable-indevs \ + --disable-outdevs \ + --disable-doc \ + --disable-debug \ + --disable-programs \ + --enable-pic \ + --disable-encoders \ + --disable-decoders \ + --enable-decoder=aac \ + --enable-decoder=hevc \ + --enable-decoder=h264 \ + --enable-decoder=mp3 \ + --enable-decoder=pcm_s16le \ + --disable-encoders \ + --enable-encoder=pcm_s16le \ + --enable-encoder=aac \ + --disable-muxers \ + --disable-demuxers \ + --enable-demuxer=avi \ + --enable-demuxer=aac \ + --enable-demuxer=concat \ + --enable-demuxer=data \ + --enable-demuxer=flv \ + --enable-demuxer=hls \ + --enable-demuxer=rm \ + --enable-demuxer=live_flv \ + --enable-demuxer=mp4,mov \ + --enable-demuxer=mpeg,mpegps \ + --enable-demuxer=mpegts \ + --enable-demuxer=flac \ + --enable-demuxer=hevc \ + --enable-demuxer=mp3,wav \ + --enable-demuxer=apng,png,zlib \ + --enable-demuxer=image2 \ + --enable-demuxer=mjpeg \ + --enable-demuxer=mpegvideo \ + --enable-demuxer=m4v \ + --enable-demuxer=webm_dash_manifest \ + --disable-filters \ + --disable-bsfs \ + --enable-bsf=h264_mp4toannexb \ + --disable-protocols \ + --enable-protocol=hls \ + --enable-protocol=http,https,httpproxy \ + --enable-protocol=rtmp,rtmps,rtmpt,rtmpts,rtp \ + --enable-protocol=file,data" + + +if [ "$X264" ] +then + CONFIGURE_FLAGS="$CONFIGURE_FLAGS --enable-gpl --enable-libx264" +fi + +if [ "$FDK_AAC" ] +then + CONFIGURE_FLAGS="$CONFIGURE_FLAGS --enable-libfdk-aac --enable-nonfree" +fi + +# avresample +#CONFIGURE_FLAGS="$CONFIGURE_FLAGS --enable-avresample" + +ARCHS="arm64 armv7 x86_64 i386" + +COMPILE="y" +LIPO="y" + +DEPLOYMENT_TARGET="8.0" + +if [ "$*" ] +then + if [ "$*" = "lipo" ] + then + # skip compile + COMPILE= + else + ARCHS="$*" + if [ $# -eq 1 ] + then + # skip lipo + LIPO= + fi + fi +fi + +if [ "$COMPILE" ] +then + if [ ! `which yasm` ] + then + echo 'Yasm not found' + if [ ! `which brew` ] + then + echo 'Homebrew not found. Trying to install...' + ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" \ + || exit 1 + fi + echo 'Trying to install Yasm...' + brew install yasm || exit 1 + fi + if [ ! `which gas-preprocessor.pl` ] + then + echo 'gas-preprocessor.pl not found. Trying to install...' + (curl -L https://github.com/libav/gas-preprocessor/raw/master/gas-preprocessor.pl \ + -o /usr/local/bin/gas-preprocessor.pl \ + && chmod +x /usr/local/bin/gas-preprocessor.pl) \ + || exit 1 + fi + + if [ ! -r $SOURCE ] + then + echo 'FFmpeg source not found. Trying to download...' + curl http://www.ffmpeg.org/releases/$SOURCE.tar.bz2 | tar xj \ + || exit 1 + fi + + CWD=`pwd` + for ARCH in $ARCHS + do + echo "building $ARCH..." + mkdir -p "$SCRATCH/$ARCH" + cd "$SCRATCH/$ARCH" + + CFLAGS="-arch $ARCH" + if [ "$ARCH" = "i386" -o "$ARCH" = "x86_64" ] + then + PLATFORM="iPhoneSimulator" + CFLAGS="$CFLAGS -mios-simulator-version-min=$DEPLOYMENT_TARGET" + else + PLATFORM="iPhoneOS" + CFLAGS="$CFLAGS -mios-version-min=$DEPLOYMENT_TARGET -fembed-bitcode" + if [ "$ARCH" = "arm64" ] + then + EXPORT="GASPP_FIX_XCODE5=1" + fi + fi + + XCRUN_SDK=`echo $PLATFORM | tr '[:upper:]' '[:lower:]'` + CC="xcrun -sdk $XCRUN_SDK clang" + + # force "configure" to use "gas-preprocessor.pl" (FFmpeg 3.3) + if [ "$ARCH" = "arm64" ] + then + AS="gas-preprocessor.pl -arch aarch64 -- $CC" + else + AS="gas-preprocessor.pl -- $CC" + fi + + CXXFLAGS="$CFLAGS" + LDFLAGS="$CFLAGS" + if [ "$X264" ] + then + CFLAGS="$CFLAGS -I$X264/include" + LDFLAGS="$LDFLAGS -L$X264/lib" + fi + if [ "$FDK_AAC" ] + then + CFLAGS="$CFLAGS -I$FDK_AAC/include" + LDFLAGS="$LDFLAGS -L$FDK_AAC/lib" + fi + + TMPDIR=${TMPDIR/%\/} $CWD/$SOURCE/configure \ + --target-os=darwin \ + --arch=$ARCH \ + --cc="$CC" \ + --as="$AS" \ + $CONFIGURE_FLAGS \ + --extra-cflags="$CFLAGS" \ + --extra-ldflags="$LDFLAGS" \ + --prefix="$THIN/$ARCH" \ + || exit 1 + + make -j3 install $EXPORT || exit 1 + cd $CWD + done +fi + +if [ "$LIPO" ] +then + echo "building fat binaries..." + mkdir -p $FAT/lib + set - $ARCHS + CWD=`pwd` + cd $THIN/$1/lib + for LIB in *.a + do + cd $CWD + echo lipo -create `find $THIN -name $LIB` -output $FAT/lib/$LIB 1>&2 + lipo -create `find $THIN -name $LIB` -output $FAT/lib/$LIB || exit 1 + done + + cd $CWD + cp -rf $THIN/$1/include $FAT +fi + +echo Done -- GitLab