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-
--disable-fast-unaligned
--extra-cflags=-mno-unaligned-access
)
;;
esac case $ARCH in
armeabi-v7a-hard)
APP_PLATFORM=android- EXTRA_OPTIONS+=(
--extra-cflags=-mhard-float
--extra-cflags=-D_NDK_MATH_NO_SOFTFP=
--extra-libs=-lm_hard
--extra-ldflags=-Wl,--no-warn-mismatch
)
;;
armeabi-v7a)
APP_PLATFORM=android-
;;
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
.定位到编译目录
.执行以下命令
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
.修改config.h config.mk Makefile 路径问题
config之后还需要修改build目录下config.mak中的SRC_PATH和Makefile(不是SRC_DIR下的)中的路径, 将其改为mixed style
.执行make命令 --注意,这里使用NDK的make.
"$ANDROID_NDK_ROOT/prebuilt/windows/bin/make" -j8
.执行install --注意,这里使用NDK的make.
"$ANDROID_NDK_ROOT/prebuilt/windows-x86_64/bin/make" install DESTDIR="指定的安装目录,mixed style"
Windows环境下使用cygwin ndk_r9c编译FFmpeg的更多相关文章
- Windows环境下使用cygwin ndk_r9c编译x264
一.废话 最近学习,第一步就是编译.我们需要编译FFmpag,x264,fdk_aac,下面是x264,网上说的很多都是几百年前的,我亲测完美可用 还是那句话 我能力有限,但是我希望我写的东西能够让 ...
- Windows环境下的RTKPlot_Qt版本编译时遇到的问题和解决方法
在使用了 RTKLIB开源包自带的 rtkplot.exe后,知道了它所具有的功能,就想着如何模仿它做出一个 demo.一开始看的是之前下载的 2.4.2版本的 RTKLIB,里面是使用 Delphi ...
- Windows环境下使用Cmake ndk编译fdk-aac
一.废话 最近学习,第一步就是编译.我们需要编译FFmpag,x264,fdk_aac,下面是x264,网上说的很多都是几百年前的,我亲测完美可用 还是那句话 我能力有限,但是我希望我写的东西能够让 ...
- Windows环境下使用VS2005编译OpenSSL
如何Windows环境下,使用VS2005编译OpenSSL,虽然这个问题在Baidu.Google上一堆,但安装中还是遇到些问题,在这里 记录下来希望能帮助大家不要在走弯路.注:我是在WinXP S ...
- freeSSHD在windows环境下搭建SFTP服务器
freeSSHD在windows环境下搭建SFTP服务器 0 建议现在windows环境下安装cygwin,否则在windows环境下cmd模式使用不了sftp去连接,可以利用win scp去测试连接 ...
- windows环境下搭建ffmpeg开发环境
ffmpeg是一个开源.跨平台的程序库,能够使用在windows.linux等平台下,本文将简单解说windows环境下ffmpeg开发环境搭建过程,本人使用的操作系统为windows ...
- 编译实战 | 手摸手教你在Windows环境下运行Redis6.x
原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 哈喽大家好啊,我是没事就愿意瞎捣鼓的Hydra. 不知道有没有小伙伴像我一样,平常开发中用的是windows操作系统,有时候想装点什么软件,一看 ...
- Openstack 二次开发之:在windows 环境下编译Openstack-java-sdk
在windows环境下使用maven对openstack-java-sdk进行编译 编译源文件 下载源代码 git clonehttps://github.com/woorea/openstack-j ...
- windows环境下protobuf的java操作{编译,序列化,反序列化}
google protocol buffer的使用和原理 概况: Protocol Buffers(也就是protobuf)是谷歌的语言中立的.平台中立的.可扩展的用于序列化结构化的数据: windo ...
随机推荐
- cocos2d-x 遇到的错误与解决方法。make: *** No rule to make target `/cygdrive/d/android/cocos2d-x-master/T12/proj.android/../../cocos2dx/xxxxx.cpp'
cocos2d-x 遇到的错误与解决方法.make: *** No rule to make target `/cygdrive/d/android/cocos2d-x-master/T12/proj ...
- 基于CodeBlocks上的wxWidgets开发环境配置
本文摘自http://www.cnzui.com/?p=962 在原文的基础上根据自己的实践做了一些修改 我的IDE为C::B 12.11,wxWidgets版本为wxWidgets-2.8.12 在 ...
- HTC仅限拨打紧急电话
问题描述: 我手上有台 HTC One V 没碰没撞,突然打不出电话,信号上显示一个叉,屏幕上显示“仅限拨打紧急电话” 解决办法:经百度,原来很多HTC机子都有这种情况,幸好不是硬件坏了,只需按以下步 ...
- oracle删除当前用户下所有表
1.如果有删除用户的权限,则可以: drop user user_name cascade; 加了cascade就可以把用户连带的数据全部删掉. 删除后再创建该用户.--创建管理员用户create u ...
- Shell编程笔记
Shell编程笔记与Windows下熟悉的批处理类似,也可以将一些重复性的命令操作写成一个脚本方便处理. 修改别人的脚本,运行后遇到个问题 setenv: command not found 查证 ...
- Result
1.常用四种类型: a) dispatcher(默认) 服务器跳转(普通转发),就是forward到一个JSP或者HTML或者其他结果页面,不能是Action 视图请求地址是 ...
- Oracle 的 VKTM 进程 - virtual keeper of time
在Oracle Database 11g中,VKTM是一个新增的后台进程.这个进程的含义是: VKTM (virtual keeper of time) is responsible for prov ...
- crontab command not found
在服务器上运行 crontab -e编辑定时任务 结果提示 command not found命令找不到,这就说明没安装crontab 由于 完整操作如下: [root@iZ11pvsxisqZ /] ...
- 如何屏蔽Button setClickable与setEnabled
今天想让按键暂时无效,满足一定条件下才可以被用户按到.最初以为是setClickable,谁知搞错了.请看手册: 复制代码代码如下: public void setClickable (boolean ...
- PAT---1013. Battle Over Cities (25)
这道题目的意思是:在战争时代,如果一个城市被敌人占领了,那么和该城市相连的道路都必须关闭,我们必须把剩下的城市(即不包括被敌人占领的城市)连接起来. 举个例子,我们有3个城市,C1,C2,C3,C1和 ...