From 1b0854f96f5602aceacd57a1fec92776801de018 Mon Sep 17 00:00:00 2001 From: xufuji456 Date: Wed, 27 Apr 2022 14:30:58 +0800 Subject: [PATCH] Feature: compile openssl, support https for FFmpeg --- shell/ffmpeg/build_ffmpeg_https.sh | 126 +++++++++++++++++++++++++++++ shell/ffmpeg/build_ffmpeg_one.sh | 5 ++ shell/openssl/build_openssl.sh | 22 +++++ 3 files changed, 153 insertions(+) create mode 100644 shell/ffmpeg/build_ffmpeg_https.sh create mode 100755 shell/openssl/build_openssl.sh diff --git a/shell/ffmpeg/build_ffmpeg_https.sh b/shell/ffmpeg/build_ffmpeg_https.sh new file mode 100644 index 0000000..c976485 --- /dev/null +++ b/shell/ffmpeg/build_ffmpeg_https.sh @@ -0,0 +1,126 @@ +make clean +cd compat +rm -rf strtod.d +rm -rf strtod.o +cd ../ + +set -e + +archbit=64 + +if [ $archbit -eq 32 ];then +echo "build for 32bit" +#32bit +ABI='armeabi-v7a' +CPU='arm' +API=21 +ARCH='arm' +ANDROID='androideabi' +NATIVE_CPU='armv7-a' +OPTIMIZE_CFLAGS="-march=$NATIVE_CPU -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp" +else +#64bit +echo "build for 64bit" +ABI='arm64-v8a' +CPU='aarch64' +API=21 +ARCH='arm64' +ANDROID='android' +NATIVE_CPU='armv8-a' +OPTIMIZE_CFLAGS="" +fi + +export NDK=/Users/xufulong/Library/Android/android-ndk-r15c +export PREBUILT=$NDK/toolchains/$CPU-linux-$ANDROID-4.9/prebuilt +export PLATFORM=$NDK/platforms/android-$API/arch-$ARCH +export TOOLCHAIN=$PREBUILT/darwin-x86_64 +export PREFIX=../ffmpeg-android/$ABI +export ADDITIONAL_CONFIGURE_FLAG="--cpu=$NATIVE_CPU" + +THIRD_LIB=$PREFIX +export EXTRA_CFLAGS="-Os -fPIC $OPTIMIZE_CFLAGS -I$THIRD_LIB/include" +export EXTRA_LDFLAGS="-lc -lm -ldl -llog -lgcc -lz -L$THIRD_LIB/lib" + +build_one(){ + ./configure --target-os=android --prefix=$PREFIX \ +--enable-cross-compile \ +--arch=$CPU \ +--cc=$TOOLCHAIN/bin/$CPU-linux-$ANDROID-gcc \ +--cross-prefix=$TOOLCHAIN/bin/$CPU-linux-$ANDROID- \ +--sysroot=$PLATFORM \ +--enable-hwaccels \ +--enable-static \ +--disable-shared \ +--disable-doc \ +--enable-neon \ +--enable-asm \ +--enable-small \ +--disable-ffmpeg \ +--disable-ffplay \ +--disable-ffprobe \ +--disable-debug \ +--enable-gpl \ +--disable-avdevice \ +--disable-indevs \ +--disable-outdevs \ +--extra-cflags="$EXTRA_CFLAGS" \ +--extra-ldflags="$EXTRA_LDFLAGS" \ +--enable-avcodec \ +--enable-avformat \ +--enable-avutil \ +--enable-swresample \ +--enable-swscale \ +--enable-avfilter \ +--enable-network \ +--enable-bsfs \ +--enable-postproc \ +--enable-filters \ +--enable-encoders \ +--disable-encoder=a64multi,a64multi5,alias_pix,amv,apng,aptx,aptx_hd,asv1,asv2,avrp,avui,cinepak,cljr,\ +comfortnoise,dpx,ffvhuff,fits,hap,ilbc_at,mlp,nellymoser,pam,pbm,pcx,pgm,pgmyuv,ppm,prores,prores_aw,\ +prores_ks,qtrle,r10k,r210,ra_144,roq,roq_dpcm,rv10,rv20,s302m,sbc,sgi,snow,sunrast,svq1,targa,tta,utvideo,\ +v210,v308,v408,v410,vc2,wrapped_avframe,xbm,xface,xsub,xwd,y41p,zmbv \ +--disable-decoders \ +--enable-decoder=mjpeg,mpeg4,h263,h264,flv,hevc,wmv3,msmpeg4v3,msmpeg4v2,msvideo1,vc1,mpeg1video,mpeg2video,\ +aac,ac3,ac3_fixed,m4a,amrnb,amrwb,vorbis,wmav2,truehd,tscc,tscc2,dvvideo,msrle,cinepak,indeo5,vp8,vp9,\ +mp3float,mp3,mp3adufloat,mp3adu,mp3on4float,mp3on4,aac_fixed,aac_latm,eac3,png,wmav1,wmv1,wmv2,\ +pcm_alaw,pcm_dvd,pcm_f16le,pcm_f24le,pcm_f32be,pcm_f32le,pcm_f64be,pcm_f64le,zlib,flac,opus,mlp,\ +pcm_s16be,pcm_s16le,pcm_s24be,pcm_s24le,pcm_s32be,pcm_s32le,pcm_s64be,pcm_s64le,pcm_mulaw,alac,adpcm_ms,\ +pcm_u16be,pcm_u16le,pcm_u24be,pcm_u24le,pcm_u32be,pcm_u32le,pcm_vidc,pcm_zork,adpcm_ima_qt,adpcm_ima_wav,gif \ +--enable-muxers \ +--enable-parsers \ +--enable-protocols \ +--enable-jni \ +--enable-mediacodec \ +--enable-decoder=h264_mediacodec \ +--enable-decoder=hevc_mediacodec \ +--enable-decoder=mpeg4_mediacodec \ +--enable-decoder=vp9_mediacodec \ +--enable-nonfree \ +--enable-openssl \ +--enable-protocol=https \ +--disable-demuxers \ +--enable-demuxer=aac,ac3,alaw,amr,amrnb,amrwb,ape,asf,asf_o,avi,cavsvideo,codec2,concat,dnxhd,eac3,flac,flv,\ +gif,gif_pipe,h263,h264,hevc,hls,image2,image2pipe,jpeg_pipe,lrc,m4v,matroska,webm,mjpeg,mov,mp4,m4a,3gp,mp3,mpeg,\ +mpegts,mv,ogg,png_pipe,realtext,rm,rtp,rtsp,pcm_s16be,pcm_s16le,pcm_s32be,pcm_s32le,sdp,srt,swf,\ +vc1,wav,webm_dash,manifest,xmv,pcm_f32be,pcm_f32le,pcm_f64be,pcm_f64le,mpegvideo,mulaw,sami,srt \ +$ADDITIONAL_CONFIGURE_FLAG +make +make install + +$TOOLCHAIN/bin/$CPU-linux-$ANDROID-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib \ +-L$PREFIX/lib -soname libffmpeg.so \ +-shared -nostdlib -Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so \ +$PREFIX/lib/libavcodec.a \ +$PREFIX/lib/libpostproc.a \ +$PREFIX/lib/libavfilter.a \ +$PREFIX/lib/libswresample.a \ +$PREFIX/lib/libavformat.a \ +$PREFIX/lib/libavutil.a \ +$PREFIX/lib/libswscale.a \ +$PREFIX/lib/libssl.a \ +$PREFIX/lib/libcrypto.a \ +-lc -lm -lz -ldl -llog --dynamic-linker=/system/bin/linker $TOOLCHAIN/lib/gcc/$CPU-linux-$ANDROID/4.9.x/libgcc.a +} + +build_one \ No newline at end of file diff --git a/shell/ffmpeg/build_ffmpeg_one.sh b/shell/ffmpeg/build_ffmpeg_one.sh index a3e01cf..8918ae2 100644 --- a/shell/ffmpeg/build_ffmpeg_one.sh +++ b/shell/ffmpeg/build_ffmpeg_one.sh @@ -99,6 +99,9 @@ pcm_u16be,pcm_u16le,pcm_u24be,pcm_u24le,pcm_u32be,pcm_u32le,pcm_vidc,pcm_zork,ad --enable-decoder=hevc_mediacodec \ --enable-decoder=mpeg4_mediacodec \ --enable-decoder=vp9_mediacodec \ +--enable-nonfree \ +--enable-openssl \ +--enable-protocol=https \ --disable-demuxers \ --enable-demuxer=aac,ac3,alaw,amr,amrnb,amrwb,ape,asf,asf_o,avi,cavsvideo,codec2,concat,dnxhd,eac3,flac,flv,\ gif,gif_pipe,h263,h264,hevc,hls,image2,image2pipe,jpeg_pipe,lrc,m4v,matroska,webm,mjpeg,mov,mp4,m4a,3gp,mp3,mpeg,\ @@ -120,6 +123,8 @@ $PREFIX/lib/libavutil.a \ $PREFIX/lib/libswscale.a \ $PREFIX/lib/libmp3lame.a \ $PREFIX/lib/libx264.a \ +$PREFIX/lib/libssl.a \ +$PREFIX/lib/libcrypto.a \ -lc -lm -lz -ldl -llog --dynamic-linker=/system/bin/linker $TOOLCHAIN/lib/gcc/$CPU-linux-$ANDROID/4.9.x/libgcc.a } diff --git a/shell/openssl/build_openssl.sh b/shell/openssl/build_openssl.sh new file mode 100755 index 0000000..276f79f --- /dev/null +++ b/shell/openssl/build_openssl.sh @@ -0,0 +1,22 @@ +#!/bin/bash +export NDK_ROOT=/Users/xufulong/Library/Android/android-ndk-r15c + +build() { +API=21 +CPU=$1 +PLATFORM=$2 +make clean +rm -rf $(pwd)/android/$CPU +export ANDROID_NDK_HOME=$NDK_ROOT +PATH=$ANDROID_NDK_HOME/toolchains/$PLATFORM-4.9/prebuilt/darwin-x86_64/bin:$PATH +./Configure android-$CPU -D__ANDROID_API__=$API no-shared no-ssl2 no-ssl3 no-comp no-hw no-engine --prefix=$(pwd)/android/$CPU --openssldir=$(pwd)/android/$CPU + +make +make install +} + +# build armv7 +build arm arm-linux-androideabi + +# build armv8 +build arm64 aarch64-linux-android \ No newline at end of file