您的位置:首页 > 移动开发 > IOS开发

ios8.1下继续编译ffmpeg做完整功能的播放器

2014-11-27 20:06 375 查看
郝萌主倾心贡献,尊重作者的劳动成果,请勿转载。 如果文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额随意,重在心意^_^
我要捐赠: 点击捐赠 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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息