美文网首页FFmpeg
第2讲-FFmepg-iOS+Android平台集成

第2讲-FFmepg-iOS+Android平台集成

作者: 泰克2008 | 来源:发表于2017-11-16 10:10 被阅读13次

    第一个内容:解决上一节课编译bug问题?

    问题一:`which yasm`->检测是否安装了yasm程序
        #错误一:`which` yasm
        #正确一:`which yasm`
    问题二:`which brew`->检测是否安装了软件管理器(Homebrew)
        #错误二:`which` brew
        #正确二:`which brew`
    问题三:配置编译CPU架构类型->指定当前编译CPU架构类型
        #错误三:"--arch $arch"
        #正确三:"-arch $arch"
    注意事项
        注意一:执行脚本的时候传入参数->"arm64"
            Dream$ ./ffmpeg-build.sh arm64
        注意二:你要将gas-preprocessor.pl导入到和脚本文件在同一个目录
        
    扩展知识?->课后可以试一试
        FFmpeg一共:9个库->常用是7个库
            3-4库需要,其他库不需要
        选择性编译一些库,不一定编译所有?如何选择?
    

    第二个内容:在iOS平台下集成和应用FFmpeg?

    第一个案例:测试我们自己编译库FFmpeg?
        选择真机测试
        第一步:新建项目
    
        第二步:导入.a静态库和include头文件
    
        第三步:添加系统依赖库
    
        第四步:配置头文件和.a静态库
            
        第五步:在代码中测试FFmpeg测试配置信息
            1、引入头文件->FFmpeg
            2、定义测试FFmpeg方法
    第二个案例:指定打开一个文件?->视频文件?
    

    第三个内容:讲解在Android平台编译.so动态库?->

    #!/bin/bash
    
    #第一步:进入到指定目录
    cd ffmpeg-3.4
    
    #第二步:指定NDK路径(编译什么样的平台->采用什么样的平台编译器)
    #Android平台NDK技术->做C/C++开发->编译Andrroid平台下.so动态库
    #注意:放在英文目录(中文目录报错)
    #修改一:修改为你自己NDK存放目录
    NDK_DIR=/Users/yangshaohong/Desktop/tools/eclipse/android-ndk/android-ndk-r10e
    
    #第三步:配置Android系统版本(支持最小的版本)
    #指定使用NDK Platform版本(对应系统版本)
    SYSROOT=$NDK_DIR/platforms/android-18/arch-arm
    
    #第四步:指定编译工具链->(通俗:指定编译器)->CPU架构(Android手机通用的CPU架构类型):armeabi
    TOOLCHAIN=$NDK_DIR/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
    
    #第五步:指定CPU平台架构类型
    #指定编译后的安装目录
    ARCH=arm
    ADDI_CFLAGS="-marm"
    
    #第六步:指定编译成功之后,.so动态库存放位置
    #修改二:这个目录你需要修改为你自己目录
    PREFIX=/Users/yangshaohong/Desktop/ffmpeg-android/android-build/$ARCH
    
    #第七步:编写执行编译脚本->调用FFmpeg进行配置
    #定义了Shell脚本函数(方法)
    function build_armeabi
    {
    ./configure \
    --prefix=$PREFIX \
    --enable-shared \
    --enable-gpl \
    --disable-static \
    --disable-doc \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-ffserver \
    --disable-doc \
    --disable-symver \
    --enable-small \
    --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
    --target-os=android \
    --arch=$ARCH \
    --enable-cross-compile \
    --sysroot=$SYSROOT \
    --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
    --enable-pic \
    $ADDITIONAL_CONFIGURE_FLAG
    
    make clean
    make -j4
    make install
    }
    
    #第八步:执行函数->开始编译
    build_armeabi
    echo "Android armeabi builds finished"
    

    执行步骤

    第一步:编写Shell脚本(课前准备好了,不去写了)
            解释->比iOS要简单一些       
            注意:真机测试(不用模拟器)
    
    第二步:注意事项
                处理之前:目标编译出来.so动态库格式
                libavcodec.so.57.2.100
                存在问题:你在Android程序中无法加载动态库,编译器报错(报错信息:找不到这个动态库),即使你修改了后缀名为libavcodec.so,依然还是无法运行,这是一个坑
            处理之后:.so动态库格式(国外网站,关于FFmpeg安卓开发相关资料查找到的)
                libavcodec.so
                解决方案
                    首先:进入FFmpeg-3.4开发包
                    其次:打开configure文件
                    最后:修改配置
    
                原始
                #SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
                #LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
                #SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
                #SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
    
                修改
                SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
                LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
                SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
                SLIB_INSTALL_LINKS='$(SLIBNAME)'
    
    第三步:执行脚本,编译.so动态库(不演示了->耗时)
            Dream$ ./build-ffmpeg-armeabi.sh
    
    第四步:集成到项目中
    

    第四个内容:在Android平台下应用FFmpeg的.so动态库?

    1、环境搭建
    Android平台下的开发:准备好.so动态库
    第一步:编译.so动态库?
    
    第二步:新建在Android平台下的NDK项目?
        就是说,本身默认Android项目不支持C/C++开发(NDK底层开发),需要我们进行配置
        NDK:在Android平台下Google提供的支持C/C++开发一套工具库
        注意一:新建项目的时候需要你手动勾选这个支持NDK项目
        注意二:尽量勾选在Java中支持处理C/C++异常
            意思:C/C++出错了,那么在Java程序中,我们可以捕获这个错误,并且处理
        iOS开发:你需要实现的是NDK底层代码->上层Java开发你不需要关心(安卓不需要关心)
        目前整个Android领域->会NDK技术不到20%,意味着安卓领域80%以上工程师都不会
    第三步:配置NDK环境->FFmpeg->导入FFmpeg开发包
    
    第四步:配置.so动态库和引入头文件->CMakeLists.txt文件中
        在课后安装一下Android Studio->安装NDK环境->自动构建NDK环境
        注意:直接拷贝,不需要修改
    第五步:配置CPU平台架构类型->gradle配置文件中->build.gradle文件
    
    2、案例一:测试FFmpeg环境?
        第一步:定义Java方法->类似于定义iOS方法
            //native->标记这个方法是一个特殊方法,不是普通的java方法,而是用于与NDK进行交互方法(C/C++语言交互)
                //用native进行修饰方法:方法没有实现,具体的实现在C/C++里面
                public static native void ffmpegTestConfig();
    
        第二步:定义C/C++方法(NDK方法->和Java方法一一对应)
            注意:在CMakeLists.txt配置native-lib.cpp文件,将Java和C/C++进行关联
    
    3、案例二:测试FFmpeg打开文件->视频文件?
        第一步:定义Java方法
            
        第二步:定义NDK方法
            注意:加上访问sdcard权限
    

    实例工程

    https://pan.baidu.com/s/1hsBzZHM

    相关文章

      网友评论

        本文标题:第2讲-FFmepg-iOS+Android平台集成

        本文链接:https://www.haomeiwen.com/subject/ljzkvxtx.html