加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
build-ffmpeg-iOS-framework.sh 5.96 KB
一键复制 编辑 原始数据 按行查看 历史
Lincoln 提交于 2017-10-24 17:44 . add build ios framework script
#!/bin/sh
# directories
SCRATCH=`pwd`/"scratch"
ARCHS="arm64 armv7 i386 x86_64"
FFMPEG_VERSION="3.4"
export FFMPEG_VERSION
HEADER_SUFFIX=".h"
CURRENT_FOLDER=`pwd`
FRAMEWORK_NAME="FFmpeg"
FRAMEWORK_EXT=".framework"
FRAMEWORK="$FRAMEWORK_NAME$FRAMEWORK_EXT"
BUILD_FOLDER="$CURRENT_FOLDER/FFmpeg-iOS"
BUILD_THIN_FOLDER="$CURRENT_FOLDER/thin"
BUILD_INCLUDE_FOLDER="$BUILD_FOLDER/include"
BUILD_LIB_FOLDER="$BUILD_FOLDER/lib"
OUTPUT_FOLDER="$CURRENT_FOLDER/$FRAMEWORK"
OUTPUT_INFO_PLIST_FILE="$OUTPUT_FOLDER/Info.plist"
OUTPUT_HEADER_FOLDER="$OUTPUT_FOLDER/Headers"
OUTPUT_UMBRELLA_HEADER="$OUTPUT_HEADER_FOLDER/ffmpeg.h"
OUTPUT_MODULES_FOLDER="$OUTPUT_FOLDER/Modules"
OUTPUT_MODULES_FILE="$OUTPUT_MODULES_FOLDER/module.modulemap"
VERSION_NEW_NAME="Version.h"
BUNDLE_ID="org.ffmpeg.FFmpeg"
function CreateFramework() {
rm -rf $OUTPUT_FOLDER
mkdir -p $OUTPUT_HEADER_FOLDER $OUTPUT_MODULES_FOLDER
}
function CompileSource() {
./build-ffmpeg.sh $ARCHS
./build-ffmpeg.sh lipo
}
function MergeStaticLibrary() {
local files=""
for ARCH in $ARCHS; do
folder="$SCRATCH/$ARCH"
name="$FRAMEWORK_NAME$ARCH.a"
ar cru $name $(find $folder -name "*.o")
files="$files $name"
done
lipo -create $files -output FFmpeg
for file in $files; do
rm -rf $file
done
mv $FRAMEWORK_NAME $OUTPUT_FOLDER
}
function RenameHeader() {
local include_folder="$(pwd)/FFmpeg-iOS/include"
local need_replace_version_folder=""
for folder in "$include_folder"/*; do
local folder_name=`basename $folder`
local verstion_file_name="$folder_name$VERSION_NEW_NAME"
for header in "$folder"/*; do
local header_name=`basename $header`
local dst_name=$header_name
if [ $header_name == "version.h" ]; then
dst_name=$verstion_file_name
fi
local dst_folder=$OUTPUT_HEADER_FOLDER
local file_name="$folder/$header_name"
local dst_file_name="$dst_folder/$dst_name"
cp $file_name $dst_file_name
find "$dst_folder" -name "$dst_name" -type f -exec sed -i '' "s/\"version.h\"/\"$verstion_file_name\"/g" {} \;
done
need_replace_version_folder="$need_replace_version_folder $folder_name"
done
for folder_name in $need_replace_version_folder; do
local verstion_file_name="$folder_name$VERSION_NEW_NAME"
find $OUTPUT_HEADER_FOLDER -type f -exec sed -i '' "s/\"$folder_name\/version.h\"/\"$verstion_file_name\"/g" {} \;
done
find $OUTPUT_HEADER_FOLDER -type f -exec sed -i '' "s/libavformat\///g" {} \;
find $OUTPUT_HEADER_FOLDER -type f -exec sed -i '' "s/libavutil\///g" {} \;
find $OUTPUT_HEADER_FOLDER -type f -exec sed -i '' "s/libavcodec\///g" {} \;
}
# COPY MISSING inttypes.h
function CopyInttype() {
local file="$(xcode-select -p)/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/clang/include/inttypes.h"
cp $file $OUTPUT_HEADER_FOLDER
find $OUTPUT_HEADER_FOLDER -type f -exec sed -i '' "s/<inttypes.h>/\"inttypes.h\"/g" {} \;
}
function CreateModulemapAndUmbrellaHeader() {
#create ffmpeg.h
cat > $OUTPUT_UMBRELLA_HEADER <<EOF
#import <Foundation/Foundation.h>
#import <VideoToolbox/VideoToolbox.h>
#import <AudioToolbox/AudioToolbox.h>
#include "avcodec.h"
#include "avdevice.h"
#include "avfilter.h"
#include "avformat.h"
#include "avutil.h"
#include "swscale.h"
#include "swresample.h"
double FFmpegVersionNumber = $FFMPEG_VERSION;
EOF
cat > $OUTPUT_MODULES_FILE <<EOF
framework module $FRAMEWORK_NAME {
umbrella header "ffmpeg.h"
export *
module * { export * }
}
EOF
}
function CreateInfoPlist() {
DEFAULT_iOS_SDK_VERSION=`defaults read $(xcode-select -p)/Platforms/iPhoneOS.platform/version CFBundleShortVersionString`
DTCompiler=`defaults read $(xcode-select -p)/../info DTCompiler`
DTPlatformBuild=`defaults read $(xcode-select -p)/../info DTPlatformBuild`
DTSDKBuild=`defaults read $(xcode-select -p)/../info DTSDKBuild`
DTXcode=`defaults read $(xcode-select -p)/../info DTXcode`
DTXcodeBuild=`defaults read $(xcode-select -p)/../info DTXcodeBuild`
OS_BUILD_VERSION=$(sw_vers -buildVersion)
cat > $OUTPUT_INFO_PLIST_FILE <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BuildMachineOSBuild</key>
<string>$OS_BUILD_VERSION</string>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>$FRAMEWORK_NAME</string>
<key>CFBundleIdentifier</key>
<string>$BUNDLE_ID</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$FRAMEWORK_NAME</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>$FFMPEG_VERSION</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleSupportedPlatforms</key>
<array>
<string>iPhoneOS</string>
</array>
<key>CFBundleVersion</key>
<string>1</string>
<key>DTCompiler</key>
<string>$DTCompiler</string>
<key>DTPlatformBuild</key>
<string>$DTPlatformBuild</string>
<key>DTPlatformName</key>
<string>iphoneos</string>
<key>DTPlatformVersion</key>
<string>$DEFAULT_iOS_SDK_VERSION</string>
<key>DTSDKBuild</key>
<string>$DTSDKBuild</string>
<key>DTSDKName</key>
<string>iphoneos$DEFAULT_iOS_SDK_VERSION</string>
<key>DTXcode</key>
<string>$DTXcode</string>
<key>DTXcodeBuild</key>
<string>$DTXcodeBuild</string>
<key>MinimumOSVersion</key>
<string>8.0</string>
<key>UIDeviceFamily</key>
<array>
<integer>1</integer>
<integer>2</integer>
</array>
</dict>
</plist>
EOF
}
CompileSource
CreateFramework
MergeStaticLibrary
RenameHeader
CreateModulemapAndUmbrellaHeader
CopyInttype
CreateInfoPlist
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化