我是靠谱客的博主 笨笨路灯,这篇文章主要介绍ubuntu编译--ffmpeg--android,现在分享给大家,希望可以做个参考。

开始尝试ndk-r16、ndk-r17 发现解决一个错误,后面接着错误。最终还是选择了 ndk-r15,仅需要解决下面的 r15c问题3: ,解决了就编译过了

包的准备

ndk包 (下载老版本的-我这边下载的是r15,因为新版本的arm-linux-androideabi-gcc被裁剪掉了):

复制代码
1
2
https://developer.android.google.cn/ndk/downloads/older_releases

ffmpeg源码:

复制代码
1
2
http://ffmpeg.org/download.html

配置并开始编译

r17c报错

复制代码
1
2
3
4
TOOLCHAIN:/usr/ndk/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 /usr/ndk/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-clang is unable to create an executable file. C compiler test failed.

解决方法:

复制代码
1
2
3
4
5
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- --extra-cflags="-Os -fpic $ADDI_CFLAGS" 同时也要确认 /usr/ndk/android-ndk-r15c/toolchains 路径是否正确

r16b报错2

复制代码
1
2
3
.9.x/include/stdint.h:9:26: fatal error: stdint.h: No such file or directory # include_next <stdint.h>

解决方法:

复制代码
1
2
3
在 --extra-cflags= 配置增加 -isysroot $NDK/sysroot 就好了 --extra-cflags= "... -isysroot $NDK/sysroot"

r15c问题3:

复制代码
1
2
3
ibavformat/udp.c:296:28: error: request for member 's_addr' in something not a structure or union mreqs.imr_multiaddr.s_addr = ((struct sockaddr_in *)addr)->sin_addr.s_addr;

解决方法:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
然后修改 udp.c 中struct ip_mreq_source mreqs; 为struct my_ip_mreq_source mreqs; udp.c // struct ip_mreq_source mreqs; struct my_ip_mreq_source mreqs; ip.h struct my_ip_mreq_source { /* IP multicast address of group. */ struct in_addr imr_multiaddr; /* IP address of interface. */ struct in_addr imr_interface; /* IP address of source. */ struct in_addr imr_sourceaddr; };

编译配置文件

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/bin/bash export NDK=/usr/ndk/android-ndk-r15c export SYSROOT=$NDK/platforms/android-19/arch-arm/ export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 echo "$TOOLCHAIN/bin/arm-linux-androideabi-" function build_one { ./configure --prefix=$PREFIX --enable-shared --disable-static --disable-doc --disable-ffplay --disable-ffprobe --disable-doc --disable-symver --enable-protocol=concat --enable-protocol=file --enable-muxer=mp4 --enable-demuxer=mpegts --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- --target-os=linux --arch=arm --enable-cross-compile --sysroot=$SYSROOT --extra-cflags="-Os -fpic $ADDI_CFLAGS" --extra-ldflags="$ADDI_LDFLAGS" $ADDITIONAL_CONFIGURE_FLAG make clean all make -j3 make install } sed -i '' 's/HAVE_STRUCT_IP_MREQ_SOURCE 1/HAVE_STRUCT_IP_MREQ_SOURCE 0/g' config.h CPU=arm PREFIX=$(pwd)/android/$CPU ADDI_CFLAGS="-marm" build_one

configure的修改

这是也是参考别的地方的,不过也记录下吧

复制代码
1
2
3
4
5
6
7
8
9
10
# SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)' # LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"' # SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)' # SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)' SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(SLIBNAME)-$(LIBMAJOR)$(SLIBSUF)' LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"' SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)' SLIB_INSTALL_LINKS='$(SLIBNAME)'

最后

以上就是笨笨路灯最近收集整理的关于ubuntu编译--ffmpeg--android的全部内容,更多相关ubuntu编译--ffmpeg--android内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(97)

评论列表共有 0 条评论

立即
投稿
返回
顶部