ios8.1下继续编译ffmpeg做完整功能的播放器-创新互联
郝萌主倾心贡献,尊重作者的劳动成果,请勿转载。
创新互联建站专业为企业提供灯塔网站建设、灯塔做网站、灯塔网站设计、灯塔网站制作等企业网站建设、网页设计与制作、灯塔企业网站模板建站服务,十载灯塔做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。如果文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额随意,重在心意^_^
我要捐赠: 点击捐赠
Cocos2d-X×××:点我传送
上篇日志里做的demo没有音频解码部分,而且也没有控制音量大小缓冲等视频播放器功能。
在网上找到一个kxmovie的播放器的例子,一样要编译ffmpeg。但是把先前编译好的lib放入新工程中,编译不能通过。
结论是:先前编译的库这个工程用不了。
这下我十分的困惑。
上个例子中缺少音频部分的解码,只能作这样的猜测。
于是想办法按照kxmovie的readme重新编译ffmpeg库。
但是,尼玛的,不仅仅是它,网上一堆人都说按照这个成功编译了,纯属放屁。
我把要编译的代码改了一些,才能通过。
可以远程在线播放视频,也可以播放本地视频,支持任何格式,支持播放器功能。
至此,编译ffmpeg在线播放任何视频格式的问题就此结束。
我的sdk:8.1
Xcode6.1
mac os x 10.9.5
改动后的代码如下:
require "pathname"
require "fileutils"
def system_or_exit(cmd, stdout = nil)
puts "Executing #{cmd}"
cmd += " >#{stdout}" if stdout
system(cmd) or raise "******** Build failed ********"
end
## build ffmpeg
XCODE_PATH='/Applications/Xcode.app/Contents/Developer/Platforms'
#GCC_PATH='/Developer/usr/bin/gcc'
GCC_PATH='/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang'
LIB_PATH='/usr/lib/system'
PLATOFRM_PATH_SIM ='/iPhoneSimulator.platform'
PLATOFRM_PATH_IOS ='/iPhoneOS.platform'
SDK_VERSION = '8.1'
SIM_SDK = 'iphonesimulator' + SDK_VERSION
IOS_SDK = 'iphoneos' + SDK_VERSION
#SDK_PATH_SIM ='/Developer/SDKs/iPhoneSimulator8.1.sdk'
#SDK_PATH_IOS='/Developer/SDKs/iPhoneOS8.1.sdk'
SDK_PATH_SIM ='/Developer/SDKs/iPhoneSimulator' + SDK_VERSION + '.sdk'
SDK_PATH_IOS='/Developer/SDKs/iPhoneOS' + SDK_VERSION + '.sdk'
FFMPEG_BUILD_ARGS_SIM = [
'--assert-level=2',
'--disable-mmx',
'--arch=i386',
'--cpu=i386',
"--extra-ldflags='-arch i386 -miphoneos-version-min=7.0'",
"--extra-cflags='-arch i386 -mfpu=neon -miphoneos-version-min=7.0'",
'--disable-asm',
]
FFMPEG_BUILD_ARGS_ARMV7 = [
'--arch=arm',
'--cpu=cortex-a8',
'--enable-pic',
"--extra-cflags='-arch armv7 -mfpu=neon -miphoneos-version-min=7.0'",
"--extra-ldflags='-arch armv7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk -miphoneos-version-min=7.0'",
'--enable-neon',
'--enable-optimizations',
'--disable-debug',
'--disable-armv5te',
'--disable-armv6',
'--disable-armv6t2',
'--enable-small',
'--disable-asm',
]
FFMPEG_BUILD_ARGS_ARMV7S = [
'--arch=arm',
'--cpu=cortex-a8',
'--enable-pic',
"--extra-cflags='-arch armv7s -mfpu=neon -miphoneos-version-min=7.0'",
"--extra-ldflags='-arch armv7s -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk -miphoneos-version-min=7.0'",
'--enable-neon',
'--enable-optimizations',
'--disable-debug',
'--disable-armv5te',
'--disable-armv6',
'--disable-armv6t2',
'--enable-small',
'--disable-asm',
]
FFMPEG_BUILD_ARGS = [
'--disable-ffmpeg',
'--disable-ffplay',
'--disable-ffserver',
'--disable-ffprobe',
'--disable-doc',
'--disable-bzlib',
'--target-os=darwin',
'--enable-cross-compile',
#'--enable-nonfree',
'--enable-gpl',
'--enable-version3',
'--disable-asm',
]
FFMPEG_LIBS = [
'libavcodec',
'libavformat',
'libavutil',
'libswscale',
'libswresample',
]
def mkArgs(platformPath, sdkPath, platformArgs)
#cc = '--cc=' + XCODE_PATH + platformPath + GCC_PATH
cc = '--cc=' + GCC_PATH
sysroot = '--sysroot=' + XCODE_PATH + platformPath + sdkPath
extra = '--extra-ldflags=-L' + XCODE_PATH + platformPath + sdkPath + LIB_PATH
args = FFMPEG_BUILD_ARGS + platformArgs
args << cc
args << sysroot
args << extra
args.join(' ')
end
def moveLibs(dest)
FFMPEG_LIBS.each do |x|
FileUtils.move Pathname.new("ffmpeg/#{x}/#{x}.a"), dest
end
end
def ensureDir(path)
dest = Pathname.new path
if dest.exist?
FileUtils.rm Dir.glob("#{path}/*.a")
else
dest.mkdir
end
dest
end
def buildArch(arch)
case arch
when 'i386'
args = mkArgs(PLATOFRM_PATH_SIM, SDK_PATH_SIM, FFMPEG_BUILD_ARGS_SIM)
when 'armv7'
args = mkArgs(PLATOFRM_PATH_IOS, SDK_PATH_IOS, FFMPEG_BUILD_ARGS_ARMV7)
when 'armv7s'
args = mkArgs(PLATOFRM_PATH_IOS, SDK_PATH_IOS, FFMPEG_BUILD_ARGS_ARMV7S)
else
raise "Build failed: unknown arch: #{arch}"
end
dest = ensureDir('ffmpeg/' + arch)
system_or_exit "cd ffmpeg; ./configure #{args}"
system_or_exit "cd ffmpeg; make"
moveLibs(dest)
system_or_exit "cd ffmpeg; make clean"
end
def mkLipoArgs(lib)
"-create -arch armv7 armv7/#{lib}.a -arch armv7 armv7s/#{lib}.a -arch i386 i386/#{lib}.a -output universal/#{lib}.a"
end
desc "check gas-preprocessor.pl"
task :check_gas_preprocessor do
found = false
ENV['PATH'].split(':').each do |x|
p = Pathname.new(x) + 'gas-preprocessor.pl'
if p.exist? && p.writable?
found = true
break;
end
#print p
end
unless found
raise "Build failed: first install gas-preprocessor.pl.\nSee http://stackoverflow.com/questions/5056600/how-to-install-gas-preprocessor for more info."
end
end
desc "Clean ffmpeg"
task :clean_ffmpeg do
system_or_exit "cd ffmpeg; make clean"
end
desc "Build ffmpeg i386 libs"
task :build_ffmpeg_i386 do
buildArch('i386')
end
desc "Build ffmpeg armv7 libs"
task :build_ffmpeg_armv7 do
buildArch('armv7')
end
desc "Build ffmpeg armv7s libs"
task :build_ffmpeg_armv7s do
buildArch('armv7s')
end
desc "Build ffmpeg universal libs"
task :build_ffmpeg_universal do
ensureDir('ffmpeg/universal')
FFMPEG_LIBS.each do |x|
args = mkLipoArgs(x)
system_or_exit "cd ffmpeg; lipo #{args}"
end
dest = ensureDir('libs')
FFMPEG_LIBS.each do |x|
FileUtils.move Pathname.new("ffmpeg/universal/#{x}.a"), dest
end
end
## build libkxmovie
def cleanMovieLib(config)
buildDir = Pathname.new 'tmp/build'
system_or_exit "xcodebuild -project kxmovie.xcodeproj -target kxmovie -configuration #{config} -sdk #{IOS_SDK} clean SYMROOT=#{buildDir}"
system_or_exit "xcodebuild -project kxmovie.xcodeproj -target kxmovie -configuration #{config} -sdk #{SIM_SDK} clean SYMROOT=#{buildDir}"
end
desc "Clean libkxmovie-debug"
task :clean_movie_debug do
cleanMovieLib 'Debug'
end
desc "Clean libkxmovie-release"
task :clean_movie_release do
cleanMovieLib 'Release'
end
desc "Build libkxmovie-debug"
task :build_movie_debug do
buildDir = Pathname.new 'tmp/build'
system_or_exit "xcodebuild -project kxmovie.xcodeproj -target kxmovie -configuration Debug -sdk #{IOS_SDK} build SYMROOT=#{buildDir} -arch armv7s"
FileUtils.move Pathname.new('tmp/build/Debug-iphoneos/libkxmovie.a'), Pathname.new('tmp/build/Debug-iphoneos/libkxmovie_armv7s.a')
system_or_exit "xcodebuild -project kxmovie.xcodeproj -target kxmovie -configuration Debug -sdk #{IOS_SDK} build SYMROOT=#{buildDir} -arch armv7"
system_or_exit "xcodebuild -project kxmovie.xcodeproj -target kxmovie -configuration Debug -sdk #{SIM_SDK} build SYMROOT=#{buildDir}"
system_or_exit "lipo -create -arch armv7 tmp/build/Debug-iphoneos/libkxmovie.a -arch armv7 tmp/build/Debug-iphoneos/libkxmovie_armv7s.a -arch i386 tmp/build/Debug-iphonesimulator/libkxmovie.a -output tmp/build/libkxmovie.a"
end
desc "Build libkxmovie-release"
task :build_movie_release do
buildDir = Pathname.new 'tmp/build'
system_or_exit "xcodebuild -project kxmovie.xcodeproj -target kxmovie -configuration Release -sdk #{IOS_SDK} build SYMROOT=#{buildDir} -arch armv7s"
FileUtils.move Pathname.new('tmp/build/Release-iphoneos/libkxmovie.a'), Pathname.new('tmp/build/Release-iphoneos/libkxmovie_armv7s.a')
system_or_exit "xcodebuild -project kxmovie.xcodeproj -target kxmovie -configuration Release -sdk #{IOS_SDK} build SYMROOT=#{buildDir} -arch armv7"
system_or_exit "xcodebuild -project kxmovie.xcodeproj -target kxmovie -configuration Debug -sdk #{SIM_SDK} build SYMROOT=#{buildDir}"
system_or_exit "lipo -create -arch armv7 tmp/build/Release-iphoneos/libkxmovie.a -arch armv7 tmp/build/Release-iphoneos/libkxmovie_armv7s.a -arch i386 tmp/build/Debug-iphonesimulator/libkxmovie.a -output tmp/build/libkxmovie.a"
#FileUtils.copy Pathname.new('tmp/build/Release-iphoneos/libkxmovie.a'), buildDir
end
desc "Copy to output folder"
task :copy_movie do
dest = ensureDir 'output'
FileUtils.move Pathname.new('tmp/build/libkxmovie.a'), dest
FileUtils.copy Pathname.new('libs/libavcodec.a'), dest
FileUtils.copy Pathname.new('libs/libavformat.a'), dest
FileUtils.copy Pathname.new('libs/libavutil.a'), dest
FileUtils.copy Pathname.new('libs/libswscale.a'), dest
FileUtils.copy Pathname.new('libs/libswresample.a'), dest
FileUtils.copy Pathname.new('kxmovie/KxMovieViewController.h'), dest
FileUtils.copy Pathname.new('kxmovie/KxAudioManager.h'), dest
FileUtils.copy Pathname.new('kxmovie/KxMovieDecoder.h'), dest
FileUtils.copy_entry Pathname.new('kxmovie/kxmovie.bundle'), dest + 'kxmovie.bundle'
end
##
task :clean => [:clean_movie_debug, :clean_movie_release, :clean_ffmpeg]
task :build_ffmpeg => [:check_gas_preprocessor, :build_ffmpeg_i386, :build_ffmpeg_armv7, :build_ffmpeg_armv7s, :build_ffmpeg_universal]
#task :build_movie => [:build_movie_debug, :copy_movie]
task :build_movie => [:build_movie_release, :copy_movie]
task :build_all => [:build_ffmpeg, :build_movie]
task :default => [:build_all]另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
新闻名称:ios8.1下继续编译ffmpeg做完整功能的播放器-创新互联
网页链接:http://scyanting.com/article/deohdj.html