Mac下ndk编译ffmpeg2.1.4

Mac版FFmpeg-4.2.1编译教程 简要说明 随着各个方面的硬件和软件的快速发展,尤其是5g的来临,网速更加的快,移动端的音视频和手游会更加的得倒快速的发展。所以不管是为了工作还是技能储备,很有必要学习下音视频的编解码、openGL等级技术。 下面以很有名的开源库FFmpeg的编译为开端: 环境的搭建 1下载FFmpge这里有两种方式 直接去官网下载(官网) 去github上下载源码(github),用版本管理下载有个好处就是你自... 阅读详情

编译过程中,遇到各种错误,google、百度查资料查了好久,感谢各位把自己的经验分享出来。


系统环境:OS X 10.9 , NDK R8E  FFMPEG VERSION 2.1.4

1.下载ffmpeg源码,将其放在project/jni 目录下,在其根目录新建配置脚本 ,我的配置如下:

#!/bin/bash
NDK=/Users/YangL/Documents/Android/android-ndk-r8e
SYSROOT=$NDK/platforms/android-9/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.7/prebuilt/darwin-x86_64
function build_one
{
    ./configure \
    --target-os=darwin \
    --arch=arm \
    --enable-cross-compile \
    --cross-prefix=$CROSS_PREFIX \
    --enable-version3 \
    --enable-optimizations \
    --enable-shared \
    --disable-static \
    --disable-symver \
    --disable-programs \
    --disable-doc \
    --disable-avdevice \
    --disable-postproc \
    --disable-encoders \
    --disable-muxers \
    --enable-muxer=mp4 \
    --disable-devices \
    --disable-demuxer=sbg \
    --disable-demuxer=dts \
    --disable-parser=dca \
    --disable-decoder=dca \
    --disable-decoder=svq3 \
    --disable-debug \
    --enable-network \
    --arch=arm \
--enable-version3 \
--enable-gpl \
--enable-nonfree \
--disable-stripping \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffserver \
--disable-ffprobe \
--disable-encoders \
--disable-muxers \
--disable-devices \
--disable-protocols \
--enable-protocol=file \
--enable-avfilter \
--disable-network \
--disable-avdevice \
--enable-cross-compile \
--extra-cflags="-fPIC -DANDROID" \
--disable-asm \
--enable-neon \
--enable-armv5te \
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"  
build_one

注意相应路径。

2.脚本执行成功后,将根目录下 config.h中的 #define avrestrict avrestrict 改为 #define avrestrict, 之所以这样做是因为Android的gcc不认识avrestrict。

3.将/libavutil/libm.h 中的static函数 全部注释或者删掉。

4.在ffmpeg根目录下建立av.mk,内容如下:

  1. # LOCAL_PATH is one of libavutil, libavcodec, libavformat, or libswscale
  2. include $(LOCAL_PATH)/../config.mak
  3. OBJS :=
  4. OBJS-yes :=
  5. MMX-OBJS-yes :=
  6. include $(LOCAL_PATH)/Makefile
  7. # collect objects
  8. OBJS-$(HAVE_MMX) += $(MMX-OBJS-yes)
  9. OBJS += $(OBJS-yes)
  10. FFNAME := lib$(NAME)
  11. FFLIBS := $(foreach,NAME,$(FFLIBS),lib$(NAME))
  12. FFCFLAGS  = -DHAVE_AV_CONFIG_H -Wno-sign-compare -Wno-switch -Wno-pointer-sign
  13. FFCFLAGS += -DTARGET_CONFIG=\"config-$(TARGET_ARCH).h\"
  14. ALL_S_FILES := $(wildcard $(LOCAL_PATH)/$(TARGET_ARCH)/*.S)
  15. ALL_S_FILES := $(addprefix $(TARGET_ARCH)/, $(notdir $(ALL_S_FILES)))
  16. ifneq ($(ALL_S_FILES),)
  17. ALL_S_OBJS := $(patsubst %.S,%.o,$(ALL_S_FILES))
  18. C_OBJS := $(filter-out $(ALL_S_OBJS),$(OBJS))
  19. S_OBJS := $(filter $(ALL_S_OBJS),$(OBJS))
  20. else
  21. C_OBJS := $(OBJS)
  22. S_OBJS :=
  23. endif
  24. C_FILES := $(patsubst %.o,%.c,$(C_OBJS))
  25. S_FILES := $(patsubst %.o,%.S,$(S_OBJS))
  26. FFFILES := $(sort $(S_FILES)) $(sort $(C_FILES))

5.在jni目录下建立Android.mk:

include $(all-subdir-makefiles)


6.ffmpeg目录下建立Android.mk:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_WHOLE_STATIC_LIBRARIES := libcpu libavformat libavcodec libavutil libswscale libswresample #libpostproc
LOCAL_ARM_MODE := arm
LOCAL_MODULE := ffmpeg
LOCAL_LDLIBS := -lz -lm -llog
include $(BUILD_SHARED_LIBRARY)
include $(call all-makefiles-under,$(LOCAL_PATH))

注意引入静态库的顺序,目标平台要指定,不然默认thumb,会导致mrs、msr等arm指令不被支持。 为此折磨了半个小时,知道的人随手一写,不知道的人,苦苦思索。


7. /ffmpeg/libavformat下建立Android.mk

  1. LOCAL_PATH := $(call my-dir)
  2. include $(CLEAR_VARS)
  3. include $(LOCAL_PATH)/../av.mk
  4. LOCAL_SRC_FILES := $(FFFILES)
  5. LOCAL_C_INCLUDES :=            \
  6.         $(LOCAL_PATH)          \
  7.         $(LOCAL_PATH)/..
  8. LOCAL_CFLAGS += $(FFCFLAGS)
  9. LOCAL_CFLAGS += -include "string.h" -Dipv6mr_interface=ipv6mr_ifindex
  10. LOCAL_LDLIBS := -lz
  11. LOCAL_STATIC_LIBRARIES := $(FFLIBS)
  12. LOCAL_MODULE := $(FFNAME)
  13. include $(BUILD_STATIC_LIBRARY)

8.在/ffmpeg/libavcodec 底下新增一個Android.mk:

  1. LOCAL_PATH := $(call my-dir)
  2. include $(CLEAR_VARS)
  3. include $(LOCAL_PATH)/../av.mk
  4. LOCAL_SRC_FILES := $(FFFILES)
  5. LOCAL_C_INCLUDES :=            \
  6.         $(LOCAL_PATH)          \
  7.         $(LOCAL_PATH)/..
  8. LOCAL_CFLAGS += $(FFCFLAGS)
  9. LOCAL_LDLIBS := -lz
  10. LOCAL_STATIC_LIBRARIES := $(FFLIBS)
  11. LOCAL_MODULE := $(FFNAME)

  12. include $(BUILD_STATIC_LIBRARY)

9.在libavfilter、 libavutil、libpostproc和libswscale底下都分別新增一個Android.mk:

  1. LOCAL_PATH := $(call my-dir)
  2. include $(CLEAR_VARS)
  3. include $(LOCAL_PATH)/../av.mk
  4. LOCAL_SRC_FILES := $(FFFILES)
  5. LOCAL_C_INCLUDES :=            \
  6.         $(LOCAL_PATH)          \
  7.         $(LOCAL_PATH)/..
  8. LOCAL_CFLAGS += $(FFCFLAGS)
  9. LOCAL_STATIC_LIBRARIES := $(FFLIBS)
  10. LOCAL_MODULE := $(FFNAME)
  11. include $(BUILD_STATIC_LIBRARY)


10.准备工作已经完成,工程目录下执行 ndk-build,编译出libavcodec.a、libavformat.a、libavutil.a、libpostproc.a、 libswscale.a和libffmpeg.so。

第一次编译耗时较长,以后增量编译就会很快。


编译中遇到的问题如下:


1.libavutil/time.h 和 系统的time.h冲突,这是个历史问题,在ffmpeg 1.1.1上即是如此。

log如下:

/jni/libavutil/parseutils.h:189: warning: 'struct tm' declared inside parameter list
/jni/libavutil/parseutils.h:189: warning: its scope is only this definition or declaration, which is probably not what you want
/jni/libavutil/parseutils.h:202: warning: 'struct tm' declared inside parameter list
/jni/libavutil/opt.c: In function 'av_find_opt':
/jni/libavutil/opt.c:49: warning: 'av_next_option' is deprecated (declared at g/jni/libavutil/opt.h:376)
/jni/libavutil/opt.c: In function 'av_opt_get':
/jni/libavutil/opt.c:665: warning: this decimal constant is unsigned only in ISO C90
/jni/libavutil/opt.c: In function 'av_opt_set_defaults':
/jni/libavutil/opt.c:1067: warning: 'av_opt_set_defaults2' is deprecated (fmpeg_streaming/jni/libavutil/opt.h:399)
utils.c
liang/ffmpeg_streaming/jni/libavutil/parseutils.c:32:
/jni/libavutil/parseutils.h:189: warning: 'struct tm' declared inside parameter list
/jni/libavutil/parseutils.h:189: warning: its scope is only this definition or declaration, which is probably not what you want
/jni/libavutil/parseutils.h:202: warning: 'struct tm' declared inside parameter list
/jni/libavutil/parseutils.c:463: warning: 'struct tm' declared inside parameter list
/jni/libavutil/parseutils.c:463: error: conflicting types for 'av_small_strptime'
/jni/libavutil/parseutils.h:189: note: previous declaration of 'av_small_strptime' was here
/jni/libavutil/parseutils.c: In function 'av_small_strptime':
/jni/libavutil/parseutils.c:485: error: dereferencing pointer to incomplete type
/jni/libavutil/parseutils.c:491: error: dereferencing pointer to incomplete type
/jni/libavutil/parseutils.c:497: error: dereferencing pointer to incomplete type
/jni/libavutil/parseutils.c:503: error: dereferencing pointer to incomplete type
/jni/libavutil/parseutils.c:509: error: dereferencing pointer to incomplete type
/jni/libavutil/parseutils.c:515: error: dereferencing pointer to incomplete type
/jni/libavutil/parseutils.c: At top level:
/jni/libavutil/parseutils.c:531: warning: 'struct tm' declared inside parameter list
/jni/libavutil/parseutils.c:531: error: conflicting types for 'av_timegm'
/jni/libavutil/parseutils.h:202: note: previous declaration of 'av_timegm' was here
/jni/libavutil/parseutils.c: In function 'av_timegm':
/jni/libavutil/parseutils.c:535: error: dereferencing pointer to incomplete type
/jni/libavutil/parseutils.c:535: error: dereferencing pointer to incomplete type
/jni/libavutil/parseutils.c:535: error: dereferencing pointer to incomplete type
/jni/libavutil/parseutils.c:545: error: dereferencing pointer to incomplete type
/jni/libavutil/parseutils.c:545: error: dereferencing pointer to incomplete type
/jni/libavutil/parseutils.c:545: error: dereferencing pointer to incomplete type
/jni/libavutil/parseutils.c: In function 'av_parse_time':
/jni/libavutil/parseutils.c:555: error: variable 'dt' has initializer but incomplete type
/jni/libavutil/parseutils.c:555: warning: excess elements in struct initializer
/jni/libavutil/parseutils.c:555: warning: (near initialization for 'dt')
/jni/libavutil/parseutils.c:555: error: storage size of 'dt' isn't known
/jni/libavutil/parseutils.c:648: error: variable 'dt2' has initializer but incomplete type
/jni/libavutil/parseutils.c:648: error: invalid type argument of 'unary *' (have 'int')
/jni/libavutil/parseutils.c:648: error: invalid type argument of 'unary *' (have 'int')
/jni/libavutil/parseutils.c:648: error: storage size of 'dt2' isn't known
g_streaming/obj/local/armeabi/objs/avutil/parseutils.o] Error 1

以上问题均是由于ffmpeg 里面 libavutil.c  底下 自带了time.h 当系统编译的时候 没有引用到 struct tm 的定义导致 ;

做了如下修改, 

1.将 libavutil/ time.h  libavutil/time.c  修改成   libavutil/ avtime.h  libavutil/avtime.c

2.将下面列出来的文件 libavutil/time.h  修改成 libavutil/avtime.h 

接着 ndk-build 即可 解决以上问题 ;

/------------------------------------------------------------------
modify :  modify time.h -> avtime.h
 cp libavutil/time.c libavutil/avtime.c
 cp libavutil/time.h libavutil/avtime.h
 vi tools/aviocat.c
 vi tools/pktdumper.c
 vi ./libavdevice/openal-dec.c
 vi ./libavdevice/bktr.c
 vi ././libavdevice/oss_audio.c
 vi ./libavdevice/v4l2-common.h
 vi ./libavdevice/alsa-audio-dec.c
 vi ./libavdevice/x11grab.c
 vi ./libavdevice/fbdev_dec.c
 vi ./libavdevice/sndio_dec.c
 vi ./libavdevice/alsa-audio-enc.c
 vi ./libavdevice/pulse_audio_enc.c
 vi ./libavdevice/jack_audio.c
 vi ./ffserver.c
 vi ./ffplay.c
 vi ././libavformat/mux.c^C
 vi ./libavformat/mux.c
 vi ./libavformat/network.c
 vi ./libavformat/hls.c
 vi ./libavformat/rtpdec.c
 vi ./libavformat/tcp.c
 vi ./libavformat/hlsproto.c
 vi ./libavformat/rtsp.c
 vi ./libavformat/rtspenc.c
 vi ././libavformat/rtmphttp.c
 vi ./libavformat/sapenc.c
 vi ./libavformat/rtspdec.c
 vi ./libavformat/udp.c
 vi ./libavformat/utils.c
 vi ./libavformat/avio.c
 vi ./libavcodec/fft-test.c
 vi ./libavcodec/motion-test.c
 vi ./libavcodec/dct-test.c
 vi ./ffmpeg.c
 vi ./libavutil/parseutils.h
 vi ./libavutil/parseutils.h
 vi ./tags
 vi ./libavfilter/setpts.c


编译错误2:make: *** No rule to make target

makefile里面的文件依赖关系有问题,导致头文件找不到。我编译时出现这个问题是因为我将编译错误1的libavutil/time.h改为/libavutil/avtime.h后没有修改相应的makefile所致。


编译错误3:android-ndk-r8d/build/core/build-binary.mk:41: *** target file 

`clean' has both : and :: entries.  Stop.


原因是libavfilter目录中的Makefile的末尾处多了 Clean 这个玩意儿 将其注释掉或者删掉就可以了


还有些编译问题,我已经在相应的Android.mk里边说明。

大家可以参考 http://blog.youkuaiyun.com/moruite/article/details/6305944







ndk编译ffmpeg 最近在努力学习音视频相关东西,以备未来不时之需 在音视频处理领域有一个绕不过去的著名项目就是FFmpeg,这个项目基于 GPL 开源协议,官网 最新版本目前我在 mac 上无法编译,会报错 使用的总体环境如下: Macos: 10.13.6 (17G65) ffmpeg: 3.3.6 ndk: 15.2.4203891 引用外部源码(尝试失败) 初次尝试的时候,希望可以通过 CMakeLists... 阅读详情

相关推荐

Android Mac编译FFmpeg,并使用

Android Mac编译FFmpeg,并使用FFmpeg 全称(First Forward MPEG),是一款领先的开源多媒体框架,采用 LGPL 或 GPL 许可证,除了具有音视频编解码功能外,还有视频格式转换、视频抓图、视频水印、推流等功能。FFmpeg 在 Linux 平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括 Windows 、Mac OS X 等。FFmpeg官网FFmpeg它主要含有以下几个核心库:1、libavcodec-提供了更加全面的编解码实现的合集。

qq_52703909的博客 1390

ffmpeg学习笔记-Linux下编译Android动态库

Android平台要使用ffmpeg就需要编译生成动态库,这里采用Ubuntu编译Android动态库 文件准备 要编译生成Android需要以下文件 NDK ffmpeg源代码 NDK下载 NDK可以去Google下载,也可以在国内一些Android网站下载 这里推荐两个Android的下载网站 Android Studio 中文组 Andro...

weixin_30394669的博客 489

Mac环境下Android Studio移植FFmpeg

准备: 1. Android Studio 2. FFmpeg-2.8.4   3. android-ndk-r10e 一、ndk编译ffmpeg 1.下载ffmpeg和ndk ffmpeg下载地址:http://ffmpeg.org/download.html  我下载的是2.8.4版本 ndk 官网下载,这个我就不说了,自备梯子翻越长城。。我下载的是 android-nd

huxing0215的专栏 3319

【音视频】FFmpeg 安装+Api使用+Android+笔记(一)

FFmpeg 安装+文件处理Api使用 1:Windows下编译安装 FFmpeg https://www.imooc.com/article/247113 (音频专家李超老师的手记,老师慕课网视频:《FFmpeg音视频核心技术精讲与实战》) 2:FFmpeg在Linux(ubuntu)下编译使用 ...

gjy_it的博客 3万+

linux加载动态库.so的3种方法

我了解的加载动态库,一共是三种方法。分别是将库放到/usr/lib64下;修改/etc/ld.so.conf以及在/etc/ld.so.conf.d下添加conf文件,将路径包装到该文件中。root下使用ldconfig命令加载生效,使用ldconfig -v|grep xxx进行查看是否生效。

笔者从事电信媒体开发多年,愿意将多年的开发经验分享给同行 1万+

NDK-r9编译好的最新的FFmpeg2.2的所有so库和头文件

在ubuntu 64位下使用android-ndk-r9d 编译最新版本ffmpeg2.2 所生成的8个so库:libavcodec.so libavdevice.so libavfilter.so libavformat.so libavutil.so libswresample.so libswscale.so libpostproc.so 以及对应的头文件。自己已经亲自测试过可用。

ubuntu ffmpeg的学习历程 -- chapter 2

不开硬件加速和硬件编码,测试可以看出CPU占用很高。开启硬件加速和编码后,CPU占用几乎可以忽略了。

huaxia10013的专栏 909

ffmpeg 2.1.4 源码及编译库

ffmpeg 2.1.4 源码及编译库,32位。 2014.03.04 最新。

如何将ffmpeg x264的动态库编译入Android7.1系统源码(详细步骤)

0 前言 对于刚接触Android中的ffmpeg,ffmpeg的编译有很多坑,这些坑我都踩过一遍,而且网上文章鱼龙混杂写的太乱,不想太多人浪费时间在编译上,所以把成功的代码及编译步骤分享出来。 整文主要涵盖ffmpeg/x264的编译配置、以及如何将编译出的动态库(libavcodec.so libavdevice.so libavfilter.so libavformat.so li...

Android系统工程师--小馬佩德罗 1万+

【backtrader保姆级教学】投资组合回测

method1:探索投资组合的最有方案,使用蒙特卡洛模拟Markowitz模型。# 提取最小波动组合对应的权重, 并转换成Numpy数组。# 绘制收益-标准差的散点图,并用颜色描绘夏普比率。# 在收益-风险散点图中突出风险最小的点。:param any_day: 任意日期。# 将该点坐标显示在图中并保留四位小数。password = “替换密码”# 找到标准差最小数据的索引值。user = “替换账号”# 计算GMV投资组合收益。# 计算每项资产的夏普比率。# 设置无风险回报率为0。

weixin_38132951的博客 2315

疲劳容器的定义_FKM规范针对非焊接构件疲劳强度评估实例介绍(下篇)

一、写在前面FKM Inside ANSYS软件,该软件是在FKM 规范的基础上,在ANSYS Workbench内开发的进行非焊接构件及焊缝静强度和疲劳强度评估的工具包。基于ANSYS计算模型的信息,在图形用户界面定义相关设置,利用有限元分析计算结果,自动嵌入FKM规范要求的静强度计算和疲劳强度计算流程和方法,自动将应力结果和相关物理量传递给工具包,无须手动预先选择评估的热点区域,可以...

weixin_35925298的博客 1885

Mac下编译FFMPEG for Android

之前讲到了通过自定义的NDK交叉编译链来为编译FFMPEG做准备,自定义NDK编译工具链. 编译环境 操作系统:mac os NDK版本:android-ndk-r20 编译器:clang FFMPEG版本:4.2.1 编译脚本 整理了一个编译环境的脚本build.sh在FFMPEG目录下 #!/bin/sh # Android NDK sources and standalone tool...

Plx0303sunny的博客 1085

别再为数据发愁了!盘点5个公开可用的医学图像数据集(含MRI/CT/PET合成任务)

本文详细介绍了5个高质量的公开医学图像数据集,涵盖MRI、CT和PET三大模态,适用于深度学习模型训练和医学图像合成任务。每个数据集均提供下载指南、预处理技巧和PyTorch加载示例,帮助研究人员快速获取和处理数据,解决医学AI开发中的数据瓶颈问题。

weixin_30689307的博客 524

ffmpeg mac 批量脚本_Mac环境用Shell脚本编译最新版ffmpeg-4.2.1

Mac环境用Shell脚本编译最新版ffmpeg-4.2.1FFmpeg简介FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序FFmpeg是一个多媒体视频处理工具,有非常强大的功能,包括视频采集功能、视频格式转换、视频抓图、给视频加水印等FFmpeg是一套开源免费跨平台的多媒体框架。它提供了录制、转换以及流化音视频的完整解决方案,目前bilibili、抖音、爱奇艺...

weixin_39725844的博客 230

前端监控体系:从Sentry到LogRocket错误追踪

Sentry是一款开源的实时错误追踪系统,支持多种语言和框架,包括JavaScript、React、Vue等。它提供了丰富的错误信息、堆栈跟踪和环境数据,帮助开发者快速定位和解决问题。LogRocket是一款前端监控和用户行为分析工具,它提供了视频回放、性能监控、错误追踪等功能。与Sentry不同,LogRocket更注重用户行为的全面分析。前端监控体系是确保应用稳定性和用户体验的重要保障。通过集成Sentry和LogRocket等监控工具,开发者可以实时追踪应用中的错误和用户行为,快速定位和解决问题。

shejizuopin的博客 1314

【规则引擎连载3】 WebSphere ILOG JRules 开发——新建一个规则项目

规则项目依赖于bom,bom来自于一个Java项目,所以在建规则项目之前,需要先建立一个Java项目,也就是建模。 说明:原则上是一个规则项目,一个bom。如果规则项目很多,并且每个规则项目的bom都是一样的,那么可以将bom提取出来,单独作为一个项目,这样减少不必要的重复操作,减少维护成本,降低出错几率。这里逐步讲解两种方法来创建规则项目,推荐第二种。 本文主要建立两种规则项目与bom之间的关系,编写相关的规则内容,如操作规则、规则流、决策表等,在后续文章中详细讲解 。

manman的分享 2331

Mac编译FFmpeg

原文地址:https://www.jianshu.com/p/feab970fd74c 配置编译环境 编译环境 Mac step1:下载FFmpeg库和NDK库 (1)我在usr目录下建立了一个ndk文件夹 (2)然后进入ndk文件夹,FFmpeg官网找到下载地址,再在命令行输入 “wget https://www.ffmpeg.org/releases/ffmpeg-4.0.2.tar.g...

厚德出品,必是精品 2980

SOEM主站开发篇(1):移植SOEM主站到Linux开发板

详细介绍了SOEM主站源码移植到Linux开发板上的步骤,同时演示了如何使用Linux开发板获取EtherCAT从站的PDO映射信息。

kevin1499的博客 2398

ffmpeg-4.1.4在mac下的编译以及在as中调用测试

正文 1 mac下编译so 我用了大半天的时候,各种测试,各种不行。最终上天有眼让我找到了正确的脚本,亲测可用。https://www.jianshu.com/p/0a7f3175c1b9 1)环境: 操作系统:macos 10.14.1 我的是下的最新的ffmpeg ffmpeg-4.1.4 下载了ndk : android-ndk-r14b 2)ffmpeg 需要用configure先刷一遍...

kkae8643150的专栏 494

5G射频设计中N77&N79的PRX为什么需要3个SRS

首先,我们来逐个拆解一下这个神秘的“

weixin_43199439的博客 1323

【AI智能体】基于Coze 制作高质量PPT实战操作详解

基于Coze 制作高质量PPT实战操作详解

congge 6100

mac上NDK20编译ffmpeg

从某个博客上看到了NDK20编通了ffmpeg-4.2,然后发现编不通faac和libx264,坑啊,先记录下来这个脚本吧。。。坑,后面研究出来了补上 #!/bin/bash cd ffmpeg-4.2 NDK=/Users/kyolong/Desktop/android/android-ndk-r20 # NDK目录,自行修改 API=27 # arm aarch64 i686 x86_64 ...

无聊星期三的博客 1283

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

FFmpeg4.1编译:mac+android-ndk-14b+ffmpeg4.1成功编译

一,下载FFmpeg4.1 使用源码: git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg 下载到你向的目录下,我是新建了一个文件夹buildffmpeg/ffmpeg,放在这个下面。 然后`cd ffmpeg`进入ffmpeg 使用git命令 拉取远程的 origin/release/4.1到本地 git checkout -...

tuke_tuke的博客 1019

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Mac系统编译ffmpeg

1.Mac系统版本10.14.6 2.需要的文件ffmpeg,下载地址http://ffmpeg.org/ 3.需要的NDK版本,要求比较旧的版本,因为旧的版本是使用gcc编译的,新的版本是clang编译的 NDK的下载地址:参考https://www.jianshu.com/p/c5b59cbe65f7 4.Mac解压NDK . bin文件 1.获取文件权限 chmod a+x a...

qq_29342787的博客 3414

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

FFmpeg系列(一)-Mac环境下使用NDK编译FFmpeg

如果需要做音视频相关的内容,必然绕不开的一个东东就是FFmpeg。它是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。总之FFmpeg是处理音视频非常强大的一个...

whurs的专栏 829
上一篇: Swift UI控件 --> UITableView
下一篇: 使用Ghost还原系统为什么容易出问题?
h怀说
博客等级 码龄13年 0粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值