进入模拟器shell:

D:\Users\zhouhaitao\AppData\Local\Android\sdk\platform-tools\adb shell

ndk编译链接静态库:

LOCAL_STATIC_LIBRARIES := avformat postproc swscale avfilter avcodec avutil swresample

注意库的名字省略了前缀lib和后缀.a,如库libavformat.a。

工具链使用:

arm-linux-androideabi-addr2line  -e libxxx.so 0x#####(address)

FFMPEG编译配置:

config.h定义了编译代码的开关,用于.c文件代码中某些语句是否编译。

config.mak定义了编译文件的开关,用于定义那些c文件是否编译。

默认情况下,config.h和config.mak都是由configure.sh脚本文件产生的。因此,在uplayer中,如果需要添加编译的模块,需要手动修改这两个文件。

关于config.h中的IS_ENABLE_H宏,和config.mak中的IS_ENABLE_MK,两个开关并没有完全很好的定义,如果两个开关都为0,是可以编译出裁剪后的ffmpeg库,但如果同时打开,会有编译问题。因为有些宏在.h中打开了,但在config.mak中却实际上是disable了的,因此会链接找不到。

config.mak的修改:

CONFIG_RTPDEC=yes

CONFIG_VP3DSP=yes

CONFIG_RTP_PROTOCOL=yes

CONFIG_RANGECODER=yes

config.h的修改

#define CONFIG_RTPDEC 1

#define CONFIG_VP3DSP 1

#define CONFIG_RTP_PROTOCOL 1

#define CONFIG_RANGECODERS 1

build_android.sh

  1. #!/bin/bash
  2. NDK=/usr/local/android-ndk-r10d
  3. SYSROOT=$NDK/platforms/android-15/arch-arm/
  4. TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
  5. function build_one
  6. {
  7. ./configure \
  8. --prefix=$PREFIX \
  9. --enable-shared \
  10. --disable-static \
  11. --disable-doc \
  12. --disable-ffmpeg \
  13. --disable-ffplay \
  14. --disable-ffprobe \
  15. --disable-ffserver \
  16. --disable-avdevice \
  17. --disable-doc \
  18. --disable-symver \
  19. --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
  20. --target-os=linux \
  21. --arch=arm \
  22. --enable-cross-compile \
  23. --sysroot=$SYSROOT \
  24. --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
  25. --extra-ldflags="$ADDI_LDFLAGS" \
  26. $ADDITIONAL_CONFIGURE_FLAG
  27. make clean
  28. make
  29. make install
  30. }
  31. CPU=arm
  32. PREFIX=$(pwd)/android/$CPU
  33. ADDI_CFLAGS="-marm"
  34. build_one

用ndk编译可执行程序:

1. 创建好ndk环境后,建立一个jni目录

2. 创建Android.mk和Application.mk文件

  1. LOCAL_PATH := $(call my-dir)
  2. LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
  3. include $(CLEAR_VARS)
  4. LOCAL_MODULE := avformat
  5. LOCAL_SRC_FILES := libavformat.a
  6. include $(PREBUILT_STATIC_LIBRARY)
  7. include $(CLEAR_VARS)
  8. LOCAL_MODULE := avcodec
  9. LOCAL_SRC_FILES := libavcodec.a
  10. include $(PREBUILT_STATIC_LIBRARY)
  11. include $(CLEAR_VARS)
  12. LOCAL_MODULE := avutil
  13. LOCAL_SRC_FILES := libavutil.a
  14. include $(PREBUILT_STATIC_LIBRARY)
  15. include $(CLEAR_VARS)
  16. LOCAL_MODULE    := decoding
  17. LOCAL_SRC_FILES := decoding_encoding.c
  18. LOCAL_C_INCLUDES += \
  19. $(LOCAL_PATH)/. \
  20. $(LOCAL_PATH)/../ \
  21. $(LOCAL_PATH)/../libavutil \
  22. $(LOCAL_PATH)/../libavformat \
  23. $(LOCAL_PATH)/../libavcodec
  24. LOCAL_LDLIBS    += -llog -lz -lm -lcrypto -lssl
  25. LOCAL_STATIC_LIBRARIES := www.douniu178.com   avformat avcodec avutil m
  26. include $(BUILD_EXECUTABLE)
  27. #$(call import-module,$(LOCAL_PATH))
  1. APP_ABI := armeabi-v7a
  2. APP_PLATFORM := android-23
  3. TARGET_ARCH := arm
  4. TARGET_ARCH_ABI := www.duobaoyule2.cn armeabi-v7a

静态链接ffmpeg库:

静态链接顺序非常重要,否则会报很多undefined reference错误。

lavformat、lavdevice、lavcodec、lavutil、lpthread、lswscale库

2)编译ScreenShot.c文件,该截图程序需要调用ffmpeg的api。编译命令如下:

 
  1. gcc -I/home/wavelet/workspace/install/ffmpeg-2013/include -L/home/wavelet/workspace/install/ffmpeg-2013/lib -o screenshot_static ScreenShot.c -lavformat -lavdevice -lavcodec -lavutil -lpthread -lswscale -www.ysgj1688.com/ lz -lm
  2. 来源: http://nkwavelet.blog.163.com/blog/static/ www.baohuayule.net  2277560382013111335627/

3. 执行ndk-build

编译遇到的问题:

1. ffmpeg静态库的链接顺序要正确。

2. 在Android.mk中注意添加动态链接系统库:

  1. LOCAL_LDLIBS += -llog -lz -lm

3. 编译ffempg库的目标平台版本,和编译链接ffmpeg的程序的目标平台版本一定要是一致,或者后者要高,如都是"APP_PLATFORM := android-23"\

4. 打开ndk-build脚本的log:    ndk-build NDK_LOG=1

ndk开发-ffmpeg编译的更多相关文章

  1. Ndk开发笔记

    <pre name="code" class="cpp">ndk开发: 1.编译android本地程序的二种方法.q 2.安装ndk编译工具. 3. ...

  2. 使用Android Studio进行ndk开发的准备

    1. gradle-ex2. ndk开发包3. 项目目录结构4. lldb调试器 1. 一般来说gradle不是必需的,gradle也是可以进行ndk编译的,然而你需要在编译时使用更多(多于一个)c+ ...

  3. Windows下搭建Android NDK开发环境及命令行编译

    首先说明本文内的相关安装操作参考<Pro Android C++ with the NDK>一书. 安装 Windows搭建Android NDK开发环境需要安装如下部分(同时需要配置对应 ...

  4. windows下用ADT进行android NDK开发的具体教程(从环境搭建、配置到编译全过程)

    郑重申明:如需转载本博客,请注明出处,谢谢! 这几天在学习android NDK的开发.那么首先让我们来看看android NDK开发的本质是什么. NDK(Native Development Ki ...

  5. Android NDK 开发(一)--环境搭建【转】

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/41800955 Android下的NDK开发是Android开发中不可或缺的一部分, ...

  6. android studio下的NDK开发详解(一)

    源地址:http://www.voidcn.com/blog/chengkaizone/article/p-5761016.html 好记性不如烂笔头,开始坚持写博客,学一点记一点,只为了生活更好. ...

  7. 搞NDK开发

    1.哪些场景下要用到NDK开发? 跨平台的库,如FFmpeg, skip,weex, 加固,防逆向 签名校验 图片压缩 音视频解码 OpenGL ES 高级特效 热修复 andfix 人脸识别 fac ...

  8. Android流媒体开发之路三:基于NDK开发Android平台RTSP播放器

    基于NDK开发Android平台RTSP播放器 最近做了不少android端的开发,有推流.播放.直播.对讲等各种应用,做了RTMP.RTSP.HTTP-FLV.自定义等各种协议,还是有不少收获和心得 ...

  9. NDK开发_笔记0

    自谷歌搜索退出中国以来,谷歌对全球第二大市场中国的态度一直保持冷淡.可是北京时间12月8日,谷歌2016开发者大会在北京召开,同时专门针对中国的谷歌开发者网站已经上线:https://develope ...

随机推荐

  1. 搭建私有maven库发布及使用流程

    一:背景 Apache Maven是当Java技术栈前最流行的项目管理工具,它提供了一系列方便快捷的命令帮助程序员们进行Java工程的开发工作.Maven服务器位于美国,由于出国带宽和众多因素,在国内 ...

  2. http网络协议 学习摘要

    一:HTTP协议状态码 状态码主要用于描述当客户端向服务器发送请求时的返回结果,标记服务端的处理是否正常,通知出现的错误等工作. 状态码整体分为五大类: 1开头的状态码:信息类状态码,主要接收请求,表 ...

  3. 我的Hibernate学习

    以下博客均为引用, 侵删 Hibernate初级     HQL和SQL的区别 https://blog.csdn.net/aaa1117a8w5s6d/article/details/7757097 ...

  4. Codeforces Round #459 (Div. 2) D. MADMAX DFS+博弈

    D. MADMAX time limit per test 1 second memory limit per test 256 megabytes input standard input outp ...

  5. MySQL触发器和更新操作

    一.触发器概念 触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动 ...

  6. [Luogu3806]点分治

    询问树上是否存在距离为k[i]的点对 直接点分治把所有距离预处理出来,然后O(1)回答即可 Code #include <cstdio> #include <algorithm> ...

  7. mysql学习第三天练习(流程控制函数)

    -- 流程控制函数 -- 1.查询员工部门号,并赋予部门名 select empno,ename,deptno,case deptno then '10部门' then '20部门' else '30 ...

  8. python模块struct和subprocess

    准确地讲,Python没有专门处理字节的数据类型.但由于str既是字符串,又可以表示字节,所以,字节数组=str.而在C语言中,我们可以很方便地用struct.union来处理字节,以及字节和int, ...

  9. 1 Mongodb安装

    1.NoSQL简介 NoSQL,全名Not Only SQL,指的是非关系型的数据库 随着访问量的上升,网站的数据库性能出现了问题,于是NoSQL被设计出来了 优点.缺点 优点 高扩展性 分布式计算 ...

  10. idea无法新建maven项目

    之前用的都是eclipse,自从4月底入职新公司后,接触到了idea. 然后自己的电脑上也安装了idea,不过一直都没用,直到昨天打算开起来使用一下. 之后就是想新建一个maven项目,发现死活也新建 ...