【Android RTMP】音频数据采集编码 ( 音频数据采集编码 | AAC 高级音频编码 | FAAC 编码器 | Ubuntu 交叉编译 FAAC 编码器 )(二)

简介: 【Android RTMP】音频数据采集编码 ( 音频数据采集编码 | AAC 高级音频编码 | FAAC 编码器 | Ubuntu 交叉编译 FAAC 编码器 )(二)

四、 Ubuntu 18.04.4 交叉编译 FAAC 编码器


1 . 将下载的 FAAC 编码器源码拷贝到 Ubuntu 的 /root/rtmp 目录下 ;



2 . 解压源码 :


$ tar xvf faac-1.29.9.2.tar.gz



3 . 查看源码路径 : 该源码中也有 configure 脚本 , 用于配置生成 Makefile 文件 ;


root@octopus:~/rtmp# cd faac-1.29.9.2
root@octopus:~/rtmp/faac-1.29.9.2# ls
aclocal.m4  ChangeLog  compile       config.h.in  configure     COPYING  docs      include  install-sh  ltmain.sh    Makefile.in  NEWS    TODO
AUTHORS     common     config.guess  config.sub   configure.ac  depcomp  frontend  INSTALL  libfaac     Makefile.am  missing      README




4 . 查看 configure 帮助信息 : 执行 ./configure --help 命令 , 可以查看编译配置信息 ;


$ ./configure --help
# 默认情况下, 编译 FAAC 时, 会同时编译静态库和动态库, Android 交叉编译推荐只编译静态库
--enable-shared[=PKGS]  build shared libraries [default=yes]
--enable-static[=PKGS]  build static libraries [default=yes]
# Android 中使用动态库时, 必须指定 pic, 表示编码出与位置无关的代码段
--with-pic[=PKGS]       try to use only PIC/non-PIC objects [default=use
                        both]



5 . 交叉编译工具链 :



① 其它开源库的惯例 : 在 FFMPEG 和 x264 交叉编译时 , 都指定了 --cross-prefix 交叉编译工具链前缀 ;


② FAAC 中指定交叉编译工具链的方法 : 在 FAAC 中没有提供该配置 , 那就只能通过环境变量设置 , 将交叉编译工具链的 gcc 设置成环境变量 ;


③ 解析说明 FAAC 中的环境变量 :


Some influential environment variables:
  # C 编码器命令行, 即 gcc, 这里可以直接指定交叉编译工具链的 gcc
  CC          C compiler command
  # 指定传递给 gcc 的参数
  CFLAGS      C compiler flags
  # 传递给链接器的参数
  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
              nonstandard directory <lib dir>
  # 传递给链接器的库
  LIBS        libraries to pass to the linker, e.g. -l<library>
  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
              you have headers in a nonstandard directory <include dir>
  # C++ 编译器
  CXX         C++ compiler command
  # C++ 编译器参数
  CXXFLAGS    C++ compiler flags
  LT_SYS_LIBRARY_PATH
              User-defined run-time library search path.
  CPP         C preprocessor
  CXXCPP      C++ preprocessor



6 . 交叉编译脚本 : 写一个 Shell 脚本 , 辅助交叉编译 FAAC 静态库 ;


参考之前的 FFMPEG 和 x264 的 Shell 编译脚本 ;


版本注意事项 : 基于 android-17 版本进行编译, Android Studio 开发时可以将最小兼容版本配置到 17 ;


#!/bin/bash
# NDK 根目录
NDK_ROOT=/root/NDK/android-ndk-r17c
# TOOLCHAIN 变量指向 gcc g++ 等交叉编译工具所在的目录
TOOLCHAIN=$NDK_ROOT/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
# 具体的交叉编译工具链前缀
CROSS_COMPILE=$TOOLCHAIN/bin/arm-linux-androideabi
# gcc 编译器参数, 这里指定使用 android-17 版本的库进行编译
FLAGS="-isysroot $NDK_ROOT/sysroot -isystem $NDK_ROOT/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=17 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb -Wa,--noexecstack -Wformat -Werror=format-security -std=c++11  -O0  -fPIC"
# 编译结果输出路径
# 注意这里不能使用 ./android/armeabi-v7a, 报错 error: expected an absolute directory name
# 改成绝对路径, 或者使用下面的方法
PREFIX=`pwd`/android/armeabi-v7a
# FAAC 中没有指定交叉编译工具链的选项, 只能在此处通过环境变量的方式进行指定
# 这里指定使用 android-17 版本的库进行编译
export CC="$CROSS_COMPILE-gcc --sysroot=$NDK_ROOT/platforms/android-17/arch-arm"
# 指定 gcc 编译器的参数
export CFLAGS="$FLAGS"
# 配置 Makefile 生成规则
./configure \
--prefix=$PREFIX \
--host=arm-linux \
--with-pic \
--enable-shared=no  
# 清除之前的编译内容
make clean
# 开启新的 FFMPEG 编译安装过程
make install



7 . 执行编译脚本 :


# 赋予 build.sh 脚本 执行权限
$ chmod -R 777 build.sh
# 执行编译脚本
$ ./build.sh


8 . 编译完毕 :

image.png



root@octopus:~/rtmp/faac-1.29.9.2# ls
aclocal.m4  build.sh   compile       config.h.in    config.sub    COPYING  frontend  install-sh  ltmain.sh    Makefile.in  README
android     ChangeLog  config.guess  config.log     configure     depcomp  include   libfaac     Makefile     missing      stamp-h1
AUTHORS     common     config.h      config.status  configure.ac  docs     INSTALL   libtool     Makefile.am  NEWS         TODO
root@octopus:~/rtmp/faac-1.29.9.2# cd android/
root@octopus:~/rtmp/faac-1.29.9.2/android# tree
.
└── armeabi-v7a
    ├── bin
    │   └── faac
    ├── include
    │   ├── faaccfg.h
    │   └── faac.h
    ├── lib
    │   ├── libfaac.a
    │   └── libfaac.la
    └── share
        └── man
            └── man1
                └── faac.1
7 directories, 6 files
root@octopus:~/rtmp/faac-1.29.9.2/android#



目录
相关文章
|
开发框架 Android开发 iOS开发
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
396 3
|
安全 API 开发工具
Android平台RTMP推送|轻量级RTSP服务如何实现麦克风|扬声器声音采集切换
Android平台扬声器播放声音的采集,在无纸化同屏等场景下,意义很大,早期低版本的Android设备,是没法直接采集扬声器audio的(从Android 10开始支持),所以,如果需要采集扬声器audio,需要先做系统版本判断,添加相应的权限。
448 0
|
编解码 开发工具 Android开发
Android平台实现屏幕录制(屏幕投影)|音频播放采集|麦克风采集并推送RTMP或轻量级RTSP服务
Android平台屏幕采集、音频播放声音采集、麦克风采集编码打包推送到RTMP和轻量级RTSP服务的相关技术实现,做成高稳定低延迟的同屏系统,还需要有配套好的RTMP、RTSP直播播放器
414 1
|
XML IDE 开发工具
🔧Android Studio高级技巧大公开!效率翻倍,编码不再枯燥无味!🛠️
【9月更文挑战第11天】在软件开发领域,Android Studio凭借其强大的功能成为Android开发者的首选IDE。本文将揭示一些提升开发效率的高级技巧,包括自定义代码模板、重构工具、高级调试技巧及多模块架构。通过对比传统方法,这些技巧不仅能简化编码流程,还能显著提高生产力。例如,自定义模板可一键插入常用代码块;重构工具能智能分析并安全执行代码更改;高级调试技巧如条件断点有助于快速定位问题;多模块架构则提升了大型项目的可维护性和团队协作效率。掌握这些技巧,将使你的开发之旅更加高效与愉悦。
274 5
|
Web App开发 网络协议 Android开发
Android平台一对一音视频通话方案大比拼:WebRTC VS RTMP VS RTSP,谁才是王者?
【9月更文挑战第4天】本文详细对比了在Android平台上实现一对一音视频通话时常用的WebRTC、RTMP及RTSP三种技术方案。从技术原理、性能表现与开发难度等方面进行了深入分析,并提供了示例代码。WebRTC适合追求低延迟和高质量的场景,但开发成本较高;RTMP和RTSP则在简化开发流程的同时仍能保持较好的传输效果,适用于不同需求的应用场景。
1288 2
|
Java Android开发 芯片
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
本文介绍了如何将基于全志H713芯片的AOSP Android源码导入Android Studio以解决编译和编码问题,通过操作步骤的详细说明,展示了在Android Studio中利用代码提示和补全功能快速定位并修复编译错误的方法。
1406 0
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
|
数据采集 Android开发 索引
【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )(二)
【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )(二)
717 0
【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )(二)
|
数据采集 存储 传感器
【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )(一)
【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )(一)
433 0
【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )(一)
|
数据采集 传感器 编解码
【Android RTMP】音频数据采集编码 ( FAAC 头文件与静态库拷贝到 AS | CMakeList.txt 配置 FAAC | AudioRecord 音频采样 PCM 格式 )(一)
【Android RTMP】音频数据采集编码 ( FAAC 头文件与静态库拷贝到 AS | CMakeList.txt 配置 FAAC | AudioRecord 音频采样 PCM 格式 )(一)
366 0
【Android RTMP】音频数据采集编码 ( FAAC 头文件与静态库拷贝到 AS | CMakeList.txt 配置 FAAC | AudioRecord 音频采样 PCM 格式 )(一)
|
数据采集 传感器 编解码
【Android RTMP】音频数据采集编码 ( 音频数据采集编码 | AAC 高级音频编码 | FAAC 编码器 | Ubuntu 交叉编译 FAAC 编码器 )(一)
【Android RTMP】音频数据采集编码 ( 音频数据采集编码 | AAC 高级音频编码 | FAAC 编码器 | Ubuntu 交叉编译 FAAC 编码器 )(一))
362 0
【Android RTMP】音频数据采集编码 ( 音频数据采集编码 | AAC 高级音频编码 | FAAC 编码器 | Ubuntu 交叉编译 FAAC 编码器 )(一)

热门文章

最新文章