zoukankan      html  css  js  c++  java
  • 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"

  • 相关阅读:
    OSPF
    【今日CS 视觉论文速览】 24 Jan 2019
    【今日CS 视觉论文速览】Wed, 23 Jan 2019
    【今日CS 视觉论文速览】 21 Jan 2019
    【Processing学习笔记】安装与入门
    【今日CS 视觉论文速览】Part2, 18 Jan 2019
    【今日CS 视觉论文速览】Fri, 18 Jan 2019
    【今日CS 视觉论文速览】Thu, 17 Jan 2019
    【今日CS 视觉论文速览】Part2, 16 Jan 2019
    【今日CS 视觉论文速览】Wed, 16 Jan 2019
  • 原文地址:https://www.cnblogs.com/shansheng/p/3900001.html
Copyright © 2011-2022 走看看