• Windows环境下使用cygwin ndk_r9c编译FFmpeg


     一、废话

    最近学习,第一步就是编译.我们需要编译FFmpag,x264,fdk_aac,一步步来.先来讲一下FFmpeg,网上说的很多都是几百年前的,我亲测完美可用

    联系我可以直接评论,也可以加我QQ:2519687025

     二、干货 

     我能力有限,但是我希望我写的东西能够让更多的人能够接受.我也是刚刚接触.做一个记录,也希望能够对其他人有好处.

    几个概念理解一下:不理解也没关系.用了之后再说慢慢就理解了.主要是因为我们是windows

            先是cygwin下的一些概念:
            unix style path: /cygdrive/盘符/目录名/文件名(其实是:/path/to/mount/point/path/to/file
            mixed style path: 盘符:/目录名/文件名
            windows style path: 盘符:目录名文件名
     
            用cygpath可以在这些路径形式之间转换
            cygpath -m "path"
            cygpath -u "path"
            cygpath -w "path"

      准备:1.FFmpeg的源码

    2.cygwin下载,安装,这个网上基本都有.我不讲太多.git cygdrive bash make 这几个都需要下载 

    3.ndk我现在的版本r9c.最新的现在应该到r9d了.需要的去更新问题不大的.而且注意设置环境变量

    我的设置如下: 因为下面的命令要用到,所以没设的就跟我设一样的就好,避免出现不必要的问题

    ANDROID_NDK_ROOT  E:android-ndk-r9c

    名字一样就好,路径还是你自己的.

    4.编译脚本.这个脚本自己去理解吧.我也是一知半解--脚本名称:Config.sh

    echo "FFMPEG_SOURCE_DIR=$FFMPEG_SOURCE_DIR"
    EXTRA_OPTIONS=()

    case $OS in
    Android)
        GNU_BUILD_OS=linux

        case $ARCH in
        armeabi-v7a*)
            TARGET_ARCH=arm
            GNU_BUILD_ARCH=armv7-a

            CROSSCOMPILE_PREFIX=arm-linux-androideabi-

            EXTRA_OPTIONS+=(
                --cpu=cortex-a9
                --extra-cflags=-mfpu=vfpv3-d16
                --extra-cflags=-DANDROID
                --extra-cflags=-gdwarf-2
                --disable-fast-unaligned
                --extra-cflags=-mno-unaligned-access
            )
            ;;
        esac


        case $ARCH in
        armeabi-v7a-hard)
            APP_PLATFORM=android-19

            EXTRA_OPTIONS+=(
                --extra-cflags=-mhard-float
                --extra-cflags=-D_NDK_MATH_NO_SOFTFP=1
                --extra-libs=-lm_hard
                --extra-ldflags=-Wl,--no-warn-mismatch
            )
            ;;
        armeabi-v7a)
            APP_PLATFORM=android-8
            ;;
        esac

        SYSROOT="${ANDROID_NDK_ROOT}/platforms/${APP_PLATFORM}/arch-${TARGET_ARCH}"
        ;;
    Windows)
        case $ARCH in
        x86_64)
            CROSSCOMPILE_PREFIX=x86_64-w64-mingw32-
            EXTRA_OPTIONS+=(
                --extra-cflags=-m64
            )
            ;;
        esac

        GNU_BUILD_OS=mingw32
        GNU_BUILD_ARCH=$ARCH
        ;;
    Linux)
        GNU_BUILD_OS=linux
        GNU_BUILD_ARCH=$ARCH
        ;;
    esac

    INSTALL_SUBDIR=${OS}/${ARCH}

    echo FDK_AAC_INSTALL_DIR=$FDK_AAC_INSTALL_DIR
    echo X264_INSTALL_DIR=$X264_INSTALL_DIR


    $FFMPEG_SOURCE_DIR/configure 
        --prefix=/ 
        --sysroot=${SYSROOT} 
        --cross-prefix=${CROSSCOMPILE_PREFIX} 
        --arch=$GNU_BUILD_ARCH 
        --target-os=$GNU_BUILD_OS 
        "${EXTRA_OPTIONS[@]}" 
        --extra-cflags="-I${FDK_AAC_INSTALL_DIR}/include" 
        --extra-cflags="-I${X264_INSTALL_DIR}/include" 
        --extra-ldflags="-L${FDK_AAC_INSTALL_DIR}/lib" 
        --extra-ldflags="-L${X264_INSTALL_DIR}/lib" 
        
        --enable-gpl 
        --enable-version3 
        --enable-nonfree 
        
        --enable-pic 
        
        --disable-swscale-alpha 
        --disable-doc 
        --disable-network 
        --disable-ffprobe 
        --disable-ffserver 
        --disable-avdevice 
        --disable-postproc 
        
        --disable-everything 
        
        --enable-demuxer=mov 
        --enable-demuxer=mpegts 
        --enable-demuxer=mp3 
        --enable-demuxer=pcm_s16le 
        --enable-demuxer=rawvideo 
        
        --enable-muxer=mp4 
        --enable-muxer=mpegts 
        --enable-muxer=pcm_s16le 
        --enable-muxer=rawvideo 
        
        --enable-decoder=amrnb 
        --enable-decoder=amrwb 
        --enable-decoder=h264 
        --enable-decoder=mpeg4 
        --enable-decoder=h263 
        --enable-decoder=h263p 
        --enable-decoder=mp3 
        --enable-decoder=pcm_s16le 
        --enable-decoder=aac 
        --enable-decoder=rawvideo 
        
        --enable-encoder=libfdk_aac 
        --enable-encoder=libx264 
        --enable-encoder=pcm_s16le 
        --enable-encoder=rawvideo 
        
        
        --enable-bsf=aac_adtstoasc 
        --enable-bsf=h264_mp4toannexb 
        
        --enable-filter=scale 
        --enable-filter=aresample 
        --enable-filter=resample 
        --enable-filter=transpose 
        --enable-filter=vflip 
        --enable-filter=hflip 
        --enable-filter=crop 
        --enable-filter=amix 
        --enable-filter=pan 
        
        --enable-protocol=file 
        
        --enable-parser=mpegaudio 
        --enable-parser=mpeg4video 
        --enable-parser=h264 
        --enable-parser=h263 
        --enable-parser=aac 
        --enable-parser=aac_latm 

     三、编译

     FFmpeg

    1.定位到编译目录
    2.执行以下命令
    TMP=$(cygpath -m "$TMP"
    ARCH=armeabi-v7a 
    OS=Android 
    ANDROID_NDK_ROOT=$(cygpath -m "$ANDROID_NDK_ROOT"
    FFMPEG_SOURCE_DIR=/cygdrive/e/soft/source/FFmpeg 
    /cygdrive/e/qupai_code_eclipse/code/ThirdParty/Build/FFmpeg/Config.sh
    3.修改config.h config.mk Makefile 路径问题 
    config之后还需要修改build目录下config.mak中的SRC_PATH和Makefile(不是SRC_DIR下的)中的路径, 将其改为mixed style

    4.执行make命令 --注意,这里使用NDK的make.
    "$ANDROID_NDK_ROOT/prebuilt/windows/bin/make" -j8
    5.执行install  --注意,这里使用NDK的make.
    "$ANDROID_NDK_ROOT/prebuilt/windows-x86_64/bin/make" install DESTDIR="指定的安装目录,mixed style"

  • 相关阅读:
    BNU 沙漠之旅
    手把手教你在Windows端搭建Redmine项目管理软件
    [置顶] mybatis批量新增系列之有主键的表的批量新增
    linux 命令之sar——监视系统状态
    简单的串行通信程序
    Hibernate_12_HQL句子
    初次使用glog
    2014辛星在读CSS第八节 使用背景图片
    poj 2763 Housewife Wind(树链拆分)
    堆,队列,单一列表,双向链表
  • 原文地址:https://www.cnblogs.com/shansheng/p/3900001.html
Copyright © 2020-2023  润新知